This variant of qapi_enum_parse can do case insensitive compare. Signed-off-by: Fam Zheng <f...@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. -- 2.14.3