examples: fix build error
[project/libubox.git] / blobmsg_json.c
index c84fd93..8f208e0 100644 (file)
@@ -13,6 +13,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
+#include <inttypes.h>
 #include "blobmsg.h"
 #include "blobmsg_json.h"
 
@@ -243,7 +244,7 @@ static void blobmsg_format_element(struct strbuf *s, struct blob_attr *attr, boo
                sprintf(buf, "%d", (int32_t) be32_to_cpu(*(uint32_t *)data));
                break;
        case BLOBMSG_TYPE_INT64:
-               sprintf(buf, "%lld", (long long int) be64_to_cpu(*(uint64_t *)data));
+               sprintf(buf, "%" PRId64, (int64_t) be64_to_cpu(*(uint64_t *)data));
                break;
        case BLOBMSG_TYPE_STRING:
                blobmsg_format_string(s, data);
@@ -286,6 +287,7 @@ static void blobmsg_format_json_list(struct strbuf *s, struct blob_attr *attr, i
 char *blobmsg_format_json_with_cb(struct blob_attr *attr, bool list, blobmsg_json_format_t cb, void *priv, int indent)
 {
        struct strbuf s;
+       bool array;
 
        s.len = blob_len(attr);
        s.buf = malloc(s.len);
@@ -299,13 +301,18 @@ char *blobmsg_format_json_with_cb(struct blob_attr *attr, bool list, blobmsg_jso
                s.indent_level = indent;
        }
 
+       array = blob_is_extended(attr) &&
+               blobmsg_type(attr) == BLOBMSG_TYPE_ARRAY;
+
        if (list)
-               blobmsg_format_json_list(&s, blobmsg_data(attr), blobmsg_data_len(attr), false);
+               blobmsg_format_json_list(&s, blobmsg_data(attr), blobmsg_data_len(attr), array);
        else
                blobmsg_format_element(&s, attr, false, false);
 
-       if (!s.len)
+       if (!s.len) {
+               free(s.buf);
                return NULL;
+       }
 
        s.buf = realloc(s.buf, s.pos + 1);
        s.buf[s.pos] = 0;