The Monday 26 May 2014 à 19:37:06 (+0200), Markus Armbruster wrote :
> 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 <arm...@redhat.com>
> ---
> qemu-io.c | 14 +++++++++-----
> 1 file changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/qemu-io.c b/qemu-io.c
> index 9fcd72b..ef3fef6 100644
> --- a/qemu-io.c
> +++ b/qemu-io.c
> @@ -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) {
> --
> 1.9.3
>
>
Reviewed-by: Benoit Canet <ben...@irqsave.net>