Patchwork [v2,1/1] qemu-img.c: Clean up handling of image size in img_create()

login
register
mail settings
Submitter Jes Sorensen
Date Dec. 8, 2010, 9:13 a.m.
Message ID <1291799612-5145-1-git-send-email-Jes.Sorensen@redhat.com>
Download mbox | patch
Permalink /patch/74657/
State New
Headers show

Comments

Jes Sorensen - Dec. 8, 2010, 9:13 a.m.
From: Jes Sorensen <Jes.Sorensen@redhat.com>

This cleans up the handling of image size in img_create() by parsing
the value early, and then only setting it once if a value has been
added as the last argument to the command line.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 qemu-img.c |   14 ++++++++------
 1 files changed, 8 insertions(+), 6 deletions(-)
Markus Armbruster - Dec. 15, 2010, 4:47 p.m.
Jes.Sorensen@redhat.com writes:

> From: Jes Sorensen <Jes.Sorensen@redhat.com>
>
> This cleans up the handling of image size in img_create() by parsing
> the value early, and then only setting it once if a value has been
> added as the last argument to the command line.
>
> Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
> ---
>  qemu-img.c |   14 ++++++++------
>  1 files changed, 8 insertions(+), 6 deletions(-)
>

Patch conflicts with commit c2abccec.

> diff --git a/qemu-img.c b/qemu-img.c
> index d146d8c..9986004 100644
> --- a/qemu-img.c
> +++ b/qemu-img.c
> @@ -282,6 +282,7 @@ static int add_old_style_options(const char *fmt, QEMUOptionParameter *list,
>  static int img_create(int argc, char **argv)
>  {
>      int c, ret = 0;
> +    uint64_t img_size = -1;
>      const char *fmt = "raw";
>      const char *base_fmt = NULL;
>      const char *filename;
> @@ -329,6 +330,11 @@ static int img_create(int argc, char **argv)
>      }
>      filename = argv[optind++];
>  
> +    /* Get image size, if specified */
> +    if (optind < argc) {
> +        img_size = strtosz(argv[optind++], NULL);

strtosz() can fail.  More below.

> +    }
> +
>      if (options && !strcmp(options, "?")) {
>          ret = print_block_option_help(filename, fmt);
>          goto out;
> @@ -356,7 +362,8 @@ static int img_create(int argc, char **argv)
>  
>      /* Create parameter list with default values */
>      param = parse_option_parameters("", create_options, param);
> -    set_option_parameter_int(param, BLOCK_OPT_SIZE, -1);
> +
> +    set_option_parameter_int(param, BLOCK_OPT_SIZE, img_size);
>  
>      /* Parse -o options */
>      if (options) {
> @@ -368,11 +375,6 @@ static int img_create(int argc, char **argv)
>          }
>      }
>  
> -    /* Add size to parameters */
> -    if (optind < argc) {
> -        set_option_parameter(param, BLOCK_OPT_SIZE, argv[optind++]);
> -    }
> -
>      /* Add old-style options to parameters */
>      ret = add_old_style_options(fmt, param, base_filename, base_fmt);
>      if (ret < 0) {

This switches parsing of the size argument from parse_option_size() (via
set_option_parameter()) to strtosz().  I'm fine with that, but:

* Before:

    $ qemu-img create xxx xxx
    Parameter 'size' expects a size
    You may use k, M, G or T suffixes for kilobytes, megabytes, gigabytes and terabytes.
    qemu-img: Image creation needs a size parameter

* After:

    $ qemu-img create xxx xxx
    qemu-img: Image creation needs a size parameter

Intentional?
Jes Sorensen - Dec. 15, 2010, 4:56 p.m.
On 12/15/10 17:47, Markus Armbruster wrote:
> Jes.Sorensen@redhat.com writes:
> 
>> From: Jes Sorensen <Jes.Sorensen@redhat.com>
>>
>> This cleans up the handling of image size in img_create() by parsing
>> the value early, and then only setting it once if a value has been
>> added as the last argument to the command line.
>>
>> Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
>> ---
>>  qemu-img.c |   14 ++++++++------
>>  1 files changed, 8 insertions(+), 6 deletions(-)
>>
> 
> Patch conflicts with commit c2abccec.

ARGH :(

> This switches parsing of the size argument from parse_option_size() (via
> set_option_parameter()) to strtosz().  I'm fine with that, but:
> 
> * Before:
> 
>     $ qemu-img create xxx xxx
>     Parameter 'size' expects a size
>     You may use k, M, G or T suffixes for kilobytes, megabytes, gigabytes and terabytes.
>     qemu-img: Image creation needs a size parameter
> 
> * After:
> 
>     $ qemu-img create xxx xxx
>     qemu-img: Image creation needs a size parameter
> 
> Intentional?

This was addressed in the later revision when I introduced strtosz_suffix()

Cheers,
Jes
Markus Armbruster - Dec. 15, 2010, 5:23 p.m.
Jes Sorensen <Jes.Sorensen@redhat.com> writes:

> On 12/15/10 17:47, Markus Armbruster wrote:
>> Jes.Sorensen@redhat.com writes:
>> 
>>> From: Jes Sorensen <Jes.Sorensen@redhat.com>
>>>
>>> This cleans up the handling of image size in img_create() by parsing
>>> the value early, and then only setting it once if a value has been
>>> added as the last argument to the command line.
>>>
>>> Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
>>> ---
>>>  qemu-img.c |   14 ++++++++------
>>>  1 files changed, 8 insertions(+), 6 deletions(-)
>>>
>> 
>> Patch conflicts with commit c2abccec.
>
> ARGH :(
>
>> This switches parsing of the size argument from parse_option_size() (via
>> set_option_parameter()) to strtosz().  I'm fine with that, but:
>> 
>> * Before:
>> 
>>     $ qemu-img create xxx xxx
>>     Parameter 'size' expects a size
>>     You may use k, M, G or T suffixes for kilobytes, megabytes, gigabytes and terabytes.
>>     qemu-img: Image creation needs a size parameter
>> 
>> * After:
>> 
>>     $ qemu-img create xxx xxx
>>     qemu-img: Image creation needs a size parameter
>> 
>> Intentional?
>
> This was addressed in the later revision when I introduced strtosz_suffix()

Looks like I'm getting lost in my post-vacation mail backlog %-}

Patch

diff --git a/qemu-img.c b/qemu-img.c
index d146d8c..9986004 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -282,6 +282,7 @@  static int add_old_style_options(const char *fmt, QEMUOptionParameter *list,
 static int img_create(int argc, char **argv)
 {
     int c, ret = 0;
+    uint64_t img_size = -1;
     const char *fmt = "raw";
     const char *base_fmt = NULL;
     const char *filename;
@@ -329,6 +330,11 @@  static int img_create(int argc, char **argv)
     }
     filename = argv[optind++];
 
+    /* Get image size, if specified */
+    if (optind < argc) {
+        img_size = strtosz(argv[optind++], NULL);
+    }
+
     if (options && !strcmp(options, "?")) {
         ret = print_block_option_help(filename, fmt);
         goto out;
@@ -356,7 +362,8 @@  static int img_create(int argc, char **argv)
 
     /* Create parameter list with default values */
     param = parse_option_parameters("", create_options, param);
-    set_option_parameter_int(param, BLOCK_OPT_SIZE, -1);
+
+    set_option_parameter_int(param, BLOCK_OPT_SIZE, img_size);
 
     /* Parse -o options */
     if (options) {
@@ -368,11 +375,6 @@  static int img_create(int argc, char **argv)
         }
     }
 
-    /* Add size to parameters */
-    if (optind < argc) {
-        set_option_parameter(param, BLOCK_OPT_SIZE, argv[optind++]);
-    }
-
     /* Add old-style options to parameters */
     ret = add_old_style_options(fmt, param, base_filename, base_fmt);
     if (ret < 0) {