diff options
Diffstat (limited to 'lib/tst_buffers.c')
-rw-r--r-- | lib/tst_buffers.c | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/lib/tst_buffers.c b/lib/tst_buffers.c index b8b597a12..b0bd359eb 100644 --- a/lib/tst_buffers.c +++ b/lib/tst_buffers.c @@ -5,6 +5,7 @@ #include <sys/mman.h> #include <stdlib.h> +#include <stdio.h> #define TST_NO_DEFAULT_MAIN #include "tst_test.h" @@ -76,6 +77,25 @@ void *tst_alloc(size_t size) return ret + map->buf_shift; } +char *tst_aprintf(const char *fmt, ...) +{ + va_list va; + int len; + char *ret; + + va_start(va, fmt); + len = vsnprintf(NULL, 0, fmt, va)+1; + va_end(va); + + ret = tst_alloc(len); + + va_start(va, fmt); + vsprintf(ret, fmt, va); + va_end(va); + + return ret; +} + static int count_iovec(int *sizes) { int ret = 0; @@ -115,15 +135,17 @@ void tst_buffers_alloc(struct tst_buffers bufs[]) for (i = 0; bufs[i].ptr; i++) { if (bufs[i].size) *((void**)bufs[i].ptr) = tst_alloc(bufs[i].size); - else + else if (bufs[i].iov_sizes) *((void**)bufs[i].ptr) = tst_iovec_alloc(bufs[i].iov_sizes); + else + *((void**)bufs[i].ptr) = tst_strdup(bufs[i].str); } } char *tst_strdup(const char *str) { - size_t len = strlen(str); - char *ret = tst_alloc(len + 1); + char *ret = tst_alloc(strlen(str) + 1); + return strcpy(ret, str); } |