summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2019-07-18 15:10:58 +0200
committerThomas Haller <thaller@redhat.com>2019-07-25 10:50:40 +0200
commit38148bb33ae5538a9bc43bf69bee0e88cb19ba44 (patch)
treeef06c14dcc53360387d1d5fae7dd8b8a6ed47313
parent8437cd0895ce6e7af4bf17f7dbf17f09469e2a99 (diff)
downloadNetworkManager-38148bb33ae5538a9bc43bf69bee0e88cb19ba44.tar.gz
config: cleanup handling no_auto_default lists
-rw-r--r--src/nm-config-data.c30
-rw-r--r--src/nm-config.c38
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