From 9c5dd8378120ab096db67bd479bd4455d391f124 Mon Sep 17 00:00:00 2001 From: Richard Aas Date: Mon, 29 Apr 2013 10:43:38 +0000 Subject: [PATCH] added mbuf_fill() --- include/re_mbuf.h | 1 + src/mbuf/mbuf.c | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/include/re_mbuf.h b/include/re_mbuf.h index 391067f..2d2ff1d 100644 --- a/include/re_mbuf.h +++ b/include/re_mbuf.h @@ -64,6 +64,7 @@ int mbuf_vprintf(struct mbuf *mb, const char *fmt, va_list ap); int mbuf_printf(struct mbuf *mb, const char *fmt, ...); int mbuf_write_pl_skip(struct mbuf *mb, const struct pl *pl, const struct pl *skip); +int mbuf_fill(struct mbuf *mb, uint8_t c, size_t n); int mbuf_debug(struct re_printf *pf, const struct mbuf *mb); diff --git a/src/mbuf/mbuf.c b/src/mbuf/mbuf.c index e8f73fc..e0ba1c7 100644 --- a/src/mbuf/mbuf.c +++ b/src/mbuf/mbuf.c @@ -511,6 +511,43 @@ int mbuf_write_pl_skip(struct mbuf *mb, const struct pl *pl, } +/** + * Write n bytes of value 'c' to a memory buffer + * + * @param mb Memory buffer + * @param c Value to write + * @param n Number of bytes to write + * + * @return 0 if success, otherwise errorcode + */ +int mbuf_fill(struct mbuf *mb, uint8_t c, size_t n) +{ + size_t rsize; + + if (!mb || !n) + return EINVAL; + + rsize = mb->pos + n; + + if (rsize > mb->size) { + const size_t dsize = mb->size ? (mb->size * 2) + : DEFAULT_SIZE; + int err; + + err = mbuf_resize(mb, MAX(rsize, dsize)); + if (err) + return err; + } + + memset(mb->buf + mb->pos, c, n); + + mb->pos += n; + mb->end = MAX(mb->end, mb->pos); + + return 0; +} + + /** * Debug the memory buffer *