]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* util/grub-probe.c (probe): Don't crash on canonicalize_file_name
authorRichard Laager <rlaager@wiktel.com>
Fri, 3 Feb 2012 10:02:06 +0000 (11:02 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Fri, 3 Feb 2012 10:02:06 +0000 (11:02 +0100)
failure.
Put back lost PRINT_DRIVE.

ChangeLog
util/getroot.c
util/grub-probe.c

index df35f12462a9bdc2878e9929f5bc2bfe4b5cfccb..5d675ca6f68237211b2ee4a9d21f08195c0be574 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2012-02-03  Richard Laager <rlaager@wiktel.com>
+
+       * util/grub-probe.c (probe): Don't crash on canonicalize_file_name
+       failure.
+       Put back lost PRINT_DRIVE.
+
 2012-02-03  Richard Laager <rlaager@wiktel.com>
 
        * util/getroot.c (find_root_devices_from_libzfs): Fix compilation error.
index 868c6d8755fe48d7e3bf1aca80df0ecde1672f39..f2ae3e29a77c277b42613889b65bb1efd3cafe05 100644 (file)
@@ -846,10 +846,7 @@ grub_guess_root_devices (const char *dir)
          int root, dm;
          *cur = canonicalize_file_name (tmp);
          if (*cur == NULL)
-           {
-             grub_util_error (_("failed to get canonical path of %s"), tmp);
-             break;
-           }
+           grub_util_error (_("failed to get canonical path of %s"), tmp);
          free (tmp);
          root = (strcmp (*cur, "/dev/root") == 0);
          dm = (strncmp (*cur, "/dev/dm-", sizeof ("/dev/dm-") - 1) == 0);
index 1d1a82230b3856ed2562d2379fadb3300b7d3492..ce38f9c9f5889f3a64b48594fac56dd26018c4dc 100644 (file)
@@ -323,6 +323,8 @@ probe (const char *path, char **device_names, char delim)
   if (path != NULL)
     {
       grub_path = canonicalize_file_name (path);
+      if (! grub_path)
+       grub_util_error (_("failed to get canonical path of %s"), path);
       device_names = grub_guess_root_devices (grub_path);
       free (grub_path);
     }
@@ -358,6 +360,16 @@ probe (const char *path, char **device_names, char delim)
     }
   *curdrive = 0;
 
+  if (print == PRINT_DRIVE)
+    {
+      for (curdrive = drives_names; *curdrive; curdrive++)
+       {
+         printf ("(%s)", *curdrive);
+         putchar (delim);
+       }
+      goto end;
+    }
+
   if (print == PRINT_FS || print == PRINT_FS_UUID
       || print == PRINT_FS_LABEL)
     {