diff --git a/include/re_mbuf.h b/include/re_mbuf.h index c6bf558dc..bb4f83b6d 100644 --- a/include/re_mbuf.h +++ b/include/re_mbuf.h @@ -74,7 +74,17 @@ uint64_t mbuf_read_u64(struct mbuf *mb); int mbuf_read_str(struct mbuf *mb, char *str, size_t size); int mbuf_strdup(struct mbuf *mb, char **strp, size_t len); int mbuf_vprintf(struct mbuf *mb, const char *fmt, va_list ap); -int mbuf_printf(struct mbuf *mb, const char *fmt, ...); + +#ifdef HAVE_RE_ARG +#define mbuf_printf(mb, fmt, ...) \ + _mbuf_printf_s((mb), (fmt), RE_VA_ARGS(__VA_ARGS__)) +#else +#define mbuf_printf _mbuf_printf +#endif + +int _mbuf_printf(struct mbuf *mb, const char *fmt, ...); +int _mbuf_printf_s(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); diff --git a/src/mbuf/mbuf.c b/src/mbuf/mbuf.c index b1f81de56..3293dfae5 100644 --- a/src/mbuf/mbuf.c +++ b/src/mbuf/mbuf.c @@ -531,7 +531,7 @@ int mbuf_vprintf(struct mbuf *mb, const char *fmt, va_list ap) * * @return 0 if success, otherwise errorcode */ -int mbuf_printf(struct mbuf *mb, const char *fmt, ...) +int _mbuf_printf(struct mbuf *mb, const char *fmt, ...) { int err = 0; va_list ap; @@ -544,6 +544,27 @@ int mbuf_printf(struct mbuf *mb, const char *fmt, ...) } +/** + * Print a safe formatted string to a memory buffer + * + * @param mb Memory buffer + * @param fmt Formatted string + * + * @return 0 if success, otherwise errorcode + */ +int _mbuf_printf_s(struct mbuf *mb, const char *fmt, ...) +{ + int err = 0; + va_list ap; + + va_start(ap, fmt); + err = re_vhprintf_s(fmt, ap, vprintf_handler, mb); + va_end(ap); + + return err; +} + + /** * Write a pointer-length string to a memory buffer, excluding a section *