patch: added mbuf_shift()

This commit is contained in:
Alfred E. Heggestad 2014-08-29 11:59:29 +00:00
parent db82f644d6
commit f4164ff0fc
2 changed files with 43 additions and 0 deletions

View file

@ -46,6 +46,7 @@ void mbuf_init(struct mbuf *mb);
void mbuf_reset(struct mbuf *mb);
int mbuf_resize(struct mbuf *mb, size_t size);
void mbuf_trim(struct mbuf *mb);
int mbuf_shift(struct mbuf *mb, ssize_t shift);
int mbuf_write_mem(struct mbuf *mb, const uint8_t *buf, size_t size);
int mbuf_write_u8(struct mbuf *mb, uint8_t v);
int mbuf_write_u16(struct mbuf *mb, uint16_t v);

View file

@ -153,6 +153,48 @@ void mbuf_trim(struct mbuf *mb)
}
/**
* Shift mbuf content position
*
* @param mb Memory buffer to shift
* @param shift Shift offset count
*
* @return 0 if success, otherwise errorcode
*/
int mbuf_shift(struct mbuf *mb, ssize_t shift)
{
size_t rsize;
uint8_t *p;
if (!mb)
return EINVAL;
if (((ssize_t)mb->pos + shift) < 0 ||
((ssize_t)mb->end + shift) < 0)
return ERANGE;
rsize = mb->end + shift;
if (rsize > mb->size) {
int err;
err = mbuf_resize(mb, rsize);
if (err)
return err;
}
p = mbuf_buf(mb);
memmove(p + shift, p, mbuf_get_left(mb));
mb->pos += shift;
mb->end += shift;
return 0;
}
/**
* Write a block of memory to a memory buffer
*