blobmsg: implement blobmsg_printf and blobmsg_vprintf
authorFelix Fietkau <nbd@openwrt.org>
Sun, 17 Feb 2013 15:42:12 +0000 (16:42 +0100)
committerFelix Fietkau <nbd@openwrt.org>
Sun, 17 Feb 2013 15:42:12 +0000 (16:42 +0100)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
blobmsg.c
blobmsg.h

index 8db2238256d510b8da8be084f6c7e3afae44355b..62f83cce2b39ed7afd75b531a861e38174624653 100644 (file)
--- a/blobmsg.c
+++ b/blobmsg.c
@@ -216,6 +216,31 @@ blobmsg_open_nested(struct blob_buf *buf, const char *name, bool array)
        return (void *)offset;
 }
 
+void
+blobmsg_vprintf(struct blob_buf *buf, const char *name, const char *format, va_list arg)
+{
+       va_list arg2;
+       char cbuf;
+       int len;
+
+       va_copy(arg2, arg);
+       len = vsnprintf(&cbuf, sizeof(cbuf), format, arg2);
+       va_end(arg2);
+
+       vsprintf(blobmsg_alloc_string_buffer(buf, name, len + 1), format, arg);
+       blobmsg_add_string_buffer(buf);
+}
+
+void
+blobmsg_printf(struct blob_buf *buf, const char *name, const char *format, ...)
+{
+       va_list ap;
+
+       va_start(ap, format);
+       blobmsg_vprintf(buf, name, format, ap);
+       va_end(ap);
+}
+
 void *
 blobmsg_alloc_string_buffer(struct blob_buf *buf, const char *name, int maxlen)
 {
index c4bf10d404abb231fa34a88aa994e3a3e2a1eeab..3eeec9b035ea63aca99b2a7f9e609d7b9d6df958 100644 (file)
--- a/blobmsg.h
+++ b/blobmsg.h
@@ -16,6 +16,7 @@
 #ifndef __BLOBMSG_H
 #define __BLOBMSG_H
 
+#include <stdarg.h>
 #include "blob.h"
 
 #define BLOBMSG_ALIGN  2
@@ -195,6 +196,11 @@ void *blobmsg_alloc_string_buffer(struct blob_buf *buf, const char *name, int ma
 void *blobmsg_realloc_string_buffer(struct blob_buf *buf, int maxlen);
 void blobmsg_add_string_buffer(struct blob_buf *buf);
 
+void blobmsg_vprintf(struct blob_buf *buf, const char *name, const char *format, va_list arg);
+void blobmsg_printf(struct blob_buf *buf, const char *name, const char *format, ...)
+     __attribute__((format(printf, 3, 4)));
+
+
 /* blobmsg to json formatting */
 
 #define blobmsg_for_each_attr(pos, attr, rem) \