shithub: scc

ref: d69b942c0f484c8677cf8b8b2acfe8b190d6fc5f
dir: /src/libc/stdio/vsnprintf.c/

View raw version
#include <stdarg.h>
#include <stdio.h>

#undef vsnprintf

int
vsnprintf(char *restrict s, size_t siz, const char *restrict fmt, va_list ap)
{
	FILE f;
	int r;

	f.flags = _IORW | _IOSTRG;
	f.len = siz;
	f.buf = s;
	f.wp = s;
	f.rp = s + siz;

	r = vfprintf(&f, fmt, ap);
	if (s) {
		if (f.wp == f.rp)
			--f.wp;
		if (siz != 0)
			*f.wp = '\0';
	}

	return r;
}