From b01cbff0879cb398c3527073a0b6d730f7d7339a Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 14 Apr 2021 21:11:42 +0200 Subject: [PATCH 1/6] glib-aux: add nm_g_variant_singleton_a*() helpers --- src/libnm-glib-aux/nm-shared-utils.c | 48 ++++++++++++++++++++++++++++ src/libnm-glib-aux/nm-shared-utils.h | 3 ++ 2 files changed, 51 insertions(+) diff --git a/src/libnm-glib-aux/nm-shared-utils.c b/src/libnm-glib-aux/nm-shared-utils.c index 627135447c..41c1a40887 100644 --- a/src/libnm-glib-aux/nm-shared-utils.c +++ b/src/libnm-glib-aux/nm-shared-utils.c @@ -556,6 +556,54 @@ nm_g_variant_singleton_u_0(void) return _variant_singleton_get(g_variant_new_uint32(0)); } +static GVariant * +_variant_singleton_get_array_init(GVariant **p_singleton, const char *variant_type) +{ + GVariant *v; + + v = g_variant_new_array(G_VARIANT_TYPE(variant_type), NULL, 0); + g_variant_ref_sink(v); + + if (G_LIKELY(g_atomic_pointer_compare_and_exchange(p_singleton, NULL, v))) + return v; + + g_variant_unref(v); + + return g_atomic_pointer_get(p_singleton); +} + +#define _variant_singleton_get_array(variant_type) \ + ({ \ + static GVariant *_singleton = NULL; \ + GVariant * _v; \ + \ + _v = g_atomic_pointer_get(&_singleton); \ + if (G_UNLIKELY(!_v)) { \ + _v = _variant_singleton_get_array_init(&_singleton, "" variant_type ""); \ + nm_assert(_v); \ + } \ + nm_assert(g_variant_is_of_type(_v, G_VARIANT_TYPE("a" variant_type ""))); \ + _v; \ + }) + +GVariant * +nm_g_variant_singleton_aLsvI(void) +{ + return _variant_singleton_get_array("{sv}"); +} + +GVariant * +nm_g_variant_singleton_aLsaLsvII(void) +{ + return _variant_singleton_get_array("{sa{sv}}"); +} + +GVariant * +nm_g_variant_singleton_aaLsvI(void) +{ + return _variant_singleton_get_array("a{sv}"); +} + /*****************************************************************************/ GHashTable * diff --git a/src/libnm-glib-aux/nm-shared-utils.h b/src/libnm-glib-aux/nm-shared-utils.h index 9ea6973d94..05395e9cc4 100644 --- a/src/libnm-glib-aux/nm-shared-utils.h +++ b/src/libnm-glib-aux/nm-shared-utils.h @@ -1442,6 +1442,9 @@ char *nm_utils_str_utf8safe_unescape_cp(const char *str, NMUtilsStrUtf8SafeFlags char *nm_utils_str_utf8safe_escape_take(char *str, NMUtilsStrUtf8SafeFlags flags); GVariant *nm_g_variant_singleton_u_0(void); +GVariant *nm_g_variant_singleton_aLsvI(void); +GVariant *nm_g_variant_singleton_aLsaLsvII(void); +GVariant *nm_g_variant_singleton_aaLsvI(void); static inline void nm_g_variant_unref_floating(GVariant *var) From 43b80016db1c9461968458524c58631d319d3a89 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 15 Apr 2021 09:17:47 +0200 Subject: [PATCH 2/6] glib-aux: add nm_g_variant_new_ay() helper --- src/libnm-glib-aux/nm-shared-utils.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/libnm-glib-aux/nm-shared-utils.h b/src/libnm-glib-aux/nm-shared-utils.h index 05395e9cc4..8fffb7e8a2 100644 --- a/src/libnm-glib-aux/nm-shared-utils.h +++ b/src/libnm-glib-aux/nm-shared-utils.h @@ -1482,6 +1482,12 @@ nm_g_variant_is_of_type(GVariant *value, const GVariantType *type) return value && g_variant_is_of_type(value, type); } +static inline GVariant * +nm_g_variant_new_ay(const guint8 *data, gsize len) +{ + return g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, data, len, 1); +} + static inline GVariant * nm_g_variant_new_ay_inaddr(int addr_family, gconstpointer addr) { From bbc8d3d7ad6265f68f8d1321d27d76f419c98dfc Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 15 Apr 2021 09:17:47 +0200 Subject: [PATCH 3/6] glib-aux: add nm_g_variant_new_au() helper --- src/libnm-glib-aux/nm-shared-utils.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/libnm-glib-aux/nm-shared-utils.h b/src/libnm-glib-aux/nm-shared-utils.h index 8fffb7e8a2..d413bd4747 100644 --- a/src/libnm-glib-aux/nm-shared-utils.h +++ b/src/libnm-glib-aux/nm-shared-utils.h @@ -1488,6 +1488,12 @@ nm_g_variant_new_ay(const guint8 *data, gsize len) return g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, data, len, 1); } +static inline GVariant * +nm_g_variant_new_au(const guint32 *data, gsize len) +{ + return g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, data, len, sizeof(guint32)); +} + static inline GVariant * nm_g_variant_new_ay_inaddr(int addr_family, gconstpointer addr) { From 4d6f659e13e941725af885faa9e01201bcb3d7b6 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 14 Apr 2021 21:12:02 +0200 Subject: [PATCH 4/6] all: use nm_g_variant_singleton_a*() helpers --- src/core/devices/nm-device.c | 13 +++---- src/core/nm-dhcp-config.c | 3 +- src/core/nm-dispatcher.c | 6 +-- src/core/nm-manager.c | 2 +- src/core/settings/nm-settings-connection.c | 2 +- src/libnm-client-impl/nm-client.c | 41 ++++++++++---------- src/libnm-client-impl/nm-device-wifi-p2p.c | 2 +- src/libnm-client-impl/nm-device-wifi.c | 4 +- src/libnm-client-impl/nm-device.c | 4 +- src/libnm-client-impl/nm-remote-connection.c | 6 +-- src/libnm-core-impl/tests/test-secrets.c | 19 +++++---- 11 files changed, 51 insertions(+), 51 deletions(-) diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index 3161560ee9..b8a53bff0a 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -12968,7 +12968,7 @@ impl_device_get_applied_connection(NMDBusObject * obj, var_settings = nm_connection_to_dbus(applied_connection, NM_CONNECTION_SERIALIZE_WITH_NON_SECRET); if (!var_settings) - var_settings = g_variant_new_array(G_VARIANT_TYPE("{sa{sv}}"), NULL, 0); + var_settings = nm_g_variant_singleton_aLsaLsvII(); g_dbus_method_invocation_return_value( invocation, @@ -17900,7 +17900,6 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { NMDevice * self = NM_DEVICE(object); NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); - GVariantBuilder array_builder; switch (prop_id) { case PROP_UDI: @@ -18051,12 +18050,10 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) g_value_set_uint(value, priv->metered); break; case PROP_LLDP_NEIGHBORS: - if (priv->lldp_listener) - g_value_set_variant(value, nm_lldp_listener_get_neighbors(priv->lldp_listener)); - else { - g_variant_builder_init(&array_builder, G_VARIANT_TYPE("aa{sv}")); - g_value_take_variant(value, g_variant_builder_end(&array_builder)); - } + g_value_set_variant(value, + priv->lldp_listener + ? nm_lldp_listener_get_neighbors(priv->lldp_listener) + : nm_g_variant_singleton_aaLsvI()); break; case PROP_REAL: g_value_set_boolean(value, nm_device_is_real(self)); diff --git a/src/core/nm-dhcp-config.c b/src/core/nm-dhcp-config.c index 718d3c90ec..c26b371dca 100644 --- a/src/core/nm-dhcp-config.c +++ b/src/core/nm-dhcp-config.c @@ -116,8 +116,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) switch (prop_id) { case PROP_OPTIONS: - g_value_set_variant(value, - priv->options ?: g_variant_new_array(G_VARIANT_TYPE("{sv}"), NULL, 0)); + g_value_set_variant(value, priv->options ?: nm_g_variant_singleton_aLsvI()); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); diff --git a/src/core/nm-dispatcher.c b/src/core/nm-dispatcher.c index 5862dd0a82..81076810e4 100644 --- a/src/core/nm-dispatcher.c +++ b/src/core/nm-dispatcher.c @@ -552,7 +552,7 @@ _dispatcher_call(NMDispatcherAction action, connection_dict = nm_connection_to_dbus(applied_connection, NM_CONNECTION_SERIALIZE_WITH_NON_SECRET); else - connection_dict = g_variant_new_array(G_VARIANT_TYPE("{sa{sv}}"), NULL, 0); + connection_dict = nm_g_variant_singleton_aLsaLsvII(); g_variant_builder_init(&connection_props, G_VARIANT_TYPE_VARDICT); if (settings_connection) { @@ -620,8 +620,8 @@ _dispatcher_call(NMDispatcherAction action, &device_proxy_props, &device_ip4_props, &device_ip6_props, - device_dhcp4_props ?: g_variant_new_array(G_VARIANT_TYPE("{sv}"), NULL, 0), - device_dhcp6_props ?: g_variant_new_array(G_VARIANT_TYPE("{sv}"), NULL, 0), + device_dhcp4_props ?: nm_g_variant_singleton_aLsvI(), + device_dhcp6_props ?: nm_g_variant_singleton_aLsvI(), connectivity_state_string, vpn_iface ?: "", &vpn_proxy_props, diff --git a/src/core/nm-manager.c b/src/core/nm-manager.c index b3e6535506..50d2e3225a 100644 --- a/src/core/nm-manager.c +++ b/src/core/nm-manager.c @@ -5637,7 +5637,7 @@ activation_add_done(NMSettings * settings, result_floating = g_variant_new("(oo@a{sv})", nm_dbus_object_get_path(NM_DBUS_OBJECT(new_connection)), nm_dbus_object_get_path(NM_DBUS_OBJECT(active)), - g_variant_new_array(G_VARIANT_TYPE("{sv}"), NULL, 0)); + nm_g_variant_singleton_aLsvI()); } g_dbus_method_invocation_return_value(context, result_floating); diff --git a/src/core/settings/nm-settings-connection.c b/src/core/settings/nm-settings-connection.c index 294cb04705..7b5477f477 100644 --- a/src/core/settings/nm-settings-connection.c +++ b/src/core/settings/nm-settings-connection.c @@ -1868,7 +1868,7 @@ dbus_get_agent_secrets_cb(NMSettingsConnection * self, dict = nm_connection_to_dbus(nm_settings_connection_get_connection(self), NM_CONNECTION_SERIALIZE_WITH_SECRETS); if (!dict) - dict = g_variant_new_array(G_VARIANT_TYPE("{sa{sv}}"), NULL, 0); + dict = nm_g_variant_singleton_aLsaLsvII(); g_dbus_method_invocation_return_value(context, g_variant_new("(@a{sa{sv}})", dict)); } } diff --git a/src/libnm-client-impl/nm-client.c b/src/libnm-client-impl/nm-client.c index f4a93f9f3c..4dd9bccb60 100644 --- a/src/libnm-client-impl/nm-client.c +++ b/src/libnm-client-impl/nm-client.c @@ -5137,11 +5137,11 @@ _add_and_activate_connection(NMClient * self, if (partial) arg_connection = nm_connection_to_dbus(partial, NM_CONNECTION_SERIALIZE_ALL); if (!arg_connection) - arg_connection = g_variant_new_array(G_VARIANT_TYPE("{sa{sv}}"), NULL, 0); + arg_connection = nm_g_variant_singleton_aLsaLsvII(); if (is_v2) { if (!options) - options = g_variant_new_array(G_VARIANT_TYPE("{sv}"), NULL, 0); + options = nm_g_variant_singleton_aLsvI(); use_add_and_activate_v2 = TRUE; source_tag = nm_client_add_and_activate_connection2; } else { @@ -5641,7 +5641,7 @@ _add_connection_call(NMClient * self, NML_NMCLIENT_LOG_D(self, "AddConnection() started..."); if (!settings) - settings = g_variant_new_array(G_VARIANT_TYPE("{sa{sv}}"), NULL, 0); + settings = nm_g_variant_singleton_aLsaLsvII(); /* Although AddConnection2() being capable to handle also AddConnection() and * AddConnectionUnsaved() variants, we prefer to use the old D-Bus methods when @@ -5678,24 +5678,23 @@ _add_connection_call(NMClient * self, NM_DBUS_DEFAULT_TIMEOUT_MSEC, _add_connection_cb_without_extra_result); } else { - _nm_client_dbus_call( - self, - self, - source_tag, - cancellable, - callback, - user_data, - NM_DBUS_PATH_SETTINGS, - NM_DBUS_INTERFACE_SETTINGS, - "AddConnection2", - g_variant_new("(@a{sa{sv}}u@a{sv})", - settings, - (guint32) flags, - args ?: g_variant_new_array(G_VARIANT_TYPE("{sv}"), NULL, 0)), - G_VARIANT_TYPE("(oa{sv})"), - G_DBUS_CALL_FLAGS_NONE, - NM_DBUS_DEFAULT_TIMEOUT_MSEC, - _add_connection_cb_with_extra_result); + _nm_client_dbus_call(self, + self, + source_tag, + cancellable, + callback, + user_data, + NM_DBUS_PATH_SETTINGS, + NM_DBUS_INTERFACE_SETTINGS, + "AddConnection2", + g_variant_new("(@a{sa{sv}}u@a{sv})", + settings, + (guint32) flags, + args ?: nm_g_variant_singleton_aLsvI()), + G_VARIANT_TYPE("(oa{sv})"), + G_DBUS_CALL_FLAGS_NONE, + NM_DBUS_DEFAULT_TIMEOUT_MSEC, + _add_connection_cb_with_extra_result); } } diff --git a/src/libnm-client-impl/nm-device-wifi-p2p.c b/src/libnm-client-impl/nm-device-wifi-p2p.c index 05c430f7d3..2daaf77484 100644 --- a/src/libnm-client-impl/nm-device-wifi-p2p.c +++ b/src/libnm-client-impl/nm-device-wifi-p2p.c @@ -156,7 +156,7 @@ nm_device_wifi_p2p_start_find(NMDeviceWifiP2P * device, g_return_if_fail(!cancellable || G_IS_CANCELLABLE(cancellable)); if (!options) - options = g_variant_new_array(G_VARIANT_TYPE("{sv}"), NULL, 0); + options = nm_g_variant_singleton_aLsvI(); _nm_client_dbus_call(_nm_object_get_client(device), device, diff --git a/src/libnm-client-impl/nm-device-wifi.c b/src/libnm-client-impl/nm-device-wifi.c index 84c3a069dc..fee7e8a2d8 100644 --- a/src/libnm-client-impl/nm-device-wifi.c +++ b/src/libnm-client-impl/nm-device-wifi.c @@ -309,7 +309,7 @@ nm_device_wifi_request_scan_options(NMDeviceWifi *device, g_return_val_if_fail(!error || !*error, FALSE); if (!options) - options = g_variant_new_array(G_VARIANT_TYPE("{sv}"), NULL, 0); + options = nm_g_variant_singleton_aLsvI(); return _nm_client_dbus_call_sync_void(_nm_object_get_client(device), cancellable, @@ -382,7 +382,7 @@ nm_device_wifi_request_scan_options_async(NMDeviceWifi * device, g_return_if_fail(!cancellable || G_IS_CANCELLABLE(cancellable)); if (!options) - options = g_variant_new_array(G_VARIANT_TYPE("{sv}"), NULL, 0); + options = nm_g_variant_singleton_aLsvI(); _nm_client_dbus_call(_nm_object_get_client(device), device, diff --git a/src/libnm-client-impl/nm-device.c b/src/libnm-client-impl/nm-device.c index ee0d88a0db..4d097935cb 100644 --- a/src/libnm-client-impl/nm-device.c +++ b/src/libnm-client-impl/nm-device.c @@ -2303,7 +2303,7 @@ nm_device_reapply(NMDevice * device, if (connection) arg_connection = nm_connection_to_dbus(connection, NM_CONNECTION_SERIALIZE_ALL); if (!arg_connection) - arg_connection = g_variant_new_array(G_VARIANT_TYPE("{sa{sv}}"), NULL, 0); + arg_connection = nm_g_variant_singleton_aLsaLsvII(); return _nm_client_dbus_call_sync_void( _nm_object_get_client(device), @@ -2355,7 +2355,7 @@ nm_device_reapply_async(NMDevice * device, if (connection) arg_connection = nm_connection_to_dbus(connection, NM_CONNECTION_SERIALIZE_ALL); if (!arg_connection) - arg_connection = g_variant_new_array(G_VARIANT_TYPE("{sa{sv}}"), NULL, 0); + arg_connection = nm_g_variant_singleton_aLsaLsvII(); _nm_client_dbus_call(_nm_object_get_client(device), device, diff --git a/src/libnm-client-impl/nm-remote-connection.c b/src/libnm-client-impl/nm-remote-connection.c index 007da3aa87..12d0da98ae 100644 --- a/src/libnm-client-impl/nm-remote-connection.c +++ b/src/libnm-client-impl/nm-remote-connection.c @@ -95,9 +95,9 @@ nm_remote_connection_update2(NMRemoteConnection * connection, g_return_if_fail(!cancellable || G_IS_CANCELLABLE(cancellable)); if (!settings) - settings = g_variant_new_array(G_VARIANT_TYPE("{sa{sv}}"), NULL, 0); + settings = nm_g_variant_singleton_aLsaLsvII(); if (!args) - args = g_variant_new_array(G_VARIANT_TYPE("{sv}"), NULL, 0); + args = nm_g_variant_singleton_aLsvI(); _nm_client_dbus_call(_nm_object_get_client(connection), connection, @@ -185,7 +185,7 @@ nm_remote_connection_commit_changes(NMRemoteConnection *connection, nm_connection_to_dbus(NM_CONNECTION(connection), NM_CONNECTION_SERIALIZE_ALL), (guint32)(save_to_disk ? NM_SETTINGS_UPDATE2_FLAG_TO_DISK : NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY), - g_variant_new_array(G_VARIANT_TYPE("{sv}"), NULL, 0)), + nm_g_variant_singleton_aLsvI()), G_VARIANT_TYPE("(a{sv})"), G_DBUS_CALL_FLAGS_NONE, NM_DBUS_DEFAULT_TIMEOUT_MSEC, diff --git a/src/libnm-core-impl/tests/test-secrets.c b/src/libnm-core-impl/tests/test-secrets.c index 0d33df6e97..41dcc4b312 100644 --- a/src/libnm-core-impl/tests/test-secrets.c +++ b/src/libnm-core-impl/tests/test-secrets.c @@ -526,20 +526,25 @@ test_update_secrets_whole_connection(void) static void test_update_secrets_whole_connection_empty_hash(void) { - NMConnection *connection; - GVariant * secrets; - GError * error = NULL; - gboolean success; + gs_unref_object NMConnection *connection = NULL; + GVariant * secrets; + GError * error = NULL; + gboolean success; /* Test that updating secrets with an empty connection hash returns success */ connection = wifi_connection_new(); secrets = g_variant_new_array(G_VARIANT_TYPE("{sa{sv}}"), NULL, 0); success = nm_connection_update_secrets(connection, NULL, secrets, &error); - g_assert_no_error(error); - g_assert(success == TRUE); + nmtst_assert_success(success, error); g_variant_unref(secrets); - g_object_unref(connection); + + g_clear_object(&connection); + + connection = wifi_connection_new(); + secrets = nm_g_variant_singleton_aLsaLsvII(); + success = nm_connection_update_secrets(connection, NULL, secrets, &error); + nmtst_assert_success(success, error); } static void From f34841e196112bfdb6c9d50a0183024a337e3a3c Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 15 Apr 2021 09:17:47 +0200 Subject: [PATCH 5/6] all: use nm_g_variant_new_ay() helper --- src/core/devices/nm-device-wireguard.c | 8 +++----- src/core/dhcp/nm-dhcp-helper.c | 2 +- src/core/dns/nm-dns-systemd-resolved.c | 5 +---- src/core/nm-ip6-config.c | 4 +--- src/core/supplicant/nm-supplicant-config.c | 9 ++++----- src/core/supplicant/nm-supplicant-interface.c | 9 ++++----- src/libnm-core-impl/nm-utils.c | 2 +- src/libnm-glib-aux/nm-shared-utils.c | 11 +++++------ src/libnm-glib-aux/nm-shared-utils.h | 10 ++-------- src/nmcli/devices.c | 14 ++++++-------- 10 files changed, 28 insertions(+), 46 deletions(-) diff --git a/src/core/devices/nm-device-wireguard.c b/src/core/devices/nm-device-wireguard.c index 09030dd8f7..ca552a2c8c 100644 --- a/src/core/devices/nm-device-wireguard.c +++ b/src/core/devices/nm-device-wireguard.c @@ -1939,11 +1939,9 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) switch (prop_id) { case PROP_PUBLIC_KEY: - g_value_take_variant(value, - g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, - priv->lnk_curr.public_key, - sizeof(priv->lnk_curr.public_key), - 1)); + g_value_take_variant( + value, + nm_g_variant_new_ay(priv->lnk_curr.public_key, sizeof(priv->lnk_curr.public_key))); break; case PROP_LISTEN_PORT: g_value_set_uint(value, priv->lnk_curr.listen_port); diff --git a/src/core/dhcp/nm-dhcp-helper.c b/src/core/dhcp/nm-dhcp-helper.c index 4ffe93f4bf..b076840f9e 100644 --- a/src/core/dhcp/nm-dhcp-helper.c +++ b/src/core/dhcp/nm-dhcp-helper.c @@ -92,7 +92,7 @@ build_signal_parameters(void) g_variant_builder_add(&builder, "{sv}", name, - g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, val, strlen(val), 1)); + nm_g_variant_new_ay((const guint8 *) val, strlen(val))); next:; } diff --git a/src/core/dns/nm-dns-systemd-resolved.c b/src/core/dns/nm-dns-systemd-resolved.c index de01cf9fb7..2a8a228900 100644 --- a/src/core/dns/nm-dns-systemd-resolved.c +++ b/src/core/dns/nm-dns-systemd-resolved.c @@ -201,10 +201,7 @@ update_add_ip_config(NMDnsSystemdResolved *self, g_variant_builder_add(dns, "i", addr_family); g_variant_builder_add_value( dns, - g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, - nm_ip_config_get_nameserver(data->ip_config, i), - addr_size, - 1)); + nm_g_variant_new_ay(nm_ip_config_get_nameserver(data->ip_config, i), addr_size)); g_variant_builder_close(dns); has_config = TRUE; } diff --git a/src/core/nm-ip6-config.c b/src/core/nm-ip6-config.c index 155594c8fc..ce7a4009f9 100644 --- a/src/core/nm-ip6-config.c +++ b/src/core/nm-ip6-config.c @@ -2409,9 +2409,7 @@ nameservers_to_gvalue(GArray *array, GValue *value) struct in6_addr *addr; addr = &g_array_index(array, struct in6_addr, i++); - g_variant_builder_add(&builder, - "@ay", - g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, addr, 16, 1)); + g_variant_builder_add(&builder, "@ay", nm_g_variant_new_ay_in6addr(addr)); } g_value_take_variant(value, g_variant_builder_end(&builder)); diff --git a/src/core/supplicant/nm-supplicant-config.c b/src/core/supplicant/nm-supplicant-config.c index a4bbb0efc5..c216159ca0 100644 --- a/src/core/supplicant/nm-supplicant-config.c +++ b/src/core/supplicant/nm-supplicant-config.c @@ -334,11 +334,10 @@ nm_supplicant_config_to_variant(NMSupplicantConfig *self) break; case NM_SUPPL_OPT_TYPE_BYTES: case NM_SUPPL_OPT_TYPE_UTF8: - g_variant_builder_add( - &builder, - "{sv}", - key, - g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, option->value, option->len, 1)); + g_variant_builder_add(&builder, + "{sv}", + key, + nm_g_variant_new_ay((const guint8 *) option->value, option->len)); break; case NM_SUPPL_OPT_TYPE_KEYWORD: case NM_SUPPL_OPT_TYPE_STRING: diff --git a/src/core/supplicant/nm-supplicant-interface.c b/src/core/supplicant/nm-supplicant-interface.c index 7cb3df9ad8..168dd39c8d 100644 --- a/src/core/supplicant/nm-supplicant-interface.c +++ b/src/core/supplicant/nm-supplicant-interface.c @@ -1619,11 +1619,10 @@ _wps_handle_set_pc_cb(GVariant *res, GError *error, gpointer user_data) * enroll with any BSS in range. */ if (!nm_utils_hwaddr_aton(wps_data->bssid, bssid_buf, sizeof(bssid_buf))) nm_assert_not_reached(); - g_variant_builder_add( - &start_args, - "{sv}", - "Bssid", - g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, bssid_buf, ETH_ALEN, sizeof(guint8))); + g_variant_builder_add(&start_args, + "{sv}", + "Bssid", + nm_g_variant_new_ay(bssid_buf, ETH_ALEN)); } wps_data->needs_cancelling = TRUE; diff --git a/src/libnm-core-impl/nm-utils.c b/src/libnm-core-impl/nm-utils.c index 84565e6503..b4762fab74 100644 --- a/src/libnm-core-impl/nm-utils.c +++ b/src/libnm-core-impl/nm-utils.c @@ -4227,7 +4227,7 @@ _nm_utils_hwaddr_to_dbus_impl(const char *str) if (!_nm_utils_hwaddr_aton(str, buf, sizeof(buf), &len)) return NULL; - return g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, buf, len, 1); + return nm_g_variant_new_ay(buf, len); } static GVariant * diff --git a/src/libnm-glib-aux/nm-shared-utils.c b/src/libnm-glib-aux/nm-shared-utils.c index 41c1a40887..aa1be1f28f 100644 --- a/src/libnm-glib-aux/nm-shared-utils.c +++ b/src/libnm-glib-aux/nm-shared-utils.c @@ -516,16 +516,15 @@ nm_utils_gbytes_equal_mem(GBytes *bytes, gconstpointer mem_data, gsize mem_len) GVariant * nm_utils_gbytes_to_variant_ay(GBytes *bytes) { - const guint8 *p; - gsize l; + const guint8 *p = NULL; + gsize l = 0; if (!bytes) { /* for convenience, accept NULL to return an empty variant */ - return g_variant_new_array(G_VARIANT_TYPE_BYTE, NULL, 0); - } + } else + p = g_bytes_get_data(bytes, &l); - p = g_bytes_get_data(bytes, &l); - return g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, p, l, 1); + return nm_g_variant_new_ay(p, l); } /*****************************************************************************/ diff --git a/src/libnm-glib-aux/nm-shared-utils.h b/src/libnm-glib-aux/nm-shared-utils.h index d413bd4747..d173db7c4d 100644 --- a/src/libnm-glib-aux/nm-shared-utils.h +++ b/src/libnm-glib-aux/nm-shared-utils.h @@ -1497,10 +1497,7 @@ nm_g_variant_new_au(const guint32 *data, gsize len) static inline GVariant * nm_g_variant_new_ay_inaddr(int addr_family, gconstpointer addr) { - return g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, - addr ?: &nm_ip_addr_zero, - nm_utils_addr_family_to_size(addr_family), - 1); + return nm_g_variant_new_ay(addr ?: &nm_ip_addr_zero, nm_utils_addr_family_to_size(addr_family)); } static inline GVariant * @@ -1527,10 +1524,7 @@ nm_g_variant_builder_add_sv_bytearray(GVariantBuilder *builder, const guint8 * arr, gsize len) { - g_variant_builder_add(builder, - "{sv}", - key, - g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, arr, len, 1)); + g_variant_builder_add(builder, "{sv}", key, nm_g_variant_new_ay(arr, len)); } static inline void diff --git a/src/nmcli/devices.c b/src/nmcli/devices.c index 6cd8d0d196..f44c167c4f 100644 --- a/src/nmcli/devices.c +++ b/src/nmcli/devices.c @@ -3774,10 +3774,9 @@ do_device_wifi_connect(const NMCCommand *cmd, NmCli *nmc, int argc, const char * g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT); g_variant_builder_init(&array_builder, G_VARIANT_TYPE("aay")); - g_variant_builder_add( - &array_builder, - "@ay", - g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, param_user, strlen(param_user), 1)); + g_variant_builder_add(&array_builder, + "@ay", + nm_g_variant_new_ay((const guint8 *) param_user, strlen(param_user))); g_variant_builder_add(&builder, "{sv}", "ssids", g_variant_builder_end(&array_builder)); options = g_variant_builder_end(&builder); @@ -4538,10 +4537,9 @@ do_device_wifi_rescan(const NMCCommand *cmd, NmCli *nmc, int argc, const char *c for (i = 0; i < ssids->len; i++) { const char *ssid = g_ptr_array_index(ssids, i); - g_variant_builder_add( - &array_builder, - "@ay", - g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, ssid, strlen(ssid), 1)); + g_variant_builder_add(&array_builder, + "@ay", + nm_g_variant_new_ay((const guint8 *) ssid, strlen(ssid))); } g_variant_builder_add(&builder, "{sv}", "ssids", g_variant_builder_end(&array_builder)); From 80e30f4562fa4d53487e8dcfe501cc515c8a6c33 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 15 Apr 2021 09:43:42 +0200 Subject: [PATCH 6/6] all: use nm_g_variant_new_au() helper --- src/core/NetworkManagerUtils.c | 14 ++------------ src/core/nm-dispatcher.c | 10 ++-------- src/core/nm-ip4-config.c | 16 ++++++---------- src/core/nm-manager.c | 6 ++---- src/core/ppp/nm-pppd-plugin.c | 18 ++++++++---------- src/libnm-core-impl/nm-setting-dcb.c | 2 +- src/libnm-core-impl/nm-utils.c | 10 ++-------- 7 files changed, 23 insertions(+), 53 deletions(-) diff --git a/src/core/NetworkManagerUtils.c b/src/core/NetworkManagerUtils.c index 59a65b0699..481672968b 100644 --- a/src/core/NetworkManagerUtils.c +++ b/src/core/NetworkManagerUtils.c @@ -1496,12 +1496,7 @@ nm_utils_ip_addresses_to_dbus(int addr_family, : (guint32) 0, }; - g_variant_builder_add(&builder_legacy, - "@au", - g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - dbus_addr, - 3, - sizeof(guint32))); + g_variant_builder_add(&builder_legacy, "@au", nm_g_variant_new_au(dbus_addr, 3)); } else { g_variant_builder_add( &builder_legacy, @@ -1623,12 +1618,7 @@ nm_utils_ip_routes_to_dbus(int addr_family, r->r4.metric, }; - g_variant_builder_add(&builder_legacy, - "@au", - g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - dbus_route, - 4, - sizeof(guint32))); + g_variant_builder_add(&builder_legacy, "@au", nm_g_variant_new_au(dbus_route, 4)); } else { g_variant_builder_add(&builder_legacy, "(@ayu@ayu)", diff --git a/src/core/nm-dispatcher.c b/src/core/nm-dispatcher.c index 81076810e4..32c9db627c 100644 --- a/src/core/nm-dispatcher.c +++ b/src/core/nm-dispatcher.c @@ -206,10 +206,7 @@ dump_ip_to_props(NMIPConfig *ip, GVariantBuilder *builder) array[0] = addr->a4.address; array[1] = addr->a4.plen; array[2] = gw; - g_variant_builder_add( - &int_builder, - "@au", - g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, array, 3, sizeof(guint32))); + g_variant_builder_add(&int_builder, "@au", nm_g_variant_new_au(array, 3)); } else { const struct in6_addr *gw = &in6addr_any; @@ -278,10 +275,7 @@ dump_ip_to_props(NMIPConfig *ip, GVariantBuilder *builder) array[1] = route->r4.plen; array[2] = route->r4.gateway; array[3] = route->r4.metric; - g_variant_builder_add( - &int_builder, - "@au", - g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, array, 4, sizeof(guint32))); + g_variant_builder_add(&int_builder, "@au", nm_g_variant_new_au(array, 4)); } else { var1 = nm_g_variant_new_ay_in6addr(&route->r6.network); var2 = nm_g_variant_new_ay_in6addr(&route->r6.gateway); diff --git a/src/core/nm-ip4-config.c b/src/core/nm-ip4-config.c index 9f8238841f..a6072ccb44 100644 --- a/src/core/nm-ip4-config.c +++ b/src/core/nm-ip4-config.c @@ -3016,11 +3016,9 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) g_value_take_variant(value, g_variant_builder_end(&builder_data)); break; case PROP_NAMESERVERS: - g_value_take_variant(value, - g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - priv->nameservers->data, - priv->nameservers->len, - sizeof(guint32))); + g_value_take_variant( + value, + nm_g_variant_new_au((const guint32 *) priv->nameservers->data, priv->nameservers->len)); break; case PROP_DOMAINS: nm_utils_g_value_set_strv(value, priv->domains); @@ -3045,11 +3043,9 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) g_value_take_variant(value, g_variant_builder_end(&builder_data)); break; case PROP_WINS_SERVERS: - g_value_take_variant(value, - g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - priv->wins->data, - priv->wins->len, - sizeof(guint32))); + g_value_take_variant( + value, + nm_g_variant_new_au((const guint32 *) priv->wins->data, priv->wins->len)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); diff --git a/src/core/nm-manager.c b/src/core/nm-manager.c index 50d2e3225a..f5a696f1fa 100644 --- a/src/core/nm-manager.c +++ b/src/core/nm-manager.c @@ -7940,10 +7940,8 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) break; case PROP_CAPABILITIES: g_value_set_variant(value, - g_variant_new_fixed_array(G_VARIANT_TYPE("u"), - priv->capabilities->data, - priv->capabilities->len, - sizeof(guint32))); + nm_g_variant_new_au((const guint32 *) priv->capabilities->data, + priv->capabilities->len)); break; case PROP_STATE: g_value_set_uint(value, priv->state); diff --git a/src/core/ppp/nm-pppd-plugin.c b/src/core/ppp/nm-pppd-plugin.c index 13c4e512df..5ffa7d17cc 100644 --- a/src/core/ppp/nm-pppd-plugin.c +++ b/src/core/ppp/nm-pppd-plugin.c @@ -226,11 +226,10 @@ nm_ip_up(void *data, int arg) if (opts.dnsaddr[1]) dns[len++] = opts.dnsaddr[1]; - g_variant_builder_add( - &builder, - "{sv}", - NM_PPP_IP4_CONFIG_DNS, - g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, dns, len, sizeof(guint32))); + g_variant_builder_add(&builder, + "{sv}", + NM_PPP_IP4_CONFIG_DNS, + nm_g_variant_new_au(dns, len)); } if (opts.winsaddr[0] || opts.winsaddr[1]) { @@ -242,11 +241,10 @@ nm_ip_up(void *data, int arg) if (opts.winsaddr[1]) wins[len++] = opts.winsaddr[1]; - g_variant_builder_add( - &builder, - "{sv}", - NM_PPP_IP4_CONFIG_WINS, - g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, wins, len, sizeof(guint32))); + g_variant_builder_add(&builder, + "{sv}", + NM_PPP_IP4_CONFIG_WINS, + nm_g_variant_new_au(wins, len)); } g_message("nm-ppp-plugin: sending IPv4 config to NetworkManager..."); diff --git a/src/libnm-core-impl/nm-setting-dcb.c b/src/libnm-core-impl/nm-setting-dcb.c index 695953d14e..b7f0808769 100644 --- a/src/libnm-core-impl/nm-setting-dcb.c +++ b/src/libnm-core-impl/nm-setting-dcb.c @@ -733,7 +733,7 @@ _nm_setting_dcb_uint_array_to_dbus(const GValue *prop_value) { GArray *src = g_value_get_boxed(prop_value); - return g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, src->data, src->len, sizeof(guint32)); + return nm_g_variant_new_au((const guint32 *) src->data, src->len); } static void diff --git a/src/libnm-core-impl/nm-utils.c b/src/libnm-core-impl/nm-utils.c index b4762fab74..07302cb117 100644 --- a/src/libnm-core-impl/nm-utils.c +++ b/src/libnm-core-impl/nm-utils.c @@ -1377,10 +1377,7 @@ nm_utils_ip4_addresses_to_variant(GPtrArray *addresses, const char *gateway) array[1] = nm_ip_address_get_prefix(addr); array[2] = gw; - g_variant_builder_add( - &builder, - "@au", - g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, array, 3, sizeof(guint32))); + g_variant_builder_add(&builder, "@au", nm_g_variant_new_au(array, 3)); } } @@ -1479,10 +1476,7 @@ nm_utils_ip4_routes_to_variant(GPtrArray *routes) /* The old routes format uses "0" for default, not "-1" */ array[3] = MAX(0, nm_ip_route_get_metric(route)); - g_variant_builder_add( - &builder, - "@au", - g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, array, 4, sizeof(guint32))); + g_variant_builder_add(&builder, "@au", nm_g_variant_new_au(array, 4)); } }