On 2/21/2024 8:29 AM, Markus Armbruster wrote:
> 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

ok.

>> +        typeof(list) elem; \
> 
> Name this @tail, please.

ok.

>> +        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?

That's the only use.  If I make it private, I would still define it as
a static subroutine in util/strList.c, because it simplifies strv_from_strList.
IMO providing a public list length function or macro is pretty basic, but
I am not wedded to it.  Your call.

- Steve

> 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