mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-30 08:30:11 +01:00
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.
(cherry picked from commit 35d2981546)
This commit is contained in:
parent
a771e2ffcf
commit
5eeaf4df91
2 changed files with 46 additions and 29 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue