diff options
author | Thomas Haller <thaller@redhat.com> | 2019-07-18 15:10:58 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2019-07-25 10:50:40 +0200 |
commit | 38148bb33ae5538a9bc43bf69bee0e88cb19ba44 (patch) | |
tree | ef06c14dcc53360387d1d5fae7dd8b8a6ed47313 | |
parent | 8437cd0895ce6e7af4bf17f7dbf17f09469e2a99 (diff) | |
download | NetworkManager-38148bb33ae5538a9bc43bf69bee0e88cb19ba44.tar.gz |
config: cleanup handling no_auto_default lists
-rw-r--r-- | src/nm-config-data.c | 30 | ||||
-rw-r--r-- | src/nm-config.c | 38 |
2 files changed, 40 insertions, 28 deletions
diff --git a/src/nm-config-data.c b/src/nm-config-data.c index 5c2232757b..9cc1054f6c 100644 --- a/src/nm-config-data.c +++ b/src/nm-config-data.c @@ -1623,20 +1623,30 @@ set_property (GObject *object, case PROP_NO_AUTO_DEFAULT: /* construct-only */ { - char **value_arr = g_value_get_boxed (value); - guint i, j = 0; + const char *const*value_arr = g_value_get_boxed (value); + gsize i, j = 0; + gsize len; - priv->no_auto_default.arr = g_new (char *, g_strv_length (value_arr) + 1); + len = NM_PTRARRAY_LEN (value_arr); + + priv->no_auto_default.arr = g_new (char *, len + 1); priv->no_auto_default.specs = NULL; - for (i = 0; value_arr && value_arr[i]; i++) { - if ( *value_arr[i] - && nm_utils_hwaddr_valid (value_arr[i], -1) - && nm_utils_strv_find_first (value_arr, i, value_arr[i]) < 0) { - priv->no_auto_default.arr[j++] = g_strdup (value_arr[i]); - priv->no_auto_default.specs = g_slist_prepend (priv->no_auto_default.specs, g_strdup_printf (NM_MATCH_SPEC_MAC_TAG"%s", value_arr[i])); - } + for (i = 0; i < len; i++) { + const char *s = value_arr[i]; + + if (!s[0]) + continue; + if (!nm_utils_hwaddr_valid (s, -1)) + continue; + if (nm_utils_strv_find_first (priv->no_auto_default.arr, j, s) >= 0) + continue; + + priv->no_auto_default.arr[j++] = g_strdup (s); + priv->no_auto_default.specs = g_slist_prepend (priv->no_auto_default.specs, + g_strdup_printf (NM_MATCH_SPEC_MAC_TAG"%s", s)); } + nm_assert (j <= len); priv->no_auto_default.arr[j++] = NULL; priv->no_auto_default.specs = g_slist_reverse (priv->no_auto_default.specs); } diff --git a/src/nm-config.c b/src/nm-config.c index 1cb98e3739..bb86a300b9 100644 --- a/src/nm-config.c +++ b/src/nm-config.c @@ -349,30 +349,32 @@ nm_config_get_first_start (NMConfig *config) static char ** no_auto_default_from_file (const char *no_auto_default_file) { - GPtrArray *no_auto_default_new; - char **list; - guint i; - char *data; - - no_auto_default_new = g_ptr_array_new (); + gs_free const char **list = NULL; + gs_free char *data = NULL; + gsize l = 0; + gsize i; if ( no_auto_default_file - && g_file_get_contents (no_auto_default_file, &data, NULL, NULL)) { - list = g_strsplit (data, "\n", -1); + && g_file_get_contents (no_auto_default_file, &data, NULL, NULL)) + list = nm_utils_strsplit_set (data, "\n"); + + if (list) { for (i = 0; list[i]; i++) { - if ( *list[i] - && nm_utils_hwaddr_valid (list[i], -1) - && nm_utils_strv_find_first (list, i, list[i]) < 0) - g_ptr_array_add (no_auto_default_new, list[i]); - else - g_free (list[i]); + const char *s = list[i]; + + if (!s[0]) + continue; + if (!nm_utils_hwaddr_valid (s, -1)) + continue; + + if (nm_utils_strv_find_first ((char **) list, l, s) >= 0) + continue; + + list[l++] = s; } - g_free (list); - g_free (data); } - g_ptr_array_add (no_auto_default_new, NULL); - return (char **) g_ptr_array_free (no_auto_default_new, FALSE); + return nm_utils_strv_dup (list, l); } static gboolean |