patch: added mbuf_shift()
This commit is contained in:
parent
db82f644d6
commit
f4164ff0fc
2 changed files with 43 additions and 0 deletions
|
@ -46,6 +46,7 @@ void mbuf_init(struct mbuf *mb);
|
||||||
void mbuf_reset(struct mbuf *mb);
|
void mbuf_reset(struct mbuf *mb);
|
||||||
int mbuf_resize(struct mbuf *mb, size_t size);
|
int mbuf_resize(struct mbuf *mb, size_t size);
|
||||||
void mbuf_trim(struct mbuf *mb);
|
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_mem(struct mbuf *mb, const uint8_t *buf, size_t size);
|
||||||
int mbuf_write_u8(struct mbuf *mb, uint8_t v);
|
int mbuf_write_u8(struct mbuf *mb, uint8_t v);
|
||||||
int mbuf_write_u16(struct mbuf *mb, uint16_t v);
|
int mbuf_write_u16(struct mbuf *mb, uint16_t v);
|
||||||
|
|
|
@ -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
|
* Write a block of memory to a memory buffer
|
||||||
*
|
*
|
||||||
|
|
Loading…
Add table
Reference in a new issue