|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH RFC 2/9] libxl_json: introduce libx__object_from_json
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);
+_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,
+ libxl__parse_json_callback parse,
+ void *p, const char *s)
+{
+ GC_INIT(ctx);
+ libxl__json_object *o = NULL;
+ int ret;
+
+ o = libxl__json_parse(gc, s);
+
+ if (!o) {
+ LIBXL__LOG(ctx, LIBXL__LOG_ERROR,
+ "unable to generate libxl__json_object from JSON
representation for %s.",
+ type);
+ ret = -1;
+ goto out;
+ }
+
+ ret = parse(ctx, o, p);
+
+ if (ret) {
+ LIBXL__LOG(ctx, LIBXL__LOG_ERROR,
+ "unable to convert libxl__json_object to %s.",
+ type);
+ ret = -1;
+ goto out;
+ }
+
+ ret = 0;
+out:
+ GC_FREE;
+ return ret;
+}
+
/*
* Local variables:
* mode: C
--
1.7.10.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |