diff options
Diffstat (limited to 'libnm-core/nm-dbus-utils.c')
| -rw-r--r-- | libnm-core/nm-dbus-utils.c | 281 |
1 files changed, 136 insertions, 145 deletions
diff --git a/libnm-core/nm-dbus-utils.c b/libnm-core/nm-dbus-utils.c index 72b9fe1f..02cca67d 100644 --- a/libnm-core/nm-dbus-utils.c +++ b/libnm-core/nm-dbus-utils.c @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: LGPL-2.1+ +/* SPDX-License-Identifier: LGPL-2.1+ */ /* * Copyright (C) 2015 Red Hat, Inc. */ @@ -8,80 +8,76 @@ #include "nm-core-internal.h" typedef struct { - char *signal_name; - const GVariantType *signature; + char * signal_name; + const GVariantType *signature; } NMDBusSignalData; static void -dbus_signal_data_free (gpointer data, GClosure *closure) +dbus_signal_data_free(gpointer data, GClosure *closure) { - NMDBusSignalData *sd = data; + NMDBusSignalData *sd = data; - g_free (sd->signal_name); - g_slice_free (NMDBusSignalData, sd); + g_free(sd->signal_name); + g_slice_free(NMDBusSignalData, sd); } static void -dbus_signal_meta_marshal (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data) +dbus_signal_meta_marshal(GClosure * closure, + GValue * return_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data) { - NMDBusSignalData *sd = marshal_data; - const char *signal_name; - GVariant *parameters, *param; - GValue *closure_params; - gsize n_params, i; - - g_return_if_fail (n_param_values == 4); - - signal_name = g_value_get_string (¶m_values[2]); - parameters = g_value_get_variant (¶m_values[3]); - - if (strcmp (signal_name, sd->signal_name) != 0) - return; - - if (sd->signature) { - if (!g_variant_is_of_type (parameters, sd->signature)) { - g_warning ("%p: got signal '%s' but parameters were of type '%s', not '%s'", - g_value_get_object (¶m_values[0]), - signal_name, g_variant_get_type_string (parameters), - g_variant_type_peek_string (sd->signature)); - return; - } - - n_params = g_variant_n_children (parameters) + 1; - } else - n_params = 1; - - closure_params = g_new0 (GValue, n_params); - g_value_init (&closure_params[0], G_TYPE_OBJECT); - g_value_copy (¶m_values[0], &closure_params[0]); - - for (i = 1; i < n_params; i++) { - param = g_variant_get_child_value (parameters, i - 1); - if ( g_variant_is_of_type (param, G_VARIANT_TYPE ("ay")) - || g_variant_is_of_type (param, G_VARIANT_TYPE ("aay"))) { - /* g_dbus_gvariant_to_gvalue() thinks 'ay' means "non-UTF-8 NUL-terminated string" */ - g_value_init (&closure_params[i], G_TYPE_VARIANT); - g_value_set_variant (&closure_params[i], param); - } else - g_dbus_gvariant_to_gvalue (param, &closure_params[i]); - g_variant_unref (param); - } - - g_cclosure_marshal_generic (closure, - NULL, - n_params, - closure_params, - invocation_hint, - NULL); - - for (i = 0; i < n_params; i++) - g_value_unset (&closure_params[i]); - g_free (closure_params); + NMDBusSignalData *sd = marshal_data; + const char * signal_name; + GVariant * parameters, *param; + GValue * closure_params; + gsize n_params, i; + + g_return_if_fail(n_param_values == 4); + + signal_name = g_value_get_string(¶m_values[2]); + parameters = g_value_get_variant(¶m_values[3]); + + if (strcmp(signal_name, sd->signal_name) != 0) + return; + + if (sd->signature) { + if (!g_variant_is_of_type(parameters, sd->signature)) { + g_warning("%p: got signal '%s' but parameters were of type '%s', not '%s'", + g_value_get_object(¶m_values[0]), + signal_name, + g_variant_get_type_string(parameters), + g_variant_type_peek_string(sd->signature)); + return; + } + + n_params = g_variant_n_children(parameters) + 1; + } else + n_params = 1; + + closure_params = g_new0(GValue, n_params); + g_value_init(&closure_params[0], G_TYPE_OBJECT); + g_value_copy(¶m_values[0], &closure_params[0]); + + for (i = 1; i < n_params; i++) { + param = g_variant_get_child_value(parameters, i - 1); + if (g_variant_is_of_type(param, G_VARIANT_TYPE("ay")) + || g_variant_is_of_type(param, G_VARIANT_TYPE("aay"))) { + /* g_dbus_gvariant_to_gvalue() thinks 'ay' means "non-UTF-8 NUL-terminated string" */ + g_value_init(&closure_params[i], G_TYPE_VARIANT); + g_value_set_variant(&closure_params[i], param); + } else + g_dbus_gvariant_to_gvalue(param, &closure_params[i]); + g_variant_unref(param); + } + + g_cclosure_marshal_generic(closure, NULL, n_params, closure_params, invocation_hint, NULL); + + for (i = 0; i < n_params; i++) + g_value_unset(&closure_params[i]); + g_free(closure_params); } /** @@ -114,34 +110,34 @@ dbus_signal_meta_marshal (GClosure *closure, * g_signal_handlers_disconnect_by_data() will work correctly. */ gulong -_nm_dbus_signal_connect_data (GDBusProxy *proxy, - const char *signal_name, - const GVariantType *signature, - GCallback c_handler, - gpointer data, - GClosureNotify destroy_data, - GConnectFlags connect_flags) +_nm_dbus_signal_connect_data(GDBusProxy * proxy, + const char * signal_name, + const GVariantType *signature, + GCallback c_handler, + gpointer data, + GClosureNotify destroy_data, + GConnectFlags connect_flags) { - NMDBusSignalData *sd; - GClosure *closure; - gboolean swapped = !!(connect_flags & G_CONNECT_SWAPPED); - gboolean after = !!(connect_flags & G_CONNECT_AFTER); - - g_return_val_if_fail (G_IS_DBUS_PROXY (proxy), 0); - g_return_val_if_fail (signal_name != NULL, 0); - g_return_val_if_fail (signature == NULL || g_variant_type_is_tuple (signature), 0); - g_return_val_if_fail (c_handler != NULL, 0); - - sd = g_slice_new (NMDBusSignalData); - sd->signal_name = g_strdup (signal_name); - sd->signature = signature; - - closure = (swapped ? g_cclosure_new_swap : g_cclosure_new) (c_handler, data, destroy_data); - g_closure_set_marshal (closure, g_cclosure_marshal_generic); - g_closure_set_meta_marshal (closure, sd, dbus_signal_meta_marshal); - g_closure_add_finalize_notifier (closure, sd, dbus_signal_data_free); - - return g_signal_connect_closure (proxy, "g-signal", closure, after); + NMDBusSignalData *sd; + GClosure * closure; + gboolean swapped = !!(connect_flags & G_CONNECT_SWAPPED); + gboolean after = !!(connect_flags & G_CONNECT_AFTER); + + g_return_val_if_fail(G_IS_DBUS_PROXY(proxy), 0); + g_return_val_if_fail(signal_name != NULL, 0); + g_return_val_if_fail(signature == NULL || g_variant_type_is_tuple(signature), 0); + g_return_val_if_fail(c_handler != NULL, 0); + + sd = g_slice_new(NMDBusSignalData); + sd->signal_name = g_strdup(signal_name); + sd->signature = signature; + + closure = (swapped ? g_cclosure_new_swap : g_cclosure_new)(c_handler, data, destroy_data); + g_closure_set_marshal(closure, g_cclosure_marshal_generic); + g_closure_set_meta_marshal(closure, sd, dbus_signal_meta_marshal); + g_closure_add_finalize_notifier(closure, sd, dbus_signal_data_free); + + return g_signal_connect_closure(proxy, "g-signal", closure, after); } /** @@ -167,25 +163,25 @@ _nm_dbus_signal_connect_data (GDBusProxy *proxy, * Returns: %TRUE, if @response is of the expected @reply_type. */ gboolean -_nm_dbus_typecheck_response (GVariant *response, - const GVariantType *reply_type, - GError **error) +_nm_dbus_typecheck_response(GVariant *response, const GVariantType *reply_type, GError **error) { - g_return_val_if_fail (response, FALSE); - - if (!reply_type) - return TRUE; - if (g_variant_is_of_type (response, reply_type)) - return TRUE; - - /* This is the same error code that g_dbus_connection_call() returns if - * @reply_type doesn't match. - */ - g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT, - _("Method returned type '%s', but expected '%s'"), - g_variant_get_type_string (response), - g_variant_type_peek_string (reply_type)); - return FALSE; + g_return_val_if_fail(response, FALSE); + + if (!reply_type) + return TRUE; + if (g_variant_is_of_type(response, reply_type)) + return TRUE; + + /* This is the same error code that g_dbus_connection_call() returns if + * @reply_type doesn't match. + */ + g_set_error(error, + G_IO_ERROR, + G_IO_ERROR_INVALID_ARGUMENT, + _("Method returned type '%s', but expected '%s'"), + g_variant_get_type_string(response), + g_variant_type_peek_string(reply_type)); + return FALSE; } /** @@ -201,39 +197,35 @@ _nm_dbus_typecheck_response (GVariant *response, * will also check that the response matches that type signature, and return * an error if not. * - * Returns: %NULL if @error is set. Otherwise a #GVariant tuple with + * Returns: %NULL if @error is set. Otherwise, a #GVariant tuple with * return values. Free with g_variant_unref(). */ GVariant * -_nm_dbus_proxy_call_finish (GDBusProxy *proxy, - GAsyncResult *res, - const GVariantType *reply_type, - GError **error) +_nm_dbus_proxy_call_finish(GDBusProxy * proxy, + GAsyncResult * res, + const GVariantType *reply_type, + GError ** error) { - GVariant *variant; - - variant = g_dbus_proxy_call_finish (proxy, - res, - error); - if ( variant - && !_nm_dbus_typecheck_response (variant, reply_type, error)) - nm_clear_pointer (&variant, g_variant_unref); - return variant; + GVariant *variant; + + variant = g_dbus_proxy_call_finish(proxy, res, error); + if (variant && !_nm_dbus_typecheck_response(variant, reply_type, error)) + nm_clear_pointer(&variant, g_variant_unref); + return variant; } GVariant * -_nm_dbus_connection_call_finish (GDBusConnection *dbus_connection, - GAsyncResult *result, - const GVariantType *reply_type, - GError **error) +_nm_dbus_connection_call_finish(GDBusConnection * dbus_connection, + GAsyncResult * result, + const GVariantType *reply_type, + GError ** error) { - GVariant *variant; + GVariant *variant; - variant = g_dbus_connection_call_finish (dbus_connection, result, error); - if ( variant - && !_nm_dbus_typecheck_response (variant, reply_type, error)) - nm_clear_pointer (&variant, g_variant_unref); - return variant; + variant = g_dbus_connection_call_finish(dbus_connection, result, error); + if (variant && !_nm_dbus_typecheck_response(variant, reply_type, error)) + nm_clear_pointer(&variant, g_variant_unref); + return variant; } /** @@ -251,18 +243,17 @@ _nm_dbus_connection_call_finish (GDBusConnection *dbus_connection, * Returns: %TRUE or %FALSE */ gboolean -_nm_dbus_error_has_name (GError *error, - const char *dbus_error_name) +_nm_dbus_error_has_name(GError *error, const char *dbus_error_name) { - gboolean has_name = FALSE; + gboolean has_name = FALSE; - if (error && g_dbus_error_is_remote_error (error)) { - char *error_name; + if (error && g_dbus_error_is_remote_error(error)) { + char *error_name; - error_name = g_dbus_error_get_remote_error (error); - has_name = !g_strcmp0 (error_name, dbus_error_name); - g_free (error_name); - } + error_name = g_dbus_error_get_remote_error(error); + has_name = !g_strcmp0(error_name, dbus_error_name); + g_free(error_name); + } - return has_name; + return has_name; } |