The branch, master has been updated via da2aae9 s3:utils/smbget set default blocksize via 6412147 s3:utils/smbget add a error message on allocation error via 3e30998 util: Move util_strlist.c into samba-util-core via c1a75ab util: Make util_strlist.c standalone with its own header file via c4c1592 util: Split str_list_make_v3() into separate file from aec07b8 s3:smbd:open: Skip redundant call to file_set_dosmode when creating a new file.
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit da2aae933e3964aafce05c74755244e0f2b4d982 Author: Christian Ambach <a...@samba.org> Date: Thu Feb 4 21:39:47 2016 +0100 s3:utils/smbget set default blocksize this got lost in the recent refactorings and causes problems when smbget attempts to use a zero byte read buffer Signed-off-by: Christian Ambach <a...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> Autobuild-User(master): Volker Lendecke <v...@samba.org> Autobuild-Date(master): Fri Feb 5 12:10:16 CET 2016 on sn-devel-144 commit 64121471f98cfeaf48b701b3b85614a7436d3da9 Author: Christian Ambach <a...@samba.org> Date: Thu Feb 4 21:38:20 2016 +0100 s3:utils/smbget add a error message on allocation error Signed-off-by: Christian Ambach <a...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> commit 3e30998ffbb09a947a2fb884bb56c4a0083a485d Author: Martin Schwenke <mar...@meltin.net> Date: Thu Feb 4 20:03:49 2016 +1100 util: Move util_strlist.c into samba-util-core Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Volker Lendecke <v...@samba.org> commit c1a75ab5a4ad44e35bf2c04e18bf7246eb901e66 Author: Martin Schwenke <mar...@meltin.net> Date: Thu Feb 4 20:00:58 2016 +1100 util: Make util_strlist.c standalone with its own header file Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Volker Lendecke <v...@samba.org> commit c4c15924081086eb4e735ca28e77eecf1ae48b93 Author: Martin Schwenke <mar...@meltin.net> Date: Thu Feb 4 19:42:54 2016 +1100 util: Split str_list_make_v3() into separate file 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 <mar...@meltin.net> Reviewed-by: Volker Lendecke <v...@samba.org> ----------------------------------------------------------------------- Summary of changes: lib/util/samba_util.h | 122 +----------------------------------- lib/util/util_strlist.c | 90 ++------------------------- lib/util/util_strlist.h | 150 +++++++++++++++++++++++++++++++++++++++++++++ lib/util/util_strlist_v3.c | 112 +++++++++++++++++++++++++++++++++ lib/util/wscript_build | 5 +- source3/utils/smbget.c | 4 +- 6 files changed, 275 insertions(+), 208 deletions(-) create mode 100644 lib/util/util_strlist.h create mode 100644 lib/util/util_strlist_v3.c Changeset truncated at 500 lines: diff --git a/lib/util/samba_util.h b/lib/util/samba_util.h index 1f265e8..56cde7b 100644 --- a/lib/util/samba_util.h +++ b/lib/util/samba_util.h @@ -224,15 +224,6 @@ _PUBLIC_ char *rfc1738_escape_unescaped(TALLOC_CTX *mem_ctx, const char *url); _PUBLIC_ char *rfc1738_escape_part(TALLOC_CTX *mem_ctx, const char *url); /** - * Add a string to an array of strings. - * - * num should be a pointer to an integer that holds the current - * number of elements in strings. It will be updated by this function. - */ -_PUBLIC_ bool add_string_to_array(TALLOC_CTX *mem_ctx, - const char *str, const char ***strings, size_t *num); - -/** varient of strcmp() that handles NULL ptrs **/ _PUBLIC_ int strcmp_safe(const char *s1, const char *s2); @@ -326,118 +317,9 @@ _PUBLIC_ char *base64_encode_data_blob(TALLOC_CTX *mem_ctx, DATA_BLOB data); **/ _PUBLIC_ bool strequal(const char *s1, const char *s2); -/* The following definitions come from lib/util/util_strlist.c */ - -/* separators for lists */ -#ifndef LIST_SEP -#define LIST_SEP " \t,\n\r" -#endif - -/** - build an empty (only NULL terminated) list of strings (for expansion with str_list_add() etc) -*/ -_PUBLIC_ char **str_list_make_empty(TALLOC_CTX *mem_ctx); - -/** - place the only element 'entry' into a new, NULL terminated string list -*/ -_PUBLIC_ char **str_list_make_single(TALLOC_CTX *mem_ctx, - const char *entry); - -/** - build a null terminated list of strings from a input string and a - separator list. The separator list must contain characters less than - or equal to 0x2f for this to work correctly on multi-byte strings -*/ -_PUBLIC_ char **str_list_make(TALLOC_CTX *mem_ctx, const char *string, - const char *sep); +#include "util_strlist.h" -/** - * build a null terminated list of strings from an argv-like input string - * Entries are separated by spaces and can be enclosed by quotes. - * Does NOT support escaping - */ -_PUBLIC_ char **str_list_make_shell(TALLOC_CTX *mem_ctx, const char *string, const char *sep); - -/** - * join a list back to one string - */ -_PUBLIC_ char *str_list_join(TALLOC_CTX *mem_ctx, const char **list, char separator); - -/** join a list back to one (shell-like) string; entries - * separated by spaces, using quotes where necessary */ -_PUBLIC_ char *str_list_join_shell(TALLOC_CTX *mem_ctx, const char **list, char sep); - -/** - return the number of elements in a string list -*/ -_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); - -/** - Return true if all the elements of the list match exactly. - */ -_PUBLIC_ bool str_list_equal(const char * const *list1, const char * const *list2); - -/** - add an entry to a string list -*/ -_PUBLIC_ const char **str_list_add(const char **list, const char *s); - -/** - remove an entry from a string list -*/ -_PUBLIC_ void str_list_remove(const char **list, const char *s); - -/** - return true if a string is in a list -*/ -_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_ const char **str_list_append(const char **list1, - const char * const *list2); - -/** - remove duplicate elements from a list -*/ -_PUBLIC_ const char **str_list_unique(const char **list); - -/* - very useful when debugging complex list related code - */ -_PUBLIC_ void str_list_show(const char **list); - - -/** - append one list to another - expanding list1 - this assumes the elements of list2 are const pointers, so we can re-use them -*/ -_PUBLIC_ const char **str_list_append_const(const char **list1, - const char **list2); - -/** - add an entry to a string list - this assumes s will not change -*/ -_PUBLIC_ const char **str_list_add_const(const char **list, const char *s); - -/** - copy a string list - this assumes list will not change -*/ -_PUBLIC_ const char **str_list_copy_const(TALLOC_CTX *mem_ctx, - const char **list); +/* The following definitions come from lib/util/util_strlist_v3.c */ /** * Needed for making an "unconst" list "const" diff --git a/lib/util/util_strlist.c b/lib/util/util_strlist.c index 987fdfb..203a643 100644 --- a/lib/util/util_strlist.c +++ b/lib/util/util_strlist.c @@ -18,9 +18,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "includes.h" -#include "system/locale.h" -#include "lib/util/tsort.h" +#include "replace.h" +#include "debug.h" +#include "tsort.h" + +#include "util_strlist.h" #undef strcasecmp @@ -513,85 +515,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.h b/lib/util/util_strlist.h new file mode 100644 index 0000000..1163034 --- /dev/null +++ b/lib/util/util_strlist.h @@ -0,0 +1,150 @@ +/* + 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/>. +*/ + +#ifndef _SAMBA_UTIL_STRLIST_H +#define _SAMBA_UTIL_STRLIST_H + +#include <talloc.h> + +/* separators for lists */ +#ifndef LIST_SEP +#define LIST_SEP " \t,\n\r" +#endif + +/** + build an empty (only NULL terminated) list of strings (for expansion with str_list_add() etc) +*/ +char **str_list_make_empty(TALLOC_CTX *mem_ctx); + +/** + place the only element 'entry' into a new, NULL terminated string list +*/ +char **str_list_make_single(TALLOC_CTX *mem_ctx, + const char *entry); + +/** + build a null terminated list of strings from a input string and a + separator list. The separator list must contain characters less than + or equal to 0x2f for this to work correctly on multi-byte strings +*/ +char **str_list_make(TALLOC_CTX *mem_ctx, const char *string, + const char *sep); + +/** + * build a null terminated list of strings from an argv-like input string + * Entries are separated by spaces and can be enclosed by quotes. + * Does NOT support escaping + */ +char **str_list_make_shell(TALLOC_CTX *mem_ctx, const char *string, + const char *sep); + +/** + * join a list back to one string + */ +char *str_list_join(TALLOC_CTX *mem_ctx, const char **list, + char separator); + +/** join a list back to one (shell-like) string; entries + * separated by spaces, using quotes where necessary */ +char *str_list_join_shell(TALLOC_CTX *mem_ctx, const char **list, + char sep); + +/** + return the number of elements in a string list +*/ +size_t str_list_length(const char * const *list); + +/** + copy a string list +*/ +char **str_list_copy(TALLOC_CTX *mem_ctx, const char **list); + +/** + Return true if all the elements of the list match exactly. + */ +bool str_list_equal(const char * const *list1, + const char * const *list2); + +/** + add an entry to a string list +*/ +const char **str_list_add(const char **list, const char *s); + +/** + remove an entry from a string list +*/ +void str_list_remove(const char **list, const char *s); + +/** + return true if a string is in a list +*/ +bool str_list_check(const char **list, const char *s); + +/** + return true if a string is in a list, case insensitively +*/ +bool str_list_check_ci(const char **list, const char *s); +/** + append one list to another - expanding list1 +*/ +const char **str_list_append(const char **list1, + const char * const *list2); + +/** + remove duplicate elements from a list +*/ +const char **str_list_unique(const char **list); + +/* + very useful when debugging complex list related code + */ +void str_list_show(const char **list); + + +/** + append one list to another - expanding list1 + this assumes the elements of list2 are const pointers, so we can re-use them +*/ +const char **str_list_append_const(const char **list1, + const char **list2); + +/** + Add a string to an array of strings. + + num should be a pointer to an integer that holds the current + number of elements in strings. It will be updated by this function. + */ +bool add_string_to_array(TALLOC_CTX *mem_ctx, + const char *str, const char ***strings, size_t *num); + +/** + add an entry to a string list + this assumes s will not change +*/ +const char **str_list_add_const(const char **list, const char *s); + +/** + copy a string list + this assumes list will not change +*/ +const char **str_list_copy_const(TALLOC_CTX *mem_ctx, + const char **list); + +#endif /* _SAMBA_UTIL_STRLIST_H */ diff --git a/lib/util/util_strlist_v3.c b/lib/util/util_strlist_v3.c new file mode 100644 index 0000000..e08edd4 --- /dev/null +++ b/lib/util/util_strlist_v3.c @@ -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; + -- Samba Shared Repository