version 1.7, 2004/12/08 21:11:07 |
version 1.8, 2004/12/08 22:22:38 |
|
|
u_int cb_flags; |
u_int cb_flags; |
|
|
/* buffer handle and size */ |
/* buffer handle and size */ |
void *cb_buf; |
u_char *cb_buf; |
size_t cb_size; |
size_t cb_size; |
|
|
/* start and length of valid data in buffer */ |
/* start and length of valid data in buffer */ |
|
|
|
|
|
|
|
|
#define SIZE_LEFT(b) ((size_t)((u_char *)b->cb_buf - b->cb_cur) + b->cb_size) |
#define SIZE_LEFT(b) ((size_t)(b->cb_buf - b->cb_cur) + b->cb_size) |
|
|
|
|
static ssize_t cvs_buf_grow (BUF *, size_t); |
static ssize_t cvs_buf_grow (BUF *, size_t); |
|
|
|
|
b->cb_flags = flags; |
b->cb_flags = flags; |
b->cb_size = len; |
b->cb_size = len; |
b->cb_cur = (u_char *)b->cb_buf; |
b->cb_cur = b->cb_buf; |
b->cb_len = 0; |
b->cb_len = 0; |
|
|
return (b); |
return (b); |
|
|
int fd; |
int fd; |
ssize_t ret; |
ssize_t ret; |
size_t len; |
size_t len; |
void *bp; |
u_char *bp; |
struct stat st; |
struct stat st; |
BUF *buf; |
BUF *buf; |
|
|
|
|
if (ret == -1) { |
if (ret == -1) { |
cvs_log(LP_ERRNO, "read failed from buffer source"); |
cvs_log(LP_ERRNO, "read failed from buffer source"); |
(void)close(fd); |
(void)close(fd); |
cvs_buf_free(bp); |
cvs_buf_free(buf); |
return (NULL); |
return (NULL); |
} else if (ret == 0) |
} else if (ret == 0) |
break; |
break; |
|
|
void* |
void* |
cvs_buf_release(BUF *b) |
cvs_buf_release(BUF *b) |
{ |
{ |
void *tmp; |
u_char *tmp; |
|
|
tmp = b->cb_buf; |
tmp = b->cb_buf; |
free(b); |
free(b); |
|
|
void |
void |
cvs_buf_empty(BUF *b) |
cvs_buf_empty(BUF *b) |
{ |
{ |
b->cb_cur = (u_char *)b->cb_buf; |
b->cb_cur = b->cb_buf; |
b->cb_len = 0; |
b->cb_len = 0; |
} |
} |
|
|
|
|
cvs_buf_append(BUF *b, const void *data, size_t len) |
cvs_buf_append(BUF *b, const void *data, size_t len) |
{ |
{ |
size_t left, rlen; |
size_t left, rlen; |
void *bp, *bep; |
u_char *bp, *bep; |
|
|
bp = b->cb_cur + b->cb_len; |
bp = b->cb_cur + b->cb_len; |
bep = b->cb_buf + b->cb_size; |
bep = b->cb_buf + b->cb_size; |
|
|
void *tmp; |
void *tmp; |
size_t diff; |
size_t diff; |
|
|
diff = b->cb_cur - (u_char *)b->cb_buf; |
diff = b->cb_cur - b->cb_buf; |
tmp = realloc(b->cb_buf, b->cb_size + len); |
tmp = realloc(b->cb_buf, b->cb_size + len); |
if (tmp == NULL) { |
if (tmp == NULL) { |
cvs_log(LP_ERRNO, "failed to grow buffer"); |
cvs_log(LP_ERRNO, "failed to grow buffer"); |