summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTuomas Virtanen <katajakasa@gmail.com>2018-09-30 12:52:32 +0300
committerTuomas Virtanen <katajakasa@gmail.com>2018-09-30 12:52:32 +0300
commit24a1a5914af5949f3eb9b41fef86969ca973acdb (patch)
treece63465d2f44d5b406926b74fd7fe1a4c90c38e6
parent8d70cfd066055d63db11871f4ee5055000b4d8c1 (diff)
DRY some code
-rw-r--r--src/internal/utils/kitringbuffer.c33
1 files changed, 15 insertions, 18 deletions
diff --git a/src/internal/utils/kitringbuffer.c b/src/internal/utils/kitringbuffer.c
index 70fd24f..e6fa136 100644
--- a/src/internal/utils/kitringbuffer.c
+++ b/src/internal/utils/kitringbuffer.c
@@ -68,6 +68,17 @@ int Kit_WriteRingBuffer(Kit_RingBuffer *rb, const char* data, int len) {
return 0;
}
+static void _ReadRingBufferData(const Kit_RingBuffer *rb, char *data, const int len) {
+ int k;
+ if(len + rb->rpos > rb->size) {
+ k = (len + rb->rpos) % rb->size;
+ memcpy(data, rb->data + rb->rpos, len - k);
+ memcpy(data + (len - k), rb->data, k);
+ } else {
+ memcpy(data, rb->data + rb->rpos, len);
+ }
+}
+
/**
* Reads data from ringbuffer. If ringbuffer has less data than was requested,
* only the available data will be read.
@@ -76,17 +87,10 @@ int Kit_WriteRingBuffer(Kit_RingBuffer *rb, const char* data, int len) {
* @param len How much data do we want
* @return Amount of data that was actually read.
*/
-int Kit_ReadRingBuffer(Kit_RingBuffer *rb, char* data, int len) {
- int k;
+int Kit_ReadRingBuffer(Kit_RingBuffer *rb, char *data, int len) {
len = (len > rb->len) ? rb->len : len;
if(rb->len > 0) {
- if(len + rb->rpos > rb->size) {
- k = (len + rb->rpos) % rb->size;
- memcpy(data, (rb->data + rb->rpos), len-k);
- memcpy(data+(len-k), (rb->data), k);
- } else {
- memcpy(data, (rb->data + rb->rpos), len);
- }
+ _ReadRingBufferData(rb, data, len);
rb->len -= len;
rb->rpos += len;
if(rb->rpos >= rb->size) {
@@ -106,17 +110,10 @@ int Kit_ReadRingBuffer(Kit_RingBuffer *rb, char* data, int len) {
* @param len How much data do we need
* @return Amount of data actually read
*/
-int Kit_PeekRingBuffer(const Kit_RingBuffer *rb, char* data, int len) {
- int k;
+int Kit_PeekRingBuffer(const Kit_RingBuffer *rb, char *data, int len) {
len = (len > rb->len) ? rb->len : len;
if(rb->len > 0) {
- if(len + rb->rpos > rb->size) {
- k = (len + rb->rpos) % rb->size;
- memcpy(data, (rb->data + rb->rpos), len-k);
- memcpy(data+(len-k), (rb->data), k);
- } else {
- memcpy(data, (rb->data + rb->rpos), len);
- }
+ _ReadRingBufferData(rb, data, len);
return len;
}
return 0;