version 1.15, 2005/07/25 12:05:43 |
version 1.16, 2005/07/26 20:58:44 |
|
|
}; |
}; |
|
|
|
|
|
#define SIZE_LEFT(b) (b->cb_size - (size_t)(b->cb_cur - b->cb_buf) \ |
|
- b->cb_len) |
|
|
#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); |
|
|
|
|
|
|
} |
} |
|
|
for (bp = buf->cb_cur; ; bp += (size_t)ret) { |
for (bp = buf->cb_cur; ; bp += (size_t)ret) { |
len = MIN(SIZE_LEFT(buf), 4096); |
len = SIZE_LEFT(buf); |
ret = read(fd, bp, len); |
ret = read(fd, bp, len); |
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 |
void |
cvs_buf_empty(BUF *b) |
cvs_buf_empty(BUF *b) |
{ |
{ |
|
memset(b->cb_buf, 0, b->cb_size); |
b->cb_cur = b->cb_buf; |
b->cb_cur = b->cb_buf; |
b->cb_len = 0; |
b->cb_len = 0; |
} |
} |
|
|
return (-1); |
return (-1); |
|
|
rc = MIN(len, (b->cb_len - off)); |
rc = MIN(len, (b->cb_len - off)); |
memcpy(dst, b->cb_buf, rc); |
memcpy(dst, b->cb_buf + off, rc); |
|
|
return (ssize_t)rc; |
return (ssize_t)rc; |
} |
} |
|
|
/* |
/* |
* cvs_buf_set() |
* cvs_buf_set() |
* |
* |
* Set the contents of the buffer <b> to the first <len> bytes of data found |
* Set the contents of the buffer <b> at offset <off> to the first <len> |
* at <src>. If the buffer was not created with BUF_AUTOEXT, as many bytes |
* bytes of data found at <src>. If the buffer was not created with |
* as possible will be copied in the buffer. |
* BUF_AUTOEXT, as many bytes as possible will be copied in the buffer. |
*/ |
*/ |
int |
ssize_t |
cvs_buf_set(BUF *b, const void *src, size_t len, size_t off) |
cvs_buf_set(BUF *b, const void *src, size_t len, size_t off) |
{ |
{ |
size_t rlen; |
size_t rlen; |
|
|
b->cb_len = rlen; |
b->cb_len = rlen; |
} |
} |
|
|
return (int)rlen; |
return (rlen); |
} |
} |
|
|
|
|
|
|
|
|
|
|
/* |
/* |
* cvs_buf_size() |
* cvs_buf_len() |
* |
* |
* Returns the size of the buffer that is being used. |
* Returns the size of the buffer that is being used. |
*/ |
*/ |
size_t |
size_t |
cvs_buf_size(BUF *b) |
cvs_buf_len(BUF *b) |
{ |
{ |
return (b->cb_len); |
return (b->cb_len); |
} |
} |
|
|
bp = b->cb_cur; |
bp = b->cb_cur; |
|
|
do { |
do { |
ret = write(fd, bp, MIN(len, 8192)); |
ret = write(fd, bp, len); |
if (ret == -1) { |
if (ret == -1) { |
if (errno == EINTR || errno == EAGAIN) |
if (errno == EINTR || errno == EAGAIN) |
continue; |
continue; |