util: Split str_list_make_v3() into separate file
authorMartin Schwenke <martin@meltin.net>
Thu, 4 Feb 2016 08:42:54 +0000 (19:42 +1100)
committerVolker Lendecke <vl@samba.org>
Fri, 5 Feb 2016 08:00:20 +0000 (09:00 +0100)
str_list_make_v3() calls next_token_talloc(), which has deep
dependencies, so can't be used without dragging in a lot of code.  The
other functions in this file are generally useful and have minimal
dependencies.

So leave the easily reusable code and split out the more difficult
stuff.

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Volker Lendecke <vl@samba.org>
lib/util/util_strlist.c
lib/util/util_strlist_v3.c [new file with mode: 0644]
lib/util/wscript_build

index 987fdfbdd33f105a65e5a248f4e20f7d255d5934..ce1f7d540fbe55ccc20c0713431c6a12e840ea7a 100644 (file)
@@ -513,85 +513,3 @@ _PUBLIC_ const char **str_list_copy_const(TALLOC_CTX *mem_ctx,
        ret[i] = NULL;
        return ret;
 }
-
-/**
- * Needed for making an "unconst" list "const"
- */
-_PUBLIC_ const char **const_str_list(char **list)
-{
-       return discard_const_p(const char *, list);
-}
-
-/**
- * str_list_make, v3 version. The v4 version does not
- * look at quoted strings with embedded blanks, so
- * do NOT merge this function please!
- */
-#define S_LIST_ABS 16 /* List Allocation Block Size */
-
-char **str_list_make_v3(TALLOC_CTX *mem_ctx, const char *string,
-       const char *sep)
-{
-       char **list;
-       const char *str;
-       char *s, *tok;
-       int num, lsize;
-
-       if (!string || !*string)
-               return NULL;
-
-       list = talloc_array(mem_ctx, char *, S_LIST_ABS+1);
-       if (list == NULL) {
-               return NULL;
-       }
-       lsize = S_LIST_ABS;
-
-       s = talloc_strdup(list, string);
-       if (s == NULL) {
-               DEBUG(0,("str_list_make: Unable to allocate memory"));
-               TALLOC_FREE(list);
-               return NULL;
-       }
-       if (!sep) sep = LIST_SEP;
-
-       num = 0;
-       str = s;
-
-       while (next_token_talloc(list, &str, &tok, sep)) {
-
-               if (num == lsize) {
-                       char **tmp;
-
-                       lsize += S_LIST_ABS;
-
-                       tmp = talloc_realloc(mem_ctx, list, char *,
-                                                  lsize + 1);
-                       if (tmp == NULL) {
-                               DEBUG(0,("str_list_make: "
-                                       "Unable to allocate memory"));
-                               TALLOC_FREE(list);
-                               return NULL;
-                       }
-
-                       list = tmp;
-
-                       memset (&list[num], 0,
-                               ((sizeof(char*)) * (S_LIST_ABS +1)));
-               }
-
-               list[num] = tok;
-               num += 1;
-       }
-
-       list[num] = NULL;
-
-       TALLOC_FREE(s);
-       return list;
-}
-
-const char **str_list_make_v3_const(TALLOC_CTX *mem_ctx,
-                                   const char *string,
-                                   const char *sep)
-{
-       return const_str_list(str_list_make_v3(mem_ctx, string, sep));
-}
diff --git a/lib/util/util_strlist_v3.c b/lib/util/util_strlist_v3.c
new file mode 100644 (file)
index 0000000..e08edd4
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+   Unix SMB/CIFS implementation.
+
+   Copyright (C) Andrew Tridgell 2005
+   Copyright (C) Jelmer Vernooij 2005
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "includes.h"
+#include "system/locale.h"
+#include "lib/util/tsort.h"
+
+#undef strcasecmp
+
+/**
+ * @file
+ * @brief String list manipulation v3
+ */
+
+/**
+ * Needed for making an "unconst" list "const"
+ */
+_PUBLIC_ const char **const_str_list(char **list)
+{
+       return discard_const_p(const char *, list);
+}
+
+/**
+ * str_list_make, v3 version. The v4 version does not
+ * look at quoted strings with embedded blanks, so
+ * do NOT merge this function please!
+ */
+#define S_LIST_ABS 16 /* List Allocation Block Size */
+
+char **str_list_make_v3(TALLOC_CTX *mem_ctx, const char *string,
+       const char *sep)
+{
+       char **list;
+       const char *str;
+       char *s, *tok;
+       int num, lsize;
+
+       if (!string || !*string)
+               return NULL;
+
+       list = talloc_array(mem_ctx, char *, S_LIST_ABS+1);
+       if (list == NULL) {
+               return NULL;
+       }
+       lsize = S_LIST_ABS;
+
+       s = talloc_strdup(list, string);
+       if (s == NULL) {
+               DEBUG(0,("str_list_make: Unable to allocate memory"));
+               TALLOC_FREE(list);
+               return NULL;
+       }
+       if (!sep) sep = LIST_SEP;
+
+       num = 0;
+       str = s;
+
+       while (next_token_talloc(list, &str, &tok, sep)) {
+
+               if (num == lsize) {
+                       char **tmp;
+
+                       lsize += S_LIST_ABS;
+
+                       tmp = talloc_realloc(mem_ctx, list, char *,
+                                                  lsize + 1);
+                       if (tmp == NULL) {
+                               DEBUG(0,("str_list_make: "
+                                       "Unable to allocate memory"));
+                               TALLOC_FREE(list);
+                               return NULL;
+                       }
+
+                       list = tmp;
+
+                       memset (&list[num], 0,
+                               ((sizeof(char*)) * (S_LIST_ABS +1)));
+               }
+
+               list[num] = tok;
+               num += 1;
+       }
+
+       list[num] = NULL;
+
+       TALLOC_FREE(s);
+       return list;
+}
+
+const char **str_list_make_v3_const(TALLOC_CTX *mem_ctx,
+                                   const char *string,
+                                   const char *sep)
+{
+       return const_str_list(str_list_make_v3(mem_ctx, string, sep));
+}
index 31e29581e6ac4ae68a562aa871f6314eb785ca77..773b5442f9302dfab811f88073ae8dd2bccc956b 100755 (executable)
@@ -99,7 +99,8 @@ if not bld.env.SAMBA_UTIL_CORE_ONLY:
                     rbtree.c rfc1738.c become_daemon.c system.c select.c getpass.c
                     genrand_util.c fsusage.c
                     params.c util_id.c util_net.c
-                    util_strlist.c util_paths.c idtree_random.c base64.c
+                    util_strlist.c util_strlist_v3.c util_paths.c
+                    idtree_random.c base64.c
                     util_str.c util_str_common.c ms_fnmatch.c
                     server_id.c dprintf.c bitmap.c pidfile.c
                     tevent_debug.c memcache.c''',