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 _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list