diff options
author | Eric Wong <normalperson@yhbt.net> | 2008-08-30 17:33:07 -0700 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2008-08-30 17:33:07 -0700 |
commit | a848893d85cd027d831ba0ecae9dacef0a5f0605 (patch) | |
tree | 0090036a5036ab3d7f8dce1cd35477536253e46d /src/ringbuf.c | |
parent | aa2fcfa7574ebdf3e348c051e496797841aa4f1d (diff) | |
download | mpd-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 'src/ringbuf.c')
-rw-r--r-- | src/ringbuf.c | 36 |
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; } |