ucx/string.c

changeset 47
22fb97e9f58a
parent 39
bf8ab7bb74ff
child 67
27e67e725d35
     1.1 --- a/ucx/string.c	Fri Oct 05 10:25:33 2012 +0200
     1.2 +++ b/ucx/string.c	Fri Oct 05 10:38:51 2012 +0200
     1.3 @@ -58,11 +58,24 @@
     1.4      va_list ap;
     1.5      va_start(ap, c1);
     1.6      s.ptr[0] = 0;
     1.7 -
     1.8 -    s.ptr = strncat (s.ptr, c1.ptr, s.length);
     1.9 +    
    1.10 +    size_t len = s.length;
    1.11 +    size_t cplen = c1.length > len ? len : c1.length;
    1.12 +    char   *ptr = s.ptr;
    1.13 +    
    1.14 +    memcpy(ptr, c1.ptr, cplen);
    1.15 +    len -= cplen;
    1.16 +    ptr += cplen;
    1.17      for (int i=0;i<n-1;i++) {
    1.18          sstr_t str = va_arg (ap, sstr_t);
    1.19 -        s.ptr = strncat (s.ptr, str.ptr, s.length);
    1.20 +        cplen = str.length > len ? len : str.length;
    1.21 +        if(cplen <= 0) {
    1.22 +            va_end(ap);
    1.23 +            return s;
    1.24 +        }
    1.25 +        memcpy(ptr, str.ptr, cplen);
    1.26 +        len -= cplen;
    1.27 +        ptr += cplen;
    1.28      }
    1.29      va_end(ap);
    1.30  

mercurial