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