[libglnx: 1/4] backports: Add a backport of g_clear_pointer()
- From: Simon McVittie <smcv src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libglnx: 1/4] backports: Add a backport of g_clear_pointer()
- Date: Mon, 11 Nov 2019 18:36:31 +0000 (UTC)
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]