config: cleanup handling no_auto_default lists

This commit is contained in:
Thomas Haller
2019-07-18 15:10:58 +02:00
parent 8437cd0895
commit 38148bb33a
2 changed files with 40 additions and 28 deletions

View File

@@ -1623,20 +1623,30 @@ set_property (GObject *object,
case PROP_NO_AUTO_DEFAULT: case PROP_NO_AUTO_DEFAULT:
/* construct-only */ /* construct-only */
{ {
char **value_arr = g_value_get_boxed (value); const char *const*value_arr = g_value_get_boxed (value);
guint i, j = 0; 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; priv->no_auto_default.specs = NULL;
for (i = 0; value_arr && value_arr[i]; i++) { for (i = 0; i < len; i++) {
if ( *value_arr[i] const char *s = value_arr[i];
&& nm_utils_hwaddr_valid (value_arr[i], -1)
&& nm_utils_strv_find_first (value_arr, i, value_arr[i]) < 0) { if (!s[0])
priv->no_auto_default.arr[j++] = g_strdup (value_arr[i]); continue;
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])); 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.arr[j++] = NULL;
priv->no_auto_default.specs = g_slist_reverse (priv->no_auto_default.specs); priv->no_auto_default.specs = g_slist_reverse (priv->no_auto_default.specs);
} }

View File

@@ -349,30 +349,32 @@ nm_config_get_first_start (NMConfig *config)
static char ** static char **
no_auto_default_from_file (const char *no_auto_default_file) no_auto_default_from_file (const char *no_auto_default_file)
{ {
GPtrArray *no_auto_default_new; gs_free const char **list = NULL;
char **list; gs_free char *data = NULL;
guint i; gsize l = 0;
char *data; gsize i;
no_auto_default_new = g_ptr_array_new ();
if ( no_auto_default_file if ( no_auto_default_file
&& g_file_get_contents (no_auto_default_file, &data, NULL, NULL)) { && g_file_get_contents (no_auto_default_file, &data, NULL, NULL))
list = g_strsplit (data, "\n", -1); list = nm_utils_strsplit_set (data, "\n");
if (list) {
for (i = 0; list[i]; i++) { for (i = 0; list[i]; i++) {
if ( *list[i] const char *s = list[i];
&& nm_utils_hwaddr_valid (list[i], -1)
&& nm_utils_strv_find_first (list, i, list[i]) < 0) if (!s[0])
g_ptr_array_add (no_auto_default_new, list[i]); continue;
else if (!nm_utils_hwaddr_valid (s, -1))
g_free (list[i]); 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 nm_utils_strv_dup (list, l);
return (char **) g_ptr_array_free (no_auto_default_new, FALSE);
} }
static gboolean static gboolean