diff options
Diffstat (limited to 'src/nm-config-data.c')
-rw-r--r-- | src/nm-config-data.c | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/src/nm-config-data.c b/src/nm-config-data.c index 77368b4dad..5655c8fd0e 100644 --- a/src/nm-config-data.c +++ b/src/nm-config-data.c @@ -1623,23 +1623,28 @@ set_property (GObject *object, case PROP_NO_AUTO_DEFAULT: /* construct-only */ { - const char *const*value_arr = g_value_get_boxed (value); - gsize i, j = 0; + const char *const*value_arr_orig = g_value_get_boxed (value); + gs_free const char **value_arr = NULL; + GSList *specs = NULL; + gsize i, j; gsize len; - len = NM_PTRARRAY_LEN (value_arr); + len = NM_PTRARRAY_LEN (value_arr_orig); - priv->no_auto_default.arr = g_new (char *, len + 1); - priv->no_auto_default.specs = NULL; + /* sort entries, remove duplicates and empty words. */ + value_arr = len == 0 + ? NULL + : nm_memdup (value_arr_orig, sizeof (const char *) * (len + 1)); + nm_utils_strv_sort (value_arr, len); + _nm_utils_strv_cleanup ((char **) value_arr, FALSE, TRUE, TRUE); + len = NM_PTRARRAY_LEN (value_arr); + j = 0; for (i = 0; i < len; i++) { const char *s = value_arr[i]; gboolean is_mac; char *spec; - if (!s[0]) - continue; - if (NM_STR_HAS_PREFIX (s, NM_MATCH_SPEC_INTERFACE_NAME_TAG"=")) is_mac = FALSE; else if (nm_utils_hwaddr_valid (s, -1)) @@ -1649,19 +1654,16 @@ set_property (GObject *object, continue; } - if (nm_utils_strv_find_first (priv->no_auto_default.arr, j, s) >= 0) - continue; + value_arr[j++] = s; spec = is_mac ? g_strdup_printf (NM_MATCH_SPEC_MAC_TAG"%s", s) : g_strdup (s); - - priv->no_auto_default.arr[j++] = g_strdup (s); - priv->no_auto_default.specs = g_slist_prepend (priv->no_auto_default.specs, spec); + specs = g_slist_prepend (specs, spec); } - nm_assert (j <= len); - priv->no_auto_default.arr[j++] = NULL; - priv->no_auto_default.specs = g_slist_reverse (priv->no_auto_default.specs); + + priv->no_auto_default.arr = nm_utils_strv_dup (value_arr, j); + priv->no_auto_default.specs = g_slist_reverse (specs); } break; default: |