diff mbox

[4/7] Make error handling more consistent in img_create() and img_resize()

Message ID 1291645540-9784-5-git-send-email-Jes.Sorensen@redhat.com
State New
Headers show

Commit Message

Jes Sorensen Dec. 6, 2010, 2:25 p.m. UTC
From: Jes Sorensen <Jes.Sorensen@redhat.com>

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 qemu-img.c |   12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)

Comments

Stefan Hajnoczi Dec. 6, 2010, 2:58 p.m. UTC | #1
On Mon, Dec 06, 2010 at 03:25:37PM +0100, Jes.Sorensen@redhat.com wrote:
> From: Jes Sorensen <Jes.Sorensen@redhat.com>
> 
> Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
> ---
>  qemu-img.c |   12 ++++++++----
>  1 files changed, 8 insertions(+), 4 deletions(-)

Reviewed-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Kevin Wolf Dec. 6, 2010, 3:25 p.m. UTC | #2
Am 06.12.2010 15:25, schrieb Jes.Sorensen@redhat.com:
> From: Jes Sorensen <Jes.Sorensen@redhat.com>
> 
> Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
> ---
>  qemu-img.c |   12 ++++++++----
>  1 files changed, 8 insertions(+), 4 deletions(-)
> 
> diff --git a/qemu-img.c b/qemu-img.c
> index aded72d..7f4939e 100644
> --- a/qemu-img.c
> +++ b/qemu-img.c
> @@ -314,13 +314,15 @@ static int img_create(int argc, char **argv)
>      drv = bdrv_find_format(fmt);
>      if (!drv) {
>          error("Unknown file format '%s'", fmt);
> -        return 1;
> +        ret = -1;
> +        goto out;
>      }
>  
>      proto_drv = bdrv_find_protocol(filename);
>      if (!proto_drv) {
>          error("Unknown protocol '%s'", filename);
> -        return 1;
> +        ret = -1;
> +        goto out;
>      }
>  
>      create_options = append_option_parameters(create_options,
> @@ -1483,14 +1485,16 @@ static int img_resize(int argc, char **argv)
>      param = parse_option_parameters("", resize_options, NULL);
>      if (set_option_parameter(param, BLOCK_OPT_SIZE, size)) {
>          /* Error message already printed when size parsing fails */
> -        exit(1);
> +        ret = -1;
> +        goto out;

bs isn't initialized here, so the bdrv_delete(bs) after out: will crash.

>      }
>      n = get_option_parameter(param, BLOCK_OPT_SIZE)->value.n;
>      free_option_parameters(param);
>  
>      bs = bdrv_new_open(filename, fmt, BDRV_O_FLAGS | BDRV_O_RDWR);
>      if (!bs) {
> -        return 1;
> +        ret = -1;
> +        goto out;
>      }

Same here.

Heh, wanted to try it out to be sure, but the compiler notices that, so
it doesn't even build:

cc1: warnings being treated as errors
qemu-img.c: In function 'img_resize':
qemu-img.c:1497: error: 'bs' may be used uninitialized in this function

Kevin
Jes Sorensen Dec. 6, 2010, 3:32 p.m. UTC | #3
On 12/06/10 16:25, Kevin Wolf wrote:
>>      }
>>      n = get_option_parameter(param, BLOCK_OPT_SIZE)->value.n;
>>      free_option_parameters(param);
>>  
>>      bs = bdrv_new_open(filename, fmt, BDRV_O_FLAGS | BDRV_O_RDWR);
>>      if (!bs) {
>> -        return 1;
>> +        ret = -1;
>> +        goto out;
>>      }
> 
> Same here.
> 
> Heh, wanted to try it out to be sure, but the compiler notices that, so
> it doesn't even build:

Grrrrr I am an idiot!

Sorry about the noise, I was sure I had tested that last change. Fix
coming up in a few minutes.

Cheers,
Jes
diff mbox

Patch

diff --git a/qemu-img.c b/qemu-img.c
index aded72d..7f4939e 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -314,13 +314,15 @@  static int img_create(int argc, char **argv)
     drv = bdrv_find_format(fmt);
     if (!drv) {
         error("Unknown file format '%s'", fmt);
-        return 1;
+        ret = -1;
+        goto out;
     }
 
     proto_drv = bdrv_find_protocol(filename);
     if (!proto_drv) {
         error("Unknown protocol '%s'", filename);
-        return 1;
+        ret = -1;
+        goto out;
     }
 
     create_options = append_option_parameters(create_options,
@@ -1483,14 +1485,16 @@  static int img_resize(int argc, char **argv)
     param = parse_option_parameters("", resize_options, NULL);
     if (set_option_parameter(param, BLOCK_OPT_SIZE, size)) {
         /* Error message already printed when size parsing fails */
-        exit(1);
+        ret = -1;
+        goto out;
     }
     n = get_option_parameter(param, BLOCK_OPT_SIZE)->value.n;
     free_option_parameters(param);
 
     bs = bdrv_new_open(filename, fmt, BDRV_O_FLAGS | BDRV_O_RDWR);
     if (!bs) {
-        return 1;
+        ret = -1;
+        goto out;
     }
 
     if (relative) {