summary refs log tree commit diff
path: root/src/libnm-core-impl/nm-setting-user.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libnm-core-impl/nm-setting-user.c')
-rw-r--r--src/libnm-core-impl/nm-setting-user.c74
1 files changed, 30 insertions, 44 deletions
diff --git a/src/libnm-core-impl/nm-setting-user.c b/src/libnm-core-impl/nm-setting-user.c
index 0f99baa2..4068f337 100644
--- a/src/libnm-core-impl/nm-setting-user.c
+++ b/src/libnm-core-impl/nm-setting-user.c
@@ -232,7 +232,7 @@ nm_setting_user_get_keys(NMSettingUser *setting, guint *out_len)
         return priv->keys;
     }
 
-    priv->keys = nm_utils_strdict_get_keys(priv->data, TRUE, out_len);
+    priv->keys = nm_strdict_get_keys(priv->data, TRUE, out_len);
 
     /* don't return %NULL, but hijack the @keys fields as a pseudo
      * empty strv array. */
@@ -254,18 +254,10 @@ nm_setting_user_get_keys(NMSettingUser *setting, guint *out_len)
 const char *
 nm_setting_user_get_data(NMSettingUser *setting, const char *key)
 {
-    NMSettingUser *       self = setting;
-    NMSettingUserPrivate *priv;
-
-    g_return_val_if_fail(NM_IS_SETTING_USER(self), NULL);
+    g_return_val_if_fail(NM_IS_SETTING_USER(setting), NULL);
     g_return_val_if_fail(key, NULL);
 
-    priv = NM_SETTING_USER_GET_PRIVATE(self);
-
-    if (!priv->data)
-        return NULL;
-
-    return g_hash_table_lookup(priv->data, key);
+    return nm_g_hash_table_lookup(NM_SETTING_USER_GET_PRIVATE(setting)->data, key);
 }
 
 /**
@@ -397,34 +389,21 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
 }
 
 static NMTernary
-compare_property(const NMSettInfoSetting *sett_info,
-                 guint                    property_idx,
-                 NMConnection *           con_a,
-                 NMSetting *              set_a,
-                 NMConnection *           con_b,
-                 NMSetting *              set_b,
-                 NMSettingCompareFlags    flags)
+compare_fcn_data(_NM_SETT_INFO_PROP_COMPARE_FCN_ARGS _nm_nil)
 {
-    NMSettingUserPrivate *priv, *pri2;
+    NMSettingUserPrivate *priv;
+    NMSettingUserPrivate *pri2;
 
-    if (nm_streq(sett_info->property_infos[property_idx].name, NM_SETTING_USER_DATA)) {
-        if (NM_FLAGS_HAS(flags, NM_SETTING_COMPARE_FLAG_INFERRABLE))
-            return NM_TERNARY_DEFAULT;
+    if (NM_FLAGS_HAS(flags, NM_SETTING_COMPARE_FLAG_INFERRABLE))
+        return NM_TERNARY_DEFAULT;
 
-        if (!set_b)
-            return TRUE;
-
-        priv = NM_SETTING_USER_GET_PRIVATE(NM_SETTING_USER(set_a));
-        pri2 = NM_SETTING_USER_GET_PRIVATE(NM_SETTING_USER(set_b));
-        return nm_utils_hashtable_equal(priv->data, pri2->data, TRUE, g_str_equal)
-               && nm_utils_hashtable_equal(priv->data_invalid,
-                                           pri2->data_invalid,
-                                           TRUE,
-                                           g_str_equal);
-    }
+    if (!set_b)
+        return TRUE;
 
-    return NM_SETTING_CLASS(nm_setting_user_parent_class)
-        ->compare_property(sett_info, property_idx, con_a, set_a, con_b, set_b, flags);
+    priv = NM_SETTING_USER_GET_PRIVATE(NM_SETTING_USER(set_a));
+    pri2 = NM_SETTING_USER_GET_PRIVATE(NM_SETTING_USER(set_b));
+    return nm_utils_hashtable_equal(priv->data, pri2->data, TRUE, g_str_equal)
+           && nm_utils_hashtable_equal(priv->data_invalid, pri2->data_invalid, TRUE, g_str_equal);
 }
 
 /*****************************************************************************/
@@ -552,8 +531,7 @@ nm_setting_user_class_init(NMSettingUserClass *klass)
     object_class->set_property = set_property;
     object_class->finalize     = finalize;
 
-    setting_class->compare_property = compare_property;
-    setting_class->verify           = verify;
+    setting_class->verify = verify;
 
     /**
      * NMSettingUser:data: (type GHashTable(utf8,utf8))
@@ -581,14 +559,22 @@ nm_setting_user_class_init(NMSettingUserClass *klass)
                                                    "",
                                                    G_TYPE_HASH_TABLE,
                                                    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-    _nm_properties_override_gobj(properties_override,
-                                 obj_properties[PROP_DATA],
-                                 &nm_sett_info_propert_type_strdict);
+    _nm_properties_override_gobj(
+        properties_override,
+        obj_properties[PROP_DATA],
+        NM_SETT_INFO_PROPERT_TYPE_GPROP(NM_G_VARIANT_TYPE("a{ss}"),
+                                        .typdata_from_dbus.gprop_fcn = _nm_utils_strdict_from_dbus,
+                                        .typdata_to_dbus.gprop_type =
+                                            NM_SETTING_PROPERTY_TO_DBUS_FCN_GPROP_TYPE_STRDICT,
+                                        .compare_fcn   = compare_fcn_data,
+                                        .from_dbus_fcn = _nm_setting_property_from_dbus_fcn_gprop,
+                                        .from_dbus_is_full = TRUE));
 
     g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties);
 
-    _nm_setting_class_commit_full(setting_class,
-                                  NM_META_SETTING_TYPE_USER,
-                                  NULL,
-                                  properties_override);
+    _nm_setting_class_commit(setting_class,
+                             NM_META_SETTING_TYPE_USER,
+                             NULL,
+                             properties_override,
+                             G_STRUCT_OFFSET(NMSettingUser, _priv));
 }