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|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$$
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
+#include <stdlib.h>
#if 0
# 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,