Tue, 08 May 2018 12:49:56 +0200
makes sstrcat and sstrnlen scstr_t compatible
src/string.c | file | annotate | diff | comparison | revisions | |
src/ucx/string.h | file | annotate | diff | comparison | revisions |
1.1 --- a/src/string.c Sun Apr 01 09:51:01 2018 +0200 1.2 +++ b/src/string.c Tue May 08 12:49:56 2018 +0200 1.3 @@ -65,13 +65,14 @@ 1.4 } 1.5 1.6 1.7 -size_t sstrnlen(size_t n, sstr_t s, ...) { 1.8 +size_t ucx_strnlen(size_t n, ...) { 1.9 va_list ap; 1.10 - size_t size = s.length; 1.11 - va_start(ap, s); 1.12 + va_start(ap, n); 1.13 + 1.14 + size_t size = 0; 1.15 1.16 - for (size_t i = 1 ; i < n ; i++) { 1.17 - sstr_t str = va_arg(ap, sstr_t); 1.18 + for (size_t i = 0 ; i < n ; i++) { 1.19 + scstr_t str = va_arg(ap, scstr_t); 1.20 if(((size_t)-1) - str.length < size) { 1.21 size = 0; 1.22 break; 1.23 @@ -86,8 +87,7 @@ 1.24 static sstr_t sstrvcat_a( 1.25 UcxAllocator *a, 1.26 size_t count, 1.27 - sstr_t s1, 1.28 - sstr_t s2, 1.29 + scstr_t s1, 1.30 va_list ap) { 1.31 sstr_t str; 1.32 str.ptr = NULL; 1.33 @@ -96,11 +96,13 @@ 1.34 return str; 1.35 } 1.36 1.37 + scstr_t s2 = va_arg (ap, scstr_t); 1.38 + 1.39 if(((size_t)-1) - s1.length < s2.length) { 1.40 return str; 1.41 } 1.42 1.43 - sstr_t *strings = (sstr_t*) calloc(count, sizeof(sstr_t)); 1.44 + scstr_t *strings = (scstr_t*) calloc(count, sizeof(scstr_t)); 1.45 if(!strings) { 1.46 return str; 1.47 } 1.48 @@ -111,7 +113,7 @@ 1.49 size_t slen = s1.length + s2.length; 1.50 int error = 0; 1.51 for (size_t i=2;i<count;i++) { 1.52 - sstr_t s = va_arg (ap, sstr_t); 1.53 + scstr_t s = va_arg (ap, scstr_t); 1.54 strings[i] = s; 1.55 if(((size_t)-1) - s.length < slen) { 1.56 error = 1; 1.57 @@ -136,7 +138,7 @@ 1.58 // concatenate strings 1.59 size_t pos = 0; 1.60 for (size_t i=0;i<count;i++) { 1.61 - sstr_t s = strings[i]; 1.62 + scstr_t s = strings[i]; 1.63 memcpy(str.ptr + pos, s.ptr, s.length); 1.64 pos += s.length; 1.65 } 1.66 @@ -148,18 +150,18 @@ 1.67 return str; 1.68 } 1.69 1.70 -sstr_t sstrcat(size_t count, sstr_t s1, sstr_t s2, ...) { 1.71 +sstr_t ucx_strcat(size_t count, scstr_t s1, ...) { 1.72 va_list ap; 1.73 - va_start(ap, s2); 1.74 - sstr_t s = sstrvcat_a(ucx_default_allocator(), count, s1, s2, ap); 1.75 + va_start(ap, s1); 1.76 + sstr_t s = sstrvcat_a(ucx_default_allocator(), count, s1, ap); 1.77 va_end(ap); 1.78 return s; 1.79 } 1.80 1.81 -sstr_t sstrcat_a(UcxAllocator *a, size_t count, sstr_t s1, sstr_t s2, ...) { 1.82 +sstr_t ucx_strcat_a(UcxAllocator *a, size_t count, scstr_t s1, ...) { 1.83 va_list ap; 1.84 - va_start(ap, s2); 1.85 - sstr_t s = sstrvcat_a(a, count, s1, s2, ap); 1.86 + va_start(ap, s1); 1.87 + sstr_t s = sstrvcat_a(a, count, s1, ap); 1.88 va_end(ap); 1.89 return s; 1.90 }
2.1 --- a/src/ucx/string.h Sun Apr 01 09:51:01 2018 +0200 2.2 +++ b/src/ucx/string.h Tue May 08 12:49:56 2018 +0200 2.3 @@ -76,6 +76,7 @@ 2.4 const char *ptr; 2.5 size_t length; 2.6 } scstr_t; 2.7 + 2.8 #ifdef __cplusplus 2.9 } 2.10 #endif 2.11 @@ -168,7 +169,9 @@ 2.12 * @param ... all other strings 2.13 * @return the cumulated length of all strings 2.14 */ 2.15 -size_t sstrnlen(size_t count, sstr_t string, ...); 2.16 +size_t ucx_strnlen(size_t count, ...); 2.17 + 2.18 +#define sstrnlen(count, ...) ucx_strnlen(count, __VA_ARGS__) 2.19 2.20 /** 2.21 * Concatenates two or more strings. 2.22 @@ -185,7 +188,9 @@ 2.23 * @param ... all remaining strings 2.24 * @return the concatenated string 2.25 */ 2.26 -sstr_t sstrcat(size_t count, sstr_t s1, sstr_t s2, ...); 2.27 +sstr_t ucx_strcat(size_t count, scstr_t s1, ...); 2.28 + 2.29 +#define sstrcat(count, s1, ...) ucx_strcat(count, SCSTR(s1), __VA_ARGS__) 2.30 2.31 /** 2.32 * Concatenates two or more strings using a UcxAllocator. 2.33 @@ -199,8 +204,9 @@ 2.34 * @param ... all remaining strings 2.35 * @return the concatenated string 2.36 */ 2.37 -sstr_t sstrcat_a(UcxAllocator *a, size_t count, sstr_t s1, sstr_t s2, ...); 2.38 +sstr_t ucx_strcat_a(UcxAllocator *a, size_t count, scstr_t s1, ...); 2.39 2.40 +#define sstrcat_a(count, s1, ...) ucx_strcat_a(count, SCSTR(s1), __VA_ARGS__) 2.41 2.42 /** 2.43 * Returns a substring starting at the specified location.