diff options
author | Markus Armbruster <armbru@redhat.com> | 2014-05-28 11:16:58 +0200 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2014-05-30 14:26:54 +0200 |
commit | 443422fde7cb8410849074181de7b91bfd13b19d (patch) | |
tree | 192ac784957835daa524fc0e914ba353a8277cc8 /qemu-io.c | |
parent | b20e61e0d52eef57cf5db55087b16e0b5207e730 (diff) | |
download | qemu-443422fde7cb8410849074181de7b91bfd13b19d.zip qemu-443422fde7cb8410849074181de7b91bfd13b19d.tar.gz qemu-443422fde7cb8410849074181de7b91bfd13b19d.tar.bz2 |
qemu-io: Support multiple -o in open command
Instead of ignoring all option values but the last one, multiple -o
options now have the same meaning as having a single option with all
settings in the order of their respective -o options.
Same as commit 2dc8328 for qemu-img convert, except here we do it with
QemuOpts rather than QEMUOptionParameter.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Benoit Canet <benoit@irqsave.net>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'qemu-io.c')
-rw-r--r-- | qemu-io.c | 14 |
1 files changed, 9 insertions, 5 deletions
@@ -118,6 +118,7 @@ static const cmdinfo_t open_cmd = { static QemuOptsList empty_opts = { .name = "drive", + .merge_lists = true, .head = QTAILQ_HEAD_INITIALIZER(empty_opts.head), .desc = { /* no elements => accept any params */ @@ -132,7 +133,7 @@ static int open_f(BlockDriverState *bs, int argc, char **argv) int growable = 0; int c; QemuOpts *qopts; - QDict *opts = NULL; + QDict *opts; while ((c = getopt(argc, argv, "snrgo:")) != EOF) { switch (c) { @@ -149,15 +150,14 @@ static int open_f(BlockDriverState *bs, int argc, char **argv) growable = 1; break; case 'o': - qopts = qemu_opts_parse(&empty_opts, optarg, 0); - if (qopts == NULL) { + if (!qemu_opts_parse(&empty_opts, optarg, 0)) { printf("could not parse option list -- %s\n", optarg); + qemu_opts_reset(&empty_opts); return 0; } - opts = qemu_opts_to_qdict(qopts, opts); - qemu_opts_del(qopts); break; default: + qemu_opts_reset(&empty_opts); return qemuio_command_usage(&open_cmd); } } @@ -166,6 +166,10 @@ static int open_f(BlockDriverState *bs, int argc, char **argv) flags |= BDRV_O_RDWR; } + qopts = qemu_opts_find(&empty_opts, NULL); + opts = qopts ? qemu_opts_to_qdict(qopts, NULL) : NULL; + qemu_opts_reset(&empty_opts); + if (optind == argc - 1) { return openfile(argv[optind], flags, growable, opts); } else if (optind == argc) { |