8000 mbuf: add mbuf_write_ptr and mbuf_read_ptr by sreimers · Pull Request #898 · baresip/re · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

mbuf: add mbuf_write_ptr and mbuf_read_ptr #898

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Aug 11, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions include/re_mbuf.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,15 @@ 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_ptr(struct mbuf *mb, intptr_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_u32(struct mbuf *mb, uint32_t v);
int mbuf_write_u64(struct mbuf *mb, uint64_t v);
int mbuf_write_str(struct mbuf *mb, const char *str);
int mbuf_write_pl(struct mbuf *mb, const struct pl *pl);
int mbuf_read_mem(struct mbuf *mb, uint8_t *buf, size_t size);
intptr_t mbuf_read_ptr(struct mbuf *mb);
uint8_t mbuf_read_u8(struct mbuf *mb);
uint16_t mbuf_read_u16(struct mbuf *mb);
uint32_t mbuf_read_u32(struct mbuf *mb);
Expand Down
29 changes: 29 additions & 0 deletions src/mbuf/mbuf.c
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,20 @@ int mbuf_write_mem(struct mbuf *mb, const uint8_t *buf, size_t size)
}


/**
* Write an Pointer to a memory buffer
*
* @param mb Memory buffer
* @param v Pointer to write
*
* @return 0 if success, otherwise errorcode
*/
int mbuf_write_ptr(struct mbuf *mb, intptr_t v)
{
return mbuf_write_mem(mb, (uint8_t *)&v, sizeof(v));
}


/**
* Write an 8-bit value to a memory buffer
*
Expand Down Expand Up @@ -378,6 +392,21 @@ int mbuf_read_mem(struct mbuf *mb, uint8_t *buf, size_t size)
}


/**
* Read an Pointer from a memory buffer
*
* @param mb Memory buffer
*
* @return Pointer on success, otherwise 0
*/
intptr_t mbuf_read_ptr(struct mbuf *mb)
{
intptr_t v;

return (0 == mbuf_read_mem(mb, (uint8_t *)&v, sizeof(v))) ? v : 0;
}


/**
* Read an 8-bit value from a memory buffer
*
Expand Down
34 changes: 29 additions & 5 deletions test/mbuf.c
Original file line number Diff line number Diff line change
Expand Up @@ -138,17 +138,41 @@ static int test_mbuf_shift(void)
}


static int test_mbuf_ptr(void)
{
struct mbuf *buf;
int err;

buf = mbuf_alloc(1 * sizeof(void *));
if (!buf)
return ENOMEM;

err = mbuf_write_ptr(buf, (intptr_t)buf);

buf->pos = 0;
intptr_t p = mbuf_read_ptr(buf);

TEST_EQUALS((intptr_t)buf, p);

out:
mem_deref(buf);
return err;
}


int test_mbuf(void)
{
int err;

err = test_mbuf_basic();
if (err)
return err;
TEST_ERR(err);

err = test_mbuf_shift();
if (err)
return err;
TEST_ERR(err);

err = test_mbuf_ptr();
TEST_ERR(err);

return 0;
out:
return err;
}
0