diff --git a/sys/include/tsrb.h b/sys/include/tsrb.h index f0d7f698aa64b6331f42e62986c7d751845668a6..0dcc04730f0a4aa5aed8ee5544384f3b4b1508bd 100644 --- a/sys/include/tsrb.h +++ b/sys/include/tsrb.h @@ -127,6 +127,14 @@ int tsrb_get_one(tsrb_t *rb); */ int tsrb_get(tsrb_t *rb, char *dst, size_t n); +/** + * @brief Drop bytes from ringbuffer + * @param[in] rb Ringbuffer to operate on + * @param[in] n max number of bytes to drop + * @return nr of bytes dropped + */ +int tsrb_drop(tsrb_t *rb, size_t n); + /** * @brief Add a byte to ringbuffer * @param[in] rb Ringbuffer to operate on diff --git a/sys/tsrb/tsrb.c b/sys/tsrb/tsrb.c index 334550fa4af682ab01c6aa95f1d69c3269204e24..e85ea52664d6c1a1a47480f2f3547e045895efe7 100644 --- a/sys/tsrb/tsrb.c +++ b/sys/tsrb/tsrb.c @@ -49,6 +49,16 @@ int tsrb_get(tsrb_t *rb, char *dst, size_t n) return (n - tmp); } +int tsrb_drop(tsrb_t *rb, size_t n) +{ + size_t tmp = n; + while (tmp && !tsrb_empty(rb)) { + _pop(rb); + tmp--; + } + return (n - tmp); +} + int tsrb_add_one(tsrb_t *rb, char c) { if (!tsrb_full(rb)) {