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

    1: #include "global.h"
    2: #include "buf.h"
    3: 
    4: 
    5: int
    6: initBuffer(int siz)
    7: {
    8: 	ETRACE();
    9: 
   10: 	bf = rpack_create(NULL, 0);
   11: 	if (!bf)
   12: 		return -1;
   13: 	if (rpack_attach(bf, siz) == -1) {
   14: 		rpack_destroy(&bf);
   15: 		return -1;
   16: 	}
   17: 
   18: 	return 0;
   19: }
   20: 
   21: void
   22: endBuffer()
   23: {
   24: 	flushBuffer(cli.fd);
   25: 	rpack_detach(bf);
   26: 	rpack_destroy(&bf);
   27: }
   28: 
   29: int
   30: flushBuffer(int fd)
   31: {
   32: 	int ret = 0;
   33: 
   34: 	if (!cli.addr.sa.sa_len)
   35: 		return 0;
   36: 
   37: 	ret = write(fd, RPACK_BUF(bf), RPACK_OFF(bf));
   38: 	if (ret == -1)
   39: 		ESYSERR(0);
   40: 	else
   41: 		RPACK_REWIND(bf);
   42: 
   43: 	EVERBOSE(3, "Flush buffer ret=%d", ret);
   44: 	return ret;
   45: }
   46: 
   47: int
   48: bfwrite(int fd, void *buf, int buflen)
   49: {
   50: 	void *m;
   51: 
   52: 	if (!buf)
   53: 		return -1;
   54: 
   55: 	/* flush */
   56: 	if (RPACK_REMAIN(bf) < buflen)
   57: 		flushBuffer(fd);
   58: 
   59: 	m = rpack_rdata(bf, buf, buflen);
   60: 	if (!m)
   61: 		return -1;
   62: 
   63: 	e_free(m);
   64: 	return buflen;
   65: }

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