[virt-tools-list] [virt-viewer 2/2] Fix compilation with older glib versions
Christophe Fergeau
cfergeau at redhat.com
Wed Mar 20 14:42:27 UTC 2013
Recent commits introduced use of g_clear_object and
g_byte_array_new_take which are only present respectively in glib
2.28 and 2.32
---
src/Makefile.am | 1 +
src/virt-glib-compat.c | 32 ++++++++++++++++++++++++++++++++
src/virt-glib-compat.h | 20 ++++++++++++++++++++
3 files changed, 53 insertions(+)
create mode 100644 src/virt-glib-compat.c
diff --git a/src/Makefile.am b/src/Makefile.am
index d14ab01..27420cb 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -35,6 +35,7 @@ $(BUILT_SOURCES): %: %.etemplate $(ENUMS_FILES)
COMMON_SOURCES = \
$(BUILT_SOURCES) \
virt-glib-compat.h \
+ virt-glib-compat.c \
virt-gtk-compat.h \
virt-viewer-util.h virt-viewer-util.c \
virt-viewer-auth.h virt-viewer-auth.c \
diff --git a/src/virt-glib-compat.c b/src/virt-glib-compat.c
new file mode 100644
index 0000000..54cce62
--- /dev/null
+++ b/src/virt-glib-compat.c
@@ -0,0 +1,32 @@
+/* -*- Mode: C; c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/*
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, see <http://www.gnu.org/licenses/>.
+*/
+#include "virt-glib-compat.h"
+
+#if !GLIB_CHECK_VERSION(2,32,0)
+GByteArray *g_byte_array_new_take (guint8 *data, gsize len)
+{
+ GByteArray *array;
+
+ array = g_byte_array_new ();
+ g_assert (array->data == NULL);
+ g_assert (array->len == 0);
+
+ array->data = data;
+ array->len = len;
+
+ return array;
+}
+#endif
diff --git a/src/virt-glib-compat.h b/src/virt-glib-compat.h
index 23345a0..37b6f61 100644
--- a/src/virt-glib-compat.h
+++ b/src/virt-glib-compat.h
@@ -51,6 +51,26 @@ G_BEGIN_DECLS
} G_STMT_END
#endif
+#if !GLIB_CHECK_VERSION(2,28,0)
+#define g_clear_object(object_ptr) \
+ G_STMT_START { \
+ /* Only one access, please */ \
+ gpointer *_p = (gpointer) (object_ptr); \
+ gpointer _o; \
+ \
+ do \
+ _o = g_atomic_pointer_get (_p); \
+ while G_UNLIKELY (!g_atomic_pointer_compare_and_exchange (_p, _o, NULL));\
+ \
+ if (_o) \
+ g_object_unref (_o); \
+ } G_STMT_END
+#endif
+
+#if !GLIB_CHECK_VERSION(2,32,0)
+GByteArray *g_byte_array_new_take (guint8 *data, gsize len);
+#endif
+
G_END_DECLS
#endif // _VIRT_GLIB_COMPAT_H
--
1.8.1.4
More information about the virt-tools-list
mailing list