]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2009-11-23 Robert Millan <rmh.grub@aybabtu.com>
authorRobert Millan <rmh@aybabtu.com>
Mon, 23 Nov 2009 20:30:56 +0000 (20:30 +0000)
committerRobert Millan <rmh@aybabtu.com>
Mon, 23 Nov 2009 20:30:56 +0000 (20:30 +0000)
        * util/hostdisk.c: Include `<grub/i18n.h>'.
        (find_grub_drive): Use ARRAY_SIZE for map size calculation.
        (make_device_name): Rewrite using asprintf.
        (convert_system_partition_to_system_disk): Replace 0 with NULL.
        (find_system_device): If a device is not found, generate one just
        by reusing the OS path name.
        (read_device_map): Make it permissible for device.map not to exist.

ChangeLog
util/hostdisk.c

index ceeb1081b70eda76751878ff86d8fefc59ef7e09..17b7709681316ba7ad778cdddaf22a316c1e9cd5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2009-11-23  Robert Millan  <rmh.grub@aybabtu.com>
+
+       * util/hostdisk.c: Include `<grub/i18n.h>'.
+       (find_grub_drive): Use ARRAY_SIZE for map size calculation.
+       (make_device_name): Rewrite using asprintf.
+       (convert_system_partition_to_system_disk): Replace 0 with NULL.
+       (find_system_device): If a device is not found, generate one just
+       by reusing the OS path name.
+       (read_device_map): Make it permissible for device.map not to exist.
+
 2009-11-23  Robert Millan  <rmh.grub@aybabtu.com>
 
        * script/sh/execute.c: Move from here ...
index e1058a100110694e7126b8d732526e9357a83feb..04c412300aca2e6490794c1796cd585d4063f6c0 100644 (file)
@@ -25,6 +25,7 @@
 #include <grub/util/misc.h>
 #include <grub/util/hostdisk.h>
 #include <grub/misc.h>
+#include <grub/i18n.h>
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -127,7 +128,7 @@ find_grub_drive (const char *name)
 
   if (name)
     {
-      for (i = 0; i < sizeof (map) / sizeof (map[0]); i++)
+      for (i = 0; i < ARRAY_SIZE (map); i++)
        if (map[i].drive && ! strcmp (map[i].drive, name))
          return i;
     }
@@ -565,7 +566,10 @@ read_device_map (const char *dev_map)
 
   fp = fopen (dev_map, "r");
   if (! fp)
-    grub_util_error ("Cannot open `%s'", dev_map);
+    {
+      grub_util_info (_("Cannot open `%s'"), dev_map);
+      return;
+    }
 
   while (fgets (buf, sizeof (buf), fp))
     {
@@ -670,34 +674,27 @@ grub_util_biosdisk_fini (void)
 static char *
 make_device_name (int drive, int dos_part, int bsd_part)
 {
-  int len = strlen(map[drive].drive);
-  char *p;
+  char *ret;
+  char *dos_part_str = NULL;
+  char *bsd_part_str = NULL;
 
   if (dos_part >= 0)
-    {
-      /* Add in char length of dos_part+1 */
-      int tmp = dos_part + 1;
-      len++;
-      while ((tmp /= 10) != 0)
-       len++;
-    }
+    asprintf (&dos_part_str, ",%d", dos_part + 1);
+
   if (bsd_part >= 0)
-    len += 2;
+    asprintf (&bsd_part_str, ",%c", dos_part + 'a');
 
-  /* Length to alloc is: char length of map[drive].drive, plus
-   *                     char length of (dos_part+1) or of bsd_part, plus
-   *                     2 for the comma and a null/end of string (\0)
-   */
-  p = xmalloc (len + 2);
-  sprintf (p, "%s", map[drive].drive);
+  asprintf (&ret, "%s%s%s", map[drive].drive,
+           dos_part_str ? : "",
+           bsd_part_str ? : "");
 
-  if (dos_part >= 0)
-    sprintf (p + strlen (p), ",%d", dos_part + 1);
+  if (dos_part_str)
+    free (dos_part_str);
 
-  if (bsd_part >= 0)
-    sprintf (p + strlen (p), ",%c", bsd_part + 'a');
+  if (bsd_part_str)
+    free (bsd_part_str);
 
-  return p;
+  return ret;
 }
 
 static char *
@@ -706,7 +703,7 @@ convert_system_partition_to_system_disk (const char *os_dev)
 #if defined(__linux__)
   char *path = xmalloc (PATH_MAX);
   if (! realpath (os_dev, path))
-    return 0;
+    return NULL;
 
   if (strncmp ("/dev/", path, 5) == 0)
     {
@@ -876,22 +873,29 @@ device_is_wholedisk (const char *os_dev)
 static int
 find_system_device (const char *os_dev)
 {
-  int i;
+  unsigned int i;
   char *os_disk;
 
   os_disk = convert_system_partition_to_system_disk (os_dev);
   if (! os_disk)
     return -1;
 
-  for (i = 0; i < (int) (sizeof (map) / sizeof (map[0])); i++)
-    if (map[i].device && strcmp (map[i].device, os_disk) == 0)
+  for (i = 0; i < ARRAY_SIZE (map); i++)
+    if (! map[i].device)
+      break;
+    else if (strcmp (map[i].device, os_disk) == 0)
       {
        free (os_disk);
        return i;
       }
 
-  free (os_disk);
-  return -1;
+  if (i == ARRAY_SIZE (map))
+    grub_util_error (_("device count exceeds limit"));
+
+  map[i].device = os_disk;
+  map[i].drive = xstrdup (os_disk);
+
+  return i;
 }
 
 char *