Annotation of tftpd/src/buf.c, revision 1.1.2.1
1.1.2.1 ! misho 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>