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);
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;