aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxl/libxl_json.h
diff options
context:
space:
mode:
authorRoger Pau Monne <roger.pau@entel.upc.edu>2012-01-31 16:48:06 +0000
committerRoger Pau Monne <roger.pau@entel.upc.edu>2012-01-31 16:48:06 +0000
commitee65792d9386e7eb538dd09674c1c275f2691abb (patch)
tree290984b181271a662155c02478b9f0ff9281f6d5 /tools/libxl/libxl_json.h
parent1a4af67d32b1c39b73e09346203f3e12c00b9e41 (diff)
downloadxen-ee65792d9386e7eb538dd09674c1c275f2691abb.tar.gz
xen-ee65792d9386e7eb538dd09674c1c275f2691abb.tar.bz2
xen-ee65792d9386e7eb538dd09674c1c275f2691abb.zip
libxl: add support for yajl 2.x
This patch adds support for yajl versions 2.x, while retaining 1.x compatibility. All the needed ifdefs can be found in libxl_json.h. Signed-off-by: Roger Pau Monne <roger.pau@entel.upc.edu> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
Diffstat (limited to 'tools/libxl/libxl_json.h')
-rw-r--r--tools/libxl/libxl_json.h51
1 files changed, 51 insertions, 0 deletions
diff --git a/tools/libxl/libxl_json.h b/tools/libxl/libxl_json.h
index 720f6df10f..898dec79e7 100644
--- a/tools/libxl/libxl_json.h
+++ b/tools/libxl/libxl_json.h
@@ -16,7 +16,58 @@
#define LIBXL_JSON_H
#include <yajl/yajl_gen.h>
+#include <yajl/yajl_parse.h>
+
+#ifdef HAVE_YAJL_VERSION
+# include <yajl/yajl_version.h>
+#endif
#include <_libxl_types_json.h>
+/* YAJL version check */
+#if defined(YAJL_MAJOR) && (YAJL_MAJOR > 1)
+# define HAVE_YAJL_V2 1
+#endif
+
+#ifdef HAVE_YAJL_V2
+
+typedef size_t libxl_yajl_length;
+
+static inline yajl_handle libxl__yajl_alloc(const yajl_callbacks *callbacks,
+ yajl_alloc_funcs *allocFuncs,
+ void *ctx)
+{
+ return yajl_alloc(callbacks, allocFuncs, ctx);
+}
+
+static inline yajl_gen libxl__yajl_gen_alloc(const yajl_alloc_funcs *allocFuncs)
+{
+ return yajl_gen_alloc(allocFuncs);
+}
+
+#else /* !HAVE_YAJL_V2 */
+
+#define yajl_complete_parse yajl_parse_complete
+
+typedef unsigned int libxl_yajl_length;
+
+static inline yajl_handle libxl__yajl_alloc(const yajl_callbacks *callbacks,
+ const yajl_alloc_funcs *allocFuncs,
+ void *ctx)
+{
+ yajl_parser_config cfg = {
+ .allowComments = 1,
+ .checkUTF8 = 1,
+ };
+ return yajl_alloc(callbacks, &cfg, allocFuncs, ctx);
+}
+
+static inline yajl_gen libxl__yajl_gen_alloc(const yajl_alloc_funcs *allocFuncs)
+{
+ yajl_gen_config conf = { 1, " " };
+ return yajl_gen_alloc(&conf, allocFuncs);
+}
+
+#endif /* !HAVE_YAJL_V2 */
+
#endif /* LIBXL_JSON_H */