diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2012-02-22 22:40:00 +0000 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2012-02-24 13:36:06 -0600 |
commit | 967c0da73a7b0da186baba6632301d83644a570c (patch) | |
tree | 0425c547fd37766839b52dd4e398e3cd304ceb94 /vl.c | |
parent | 9ebe95fb606a8d6bebe29de3efc9b506c6428c62 (diff) |
vl.c: Avoid segfault when started with no arguments
Fix a bug (introduced in commit a0abe47) where a command line which
specified no machine arguments (either explicitly or implicitly via
-kernel &co) would result in a segfault because of a NULL pointer
returned from qemu_opts_find(qemu_find_opts("machine"), 0).
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'vl.c')
-rw-r--r-- | vl.c | 17 |
1 files changed, 10 insertions, 7 deletions
@@ -2261,7 +2261,7 @@ int main(int argc, char **argv, char **envp) DisplayState *ds; DisplayChangeListener *dcl; int cyls, heads, secs, translation; - QemuOpts *hda_opts = NULL, *opts; + QemuOpts *hda_opts = NULL, *opts, *machine_opts; QemuOptsList *olist; int optind; const char *optarg; @@ -3320,12 +3320,15 @@ int main(int argc, char **argv, char **envp) exit(1); } - kernel_filename = qemu_opt_get(qemu_opts_find(qemu_find_opts("machine"), - 0), "kernel"); - initrd_filename = qemu_opt_get(qemu_opts_find(qemu_find_opts("machine"), - 0), "initrd"); - kernel_cmdline = qemu_opt_get(qemu_opts_find(qemu_find_opts("machine"), - 0), "append"); + machine_opts = qemu_opts_find(qemu_find_opts("machine"), 0); + if (machine_opts) { + kernel_filename = qemu_opt_get(machine_opts, "kernel"); + initrd_filename = qemu_opt_get(machine_opts, "initrd"); + kernel_cmdline = qemu_opt_get(machine_opts, "append"); + } else { + kernel_filename = initrd_filename = kernel_cmdline = NULL; + } + if (!kernel_cmdline) { kernel_cmdline = ""; } |