1#include <stdarg.h>2#include <stdio.h>34#undef vsnprintf56int7vsnprintf(char *restrict buf, size_t siz, const char *restrict fmt, va_list ap)8{9 FILE f;10 int r;11 unsigned char *s = (unsigned char *) buf;1213 f.flags = _IORW | _IOSTRG;14 f.len = siz;15 f.buf = s;16 f.wp = s;17 f.rp = s + siz;1819 r = vfprintf(&f, fmt, ap);20 if (s) {21 if (f.wp == f.rp)22 --f.wp;23 if (siz != 0)24 *f.wp = '\0';25 }2627 return r;28}