|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH RFC 2/9] libxl_json: introduce libx__object_from_json
On Thu, 2014-04-10 at 16:40 +0100, Wei Liu wrote:
> 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>
> ---
> tools/libxl/libxl_internal.h | 9 +++++++++
> tools/libxl/libxl_json.c | 34 ++++++++++++++++++++++++++++++++++
> 2 files changed, 43 insertions(+)
>
> diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
> index b3a200d..34b6a26 100644
> --- a/tools/libxl/libxl_internal.h
> +++ b/tools/libxl/libxl_internal.h
> @@ -1494,6 +1494,15 @@ typedef yajl_gen_status
> (*libxl__gen_json_callback)(yajl_gen hand, void *);
> _hidden char *libxl__object_to_json(libxl_ctx *ctx, const char *type,
> libxl__gen_json_callback gen, void *p);
>
> +typedef struct libxl__json_object libxl__json_object;
> +typedef int (*libxl__parse_json_callback)(libxl_ctx *ctx,
> + libxl__json_object *o,
> + void *p);
libxl__json_parse_callback reads slightly more naturally to me and fits
in with the existing libxl__json_*
> +_hidden int libxl__object_from_json(libxl_ctx *ctx, const char *type,
> + libxl__parse_json_callback parse,
> + void *p,
> + const char *s);
> +
> /* holds the CPUID response for a single CPUID leaf
> * input contains the value of the EAX and ECX register,
> * and each policy string contains a filter to apply to
> diff --git a/tools/libxl/libxl_json.c b/tools/libxl/libxl_json.c
> index 3ea56a4..002ae2d 100644
> --- a/tools/libxl/libxl_json.c
> +++ b/tools/libxl/libxl_json.c
> @@ -794,6 +794,40 @@ out:
> return ret;
> }
>
> +int libxl__object_from_json(libxl_ctx *ctx, const char *type,
Internal functions should take libxl__gc *gc and avoid all the GC_INIT,
GC_FREE stuff. You can still access ctx but as CTX (a macro which uses
gc)
> + libxl__parse_json_callback parse,
> + void *p, const char *s)
> +{
> + GC_INIT(ctx);
> + libxl__json_object *o = NULL;
Unnecessary initialiser.
> + int ret;
> +
> + o = libxl__json_parse(gc, s);
> +
Drop this blank line to cuddle the error check up with the function.
> + if (!o) {
> + LIBXL__LOG(ctx, LIBXL__LOG_ERROR,
> + "unable to generate libxl__json_object from JSON
> representation for %s.",
> + type);
You can use the LOG macro here.
I think you want "representation of %s"
> + ret = -1;
ERROR_FAIL is more normal, but it might depend on the eventual usage.
> + goto out;
> + }
> +
> + ret = parse(ctx, o, p);
> +
Drop this blank.
> + if (ret) {
> + LIBXL__LOG(ctx, LIBXL__LOG_ERROR,
> + "unable to convert libxl__json_object to %s.",
> + type);
> + ret = -1;
LOG() and ERROR_FAIL again?
> + goto out;
> + }
> +
> + ret = 0;
> +out:
> + GC_FREE;
> + return ret;
> +}
> +
> /*
> * Local variables:
> * mode: C
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |