On Thu, May 22, 2025 at 14:25:13 +0200, Michal Privoznik via Devel wrote: > From: Michal Privoznik <mpriv...@redhat.com> > > While we do not want the nss plugin to link with anything but > necessary libs (libc and libjson-c) it can benefit from automatic > memory freeing. Instead of inventing macros with new name for > them, lets stick with g_autofree and g_steal_pointer() which we > are used to from the rest of the code. Borrow and simplify > definitions for these macros then. > > Signed-off-by: Michal Privoznik <mpriv...@redhat.com> > --- > build-aux/syntax-check.mk | 2 +- > tools/nss/libvirt_nss.h | 24 ++++++++++++++++++++++++ > 2 files changed, 25 insertions(+), 1 deletion(-) > > diff --git a/build-aux/syntax-check.mk b/build-aux/syntax-check.mk > index 62e1604e94..1303a0ce7e 100644 > --- a/build-aux/syntax-check.mk > +++ b/build-aux/syntax-check.mk > @@ -1421,7 +1421,7 @@ > exclude_file_name_regexp--sc_prohibit_canonicalize_file_name = \ > ^(build-aux/syntax-check\.mk|tests/virfilemock\.c)$$ > > exclude_file_name_regexp--sc_prohibit_raw_allocation = \ > - > ^(docs/advanced-tests\.rst|src/util/viralloc\.[ch]|examples/.*|tests/(securityselinuxhelper|(vircgroup|nss)mock|commandhelper)\.c|tools/wireshark/src/packet-libvirt\.c|tools/nss/libvirt_nss(_leases|_macs)?\.c)$$ > + > ^(docs/advanced-tests\.rst|src/util/viralloc\.[ch]|examples/.*|tests/(securityselinuxhelper|(vircgroup|nss)mock|commandhelper)\.c|tools/wireshark/src/packet-libvirt\.c|tools/nss/libvirt_nss(_leases|_macs)?\.[ch])$$ > > exclude_file_name_regexp--sc_prohibit_readlink = \ > ^src/(util/virutil|lxc/lxc_container)\.c$$ > diff --git a/tools/nss/libvirt_nss.h b/tools/nss/libvirt_nss.h > index 5f356618f3..a43731de45 100644 > --- a/tools/nss/libvirt_nss.h > +++ b/tools/nss/libvirt_nss.h > @@ -29,6 +29,7 @@ > #include <sys/socket.h> > #include <netinet/in.h> > #include <netdb.h> > +#include <stdlib.h> > > > #if 0 > @@ -62,6 +63,29 @@ do { \ > # define NSS_NAME(s) _nss_libvirt_guest_##s##_r > #endif > > +#if !defined(g_autofree) > +static inline void > +generic_free(void *p) > +{ > + free(*((void **)p)); > +} > +# define g_autofree __attribute__((cleanup(generic_free))) > +#endif > + > +#if !defined(g_steal_pointer) > +static inline void * > +g_steal_pointer(void *p) > +{ > + void **pp = (void **)p; > + void *ptr = *pp; > + > + *pp = NULL; > + return ptr; > +} > +# define g_steal_pointer(x) (__typeof__(*(x))) g_steal_pointer(x)
As noted in the next patch it's a bad idea to name this same as glib macros. This code is supposed to be kept glib free and this makes it seem as if glib was used here.