summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2015-06-09 09:02:32 +0200
committerThomas Haller <thaller@redhat.com>2015-07-02 15:50:03 +0200
commit35d2981546911f7f6e29c845eaca95a8973d7004 (patch)
treeeac8332b6d514adeedafd04adeb3b8042b01626c
parent2c46003e99b472595d983a03c70dd28d254fad5c (diff)
downloadNetworkManager-35d2981546911f7f6e29c845eaca95a8973d7004.tar.gz
config: add nm_config_parse_boolean() function
Add function to parse as boolean according our NMConfig convention. Split this out from nm_config_keyfile_get_boolean() so that we can use it independently. Also, change the return type to gint, so that one might pass -1 to indicate an invalid/missing boolean value. Thereby also don't log a warning in nm_config_keyfile_get_boolean() We don't want to log a warning every time we access a keyfile value. If we want to warn about invalid values, we should do it once after the configuration is loaded. And then we should not only do it for booleans, but for other types as well.
-rw-r--r--src/nm-config.c57
-rw-r--r--src/nm-config.h18
2 files changed, 46 insertions, 29 deletions
diff --git a/src/nm-config.c b/src/nm-config.c
index 32f2883306..d92d4628ec 100644
--- a/src/nm-config.c
+++ b/src/nm-config.c
@@ -108,37 +108,52 @@ static void _set_config_data (NMConfig *self, NMConfigData *new_data, int signal
/************************************************************************/
-gboolean
+gint
+nm_config_parse_boolean (const char *str,
+ gint default_value)
+{
+ gsize len;
+ char *s = NULL;
+
+ if (!str)
+ return default_value;
+
+ while (str[0] && g_ascii_isspace (str[0]))
+ str++;
+
+ if (!str[0])
+ return default_value;
+
+ len = strlen (str);
+ if (g_ascii_isspace (str[len - 1])) {
+ s = g_strdup (str);
+ g_strchomp (s);
+ str = s;
+ }
+
+ if (!g_ascii_strcasecmp (str, "true") || !g_ascii_strcasecmp (str, "yes") || !g_ascii_strcasecmp (str, "on") || !g_ascii_strcasecmp (str, "1"))
+ default_value = TRUE;
+ else if (!g_ascii_strcasecmp (str, "false") || !g_ascii_strcasecmp (str, "no") || !g_ascii_strcasecmp (str, "off") || !g_ascii_strcasecmp (str, "0"))
+ default_value = FALSE;
+ if (s)
+ g_free (s);
+ return default_value;
+}
+
+gint
nm_config_keyfile_get_boolean (GKeyFile *keyfile,
const char *section,
const char *key,
- gboolean default_value)
+ gint default_value)
{
- gboolean value = default_value;
- char *str;
+ gs_free char *str = NULL;
g_return_val_if_fail (keyfile != NULL, default_value);
g_return_val_if_fail (section != NULL, default_value);
g_return_val_if_fail (key != NULL, default_value);
str = g_key_file_get_value (keyfile, section, key, NULL);
- if (!str)
- return default_value;
-
- g_strstrip (str);
- if (str[0]) {
- if (!g_ascii_strcasecmp (str, "true") || !g_ascii_strcasecmp (str, "yes") || !g_ascii_strcasecmp (str, "on") || !g_ascii_strcasecmp (str, "1"))
- value = TRUE;
- else if (!g_ascii_strcasecmp (str, "false") || !g_ascii_strcasecmp (str, "no") || !g_ascii_strcasecmp (str, "off") || !g_ascii_strcasecmp (str, "0"))
- value = FALSE;
- else {
- nm_log_warn (LOGD_CORE, "Unrecognized value for %s.%s: '%s'. Assuming '%s'",
- section, key, str, default_value ? "true" : "false");
- }
- }
-
- g_free (str);
- return value;
+ return nm_config_parse_boolean (str, default_value);
}
void
diff --git a/src/nm-config.h b/src/nm-config.h
index 0dadf2e4b4..13c4eeca18 100644
--- a/src/nm-config.h
+++ b/src/nm-config.h
@@ -95,16 +95,18 @@ NMConfig *nm_config_new (const NMConfigCmdLineOptions *cli, GError **error);
NMConfig *nm_config_setup (const NMConfigCmdLineOptions *cli, GError **error);
void nm_config_reload (NMConfig *config, int signal);
+gint nm_config_parse_boolean (const char *str, gint default_value);
+
GKeyFile *nm_config_create_keyfile (void);
-gboolean nm_config_keyfile_get_boolean (GKeyFile *keyfile,
- const char *section,
+gint nm_config_keyfile_get_boolean (GKeyFile *keyfile,
+ const char *section,
+ const char *key,
+ gint default_value);
+void nm_config_keyfile_set_string_list (GKeyFile *keyfile,
+ const char *group,
const char *key,
- gboolean default_value);
-void nm_config_keyfile_set_string_list (GKeyFile *keyfile,
- const char *group,
- const char *key,
- const char *const* strv,
- gssize len);
+ const char *const* strv,
+ gssize len);
GSList *nm_config_get_device_match_spec (const GKeyFile *keyfile, const char *group, const char *key);
G_END_DECLS