[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-block] [Qemu-devel] [PATCH 1/5] qapi: Add qapi_enum_parse_full
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-block] [Qemu-devel] [PATCH 1/5] qapi: Add qapi_enum_parse_full |
Date: |
Wed, 09 May 2018 13:53:23 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.3 (gnu/linux) |
Fam Zheng <address@hidden> 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 <address@hidden>
> ---
> 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.
- [Qemu-block] [PATCH 0/5] vmdk: Implement x-blockdev-create, Fam Zheng, 2018/05/09
- [Qemu-block] [PATCH 4/5] iotests: Filter cid numbers in VMDK extent info, Fam Zheng, 2018/05/09
- [Qemu-block] [PATCH 5/5] iotests: Add VMDK tests for blockdev-create, Fam Zheng, 2018/05/09
- Re: [Qemu-block] [Qemu-devel] [PATCH 0/5] vmdk: Implement x-blockdev-create, no-reply, 2018/05/09
- Re: [Qemu-block] [Qemu-devel] [PATCH 0/5] vmdk: Implement x-blockdev-create, no-reply, 2018/05/09