]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2009-12-07 Colin Watson <cjwatson@ubuntu.com>
authorColin Watson <cjwatson@ubuntu.com>
Mon, 7 Dec 2009 16:46:24 +0000 (16:46 +0000)
committerColin Watson <cjwatson@ubuntu.com>
Mon, 7 Dec 2009 16:46:24 +0000 (16:46 +0000)
* configure.ac: Check for vasprintf.
* util/misc.c (asprintf): Move allocation from here ...
(vasprintf): ... to here.  New function.
(xasprintf): New function.
* include/grub/util/misc.h (vasprintf, xasprintf): Add
prototypes.
* util/getroot.c (grub_util_get_grub_dev): Use xasprintf.
* util/grub-mkfont.c (write_font): Likewise.
* util/grub-probe.c (probe): Likewise.
* util/hostdisk.c (make_device_name): Likewise.

ChangeLog
configure.ac
include/grub/util/misc.h
util/getroot.c
util/grub-editenv.c
util/grub-mkfont.c
util/grub-probe.c
util/hostdisk.c
util/misc.c

index 479098cda57f519a74a1295d26bff7dfa397bb09..5acbe49453fe4689c2b1361efe28129e1dbb2104 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2009-12-07  Colin Watson  <cjwatson@ubuntu.com>
+
+       * configure.ac: Check for vasprintf.
+       * util/misc.c (asprintf): Move allocation from here ...
+       (vasprintf): ... to here.  New function.
+       (xasprintf): New function.
+       * include/grub/util/misc.h (vasprintf, xasprintf): Add
+       prototypes.
+       * util/getroot.c (grub_util_get_grub_dev): Use xasprintf.
+       * util/grub-mkfont.c (write_font): Likewise.
+       * util/grub-probe.c (probe): Likewise.
+       * util/hostdisk.c (make_device_name): Likewise.
+
 2009-12-06  David S. Miller  <davem@sunset.davemloft.net>
 
        * disk/ieee1275/ofdisk.c (grub_ofdisk_iterate): Recognize
index b654adeed20f6972bb8a7d7e53296fda796a0b4f..474de70be41117817934c48765f5c37de546cb6c 100644 (file)
@@ -194,7 +194,7 @@ else
 fi
 
 # Check for functions.
-AC_CHECK_FUNCS(posix_memalign memalign asprintf)
+AC_CHECK_FUNCS(posix_memalign memalign asprintf vasprintf)
 
 # For grub-mkisofs
 AC_HEADER_MAJOR
index d0184d4169595f7d4acf942be77eb56e41e99b65..09108547c45f96e4e97c487f0f7063fd73f45a33 100644 (file)
@@ -21,6 +21,7 @@
 
 #include <stdlib.h>
 #include <stdio.h>
+#include <stdarg.h>
 #include <setjmp.h>
 #include <unistd.h>
 
@@ -57,12 +58,20 @@ void grub_util_write_image (const char *img, size_t size, FILE *out);
 void grub_util_write_image_at (const void *img, size_t size, off_t offset,
                               FILE *out);
 
+#ifndef HAVE_VASPRINTF
+
+int vasprintf (char **buf, const char *fmt, va_list ap);
+
+#endif
+
 #ifndef  HAVE_ASPRINTF
 
 int asprintf (char **buf, const char *fmt, ...);
 
 #endif
 
+char *xasprintf (const char *fmt, ...);
+
 #ifdef __MINGW32__
 
 #define fseeko fseeko64
index a3c03d0b04b696cb06366058eb96d9173238d892..c6c22996796b413fd38df1bfb036a94c472a49a3 100644 (file)
@@ -546,7 +546,7 @@ grub_util_get_grub_dev (const char *os_dev)
          if (q)
            *q = ',';
 
-         asprintf (&grub_dev, "md%s", p);
+         grub_dev = xasprintf ("md%s", p);
          free (p);
        }
       else if (os_dev[7] == '/' && os_dev[8] == 'd')
@@ -561,7 +561,7 @@ grub_util_get_grub_dev (const char *os_dev)
          if (q)
            *q = ',';
 
-         asprintf (&grub_dev, "md%s", p);
+         grub_dev = xasprintf ("md%s", p);
          free (p);
        }
       else if (os_dev[7] >= '0' && os_dev[7] <= '9')
@@ -574,7 +574,7 @@ grub_util_get_grub_dev (const char *os_dev)
          if (q)
            *q = ',';
 
-         asprintf (&grub_dev, "md%s", p);
+         grub_dev = xasprintf ("md%s", p);
          free (p);
        }
       else if (os_dev[7] == '/' && os_dev[8] >= '0' && os_dev[8] <= '9')
@@ -587,7 +587,7 @@ grub_util_get_grub_dev (const char *os_dev)
          if (q)
            *q = ',';
 
-         asprintf (&grub_dev, "md%s", p);
+         grub_dev = xasprintf ("md%s", p);
          free (p);
        }
       else
index 842c5a103b8c5b3659d5290675ae3f895fa4dfdd..68fb23b158b3dd258941a2ef6a1c1f036967874d 100644 (file)
@@ -107,7 +107,7 @@ create_envblk_file (const char *name)
   if (! buf)
     grub_util_error ("out of memory");
 
-  asprintf (&namenew, "%s.new", name);
+  namenew = xasprintf ("%s.new", name);
   fp = fopen (namenew, "wb");
   if (! fp)
     grub_util_error ("cannot open the file %s", namenew);
index 40d145fd375bc049c4ac62e589d38731cd4a82fa..9775e080319d580c795f0a92a461effa594374ef 100644 (file)
@@ -366,8 +366,8 @@ write_font (struct grub_font_info *font_info, char *output_file)
   if (! style_name[0])
     strcpy (style_name, " Regular");
 
-  asprintf (&font_name, "%s %s %d", font_info->name, &style_name[1],
-           font_info->size);
+  font_name = xasprintf ("%s %s %d", font_info->name, &style_name[1],
+                        font_info->size);
 
   write_string_section ("NAME", font_name, &offset, file);
   write_string_section ("FAMI", font_info->name, &offset, file);
index 2b9784123732a4ccd11173157a45f343642830b9..6d421445c861acb2e705e727c9b3d7dea2f51753 100644 (file)
@@ -254,7 +254,7 @@ probe (const char *path, char *device_name)
              filebuf_via_sys = grub_util_read_image (path);
 
              rel_path = make_system_path_relative_to_its_root (path);
-             asprintf (&grub_path, "(%s)%s", drive_name, rel_path);
+             grub_path = xasprintf ("(%s)%s", drive_name, rel_path);
              free (rel_path);
              grub_util_info ("reading %s via GRUB facilities", grub_path);
              file = grub_file_open (grub_path);
index 04c412300aca2e6490794c1796cd585d4063f6c0..11caaf407c1644838dda635a119d206a4444845d 100644 (file)
@@ -679,14 +679,14 @@ make_device_name (int drive, int dos_part, int bsd_part)
   char *bsd_part_str = NULL;
 
   if (dos_part >= 0)
-    asprintf (&dos_part_str, ",%d", dos_part + 1);
+    dos_part_str = xasprintf (",%d", dos_part + 1);
 
   if (bsd_part >= 0)
-    asprintf (&bsd_part_str, ",%c", dos_part + 'a');
+    bsd_part_str = xasprintf (",%c", dos_part + 'a');
 
-  asprintf (&ret, "%s%s%s", map[drive].drive,
-           dos_part_str ? : "",
-           bsd_part_str ? : "");
+  ret = xasprintf ("%s%s%s", map[drive].drive,
+                   dos_part_str ? : "",
+                   bsd_part_str ? : "");
 
   if (dos_part_str)
     free (dos_part_str);
index d46051efe36ddd1d5ff33ae3b73d59f543a138b8..d75aa095248e6fd4b4010e9a5dc8fb3597726ce7 100644 (file)
@@ -30,6 +30,7 @@
 #include <sys/time.h>
 #include <unistd.h>
 #include <time.h>
+#include <errno.h>
 
 #include <grub/kernel.h>
 #include <grub/misc.h>
@@ -370,6 +371,19 @@ grub_arch_sync_caches (void *address __attribute__ ((unused)),
 {
 }
 
+#ifndef HAVE_VASPRINTF
+
+int
+vasprintf (char **buf, const char *fmt, va_list ap)
+{
+  /* Should be large enough.  */
+  *buf = xmalloc (512);
+
+  return vsprintf (*buf, fmt, ap);
+}
+
+#endif
+
 #ifndef  HAVE_ASPRINTF
 
 int
@@ -378,11 +392,8 @@ asprintf (char **buf, const char *fmt, ...)
   int status;
   va_list ap;
 
-  /* Should be large enough.  */
-  *buf = xmalloc (512);
-
   va_start (ap, fmt);
-  status = vsprintf (*buf, fmt, ap);
+  status = vasprintf (*buf, fmt, ap);
   va_end (ap);
 
   return status;
@@ -390,6 +401,23 @@ asprintf (char **buf, const char *fmt, ...)
 
 #endif
 
+char *
+xasprintf (const char *fmt, ...)
+{
+  va_list ap;
+  char *result;
+
+  va_start (ap, fmt);
+  if (vasprintf (&result, fmt, ap) < 0)
+    {
+      if (errno == ENOMEM)
+       grub_util_error ("out of memory");
+      return NULL;
+    }
+
+  return result;
+}
+
 #ifdef __MINGW32__
 
 void sync (void)