[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |