On Thu, 2011-06-30 at 18:30 +0100, Anthony PERARD wrote:
> We use the yajl parser, but we need to make a tree from the parse result
> to use it outside the parser.
>
> So this patch include json_object struct that is used to hold the JSON
> data.
>
> Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
> ---
> tools/libxl/Makefile | 5 +-
> tools/libxl/libxl_internal.h | 97 ++++++++
> tools/libxl/libxl_json.c | 521
> ++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 622 insertions(+), 1 deletions(-)
> create mode 100644 tools/libxl/libxl_json.c
>
> diff --git a/tools/libxl/Makefile b/tools/libxl/Makefile
> index a95cd5d..0306cb0 100644
> --- a/tools/libxl/Makefile
> +++ b/tools/libxl/Makefile
> @@ -32,9 +32,12 @@ endif
> LIBXL_OBJS-$(CONFIG_X86) += libxl_cpuid.o
> LIBXL_OBJS-$(CONFIG_IA64) += libxl_nocpuid.o
>
> +LIBXL_LIBS += -lyajl
> +
> LIBXL_OBJS = flexarray.o libxl.o libxl_create.o libxl_dm.o libxl_pci.o \
> libxl_dom.o libxl_exec.o libxl_xshelp.o
> libxl_device.o \
> - libxl_internal.o libxl_utils.o libxl_uuid.o
> $(LIBXL_OBJS-y)
> + libxl_internal.o libxl_utils.o libxl_uuid.o
> libxl_json.o \
> + $(LIBXL_OBJS-y)
> LIBXL_OBJS += _libxl_types.o libxl_flask.o _libxl_types_internal.o
>
> $(LIBXL_OBJS): CFLAGS += $(CFLAGS_libxenctrl) $(CFLAGS_libxenguest)
> $(CFLAGS_libxenstore) $(CFLAGS_libblktapctl)
> diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
> index 71eb189..555d9f3 100644
> --- a/tools/libxl/libxl_internal.h
> +++ b/tools/libxl/libxl_internal.h
> @@ -381,4 +381,101 @@ _hidden int libxl__e820_alloc(libxl_ctx *ctx, uint32_t
> domid, libxl_domain_confi
> #define STRINGIFY(x) #x
> #define TOSTRING(x) STRINGIFY(x)
>
> +/* from libxl_json */
> +typedef enum {
> + JSON_ERROR,
> + JSON_NULL,
> + JSON_TRUE,
> + JSON_FALSE,
> + JSON_INTEGER,
> + JSON_DOUBLE,
> + JSON_STRING,
> + JSON_MAP,
> + JSON_ARRAY,
> + JSON_ANY
> +} libxl__json_node_type;
Could be internal IDL? Maybe no much point if you aren't using the
to_string functions etc?
> +
> +typedef struct libxl__json_object {
> + libxl__json_node_type type;
> + union {
> + long i;
> + double d;
> + const char *string;
Is it really const? Seems to be malloc/freed?
> [...]+#ifdef DEBUG_ANSWER
> +# define DEBUG_GEN_ALLOC(h) \
> + if (h == NULL) { \
> + yajl_gen_config conf = { 1, " " }; \
> + h = yajl_gen_alloc(&conf, NULL); \
> + }
All the callers of these macros use ctx->g. I think you could push the
->g down into the macros.
[...]
Ian
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|