#include <stdint.h>
#include "kstring.h"
-int ksprintf(kstring_t *s, const char *fmt, ...)
+int kvsprintf(kstring_t *s, const char *fmt, va_list ap)
{
- va_list ap;
+ va_list args;
int l;
- va_start(ap, fmt);
- l = vsnprintf(s->s + s->l, s->m - s->l, fmt, ap); // This line does not work with glibc 2.0. See `man snprintf'.
- va_end(ap);
+ va_copy(args, ap);
+ l = vsnprintf(s->s + s->l, s->m - s->l, fmt, args); // This line does not work with glibc 2.0. See `man snprintf'.
+ va_end(args);
if (l + 1 > s->m - s->l) {
s->m = s->l + l + 2;
kroundup32(s->m);
s->s = (char*)realloc(s->s, s->m);
- va_start(ap, fmt);
- l = vsnprintf(s->s + s->l, s->m - s->l, fmt, ap);
+ va_copy(args, ap);
+ l = vsnprintf(s->s + s->l, s->m - s->l, fmt, args);
+ va_end(args);
}
- va_end(ap);
s->l += l;
return l;
}
+int ksprintf(kstring_t *s, const char *fmt, ...)
+{
+ va_list ap;
+ int l;
+ va_start(ap, fmt);
+ l = kvsprintf(s, fmt, ap);
+ va_end(ap);
+ return l;
+}
+
char *kstrtok(const char *str, const char *sep, ks_tokaux_t *aux)
{
const char *p, *start;
#include <stdlib.h>
#include <string.h>
+#include <stdarg.h>
#include <stdint.h>
#ifndef kroundup32
extern "C" {
#endif
+ int kvsprintf(kstring_t *s, const char *fmt, va_list ap);
int ksprintf(kstring_t *s, const char *fmt, ...);
int ksplit_core(char *s, int delimiter, int *_max, int **_offsets);
char *kstrstr(const char *str, const char *pat, int **_prep);