diff options
author | Eric Wong <normalperson@yhbt.net> | 2008-06-30 02:42:55 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2008-06-30 02:42:55 +0000 |
commit | 9873e07c5abf787d7805b4266a243e56240354dc (patch) | |
tree | 033498fb06470eb882c97fcedf52dc3f532fbbf8 | |
parent | aa828c1b2576f19a7d0de11a791ecd7f93c206dc (diff) | |
download | mpd-9873e07c5abf787d7805b4266a243e56240354dc.tar.gz mpd-9873e07c5abf787d7805b4266a243e56240354dc.tar.xz mpd-9873e07c5abf787d7805b4266a243e56240354dc.zip |
ringbuf: get_{write,read}_vector returns total bytes in both vec elts
This will eliminate unnecessary calls to ringbuf_{read,write}_space
git-svn-id: https://svn.musicpd.org/mpd/trunk@7389 09075e82-0dd4-0310-85a5-a0d7c8717e4f
-rw-r--r-- | src/ringbuf.c | 7 | ||||
-rw-r--r-- | src/ringbuf.h | 7 |
2 files changed, 9 insertions, 5 deletions
diff --git a/src/ringbuf.c b/src/ringbuf.c index 517a4c216..569a70757 100644 --- a/src/ringbuf.c +++ b/src/ringbuf.c @@ -224,7 +224,7 @@ void ringbuf_write_advance(struct ringbuf * rb, size_t cnt) * the readable data is in one segment the second segment has zero * length. */ -void ringbuf_get_read_vector(const struct ringbuf * rb, struct iovec * vec) +size_t ringbuf_get_read_vector(const struct ringbuf * rb, struct iovec * vec) { size_t free_cnt; size_t cnt2; @@ -247,13 +247,13 @@ void ringbuf_get_read_vector(const struct ringbuf * rb, struct iovec * vec) vec[0].iov_len = rb->size - r; vec[1].iov_base = rb->buf; vec[1].iov_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; } + return vec[0].iov_len + vec[1].iov_len; } /* @@ -262,7 +262,7 @@ void ringbuf_get_read_vector(const struct ringbuf * rb, struct iovec * vec) * the writeable data is in one segment the second segment has zero * length. */ -void ringbuf_get_write_vector(const struct ringbuf * rb, struct iovec * vec) +size_t ringbuf_get_write_vector(const struct ringbuf * rb, struct iovec * vec) { size_t free_cnt; size_t cnt2; @@ -292,5 +292,6 @@ void ringbuf_get_write_vector(const struct ringbuf * rb, struct iovec * vec) vec[0].iov_len = free_cnt; vec[1].iov_len = 0; } + return vec[0].iov_len + vec[1].iov_len; } diff --git a/src/ringbuf.h b/src/ringbuf.h index dc3509363..1465e8fa2 100644 --- a/src/ringbuf.h +++ b/src/ringbuf.h @@ -85,8 +85,9 @@ void ringbuf_free(struct ringbuf * rb); * @param rb a pointer to the ringbuffer structure. * @param vec a pointer to a 2 element array of struct iovec. * + * @return total number of bytes readable into both vec elements */ -void ringbuf_get_read_vector(const struct ringbuf * rb, struct iovec * vec); +size_t ringbuf_get_read_vector(const struct ringbuf * rb, struct iovec * vec); /** * Fill a data structure with a description of the current writable @@ -106,8 +107,10 @@ void ringbuf_get_read_vector(const struct ringbuf * rb, struct iovec * vec); * * @param rb a pointer to the ringbuffer structure. * @param vec a pointer to a 2 element array of struct iovec. + * + * @return total number of bytes writable in both vec elements */ -void ringbuf_get_write_vector(const struct ringbuf * rb, struct iovec * vec); +size_t ringbuf_get_write_vector(const struct ringbuf * rb, struct iovec * vec); /** * Read data from the ringbuffer. |