Rework util_strlist prototypes to use a bit more and less const
authorAndrew Bartlett <abartlet@samba.org>
Wed, 8 Apr 2009 13:18:13 +0000 (23:18 +1000)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 8 Apr 2009 13:18:13 +0000 (23:18 +1000)
Hopefully this produces less warnings, but it might produce more...

Andrew Bartlett

lib/util/util.h
lib/util/util_strlist.c

index defef127d93e4f162a8d2186a5a4ca6f40cf939b..bb07180872b4a52e5ea443c3e1dc33cd1eabeee8 100644 (file)
@@ -427,7 +427,7 @@ _PUBLIC_ size_t str_list_length(const char * const *list);
 /**
   copy a string list
 */
-_PUBLIC_ char **str_list_copy(TALLOC_CTX *mem_ctx, const char **list);
+_PUBLIC_ char **str_list_copy(TALLOC_CTX *mem_ctx, const char * const *list);
 
 /**
    Return true if all the elements of the list match exactly.
@@ -437,7 +437,12 @@ _PUBLIC_ bool str_list_equal(const char **list1, const char **list2);
 /**
   add an entry to a string list
 */
-_PUBLIC_ const char **str_list_add(const char **list, const char *s);
+_PUBLIC_ char **str_list_add(char **list, const char *s);
+
+/**
+  add an entry to a string list (if not already in there)
+*/
+_PUBLIC_ char **str_list_add_unique(char **list, const char *s);
 
 /**
   remove an entry from a string list
@@ -453,6 +458,10 @@ _PUBLIC_ bool str_list_check(const char **list, const char *s);
   return true if a string is in a list, case insensitively
 */
 _PUBLIC_ bool str_list_check_ci(const char **list, const char *s);
+/**
+  append one list to another - expanding list1
+*/
+_PUBLIC_ char **str_list_append(char **list1, const char * const *list2);
 
 /* The following definitions come from lib/util/util_file.c  */
 
index c53fee8f8231e1e3045901826904a17f8bccd9f2..86956289b446a683a4aeb5ccbb17c2b11ce8ac35 100644 (file)
@@ -198,7 +198,7 @@ _PUBLIC_ size_t str_list_length(const char * const*list)
 /**
   copy a string list
 */
-_PUBLIC_ char **str_list_copy(TALLOC_CTX *mem_ctx, const char **list)
+_PUBLIC_ char **str_list_copy(TALLOC_CTX *mem_ctx, const char * const *list)
 {
        int i;
        char **ret;
@@ -245,13 +245,19 @@ _PUBLIC_ bool str_list_equal(const char **list1, const char **list2)
 
 
 /**
-  add an entry to a string list
+  add an entry to a string list if not already in there
 */
-_PUBLIC_ const char **str_list_add(const char **list, const char *s)
+_PUBLIC_ char **str_list_add_unique(char **list, const char *s)
 {
-       size_t len = str_list_length(list);
+       int i;
+       size_t len;
        const char **ret;
 
+       for (i=0;list[i];i++) {
+               if (strcmp(list[i], s) == 0) return list;
+       }
+
+       len = i;
        ret = talloc_realloc(NULL, list, const char *, len+2);
        if (ret == NULL) return NULL;
 
@@ -263,6 +269,25 @@ _PUBLIC_ const char **str_list_add(const char **list, const char *s)
        return ret;
 }
 
+/**
+  add an entry to a string list
+*/
+_PUBLIC_ char **str_list_add(char **list, const char *s)
+{
+       size_t len = str_list_length(list);
+       char **ret;
+
+       ret = talloc_realloc(NULL, list, char *, len+2);
+       if (ret == NULL) return NULL;
+
+       ret[len] = talloc_strdup(ret, s);
+       if (ret[len] == NULL) return NULL;
+
+       ret[len+1] = NULL;
+
+       return ret;
+}
+
 /**
   remove an entry from a string list
 */
@@ -311,14 +336,14 @@ _PUBLIC_ bool str_list_check_ci(const char **list, const char *s)
 /**
   append one list to another - expanding list1
 */
-_PUBLIC_ const char **str_list_append(const char **list1, const char **list2)
+_PUBLIC_ char **str_list_append(char **list1, const char * const *list2)
 {
        size_t len1 = str_list_length(list1);
        size_t len2 = str_list_length(list2);
-       const char **ret;
+       char **ret;
        int i;
 
-       ret = talloc_realloc(NULL, list1, const char *, len1+len2+1);
+       ret = talloc_realloc(NULL, list1, char *, len1+len2+1);
        if (ret == NULL) return NULL;
 
        for (i=len1;i<len1+len2;i++) {