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; \ > }) >