]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/fs/minix.c (grub_minix_mount) [MODE_MINIX3]: Treat 0xffff
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 25 Dec 2011 21:44:42 +0000 (22:44 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 25 Dec 2011 21:44:42 +0000 (22:44 +0100)
as 1024 in block size field. Found on one of my test images.
Small optimisation while on it.

ChangeLog
grub-core/fs/minix.c

index c1216c833cb48b2f774814b95401a120a4343778..22860352464297a4c86c708b50b7c8e7680e257c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2011-12-25  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/fs/minix.c (grub_minix_mount) [MODE_MINIX3]: Treat 0xffff
+       as 1024 in block size field. Found on one of my test images.
+       Small optimisation while on it.
+
 2011-12-25  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * docs/grub.texi (Filesystems): Mention SFS as Latin1 filesystem.
index 401883e36d14f47d87c92f666680ccf44539611c..0128f1d8ca3f22ff78527f344e7862130ed8b5a3 100644 (file)
@@ -480,12 +480,18 @@ grub_minix_mount (grub_disk_t disk)
   data->disk = disk;
   data->linknest = 0;
 #ifdef MODE_MINIX3
-  if ((grub_le_to_cpu16 (data->sblock.block_size)
-       & (grub_le_to_cpu16 (data->sblock.block_size) - 1))
-      || grub_le_to_cpu16 (data->sblock.block_size) == 0)
-    goto fail;
-  for (data->log_block_size = 0; (1 << data->log_block_size)
-        < grub_le_to_cpu16 (data->sblock.block_size); data->log_block_size++);
+  /* These tests are endian-independent. No need to byteswap.  */
+  if (data->sblock.block_size == 0xffff)
+    data->log_block_size = 10;
+  else
+    {
+      if ((data->sblock.block_size & (data->sblock.block_size - 1))
+         || data->sblock.block_size == 0)
+       goto fail;
+      for (data->log_block_size = 0; (1 << data->log_block_size)
+            < grub_le_to_cpu16 (data->sblock.block_size);
+          data->log_block_size++);
+    }
 #else
   data->log_block_size = 10;
 #endif