libxl_json: libxl__json_object_to_json
authorAnthony PERARD <anthony.perard@citrix.com>
Fri, 25 May 2018 14:07:14 +0000 (15:07 +0100)
committerWei Liu <wei.liu2@citrix.com>
Tue, 21 Aug 2018 11:16:02 +0000 (12:16 +0100)
Allow to generate a JSON string from a libxl__json_object,
useful for debugging.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
tools/libxl/libxl_internal.h
tools/libxl/libxl_json.c

index 1bc9394135ead9e8c729d3b31db68df8830b62ce..802382c7049db0556b658a7d9070656d1faf8571 100644 (file)
@@ -2037,6 +2037,9 @@ _hidden void libxl__json_object_free(libxl__gc *gc_opt,
 
 _hidden libxl__json_object *libxl__json_parse(libxl__gc *gc_opt, const char *s);
 
+_hidden char *libxl__json_object_to_json(libxl__gc *gc,
+                                         const libxl__json_object *args);
+
   /* Based on /local/domain/$domid/dm-version xenstore key
    * default is qemu xen traditional */
 _hidden int libxl__device_model_version_running(libxl__gc *gc, uint32_t domid);
index b7f9077f0d7831962fa27c5a9659cd1eea963422..cd78313df254b8dbe234d9812c4ab8068563879f 100644 (file)
@@ -1017,6 +1017,38 @@ out:
     return ret;
 }
 
+char *libxl__json_object_to_json(libxl__gc *gc,
+                                 const libxl__json_object *args)
+{
+    const unsigned char *buf;
+    libxl_yajl_length len;
+    yajl_gen_status s;
+    yajl_gen hand;
+    char *ret = NULL;
+    int rc;
+
+    if (!args)
+        return NULL;
+
+    hand = libxl_yajl_gen_alloc(NULL);
+    if (!hand)
+        return NULL;
+
+    rc = libxl__json_object_to_yajl_gen(gc, hand, args);
+    if (rc)
+        goto out;
+
+    s = yajl_gen_get_buf(hand, &buf, &len);
+    if (s)
+        goto out;
+
+    ret = libxl__strndup(gc, (const char *)buf, len);
+
+out:
+    yajl_gen_free(hand);
+    return ret;
+}
+
 yajl_gen_status libxl__uint64_gen_json(yajl_gen hand, uint64_t val)
 {
     char *num;