aboutsummaryrefslogtreecommitdiffstats
path: root/src/ringbuf.c
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2008-08-30 17:33:07 -0700
committerEric Wong <normalperson@yhbt.net>2008-08-30 17:33:07 -0700
commita848893d85cd027d831ba0ecae9dacef0a5f0605 (patch)
tree0090036a5036ab3d7f8dce1cd35477536253e46d /src/ringbuf.c
parentaa2fcfa7574ebdf3e348c051e496797841aa4f1d (diff)
downloadmpd-a848893d85cd027d831ba0ecae9dacef0a5f0605.tar.gz
mpd-a848893d85cd027d831ba0ecae9dacef0a5f0605.tar.xz
mpd-a848893d85cd027d831ba0ecae9dacef0a5f0605.zip
ringbuf: create a new struct rbvec instead of reusing struct iovec
Using struct iovec means having to cast iov_base everywhere we want to do pointer arithmetic. Instead, just use rbvec which can be safely casted to iovec whenever we use the readv/writev functions.
Diffstat (limited to '')
-rw-r--r--src/ringbuf.c36
1 files changed, 18 insertions, 18 deletions
diff --git a/src/ringbuf.c b/src/ringbuf.c
index 20a09b326..ec388abf3 100644
--- a/src/ringbuf.c
+++ b/src/ringbuf.c
@@ -236,7 +236,7 @@ void ringbuf_write_advance(struct ringbuf * rb, size_t cnt)
* the readable data is in one segment the second segment has zero
* length.
*/
-size_t ringbuf_get_read_vector(const struct ringbuf * rb, struct iovec * vec)
+size_t ringbuf_get_read_vector(const struct ringbuf * rb, struct rbvec * vec)
{
size_t free_cnt;
size_t cnt2;
@@ -255,17 +255,17 @@ size_t ringbuf_get_read_vector(const struct ringbuf * rb, struct iovec * vec)
* Two part vector: the rest of the buffer after the current
* write ptr, plus some from the start of the buffer.
*/
- vec[0].iov_base = rb->buf + r;
- vec[0].iov_len = rb->size - r;
- vec[1].iov_base = rb->buf;
- vec[1].iov_len = cnt2 & rb->size_mask;
+ vec[0].base = rb->buf + r;
+ vec[0].len = rb->size - r;
+ vec[1].base = rb->buf;
+ vec[1].len = cnt2 & rb->size_mask;
} else {
/* Single part vector: just the rest of the buffer */
- vec[0].iov_base = rb->buf + r;
- vec[0].iov_len = free_cnt;
- vec[1].iov_len = 0;
+ vec[0].base = rb->buf + r;
+ vec[0].len = free_cnt;
+ vec[1].len = 0;
}
- return vec[0].iov_len + vec[1].iov_len;
+ return vec[0].len + vec[1].len;
}
/*
@@ -274,7 +274,7 @@ size_t ringbuf_get_read_vector(const struct ringbuf * rb, struct iovec * vec)
* the writeable data is in one segment the second segment has zero
* length.
*/
-size_t ringbuf_get_write_vector(const struct ringbuf * rb, struct iovec * vec)
+size_t ringbuf_get_write_vector(const struct ringbuf * rb, struct rbvec * vec)
{
size_t free_cnt;
size_t cnt2;
@@ -295,15 +295,15 @@ size_t ringbuf_get_write_vector(const struct ringbuf * rb, struct iovec * vec)
* Two part vector: the rest of the buffer after the current
* write ptr, plus some from the start of the buffer.
*/
- vec[0].iov_base = rb->buf + w;
- vec[0].iov_len = rb->size - w;
- vec[1].iov_base = rb->buf;
- vec[1].iov_len = cnt2 & rb->size_mask;
+ vec[0].base = rb->buf + w;
+ vec[0].len = rb->size - w;
+ vec[1].base = rb->buf;
+ vec[1].len = cnt2 & rb->size_mask;
} else {
- vec[0].iov_base = rb->buf + w;
- vec[0].iov_len = free_cnt;
- vec[1].iov_len = 0;
+ vec[0].base = rb->buf + w;
+ vec[0].len = free_cnt;
+ vec[1].len = 0;
}
- return vec[0].iov_len + vec[1].iov_len;
+ return vec[0].len + vec[1].len;
}