[virt-tools-list] [virt-viewer 2/2] Fix compilation with older glib versions
Marc-André Lureau
mlureau at redhat.com
Wed Mar 20 14:46:01 UTC 2013
ack
----- Mensaje original -----
> 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 at redhat.com
> https://www.redhat.com/mailman/listinfo/virt-tools-list
>
More information about the virt-tools-list
mailing list