Steve Sistare <steven.sist...@oracle.com> writes:

> Signed-off-by: Steve Sistare <steven.sist...@oracle.com>
> Reviewed-by: Marc-André Lureau <marcandre.lur...@redhat.com>
> ---
>  include/qapi/util.h | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
>
> diff --git a/include/qapi/util.h b/include/qapi/util.h
> index 81a2b13..e1b8b1d 100644
> --- a/include/qapi/util.h
> +++ b/include/qapi/util.h
> @@ -56,4 +56,17 @@ int parse_qapi_name(const char *name, bool complete);
>      (tail) = &(*(tail))->next; \
>  } while (0)
>  
> +/*
> + * For any GenericList @list, return its length.
> + */
> +#define QAPI_LIST_LENGTH(list) \
> +    ({ \
> +        int len = 0; \

size_t

> +        typeof(list) elem; \

Name this @tail, please.

> +        for (elem = list; elem != NULL; elem = elem->next) { \
> +            len++; \
> +        } \
> +        len; \
> +    })
> +
>  #endif

This is a macro instead of a function so users don't have to cast their
FooList * to GenericList *.

The only user outside tests is strv_from_strList().  I'd be tempted to
open-code it there and call it a day.  Or do you have more users in
mind?

If we keep the macro, please align the backslashes like this:

   #define QAPI_LIST_LENGTH(list)                                  \
       ({                                                          \
           int len = 0;                                            \
           typeof(list) elem;                                      \
           for (elem = list; elem != NULL; elem = elem->next) {    \
               len++;                                              \
           }                                                       \
           len;                                                    \
       })


Reply via email to