]> git.proxmox.com Git - grub2.git/blobdiff - fs/sfs.c
2009-02-27 Krzysztof Smiechowicz <deadwood@wp.pl>
[grub2.git] / fs / sfs.c
index 910bbf2c85ee91020c311da5679ac34e6f6e4743..d719e299e66b359dec45ff2f836ea0b680a611b2 100644 (file)
--- a/fs/sfs.c
+++ b/fs/sfs.c
@@ -172,7 +172,7 @@ grub_sfs_read_extent (struct grub_sfs_data *data, unsigned int block,
          return grub_errno;
        }
 
-      for (i = 0; i < grub_be_to_cpu16 (tree->nodes); i++)
+      for (i = grub_be_to_cpu16 (tree->nodes) - 1; i >= 0; i--)
        {
 
 #define EXTNODE(tree, index)                                           \
@@ -180,16 +180,8 @@ grub_sfs_read_extent (struct grub_sfs_data *data, unsigned int block,
                                         + (index) * (tree)->nodesize))
 
          /* Follow the tree down to the leaf level.  */
-         if ((grub_be_to_cpu32 (EXTNODE(tree, i)->key) >= block)
+         if ((grub_be_to_cpu32 (EXTNODE(tree, i)->key) <= block)
              && !tree->leaf)
-           {
-             next = grub_be_to_cpu32 (EXTNODE (tree, i - 1)->data);
-             break;
-           }
-
-         /* In case the last node is reached just use that one, it is
-            the right match.  */
-         if (i + 1 == grub_be_to_cpu16 (tree->nodes) && !tree->leaf)
            {
              next = grub_be_to_cpu32 (EXTNODE (tree, i)->data);
              break;