ucx/string.c

changeset 179
ee25d79a4187
parent 177
11ad03783baf
child 180
2185f19dcc45
equal deleted inserted replaced
178:8c89e454000f 179:ee25d79a4187
59 va_end(ap); 59 va_end(ap);
60 60
61 return size; 61 return size;
62 } 62 }
63 63
64 sstr_t sstrncat(sstr_t s, size_t n, sstr_t c1, ...) {
65 va_list ap;
66 va_start(ap, c1);
67 s.ptr[0] = 0;
68
69 size_t len = s.length;
70 size_t cplen = c1.length > len ? len : c1.length;
71 char *ptr = s.ptr;
72
73 memcpy(ptr, c1.ptr, cplen);
74 len -= cplen;
75 ptr += cplen;
76 for (size_t i = 1 ; i < n ; i++) {
77 sstr_t str = va_arg (ap, sstr_t);
78 cplen = str.length > len ? len : str.length;
79 if(cplen <= 0) {
80 va_end(ap);
81 return s;
82 }
83 memcpy(ptr, str.ptr, cplen);
84 len -= cplen;
85 ptr += cplen;
86 }
87 va_end(ap);
88 s.length = ptr - s.ptr;
89
90 return s;
91 }
92
93 sstr_t sstrsubs(sstr_t s, size_t start) { 64 sstr_t sstrsubs(sstr_t s, size_t start) {
94 return sstrsubsl (s, start, s.length-start); 65 return sstrsubsl (s, start, s.length-start);
95 } 66 }
96 67
97 sstr_t sstrsubsl(sstr_t s, size_t start, size_t length) { 68 sstr_t sstrsubsl(sstr_t s, size_t start, size_t length) {

mercurial