]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/fs/nilfs2.c: Remove variable length arrays.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 20 Oct 2013 14:17:41 +0000 (16:17 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 20 Oct 2013 14:17:41 +0000 (16:17 +0200)
Increases xfs.mod by 24 bytes (but decreases by 115 compressed when
compressed).

ChangeLog
grub-core/fs/nilfs2.c

index 5b0412272e041bb299b02fd8e879c1e892ce564e..63dbdb333596437b76ae13b3efe5d021f6cc43fb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2013-10-20  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/fs/nilfs2.c: Remove variable length arrays.
+       Increases xfs.mod by 24 bytes (but decreases by 115 compressed when
+       compressed).
+
 2013-10-20  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/fs/xfs.c: Remove variable length arrays.
index 3f28bd7fdfd038527e75030618ad9ece3006bd6b..1318f214076d941525a475d678847ba49a4d42d9 100644 (file)
@@ -136,6 +136,7 @@ struct grub_nilfs2_dir_entry
 {
   grub_uint64_t inode;
   grub_uint16_t rec_len;
+#define MAX_NAMELEN 255
   grub_uint8_t name_len;
   grub_uint8_t file_type;
 #if 0                          /* followed by file name. */
@@ -505,9 +506,13 @@ grub_nilfs2_btree_lookup (struct grub_nilfs2_data *data,
                          grub_uint64_t key, int need_translate)
 {
   struct grub_nilfs2_btree_node *node;
-  GRUB_PROPERLY_ALIGNED_ARRAY (block, NILFS2_BLOCK_SIZE (data));
+  void *block;
   grub_uint64_t ptr;
-  int level, found, index;
+  int level, found = 0, index;
+
+  block = grub_malloc (NILFS2_BLOCK_SIZE (data));
+  if (!block)
+    return -1;
 
   node = grub_nilfs2_btree_get_root (inode);
   level = grub_nilfs2_btree_get_level (node);
@@ -522,14 +527,14 @@ grub_nilfs2_btree_lookup (struct grub_nilfs2_data *data,
       grub_nilfs2_btree_get_nonroot_node (data, ptr, block);
       if (grub_errno)
        {
-         return -1;
+         goto fail;
        }
       node = (struct grub_nilfs2_btree_node *) block;
 
       if (node->bn_level != level)
        {
          grub_error (GRUB_ERR_BAD_FS, "btree level mismatch\n");
-         return -1;
+         goto fail;
        }
 
       if (!found)
@@ -546,14 +551,19 @@ grub_nilfs2_btree_lookup (struct grub_nilfs2_data *data,
       else
        {
          grub_error (GRUB_ERR_BAD_FS, "btree corruption\n");
-         return -1;
+         goto fail;
        }
     }
 
+  grub_free (block);
+
   if (!found)
     return -1;
 
   return ptr;
+ fail:
+  grub_free (block);
+  return -1;
 }
 
 static inline grub_uint64_t
@@ -896,7 +906,7 @@ grub_nilfs2_iterate_dir (grub_fshelp_node_t dir,
 
       if (dirent.name_len != 0)
        {
-         char filename[dirent.name_len + 1];
+         char filename[MAX_NAMELEN + 1];
          struct grub_fshelp_node *fdiro;
          enum grub_fshelp_filetype type = GRUB_FSHELP_UNKNOWN;