diff --git a/src/nm-config.c b/src/nm-config.c index 3733a43a16..3b92bfb287 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