summaryrefslogtreecommitdiff
path: root/src/stdio/vdprintf.c
blob: faf9536a7d529ee488c95d40c82b342b402c2a99 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "stdio_impl.h"

static size_t wrap_write(FILE *f, const unsigned char *buf, size_t len)
{
	return __stdio_write(f, buf, 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,
		.lock = -1
	};
	r = vfprintf(&f, fmt, ap);
	return fflush(&f) ? EOF : r;
}