diff --git a/libs/libc/misc/lib_circbuf.c b/libs/libc/misc/lib_circbuf.c index 3006060003c..faeebc83ef4 100644 --- a/libs/libc/misc/lib_circbuf.c +++ b/libs/libc/misc/lib_circbuf.c @@ -567,20 +567,15 @@ ssize_t circbuf_overwrite(FAR struct circbuf_s *circ, FAR void *circbuf_get_writeptr(FAR struct circbuf_s *circ, FAR size_t *size) { size_t off; - size_t pos; DEBUGASSERT(circ); + *size = circbuf_space(circ); off = circ->head % circ->size; - pos = circ->tail % circ->size; - if (off >= pos) + if (off + *size > circ->size) { *size = circ->size - off; } - else - { - *size = pos - off; - } return (FAR char *)circ->base + off; } @@ -603,22 +598,17 @@ FAR void *circbuf_get_writeptr(FAR struct circbuf_s *circ, FAR size_t *size) FAR void *circbuf_get_readptr(FAR struct circbuf_s *circ, size_t *size) { size_t off; - size_t pos; DEBUGASSERT(circ); - off = circ->head % circ->size; - pos = circ->tail % circ->size; - if (pos > off) + *size = circbuf_used(circ); + off = circ->tail % circ->size; + if (off + *size > circ->size) { - *size = circ->size - pos; - } - else - { - *size = off - pos; + *size = circ->size - off; } - return (FAR char *)circ->base + pos; + return (FAR char *)circ->base + off; } /****************************************************************************