]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/kern/disk.c (grub_disk_write): Use malloc/free instead of
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 20 Oct 2013 22:10:34 +0000 (00:10 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 20 Oct 2013 22:10:34 +0000 (00:10 +0200)
variable length arrays.

Saves 50 bytes on compressed image.

ChangeLog
grub-core/kern/disk.c

index 9339da619f0e2021e64b309869bb5b8bc8d136a4..48b373e03ab96eda15fe1bc90c08faed99a90829 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2013-10-20  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/kern/disk.c (grub_disk_write): Use malloc/free instead of
+       variable length arrays.
+
+       Saves 50 bytes on compressed image.
+
 2013-10-20  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/loader/i386/bsd.c: Remove variable length arrays.
index b58158eeb0696736a89ef0a6be3e4ab40a4885ea..b0b2715124b1b44217dbc4b520c2bd9a37ec7ee4 100644 (file)
@@ -635,10 +635,14 @@ grub_disk_write (grub_disk_t disk, grub_disk_addr_t sector,
       if (real_offset != 0 || (size < (1U << disk->log_sector_size)
                               && size != 0))
        {
-         char tmp_buf[1 << disk->log_sector_size];
+         char *tmp_buf;
          grub_size_t len;
          grub_partition_t part;
 
+         tmp_buf = grub_malloc (1 << disk->log_sector_size);
+         if (!tmp_buf)
+           return grub_errno;
+
          part = disk->partition;
          disk->partition = 0;
          if (grub_disk_read (disk, sector,
@@ -646,6 +650,7 @@ grub_disk_write (grub_disk_t disk, grub_disk_addr_t sector,
              != GRUB_ERR_NONE)
            {
              disk->partition = part;
+             grub_free (tmp_buf);
              goto finish;
            }
          disk->partition = part;
@@ -660,7 +665,12 @@ grub_disk_write (grub_disk_t disk, grub_disk_addr_t sector,
 
          if ((disk->dev->write) (disk, transform_sector (disk, sector),
                                  1, tmp_buf) != GRUB_ERR_NONE)
-           goto finish;
+           {
+             grub_free (tmp_buf);
+             goto finish;
+           }
+
+         grub_free (tmp_buf);
 
          sector += (1 << (disk->log_sector_size - GRUB_DISK_SECTOR_BITS));
          buf = (const char *) buf + len;