]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Make reiserfs label retrieval similar to other *_label functions.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Thu, 3 Nov 2011 13:57:34 +0000 (14:57 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Thu, 3 Nov 2011 13:57:34 +0000 (14:57 +0100)
* grub-core/fs/reiserfs.c (grub_reiserfs_superblock): New field label.
(REISERFS_MAX_LABEL_LENGTH): Removed.
(REISERFS_LABEL_OFFSET): Likewise.
(grub_reiserfs_label): Rewritten.

ChangeLog
grub-core/fs/reiserfs.c

index f6f5eaeebb1863182786ad0da3cc35fba1baa99d..84ad4f9ec5aeb22799efdc765bc31727412af2bd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2011-11-03  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       Make reiserfs label retrieval similar to other *_label functions.
+
+       * grub-core/fs/reiserfs.c (grub_reiserfs_superblock): New field label.
+       (REISERFS_MAX_LABEL_LENGTH): Removed.
+       (REISERFS_LABEL_OFFSET): Likewise.
+       (grub_reiserfs_label): Rewritten.
+
+2011-11-03  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/fs/nilfs2.c (grub_nilfs2_mtime): Use correct superblock
+       field.
+
 2011-11-03  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/fs/zfs/zfs.c (read_device): Support raidz3.
index d5bc52d14b68012378fe57dfd5efd8a21f6a6e47..639de8d741bf335d1b6364c962a60cd4b8aa4846 100644 (file)
@@ -57,8 +57,6 @@ GRUB_MOD_LICENSE ("GPLv3+");
 #define REISERFS_MAGIC_DESC_BLOCK "ReIsErLB"
 /* If the 3rd bit of an item state is set, then it's visible.  */
 #define GRUB_REISERFS_VISIBLE_MASK ((grub_uint16_t) 0x04)
-#define REISERFS_MAX_LABEL_LENGTH 16
-#define REISERFS_LABEL_OFFSET 0x64
 
 #define S_IFLNK 0xA000
 
@@ -109,6 +107,7 @@ struct grub_reiserfs_superblock
   grub_uint32_t inode_generation;
   grub_uint8_t unused[4];
   grub_uint16_t uuid[8];
+  char label[16];
 } __attribute__ ((packed));
 
 struct grub_reiserfs_journal_header
@@ -1323,14 +1322,24 @@ grub_reiserfs_dir (grub_device_t device, const char *path,
 static grub_err_t
 grub_reiserfs_label (grub_device_t device, char **label)
 {
-  *label = grub_malloc (REISERFS_MAX_LABEL_LENGTH);
-  if (*label)
+  struct grub_reiserfs_data *data;
+  grub_disk_t disk = device->disk;
+
+  grub_dl_ref (my_mod);
+
+  data = grub_reiserfs_mount (disk);
+  if (data)
     {
-      grub_disk_read (device->disk,
-                      REISERFS_SUPER_BLOCK_OFFSET / GRUB_DISK_SECTOR_SIZE,
-                      REISERFS_LABEL_OFFSET, REISERFS_MAX_LABEL_LENGTH,
-                      *label);
+      *label = grub_strndup (data->superblock.label,
+                            sizeof (data->superblock.label));
     }
+  else
+    *label = NULL;
+
+  grub_dl_unref (my_mod);
+
+  grub_free (data);
+
   return grub_errno;
 }