Files
photon/libc/stdio/vsnprintf.c

37 lines
669 B
C
Raw Permalink Normal View History

2020-04-03 19:21:22 +01:00
#include <stdio.h>
#include "__printf.h"
struct __vsnprintf_arg {
char *buf;
size_t idx;
size_t max;
};
static void _out_buf(struct __printf_backend *bk, char ch)
{
struct __vsnprintf_arg *arg = bk->arg;
if (arg->idx < arg->max) {
arg->buf[arg->idx] = ch;
2020-04-03 19:21:22 +01:00
}
arg->idx++;
2020-04-03 19:21:22 +01:00
}
int vsnprintf(char *buf, size_t sz, const char *restrict format, va_list arg)
{
struct __vsnprintf_arg bk_arg = {};
bk_arg.buf = buf;
bk_arg.max = sz;
struct __printf_backend bk = {};
bk.out = _out_buf;
bk.arg = &bk_arg;
__xprintf(&bk, format, arg);
if (!bk_arg.idx) {
return 0;
}
return bk_arg.idx - 1;
2020-04-03 19:21:22 +01:00
}