|
|
| version 1.1, 2014/02/24 14:38:47 | version 1.1.2.1, 2014/02/24 14:38:47 |
|---|---|
| Line 0 | Line 1 |
| #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; | |
| } |