#include #include #include #include "string_stream.h" void ssinit(sstream_t *stream) { stream->data = NULL; stream->length = 0; } void ssfree(sstream_t *stream) { free(stream->data); stream->data = 0; stream->length = 0; } int ssvprintf(sstream_t *stream, const char *format, va_list args) { va_list hold; int len; char *outstr; va_copy(hold, args); len = vsnprintf(NULL, 0, format, args); outstr = malloc(stream->length + len + 1); if (stream->data) { memcpy(outstr, stream->data, stream->length); free(stream->data); } stream->data = outstr; vsprintf(&stream->data[stream->length], format, hold); stream->length += len; return len; } int ssprintf(sstream_t *stream, const char *format, ...) { int out; va_list args; va_start(args, format); out = ssvprintf(stream, format, args); va_end(args); return out; }