From 43e61e67c1b5b672bb6594efd7f7daab7da36db3 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Oct 30 2018 05:33:44 +0000 Subject: import dconf-0.28.0-4.el7 --- diff --git a/.dconf.metadata b/.dconf.metadata index 1b9b98a..0fda437 100644 --- a/.dconf.metadata +++ b/.dconf.metadata @@ -1 +1 @@ -d4ab94969864c3e00515d0c0ee5b8090a7e0f896 SOURCES/dconf-0.26.0.tar.xz +e6b10da51df002a1661ce938941770c549cd5b87 SOURCES/dconf-0.28.0.tar.xz diff --git a/.gitignore b/.gitignore index 46ea2cd..7125557 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/dconf-0.26.0.tar.xz +SOURCES/dconf-0.28.0.tar.xz diff --git a/SOURCES/dconf-0.26.0-Remove-libdbus-1-support.patch b/SOURCES/dconf-0.26.0-Remove-libdbus-1-support.patch deleted file mode 100644 index 651197c..0000000 --- a/SOURCES/dconf-0.26.0-Remove-libdbus-1-support.patch +++ /dev/null @@ -1,815 +0,0 @@ -From 1fb178fddf7adb041806078b20b00c89cb8a4cd1 Mon Sep 17 00:00:00 2001 -From: Allison Ryan Lortie -Date: Wed, 16 Dec 2015 14:54:31 +0000 -Subject: [PATCH 35/47] Remove libdbus-1 support - -Stop building the dconf-dbus-1 client library. Nobody is using it -anymore and we will soon be taking a non-conditional dependency on -libgio in any case. - -It is now only possible to use dconf with GDBus. ---- - Makefile.am | 2 +- - configure.ac | 3 - - dbus-1/.gitignore | 6 - - dbus-1/Makefile.am | 47 ------ - dbus-1/dconf-dbus-1.c | 188 ------------------------ - dbus-1/dconf-dbus-1.h | 56 ------- - dbus-1/dconf-dbus-1.pc.in | 11 -- - dbus-1/dconf-libdbus-1.c | 365 ---------------------------------------------- - dbus-1/dconf-libdbus-1.h | 11 -- - tests/Makefile.am | 8 - - 10 files changed, 1 insertion(+), 696 deletions(-) - delete mode 100644 dbus-1/.gitignore - delete mode 100644 dbus-1/Makefile.am - delete mode 100644 dbus-1/dconf-dbus-1.c - delete mode 100644 dbus-1/dconf-dbus-1.h - delete mode 100644 dbus-1/dconf-dbus-1.pc.in - delete mode 100644 dbus-1/dconf-libdbus-1.c - delete mode 100644 dbus-1/dconf-libdbus-1.h - -diff --git a/Makefile.am b/Makefile.am -index 83cd492..dd3571a 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -2,7 +2,7 @@ include Makefile.gtester - - ACLOCAL_AMFLAGS = -I m4 - --SUBDIRS = shm gvdb common engine service gdbus gsettings dbus-1 client bin docs tests -+SUBDIRS = shm gvdb common engine service gdbus gsettings client bin docs tests - - DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc - EXTRA_DIST = trim-lcov.py m4 -diff --git a/configure.ac b/configure.ac -index 21b57cb..95ca9d9 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -47,7 +47,6 @@ GTK_DOC_CHECK([1.15]) - # Dependencies - PKG_CHECK_MODULES(glib, glib-2.0 >= 2.44.0) - PKG_CHECK_MODULES(gio, gio-unix-2.0) --PKG_CHECK_MODULES(dbus, dbus-1) - - AC_ARG_WITH(gio_modules_dir, [ --with-gio-modules-dir=PATH choose directory for the GIO module, [default=LIBDIR/gio/modules]], giomodulesdir="$withval", giomodulesdir=${libdir}/gio/modules) - AC_SUBST(giomodulesdir) -@@ -83,11 +82,9 @@ AC_CONFIG_FILES([ - engine/Makefile - gdbus/Makefile - gsettings/Makefile -- dbus-1/dconf-dbus-1.pc - client/dconf.pc - client/Makefile - service/Makefile -- dbus-1/Makefile - bin/Makefile - tests/Makefile - docs/Makefile -diff --git a/dbus-1/.gitignore b/dbus-1/.gitignore -deleted file mode 100644 -index 36fad9e..0000000 ---- a/dbus-1/.gitignore -+++ /dev/null -@@ -1,6 +0,0 @@ --libdconf-libdbus-1.a --libdconf-libdbus-1-shared.a --libdconf-dbus-1.so --libdconf-dbus-1.so.0 --libdconf-dbus-1.so.0.0.0 --dconf-dbus-1.pc -diff --git a/dbus-1/Makefile.am b/dbus-1/Makefile.am -deleted file mode 100644 -index 4e60d01..0000000 ---- a/dbus-1/Makefile.am -+++ /dev/null -@@ -1,47 +0,0 @@ --include $(top_srcdir)/Makefile.gtester -- --noinst_LIBRARIES = libdconf-libdbus-1.a libdconf-libdbus-1-shared.a -- --libdconf_libdbus_1_a_CFLAGS = $(dbus_CFLAGS) $(glib_CFLAGS) -DG_LOG_DOMAIN=\"dconf\" --libdconf_libdbus_1_a_SOURCES = \ -- dconf-libdbus-1.h \ -- dconf-libdbus-1.c -- --libdconf_libdbus_1_shared_a_CFLAGS = $(libdconf_libdbus_1_a_CFLAGS) -fPIC -DPIC --libdconf_libdbus_1_shared_a_SOURCES = $(libdconf_libdbus_1_a_SOURCES) -- --dconf_dbus_1includedir = $(includedir)/dconf-dbus-1 --dconf_dbus_1include_HEADERS = dconf-dbus-1.h -- --pkgconfigdir = $(libdir)/pkgconfig --pkgconfig_DATA = dconf-dbus-1.pc -- --shlibdir = $(libdir) --shlib_PROGRAMS = libdconf-dbus-1.so.0.0.0 -- --libdconf_dbus_1_so_0_0_0_CFLAGS = $(dbus_CFLAGS) $(gio_CFLAGS) -fPIC -DPIC --libdconf_dbus_1_so_0_0_0_LDADD = \ -- ../engine/libdconf-engine-shared.a \ -- ../common/libdconf-common-hidden.a \ -- ./libdconf-libdbus-1-shared.a \ -- ../gvdb/libgvdb-shared.a \ -- ../shm/libdconf-shm-shared.a \ -- $(dbus_LIBS) \ -- $(glib_LIBS) --libdconf_dbus_1_so_0_0_0_LDFLAGS = -shared -Wl,-soname=libdconf-dbus-1.so.0 --libdconf_dbus_1_so_0_0_0_SOURCES = dconf-dbus-1.c -- --nodist_noinst_DATA = libdconf-dbus-1.so libdconf-dbus-1.so.0 -- --libdconf-dbus-1.so.0 libdconf-dbus-1.so: libdconf-dbus-1.so.0.0.0 -- $(AM_V_GEN) ln -fs libdconf-dbus-1.so.0.0.0 $@ -- --install-data-hook: -- ln -fs libdconf-dbus-1.so.0.0.0 $(DESTDIR)$(shlibdir)/libdconf-dbus-1.so.0 -- ln -fs libdconf-dbus-1.so.0.0.0 $(DESTDIR)$(shlibdir)/libdconf-dbus-1.so -- --uninstall-hook: -- rm -f $(DESTDIR)$(shlibdir)/libdconf-dbus-1.so.0 -- rm -f $(DESTDIR)$(shlibdir)/libdconf-dbus-1.so -- --CLEANFILES = libdconf-dbus-1.so.0 libdconf-dbus-1.so -diff --git a/dbus-1/dconf-dbus-1.c b/dbus-1/dconf-dbus-1.c -deleted file mode 100644 -index 67de4a0..0000000 ---- a/dbus-1/dconf-dbus-1.c -+++ /dev/null -@@ -1,188 +0,0 @@ --/** -- * Copyright © 2010 Canonical Limited -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the licence, or (at -- * your option) any later version. -- * -- * This program 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 -- * General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- * -- * Author: Ryan Lortie -- **/ -- --#include "config.h" -- --#include "dconf-dbus-1.h" -- --#include "../engine/dconf-engine.h" --#include "dconf-libdbus-1.h" -- --#include -- --struct _DConfDBusClient --{ -- DConfEngine *engine; -- GSList *watches; -- gint ref_count; --}; -- --typedef struct --{ -- gchar *path; -- DConfDBusNotify notify; -- gpointer user_data; --} Watch; -- --void --dconf_engine_change_notify (DConfEngine *engine, -- const gchar *prefix, -- const gchar * const *changes, -- const gchar *tag, -- gboolean is_writability, -- gpointer origin_tag, -- gpointer user_data) --{ -- DConfDBusClient *dcdbc = user_data; -- gchar **my_changes; -- gint n_changes; -- GSList *iter; -- gint i; -- -- n_changes = g_strv_length ((gchar **) changes); -- my_changes = g_new (gchar *, n_changes + 1); -- -- for (i = 0; i < n_changes; i++) -- my_changes[i] = g_strconcat (prefix, changes[i], NULL); -- my_changes[i] = NULL; -- -- for (iter = dcdbc->watches; iter; iter = iter->next) -- { -- Watch *watch = iter->data; -- -- for (i = 0; i < n_changes; i++) -- if (g_str_has_prefix (my_changes[i], watch->path)) -- watch->notify (dcdbc, my_changes[i], watch->user_data); -- } -- -- g_strfreev (my_changes); --} -- --GVariant * --dconf_dbus_client_read (DConfDBusClient *dcdbc, -- const gchar *key) --{ -- return dconf_engine_read (dcdbc->engine, NULL, key); --} -- --gboolean --dconf_dbus_client_write (DConfDBusClient *dcdbc, -- const gchar *key, -- GVariant *value) --{ -- DConfChangeset *changeset; -- gboolean success; -- -- changeset = dconf_changeset_new_write (key, value); -- success = dconf_engine_change_fast (dcdbc->engine, changeset, NULL, NULL); -- dconf_changeset_unref (changeset); -- -- return success; --} -- --void --dconf_dbus_client_subscribe (DConfDBusClient *dcdbc, -- const gchar *path, -- DConfDBusNotify notify, -- gpointer user_data) --{ -- Watch *watch; -- -- watch = g_slice_new (Watch); -- watch->path = g_strdup (path); -- watch->notify = notify; -- watch->user_data = user_data; -- -- dcdbc->watches = g_slist_prepend (dcdbc->watches, watch); -- -- dconf_engine_watch_fast (dcdbc->engine, path); --} -- --void --dconf_dbus_client_unsubscribe (DConfDBusClient *dcdbc, -- DConfDBusNotify notify, -- gpointer user_data) --{ -- GSList **ptr; -- -- for (ptr = &dcdbc->watches; *ptr; ptr = &(*ptr)->next) -- { -- Watch *watch = (*ptr)->data; -- -- if (watch->notify == notify && watch->user_data == user_data) -- { -- *ptr = g_slist_remove_link (*ptr, *ptr); -- dconf_engine_unwatch_fast (dcdbc->engine, watch->path); -- g_free (watch->path); -- g_slice_free (Watch, watch); -- return; -- } -- } -- -- g_warning ("No matching watch found to unsubscribe"); --} -- --gboolean --dconf_dbus_client_has_pending (DConfDBusClient *dcdbc) --{ -- return dconf_engine_has_outstanding (dcdbc->engine); --} -- --DConfDBusClient * --dconf_dbus_client_new (const gchar *profile, -- DBusConnection *session, -- DBusConnection *system) --{ -- DConfDBusClient *dcdbc; -- -- if (session == NULL) -- session = dbus_bus_get (DBUS_BUS_SESSION, NULL); -- -- if (system == NULL) -- system = dbus_bus_get (DBUS_BUS_SYSTEM, NULL); -- -- dconf_libdbus_1_provide_bus (G_BUS_TYPE_SESSION, session); -- dconf_libdbus_1_provide_bus (G_BUS_TYPE_SYSTEM, system); -- -- dcdbc = g_slice_new (DConfDBusClient); -- dcdbc->engine = dconf_engine_new (NULL, dcdbc, NULL); -- dcdbc->watches = NULL; -- dcdbc->ref_count = 1; -- -- return dcdbc; --} -- --void --dconf_dbus_client_unref (DConfDBusClient *dcdbc) --{ -- if (--dcdbc->ref_count == 0) -- { -- g_return_if_fail (dcdbc->watches == NULL); -- -- g_slice_free (DConfDBusClient, dcdbc); -- } --} -- --DConfDBusClient * --dconf_dbus_client_ref (DConfDBusClient *dcdbc) --{ -- dcdbc->ref_count++; -- -- return dcdbc; --} -diff --git a/dbus-1/dconf-dbus-1.h b/dbus-1/dconf-dbus-1.h -deleted file mode 100644 -index bd204be..0000000 ---- a/dbus-1/dconf-dbus-1.h -+++ /dev/null -@@ -1,56 +0,0 @@ --/** -- * Copyright © 2010 Canonical Limited -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the licence, or (at -- * your option) any later version. -- * -- * This program 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 -- * General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- * -- * Author: Ryan Lortie -- **/ -- --#ifndef _dconf_dbus_1_h_ --#define _dconf_dbus_1_h_ -- --#include --#include -- --G_BEGIN_DECLS -- --typedef struct _DConfDBusClient DConfDBusClient; -- --typedef void (* DConfDBusNotify) (DConfDBusClient *dcdbc, -- const gchar *key, -- gpointer user_data); -- --DConfDBusClient * dconf_dbus_client_new (const gchar *profile, -- DBusConnection *session, -- DBusConnection *system); --void dconf_dbus_client_unref (DConfDBusClient *dcdbc); --DConfDBusClient * dconf_dbus_client_ref (DConfDBusClient *dcdbc); -- --GVariant * dconf_dbus_client_read (DConfDBusClient *dcdbc, -- const gchar *key); --gboolean dconf_dbus_client_write (DConfDBusClient *dcdbc, -- const gchar *key, -- GVariant *value); --void dconf_dbus_client_subscribe (DConfDBusClient *dcdbc, -- const gchar *name, -- DConfDBusNotify notify, -- gpointer user_data); --void dconf_dbus_client_unsubscribe (DConfDBusClient *dcdbc, -- DConfDBusNotify notify, -- gpointer user_data); --gboolean dconf_dbus_client_has_pending (DConfDBusClient *dcdbc); -- --G_END_DECLS -- --#endif /* _dconf_dbus_1_h_ */ -diff --git a/dbus-1/dconf-dbus-1.pc.in b/dbus-1/dconf-dbus-1.pc.in -deleted file mode 100644 -index c4c3380..0000000 ---- a/dbus-1/dconf-dbus-1.pc.in -+++ /dev/null -@@ -1,11 +0,0 @@ --prefix=@prefix@ --exec_prefix=@exec_prefix@ --libdir=@libdir@ --includedir=@includedir@ -- --Name: dconf-dbus-1 --Description: dconf client library for libdbus-1 --Version: @VERSION@ --Requires: dbus-1, glib-2.0 --Libs: -L${libdir} -ldconf-dbus-1 --Cflags: -I${includedir}/dconf-dbus-1 -diff --git a/dbus-1/dconf-libdbus-1.c b/dbus-1/dconf-libdbus-1.c -deleted file mode 100644 -index 8ea187b..0000000 ---- a/dbus-1/dconf-libdbus-1.c -+++ /dev/null -@@ -1,365 +0,0 @@ --/** -- * Copyright © 2010 Canonical Limited -- * -- * This program is free software: you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation, either version 3 of the licence, or (at -- * your option) any later version. -- * -- * This program 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 -- * General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program. If not, see . -- * -- * Author: Ryan Lortie -- **/ -- --#include "config.h" -- --#include "dconf-libdbus-1.h" -- --#include "../engine/dconf-engine.h" -- --#include -- --static DBusConnection *dconf_libdbus_1_buses[5]; -- --struct _DConfDBusClient --{ -- DConfEngine *engine; -- GSList *watches; -- gint ref_count; --}; -- --#define DCONF_LIBDBUS_1_ERROR (g_quark_from_static_string("DCONF_LIBDBUS_1_ERROR")) --#define DCONF_LIBDBUS_1_ERROR_FAILED 0 -- --static DBusMessage * --dconf_libdbus_1_new_method_call (const gchar *bus_name, -- const gchar *object_path, -- const gchar *interface_name, -- const gchar *method_name, -- GVariant *parameters) --{ -- DBusMessageIter dbus_iter; -- DBusMessage *message; -- GVariantIter iter; -- GVariant *child; -- -- g_variant_ref_sink (parameters); -- -- message = dbus_message_new_method_call (bus_name, object_path, interface_name, method_name); -- dbus_message_iter_init_append (message, &dbus_iter); -- g_variant_iter_init (&iter, parameters); -- -- while ((child = g_variant_iter_next_value (&iter))) -- { -- if (g_variant_is_of_type (child, G_VARIANT_TYPE_STRING)) -- { -- const gchar *str; -- -- str = g_variant_get_string (child, NULL); -- dbus_message_iter_append_basic (&dbus_iter, DBUS_TYPE_STRING, &str); -- } -- -- else if (g_variant_is_of_type (child, G_VARIANT_TYPE_UINT32)) -- { -- guint32 uint; -- -- uint = g_variant_get_uint32 (child); -- dbus_message_iter_append_basic (&dbus_iter, DBUS_TYPE_UINT32, &uint); -- } -- -- else -- { -- DBusMessageIter subiter; -- const guint8 *bytes; -- gsize n_elements; -- -- g_assert (g_variant_is_of_type (child, G_VARIANT_TYPE_BYTESTRING)); -- -- bytes = g_variant_get_fixed_array (child, &n_elements, sizeof (guint8)); -- dbus_message_iter_open_container (&dbus_iter, DBUS_TYPE_ARRAY, "y", &subiter); -- dbus_message_iter_append_fixed_array (&subiter, DBUS_TYPE_BYTE, &bytes, n_elements); -- dbus_message_iter_close_container (&dbus_iter, &subiter); -- } -- -- g_variant_unref (child); -- } -- -- g_variant_unref (parameters); -- -- return message; --} -- --static GVariant * --dconf_libdbus_1_get_message_body (DBusMessage *message, -- GError **error) --{ -- GVariantBuilder builder; -- const gchar *signature; -- DBusMessageIter iter; -- -- /* We support two types: strings and arrays of strings. -- * -- * It's very simple to detect if the message contains only these -- * types: check that the signature contains only the letters "a" and -- * "s" and that it does not contain "aa". -- */ -- signature = dbus_message_get_signature (message); -- if (signature[strspn(signature, "as")] != '\0' || strstr (signature, "aa")) -- { -- g_set_error (error, DCONF_LIBDBUS_1_ERROR, DCONF_LIBDBUS_1_ERROR_FAILED, -- "unable to handle message type '(%s)'", signature); -- return NULL; -- } -- -- g_variant_builder_init (&builder, G_VARIANT_TYPE_TUPLE); -- dbus_message_iter_init (message, &iter); -- while (dbus_message_iter_get_arg_type (&iter)) -- { -- const gchar *string; -- -- if (dbus_message_iter_get_arg_type (&iter) == DBUS_TYPE_STRING) -- { -- dbus_message_iter_get_basic (&iter, &string); -- g_variant_builder_add (&builder, "s", string); -- } -- else -- { -- DBusMessageIter sub; -- -- g_assert (dbus_message_iter_get_arg_type (&iter) == DBUS_TYPE_ARRAY && -- dbus_message_iter_get_element_type (&iter) == DBUS_TYPE_STRING); -- -- g_variant_builder_open (&builder, G_VARIANT_TYPE_STRING_ARRAY); -- dbus_message_iter_recurse (&iter, &sub); -- -- while (dbus_message_iter_get_arg_type (&sub)) -- { -- const gchar *string; -- dbus_message_iter_get_basic (&sub, &string); -- g_variant_builder_add (&builder, "s", string); -- dbus_message_iter_next (&sub); -- } -- -- g_variant_builder_close (&builder); -- } -- dbus_message_iter_next (&iter); -- } -- -- return g_variant_ref_sink (g_variant_builder_end (&builder)); --} -- --static GVariant * --dconf_libdbus_1_interpret_result (DBusMessage *result, -- const GVariantType *expected_type, -- GError **error) --{ -- GVariant *reply; -- -- if (dbus_message_get_type (result) == DBUS_MESSAGE_TYPE_ERROR) -- { -- const gchar *errstr = "(no message)"; -- -- dbus_message_get_args (result, NULL, DBUS_TYPE_STRING, &errstr, DBUS_TYPE_INVALID); -- g_set_error (error, DCONF_LIBDBUS_1_ERROR, DCONF_LIBDBUS_1_ERROR_FAILED, -- "%s: %s", dbus_message_get_error_name (result), errstr); -- return NULL; -- } -- -- reply = dconf_libdbus_1_get_message_body (result, error); -- -- if (reply && expected_type && !g_variant_is_of_type (reply, expected_type)) -- { -- gchar *expected_string; -- -- expected_string = g_variant_type_dup_string (expected_type); -- g_set_error (error, DCONF_LIBDBUS_1_ERROR, DCONF_LIBDBUS_1_ERROR_FAILED, -- "received reply '%s' is not of the expected type %s", -- g_variant_get_type_string (reply), expected_string); -- g_free (expected_string); -- -- g_variant_unref (reply); -- reply = NULL; -- } -- -- return reply; --} -- --static void --dconf_libdbus_1_method_call_done (DBusPendingCall *pending, -- gpointer user_data) --{ -- DConfEngineCallHandle *handle = user_data; -- const GVariantType *expected_type; -- DBusMessage *message; -- GError *error = NULL; -- GVariant *reply; -- -- if (pending == NULL) -- return; -- -- message = dbus_pending_call_steal_reply (pending); -- dbus_pending_call_unref (pending); -- -- expected_type = dconf_engine_call_handle_get_expected_type (handle); -- reply = dconf_libdbus_1_interpret_result (message, expected_type, &error); -- dbus_message_unref (message); -- -- dconf_engine_call_handle_reply (handle, reply, error); -- -- if (reply) -- g_variant_unref (reply); -- if (error) -- g_error_free (error); --} -- --gboolean --dconf_engine_dbus_call_async_func (GBusType bus_type, -- const gchar *bus_name, -- const gchar *object_path, -- const gchar *interface_name, -- const gchar *method_name, -- GVariant *parameters, -- DConfEngineCallHandle *handle, -- GError **error) --{ -- DBusConnection *connection; -- DBusPendingCall *pending; -- DBusMessage *message; -- -- g_assert_cmpint (bus_type, <, G_N_ELEMENTS (dconf_libdbus_1_buses)); -- connection = dconf_libdbus_1_buses[bus_type]; -- g_assert (connection != NULL); -- -- message = dconf_libdbus_1_new_method_call (bus_name, object_path, interface_name, method_name, parameters); -- dbus_connection_send_with_reply (connection, message, &pending, -1); -- dbus_pending_call_set_notify (pending, dconf_libdbus_1_method_call_done, handle, NULL); -- dbus_message_unref (message); -- -- return TRUE; --} -- --static void --dconf_libdbus_1_convert_error (DBusError *dbus_error, -- GError **error) --{ -- g_set_error (error, DCONF_LIBDBUS_1_ERROR, DCONF_LIBDBUS_1_ERROR_FAILED, -- "%s: %s", dbus_error->name, dbus_error->message); --} -- --GVariant * --dconf_engine_dbus_call_sync_func (GBusType bus_type, -- const gchar *bus_name, -- const gchar *object_path, -- const gchar *interface_name, -- const gchar *method_name, -- GVariant *parameters, -- const GVariantType *expected_type, -- GError **error) --{ -- DBusConnection *connection; -- DBusMessage *message; -- DBusError dbus_error; -- DBusMessage *result; -- GVariant *reply; -- -- g_assert_cmpint (bus_type, <, G_N_ELEMENTS (dconf_libdbus_1_buses)); -- connection = dconf_libdbus_1_buses[bus_type]; -- g_assert (connection != NULL); -- -- dbus_error_init (&dbus_error); -- message = dconf_libdbus_1_new_method_call (bus_name, object_path, interface_name, method_name, parameters); -- result = dbus_connection_send_with_reply_and_block (connection, message, -1, &dbus_error); -- dbus_message_unref (message); -- -- if (result == NULL) -- { -- dconf_libdbus_1_convert_error (&dbus_error, error); -- dbus_error_free (&dbus_error); -- return NULL; -- } -- -- reply = dconf_libdbus_1_interpret_result (result, expected_type, error); -- dbus_message_unref (result); -- -- return reply; --} -- --static DBusHandlerResult --dconf_libdbus_1_filter (DBusConnection *connection, -- DBusMessage *message, -- gpointer user_data) --{ -- GBusType bus_type = GPOINTER_TO_INT (user_data); -- -- if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_SIGNAL) -- { -- const gchar *interface; -- -- interface = dbus_message_get_interface (message); -- -- if (interface && g_str_equal (interface, "ca.desrt.dconf.Writer")) -- { -- GVariant *parameters; -- -- parameters = dconf_libdbus_1_get_message_body (message, NULL); -- -- if (parameters != NULL) -- { -- dconf_engine_handle_dbus_signal (bus_type, -- dbus_message_get_sender (message), -- dbus_message_get_path (message), -- dbus_message_get_member (message), -- parameters); -- g_variant_unref (parameters); -- } -- } -- } -- -- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; --} -- --void --dconf_libdbus_1_provide_bus (GBusType bus_type, -- DBusConnection *connection) --{ -- g_assert_cmpint (bus_type, <, G_N_ELEMENTS (dconf_libdbus_1_buses)); -- -- if (!dconf_libdbus_1_buses[bus_type]) -- { -- dconf_libdbus_1_buses[bus_type] = dbus_connection_ref (connection); -- dbus_connection_add_filter (connection, dconf_libdbus_1_filter, GINT_TO_POINTER (bus_type), NULL); -- } --} -- --#ifndef PIC --static gboolean --dconf_libdbus_1_check_connection (gpointer user_data) --{ -- DBusConnection *connection = user_data; -- -- dbus_connection_read_write (connection, 0); -- dbus_connection_dispatch (connection); -- -- return G_SOURCE_CONTINUE; --} -- --void --dconf_engine_dbus_init_for_testing (void) --{ -- DBusConnection *session; -- DBusConnection *system; -- -- dconf_libdbus_1_provide_bus (G_BUS_TYPE_SESSION, session = dbus_bus_get (DBUS_BUS_SESSION, NULL)); -- dconf_libdbus_1_provide_bus (G_BUS_TYPE_SYSTEM, system = dbus_bus_get (DBUS_BUS_SYSTEM, NULL)); -- -- /* "mainloop integration" */ -- g_timeout_add (1, dconf_libdbus_1_check_connection, session); -- g_timeout_add (1, dconf_libdbus_1_check_connection, system); --} --#endif -diff --git a/dbus-1/dconf-libdbus-1.h b/dbus-1/dconf-libdbus-1.h -deleted file mode 100644 -index 201096a..0000000 ---- a/dbus-1/dconf-libdbus-1.h -+++ /dev/null -@@ -1,11 +0,0 @@ --#ifndef __dconf_libdbus_1_h__ --#define __dconf_libdbus_1_h__ -- --#include --#include -- --G_GNUC_INTERNAL --void dconf_libdbus_1_provide_bus (GBusType bus_type, -- DBusConnection *connection); -- --#endif /* __dconf_libdbus_1_h__ */ -diff --git a/tests/Makefile.am b/tests/Makefile.am -index adc8519..0a53ee6 100644 ---- a/tests/Makefile.am -+++ b/tests/Makefile.am -@@ -64,14 +64,6 @@ gdbus_filter_LDADD = \ - $(gio_LIBS) - gdbus_filter_SOURCES = dbus.c - --TEST_PROGS += libdbus-1 --libdbus_1_CFLAGS = $(gio_CFLAGS) -DDBUS_BACKEND=\"/libdbus-1\" --libdbus_1_LDADD = \ -- ../dbus-1/libdconf-libdbus-1.a \ -- $(glib_LIBS) \ -- $(dbus_LIBS) --libdbus_1_SOURCES = dbus.c -- - TEST_PROGS += engine - engine_CFLAGS = $(glib_CFLAGS) -DSRCDIR=\"$(abs_srcdir)\" - engine_LDADD = \ --- -2.9.3 - diff --git a/SOURCES/dconf-0.26.0-db-mtime.patch b/SOURCES/dconf-0.26.0-db-mtime.patch deleted file mode 100644 index 69fe241..0000000 --- a/SOURCES/dconf-0.26.0-db-mtime.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 6a6797446f13378035a2700253546b524d629c8a Mon Sep 17 00:00:00 2001 -From: Marek Kasik -Date: Tue, 10 Jul 2018 18:29:16 +0200 -Subject: [PATCH] Check mtimes of files when updating databases - -Do not check just mtimes of directories in /etc/dconf/db/ -but also mtimes of the files in those directories -to catch all modifications in them. - -https://bugzilla.gnome.org/show_bug.cgi?id=708258 ---- - bin/dconf-update.vala | 41 ++++++++++++++++++++++++++++++++++------- - 1 file changed, 34 insertions(+), 7 deletions(-) - -diff --git a/bin/dconf-update.vala b/bin/dconf-update.vala -index d452092..5aac6c7 100644 ---- a/bin/dconf-update.vala -+++ b/bin/dconf-update.vala -@@ -162,21 +162,48 @@ Gvdb.HashTable read_directory (string dirname) throws GLib.Error { - return table; - } - -+time_t get_directory_mtime (string dirname, Posix.Stat dir_buf) throws GLib.Error { -+ Posix.Stat lockdir_buf; -+ Posix.Stat file_buf; -+ time_t dir_mtime = dir_buf.st_mtime; -+ -+ var files = list_directory (dirname, Posix.S_IFREG); -+ files.sort (strcmp); -+ files.reverse (); -+ -+ foreach (var filename in files) { -+ if (Posix.stat (filename, out file_buf) == 0 && file_buf.st_mtime > dir_mtime) -+ dir_mtime = file_buf.st_mtime; -+ } -+ -+ if (Posix.stat (dirname + "/locks", out lockdir_buf) == 0 && Posix.S_ISDIR (lockdir_buf.st_mode)) { -+ if (lockdir_buf.st_mtime > dir_mtime) { -+ // if the lock directory has been updated more recently then consider its timestamp instead -+ dir_mtime = lockdir_buf.st_mtime; -+ } -+ -+ files = list_directory (dirname + "/locks", Posix.S_IFREG); -+ files.sort (strcmp); -+ files.reverse (); -+ -+ foreach (var filename in files) { -+ if (Posix.stat (filename, out file_buf) == 0 && file_buf.st_mtime > dir_mtime) -+ dir_mtime = file_buf.st_mtime; -+ } -+ } -+ -+ return dir_mtime; -+} -+ - void maybe_update_from_directory (string dirname) throws GLib.Error { - Posix.Stat dir_buf; - - if (Posix.stat (dirname, out dir_buf) == 0 && Posix.S_ISDIR (dir_buf.st_mode)) { -- Posix.Stat lockdir_buf; - Posix.Stat file_buf; - - var filename = dirname.substring (0, dirname.length - 2); - -- if (Posix.stat (dirname + "/locks", out lockdir_buf) == 0 && lockdir_buf.st_mtime > dir_buf.st_mtime) { -- // if the lock directory has been updated more recently then consider its timestamp instead -- dir_buf.st_mtime = lockdir_buf.st_mtime; -- } -- -- if (Posix.stat (filename, out file_buf) == 0 && file_buf.st_mtime > dir_buf.st_mtime) { -+ if (Posix.stat (filename, out file_buf) == 0 && file_buf.st_mtime > get_directory_mtime (dirname, dir_buf)) { - return; - } - --- -2.17.1 - diff --git a/SOURCES/dconf-0.26.0-read-flag.patch b/SOURCES/dconf-0.26.0-read-flag.patch deleted file mode 100644 index 541cb24..0000000 --- a/SOURCES/dconf-0.26.0-read-flag.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- dconf-0.26.0/dbus-1/dconf-dbus-1.c.orig 2017-02-10 16:56:10.000000000 +0100 -+++ dconf-0.26.0/dbus-1/dconf-dbus-1.c 2017-02-10 16:56:15.686442282 +0100 -@@ -78,7 +78,7 @@ GVariant * - dconf_dbus_client_read (DConfDBusClient *dcdbc, - const gchar *key) - { -- return dconf_engine_read (dcdbc->engine, NULL, key); -+ return dconf_engine_read (dcdbc->engine, DCONF_READ_FLAGS_NONE, NULL, key); - } - - gboolean diff --git a/SOURCES/dconf-0.28.0-db-mtime.patch b/SOURCES/dconf-0.28.0-db-mtime.patch new file mode 100644 index 0000000..69fe241 --- /dev/null +++ b/SOURCES/dconf-0.28.0-db-mtime.patch @@ -0,0 +1,77 @@ +From 6a6797446f13378035a2700253546b524d629c8a Mon Sep 17 00:00:00 2001 +From: Marek Kasik +Date: Tue, 10 Jul 2018 18:29:16 +0200 +Subject: [PATCH] Check mtimes of files when updating databases + +Do not check just mtimes of directories in /etc/dconf/db/ +but also mtimes of the files in those directories +to catch all modifications in them. + +https://bugzilla.gnome.org/show_bug.cgi?id=708258 +--- + bin/dconf-update.vala | 41 ++++++++++++++++++++++++++++++++++------- + 1 file changed, 34 insertions(+), 7 deletions(-) + +diff --git a/bin/dconf-update.vala b/bin/dconf-update.vala +index d452092..5aac6c7 100644 +--- a/bin/dconf-update.vala ++++ b/bin/dconf-update.vala +@@ -162,21 +162,48 @@ Gvdb.HashTable read_directory (string dirname) throws GLib.Error { + return table; + } + ++time_t get_directory_mtime (string dirname, Posix.Stat dir_buf) throws GLib.Error { ++ Posix.Stat lockdir_buf; ++ Posix.Stat file_buf; ++ time_t dir_mtime = dir_buf.st_mtime; ++ ++ var files = list_directory (dirname, Posix.S_IFREG); ++ files.sort (strcmp); ++ files.reverse (); ++ ++ foreach (var filename in files) { ++ if (Posix.stat (filename, out file_buf) == 0 && file_buf.st_mtime > dir_mtime) ++ dir_mtime = file_buf.st_mtime; ++ } ++ ++ if (Posix.stat (dirname + "/locks", out lockdir_buf) == 0 && Posix.S_ISDIR (lockdir_buf.st_mode)) { ++ if (lockdir_buf.st_mtime > dir_mtime) { ++ // if the lock directory has been updated more recently then consider its timestamp instead ++ dir_mtime = lockdir_buf.st_mtime; ++ } ++ ++ files = list_directory (dirname + "/locks", Posix.S_IFREG); ++ files.sort (strcmp); ++ files.reverse (); ++ ++ foreach (var filename in files) { ++ if (Posix.stat (filename, out file_buf) == 0 && file_buf.st_mtime > dir_mtime) ++ dir_mtime = file_buf.st_mtime; ++ } ++ } ++ ++ return dir_mtime; ++} ++ + void maybe_update_from_directory (string dirname) throws GLib.Error { + Posix.Stat dir_buf; + + if (Posix.stat (dirname, out dir_buf) == 0 && Posix.S_ISDIR (dir_buf.st_mode)) { +- Posix.Stat lockdir_buf; + Posix.Stat file_buf; + + var filename = dirname.substring (0, dirname.length - 2); + +- if (Posix.stat (dirname + "/locks", out lockdir_buf) == 0 && lockdir_buf.st_mtime > dir_buf.st_mtime) { +- // if the lock directory has been updated more recently then consider its timestamp instead +- dir_buf.st_mtime = lockdir_buf.st_mtime; +- } +- +- if (Posix.stat (filename, out file_buf) == 0 && file_buf.st_mtime > dir_buf.st_mtime) { ++ if (Posix.stat (filename, out file_buf) == 0 && file_buf.st_mtime > get_directory_mtime (dirname, dir_buf)) { + return; + } + +-- +2.17.1 + diff --git a/SOURCES/dconf-0.28.0-dbus-1.patch b/SOURCES/dconf-0.28.0-dbus-1.patch new file mode 100644 index 0000000..a895f92 --- /dev/null +++ b/SOURCES/dconf-0.28.0-dbus-1.patch @@ -0,0 +1,706 @@ +--- a/meson.build ++++ b/meson.build +@@ -75,6 +75,7 @@ gio_unix_req_version = '>= 2.25.7' + + glib_dep = dependency('glib-2.0', version: '>= 2.44.0') + gio_unix_dep = dependency('gio-unix-2.0', version: gio_unix_req_version) ++dbus_1_dep = dependency('dbus-1') + + gio_querymodules = find_program('gio-querymodules', required: false) + if gio_querymodules.found() +@@ -101,6 +102,7 @@ subdir('gvdb') + subdir('common') + subdir('engine') + subdir('service') ++subdir('dbus-1') + subdir('gdbus') + subdir('gsettings') + subdir('client') +--- /dev/null ++++ b/dbus-1/meson.build +@@ -0,0 +1,43 @@ ++client_inc = include_directories('.') ++ ++libdbus_1_sources = files('dconf-libdbus-1.c', 'dconf-libdbus-1.h') ++ ++cflags = '-DG_LOG_DOMAIN="@0@"'.format(meson.project_name()) ++ ++libdconf_libdbus_1_shared = static_library( ++ meson.project_name() + '-libdbus-1-shared', ++ sources: libdbus_1_sources, ++ include_directories: top_inc, ++ dependencies: [gio_unix_dep, dbus_1_dep], ++ c_args: cflags, ++ pic: true ++) ++ ++libdconf_libdbus_1 = static_library( ++ meson.project_name() + '-libdbus-1', ++ sources: libdbus_1_sources, ++ include_directories: top_inc, ++ dependencies: [gio_unix_dep, dbus_1_dep], ++ c_args: cflags, ++) ++ ++dbus_1_sources = files('dconf-dbus-1.c') ++ ++libdconf_dbus_1 = shared_library( ++ meson.project_name() + '-dbus-1', ++ sources: dbus_1_sources, ++ version: '0.0.0', ++ soversion: '0', ++ include_directories: top_inc, ++ dependencies: [gio_unix_dep, dbus_1_dep], ++ c_args: cflags, ++ link_with: [ ++ libdconf_common_hidden, ++ libdconf_engine_shared, ++ libdconf_libdbus_1_shared, ++ libdconf_shm_shared, ++ libgvdb_shared ++ ], ++ install: true, ++ install_dir: dconf_libdir ++) +--- /dev/null ++++ b/dbus-1/dconf-dbus-1.c +@@ -0,0 +1,188 @@ ++/** ++ * Copyright © 2010 Canonical Limited ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the licence, or (at ++ * your option) any later version. ++ * ++ * This program 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 ++ * General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see . ++ * ++ * Author: Ryan Lortie ++ **/ ++ ++#include "config.h" ++ ++#include "dconf-dbus-1.h" ++ ++#include "../engine/dconf-engine.h" ++#include "dconf-libdbus-1.h" ++ ++#include ++ ++struct _DConfDBusClient ++{ ++ DConfEngine *engine; ++ GSList *watches; ++ gint ref_count; ++}; ++ ++typedef struct ++{ ++ gchar *path; ++ DConfDBusNotify notify; ++ gpointer user_data; ++} Watch; ++ ++void ++dconf_engine_change_notify (DConfEngine *engine, ++ const gchar *prefix, ++ const gchar * const *changes, ++ const gchar *tag, ++ gboolean is_writability, ++ gpointer origin_tag, ++ gpointer user_data) ++{ ++ DConfDBusClient *dcdbc = user_data; ++ gchar **my_changes; ++ gint n_changes; ++ GSList *iter; ++ gint i; ++ ++ n_changes = g_strv_length ((gchar **) changes); ++ my_changes = g_new (gchar *, n_changes + 1); ++ ++ for (i = 0; i < n_changes; i++) ++ my_changes[i] = g_strconcat (prefix, changes[i], NULL); ++ my_changes[i] = NULL; ++ ++ for (iter = dcdbc->watches; iter; iter = iter->next) ++ { ++ Watch *watch = iter->data; ++ ++ for (i = 0; i < n_changes; i++) ++ if (g_str_has_prefix (my_changes[i], watch->path)) ++ watch->notify (dcdbc, my_changes[i], watch->user_data); ++ } ++ ++ g_strfreev (my_changes); ++} ++ ++GVariant * ++dconf_dbus_client_read (DConfDBusClient *dcdbc, ++ const gchar *key) ++{ ++ return dconf_engine_read (dcdbc->engine, DCONF_READ_FLAGS_NONE, NULL, key); ++} ++ ++gboolean ++dconf_dbus_client_write (DConfDBusClient *dcdbc, ++ const gchar *key, ++ GVariant *value) ++{ ++ DConfChangeset *changeset; ++ gboolean success; ++ ++ changeset = dconf_changeset_new_write (key, value); ++ success = dconf_engine_change_fast (dcdbc->engine, changeset, NULL, NULL); ++ dconf_changeset_unref (changeset); ++ ++ return success; ++} ++ ++void ++dconf_dbus_client_subscribe (DConfDBusClient *dcdbc, ++ const gchar *path, ++ DConfDBusNotify notify, ++ gpointer user_data) ++{ ++ Watch *watch; ++ ++ watch = g_slice_new (Watch); ++ watch->path = g_strdup (path); ++ watch->notify = notify; ++ watch->user_data = user_data; ++ ++ dcdbc->watches = g_slist_prepend (dcdbc->watches, watch); ++ ++ dconf_engine_watch_fast (dcdbc->engine, path); ++} ++ ++void ++dconf_dbus_client_unsubscribe (DConfDBusClient *dcdbc, ++ DConfDBusNotify notify, ++ gpointer user_data) ++{ ++ GSList **ptr; ++ ++ for (ptr = &dcdbc->watches; *ptr; ptr = &(*ptr)->next) ++ { ++ Watch *watch = (*ptr)->data; ++ ++ if (watch->notify == notify && watch->user_data == user_data) ++ { ++ *ptr = g_slist_remove_link (*ptr, *ptr); ++ dconf_engine_unwatch_fast (dcdbc->engine, watch->path); ++ g_free (watch->path); ++ g_slice_free (Watch, watch); ++ return; ++ } ++ } ++ ++ g_warning ("No matching watch found to unsubscribe"); ++} ++ ++gboolean ++dconf_dbus_client_has_pending (DConfDBusClient *dcdbc) ++{ ++ return dconf_engine_has_outstanding (dcdbc->engine); ++} ++ ++DConfDBusClient * ++dconf_dbus_client_new (const gchar *profile, ++ DBusConnection *session, ++ DBusConnection *system) ++{ ++ DConfDBusClient *dcdbc; ++ ++ if (session == NULL) ++ session = dbus_bus_get (DBUS_BUS_SESSION, NULL); ++ ++ if (system == NULL) ++ system = dbus_bus_get (DBUS_BUS_SYSTEM, NULL); ++ ++ dconf_libdbus_1_provide_bus (G_BUS_TYPE_SESSION, session); ++ dconf_libdbus_1_provide_bus (G_BUS_TYPE_SYSTEM, system); ++ ++ dcdbc = g_slice_new (DConfDBusClient); ++ dcdbc->engine = dconf_engine_new (NULL, dcdbc, NULL); ++ dcdbc->watches = NULL; ++ dcdbc->ref_count = 1; ++ ++ return dcdbc; ++} ++ ++void ++dconf_dbus_client_unref (DConfDBusClient *dcdbc) ++{ ++ if (--dcdbc->ref_count == 0) ++ { ++ g_return_if_fail (dcdbc->watches == NULL); ++ ++ g_slice_free (DConfDBusClient, dcdbc); ++ } ++} ++ ++DConfDBusClient * ++dconf_dbus_client_ref (DConfDBusClient *dcdbc) ++{ ++ dcdbc->ref_count++; ++ ++ return dcdbc; ++} +--- /dev/null ++++ b/dbus-1/dconf-dbus-1.h +@@ -0,0 +1,56 @@ ++/** ++ * Copyright © 2010 Canonical Limited ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the licence, or (at ++ * your option) any later version. ++ * ++ * This program 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 ++ * General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see . ++ * ++ * Author: Ryan Lortie ++ **/ ++ ++#ifndef _dconf_dbus_1_h_ ++#define _dconf_dbus_1_h_ ++ ++#include ++#include ++ ++G_BEGIN_DECLS ++ ++typedef struct _DConfDBusClient DConfDBusClient; ++ ++typedef void (* DConfDBusNotify) (DConfDBusClient *dcdbc, ++ const gchar *key, ++ gpointer user_data); ++ ++DConfDBusClient * dconf_dbus_client_new (const gchar *profile, ++ DBusConnection *session, ++ DBusConnection *system); ++void dconf_dbus_client_unref (DConfDBusClient *dcdbc); ++DConfDBusClient * dconf_dbus_client_ref (DConfDBusClient *dcdbc); ++ ++GVariant * dconf_dbus_client_read (DConfDBusClient *dcdbc, ++ const gchar *key); ++gboolean dconf_dbus_client_write (DConfDBusClient *dcdbc, ++ const gchar *key, ++ GVariant *value); ++void dconf_dbus_client_subscribe (DConfDBusClient *dcdbc, ++ const gchar *name, ++ DConfDBusNotify notify, ++ gpointer user_data); ++void dconf_dbus_client_unsubscribe (DConfDBusClient *dcdbc, ++ DConfDBusNotify notify, ++ gpointer user_data); ++gboolean dconf_dbus_client_has_pending (DConfDBusClient *dcdbc); ++ ++G_END_DECLS ++ ++#endif /* _dconf_dbus_1_h_ */ +--- /dev/null ++++ b/dbus-1/dconf-libdbus-1.c +@@ -0,0 +1,365 @@ ++/** ++ * Copyright © 2010 Canonical Limited ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the licence, or (at ++ * your option) any later version. ++ * ++ * This program 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 ++ * General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see . ++ * ++ * Author: Ryan Lortie ++ **/ ++ ++#include "config.h" ++ ++#include "dconf-libdbus-1.h" ++ ++#include "../engine/dconf-engine.h" ++ ++#include ++ ++static DBusConnection *dconf_libdbus_1_buses[5]; ++ ++struct _DConfDBusClient ++{ ++ DConfEngine *engine; ++ GSList *watches; ++ gint ref_count; ++}; ++ ++#define DCONF_LIBDBUS_1_ERROR (g_quark_from_static_string("DCONF_LIBDBUS_1_ERROR")) ++#define DCONF_LIBDBUS_1_ERROR_FAILED 0 ++ ++static DBusMessage * ++dconf_libdbus_1_new_method_call (const gchar *bus_name, ++ const gchar *object_path, ++ const gchar *interface_name, ++ const gchar *method_name, ++ GVariant *parameters) ++{ ++ DBusMessageIter dbus_iter; ++ DBusMessage *message; ++ GVariantIter iter; ++ GVariant *child; ++ ++ g_variant_ref_sink (parameters); ++ ++ message = dbus_message_new_method_call (bus_name, object_path, interface_name, method_name); ++ dbus_message_iter_init_append (message, &dbus_iter); ++ g_variant_iter_init (&iter, parameters); ++ ++ while ((child = g_variant_iter_next_value (&iter))) ++ { ++ if (g_variant_is_of_type (child, G_VARIANT_TYPE_STRING)) ++ { ++ const gchar *str; ++ ++ str = g_variant_get_string (child, NULL); ++ dbus_message_iter_append_basic (&dbus_iter, DBUS_TYPE_STRING, &str); ++ } ++ ++ else if (g_variant_is_of_type (child, G_VARIANT_TYPE_UINT32)) ++ { ++ guint32 uint; ++ ++ uint = g_variant_get_uint32 (child); ++ dbus_message_iter_append_basic (&dbus_iter, DBUS_TYPE_UINT32, &uint); ++ } ++ ++ else ++ { ++ DBusMessageIter subiter; ++ const guint8 *bytes; ++ gsize n_elements; ++ ++ g_assert (g_variant_is_of_type (child, G_VARIANT_TYPE_BYTESTRING)); ++ ++ bytes = g_variant_get_fixed_array (child, &n_elements, sizeof (guint8)); ++ dbus_message_iter_open_container (&dbus_iter, DBUS_TYPE_ARRAY, "y", &subiter); ++ dbus_message_iter_append_fixed_array (&subiter, DBUS_TYPE_BYTE, &bytes, n_elements); ++ dbus_message_iter_close_container (&dbus_iter, &subiter); ++ } ++ ++ g_variant_unref (child); ++ } ++ ++ g_variant_unref (parameters); ++ ++ return message; ++} ++ ++static GVariant * ++dconf_libdbus_1_get_message_body (DBusMessage *message, ++ GError **error) ++{ ++ GVariantBuilder builder; ++ const gchar *signature; ++ DBusMessageIter iter; ++ ++ /* We support two types: strings and arrays of strings. ++ * ++ * It's very simple to detect if the message contains only these ++ * types: check that the signature contains only the letters "a" and ++ * "s" and that it does not contain "aa". ++ */ ++ signature = dbus_message_get_signature (message); ++ if (signature[strspn(signature, "as")] != '\0' || strstr (signature, "aa")) ++ { ++ g_set_error (error, DCONF_LIBDBUS_1_ERROR, DCONF_LIBDBUS_1_ERROR_FAILED, ++ "unable to handle message type '(%s)'", signature); ++ return NULL; ++ } ++ ++ g_variant_builder_init (&builder, G_VARIANT_TYPE_TUPLE); ++ dbus_message_iter_init (message, &iter); ++ while (dbus_message_iter_get_arg_type (&iter)) ++ { ++ const gchar *string; ++ ++ if (dbus_message_iter_get_arg_type (&iter) == DBUS_TYPE_STRING) ++ { ++ dbus_message_iter_get_basic (&iter, &string); ++ g_variant_builder_add (&builder, "s", string); ++ } ++ else ++ { ++ DBusMessageIter sub; ++ ++ g_assert (dbus_message_iter_get_arg_type (&iter) == DBUS_TYPE_ARRAY && ++ dbus_message_iter_get_element_type (&iter) == DBUS_TYPE_STRING); ++ ++ g_variant_builder_open (&builder, G_VARIANT_TYPE_STRING_ARRAY); ++ dbus_message_iter_recurse (&iter, &sub); ++ ++ while (dbus_message_iter_get_arg_type (&sub)) ++ { ++ const gchar *string; ++ dbus_message_iter_get_basic (&sub, &string); ++ g_variant_builder_add (&builder, "s", string); ++ dbus_message_iter_next (&sub); ++ } ++ ++ g_variant_builder_close (&builder); ++ } ++ dbus_message_iter_next (&iter); ++ } ++ ++ return g_variant_ref_sink (g_variant_builder_end (&builder)); ++} ++ ++static GVariant * ++dconf_libdbus_1_interpret_result (DBusMessage *result, ++ const GVariantType *expected_type, ++ GError **error) ++{ ++ GVariant *reply; ++ ++ if (dbus_message_get_type (result) == DBUS_MESSAGE_TYPE_ERROR) ++ { ++ const gchar *errstr = "(no message)"; ++ ++ dbus_message_get_args (result, NULL, DBUS_TYPE_STRING, &errstr, DBUS_TYPE_INVALID); ++ g_set_error (error, DCONF_LIBDBUS_1_ERROR, DCONF_LIBDBUS_1_ERROR_FAILED, ++ "%s: %s", dbus_message_get_error_name (result), errstr); ++ return NULL; ++ } ++ ++ reply = dconf_libdbus_1_get_message_body (result, error); ++ ++ if (reply && expected_type && !g_variant_is_of_type (reply, expected_type)) ++ { ++ gchar *expected_string; ++ ++ expected_string = g_variant_type_dup_string (expected_type); ++ g_set_error (error, DCONF_LIBDBUS_1_ERROR, DCONF_LIBDBUS_1_ERROR_FAILED, ++ "received reply '%s' is not of the expected type %s", ++ g_variant_get_type_string (reply), expected_string); ++ g_free (expected_string); ++ ++ g_variant_unref (reply); ++ reply = NULL; ++ } ++ ++ return reply; ++} ++ ++static void ++dconf_libdbus_1_method_call_done (DBusPendingCall *pending, ++ gpointer user_data) ++{ ++ DConfEngineCallHandle *handle = user_data; ++ const GVariantType *expected_type; ++ DBusMessage *message; ++ GError *error = NULL; ++ GVariant *reply; ++ ++ if (pending == NULL) ++ return; ++ ++ message = dbus_pending_call_steal_reply (pending); ++ dbus_pending_call_unref (pending); ++ ++ expected_type = dconf_engine_call_handle_get_expected_type (handle); ++ reply = dconf_libdbus_1_interpret_result (message, expected_type, &error); ++ dbus_message_unref (message); ++ ++ dconf_engine_call_handle_reply (handle, reply, error); ++ ++ if (reply) ++ g_variant_unref (reply); ++ if (error) ++ g_error_free (error); ++} ++ ++gboolean ++dconf_engine_dbus_call_async_func (GBusType bus_type, ++ const gchar *bus_name, ++ const gchar *object_path, ++ const gchar *interface_name, ++ const gchar *method_name, ++ GVariant *parameters, ++ DConfEngineCallHandle *handle, ++ GError **error) ++{ ++ DBusConnection *connection; ++ DBusPendingCall *pending; ++ DBusMessage *message; ++ ++ g_assert_cmpint (bus_type, <, G_N_ELEMENTS (dconf_libdbus_1_buses)); ++ connection = dconf_libdbus_1_buses[bus_type]; ++ g_assert (connection != NULL); ++ ++ message = dconf_libdbus_1_new_method_call (bus_name, object_path, interface_name, method_name, parameters); ++ dbus_connection_send_with_reply (connection, message, &pending, -1); ++ dbus_pending_call_set_notify (pending, dconf_libdbus_1_method_call_done, handle, NULL); ++ dbus_message_unref (message); ++ ++ return TRUE; ++} ++ ++static void ++dconf_libdbus_1_convert_error (DBusError *dbus_error, ++ GError **error) ++{ ++ g_set_error (error, DCONF_LIBDBUS_1_ERROR, DCONF_LIBDBUS_1_ERROR_FAILED, ++ "%s: %s", dbus_error->name, dbus_error->message); ++} ++ ++GVariant * ++dconf_engine_dbus_call_sync_func (GBusType bus_type, ++ const gchar *bus_name, ++ const gchar *object_path, ++ const gchar *interface_name, ++ const gchar *method_name, ++ GVariant *parameters, ++ const GVariantType *expected_type, ++ GError **error) ++{ ++ DBusConnection *connection; ++ DBusMessage *message; ++ DBusError dbus_error; ++ DBusMessage *result; ++ GVariant *reply; ++ ++ g_assert_cmpint (bus_type, <, G_N_ELEMENTS (dconf_libdbus_1_buses)); ++ connection = dconf_libdbus_1_buses[bus_type]; ++ g_assert (connection != NULL); ++ ++ dbus_error_init (&dbus_error); ++ message = dconf_libdbus_1_new_method_call (bus_name, object_path, interface_name, method_name, parameters); ++ result = dbus_connection_send_with_reply_and_block (connection, message, -1, &dbus_error); ++ dbus_message_unref (message); ++ ++ if (result == NULL) ++ { ++ dconf_libdbus_1_convert_error (&dbus_error, error); ++ dbus_error_free (&dbus_error); ++ return NULL; ++ } ++ ++ reply = dconf_libdbus_1_interpret_result (result, expected_type, error); ++ dbus_message_unref (result); ++ ++ return reply; ++} ++ ++static DBusHandlerResult ++dconf_libdbus_1_filter (DBusConnection *connection, ++ DBusMessage *message, ++ gpointer user_data) ++{ ++ GBusType bus_type = GPOINTER_TO_INT (user_data); ++ ++ if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_SIGNAL) ++ { ++ const gchar *interface; ++ ++ interface = dbus_message_get_interface (message); ++ ++ if (interface && g_str_equal (interface, "ca.desrt.dconf.Writer")) ++ { ++ GVariant *parameters; ++ ++ parameters = dconf_libdbus_1_get_message_body (message, NULL); ++ ++ if (parameters != NULL) ++ { ++ dconf_engine_handle_dbus_signal (bus_type, ++ dbus_message_get_sender (message), ++ dbus_message_get_path (message), ++ dbus_message_get_member (message), ++ parameters); ++ g_variant_unref (parameters); ++ } ++ } ++ } ++ ++ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; ++} ++ ++void ++dconf_libdbus_1_provide_bus (GBusType bus_type, ++ DBusConnection *connection) ++{ ++ g_assert_cmpint (bus_type, <, G_N_ELEMENTS (dconf_libdbus_1_buses)); ++ ++ if (!dconf_libdbus_1_buses[bus_type]) ++ { ++ dconf_libdbus_1_buses[bus_type] = dbus_connection_ref (connection); ++ dbus_connection_add_filter (connection, dconf_libdbus_1_filter, GINT_TO_POINTER (bus_type), NULL); ++ } ++} ++ ++#ifndef PIC ++static gboolean ++dconf_libdbus_1_check_connection (gpointer user_data) ++{ ++ DBusConnection *connection = user_data; ++ ++ dbus_connection_read_write (connection, 0); ++ dbus_connection_dispatch (connection); ++ ++ return G_SOURCE_CONTINUE; ++} ++ ++void ++dconf_engine_dbus_init_for_testing (void) ++{ ++ DBusConnection *session; ++ DBusConnection *system; ++ ++ dconf_libdbus_1_provide_bus (G_BUS_TYPE_SESSION, session = dbus_bus_get (DBUS_BUS_SESSION, NULL)); ++ dconf_libdbus_1_provide_bus (G_BUS_TYPE_SYSTEM, system = dbus_bus_get (DBUS_BUS_SYSTEM, NULL)); ++ ++ /* "mainloop integration" */ ++ g_timeout_add (1, dconf_libdbus_1_check_connection, session); ++ g_timeout_add (1, dconf_libdbus_1_check_connection, system); ++} ++#endif +--- /dev/null ++++ b/dbus-1/dconf-libdbus-1.h +@@ -0,0 +1,11 @@ ++#ifndef __dconf_libdbus_1_h__ ++#define __dconf_libdbus_1_h__ ++ ++#include ++#include ++ ++G_GNUC_INTERNAL ++void dconf_libdbus_1_provide_bus (GBusType bus_type, ++ DBusConnection *connection); ++ ++#endif /* __dconf_libdbus_1_h__ */ +--- a/tests/meson.build ++++ b/tests/meson.build +@@ -23,6 +23,7 @@ unit_tests = [ + ['gvdb', 'gvdb.c', '-DSRCDIR="@0@"'.format(test_dir), glib_dep, libgvdb], + ['gdbus-thread', 'dbus.c', '-DDBUS_BACKEND="/gdbus/thread"', gio_unix_dep, libdconf_gdbus_thread], + ['gdbus-filter', 'dbus.c', '-DDBUS_BACKEND="/gdbus/filter"', gio_unix_dep, libdconf_gdbus_filter], ++ ['libdbus-1', 'dbus.c', '-DDBUS_BACKEND="/libdbus-1"', gio_unix_dep, libdconf_libdbus_1], + ['engine', 'engine.c', '-DSRCDIR="@0@"'.format(test_dir), [glib_dep, dl_dep, m_dep], [libdconf_engine, libdconf_common, libdconf_mock]], + ['client', 'client.c', '-DSRCDIR="@0@"'.format(test_dir), gio_unix_dep, [libdconf_client, libdconf_engine, libdconf_common, libdconf_mock]] + ] diff --git a/SPECS/dconf.spec b/SPECS/dconf.spec index 42aa675..d280279 100644 --- a/SPECS/dconf.spec +++ b/SPECS/dconf.spec @@ -1,33 +1,28 @@ %define glib2_version 2.44.0 -%define vala_version 0.18.0 Name: dconf -Version: 0.26.0 -Release: 3%{?dist}.1 +Version: 0.28.0 +Release: 4%{?dist} Summary: A configuration system -Group: System Environment/Base License: LGPLv2+ and GPLv2+ and GPLv3+ URL: http://live.gnome.org/dconf -#VCS: git:git://git.gnome.org/dconf -Source0: http://download.gnome.org/sources/dconf/0.22/dconf-%{version}.tar.xz +Source0: http://download.gnome.org/sources/dconf/0.28/dconf-%{version}.tar.xz -# https://bugzilla.redhat.com/show_bug.cgi?id=1386841 -Patch0: dconf-0.26.0-Remove-libdbus-1-support.patch -Patch1: dconf-0.26.0-read-flag.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=1567184 +Patch1: dconf-0.28.0-dbus-1.patch # https://bugzilla.redhat.com/show_bug.cgi?id=1281253 Patch2: dconf-0.26.0-permissions.patch -# https://bugzilla.redhat.com/show_bug.cgi?id=1626372 -Patch3: dconf-0.26.0-db-mtime.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=1570569 +Patch3: dconf-0.28.0-db-mtime.patch BuildRequires: glib2-devel >= %{glib2_version} -BuildRequires: libxml2-devel BuildRequires: dbus-devel -BuildRequires: vala-devel >= %{vala_version} BuildRequires: gtk-doc -BuildRequires: intltool +BuildRequires: meson +BuildRequires: vala Requires: dbus Requires: glib2%{?_isa} >= %{glib2_version} @@ -38,7 +33,6 @@ backend to the GSettings API in GLib. %package devel Summary: Header files and libraries for dconf development -Group: Development/Libraries Requires: %{name}%{?_isa} = %{version}-%{release} %description devel @@ -46,23 +40,17 @@ dconf development package. Contains files needed for doing software development using dconf. %prep -%setup -q -%patch0 -p1 -R -b .libdbus -%patch1 -p1 -b .read-flag -%patch2 -p1 -b .permissions -%patch3 -p1 -b .mtimes - -autoreconf -ivf +%autosetup -p1 %build -%configure --disable-static -make V=1 %{?_smp_mflags} - +%meson -Denable-gtk-doc=true +%meson_build %install -make install DESTDIR=$RPM_BUILD_ROOT +%meson_install mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/dconf/profile + cat << EOF > $RPM_BUILD_ROOT%{_sysconfdir}/dconf/profile/user user-db:user system-db:local @@ -76,14 +64,11 @@ mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/dconf/db/distro.d/locks # dconf-dbus-1 was removed in dconf 0.24, # we keep just the library for compatibility -rm -fv $RPM_BUILD_ROOT%{_libdir}/pkgconfig/dconf-dbus-1.pc -rm -fv $RPM_BUILD_ROOT%{_includedir}/dconf-dbus-1/* -rmdir -v $RPM_BUILD_ROOT%{_includedir}/dconf-dbus-1/ +rm -fv $RPM_BUILD_ROOT%{_libdir}/libdconf-dbus-1.so %post /sbin/ldconfig gio-querymodules-%{__isa_bits} %{_libdir}/gio/modules -dconf update %postun /sbin/ldconfig @@ -94,47 +79,53 @@ fi %posttrans glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || : - +dconf update %files %license COPYING %dir %{_sysconfdir}/dconf %dir %{_sysconfdir}/dconf/db +%dir %{_sysconfdir}/dconf/db/local.d +%dir %{_sysconfdir}/dconf/db/local.d/locks +%dir %{_sysconfdir}/dconf/db/site.d +%dir %{_sysconfdir}/dconf/db/site.d/locks +%dir %{_sysconfdir}/dconf/db/distro.d +%dir %{_sysconfdir}/dconf/db/distro.d/locks %dir %{_sysconfdir}/dconf/profile %{_libdir}/gio/modules/libdconfsettings.so %{_libexecdir}/dconf-service %{_datadir}/dbus-1/services/ca.desrt.dconf.service %{_bindir}/dconf -%{_libdir}/libdconf.so.* -%{_libdir}/libdconf-dbus-1.so.* +%{_libdir}/libdconf.so.1* +%{_libdir}/libdconf-dbus-1.so.0* %{_datadir}/bash-completion/completions/dconf %{_mandir}/man1/dconf-service.1.gz %{_mandir}/man1/dconf.1.gz %{_mandir}/man7/dconf.7.gz %config(noreplace) %{_sysconfdir}/dconf/profile/user -%dir %{_sysconfdir}/dconf -%dir %{_sysconfdir}/dconf/profile -%dir %{_sysconfdir}/dconf/db -%dir %{_sysconfdir}/dconf/db/local.d -%dir %{_sysconfdir}/dconf/db/local.d/locks -%dir %{_sysconfdir}/dconf/db/site.d -%dir %{_sysconfdir}/dconf/db/site.d/locks -%dir %{_sysconfdir}/dconf/db/distro.d -%dir %{_sysconfdir}/dconf/db/distro.d/locks %files devel %{_includedir}/dconf %{_libdir}/libdconf.so %{_libdir}/pkgconfig/dconf.pc -%{_libdir}/libdconf-dbus-1.so +%dir %{_datadir}/gtk-doc +%dir %{_datadir}/gtk-doc/html %{_datadir}/gtk-doc/html/dconf %{_datadir}/vala %changelog -* Fri Sep 14 2018 Marek Kasik - 0.26.0-3 +* Wed Jul 25 2018 Marek Kasik - 0.28.0-3 - Check mtimes of files in /etc/dconf/db/*.d/ directories - when running "dconf update" -- Resolves: #1626372 +- Resolves: #1570569 + +* Wed May 23 2018 Marek Kasik - 0.28.0-2 +- Return dconf-dbus-1 library (without devel files) +- Related: #1567184 + +* Tue Mar 13 2018 Kalev Lember - 0.28.0-1 +- Update to 0.28.0 +- Resolves: #1567184 * Mon Mar 6 2017 Marek Kasik - 0.26.0-2 - Restore permissions on updated database