simplify vdprintf implementation greatly based on recent vfprintf changes
authorRich Felker <dalias@aerifal.cx>
Mon, 4 Apr 2011 20:30:39 +0000 (16:30 -0400)
committerRich Felker <dalias@aerifal.cx>
Mon, 4 Apr 2011 20:30:39 +0000 (16:30 -0400)
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.

src/stdio/vdprintf.c

index faf9536a7d529ee488c95d40c82b342b402c2a99..b41a3c74cecfc08c1f1ad9c2cdbfe6d24af321bf 100644 (file)
@@ -7,13 +7,10 @@ static size_t wrap_write(FILE *f, const unsigned char *buf, size_t len)
 
 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,
-               .buf = buf+UNGET, .buf_size = sizeof buf - UNGET,
+               .buf = (void *)fmt, .buf_size = 0,
                .lock = -1
        };
-       r = vfprintf(&f, fmt, ap);
-       return fflush(&f) ? EOF : r;
+       return vfprintf(&f, fmt, ap);
 }