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) { |