diff options
author | Thomas Haller <thaller@redhat.com> | 2020-05-07 14:15:28 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2020-05-07 14:15:28 +0200 |
commit | bdac27eb28ba1ad4c7c4e1454d3219182b850743 (patch) | |
tree | c2dff86dd0c6adf5b98ea16a0a161fe07f98a953 | |
parent | 632529736750361577923dd8da2bc0b1266a3980 (diff) | |
parent | 85fa23a6b599a6bbed55d85ac4c61ab9318908ba (diff) | |
download | NetworkManager-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.h | 27 | ||||
-rw-r--r-- | shared/nm-glib-aux/nm-shared-utils.h | 15 | ||||
-rw-r--r-- | shared/nm-keyfile/nm-keyfile-utils.c | 8 | ||||
-rw-r--r-- | shared/nm-keyfile/nm-keyfile-utils.h | 12 | ||||
-rw-r--r-- | shared/nm-keyfile/nm-keyfile.c | 8 | ||||
-rw-r--r-- | src/nm-config-data.c | 19 | ||||
-rw-r--r-- | src/nm-config.c | 135 |
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); |