meta: move photon/libc to root
This commit is contained in:
36
libc/stdio/vsnprintf.c
Normal file
36
libc/stdio/vsnprintf.c
Normal file
@@ -0,0 +1,36 @@
|
||||
#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;
|
||||
}
|
||||
|
||||
arg->idx++;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user