makes sstrcat and sstrnlen scstr_t compatible constsstr

Tue, 08 May 2018 12:49:56 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Tue, 08 May 2018 12:49:56 +0200
branch
constsstr
changeset 288
6af5798342e8
parent 276
f1b2146d4805
child 300
d1f814633049

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.

mercurial