[libvirt] [PATCH] Fix enumeration of partitions in disks with a trailing digit in path

Jim Meyering jim at meyering.net
Mon Jun 14 21:01:06 UTC 2010


Daniel P. Berrange wrote:
> Disks with a trailing digit in their path (eg /dev/loop0 or
> /dev/dm0) have an extra 'p' appended before the partition
> number (eg, to form /dev/loop0p1 not /dev/loop01). Fix the
> partition lookup to append this extra 'p' when required
>
> * src/storage/parthelper.c: Add a 'p' before partition
>   number if required
> ---
>  src/storage/parthelper.c |   15 +++++++++++----
>  1 files changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/src/storage/parthelper.c b/src/storage/parthelper.c
> index 5626cd2..28d88c9 100644
> --- a/src/storage/parthelper.c
> +++ b/src/storage/parthelper.c
> @@ -36,6 +36,8 @@
>  #include <stdio.h>
>  #include <string.h>
>
> +#include "c-ctype.h"
> +
>  /* we don't need to include the full internal.h just for this */
>  #define STREQ(a,b) (strcmp(a,b) == 0)
>
> @@ -56,6 +58,8 @@ int main(int argc, char **argv)
>      PedDisk *disk;
>      PedPartition *part;
>      int cmd = DISK_LAYOUT;
> +    const char *path;
> +    const char *partsep;
>
>      if (argc == 3 && STREQ(argv[2], "-g")) {
>          cmd = DISK_GEOMETRY;
> @@ -64,8 +68,11 @@ int main(int argc, char **argv)
>          return 1;
>      }
>
> -    if ((dev = ped_device_get(argv[1])) == NULL) {
> -        fprintf(stderr, "unable to access device %s\n", argv[1]);
> +    path = argv[1];
> +    partsep = c_isdigit(path[strlen(path)-1]) ? "p" : "";

Oops.
You'll want to rearrange things (perhaps by rejecting the
empty string early) so that this doesn't reference path[-1]
when given an empty argv[1] (i.e., '').




More information about the libvir-list mailing list