]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
nss: Declare g_autofree and g_steal_pointer() macros
authorMichal Privoznik <mprivozn@redhat.com>
Wed, 21 May 2025 15:26:01 +0000 (17:26 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 22 May 2025 13:44:12 +0000 (15:44 +0200)
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@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
build-aux/syntax-check.mk
tools/nss/libvirt_nss.h

index 62e1604e94cb565977e48ed9bdaff33f75003fd2..1303a0ce7eeede078c7cc72b6ad360285af8ae90 100644 (file)
@@ -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$$
index 5f356618f3ff1be8ac1b985267cccd7839f13717..a43731de45aa4083351e2f7a595e4f17a998710d 100644 (file)
@@ -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)
+#endif
+
+
 enum nss_status
 NSS_NAME(gethostbyname)(const char *name, struct hostent *result,
                         char *buffer, size_t buflen, int *errnop,