]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* util/getroot.c (convert_system_partition_to_system_disk) [__APPLE__]:
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Thu, 14 Jun 2012 17:16:30 +0000 (19:16 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Thu, 14 Jun 2012 17:16:30 +0000 (19:16 +0200)
Set is_part appropriately.
(grub_util_biosdisk_get_grub_dev): Use is_part rather than comparing
names. Canonicalize partition without full disk.

ChangeLog
util/getroot.c

index fe284e46b21638c7e870acb3d104a2e3137e18ce..40c63a2d854bfd52dadf334c35db6c6a83e0bbfa 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2012-06-14  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * util/getroot.c (convert_system_partition_to_system_disk) [__APPLE__]:
+       Set is_part appropriately.
+       (grub_util_biosdisk_get_grub_dev): Use is_part rather than comparing
+       names. Canonicalize partition without full disk.
+
 2012-06-13  Vladimir Serbinenko  <phcoder@gmail.com>
 
        Revert usb-quiesce since it's wrong.
index b507f65298fea23c97e06956cb1444155e37926f..cbcd3aa5fa8310a1b5c73bb39ad468cf747365dd 100644 (file)
@@ -2074,7 +2074,11 @@ devmapper_out:
   ptr = ret + sizeof ("/dev/disk") + rdisk - 1;
   while (*ptr >= '0' && *ptr <= '9')
     ptr++;
-  *ptr = 0;
+  if (*ptr)
+    {
+      *is_part = 1;
+      *ptr = 0;
+    }
   return ret;
 #else
 # warning "The function `convert_system_partition_to_system_disk' might not work on your OS correctly."
@@ -2175,8 +2179,10 @@ grub_util_biosdisk_get_grub_dev (const char *os_dev)
 
   drive = find_system_device (os_dev, &st, 1, 1);
   sys_disk = convert_system_partition_to_system_disk (os_dev, &st, &is_part);
+  if (!sys_disk)
+    return 0;
   grub_util_info ("%s is a parent of %s", sys_disk, os_dev);
-  if (grub_strcmp (os_dev, sys_disk) == 0)
+  if (!is_part)
     {
       free (sys_disk);
       return make_device_name (drive, -1, -1);
@@ -2264,11 +2270,15 @@ grub_util_biosdisk_get_grub_dev (const char *os_dev)
           but are really more like disks.  */
        if (grub_errno == GRUB_ERR_UNKNOWN_DEVICE)
          {
+           char *canon;
            grub_util_warn
              (_("disk does not exist, so falling back to partition device %s"),
               os_dev);
 
-           drive = find_system_device (os_dev, &st, 0, 1);
+           canon = canonicalize_file_name (os_dev);
+           drive = find_system_device (canon ? : os_dev, &st, 0, 1);
+           if (canon)
+             free (canon);
            return make_device_name (drive, -1, -1);
          }
        else