예제 #1
0
파일: ioev.c 프로젝트: OpenSMTPD/OpenSMTPD
int
io_write(struct io *io, const void *buf, size_t len)
{
	int r;

	r = iobuf_queue(&io->iobuf, buf, len);

	io_reload(io);

	return r;
}
예제 #2
0
파일: iobuf.c 프로젝트: Drustan/OpenSMTPD
int
iobuf_vfqueue(struct iobuf *io, const char *fmt, va_list ap)
{
	char	*buf;
	int	 len;

	len = vasprintf(&buf, fmt, ap);

	if (len == -1)
		return (-1);

	len = iobuf_queue(io, buf, len);
	free(buf);

	return (len);
}
예제 #3
0
static int
clamav_write(struct clamav *cl, const char *l, int f) {
	size_t len = (f == EOF) ? 0 : strlen(l) + 1;
	uint32_t n = htonl(len);

	if (f && iobuf_queue(&cl->iobuf, &n, sizeof(uint32_t)) != (int)sizeof(uint32_t)) {
		log_warn("warn: write: iobuf_queue");
		return -1;
	}
	if (f != EOF && iobuf_fqueue(&cl->iobuf, "%s\n", l) != (int)len) {
		log_warn("warn: write: iobuf_fqueue");
		return -1;
	}
	if (iobuf_flush(&cl->iobuf, cl->fd) < 0) {
		log_warn("warn: write: iobuf_flush");
		return -1;
	}
	return 0;
}