File:  [ELWIX - Embedded LightWeight unIX -] / tftpd / src / buf.c
Revision 1.1.2.1: download - view: text, annotated - select for diffs - revision graph
Mon Feb 24 14:38:47 2014 UTC (10 years, 4 months ago) by misho
Branches: tftp1_1
add buffer write support

#include "global.h"
#include "buf.h"


int
initBuffer(int siz)
{
	ETRACE();

	bf = rpack_create(NULL, 0);
	if (!bf)
		return -1;
	if (rpack_attach(bf, siz) == -1) {
		rpack_destroy(&bf);
		return -1;
	}

	return 0;
}

void
endBuffer()
{
	flushBuffer(cli.fd);
	rpack_detach(bf);
	rpack_destroy(&bf);
}

int
flushBuffer(int fd)
{
	int ret = 0;

	if (!cli.addr.sa.sa_len)
		return 0;

	ret = write(fd, RPACK_BUF(bf), RPACK_OFF(bf));
	if (ret == -1)
		ESYSERR(0);
	else
		RPACK_REWIND(bf);

	EVERBOSE(3, "Flush buffer ret=%d", ret);
	return ret;
}

int
bfwrite(int fd, void *buf, int buflen)
{
	void *m;

	if (!buf)
		return -1;

	/* flush */
	if (RPACK_REMAIN(bf) < buflen)
		flushBuffer(fd);

	m = rpack_rdata(bf, buf, buflen);
	if (!m)
		return -1;

	e_free(m);
	return buflen;
}

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>