]> xenbits.xensource.com Git - libvirt.git/commitdiff
util: virstring: Remove virStringListAdd and virStringListRemove
authorPeter Krempa <pkrempa@redhat.com>
Fri, 5 Feb 2021 13:26:57 +0000 (14:26 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 11 Feb 2021 16:05:33 +0000 (17:05 +0100)
virStringListAdd hides the fact that a O(n) count of elements is
performed every time it's called which makes it inefficient.

Stop supporting such semantics and remove the helpers. Users have a
choice of using GSList or an array with a counter variable rather than
repeated lookups.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/libvirt_private.syms
src/util/virstring.c
src/util/virstring.h
tests/virstringtest.c

index 55d04f662f13e31373cf4a9b649237a8ea3108b8..451731bb283b736ecf0db77652554d3903796c81 100644 (file)
@@ -3240,14 +3240,12 @@ virStringHasControlChars;
 virStringHasSuffix;
 virStringIsEmpty;
 virStringIsPrintable;
-virStringListAdd;
 virStringListFreeCount;
 virStringListGetFirstWithPrefix;
 virStringListHasString;
 virStringListJoin;
 virStringListLength;
 virStringListMerge;
-virStringListRemove;
 virStringMatch;
 virStringMatchesNameSuffix;
 virStringParsePort;
index 521f2de3f64fd7bf3b4a0bcbb31ba508842872d9..bf861d4847ae7221f603e3b7d666505a0385f290 100644 (file)
@@ -162,67 +162,6 @@ char *virStringListJoin(const char **strings,
 }
 
 
-/**
- * virStringListAdd:
- * @strings: a NULL-terminated array of strings
- * @item: string to add
- *
- * Appends @item into string list @strings. If *@strings is not
- * allocated yet new string list is created.
- *
- * Returns: 0 on success,
- *         -1 otherwise
- */
-int
-virStringListAdd(char ***strings,
-                 const char *item)
-{
-    size_t i = virStringListLength((const char **) *strings);
-
-    if (VIR_EXPAND_N(*strings, i, 2) < 0)
-        return -1;
-
-    (*strings)[i - 2] = g_strdup(item);
-
-    return 0;
-}
-
-
-/**
- * virStringListRemove:
- * @strings: a NULL-terminated array of strings
- * @item: string to remove
- *
- * Remove every occurrence of @item in list of @strings.
- */
-void
-virStringListRemove(char ***strings,
-                    const char *item)
-{
-    size_t r, w = 0;
-
-    if (!strings || !*strings)
-        return;
-
-    for (r = 0; (*strings)[r]; r++) {
-        if (STREQ((*strings)[r], item)) {
-            VIR_FREE((*strings)[r]);
-            continue;
-        }
-        if (r != w)
-            (*strings)[w] = (*strings)[r];
-        w++;
-    }
-
-    if (w == 0) {
-        VIR_FREE(*strings);
-    } else {
-        (*strings)[w] = NULL;
-        ignore_value(VIR_REALLOC_N(*strings, w + 1));
-    }
-}
-
-
 /**
  * virStringListMerge:
  * @dst: a NULL-terminated array of strings to expand
index cfd24f0b74f9705fa505fa8bfce7df560036b7e1..00c669b43bae0161fc0bb0fa39bbb3ea3259d752 100644 (file)
@@ -37,11 +37,6 @@ char *virStringListJoin(const char **strings,
                         const char *delim)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
 
-int virStringListAdd(char ***strings,
-                     const char *item);
-void virStringListRemove(char ***strings,
-                         const char *item);
-
 int virStringListMerge(char ***dst,
                        char ***src);
 
index 73051906918216b5610c4a047848b50d24d0652a..9eabb5b299b6b40a267aac398e28bb1ba06a277c 100644 (file)
@@ -163,74 +163,6 @@ static int testJoin(const void *args)
 }
 
 
-static int testAdd(const void *args)
-{
-    const struct testJoinData *data = args;
-    char **list = NULL;
-    char *got = NULL;
-    int ret = -1;
-    size_t i;
-
-    for (i = 0; data->tokens[i]; i++) {
-        if (virStringListAdd(&list, data->tokens[i]) < 0)
-            goto cleanup;
-    }
-
-    if (!list)
-        list = g_new0(char *, 1);
-
-    if (!(got = virStringListJoin((const char **)list, data->delim))) {
-        VIR_DEBUG("Got no result");
-        goto cleanup;
-    }
-
-    if (STRNEQ(got, data->string)) {
-        fprintf(stderr, "Mismatch '%s' vs '%s'\n", got, data->string);
-        goto cleanup;
-    }
-
-    ret = 0;
- cleanup:
-    g_strfreev(list);
-    VIR_FREE(got);
-    return ret;
-}
-
-
-static int testRemove(const void *args)
-{
-    const struct testSplitData *data = args;
-    char **list = NULL;
-    size_t ntokens;
-    size_t i;
-    int ret = -1;
-
-    if (!(list = virStringSplitCount(data->string, data->delim,
-                                     data->max_tokens, &ntokens))) {
-        VIR_DEBUG("Got no tokens at all");
-        return -1;
-    }
-
-    for (i = 0; data->tokens[i]; i++) {
-        virStringListRemove(&list, data->tokens[i]);
-        if (virStringListHasString((const char **) list, data->tokens[i])) {
-            fprintf(stderr, "Not removed %s", data->tokens[i]);
-            goto cleanup;
-        }
-    }
-
-    if (list && list[0]) {
-        fprintf(stderr, "Not removed all tokens: %s", list[0]);
-        goto cleanup;
-    }
-
-    ret = 0;
- cleanup:
-    g_strfreev(list);
-    return ret;
-}
-
-
 static int
 testStringSortCompare(const void *opaque G_GNUC_UNUSED)
 {
@@ -683,10 +615,6 @@ mymain(void)
             ret = -1; \
         if (virTestRun("Join " #str, testJoin, &joinData) < 0) \
             ret = -1; \
-        if (virTestRun("Add " #str, testAdd, &joinData) < 0) \
-            ret = -1; \
-        if (virTestRun("Remove " #str, testRemove, &splitData) < 0) \
-            ret = -1; \
     } while (0)
 
     VIR_WARNINGS_NO_DECLARATION_AFTER_STATEMENT