From 019e78ba6ec6f402dffc6bc9683f461a11a52c28 Mon Sep 17 00:00:00 2001 From: Kevin Wolf Date: Mon, 17 May 2010 10:36:47 +0200 Subject: [PATCH] Fix error handling in qemu_read_config_file 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 Signed-off-by: Kevin Wolf Signed-off-by: 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 d500885..aa376d4 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 8c818f0..328395e 100644 --- a/vl.c +++ b/vl.c @@ -2662,12 +2662,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); } } -- 2.7.4