On Wed, Feb 27, 2013 at 09:42:50AM -0600, Anthony Liguori wrote: > Paolo Bonzini <pbonzini@xxxxxxxxxx> writes: > > > Il 26/02/2013 20:35, Anthony Liguori ha scritto: > >>>> >> > >>>> >> See also discussion on multi-valued keys in command line option > >>>> >> arguments and config files in v1 thread. Hopefully we can reach a > >>>> >> conclusion soon, and then we'll see whether this patch is what we want. > >>> > > >>> > Yeah, let's drop this patch by now. I am starting to be convinced that > >>> > "cpus=A,cpus=B,cpus=C" is the best approach. It is not pretty, but at > >>> > least it uses generic parser code instead of yet another ad-hoc > >>> > parser. > >> No, we cannot rely on this behavior. We had to do it to support > >> backwards compat with netdev but it should not be used anywhere else. > > > > We chose a config format (git's) because it was a good match for > > QemuOpts, and multiple-valued operations are well supported by that > > config format; see git-config(1). There is no reason to consider it a > > backwards-compatibility hack. > > There's such thing as list support in QemuOpts. [skipping stuff about internal implementation details that don't matter] > > If we want to have list syntax, we need to introduce first class support > for it. Absolutely. But how the syntax for it should look like? > Here's a simple example of how to do this. Obviously we would > want to introduce some better error checking so we can catch if someone > tries to access a list with a non-list accessor. We also would need > list accessor functions. > > But it's really not hard at all. Of course. Once we decide how the syntax will look like, implementing it should be very easy. But as far as I can see, we were trying to discuss what's the appropriate syntax, here. I still don't see why "option=A:B:C" with no possibility of having list items containing ":" (like your proposal below) is a better generic syntax for lists than "option=A,option=B,option=C". > From 4ee7ed36d597f0defd78baac7480ecb29e11e1c1 Mon Sep 17 00:00:00 2001 > From: Anthony Liguori <aliguori@xxxxxxxxxx> > Date: Wed, 27 Feb 2013 09:32:09 -0600 > Subject: [PATCH] qemu-opts: support lists > > Signed-off-by: Anthony Liguori <aliguori@xxxxxxxxxx> > --- > include/qemu/option.h | 2 ++ > util/qemu-option.c | 12 ++++++++++++ > 2 files changed, 14 insertions(+) > > diff --git a/include/qemu/option.h b/include/qemu/option.h > index ba197cd..e4808c3 100644 > --- a/include/qemu/option.h > +++ b/include/qemu/option.h > @@ -41,6 +41,7 @@ enum QEMUOptionParType { > typedef struct QEMUOptionParameter { > const char *name; > enum QEMUOptionParType type; > + bool list; > union { > uint64_t n; > char* s; > @@ -95,6 +96,7 @@ enum QemuOptType { > typedef struct QemuOptDesc { > const char *name; > enum QemuOptType type; > + bool list; > const char *help; > } QemuOptDesc; > > diff --git a/util/qemu-option.c b/util/qemu-option.c > index 5a1d03c..6b1ae6e 100644 > --- a/util/qemu-option.c > +++ b/util/qemu-option.c > @@ -636,6 +636,18 @@ static void opt_set(QemuOpts *opts, const char *name, const char *value, > return; > } > > + if (desc->list && strchr(value, ':')) { > + gchar **tokens = g_strsplit(value, ":", 0); > + int i; > + for (i = 0; tokens[i]; i++) { > + opt_set(opts, name, tokens[i], prepend, errp); > + if (error_is_set(errp)) { > + return; > + } > + } > + g_strfreev(tokens); > + } > + > opt = g_malloc0(sizeof(*opt)); > opt->name = g_strdup(name); > opt->opts = opts; > -- > 1.8.0 > > > Regards, > > Anthony Liguori > > > > > Paolo -- Eduardo -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list