# HG changeset patch # User Olaf Wintermann # Date 1405338662 -7200 # Node ID 2185f19dcc45b45f0f70550059ddc6952845fd8e # Parent ee25d79a4187b45ee29e2ecb7bce36a00538bcd1 added new sstrcat diff -r ee25d79a4187 -r 2185f19dcc45 test/main.c --- a/test/main.c Mon Jul 14 12:45:48 2014 +0200 +++ b/test/main.c Mon Jul 14 13:51:02 2014 +0200 @@ -121,6 +121,7 @@ ucx_test_register(suite, test_sstr_len); ucx_test_register(suite, test_sstrcmp); ucx_test_register(suite, test_sstrcasecmp); + ucx_test_register(suite, test_sstrcat); ucx_test_register(suite, test_sstrchr_sstrrchr); ucx_test_register(suite, test_sstrsplit); ucx_test_register(suite, test_sstrtrim); diff -r ee25d79a4187 -r 2185f19dcc45 test/string_tests.c --- a/test/string_tests.c Mon Jul 14 12:45:48 2014 +0200 +++ b/test/string_tests.c Mon Jul 14 13:51:02 2014 +0200 @@ -54,6 +54,7 @@ UCX_TEST_END } + UCX_TEST(test_sstrchr_sstrrchr) { sstr_t str = ST("I will find you - and I will kill you"); UCX_TEST_BEGIN @@ -100,6 +101,37 @@ UCX_TEST_END } + +UCX_TEST(test_sstrcat) { + sstr_t s1 = S("12"); + sstr_t s2 = S("34"); + sstr_t s3 = S("56"); + sstr_t sn = { NULL, 0 }; + + UCX_TEST_BEGIN + + sstr_t t1 = sstrcat(2, s1, s2); + UCX_TEST_ASSERT(!sstrcmp(t1, S("1234")), "t1: wrong content"); + free(t1.ptr); + + sstr_t t2 = sstrcat(3, s1, s2, s3); + UCX_TEST_ASSERT(!sstrcmp(t2, S("123456")), "t2: wrong content"); + free(t2.ptr); + + sstr_t t3 = sstrcat(6, s1, sn, s2, sn, s3, sn); + UCX_TEST_ASSERT(!sstrcmp(t3, S("123456")), "t3: wrong content"); + free(t3.ptr); + + sstr_t t4 = sstrcat(2, sn, sn); + UCX_TEST_ASSERT(t4.ptr, "t4.ptr is NULL"); + UCX_TEST_ASSERT(t4.length == 0, "t4 has wrong length"); + free(t4.ptr); + + + UCX_TEST_END + +} + UCX_TEST(test_sstrsplit) { const char *original = "this,is,a,csv,string"; diff -r ee25d79a4187 -r 2185f19dcc45 test/string_tests.h --- a/test/string_tests.h Mon Jul 14 12:45:48 2014 +0200 +++ b/test/string_tests.h Mon Jul 14 13:51:02 2014 +0200 @@ -40,6 +40,7 @@ UCX_TEST(test_sstr_len); UCX_TEST(test_sstrcmp); UCX_TEST(test_sstrcasecmp); +UCX_TEST(test_sstrcat); UCX_TEST(test_sstrchr_sstrrchr); UCX_TEST(test_sstrsplit); UCX_TEST(test_sstrtrim); diff -r ee25d79a4187 -r 2185f19dcc45 ucx/string.c --- a/ucx/string.c Mon Jul 14 12:45:48 2014 +0200 +++ b/ucx/string.c Mon Jul 14 13:51:02 2014 +0200 @@ -61,6 +61,74 @@ return size; } +static sstr_t sstrvcat_a( + UcxAllocator *a, + size_t count, + sstr_t s1, + sstr_t s2, + va_list ap) { + sstr_t str; + str.ptr = NULL; + str.length = 0; + if(count < 2) { + return str; + } + + sstr_t *strings = calloc(count, sizeof(sstr_t)); + if(!strings) { + return str; + } + + // get all args and overall length + strings[0] = s1; + strings[1] = s2; + size_t strlen = s1.length + s2.length; + for (size_t i=2;iAttention: the new string references the same memory area as the