mirror of
https://github.com/servalproject/serval-dna.git
synced 2024-12-23 15:02:27 +00:00
Fix rotbuf_advance(), add rotbuf_remain()
This commit is contained in:
parent
ba57855160
commit
74c82648f2
28
rotbuf.h
28
rotbuf.h
@ -109,6 +109,20 @@ __ROTBUF_INLINE size_t rotbuf_position(struct rotbuf *rb)
|
|||||||
return (rb->cursor - rb->buf) + (rb->ebuf - rb->start);
|
return (rb->cursor - rb->buf) + (rb->ebuf - rb->start);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return the total number of bytes remaining to be advanced to reach the end
|
||||||
|
* of the given rotated buffer. If the buffer has overrun, this will be zero.
|
||||||
|
*
|
||||||
|
* @author Andrew Bettison <andrew@servalproject.com>
|
||||||
|
*/
|
||||||
|
__ROTBUF_INLINE size_t rotbuf_remain(struct rotbuf *rb)
|
||||||
|
{
|
||||||
|
if (rb->wrap)
|
||||||
|
return 0;
|
||||||
|
if (rb->cursor < rb->start)
|
||||||
|
return rb->start - rb->cursor;
|
||||||
|
return (rb->ebuf - rb->cursor) + (rb->start - rb->buf);
|
||||||
|
}
|
||||||
|
|
||||||
/* Return the total number of bytes advanced through the given rotated buffer, including any
|
/* Return the total number of bytes advanced through the given rotated buffer, including any
|
||||||
* overrun.
|
* overrun.
|
||||||
*
|
*
|
||||||
@ -132,13 +146,17 @@ __ROTBUF_INLINE void rotbuf_advance(struct rotbuf *rb, size_t len)
|
|||||||
if (rb->wrap)
|
if (rb->wrap)
|
||||||
rb->wrap += len;
|
rb->wrap += len;
|
||||||
else if (len) {
|
else if (len) {
|
||||||
rb->cursor += len;
|
if (rb->cursor >= rb->start) {
|
||||||
if (rb->cursor >= rb->ebuf) {
|
if ((rb->cursor += len) >= rb->ebuf) {
|
||||||
rb->cursor -= rb->buf - rb->ebuf;
|
rb->cursor -= rb->ebuf - rb->buf;
|
||||||
if (rb->cursor >= rb->start) {
|
if (rb->cursor >= rb->start) {
|
||||||
rb->wrap = 1 + rb->cursor - rb->start;
|
rb->wrap = 1 + (rb->cursor - rb->start);
|
||||||
rb->cursor = rb->start;
|
rb->cursor = rb->start;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else if ((rb->cursor += len) >= rb->start) {
|
||||||
|
rb->wrap = 1 + (rb->cursor - rb->start);
|
||||||
|
rb->cursor = rb->start;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user