]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
merge mainline
authorColin Watson <cjwatson@ubuntu.com>
Sat, 17 Jul 2010 10:17:49 +0000 (11:17 +0100)
committerColin Watson <cjwatson@ubuntu.com>
Sat, 17 Jul 2010 10:17:49 +0000 (11:17 +0100)
1  2 
disk/raid.c
kern/emu/getroot.c

diff --cc disk/raid.c
index d6a1f1d489046a4b4aa00d9727501c6cd7d3406b,2d544afdcd37cae9bcc8ca5fee71c42f45470509..87e713f305d2f7f1f327e15071b8081a1e7dd559
@@@ -536,44 -534,36 +536,34 @@@ insert_array (grub_disk_t disk, struct 
  
        if (p)
          {
 -          /* The number is already in use, so we need to find an new number. */
 +          /* The number is already in use, so we need to find a new one.  */
            int i = 0;
  
 -          while (1)
 -            {
 -              for (p = array_list; p != NULL; p = p->next)
 -                {
 -                  if (p->number == i)
 -                    break;
 -                }
 -
 -              if (!p)
 -                {
 -                  /* We found an unused number.  */
 -                  array->number = i;
 -                  break;
 -                }
 -
 -              i++;
 -            }
 -        }
 -
 -      array->name = grub_xasprintf ("md%d", array->number);
 +        while (1)
 +          {
 +            for (p = array_list; p != NULL; p = p->next)
 +              {
 +                if (p->number == i)
 +                  break;
 +              }
 +
 +            if (! p)
 +              {
 +                /* We found an unused number.  */
 +                array->number = i;
 +                break;
 +              }
 +
 +            i++;
 +          }
 +      }
 +    skip_duplicate_check:
 +      /* mdraid 1.x superblocks have only a name stored not a number.
 +       Use it directly as GRUB device.  */
        if (! array->name)
-       {
-         array->name = grub_malloc (13);
-         if (! array->name)
-           {
-             grub_free (array->uuid);
-             grub_free (array);
 -        {
 -          grub_free (array->uuid);
 -          grub_free (array);
--
-             return grub_errno;
-           }
-         grub_sprintf (array->name, "md%d", array->number);
-       }
 -          return grub_errno;
 -        }
++      array->name = grub_xasprintf ("md%d", array->number);
 +      else
-       grub_sprintf (array->name, "%s", array->name);
++      array->name = grub_xasprintf ("%s", array->name);
  
        grub_dprintf ("raid", "Found array %s (%s)\n", array->name,
                      scanner_name);
index 25f4eae618f8db62761676a366a5167e0650fd80,24b2cd486ccb7ec5fd4dccb76141d3f535875571..5b0849a98263c2b8970aaae4fa1c99b188dfff53
@@@ -590,22 -600,8 +600,22 @@@ grub_util_get_grub_dev (const char *os_
          grub_dev = xasprintf ("md%s", p);
          free (p);
        }
 +      else if (os_dev[7] == '/')
 +      {
 +        /* mdraid 1.x with a free name.  */
 +        char *p , *q;
 +
 +        p = strdup (os_dev + sizeof ("/dev/md/") - 1);
 +
 +        q = strchr (p, 'p');
 +        if (q)
 +          *q = ',';
 +
 +        asprintf (&grub_dev, "%s", p);
 +        free (p);
 +      }
        else
-       grub_util_error ("Unknown kind of RAID device `%s'", os_dev);
+       grub_util_error ("unknown kind of RAID device `%s'", os_dev);
  
        break;