more linux-like name for LVM volumes
This commit is contained in:
parent
24b905a11c
commit
5dad99b730
3 changed files with 37 additions and 17 deletions
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue