0
|
1 #include <stdarg.h>
|
|
2 #include <stdio.h>
|
|
3 #include "kstring.h"
|
|
4
|
|
5 #ifdef USE_MALLOC_WRAPPERS
|
|
6 # include "malloc_wrap.h"
|
|
7 #endif
|
|
8
|
|
9 int ksprintf(kstring_t *s, const char *fmt, ...)
|
|
10 {
|
|
11 va_list ap;
|
|
12 int l;
|
|
13 va_start(ap, fmt);
|
|
14 l = vsnprintf(s->s + s->l, s->m - s->l, fmt, ap);
|
|
15 va_end(ap);
|
|
16 if (l + 1 > s->m - s->l) {
|
|
17 s->m = s->l + l + 2;
|
|
18 kroundup32(s->m);
|
|
19 s->s = (char*)realloc(s->s, s->m);
|
|
20 va_start(ap, fmt);
|
|
21 l = vsnprintf(s->s + s->l, s->m - s->l, fmt, ap);
|
|
22 }
|
|
23 va_end(ap);
|
|
24 s->l += l;
|
|
25 return l;
|
|
26 }
|
|
27
|
|
28 #ifdef KSTRING_MAIN
|
|
29 #include <stdio.h>
|
|
30 int main()
|
|
31 {
|
|
32 kstring_t *s;
|
|
33 s = (kstring_t*)calloc(1, sizeof(kstring_t));
|
|
34 ksprintf(s, "abcdefg: %d", 100);
|
|
35 printf("%s\n", s->s);
|
|
36 free(s);
|
|
37 return 0;
|
|
38 }
|
|
39 #endif
|