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:
/* 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);
}

View File

@@ -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