Parcourir la source

simplify vdprintf implementation greatly based on recent vfprintf changes

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.
Rich Felker il y a 14 ans
Parent
commit
98c5583ad5
1 fichiers modifiés avec 2 ajouts et 5 suppressions
  1. 2 5
      src/stdio/vdprintf.c

+ 2 - 5
src/stdio/vdprintf.c

@@ -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 vdprintf(int fd, const char *fmt, va_list ap)
 {
 {
-	int r;
-	unsigned char buf[BUFSIZ];
 	FILE f = {
 	FILE f = {
 		.fd = fd, .lbf = EOF, .write = wrap_write,
 		.fd = fd, .lbf = EOF, .write = wrap_write,
-		.buf = buf+UNGET, .buf_size = sizeof buf - UNGET,
+		.buf = (void *)fmt, .buf_size = 0,
 		.lock = -1
 		.lock = -1
 	};
 	};
-	r = vfprintf(&f, fmt, ap);
-	return fflush(&f) ? EOF : r;
+	return vfprintf(&f, fmt, ap);
 }
 }