summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2019-03-22 15:10:41 +0100
committerThomas Haller <thaller@redhat.com>2019-03-27 16:23:30 +0100
commit699257d432d4bf42a7e52f85f373fd27a63e73dc (patch)
tree0c1c2ea3f3e4a7d39ca8f780dcc94b17ce4aef0c
parent28efb61d077d028c455cb1b34b50a0744a06aeef (diff)
downloadNetworkManager-699257d432d4bf42a7e52f85f373fd27a63e73dc.tar.gz
libnm/keyfile: return setting-info from _parse_info_find()
-rw-r--r--libnm-core/nm-keyfile.c76
1 files changed, 41 insertions, 35 deletions
diff --git a/libnm-core/nm-keyfile.c b/libnm-core/nm-keyfile.c
index 955015d651..96a8c941d8 100644
--- a/libnm-core/nm-keyfile.c
+++ b/libnm-core/nm-keyfile.c
@@ -2651,7 +2651,7 @@ static const ParseInfoSetting *const parse_infos[_NM_META_SETTING_TYPE_NUM] = {
static const ParseInfoProperty *
_parse_info_find (NMSetting *setting,
const char *property_name,
- const char **out_setting_name)
+ const NMMetaSettingInfo **out_setting_info)
{
const NMMetaSettingInfo *setting_info;
const ParseInfoSetting *pis;
@@ -2690,11 +2690,13 @@ _parse_info_find (NMSetting *setting,
if ( !NM_IS_SETTING (setting)
|| !(setting_info = NM_SETTING_GET_CLASS (setting)->setting_info)) {
/* handle invalid setting objects gracefully. */
- *out_setting_name = NULL;
+ *out_setting_info = NULL;
return NULL;
}
- *out_setting_name = setting_info->setting_name;
+ nm_assert (setting_info->setting_name);
+
+ *out_setting_info = setting_info;
if ((pis = parse_infos[setting_info->meta_type])) {
G_STATIC_ASSERT_EXPR (G_STRUCT_OFFSET (ParseInfoProperty, property_name) == 0);
@@ -2721,9 +2723,9 @@ read_one_setting_value (KeyfileReaderInfo *info,
{
GKeyFile *keyfile = info->keyfile;
gs_free_error GError *err = NULL;
+ const NMMetaSettingInfo *setting_info;
const ParseInfoProperty *pip;
gs_free char *tmp_str = NULL;
- const char *setting_name;
const char *key;
GType type;
guint64 u64;
@@ -2737,9 +2739,9 @@ read_one_setting_value (KeyfileReaderInfo *info,
key = property_info->param_spec->name;
- pip = _parse_info_find (setting, key, &setting_name);
+ pip = _parse_info_find (setting, key, &setting_info);
- nm_assert (setting_name);
+ nm_assert (setting_info);
if ( !pip
&& nm_streq (key, NM_SETTING_NAME))
@@ -2754,7 +2756,7 @@ read_one_setting_value (KeyfileReaderInfo *info,
* encoded by the setting property, this won't be true.
*/
if ( (!pip || !pip->parser_no_check_key)
- && !nm_keyfile_plugin_kf_has_key (keyfile, setting_name, key, &err)) {
+ && !nm_keyfile_plugin_kf_has_key (keyfile, setting_info->setting_name, key, &err)) {
/* Key doesn't exist or an error occurred, thus nothing to do. */
if (err) {
if (!handle_warn (info, key, NM_KEYFILE_WARN_SEVERITY_WARN,
@@ -2775,11 +2777,11 @@ read_one_setting_value (KeyfileReaderInfo *info,
if (type == G_TYPE_STRING) {
gs_free char *str_val = NULL;
- str_val = nm_keyfile_plugin_kf_get_string (keyfile, setting_name, key, &err);
+ str_val = nm_keyfile_plugin_kf_get_string (keyfile, setting_info->setting_name, key, &err);
if (!err)
nm_g_object_set_property_string_take (G_OBJECT (setting), key, g_steal_pointer (&str_val), &err);
} else if (type == G_TYPE_UINT) {
- tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_name, key, &err);
+ tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_info->setting_name, key, &err);
if (!err) {
u64 = _nm_utils_ascii_str_to_uint64 (tmp_str, 0, 0, G_MAXUINT, G_MAXUINT64);
if ( u64 == G_MAXUINT64
@@ -2790,7 +2792,7 @@ read_one_setting_value (KeyfileReaderInfo *info,
nm_g_object_set_property_uint (G_OBJECT (setting), key, u64, &err);
}
} else if (type == G_TYPE_INT) {
- tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_name, key, &err);
+ tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_info->setting_name, key, &err);
if (!err) {
i64 = _nm_utils_ascii_str_to_int64 (tmp_str, 0, G_MININT, G_MAXINT, G_MININT64);
if ( i64 == G_MININT64
@@ -2803,11 +2805,11 @@ read_one_setting_value (KeyfileReaderInfo *info,
} else if (type == G_TYPE_BOOLEAN) {
gboolean bool_val;
- bool_val = nm_keyfile_plugin_kf_get_boolean (keyfile, setting_name, key, &err);
+ bool_val = nm_keyfile_plugin_kf_get_boolean (keyfile, setting_info->setting_name, key, &err);
if (!err)
nm_g_object_set_property_boolean (G_OBJECT (setting), key, bool_val, &err);
} else if (type == G_TYPE_CHAR) {
- tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_name, key, &err);
+ tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_info->setting_name, key, &err);
if (!err) {
/* As documented by glib, G_TYPE_CHAR is really a (signed!) gint8. */
i64 = _nm_utils_ascii_str_to_int64 (tmp_str, 0, G_MININT8, G_MAXINT8, G_MININT64);
@@ -2819,7 +2821,7 @@ read_one_setting_value (KeyfileReaderInfo *info,
nm_g_object_set_property_char (G_OBJECT (setting), key, i64, &err);
}
} else if (type == G_TYPE_UINT64) {
- tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_name, key, &err);
+ tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_info->setting_name, key, &err);
if (!err) {
u64 = _nm_utils_ascii_str_to_uint64 (tmp_str, 0, 0, G_MAXUINT64, G_MAXUINT64);
if ( u64 == G_MAXUINT64
@@ -2830,7 +2832,7 @@ read_one_setting_value (KeyfileReaderInfo *info,
nm_g_object_set_property_uint64 (G_OBJECT (setting), key, u64, &err);
}
} else if (type == G_TYPE_INT64) {
- tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_name, key, &err);
+ tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_info->setting_name, key, &err);
if (!err) {
i64 = _nm_utils_ascii_str_to_int64 (tmp_str, 0, G_MININT64, G_MAXINT64, G_MAXINT64);
if ( i64 == G_MAXINT64
@@ -2848,7 +2850,7 @@ read_one_setting_value (KeyfileReaderInfo *info,
int i;
gboolean already_warned = FALSE;
- tmp = nm_keyfile_plugin_kf_get_integer_list (keyfile, setting_name, key, &length, NULL);
+ tmp = nm_keyfile_plugin_kf_get_integer_list (keyfile, setting_info->setting_name, key, &length, NULL);
array = g_byte_array_sized_new (length);
for (i = 0; i < length; i++) {
@@ -2875,14 +2877,14 @@ read_one_setting_value (KeyfileReaderInfo *info,
gs_strfreev char **sa = NULL;
gsize length;
- sa = nm_keyfile_plugin_kf_get_string_list (keyfile, setting_name, key, &length, NULL);
+ sa = nm_keyfile_plugin_kf_get_string_list (keyfile, setting_info->setting_name, key, &length, NULL);
g_object_set (setting, key, sa, NULL);
} else if (type == G_TYPE_HASH_TABLE) {
read_hash_of_string (keyfile, setting, key);
} else if (type == G_TYPE_ARRAY) {
read_array_of_uint (keyfile, setting, key);
} else if (G_TYPE_IS_FLAGS (type)) {
- tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_name, key, &err);
+ tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_info->setting_name, key, &err);
if (!err) {
u64 = _nm_utils_ascii_str_to_uint64 (tmp_str, 0, 0, G_MAXUINT, G_MAXUINT64);
if ( u64 == G_MAXUINT64
@@ -2893,7 +2895,7 @@ read_one_setting_value (KeyfileReaderInfo *info,
nm_g_object_set_property_flags (G_OBJECT (setting), key, type, u64, &err);
}
} else if (G_TYPE_IS_ENUM (type)) {
- tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_name, key, &err);
+ tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_info->setting_name, key, &err);
if (!err) {
i64 = _nm_utils_ascii_str_to_int64 (tmp_str, 0, G_MININT, G_MAXINT, G_MAXINT64);
if ( i64 == G_MAXINT64
@@ -3330,23 +3332,25 @@ write_setting_value (KeyfileWriterInfo *info,
NMSetting *setting,
const NMSettInfoProperty *property_info)
{
+ const NMMetaSettingInfo *setting_info;
const ParseInfoProperty *pip;
- const char *setting_name;
const char *key;
char numstr[64];
GValue value;
GType type;
nm_assert (!info->error);
+ nm_assert ( !property_info->param_spec
+ || nm_streq (property_info->param_spec->name, property_info->name));
if (!property_info->param_spec)
return;
key = property_info->param_spec->name;
- pip = _parse_info_find (setting, key, &setting_name);
+ pip = _parse_info_find (setting, key, &setting_info);
- if (!setting_name) {
+ if (!setting_info) {
/* the setting type is unknown. That is highly unexpected
* (and as this is currently only called from NetworkManager
* daemon, not possible).
@@ -3362,7 +3366,8 @@ write_setting_value (KeyfileWriterInfo *info,
&& nm_streq (key, NM_SETTING_NAME))
return;
- if (pip && pip->writer_skip)
+ if ( pip
+ && pip->writer_skip)
return;
/* Don't write secrets that are owned by user secret agents or aren't
@@ -3387,11 +3392,12 @@ write_setting_value (KeyfileWriterInfo *info,
if ( (!pip || !pip->writer_persist_default)
&& g_param_value_defaults (property_info->param_spec, &value)) {
- nm_assert (!g_key_file_has_key (info->keyfile, setting_name, key, NULL));
+ nm_assert (!g_key_file_has_key (info->keyfile, setting_info->setting_name, key, NULL));
goto out_unset_value;
}
- if (pip && pip->writer) {
+ if ( pip
+ && pip->writer) {
pip->writer (info, setting, key, &value);
goto out_unset_value;
}
@@ -3402,27 +3408,27 @@ write_setting_value (KeyfileWriterInfo *info,
str = g_value_get_string (&value);
if (str)
- nm_keyfile_plugin_kf_set_string (info->keyfile, setting_name, key, str);
+ nm_keyfile_plugin_kf_set_string (info->keyfile, setting_info->setting_name, key, str);
} else if (type == G_TYPE_UINT) {
nm_sprintf_buf (numstr, "%u", g_value_get_uint (&value));
- nm_keyfile_plugin_kf_set_value (info->keyfile, setting_name, key, numstr);
+ nm_keyfile_plugin_kf_set_value (info->keyfile, setting_info->setting_name, key, numstr);
} else if (type == G_TYPE_INT) {
nm_sprintf_buf (numstr, "%d", g_value_get_int (&value));
- nm_keyfile_plugin_kf_set_value (info->keyfile, setting_name, key, numstr);
+ nm_keyfile_plugin_kf_set_value (info->keyfile, setting_info->setting_name, key, numstr);
} else if (type == G_TYPE_UINT64) {
nm_sprintf_buf (numstr, "%" G_GUINT64_FORMAT, g_value_get_uint64 (&value));
- nm_keyfile_plugin_kf_set_value (info->keyfile, setting_name, key, numstr);
+ nm_keyfile_plugin_kf_set_value (info->keyfile, setting_info->setting_name, key, numstr);
} else if (type == G_TYPE_INT64) {
nm_sprintf_buf (numstr, "%" G_GINT64_FORMAT, g_value_get_int64 (&value));
- nm_keyfile_plugin_kf_set_value (info->keyfile, setting_name, key, numstr);
+ nm_keyfile_plugin_kf_set_value (info->keyfile, setting_info->setting_name, key, numstr);
} else if (type == G_TYPE_BOOLEAN) {
- nm_keyfile_plugin_kf_set_value (info->keyfile, setting_name, key,
+ nm_keyfile_plugin_kf_set_value (info->keyfile, setting_info->setting_name, key,
g_value_get_boolean (&value)
? "true"
: "false");
} else if (type == G_TYPE_CHAR) {
nm_sprintf_buf (numstr, "%d", (int) g_value_get_schar (&value));
- nm_keyfile_plugin_kf_set_value (info->keyfile, setting_name, key, numstr);
+ nm_keyfile_plugin_kf_set_value (info->keyfile, setting_info->setting_name, key, numstr);
} else if (type == G_TYPE_BYTES) {
GBytes *bytes;
const guint8 *data;
@@ -3432,22 +3438,22 @@ write_setting_value (KeyfileWriterInfo *info,
data = bytes ? g_bytes_get_data (bytes, &len) : NULL;
if (data != NULL && len > 0)
- nm_keyfile_plugin_kf_set_integer_list_uint8 (info->keyfile, setting_name, key, data, len);
+ nm_keyfile_plugin_kf_set_integer_list_uint8 (info->keyfile, setting_info->setting_name, key, data, len);
} else if (type == G_TYPE_STRV) {
char **array;
array = (char **) g_value_get_boxed (&value);
- nm_keyfile_plugin_kf_set_string_list (info->keyfile, setting_name, key, (const char **const) array, g_strv_length (array));
+ nm_keyfile_plugin_kf_set_string_list (info->keyfile, setting_info->setting_name, key, (const char **const) array, g_strv_length (array));
} else if (type == G_TYPE_HASH_TABLE) {
write_hash_of_string (info->keyfile, setting, key, &value);
} else if (type == G_TYPE_ARRAY) {
write_array_of_uint (info->keyfile, setting, key, &value);
} else if (G_VALUE_HOLDS_FLAGS (&value)) {
nm_sprintf_buf (numstr, "%u", g_value_get_flags (&value));
- nm_keyfile_plugin_kf_set_value (info->keyfile, setting_name, key, numstr);
+ nm_keyfile_plugin_kf_set_value (info->keyfile, setting_info->setting_name, key, numstr);
} else if (G_VALUE_HOLDS_ENUM (&value)) {
nm_sprintf_buf (numstr, "%d", g_value_get_enum (&value));
- nm_keyfile_plugin_kf_set_value (info->keyfile, setting_name, key, numstr);
+ nm_keyfile_plugin_kf_set_value (info->keyfile, setting_info->setting_name, key, numstr);
} else
g_return_if_reached ();