提交 019e78ba 编写于 作者: K Kevin Wolf 提交者: Anthony Liguori

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: NLuiz Capitulino <lcapitulino@redhat.com>
Signed-off-by: NKevin Wolf <kwolf@redhat.com>
Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
上级 ebbeb789
...@@ -521,14 +521,18 @@ out: ...@@ -521,14 +521,18 @@ out:
int qemu_read_config_file(const char *filename) int qemu_read_config_file(const char *filename)
{ {
FILE *f = fopen(filename, "r"); FILE *f = fopen(filename, "r");
int ret;
if (f == NULL) { if (f == NULL) {
return -errno; return -errno;
} }
if (qemu_config_parse(f, vm_config_groups, filename) != 0) { ret = qemu_config_parse(f, vm_config_groups, filename);
return -EINVAL;
}
fclose(f); fclose(f);
return 0; if (ret == 0) {
return 0;
} else {
return -EINVAL;
}
} }
...@@ -2662,12 +2662,12 @@ int main(int argc, char **argv, char **envp) ...@@ -2662,12 +2662,12 @@ int main(int argc, char **argv, char **envp)
int ret; int ret;
ret = qemu_read_config_file(CONFIG_QEMU_CONFDIR "/qemu.conf"); ret = qemu_read_config_file(CONFIG_QEMU_CONFDIR "/qemu.conf");
if (ret == -EINVAL) { if (ret < 0 && ret != -ENOENT) {
exit(1); exit(1);
} }
ret = qemu_read_config_file(arch_config_name); ret = qemu_read_config_file(arch_config_name);
if (ret == -EINVAL) { if (ret < 0 && ret != -ENOENT) {
exit(1); exit(1);
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册