[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH V4 06/24] libxl_json: introduce libx__object_from_json



On Thu, 2014-05-01 at 13:58 +0100, Wei Liu wrote:

Typo in $subject "libx" vs "libxl".

> Given a JSON string, we need to convert it to libxl_FOO struct.
> 
> The approach is:
> JSON string -> libxl__json_object -> libxl_FOO struct
> 
> With this approach we can make use of libxl's infrastructure to do the
> first half (JSON string -> libxl__json_object).
> 
> Second half is done by auto-generated code by libxl's IDL
> infrastructure. IDL patch(es) will come later.
> 
> Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>

Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

> ---
>  tools/libxl/libxl_internal.h |    8 ++++++++
>  tools/libxl/libxl_json.c     |   30 ++++++++++++++++++++++++++++++
>  2 files changed, 38 insertions(+)
> 
> diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
> index c2b73c4..0c10bf7 100644
> --- a/tools/libxl/libxl_internal.h
> +++ b/tools/libxl/libxl_internal.h
> @@ -1640,6 +1640,14 @@ typedef struct libxl__json_object {
>      struct libxl__json_object *parent;
>  } libxl__json_object;
>  
> +typedef int (*libxl__json_parse_callback)(libxl__gc *gc,
> +                                          libxl__json_object *o,
> +                                          void *p);
> +_hidden int libxl__object_from_json(libxl_ctx *ctx, const char *type,
> +                                    libxl__json_parse_callback parse,
> +                                    void *p,
> +                                    const char *s);
> +
>  typedef struct {
>      char *map_key;
>      libxl__json_object *obj;
> diff --git a/tools/libxl/libxl_json.c b/tools/libxl/libxl_json.c
> index 3ea56a4..b11ad4b 100644
> --- a/tools/libxl/libxl_json.c
> +++ b/tools/libxl/libxl_json.c
> @@ -794,6 +794,36 @@ out:
>      return ret;
>  }
>  
> +int libxl__object_from_json(libxl_ctx *ctx, const char *type,
> +                            libxl__json_parse_callback parse,
> +                            void *p, const char *s)
> +{
> +    GC_INIT(ctx);
> +    libxl__json_object *o;
> +    int rc;
> +
> +    o = libxl__json_parse(gc, s);
> +    if (!o) {
> +        LOG(ERROR,
> +            "unable to generate libxl__json_object from JSON representation 
> of %s.",
> +            type);
> +        rc = ERROR_FAIL;
> +        goto out;
> +    }
> +
> +    rc = parse(gc, o, p);
> +    if (rc) {
> +        LOG(ERROR, "unable to convert libxl__json_object to %s.", type);
> +        rc = ERROR_FAIL;
> +        goto out;
> +    }
> +
> +    rc = 0;
> +out:
> +    GC_FREE;
> +    return rc;
> +}
> +
>  /*
>   * Local variables:
>   * mode: C



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.