diff --git a/src/libnm-core-impl/nm-connection.c b/src/libnm-core-impl/nm-connection.c index 35a14a80b8..9672dcc252 100644 --- a/src/libnm-core-impl/nm-connection.c +++ b/src/libnm-core-impl/nm-connection.c @@ -2426,6 +2426,21 @@ _get_settings_sort(gconstpointer p_a, gconstpointer p_b, gpointer unused) return 0; } +int +_nmtst_nm_setting_sort(NMSetting *a, NMSetting *b) +{ + g_assert(NM_IS_SETTING(a)); + g_assert(NM_IS_SETTING(b)); + g_assert(a != b); + g_assert(G_OBJECT_TYPE(a) != G_OBJECT_TYPE(b)); + + NM_CMP_RETURN(_nm_setting_compare_priority(a, b)); + NM_CMP_DIRECT_STRCMP(nm_setting_get_name(a), nm_setting_get_name(b)); + + g_assert_not_reached(); + return 0; +} + /** * nm_connection_get_settings: * @connection: the #NMConnection instance diff --git a/src/libnm-core-impl/nm-setting-private.h b/src/libnm-core-impl/nm-setting-private.h index b0abb28df5..339921e65e 100644 --- a/src/libnm-core-impl/nm-setting-private.h +++ b/src/libnm-core-impl/nm-setting-private.h @@ -132,6 +132,60 @@ struct _NMSettingIPConfigClass { NMSettingPriority _nm_setting_get_base_type_priority(NMSetting *setting); int _nm_setting_compare_priority(gconstpointer a, gconstpointer b); +int _nmtst_nm_setting_sort(NMSetting *a, NMSetting *b); + +/*****************************************************************************/ + +#define _nm_assert_setting_info(setting_info, gtype) \ + G_STMT_START \ + { \ + const NMMetaSettingInfo *_setting_info = (setting_info); \ + \ + if (NM_MORE_ASSERTS > 0) { \ + GType _gtype = (gtype); \ + \ + nm_assert(_setting_info); \ + nm_assert(_NM_INT_NOT_NEGATIVE(_setting_info->meta_type)); \ + nm_assert(_setting_info->meta_type < _NM_META_SETTING_TYPE_NUM); \ + nm_assert(_setting_info->get_setting_gtype); \ + if (_gtype != 0) \ + nm_assert(_setting_info->get_setting_gtype() == _gtype); \ + else \ + _gtype = _setting_info->get_setting_gtype(); \ + nm_assert(g_type_is_a(_gtype, NM_TYPE_SETTING)); \ + } \ + } \ + G_STMT_END + +static inline const NMMetaSettingInfo * +_nm_meta_setting_info_from_class(NMSettingClass *klass) +{ + const NMMetaSettingInfo *setting_info; + + if (!NM_IS_SETTING_CLASS(klass)) + return NULL; + + setting_info = klass->setting_info; + if (!setting_info) + return NULL; + + _nm_assert_setting_info(setting_info, G_OBJECT_CLASS_TYPE(klass)); + return setting_info; +} + +static inline const NMMetaSettingInfo * +_nm_meta_setting_info_from_gtype(GType gtype) +{ + const NMMetaSettingInfo *setting_info; + + setting_info = nm_meta_setting_infos_by_gtype(gtype); + if (!setting_info) + return NULL; + + _nm_assert_setting_info(setting_info, gtype); + return setting_info; +} + /*****************************************************************************/ void _nm_setting_emit_property_changed(NMSetting *setting);