since vfprintf will provide a temporary buffer in the case where the
target FILE has a zero buffer size, don't bother setting up a real
buffer for vdprintf. this also allows us to skip the call to fflush
since we know everything will be written out before vfprintf returns.
int vdprintf(int fd, const char *fmt, va_list ap)
{
int vdprintf(int fd, const char *fmt, va_list ap)
{
- int r;
- unsigned char buf[BUFSIZ];
FILE f = {
.fd = fd, .lbf = EOF, .write = wrap_write,
FILE f = {
.fd = fd, .lbf = EOF, .write = wrap_write,
- .buf = buf+UNGET, .buf_size = sizeof buf - UNGET,
+ .buf = (void *)fmt, .buf_size = 0,
- r = vfprintf(&f, fmt, ap);
- return fflush(&f) ? EOF : r;
+ return vfprintf(&f, fmt, ap);