]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2009-08-14 Vladimir Serbinenko <phcoder@gmail.com>
authorphcoder <phcoder@localhost>
Fri, 14 Aug 2009 13:42:03 +0000 (13:42 +0000)
committerphcoder <phcoder@localhost>
Fri, 14 Aug 2009 13:42:03 +0000 (13:42 +0000)
Handle group offset on UFS1.

* fs/ufs.c (grub_ufs_sblock): New field 'cylg_mask'.
(grub_ufs_read_inode) [!MODE_UFS2]: handle cylg_offset and cylg_mask.

ChangeLog
fs/ufs.c

index 0cae2ec9d38492b7dd00efd04fe8d5d6f8d674b7..c808913a9dbde0478c381baf4d3b271f16889332 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2009-08-14  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       Handle group offset on UFS1.
+
+       * fs/ufs.c (grub_ufs_sblock): New field 'cylg_mask'.
+       (grub_ufs_read_inode) [!MODE_UFS2]: handle cylg_offset and cylg_mask.
+
 2009-08-14  Vladimir Serbinenko  <phcoder@gmail.com>
 
        Split ufs.mod into ufs1.mod and ufs2.mod.
index 75398617dd03faa05ff1376a5b8765df8b74491a..797a45d134ac2478ab79aa0a61bdabeaf72ab176 100644 (file)
--- a/fs/ufs.c
+++ b/fs/ufs.c
@@ -88,7 +88,7 @@ struct grub_ufs_sblock
 
   /* The start of the cylinder group.  */
   grub_uint32_t cylg_offset;
-  grub_uint8_t unused3[4];
+  grub_uint32_t cylg_mask;
 
   grub_uint32_t mtime;
   grub_uint8_t unused4[12];
@@ -360,6 +360,11 @@ grub_ufs_read_inode (struct grub_ufs_data *data, int ino, char *inode)
   /* The first block of the group.  */
   int grpblk = group * (grub_le_to_cpu32 (sblock->frags_per_group));
 
+#ifndef MODE_UFS2
+  grpblk += grub_le_to_cpu32 (sblock->cylg_offset)
+    * (group & (~grub_le_to_cpu32 (sblock->cylg_mask)));
+#endif
+
   if (!inode)
     {
       inode = (char *) &data->inode;