Fix error handling in qemu_read_config_file

Submitted by Kevin Wolf on May 17, 2010, 8:36 a.m.

Details

Message ID 1274085407-8106-1-git-send-email-kwolf@redhat.com
State New
Headers show

Commit Message

Kevin Wolf May 17, 2010, 8:36 a.m.
We need to close the file even in error case. While at it, make the callers
catch all kind of errors. ENOENT is allowed for default config files, they
are optional.

Reported-by: Luiz Capitulino <lcapitulino@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 qemu-config.c |   12 ++++++++----
 vl.c          |    4 ++--
 2 files changed, 10 insertions(+), 6 deletions(-)

Comments

Anthony Liguori May 24, 2010, 8:30 p.m.
On 05/17/2010 03:36 AM, Kevin Wolf wrote:
> We need to close the file even in error case. While at it, make the callers
> catch all kind of errors. ENOENT is allowed for default config files, they
> are optional.
>
> Reported-by: Luiz Capitulino<lcapitulino@redhat.com>
> Signed-off-by: Kevin Wolf<kwolf@redhat.com>
>    

Applied.  Thanks.

Regards,

Anthony Liguori

> ---
>   qemu-config.c |   12 ++++++++----
>   vl.c          |    4 ++--
>   2 files changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/qemu-config.c b/qemu-config.c
> index bf3d493..b2a4128 100644
> --- a/qemu-config.c
> +++ b/qemu-config.c
> @@ -521,14 +521,18 @@ out:
>   int qemu_read_config_file(const char *filename)
>   {
>       FILE *f = fopen(filename, "r");
> +    int ret;
> +
>       if (f == NULL) {
>           return -errno;
>       }
>
> -    if (qemu_config_parse(f, vm_config_groups, filename) != 0) {
> -        return -EINVAL;
> -    }
> +    ret = qemu_config_parse(f, vm_config_groups, filename);
>       fclose(f);
>
> -    return 0;
> +    if (ret == 0) {
> +        return 0;
> +    } else {
> +        return -EINVAL;
> +    }
>   }
> diff --git a/vl.c b/vl.c
> index c8abce6..4ca1bee 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -2683,12 +2683,12 @@ int main(int argc, char **argv, char **envp)
>           int ret;
>
>           ret = qemu_read_config_file(CONFIG_QEMU_CONFDIR "/qemu.conf");
> -        if (ret == -EINVAL) {
> +        if (ret<  0&&  ret != -ENOENT) {
>               exit(1);
>           }
>
>           ret = qemu_read_config_file(arch_config_name);
> -        if (ret == -EINVAL) {
> +        if (ret<  0&&  ret != -ENOENT) {
>               exit(1);
>           }
>       }
>

Patch hide | download patch | download mbox

diff --git a/qemu-config.c b/qemu-config.c
index bf3d493..b2a4128 100644
--- a/qemu-config.c
+++ b/qemu-config.c
@@ -521,14 +521,18 @@  out:
 int qemu_read_config_file(const char *filename)
 {
     FILE *f = fopen(filename, "r");
+    int ret;
+
     if (f == NULL) {
         return -errno;
     }
 
-    if (qemu_config_parse(f, vm_config_groups, filename) != 0) {
-        return -EINVAL;
-    }
+    ret = qemu_config_parse(f, vm_config_groups, filename);
     fclose(f);
 
-    return 0;
+    if (ret == 0) {
+        return 0;
+    } else {
+        return -EINVAL;
+    }
 }
diff --git a/vl.c b/vl.c
index c8abce6..4ca1bee 100644
--- a/vl.c
+++ b/vl.c
@@ -2683,12 +2683,12 @@  int main(int argc, char **argv, char **envp)
         int ret;
 
         ret = qemu_read_config_file(CONFIG_QEMU_CONFDIR "/qemu.conf");
-        if (ret == -EINVAL) {
+        if (ret < 0 && ret != -ENOENT) {
             exit(1);
         }
 
         ret = qemu_read_config_file(arch_config_name);
-        if (ret == -EINVAL) {
+        if (ret < 0 && ret != -ENOENT) {
             exit(1);
         }
     }