Am 21.02.2014 um 21:22 hat Eric Blake geschrieben: > On 02/21/2014 08:24 AM, Kevin Wolf wrote: > > has_help_option() checks if any help option ('help' or '?') occurs > > anywhere in an option string, so that things like 'cluster_size=4k,help' > > are recognised. > > > > is_valid_option_list() ensures that the option list doesn't have options > > with leading commas or trailing unescaped commas. > > > > Signed-off-by: Kevin Wolf <kw...@redhat.com> > > --- > > > + > > + while (*p) { > > + p = get_opt_value(buf, buflen, p); > > + if (*p) { > > + p++; > > + } > > + > > + if (is_help_option(buf)) { > > + result = true; > > + goto out; > > If this were 'break;', > > > + } > > + } > > + > > +out: > > then you wouldn't need this label. But that's cosmetic. > > > + free(buf); > > + return result; > > +} > > + > > +bool is_valid_option_list(const char *param) > > +{ > > + size_t buflen = strlen(param) + 1; > > + char *buf = g_malloc0(buflen); > > + const char *p = param; > > + bool result = true; > > + > > + while (*p) { > > + p = get_opt_value(buf, buflen, p); > > + if (*p && !*++p) { > > + result = false; > > + goto out; > > + } > > Rejects trailing commas. > > > + > > + if (!*buf || *buf == ',') { > > Rejects empty options, but also rejects values beginning with a comma. > But we have legacy users that accept implicitly named first options (see > opts_do_parse()). For example, this is a valid command line (albeit one > that prints a list of valid machines): > > qemu-kvm -machine ,,blah > > as shorthand for > > qemu-kvm -machine type=,,blah > > and where *buf would indeed be validly ','.
Right, but I can't allow this without allowing '-o ,,' which breaks the real use case. So the lesson is that you can concatenate option strings and use implicit option names at the same time. Kevin
pgp4faukP7qMj.pgp
Description: PGP signature