Re: [PATCH 3/7] nss: Declare g_autofree and g_steal_pointer() macros

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, May 22, 2025 at 14:25:13 +0200, Michal Privoznik via Devel wrote:
> From: Michal Privoznik <mprivozn@xxxxxxxxxx>
> 
> 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 <mprivozn@xxxxxxxxxx>
> ---
>  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.



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux