diff --git a/photon/libc/stdio/vsnprintf.c b/photon/libc/stdio/vsnprintf.c index bab175d..efb8af6 100644 --- a/photon/libc/stdio/vsnprintf.c +++ b/photon/libc/stdio/vsnprintf.c @@ -11,8 +11,10 @@ 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; + arg->buf[arg->idx] = ch; } + + arg->idx++; } int vsnprintf(char *buf, size_t sz, const char *restrict format, va_list arg) @@ -25,5 +27,10 @@ int vsnprintf(char *buf, size_t sz, const char *restrict format, va_list arg) bk.out = _out_buf; bk.arg = &bk_arg; - return __xprintf(&bk, format, arg); + __xprintf(&bk, format, arg); + if (!bk_arg.idx) { + return 0; + } + + return bk_arg.idx - 1; }