2008-09-04 Felix Zielcke <fzielcke@z-51.de>
* util/getroot.c: Include <config.h>. (grub_util_get_grub_dev): Rewrite to use asprintf for mdraid devices, add support for /dev/md/N devices and handle LVM double dash escaping.
This commit is contained in:
parent
58b6645a8f
commit
4ee5592137
2 changed files with 36 additions and 39 deletions
10
ChangeLog
10
ChangeLog
|
@ -1,7 +1,13 @@
|
||||||
2008-09-04 Felix Zielcke <fzielcke@z-51.de>
|
2008-09-04 Felix Zielcke <fzielcke@z-51.de>
|
||||||
|
|
||||||
* config.guess: Update to latest version from config.git.
|
* util/getroot.c: Include <config.h>.
|
||||||
* config.sub: Likewise.
|
(grub_util_get_grub_dev): Rewrite to use asprintf for mdraid devices,
|
||||||
|
add support for /dev/md/N devices and handle LVM double dash escaping.
|
||||||
|
|
||||||
|
2008-09-04 Felix Zielcke <fzielcke@z-51.de>
|
||||||
|
|
||||||
|
* config.guess: Update to latest version from config git.
|
||||||
|
* config.sub: Likewise.
|
||||||
|
|
||||||
2008-09-03 Robert Millan <rmh@aybabtu.com>
|
2008-09-03 Robert Millan <rmh@aybabtu.com>
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -417,58 +418,48 @@ grub_util_get_grub_dev (const char *os_dev)
|
||||||
switch (grub_util_get_dev_abstraction (os_dev))
|
switch (grub_util_get_dev_abstraction (os_dev))
|
||||||
{
|
{
|
||||||
case GRUB_DEV_ABSTRACTION_LVM:
|
case GRUB_DEV_ABSTRACTION_LVM:
|
||||||
grub_dev = xmalloc (strlen (os_dev) - 12 + 1);
|
|
||||||
|
|
||||||
strcpy (grub_dev, os_dev + 12);
|
{
|
||||||
|
unsigned short i, len;
|
||||||
|
grub_size_t offset = sizeof ("/dev/mapper/") - 1;
|
||||||
|
|
||||||
|
len = strlen (os_dev) - offset + 1;
|
||||||
|
grub_dev = xmalloc (len);
|
||||||
|
|
||||||
|
for (i = 0; i < len; i++, offset++)
|
||||||
|
{
|
||||||
|
grub_dev[i] = os_dev[offset];
|
||||||
|
if (os_dev[offset] == '-' && os_dev[offset + 1] == '-')
|
||||||
|
offset++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GRUB_DEV_ABSTRACTION_RAID:
|
case GRUB_DEV_ABSTRACTION_RAID:
|
||||||
grub_dev = xmalloc (20);
|
|
||||||
|
|
||||||
if (os_dev[7] == '_' && os_dev[8] == 'd')
|
if (os_dev[7] == '_' && os_dev[8] == 'd')
|
||||||
{
|
{
|
||||||
const char *p;
|
|
||||||
|
|
||||||
/* This a partitionable RAID device of the form /dev/md_dNNpMM. */
|
/* This a partitionable RAID device of the form /dev/md_dNNpMM. */
|
||||||
int i;
|
|
||||||
|
|
||||||
grub_dev[0] = 'm';
|
char *p , *q;
|
||||||
grub_dev[1] = 'd';
|
|
||||||
i = 2;
|
|
||||||
|
|
||||||
p = os_dev + 9;
|
p = strdup (os_dev + sizeof ("/dev/md_d") - 1);
|
||||||
while (*p >= '0' && *p <= '9')
|
|
||||||
{
|
|
||||||
grub_dev[i] = *p;
|
|
||||||
i++;
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*p == '\0')
|
q = strchr (p, 'p');
|
||||||
grub_dev[i] = '\0';
|
if (q)
|
||||||
else if (*p == 'p')
|
*q = ',';
|
||||||
{
|
|
||||||
p++;
|
|
||||||
grub_dev[i] = ',';
|
|
||||||
i++;
|
|
||||||
|
|
||||||
while (*p >= '0' && *p <= '9')
|
asprintf (&grub_dev, "md%s", p);
|
||||||
{
|
free (p);
|
||||||
grub_dev[i] = *p;
|
|
||||||
i++;
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_dev[i] = '\0';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
grub_util_error ("Unknown kind of RAID device `%s'", os_dev);
|
|
||||||
}
|
}
|
||||||
else if (os_dev[7] >= '0' && os_dev[7] <= '9')
|
else if (os_dev[7] >= '0' && os_dev[7] <= '9')
|
||||||
{
|
{
|
||||||
memcpy (grub_dev, os_dev + 5, 7);
|
asprintf (&grub_dev, "md%s", os_dev + sizeof ("/dev/md") - 1);
|
||||||
grub_dev[7] = '\0';
|
}
|
||||||
|
else if (os_dev[7] == '/' && os_dev[8] >= '0' && os_dev[8] <= '9')
|
||||||
|
{
|
||||||
|
asprintf (&grub_dev, "md%s", os_dev + sizeof ("/dev/md/") - 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
grub_util_error ("Unknown kind of RAID device `%s'", os_dev);
|
grub_util_error ("Unknown kind of RAID device `%s'", os_dev);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue