qemu-block
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]