| static size_t sn_write(FILE* f, const unsigned char* s, size_t l) { |
| size_t k = f->wend - f->wpos; |
| /* pretend to succeed, but discard extra data */ |
| int vsnprintf(char* restrict s, |
| const char* restrict fmt, |
| FILE f = {.lbf = EOF, .write = sn_write, .lock = -1}; |
| if (n - 1 > INT_MAX - 1) { |
| /* Ensure pointers don't wrap if "infinite" n is passed in */ |
| if (n > (char*)0 + SIZE_MAX - s - 1) |
| n = (char*)0 + SIZE_MAX - s - 1; |
| f.buf = f.wpos = (void*)s; |
| f.wbase = f.wend = (void*)(s + n); |
| r = vfprintf(&f, fmt, ap); |
| /* Null-terminate, overwriting last char if dest buffer is full */ |
| f.wpos[-(f.wpos == f.wend)] = 0; |