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) | ||||
| 	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 NULL; | ||||
|  | @ -188,10 +190,7 @@ grub_lvm_open (const char *name, grub_disk_t disk, | |||
|   int explicit = 0; | ||||
| 
 | ||||
|   if (grub_memcmp (name, "lvm/", sizeof ("lvm/") - 1) == 0) | ||||
|     { | ||||
|       name += sizeof ("lvm/") - 1; | ||||
|       explicit = 1; | ||||
|     } | ||||
|     explicit = 1; | ||||
| 
 | ||||
|   lv = find_lv (name); | ||||
| 
 | ||||
|  | @ -685,11 +684,34 @@ grub_lvm_scan_device (const char *name) | |||
| 		q++; | ||||
| 
 | ||||
| 	      s = q - p; | ||||
| 	      lv->name = grub_malloc (vgname_len + 1 + s + 1); | ||||
| 	      grub_memcpy (lv->name, vgname, vgname_len); | ||||
| 	      lv->name[vgname_len] = '-'; | ||||
| 	      grub_memcpy (lv->name + vgname_len + 1, p, s); | ||||
| 	      lv->name[vgname_len + 1 + s] = '\0'; | ||||
| 	      lv->name = grub_strndup (p, s); | ||||
| 	      lv->compatname = grub_malloc (vgname_len + 1 + s + 1); | ||||
| 	      grub_memcpy (lv->compatname, vgname, vgname_len); | ||||
| 	      lv->compatname[vgname_len] = '-'; | ||||
| 	      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; | ||||
| 
 | ||||
|  |  | |||
|  | @ -783,14 +783,10 @@ grub_util_get_grub_dev (const char *os_dev) | |||
| 	grub_size_t offset = sizeof ("/dev/mapper/") - 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_dev[i] = os_dev[offset]; | ||||
| 	    if (os_dev[offset] == '-' && os_dev[offset + 1] == '-') | ||||
| 	      offset++; | ||||
| 	  } | ||||
| 	grub_memcpy (grub_dev, "lvm/", sizeof ("lvm/") - 1); | ||||
| 	grub_memcpy (grub_dev + sizeof ("lvm/") - 1, os_dev + offset, len); | ||||
|       } | ||||
| 
 | ||||
|       break; | ||||
|  |  | |||
|  | @ -44,6 +44,8 @@ struct grub_lvm_pv { | |||
| 
 | ||||
| struct grub_lvm_lv { | ||||
|   char *name; | ||||
|   char *fullname; | ||||
|   char *compatname; | ||||
|   unsigned int number; | ||||
|   unsigned int segment_count; | ||||
|   grub_uint64_t size; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue