summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2020-05-07 14:15:28 +0200
committerThomas Haller <thaller@redhat.com>2020-05-07 14:15:28 +0200
commitbdac27eb28ba1ad4c7c4e1454d3219182b850743 (patch)
treec2dff86dd0c6adf5b98ea16a0a161fe07f98a953
parent632529736750361577923dd8da2bc0b1266a3980 (diff)
parent85fa23a6b599a6bbed55d85ac4c61ab9318908ba (diff)
downloadNetworkManager-bdac27eb28ba1ad4c7c4e1454d3219182b850743.tar.gz
config: merge branch 'th/config-fix-subtract-plugins'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/491
-rw-r--r--shared/nm-glib-aux/nm-macros-internal.h27
-rw-r--r--shared/nm-glib-aux/nm-shared-utils.h15
-rw-r--r--shared/nm-keyfile/nm-keyfile-utils.c8
-rw-r--r--shared/nm-keyfile/nm-keyfile-utils.h12
-rw-r--r--shared/nm-keyfile/nm-keyfile.c8
-rw-r--r--src/nm-config-data.c19
-rw-r--r--src/nm-config.c135
7 files changed, 127 insertions, 97 deletions
diff --git a/shared/nm-glib-aux/nm-macros-internal.h b/shared/nm-glib-aux/nm-macros-internal.h
index d5a8513e54..8c0aa21820 100644
--- a/shared/nm-glib-aux/nm-macros-internal.h
+++ b/shared/nm-glib-aux/nm-macros-internal.h
@@ -929,23 +929,38 @@ nm_streq0 (const char *s1, const char *s2)
#define NM_STR_HAS_PREFIX(str, prefix) \
({ \
- const char *const _str = (str); \
+ const char *const _str_has_prefix = (str); \
+ \
+ nm_assert (strlen (prefix) == NM_STRLEN (prefix)); \
\
- _str && (strncmp ((str), ""prefix"", NM_STRLEN (prefix)) == 0); \
+ _str_has_prefix \
+ && (strncmp (_str_has_prefix, ""prefix"", NM_STRLEN (prefix)) == 0); \
})
#define NM_STR_HAS_SUFFIX(str, suffix) \
({ \
- const char *_str; \
+ const char *const _str_has_suffix = (str); \
gsize _l; \
\
- ( (_str = (str)) \
- && ((_l = strlen (_str)) >= NM_STRLEN (suffix)) \
- && (memcmp (&_str[_l - NM_STRLEN (suffix)], \
+ nm_assert (strlen (suffix) == NM_STRLEN (suffix)); \
+ \
+ ( _str_has_suffix \
+ && ((_l = strlen (_str_has_suffix)) >= NM_STRLEN (suffix)) \
+ && (memcmp (&_str_has_suffix[_l - NM_STRLEN (suffix)], \
""suffix"", \
NM_STRLEN (suffix)) == 0)); \
})
+/* whether @str starts with the string literal @prefix and is followed by
+ * some other text. It is like NM_STR_HAS_PREFIX() && !nm_streq() together. */
+#define NM_STR_HAS_PREFIX_WITH_MORE(str, prefix) \
+ ({ \
+ const char *const _str_has_prefix_with_more = (str); \
+ \
+ NM_STR_HAS_PREFIX (_str_has_prefix_with_more, ""prefix"") \
+ && _str_has_prefix_with_more[NM_STRLEN (prefix)] != '\0'; \
+ })
+
/*****************************************************************************/
static inline GString *
diff --git a/shared/nm-glib-aux/nm-shared-utils.h b/shared/nm-glib-aux/nm-shared-utils.h
index 590059ec4e..fafaefc45d 100644
--- a/shared/nm-glib-aux/nm-shared-utils.h
+++ b/shared/nm-glib-aux/nm-shared-utils.h
@@ -926,6 +926,21 @@ _nm_g_slice_free_fcn_define (32)
/*****************************************************************************/
+/* Like g_error_matches() however:
+ * - as macro it is always inlined.
+ * - the @domain is usually a error quark getter function that cannot
+ * be inlined. This macro calls the getter only if there is an error (lazy).
+ * - accept a list of allowed codes, instead of only one.
+ */
+#define nm_g_error_matches(error, err_domain, ...) \
+ ({ \
+ const GError *const _error = (error); \
+ \
+ _error \
+ && _error->domain == (err_domain) \
+ && NM_IN_SET (_error->code, __VA_ARGS__); \
+ })
+
static inline void
nm_g_set_error_take (GError **error, GError *error_take)
{
diff --git a/shared/nm-keyfile/nm-keyfile-utils.c b/shared/nm-keyfile/nm-keyfile-utils.c
index 45235495a6..0ffce40b96 100644
--- a/shared/nm-keyfile/nm-keyfile-utils.c
+++ b/shared/nm-keyfile/nm-keyfile-utils.c
@@ -117,7 +117,7 @@ nm_keyfile_plugin_kf_get_string_list (GKeyFile *kf,
gsize l;
list = g_key_file_get_string_list (kf, group, key, &l, &local);
- if (g_error_matches (local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) {
+ if (nm_g_error_matches (local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) {
alias = nm_keyfile_plugin_get_alias_for_setting_name (group);
if (alias) {
g_clear_error (&local);
@@ -246,7 +246,7 @@ fcn_name (GKeyFile *kf, \
GError *local = NULL; \
\
val = key_file_get_fcn (kf, group, key, &local); \
- if (g_error_matches (local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) { \
+ if (nm_g_error_matches (local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) { \
alias = nm_keyfile_plugin_get_alias_for_setting_name (group); \
if (alias) { \
g_clear_error (&local); \
@@ -323,7 +323,7 @@ nm_keyfile_plugin_kf_get_keys (GKeyFile *kf,
gsize l;
keys = g_key_file_get_keys (kf, group, &l, &local);
- if (g_error_matches (local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) {
+ if (nm_g_error_matches (local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) {
alias = nm_keyfile_plugin_get_alias_for_setting_name (group);
if (alias) {
g_clear_error (&local);
@@ -351,7 +351,7 @@ nm_keyfile_plugin_kf_has_key (GKeyFile *kf,
GError *local = NULL;
has = g_key_file_has_key (kf, group, key, &local);
- if (g_error_matches (local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) {
+ if (nm_g_error_matches (local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) {
alias = nm_keyfile_plugin_get_alias_for_setting_name (group);
if (alias) {
g_clear_error (&local);
diff --git a/shared/nm-keyfile/nm-keyfile-utils.h b/shared/nm-keyfile/nm-keyfile-utils.h
index 9b35e17ed6..4764311bb0 100644
--- a/shared/nm-keyfile/nm-keyfile-utils.h
+++ b/shared/nm-keyfile/nm-keyfile-utils.h
@@ -10,9 +10,21 @@
#error Cannot use this header.
#endif
+/*****************************************************************************/
+
+#include "nm-glib-aux/nm-shared-utils.h"
+
+/*****************************************************************************/
+
#define NM_KEYFILE_GROUP_VPN_SECRETS "vpn-secrets"
#define NM_KEYFILE_GROUPPREFIX_WIREGUARD_PEER "wireguard-peer."
+#define nm_keyfile_error_is_not_found(error) \
+ nm_g_error_matches (error, \
+ G_KEY_FILE_ERROR, \
+ G_KEY_FILE_ERROR_GROUP_NOT_FOUND, \
+ G_KEY_FILE_ERROR_KEY_NOT_FOUND)
+
const char *nm_keyfile_plugin_get_alias_for_setting_name (const char *setting_name);
const char *nm_keyfile_plugin_get_setting_name_for_alias (const char *alias);
diff --git a/shared/nm-keyfile/nm-keyfile.c b/shared/nm-keyfile/nm-keyfile.c
index c98fbdf2bb..0caef893e0 100644
--- a/shared/nm-keyfile/nm-keyfile.c
+++ b/shared/nm-keyfile/nm-keyfile.c
@@ -1622,9 +1622,7 @@ parity_good:
out_err:
if (!err)
return;
- if ( err->domain == G_KEY_FILE_ERROR
- && NM_IN_SET (err->code, G_KEY_FILE_ERROR_GROUP_NOT_FOUND,
- G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
+ if (nm_keyfile_error_is_not_found (err)) {
/* ignore such errors. The key is not present. */
return;
}
@@ -3154,9 +3152,7 @@ read_one_setting_value (KeyfileReaderInfo *info,
g_return_if_reached ();
if (err) {
- if ( err->domain == G_KEY_FILE_ERROR
- && NM_IN_SET (err->code, G_KEY_FILE_ERROR_GROUP_NOT_FOUND,
- G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
+ if (nm_keyfile_error_is_not_found (err)) {
/* ignore such errors. The key is not present. */
} else {
handle_warn (info, key, NM_KEYFILE_WARN_SEVERITY_WARN,
diff --git a/src/nm-config-data.c b/src/nm-config-data.c
index 29dafa14ed..4169a36ea4 100644
--- a/src/nm-config-data.c
+++ b/src/nm-config-data.c
@@ -12,6 +12,7 @@
#include "devices/nm-device.h"
#include "nm-core-internal.h"
#include "nm-keyfile/nm-keyfile-internal.h"
+#include "nm-keyfile/nm-keyfile-utils.h"
/*****************************************************************************/
@@ -116,14 +117,6 @@ G_DEFINE_TYPE (NMConfigData, nm_config_data, G_TYPE_OBJECT)
/*****************************************************************************/
-#define _HAS_PREFIX(str, prefix) \
- ({ \
- const char *_str = (str); \
- g_str_has_prefix ( _str, ""prefix"") && _str[NM_STRLEN(prefix)] != '\0'; \
- })
-
-/*****************************************************************************/
-
const char *
nm_config_data_get_config_main_file (const NMConfigData *self)
{
@@ -215,6 +208,7 @@ nm_config_data_get_value_int64 (const NMConfigData *self, const char *group, con
char **
nm_config_data_get_plugins (const NMConfigData *self, gboolean allow_default)
{
+ gs_free_error GError *error = NULL;
const NMConfigDataPrivate *priv;
char **list;
@@ -222,8 +216,9 @@ nm_config_data_get_plugins (const NMConfigData *self, gboolean allow_default)
priv = NM_CONFIG_DATA_GET_PRIVATE (self);
- list = g_key_file_get_string_list (priv->keyfile, NM_CONFIG_KEYFILE_GROUP_MAIN, "plugins", NULL, NULL);
- if (!list && allow_default) {
+ list = g_key_file_get_string_list (priv->keyfile, NM_CONFIG_KEYFILE_GROUP_MAIN, "plugins", NULL, &error);
+ if ( nm_keyfile_error_is_not_found (error)
+ && allow_default) {
gs_unref_keyfile GKeyFile *kf = nm_config_create_keyfile ();
/* let keyfile split the default string according to its own escaping rules. */
@@ -550,14 +545,14 @@ _merge_keyfiles (GKeyFile *keyfile_user, GKeyFile *keyfile_intern)
continue;
if ( !is_intern && !is_atomic
- && _HAS_PREFIX (key, NM_CONFIG_KEYFILE_KEYPREFIX_WAS)) {
+ && NM_STR_HAS_PREFIX_WITH_MORE (key, NM_CONFIG_KEYFILE_KEYPREFIX_WAS)) {
const char *key_base = &key[NM_STRLEN (NM_CONFIG_KEYFILE_KEYPREFIX_WAS)];
if (!g_key_file_has_key (keyfile_intern, group, key_base, NULL))
g_key_file_remove_key (keyfile, group, key_base, NULL);
continue;
}
- if (!is_intern && !is_atomic && _HAS_PREFIX (key, NM_CONFIG_KEYFILE_KEYPREFIX_SET))
+ if (!is_intern && !is_atomic && NM_STR_HAS_PREFIX_WITH_MORE (key, NM_CONFIG_KEYFILE_KEYPREFIX_SET))
continue;
value = g_key_file_get_value (keyfile_intern, group, key, NULL);
diff --git a/src/nm-config.c b/src/nm-config.c
index 9a16aa0374..d638059588 100644
--- a/src/nm-config.c
+++ b/src/nm-config.c
@@ -15,6 +15,7 @@
#include "NetworkManagerUtils.h"
#include "nm-core-internal.h"
#include "nm-keyfile/nm-keyfile-internal.h"
+#include "nm-keyfile/nm-keyfile-utils.h"
#define DEFAULT_CONFIG_MAIN_FILE NMCONFDIR "/NetworkManager.conf"
#define DEFAULT_CONFIG_DIR NMCONFDIR "/conf.d"
@@ -144,14 +145,6 @@ static void _set_config_data (NMConfig *self, NMConfigData *new_data, NMConfigCh
/*****************************************************************************/
-#define _HAS_PREFIX(str, prefix) \
- ({ \
- const char *_str = (str); \
- g_str_has_prefix ( _str, ""prefix"") && _str[NM_STRLEN(prefix)] != '\0'; \
- })
-
-/*****************************************************************************/
-
int
nm_config_parse_boolean (const char *str,
int default_value)
@@ -548,7 +541,7 @@ string_to_configure_and_quit (const char *value, GError **error)
if (value == NULL)
return NM_CONFIG_CONFIGURE_AND_QUIT_DISABLED;
- if (strcmp (value, "initrd") == 0)
+ if (nm_streq (value, "initrd"))
return NM_CONFIG_CONFIGURE_AND_QUIT_INITRD;
ret = nm_config_parse_boolean (value, NM_CONFIG_CONFIGURE_AND_QUIT_INVALID);
@@ -664,15 +657,13 @@ ignore_config_snippet (GKeyFile *keyfile, gboolean is_base_config)
static int
_sort_groups_cmp (const char **pa, const char **pb, gpointer dummy)
{
- const char *a, *b;
+ const char *a = *pa;
+ const char *b = *pb;
gboolean a_is_connection, b_is_connection;
gboolean a_is_device, b_is_device;
- a = *pa;
- b = *pb;
-
- a_is_connection = g_str_has_prefix (a, NM_CONFIG_KEYFILE_GROUPPREFIX_CONNECTION);
- b_is_connection = g_str_has_prefix (b, NM_CONFIG_KEYFILE_GROUPPREFIX_CONNECTION);
+ a_is_connection = NM_STR_HAS_PREFIX (a, NM_CONFIG_KEYFILE_GROUPPREFIX_CONNECTION);
+ b_is_connection = NM_STR_HAS_PREFIX (b, NM_CONFIG_KEYFILE_GROUPPREFIX_CONNECTION);
if (a_is_connection != b_is_connection) {
/* one is a [connection*] entry, the other not. We sort [connection*] entries
@@ -689,8 +680,8 @@ _sort_groups_cmp (const char **pa, const char **pb, gpointer dummy)
return pa > pb ? -1 : 1;
}
- a_is_device = g_str_has_prefix (a, NM_CONFIG_KEYFILE_GROUPPREFIX_DEVICE);
- b_is_device = g_str_has_prefix (b, NM_CONFIG_KEYFILE_GROUPPREFIX_DEVICE);
+ a_is_device = NM_STR_HAS_PREFIX (a, NM_CONFIG_KEYFILE_GROUPPREFIX_DEVICE);
+ b_is_device = NM_STR_HAS_PREFIX (b, NM_CONFIG_KEYFILE_GROUPPREFIX_DEVICE);
if (a_is_device != b_is_device) {
/* one is a [device*] entry, the other not. We sort [device*] entries
@@ -726,13 +717,13 @@ _nm_config_sort_groups (char **groups, gsize ngroups)
static gboolean
_setting_is_device_spec (const char *group, const char *key)
{
-#define _IS(group_v, key_v) (strcmp (group, (""group_v)) == 0 && strcmp (key, (""key_v)) == 0)
+#define _IS(group_v, key_v) (nm_streq (group, ""group_v"") && nm_streq (key, ""key_v""))
return _IS (NM_CONFIG_KEYFILE_GROUP_MAIN, NM_CONFIG_KEYFILE_KEY_MAIN_NO_AUTO_DEFAULT)
|| _IS (NM_CONFIG_KEYFILE_GROUP_MAIN, NM_CONFIG_KEYFILE_KEY_MAIN_IGNORE_CARRIER)
|| _IS (NM_CONFIG_KEYFILE_GROUP_MAIN, NM_CONFIG_KEYFILE_KEY_MAIN_ASSUME_IPV6LL_ONLY)
|| _IS (NM_CONFIG_KEYFILE_GROUP_KEYFILE, NM_CONFIG_KEYFILE_KEY_KEYFILE_UNMANAGED_DEVICES)
- || (g_str_has_prefix (group, NM_CONFIG_KEYFILE_GROUPPREFIX_CONNECTION) && !strcmp (key, NM_CONFIG_KEYFILE_KEY_MATCH_DEVICE))
- || (g_str_has_prefix (group, NM_CONFIG_KEYFILE_GROUPPREFIX_DEVICE ) && !strcmp (key, NM_CONFIG_KEYFILE_KEY_MATCH_DEVICE));
+ || (NM_STR_HAS_PREFIX (group, NM_CONFIG_KEYFILE_GROUPPREFIX_CONNECTION) && nm_streq (key, NM_CONFIG_KEYFILE_KEY_MATCH_DEVICE))
+ || (NM_STR_HAS_PREFIX (group, NM_CONFIG_KEYFILE_GROUPPREFIX_DEVICE ) && nm_streq (key, NM_CONFIG_KEYFILE_KEY_MATCH_DEVICE));
}
static gboolean
@@ -741,7 +732,7 @@ _setting_is_string_list (const char *group, const char *key)
return _IS (NM_CONFIG_KEYFILE_GROUP_MAIN, NM_CONFIG_KEYFILE_KEY_MAIN_PLUGINS)
|| _IS (NM_CONFIG_KEYFILE_GROUP_MAIN, NM_CONFIG_KEYFILE_KEY_MAIN_DEBUG)
|| _IS (NM_CONFIG_KEYFILE_GROUP_LOGGING, NM_CONFIG_KEYFILE_KEY_LOGGING_DOMAINS)
- || g_str_has_prefix (group, NM_CONFIG_KEYFILE_GROUPPREFIX_TEST_APPEND_STRINGLIST);
+ || NM_STR_HAS_PREFIX (group, NM_CONFIG_KEYFILE_GROUPPREFIX_TEST_APPEND_STRINGLIST);
#undef _IS
}
@@ -902,15 +893,20 @@ check_config_key (const char *group, const char *key)
}
static gboolean
-read_config (GKeyFile *keyfile, gboolean is_base_config,
- const char *dirname, const char *path,
- GPtrArray *warnings, GError **error)
-{
- GKeyFile *kf;
- char **groups, **keys;
- gsize ngroups, nkeys;
- int g, k;
+read_config (GKeyFile *keyfile,
+ gboolean is_base_config,
+ const char *dirname,
+ const char *path,
+ GPtrArray *warnings,
+ GError **error)
+{
+ gs_unref_keyfile GKeyFile *kf = NULL;
+ gs_strfreev char **groups = NULL;
gs_free char *path_free = NULL;
+ gsize ngroups;
+ gsize nkeys;
+ int g;
+ int k;
g_return_val_if_fail (keyfile, FALSE);
g_return_val_if_fail (path, FALSE);
@@ -931,14 +927,11 @@ read_config (GKeyFile *keyfile, gboolean is_base_config,
kf = nm_config_create_keyfile ();
if (!g_key_file_load_from_file (kf, path, G_KEY_FILE_NONE, error)) {
g_prefix_error (error, "%s: ", path);
- g_key_file_free (kf);
return FALSE;
}
- if (ignore_config_snippet (kf, is_base_config)) {
- g_key_file_free (kf);
+ if (ignore_config_snippet (kf, is_base_config))
return TRUE;
- }
/* the config-group is internal to every configuration snippets. It doesn't make sense
* to merge it into the global configuration, and it doesn't make sense to preserve the
@@ -962,8 +955,9 @@ read_config (GKeyFile *keyfile, gboolean is_base_config,
for (g = 0; groups && groups[g]; g++) {
const char *group = groups[g];
+ gs_strfreev char **keys = NULL;
- if (g_str_has_prefix (group, NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN)) {
+ if (NM_STR_HAS_PREFIX (group, NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN)) {
/* internal groups cannot be set by user configuration. */
continue;
}
@@ -971,21 +965,21 @@ read_config (GKeyFile *keyfile, gboolean is_base_config,
if (!keys)
continue;
for (k = 0; keys[k]; k++) {
+ gs_free char *new_value = NULL;
const char *key;
- char *new_value;
char last_char;
gsize key_len;
key = keys[k];
- g_assert (key && *key);
+ nm_assert (key && *key);
- if ( _HAS_PREFIX (key, NM_CONFIG_KEYFILE_KEYPREFIX_WAS)
- || _HAS_PREFIX (key, NM_CONFIG_KEYFILE_KEYPREFIX_SET)) {
+ if ( NM_STR_HAS_PREFIX_WITH_MORE (key, NM_CONFIG_KEYFILE_KEYPREFIX_WAS)
+ || NM_STR_HAS_PREFIX_WITH_MORE (key, NM_CONFIG_KEYFILE_KEYPREFIX_SET)) {
/* these keys are protected. We ignore them if the user sets them. */
continue;
}
- if (!strcmp (key, NM_CONFIG_KEYFILE_KEY_ATOMIC_SECTION_WAS)) {
+ if (nm_streq (key, NM_CONFIG_KEYFILE_KEY_ATOMIC_SECTION_WAS)) {
/* the "was" key is protected and it cannot be set by user configuration. */
continue;
}
@@ -996,6 +990,7 @@ read_config (GKeyFile *keyfile, gboolean is_base_config,
&& (last_char == '+' || last_char == '-')) {
gs_free char *base_key = g_strndup (key, key_len - 1);
gboolean is_string_list;
+ gboolean old_val_was_set = FALSE;
is_string_list = _setting_is_string_list (group, base_key);
@@ -1007,13 +1002,19 @@ read_config (GKeyFile *keyfile, gboolean is_base_config,
gs_free char **new_val = NULL;
if (is_string_list) {
- old_val = g_key_file_get_string_list (keyfile, group, base_key, NULL, NULL);
+ gs_free_error GError *old_error = NULL;
+
+ old_val = g_key_file_get_string_list (keyfile, group, base_key, NULL, &old_error);
new_val = g_key_file_get_string_list (kf, group, key, NULL, NULL);
- if (!old_val && !g_key_file_has_key (keyfile, group, base_key, NULL)) {
- /* we must fill the unspecified value with the compile-time default. */
- if (nm_streq (group, NM_CONFIG_KEYFILE_GROUP_MAIN) && nm_streq (base_key, "plugins")) {
+ if ( nm_streq (group, NM_CONFIG_KEYFILE_GROUP_MAIN)
+ && nm_streq (base_key, "plugins")) {
+ old_val_was_set = !nm_keyfile_error_is_not_found (old_error);
+ if ( !old_val
+ && !old_val_was_set) {
+ /* we must fill the unspecified value with the compile-time default. */
g_key_file_set_value (keyfile, group, base_key, NM_CONFIG_DEFAULT_MAIN_PLUGINS);
old_val = g_key_file_get_string_list (keyfile, group, base_key, NULL, NULL);
+ old_val_was_set = TRUE;
}
}
} else {
@@ -1059,7 +1060,7 @@ read_config (GKeyFile *keyfile, gboolean is_base_config,
g_key_file_set_value (keyfile, group, base_key, specs_joined);
}
} else {
- if (is_string_list)
+ if (is_string_list && !old_val_was_set)
g_key_file_remove_key (keyfile, group, base_key, NULL);
else
g_key_file_set_value (keyfile, group, base_key, "");
@@ -1079,12 +1080,8 @@ read_config (GKeyFile *keyfile, gboolean is_base_config,
g_strdup_printf ("unknown key '%s' in section [%s] of file '%s'",
key, group, path));
}
- g_free (new_value);
}
- g_strfreev (keys);
}
- g_strfreev (groups);
- g_key_file_free (kf);
return TRUE;
}
@@ -1174,7 +1171,7 @@ _get_config_dir_files (const char *config_dir)
if (direnum) {
while ((info = g_file_enumerator_next_file (direnum, NULL, NULL))) {
name = g_file_info_get_name (info);
- if (g_str_has_suffix (name, ".conf"))
+ if (NM_STR_HAS_SUFFIX (name, ".conf"))
g_ptr_array_add (confs, g_strdup (name));
g_object_unref (info);
}
@@ -1472,14 +1469,14 @@ intern_config_read (const char *filename,
const char *group = groups[g];
gboolean is_intern, is_atomic;
- if (!strcmp (group, NM_CONFIG_KEYFILE_GROUP_CONFIG))
+ if (nm_streq (group, NM_CONFIG_KEYFILE_GROUP_CONFIG))
continue;
keys = g_key_file_get_keys (keyfile, group, NULL, NULL);
if (!keys)
continue;
- is_intern = g_str_has_prefix (group, NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN);
+ is_intern = NM_STR_HAS_PREFIX (group, NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN);
is_atomic = !is_intern && _is_atomic_section (atomic_section_prefixes, group);
if (is_atomic) {
@@ -1489,7 +1486,7 @@ intern_config_read (const char *filename,
conf_section_is = _keyfile_serialize_section (keyfile_conf, group);
conf_section_was = g_key_file_get_string (keyfile, group, NM_CONFIG_KEYFILE_KEY_ATOMIC_SECTION_WAS, NULL);
- if (g_strcmp0 (conf_section_was, conf_section_is) != 0) {
+ if (!nm_streq0 (conf_section_was, conf_section_is)) {
/* the section no longer matches. Skip it entirely. */
needs_rewrite = TRUE;
continue;
@@ -1510,10 +1507,10 @@ intern_config_read (const char *filename,
has_intern = TRUE;
g_key_file_set_value (keyfile_intern, group, key, value_set);
} else if (is_atomic) {
- if (strcmp (key, NM_CONFIG_KEYFILE_KEY_ATOMIC_SECTION_WAS) == 0)
+ if (nm_streq (key, NM_CONFIG_KEYFILE_KEY_ATOMIC_SECTION_WAS))
continue;
g_key_file_set_value (keyfile_intern, group, key, value_set);
- } else if (_HAS_PREFIX (key, NM_CONFIG_KEYFILE_KEYPREFIX_SET)) {
+ } else if (NM_STR_HAS_PREFIX_WITH_MORE (key, NM_CONFIG_KEYFILE_KEYPREFIX_SET)) {
const char *key_base = &key[NM_STRLEN (NM_CONFIG_KEYFILE_KEYPREFIX_SET)];
gs_free char *value_was = NULL;
gs_free char *value_conf = NULL;
@@ -1523,7 +1520,7 @@ intern_config_read (const char *filename,
value_conf = g_key_file_get_value (keyfile_conf, group, key_base, NULL);
value_was = g_key_file_get_value (keyfile, group, key_was, NULL);
- if (g_strcmp0 (value_conf, value_was) != 0) {
+ if (!nm_streq0 (value_conf, value_was)) {
/* if value_was is no longer the same as @value_conf, it means the user
* changed the configuration since the last write. In this case, we
* drop the value. It also means our file is out-of-date, and we should
@@ -1533,7 +1530,7 @@ intern_config_read (const char *filename,
}
has_intern = TRUE;
g_key_file_set_value (keyfile_intern, group, key_base, value_set);
- } else if (_HAS_PREFIX (key, NM_CONFIG_KEYFILE_KEYPREFIX_WAS)) {
+ } else if (NM_STR_HAS_PREFIX_WITH_MORE (key, NM_CONFIG_KEYFILE_KEYPREFIX_WAS)) {
const char *key_base = &key[NM_STRLEN (NM_CONFIG_KEYFILE_KEYPREFIX_WAS)];
gs_free char *key_set = g_strdup_printf (NM_CONFIG_KEYFILE_KEYPREFIX_SET"%s", key_base);
gs_free char *value_was = NULL;
@@ -1548,7 +1545,7 @@ intern_config_read (const char *filename,
value_conf = g_key_file_get_value (keyfile_conf, group, key_base, NULL);
value_was = g_key_file_get_value (keyfile, group, key, NULL);
- if (g_strcmp0 (value_conf, value_was) != 0) {
+ if (!nm_streq0 (value_conf, value_was)) {
/* if value_was is no longer the same as @value_conf, it means the user
* changed the configuration since the last write. In this case, we
* don't overwrite the user-provided value. It also means our file is
@@ -1577,7 +1574,7 @@ out:
if (g_key_file_remove_group (keyfile_intern, NM_CONFIG_KEYFILE_GROUP_INTERN_GLOBAL_DNS, NULL))
needs_rewrite = TRUE;
for (g = 0; groups && groups[g]; g++) {
- if ( g_str_has_prefix (groups[g], NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN_GLOBAL_DNS_DOMAIN)
+ if ( NM_STR_HAS_PREFIX (groups[g], NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN_GLOBAL_DNS_DOMAIN)
&& groups[g][NM_STRLEN (NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN_GLOBAL_DNS_DOMAIN)]) {
g_key_file_remove_group (keyfile_intern, groups[g], NULL);
needs_rewrite = TRUE;
@@ -1602,12 +1599,12 @@ out:
static int
_intern_config_write_sort_fcn (const char **a, const char **b, const char *const*atomic_section_prefixes)
{
- const char *g_a = (a ? *a : NULL);
- const char *g_b = (b ? *b : NULL);
+ const char *g_a = *a;
+ const char *g_b = *b;
gboolean a_is, b_is;
- a_is = g_str_has_prefix (g_a, NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN);
- b_is = g_str_has_prefix (g_b, NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN);
+ a_is = NM_STR_HAS_PREFIX (g_a, NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN);
+ b_is = NM_STR_HAS_PREFIX (g_b, NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN);
if (a_is != b_is) {
if (a_is)
@@ -1668,7 +1665,7 @@ intern_config_write (const char *filename,
if (!keys)
continue;
- is_intern = g_str_has_prefix (group, NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN);
+ is_intern = NM_STR_HAS_PREFIX (group, NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN);
is_atomic = !is_intern && _is_atomic_section (atomic_section_prefixes, group);
if (is_atomic) {
@@ -1707,16 +1704,16 @@ intern_config_write (const char *filename,
else {
gs_free char *value_was = NULL;
- if (_HAS_PREFIX (key, NM_CONFIG_KEYFILE_KEYPREFIX_SET)) {
+ if (NM_STR_HAS_PREFIX_WITH_MORE (key, NM_CONFIG_KEYFILE_KEYPREFIX_SET)) {
/* Setting a key with .set prefix has no meaning, as these keys
* are protected. Just set the value you want to set instead.
* Why did this happen?? */
g_warn_if_reached ();
- } else if (_HAS_PREFIX (key, NM_CONFIG_KEYFILE_KEYPREFIX_WAS)) {
+ } else if (NM_STR_HAS_PREFIX_WITH_MORE (key, NM_CONFIG_KEYFILE_KEYPREFIX_WAS)) {
const char *key_base = &key[NM_STRLEN (NM_CONFIG_KEYFILE_KEYPREFIX_WAS)];
- if ( _HAS_PREFIX (key_base, NM_CONFIG_KEYFILE_KEYPREFIX_SET)
- || _HAS_PREFIX (key_base, NM_CONFIG_KEYFILE_KEYPREFIX_WAS)) {
+ if ( NM_STR_HAS_PREFIX_WITH_MORE (key_base, NM_CONFIG_KEYFILE_KEYPREFIX_SET)
+ || NM_STR_HAS_PREFIX_WITH_MORE (key_base, NM_CONFIG_KEYFILE_KEYPREFIX_WAS)) {
g_warn_if_reached ();
continue;
}
@@ -1735,7 +1732,7 @@ intern_config_write (const char *filename,
} else {
if (keyfile_conf) {
value_was = g_key_file_get_value (keyfile_conf, group, key, NULL);
- if (g_strcmp0 (value_set, value_was) == 0) {
+ if (nm_streq0 (value_set, value_was)) {
/* there is no point in storing the identical value as we have via
* user configuration. Skip it. */
continue;
@@ -1837,7 +1834,7 @@ nm_config_set_global_dns (NMConfig *self, NMGlobalDnsConfig *global_dns, GError
g_key_file_remove_group (keyfile, NM_CONFIG_KEYFILE_GROUP_INTERN_GLOBAL_DNS, NULL);
groups = g_key_file_get_groups (keyfile, NULL);
for (i = 0; groups[i]; i++) {
- if (g_str_has_prefix (groups[i], NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN_GLOBAL_DNS_DOMAIN))
+ if (NM_STR_HAS_PREFIX (groups[i], NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN_GLOBAL_DNS_DOMAIN))
g_key_file_remove_group (keyfile, groups[i], NULL);
}
g_strfreev (groups);