From: Anthony PERARD Date: Fri, 25 May 2018 14:07:14 +0000 (+0100) Subject: libxl_json: libxl__json_object_to_json X-Git-Tag: archive/raspbian/4.14.0+80-gd101b417b7-1+rpi1^2~63^2~3434 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=7fbaf06d2de7f1c44bb41396acdbfb94f74e1cf9;p=xen.git libxl_json: libxl__json_object_to_json Allow to generate a JSON string from a libxl__json_object, useful for debugging. Signed-off-by: Anthony PERARD Acked-by: Ian Jackson Reviewed-by: Roger Pau Monné Acked-by: Wei Liu --- diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 1bc9394135..802382c704 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -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); diff --git a/tools/libxl/libxl_json.c b/tools/libxl/libxl_json.c index b7f9077f0d..cd78313df2 100644 --- a/tools/libxl/libxl_json.c +++ b/tools/libxl/libxl_json.c @@ -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;