]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/fs/nilfs2.c (grub_nilfs2_load_sb): Handle grub_disk_read
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 28 Aug 2010 13:25:12 +0000 (15:25 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 28 Aug 2010 13:25:12 +0000 (15:25 +0200)
errors.

ChangeLog
grub-core/fs/nilfs2.c

index 7043faf977984e427c362991c2d0a347383b90c6..dc24ebf009d274018a2d69e58b7e2d11e032ec50 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2010-08-28  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/fs/nilfs2.c (grub_nilfs2_load_sb): Handle grub_disk_read
+       errors.
+
 2010-08-27  Vladimir Serbinenko  <phcoder@gmail.com>
 
        Handle USB pendrives exposed as floppies.
index 8329c01a1f135069b7c6a030980c62d0555d596b..e529775f42d56449802696cea75a4f0ebd3fd99f 100644 (file)
@@ -718,10 +718,13 @@ grub_nilfs2_load_sb (struct grub_nilfs2_data *data)
   grub_uint64_t partition_size;
   int valid[2];
   int swp = 0;
+  grub_err_t err;
 
   /* Read first super block. */
-  grub_disk_read (disk, NILFS_1ST_SUPER_BLOCK, 0,
-                 sizeof (struct grub_nilfs2_super_block), &data->sblock);
+  err = grub_disk_read (disk, NILFS_1ST_SUPER_BLOCK, 0,
+                       sizeof (struct grub_nilfs2_super_block), &data->sblock);
+  if (err)
+    return err;
   /* Make sure if 1st super block is valid.  */
   valid[0] = grub_nilfs2_valid_sb (&data->sblock);
 
@@ -729,17 +732,21 @@ grub_nilfs2_load_sb (struct grub_nilfs2_data *data)
   if (partition_size != GRUB_DISK_SIZE_UNKNOWN)
     {
       /* Read second super block. */
-      grub_disk_read (disk, NILFS_2ND_SUPER_BLOCK (partition_size), 0,
-                     sizeof (struct grub_nilfs2_super_block), &sb2);
-      /* Make sure if 2nd super block is valid.  */
-      valid[1] = grub_nilfs2_valid_sb (&sb2);
+      err = grub_disk_read (disk, NILFS_2ND_SUPER_BLOCK (partition_size), 0,
+                           sizeof (struct grub_nilfs2_super_block), &sb2);
+      if (err)
+       {
+         valid[1] = 0;
+         grub_errno = GRUB_ERR_NONE;
+       }
+      else
+       /* Make sure if 2nd super block is valid.  */
+       valid[1] = grub_nilfs2_valid_sb (&sb2);
     }
   else
     /* 2nd super block may not exist, so it's invalid. */
     valid[1] = 0;
 
-
-
   if (!valid[0] && !valid[1])
     return grub_error (GRUB_ERR_BAD_FS, "not a nilfs2 filesystem");
 
@@ -752,8 +759,7 @@ grub_nilfs2_load_sb (struct grub_nilfs2_data *data)
     grub_memcpy (&data->sblock, &sb2,
                 sizeof (struct grub_nilfs2_super_block));
 
-  grub_errno = GRUB_ERR_NONE;
-  return grub_errno;
+  return GRUB_ERR_NONE;
 }
 
 static struct grub_nilfs2_data *