From: Kevin Wolf Date: Mon, 17 May 2010 08:36:47 +0000 (+0200) Subject: Fix error handling in qemu_read_config_file X-Git-Tag: v0.13.0-rc0~436 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=019e78ba6ec6f402dffc6bc9683f461a11a52c28;p=thirdparty%2Fqemu.git 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 --- diff --git a/qemu-config.c b/qemu-config.c index d5008851cb2..aa376d450ad 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 8c818f0d24d..328395e3dda 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); } }