[libglnx: 1/4] backports: Add a backport of g_clear_pointer()



commit 46ba6b4187ea7e70caeef4bee144a932c6bf84ca
Author: Simon McVittie <smcv collabora com>
Date:   Wed May 1 19:57:18 2019 +0100

    backports: Add a backport of g_clear_pointer()
    
    This will be necessary if targeting GLib versions older than 2.34,
    such as GLib 2.32 in Ubuntu 12.04 and the Steam Runtime.
    
    Signed-off-by: Simon McVittie <smcv collabora com>

 glnx-backports.h | 20 ++++++++++++++++++++
 glnx-fdio.c      |  1 +
 2 files changed, 21 insertions(+)
---
diff --git a/glnx-backports.h b/glnx-backports.h
index cd853cc..b6d93c0 100644
--- a/glnx-backports.h
+++ b/glnx-backports.h
@@ -27,6 +27,26 @@
 
 G_BEGIN_DECLS
 
+#if !GLIB_CHECK_VERSION(2, 34, 0)
+#define g_clear_pointer(pp, destroy) \
+  G_STMT_START {                                                               \
+    G_STATIC_ASSERT (sizeof *(pp) == sizeof (gpointer));                       \
+    /* Only one access, please; work around type aliasing */                   \
+    union { char *in; gpointer *out; } _pp;                                    \
+    gpointer _p;                                                               \
+    /* This assignment is needed to avoid a gcc warning */                     \
+    GDestroyNotify _destroy = (GDestroyNotify) (destroy);                      \
+                                                                               \
+    _pp.in = (char *) (pp);                                                    \
+    _p = *_pp.out;                                                             \
+    if (_p)                                                                    \
+      {                                                                        \
+        *_pp.out = NULL;                                                       \
+        _destroy (_p);                                                         \
+      }                                                                        \
+  } G_STMT_END
+#endif
+
 #if !GLIB_CHECK_VERSION(2, 44, 0)
 
 #define g_strv_contains glnx_strv_contains
diff --git a/glnx-fdio.c b/glnx-fdio.c
index 12879cd..31bb15d 100644
--- a/glnx-fdio.c
+++ b/glnx-fdio.c
@@ -37,6 +37,7 @@
 #include <glnx-errors.h>
 #include <glnx-xattrs.h>
 #include <glnx-backport-autoptr.h>
+#include <glnx-backports.h>
 #include <glnx-local-alloc.h>
 #include <glnx-missing.h>
 


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