]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Fix a double device name
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Wed, 8 Sep 2010 18:39:57 +0000 (20:39 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Wed, 8 Sep 2010 18:39:57 +0000 (20:39 +0200)
grub-core/disk/efi/efidisk.c
grub-core/kern/device.c
grub-core/normal/completion.c

index f9c6f3153d0012108f5b738b1696af13fe6e82f5..cb6c388845bb4c9092464c4ca9e3f1d082220dfc 100644 (file)
@@ -731,7 +731,7 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle)
     {
       /* This is a hard disk partition.  */
       grub_disk_t parent = 0;
-      char *partition_name = 0;
+      const grub_partition_t tpart = NULL;
       char *device_name;
       grub_efi_device_path_t *dup_dp, *dup_ldp;
       grub_efi_hard_drive_device_path_t hd;
@@ -770,7 +770,7 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle)
          if (grub_partition_get_start (part) == hd.partition_start
              && grub_partition_get_len (part) == hd.partition_size)
            {
-             partition_name = grub_partition_get_name (part);
+             tpart = part;
              return 1;
            }
 
@@ -799,13 +799,15 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle)
       grub_memcpy (&hd, ldp, sizeof (hd));
       grub_partition_iterate (parent, find_partition);
 
-      if (! partition_name)
+      if (! tpart)
        {
          grub_disk_close (parent);
          return 0;
        }
 
-      device_name = grub_xasprintf ("%s,%s", parent->name, partition_name);
+      device_name = grub_xasprintf ("%s,%s%d", parent->name,
+                                   tpart->partmap->name,
+                                   tpart->number + 1);
       grub_free (partition_name);
       grub_disk_close (parent);
 
index 4273fedfeb5c2c1f0828c1f72533adddc7066212..278ce9d72719cff7963b32245bc87b19c56bbbb2 100644 (file)
@@ -135,28 +135,22 @@ grub_device_iterate (int (*hook) (const char *name))
 
   int iterate_partition (grub_disk_t disk, const grub_partition_t partition)
     {
-      char *partition_name;
       struct part_ent *p;
 
-      partition_name = grub_partition_get_name (partition);
-      if (! partition_name)
-       return 1;
 
       p = grub_malloc (sizeof (*p));
       if (!p)
        {
-         grub_free (partition_name);
          return 1;
        }
 
-      p->name = grub_xasprintf ("%s,%s", disk->name, partition_name);
+      p->name = grub_xasprintf ("%s,%s%d", disk->name, partition->partmap->name,
+                               partition->number + 1);
       if (!p->name)
        {
-         grub_free (partition_name);
          grub_free (p);
          return 1;
        }
-      grub_free (partition_name);
 
       p->next = ents;
       ents = p;
index d127f9bafb1d0d10a6ab7c9b534a09a8d4a9ef63..3bccb43da776ae92329ecc439f95d3ce145f6c60 100644 (file)
@@ -100,15 +100,10 @@ static int
 iterate_partition (grub_disk_t disk, const grub_partition_t p)
 {
   const char *disk_name = disk->name;
-  char *partition_name = grub_partition_get_name (p);
   char *name;
   int ret;
 
-  if (! partition_name)
-    return 1;
-
-  name = grub_xasprintf ("%s,%s", disk_name, partition_name);
-  grub_free (partition_name);
+  name = grub_xasprintf ("%s,%s%d", disk_name, p->partmap->name, p->number + 1);
 
   if (! name)
     return 1;