Add lost lvm/ prefix. Autoadd lvm subdevices.

This commit is contained in:
Vladimir 'phcoder' Serbinenko 2011-04-22 02:46:36 +02:00
parent c0c837c10b
commit 65b4742cd7
3 changed files with 111 additions and 30 deletions

View file

@ -26,6 +26,7 @@
#ifdef GRUB_UTIL
#include <grub/emu/misc.h>
#include <grub/emu/hostdisk.h>
#endif
GRUB_MOD_LICENSE ("GPLv3+");
@ -197,6 +198,16 @@ grub_lvm_open (const char *name, grub_disk_t disk,
if (! lv && !scan_depth &&
pull == (explicit ? GRUB_DISK_PULL_RESCAN : GRUB_DISK_PULL_RESCAN_UNTYPED))
{
#ifdef GRUB_UTIL
if (explicit)
{
char buf[grub_strlen (name) + sizeof ("/dev/mapper/")];
grub_memcpy (buf, "/dev/mapper/", sizeof ("/dev/mapper/"));
grub_strcpy (buf + sizeof ("/dev/mapper/") - 1,
name + sizeof ("lvm/") - 1);
grub_util_pull_device (buf);
}
#endif
scan_for = name;
scan_depth++;
grub_device_iterate (&grub_lvm_scan_device);
@ -685,7 +696,11 @@ grub_lvm_scan_device (const char *name)
s = q - p;
lv->name = grub_strndup (p, s);
if (!lv->name)
goto lvs_fail;
lv->compatname = grub_malloc (vgname_len + 1 + s + 1);
if (!lv->compatname)
goto lvs_fail;
grub_memcpy (lv->compatname, vgname, vgname_len);
lv->compatname[vgname_len] = '-';
grub_memcpy (lv->compatname + vgname_len + 1, p, s);
@ -696,7 +711,12 @@ grub_lvm_scan_device (const char *name)
char *optr;
lv->fullname = grub_malloc (sizeof("lvm/") + 2 * vgname_len
+ 1 + 2 * s + 1);
if (!lv->fullname)
goto lvs_fail;
optr = lv->fullname;
grub_memcpy (optr, "lvm/", sizeof ("lvm/") - 1);
optr += sizeof ("lvm/") - 1;
for (iptr = vgname; iptr < vgname + vgname_len; iptr++)
{
*optr++ = *iptr;