[Libguestfs] [PATCH] daemon: parted: use --part-type with recent sfdisk

Richard W.M. Jones rjones at redhat.com
Wed Jan 28 14:29:16 UTC 2015


On Wed, Jan 28, 2015 at 02:43:10PM +0100, Pino Toscano wrote:
> Check whether --part-type is supported (in the rewritten sfdisk in
> util-linux >= 2.26), and use it instead of --print-id & --change-id.
> 
> The actual result should be the same, just not using a (recently)
> deprecated command line API.

If this is a fix for RHBZ#1183234 then remember to put that
into the first line of the git commit message.

Apart from that, it all looks good to me, so ACK.

Rich.

>  daemon/parted.c | 36 ++++++++++++++++++++++++++++++++----
>  1 file changed, 32 insertions(+), 4 deletions(-)
> 
> diff --git a/daemon/parted.c b/daemon/parted.c
> index 8fbb6e4..2f10144 100644
> --- a/daemon/parted.c
> +++ b/daemon/parted.c
> @@ -681,6 +681,30 @@ do_part_get_bootable (const char *device, int partnum)
>    }
>  }
>  
> +/* Test if sfdisk is recent enough to have --part-type, to be used instead
> + * of --print-id and --change-id.
> + */
> +static int
> +test_sfdisk_has_part_type (void)
> +{
> +  static int tested = -1;
> +
> +  if (tested != -1)
> +    return tested;
> +
> +  int r;
> +  CLEANUP_FREE char *out = NULL, *err = NULL;
> +
> +  r = command (&out, &err, str_sfdisk, "--help", NULL);
> +  if (r == -1) {
> +    reply_with_error ("%s: %s", "sfdisk --help", err);
> +    return -1;
> +  }
> +
> +  tested = strstr (out, "--part-type") != NULL;
> +  return tested;
> +}
> +
>  /* Currently we use sfdisk for getting and setting the ID byte.  In
>   * future, extend parted to provide this functionality.  As a result
>   * of using sfdisk, this won't work for non-MBR-style partitions, but
> @@ -695,6 +719,8 @@ do_part_get_mbr_id (const char *device, int partnum)
>      return -1;
>    }
>  
> +  const char *param = test_sfdisk_has_part_type () ? "--part-type" : "--print-id";
> +
>    char partnum_str[16];
>    snprintf (partnum_str, sizeof partnum_str, "%d", partnum);
>  
> @@ -703,9 +729,9 @@ do_part_get_mbr_id (const char *device, int partnum)
>  
>    udev_settle ();
>  
> -  r = command (&out, &err, str_sfdisk, "--print-id", device, partnum_str, NULL);
> +  r = command (&out, &err, str_sfdisk, param, device, partnum_str, NULL);
>    if (r == -1) {
> -    reply_with_error ("sfdisk --print-id: %s", err);
> +    reply_with_error ("sfdisk %s: %s", param, err);
>      return -1;
>    }
>  
> @@ -729,6 +755,8 @@ do_part_set_mbr_id (const char *device, int partnum, int idbyte)
>      return -1;
>    }
>  
> +  const char *param = test_sfdisk_has_part_type () ? "--part-type" : "--change-id";
> +
>    char partnum_str[16];
>    snprintf (partnum_str, sizeof partnum_str, "%d", partnum);
>  
> @@ -741,9 +769,9 @@ do_part_set_mbr_id (const char *device, int partnum, int idbyte)
>    udev_settle ();
>  
>    r = command (NULL, &err, str_sfdisk,
> -               "--change-id", device, partnum_str, idbyte_str, NULL);
> +               param, device, partnum_str, idbyte_str, NULL);
>    if (r == -1) {
> -    reply_with_error ("sfdisk --change-id: %s", err);
> +    reply_with_error ("sfdisk %s: %s", param, err);
>      return -1;
>    }
>  
> -- 
> 1.9.3
> 
> _______________________________________________
> Libguestfs mailing list
> Libguestfs at redhat.com
> https://www.redhat.com/mailman/listinfo/libguestfs

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-builder quickly builds VMs from scratch
http://libguestfs.org/virt-builder.1.html




More information about the Libguestfs mailing list