Skip to content

Commit 550e420

Browse files
committed
added mbuf_remove_range() to remove data other than at index 0
1 parent b48c798 commit 550e420

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

common/mbuf.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,21 @@ void mbuf_remove(struct mbuf *mb, size_t n) {
137137
}
138138
}
139139

140+
size_t mbuf_remove_range(struct mbuf *mb, size_t i, size_t n) WEAK;
141+
size_t mbuf_remove_range(struct mbuf *mb, size_t i, size_t n) {
142+
size_t ret = 0;
143+
if (n > 0 && n <= (mb->len - i)) {
144+
memmove(&mb->buf[i], &mb->buf[i] + n, mb->len - n);
145+
mb->len -= n;
146+
ret = n;
147+
}
148+
else if (n > 0 && n >= (mb->len - i)) {
149+
ret = mb->len - i;
150+
mb->len -= ret;
151+
}
152+
return ret;
153+
}
154+
140155
void mbuf_clear(struct mbuf *mb) WEAK;
141156
void mbuf_clear(struct mbuf *mb) {
142157
mb->len = 0;

common/mbuf.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ size_t mbuf_insert(struct mbuf *, size_t, const void *, size_t);
8787
/* Removes `data_size` bytes from the beginning of the buffer. */
8888
void mbuf_remove(struct mbuf *, size_t data_size);
8989

90+
/* Removes 'data_size' bytes from index of the buffer */
91+
size_t mbuf_remove_range(struct mbuf *, size_t index, size_t data_size);
92+
9093
/*
9194
* Resizes an Mbuf.
9295
*

0 commit comments

Comments
 (0)