56 |
56 |
57 sstr_t sstrncat (size_t n, sstr_t s, sstr_t c1, ...) { |
57 sstr_t sstrncat (size_t n, sstr_t s, sstr_t c1, ...) { |
58 va_list ap; |
58 va_list ap; |
59 va_start(ap, c1); |
59 va_start(ap, c1); |
60 s.ptr[0] = 0; |
60 s.ptr[0] = 0; |
61 |
61 |
62 s.ptr = strncat (s.ptr, c1.ptr, s.length); |
62 size_t len = s.length; |
|
63 size_t cplen = c1.length > len ? len : c1.length; |
|
64 char *ptr = s.ptr; |
|
65 |
|
66 memcpy(ptr, c1.ptr, cplen); |
|
67 len -= cplen; |
|
68 ptr += cplen; |
63 for (int i=0;i<n-1;i++) { |
69 for (int i=0;i<n-1;i++) { |
64 sstr_t str = va_arg (ap, sstr_t); |
70 sstr_t str = va_arg (ap, sstr_t); |
65 s.ptr = strncat (s.ptr, str.ptr, s.length); |
71 cplen = str.length > len ? len : str.length; |
|
72 if(cplen <= 0) { |
|
73 va_end(ap); |
|
74 return s; |
|
75 } |
|
76 memcpy(ptr, str.ptr, cplen); |
|
77 len -= cplen; |
|
78 ptr += cplen; |
66 } |
79 } |
67 va_end(ap); |
80 va_end(ap); |
68 |
81 |
69 return s; |
82 return s; |
70 } |
83 } |