[Qemu-devel] [PATCH 2/2] qemu-img.c: Clean up handling of image size in img_create()

2010-12-09 Thread Jes . Sorensen
From: Jes Sorensen jes.soren...@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.soren...@redhat.com
---
 qemu-img.c |   23 +--
 1 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/qemu-img.c b/qemu-img.c
index d146d8c..f078718 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,20 @@ static int img_create(int argc, char **argv)
 }
 filename = argv[optind++];
 
+/* Get image size, if specified */
+if (optind  argc) {
+ssize_t sval;
+sval = strtosz_suffix(argv[optind++], NULL, STRTOSZ_DEFSUFFIX_B);
+if (sval  0) {
+error(Invalid image size specified! You may use k, M, G or 
+  T suffixes for );
+error(kilobytes, megabytes, gigabytes and terabytes.);
+ret = -1;
+goto out;
+}
+img_size = (uint64_t)sval;
+}
+
 if (options  !strcmp(options, ?)) {
 ret = print_block_option_help(filename, fmt);
 goto out;
@@ -356,7 +371,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 +384,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) {
-- 
1.7.3.2




[Qemu-devel] [PATCH 2/2] qemu-img.c: Clean up handling of image size in img_create()

2010-12-09 Thread Jes . Sorensen
From: Jes Sorensen jes.soren...@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.soren...@redhat.com
---
 qemu-img.c |   23 +--
 1 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/qemu-img.c b/qemu-img.c
index d146d8c..f078718 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,20 @@ static int img_create(int argc, char **argv)
 }
 filename = argv[optind++];
 
+/* Get image size, if specified */
+if (optind  argc) {
+ssize_t sval;
+sval = strtosz_suffix(argv[optind++], NULL, STRTOSZ_DEFSUFFIX_B);
+if (sval  0) {
+error(Invalid image size specified! You may use k, M, G or 
+  T suffixes for );
+error(kilobytes, megabytes, gigabytes and terabytes.);
+ret = -1;
+goto out;
+}
+img_size = (uint64_t)sval;
+}
+
 if (options  !strcmp(options, ?)) {
 ret = print_block_option_help(filename, fmt);
 goto out;
@@ -356,7 +371,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 +384,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) {
-- 
1.7.3.2