The branch, master has been updated
       via  7105e171 lib/util: Add tests for strv_addn()
       via  0133ed4 lib/util: Add strv_addn()
       via  049e47b Revert "lib/util: Expose strv_addn() for adding string with 
specified length"
      from  abd8b18 smbd:smb2_creat: remove outdated TODO comments

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 7105e171f0f746da306c9f221e9558cacf8cd02d
Author: Martin Schwenke <mar...@meltin.net>
Date:   Mon Feb 29 20:04:19 2016 +1100

    lib/util: Add tests for strv_addn()
    
    Also some other minor test cleanups.
    
    Signed-off-by: Martin Schwenke <mar...@meltin.net>
    Reviewed-by: Volker Lendecke <v...@samba.org>
    
    Autobuild-User(master): Volker Lendecke <v...@samba.org>
    Autobuild-Date(master): Mon Feb 29 15:18:17 CET 2016 on sn-devel-144

commit 0133ed4c2235264882d1a110d631a71042533a19
Author: Volker Lendecke <v...@samba.org>
Date:   Mon Feb 29 15:15:04 2016 +1100

    lib/util: Add strv_addn()
    
    strv_addn() adds some number of characters from an existing string.
    This is useful for parsing.
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Martin Schwenke <mar...@meltin.net>

commit 049e47b4434c745f650dcf6b599eaf886c95c506
Author: Martin Schwenke <mar...@meltin.net>
Date:   Mon Feb 29 19:49:39 2016 +1100

    Revert "lib/util: Expose strv_addn() for adding string with specified 
length"
    
    This reverts commit 0c61dd15137b4603bd47b3d6ae18ded6bd18ffae.
    
    The intention of strv_addn() is to be able to add some number of
    characters from an existing string.  This implementation carelessly
    assumes that the old _strv_append() added the trailing NUL to form a
    valid strv.  That's not true.
    
    New implementation to follow.
    
    Signed-off-by: Martin Schwenke <mar...@meltin.net>
    Reviewed-by: Volker Lendecke <v...@samba.org>

-----------------------------------------------------------------------

Summary of changes:
 lib/util/strv.c       | 16 +++++++++++++---
 lib/util/strv.h       |  2 +-
 lib/util/tests/strv.c | 36 ++++++++++++++++++++++++++++++++++--
 3 files changed, 48 insertions(+), 6 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/util/strv.c b/lib/util/strv.c
index fab3e56..577cd4d 100644
--- a/lib/util/strv.c
+++ b/lib/util/strv.c
@@ -22,7 +22,8 @@
 #include "talloc.h"
 #include <string.h>
 
-int strv_addn(TALLOC_CTX *mem_ctx, char **dst, const char *src, size_t srclen)
+static int _strv_append(TALLOC_CTX *mem_ctx, char **dst, const char *src,
+                       size_t srclen)
 {
        size_t dstlen = talloc_array_length(*dst);
        size_t newlen = dstlen + srclen;
@@ -44,12 +45,21 @@ int strv_addn(TALLOC_CTX *mem_ctx, char **dst, const char 
*src, size_t srclen)
 
 int strv_add(TALLOC_CTX *mem_ctx, char **strv, const char *string)
 {
-       return strv_addn(mem_ctx, strv, string, strlen(string)+1);
+       return _strv_append(mem_ctx, strv, string, strlen(string)+1);
+}
+
+int strv_addn(TALLOC_CTX *mem_ctx, char **strv, const char *string, size_t n)
+{
+        char t[n+1];
+
+        memcpy(t, string, n);
+        t[n] = '\0';
+        return _strv_append(mem_ctx, strv, t, n+1);
 }
 
 int strv_append(TALLOC_CTX *mem_ctx, char **strv, const char *src)
 {
-       return strv_addn(mem_ctx, strv, src, talloc_array_length(src));
+       return _strv_append(mem_ctx, strv, src, talloc_array_length(src));
 }
 
 static bool strv_valid_entry(const char *strv, const char *entry,
diff --git a/lib/util/strv.h b/lib/util/strv.h
index fb1a806..a3fe7ab 100644
--- a/lib/util/strv.h
+++ b/lib/util/strv.h
@@ -23,7 +23,7 @@
 #include "talloc.h"
 
 int strv_add(TALLOC_CTX *mem_ctx, char **strv, const char *string);
-int strv_addn(TALLOC_CTX *mem_ctx, char **dst, const char *src, size_t srclen);
+int strv_addn(TALLOC_CTX *mem_ctx, char **strv, const char *src, size_t 
srclen);
 int strv_append(TALLOC_CTX *mem_ctx, char **strv, const char *src);
 char *strv_next(char *strv, const char *entry);
 char *strv_find(char *strv, const char *entry);
diff --git a/lib/util/tests/strv.c b/lib/util/tests/strv.c
index 4030c44..c79ed5c 100644
--- a/lib/util/tests/strv.c
+++ b/lib/util/tests/strv.c
@@ -85,11 +85,11 @@ static bool test_strv_single(struct torture_context *tctx)
 
 static bool test_strv_multi(struct torture_context *tctx)
 {
-       const char *data[5] = { "foo", "bar", "", "samba", "x"};
+       const char *data[] = { "foo", "bar", "", "samba", "x"};
        char *strv = NULL;
        char *t;
        int i, ret;
-       const int num = sizeof(data) / sizeof(data[0]);
+       const int num = ARRAY_SIZE(data);
 
        /* Add items */
        for (i = 0; i < num; i++) {
@@ -157,6 +157,37 @@ static bool test_strv_multi(struct torture_context *tctx)
        return true;
 }
 
+/* Similar to above but only add/check first 2 chars of each string */
+static bool test_strv_addn(struct torture_context *tctx)
+{
+       const char *data[] = { "foo", "bar", "samba" };
+       char *strv = NULL;
+       char *t;
+       int i, ret;
+       const int num = ARRAY_SIZE(data);
+
+       /* Add first 2 chars of each item */
+       for (i = 0; i < num; i++) {
+               ret = strv_addn(tctx, &strv, data[i], 2);
+               torture_assert(tctx, ret == 0, "strv_add() failed");
+       }
+
+       torture_assert_int_equal(tctx,
+                                strv_count(strv), num,
+                                "strv_count() failed");
+
+       /* Check that strv_next() finds the expected values */
+       t = NULL;
+       for (i = 0; i < num; i++) {
+               t = strv_next(strv, t);
+               torture_assert(tctx,
+                              strncmp(t, data[i], 2) == 0,
+                              "strv_next() failed");
+       }
+
+       return true;
+}
+
 struct torture_suite *torture_local_util_strv(TALLOC_CTX *mem_ctx)
 {
        struct torture_suite *suite = torture_suite_create(mem_ctx, "strv");
@@ -164,6 +195,7 @@ struct torture_suite *torture_local_util_strv(TALLOC_CTX 
*mem_ctx)
        torture_suite_add_simple_test(suite, "strv_empty",  test_strv_empty);
        torture_suite_add_simple_test(suite, "strv_single", test_strv_single);
        torture_suite_add_simple_test(suite, "strv_multi",  test_strv_multi);
+       torture_suite_add_simple_test(suite, "strv_addn",   test_strv_addn);
 
        return suite;
 }


-- 
Samba Shared Repository

Reply via email to