From eb3b2d9ef60506cdaba9cf07a9cf891f5cf1ee92 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 25 Oct 2023 17:25:26 +0200 Subject: [PATCH] libnm: initialize "name" in _nm_properties_override_gobj() Previously, _nm_setting_class_commit() required that the "name" of a NMSettInfoProperty is unset, when the property also has a "param_spec". _nm_setting_class_commit() would then as first iterate over all properties, and set the name. In practice, all callers only initialize NMSettInfoProperty via _nm_properties_override_gobj(). Now, let _nm_properties_override_gobj() set the "name" right away. Now _nm_setting_class_commit() will instead assert that the name is always set, and that the caller takes care of that. That means, we have less to do in _nm_setting_class_commit() (assertions aside). --- src/libnm-core-impl/nm-setting-private.h | 26 ++++++++++++++++-------- src/libnm-core-impl/nm-setting.c | 20 +++++------------- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/src/libnm-core-impl/nm-setting-private.h b/src/libnm-core-impl/nm-setting-private.h index d87c5d7ee1..bdb21480a6 100644 --- a/src/libnm-core-impl/nm-setting-private.h +++ b/src/libnm-core-impl/nm-setting-private.h @@ -483,15 +483,23 @@ _nm_properties_override(GArray *properties_override, const NMSettInfoProperty *p g_array_append_vals(properties_override, prop_info, 1); } -#define _nm_properties_override_gobj(properties_override, \ - p_param_spec, \ - p_property_type, \ - ... /* extra NMSettInfoProperty fields */) \ - _nm_properties_override((properties_override), \ - NM_SETT_INFO_PROPERTY(.name = NULL, \ - .param_spec = (p_param_spec), \ - .property_type = (p_property_type), \ - __VA_ARGS__)) +#define _nm_properties_override_gobj(properties_override, \ + p_param_spec, \ + p_property_type, \ + ... /* extra NMSettInfoProperty fields */) \ + G_STMT_START \ + { \ + GParamSpec *const _p_param_spec_2 = (p_param_spec); \ + \ + nm_assert(_p_param_spec_2); \ + \ + _nm_properties_override((properties_override), \ + NM_SETT_INFO_PROPERTY(.name = _p_param_spec_2->name, \ + .param_spec = _p_param_spec_2, \ + .property_type = (p_property_type), \ + __VA_ARGS__)); \ + } \ + G_STMT_END #define _nm_properties_override_dbus(properties_override, \ p_name, \ diff --git a/src/libnm-core-impl/nm-setting.c b/src/libnm-core-impl/nm-setting.c index 7cd8947fdd..9fc3df7743 100644 --- a/src/libnm-core-impl/nm-setting.c +++ b/src/libnm-core-impl/nm-setting.c @@ -183,9 +183,8 @@ _nm_properties_override_assert(const NMSettInfoProperty *prop_info) { #if NM_MORE_ASSERTS nm_assert(prop_info); - nm_assert((!!prop_info->name) != (!!prop_info->param_spec)); - nm_assert(!prop_info->param_spec || !prop_info->name - || nm_streq0(prop_info->name, prop_info->param_spec->name)); + nm_assert(prop_info->name); + nm_assert(!prop_info->param_spec || prop_info->name == prop_info->param_spec->name); if (prop_info->property_type) { const NMSettInfoPropertType *property_type = prop_info->property_type; @@ -361,18 +360,6 @@ _nm_setting_class_commit(NMSettingClass *setting_class, nm_assert(override_len > 0); - for (i = 0; i < override_len; i++) { - NMSettInfoProperty *p = &nm_g_array_index(properties_override, NMSettInfoProperty, i); - - nm_assert((!!p->name) != (!!p->param_spec)); - - if (!p->name) { - nm_assert(p->param_spec); - p->name = p->param_spec->name; - } else - nm_assert(!p->param_spec); - } - #if NM_MORE_ASSERTS > 10 property_specs = g_object_class_list_properties(G_OBJECT_CLASS(setting_class), &n_property_specs); @@ -383,6 +370,9 @@ _nm_setting_class_commit(NMSettingClass *setting_class, gboolean found = FALSE; guint k; + nm_assert(p->name); + nm_assert(!p->param_spec || p->name == p->param_spec->name); + nm_assert(!_nm_sett_info_property_find_in_array( nm_g_array_first_p(properties_override, NMSettInfoProperty), i,