diff options
-rw-r--r-- | rb.h | 9 | ||||
-rw-r--r-- | src/rb.c | 8 |
2 files changed, 15 insertions, 2 deletions
@@ -46,4 +46,13 @@ size_t rb_get(t_rb *rb, void *dest, size_t n); */ size_t rb_peek(const t_rb *ring_buffer, void *dest, size_t size); +/* + * remove a maximum of n bytes from the ring buffer pointed to by rb + * the functions returns the number of bytes actually removed + */ +static inline size_t rb_remove(t_rb *rb, size_t n) +{ + return rb_get(rb, NULL, n); +} + #endif /* RING_BUFFER_H */ @@ -96,7 +96,9 @@ size_t rb_peek(const t_rb *rb, void *dest, size_t n) /* do not try to retrieve too much data */ size = MIN(n, rb_get_size(rb) - rb->off_r); - memcpy(dest, &rb->buffer[rb->off_r], size); + if (dest != NULL) { + memcpy(dest, &rb->buffer[rb->off_r], size); + } dest += size; n -= size; @@ -106,7 +108,9 @@ size_t rb_peek(const t_rb *rb, void *dest, size_t n) size2 = MIN(n, (size_t)(rb->off_w - offset)); - memcpy(dest, &rb->buffer[offset], size2); + if (dest != NULL) { + memcpy(dest, &rb->buffer[offset], size2); + } return size + size2; } |