more linux-like name for LVM volumes

This commit is contained in:
Vladimir 'phcoder' Serbinenko 2011-04-22 01:10:24 +02:00
parent 24b905a11c
commit 5dad99b730
3 changed files with 37 additions and 17 deletions

View file

@ -172,7 +172,9 @@ find_lv (const char *name)
{ {
if (vg->lvs) if (vg->lvs)
for (lv = vg->lvs; lv; lv = lv->next) for (lv = vg->lvs; lv; lv = lv->next)
if (! grub_strcmp (lv->name, name) && is_lv_readable (lv)) if ((grub_strcmp (lv->fullname, name) == 0
|| grub_strcmp (lv->compatname, name) == 0)
&& is_lv_readable (lv))
return lv; return lv;
} }
return NULL; return NULL;
@ -188,10 +190,7 @@ grub_lvm_open (const char *name, grub_disk_t disk,
int explicit = 0; int explicit = 0;
if (grub_memcmp (name, "lvm/", sizeof ("lvm/") - 1) == 0) if (grub_memcmp (name, "lvm/", sizeof ("lvm/") - 1) == 0)
{
name += sizeof ("lvm/") - 1;
explicit = 1; explicit = 1;
}
lv = find_lv (name); lv = find_lv (name);
@ -685,11 +684,34 @@ grub_lvm_scan_device (const char *name)
q++; q++;
s = q - p; s = q - p;
lv->name = grub_malloc (vgname_len + 1 + s + 1); lv->name = grub_strndup (p, s);
grub_memcpy (lv->name, vgname, vgname_len); lv->compatname = grub_malloc (vgname_len + 1 + s + 1);
lv->name[vgname_len] = '-'; grub_memcpy (lv->compatname, vgname, vgname_len);
grub_memcpy (lv->name + vgname_len + 1, p, s); lv->compatname[vgname_len] = '-';
lv->name[vgname_len + 1 + s] = '\0'; grub_memcpy (lv->compatname + vgname_len + 1, p, s);
lv->compatname[vgname_len + 1 + s] = '\0';
{
const char *iptr;
char *optr;
lv->fullname = grub_malloc (sizeof("lvm/") + 2 * vgname_len
+ 1 + 2 * s + 1);
optr = lv->fullname;
for (iptr = vgname; iptr < vgname + vgname_len; iptr++)
{
*optr++ = *iptr;
if (*iptr == '-')
*optr++ = '-';
}
*optr++ = '-';
for (iptr = p; iptr < p + s; iptr++)
{
*optr++ = *iptr;
if (*iptr == '-')
*optr++ = '-';
}
*optr++ = 0;
}
lv->size = 0; lv->size = 0;

View file

@ -783,14 +783,10 @@ grub_util_get_grub_dev (const char *os_dev)
grub_size_t offset = sizeof ("/dev/mapper/") - 1; grub_size_t offset = sizeof ("/dev/mapper/") - 1;
len = strlen (os_dev) - offset + 1; len = strlen (os_dev) - offset + 1;
grub_dev = xmalloc (len); grub_dev = xmalloc (len + sizeof ("lvm/"));
for (i = 0; i < len; i++, offset++) grub_memcpy (grub_dev, "lvm/", sizeof ("lvm/") - 1);
{ grub_memcpy (grub_dev + sizeof ("lvm/") - 1, os_dev + offset, len);
grub_dev[i] = os_dev[offset];
if (os_dev[offset] == '-' && os_dev[offset + 1] == '-')
offset++;
}
} }
break; break;

View file

@ -44,6 +44,8 @@ struct grub_lvm_pv {
struct grub_lvm_lv { struct grub_lvm_lv {
char *name; char *name;
char *fullname;
char *compatname;
unsigned int number; unsigned int number;
unsigned int segment_count; unsigned int segment_count;
grub_uint64_t size; grub_uint64_t size;