Message ID | 20180509055802.28423-2-famz@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Fam Zheng <famz@redhat.com> writes: > This variant of qapi_enum_parse can do case insensitive compare. I'm curious why we need that. We'll see when we get to the new function's uses. > Signed-off-by: Fam Zheng <famz@redhat.com> > --- > include/qapi/util.h | 2 ++ > qapi/qapi-util.c | 20 ++++++++++++++++---- > 2 files changed, 18 insertions(+), 4 deletions(-) > > diff --git a/include/qapi/util.h b/include/qapi/util.h > index a7c3c64148..2cec231919 100644 > --- a/include/qapi/util.h > +++ b/include/qapi/util.h > @@ -19,6 +19,8 @@ typedef struct QEnumLookup { > const char *qapi_enum_lookup(const QEnumLookup *lookup, int val); > int qapi_enum_parse(const QEnumLookup *lookup, const char *buf, > int def, Error **errp); > +int qapi_enum_parse_full(const QEnumLookup *lookup, const char *buf, > + int def, bool ignore_case, Error **errp); > > int parse_qapi_name(const char *name, bool complete); > > diff --git a/qapi/qapi-util.c b/qapi/qapi-util.c > index e9b266bb70..6180957edb 100644 > --- a/qapi/qapi-util.c > +++ b/qapi/qapi-util.c > @@ -21,8 +21,8 @@ const char *qapi_enum_lookup(const QEnumLookup *lookup, int val) > return lookup->array[val]; > } > > -int qapi_enum_parse(const QEnumLookup *lookup, const char *buf, > - int def, Error **errp) > +int qapi_enum_parse_full(const QEnumLookup *lookup, const char *buf, > + int def, bool ignore_case, Error **errp) > { > int i; > > @@ -31,8 +31,14 @@ int qapi_enum_parse(const QEnumLookup *lookup, const char *buf, > } > > for (i = 0; i < lookup->size; i++) { > - if (!strcmp(buf, lookup->array[i])) { > - return i; > + if (ignore_case) { > + if (!strcasecmp(buf, lookup->array[i])) { > + return i; > + } > + } else { > + if (!strcmp(buf, lookup->array[i])) { > + return i; > + } > } > } > > @@ -40,6 +46,12 @@ int qapi_enum_parse(const QEnumLookup *lookup, const char *buf, > return def; > } > > +int qapi_enum_parse(const QEnumLookup *lookup, const char *buf, > + int def, Error **errp) > +{ > + return qapi_enum_parse_full(lookup, buf, def, false, errp); > +} > + > /* > * Parse a valid QAPI name from @str. > * A valid name consists of letters, digits, hyphen and underscore. What's "full" about qapi_enum_parse_full()? Existing parse_unit_full() differs from parse_uint() in that it always consumes the full string. Hmm. Do we expect to pass anything but literal false or true to @ignore_case? If not, then a more convenient interface is two functions, just like we have strcmp() and strcasecmp(). They could still call a common internal helper to avoid code duplication. Consider passing strcmp, strcasecmp instead of false, true to it then.
diff --git a/include/qapi/util.h b/include/qapi/util.h index a7c3c64148..2cec231919 100644 --- a/include/qapi/util.h +++ b/include/qapi/util.h @@ -19,6 +19,8 @@ typedef struct QEnumLookup { const char *qapi_enum_lookup(const QEnumLookup *lookup, int val); int qapi_enum_parse(const QEnumLookup *lookup, const char *buf, int def, Error **errp); +int qapi_enum_parse_full(const QEnumLookup *lookup, const char *buf, + int def, bool ignore_case, Error **errp); int parse_qapi_name(const char *name, bool complete); diff --git a/qapi/qapi-util.c b/qapi/qapi-util.c index e9b266bb70..6180957edb 100644 --- a/qapi/qapi-util.c +++ b/qapi/qapi-util.c @@ -21,8 +21,8 @@ const char *qapi_enum_lookup(const QEnumLookup *lookup, int val) return lookup->array[val]; } -int qapi_enum_parse(const QEnumLookup *lookup, const char *buf, - int def, Error **errp) +int qapi_enum_parse_full(const QEnumLookup *lookup, const char *buf, + int def, bool ignore_case, Error **errp) { int i; @@ -31,8 +31,14 @@ int qapi_enum_parse(const QEnumLookup *lookup, const char *buf, } for (i = 0; i < lookup->size; i++) { - if (!strcmp(buf, lookup->array[i])) { - return i; + if (ignore_case) { + if (!strcasecmp(buf, lookup->array[i])) { + return i; + } + } else { + if (!strcmp(buf, lookup->array[i])) { + return i; + } } } @@ -40,6 +46,12 @@ int qapi_enum_parse(const QEnumLookup *lookup, const char *buf, return def; } +int qapi_enum_parse(const QEnumLookup *lookup, const char *buf, + int def, Error **errp) +{ + return qapi_enum_parse_full(lookup, buf, def, false, errp); +} + /* * Parse a valid QAPI name from @str. * A valid name consists of letters, digits, hyphen and underscore.
This variant of qapi_enum_parse can do case insensitive compare. Signed-off-by: Fam Zheng <famz@redhat.com> --- include/qapi/util.h | 2 ++ qapi/qapi-util.c | 20 ++++++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-)