From 8e62b03217c78e78eddf3ff8dbd5948dd4831aa6 Mon Sep 17 00:00:00 2001 From: guowenxue <guowenxue@gmail.com> Date: Fri, 23 Aug 2024 10:48:29 +0800 Subject: [PATCH] update build shell script form openlibs --- booster/ringbuf.c | 98 +++++++++++++++++++++++++++++-------------------- 1 files changed, 58 insertions(+), 40 deletions(-) diff --git a/booster/ringbuf.c b/booster/ringbuf.c index 8902a4d..37c76f6 100644 --- a/booster/ringbuf.c +++ b/booster/ringbuf.c @@ -15,17 +15,40 @@ #include <assert.h> #include "ringbuf.h" -void rb_init (struct ring_buffer *ring, unsigned char* buff, int size) +void rb_init(struct ring_buffer *rb, unsigned char *buf, int size) { - memset (ring, 0, sizeof (struct ring_buffer)); - ring->rd_pointer = 0; - ring->wr_pointer = 0; - ring->buffer= buff; - ring->size = size; + memset(rb, 0, sizeof (struct ring_buffer)); + rb->rd_pointer = 0; + rb->wr_pointer = 0; + rb->buffer= buf; + rb->size = size; } +void rb_clear(struct ring_buffer *rb) +{ + memset(rb->buffer, 0, rb->size); + rb->rd_pointer=0; + rb->wr_pointer=0; +} -int rb_write (struct ring_buffer *rb, unsigned char * buf, int len) +int rb_data_size(struct ring_buffer *rb) +{ + return ((rb->wr_pointer - rb->rd_pointer) & (rb->size-1)); +} + +int rb_free_size(struct ring_buffer *rb) +{ + return (rb->size - 1 - rb_data_size(rb)); +} + +unsigned char rb_peek(struct ring_buffer *rb, int index) +{ + assert(index < rb_data_size(rb)); + + return rb->buffer[((rb->rd_pointer + index) % rb->size)]; +} + +int rb_write(struct ring_buffer *rb, unsigned char *buf, int len) { int total; int i; @@ -51,57 +74,52 @@ return total; } - -int rb_free_size (struct ring_buffer *rb) -{ - return (rb->size - 1 - rb_data_size(rb)); -} - - -int rb_read (struct ring_buffer *rb, unsigned char * buf, int max) +int rb_read(struct ring_buffer *rb, unsigned char *buf, int bytes) { int total; int i; - /* total = len = min(used, len) */ total = rb_data_size(rb); - if(max > total) - max = total; - else - total = max; - + if(bytes > total) + bytes = total; i = rb->rd_pointer; - if(i + max > rb->size) + if(i + bytes > rb->size) { memcpy(buf, rb->buffer + i, rb->size - i); buf += rb->size - i; - max -= rb->size - i; + bytes -= rb->size - i; i = 0; } - memcpy(buf, rb->buffer + i, max); - rb->rd_pointer = i + max; + memcpy(buf, rb->buffer + i, bytes); + rb->rd_pointer = i + bytes; return total; } -int rb_data_size (struct ring_buffer *rb) +int rb_copy(struct ring_buffer *rb, unsigned char *buf, int bytes) { - return ((rb->wr_pointer - rb->rd_pointer) & (rb->size-1)); + int total; + int i; + + total = rb_data_size(rb); + + if(bytes > total) + bytes = total; + + i = rb->rd_pointer; + if(i + bytes > rb->size) + { + memcpy(buf, rb->buffer + i, rb->size - i); + buf += rb->size - i; + bytes -= rb->size - i; + i = 0; + } + + memcpy(buf, rb->buffer + i, bytes); + + return total; } -void rb_clear (struct ring_buffer *rb) -{ - memset(rb->buffer,0,rb->size); - rb->rd_pointer=0; - rb->wr_pointer=0; -} - -unsigned char rb_peek(struct ring_buffer* rb, int index) -{ - assert(index < rb_data_size(rb)); - - return rb->buffer[((rb->rd_pointer + index) % rb->size)]; -} -- Gitblit v1.9.1