[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH V5 10/32] libxl: fix JSON generator for uint64_t
On Tue, 2014-05-13 at 22:53 +0100, Wei Liu wrote: > yajl_gen_integer cannot cope with uint64_t. Please can you describe how it fails and/or what it generates in practice. Perhaps indicate if/how we would cope with it on parse? In particular I think the result of this change does *not* involve adding quotes around the number? > A new function called > libxl__uint64_gen_json is introduced to handle uint64_t. > > Also removed a duplicated definition of MemKB while I was there. > > Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> > --- > tools/libxl/idl.py | 2 +- > tools/libxl/libxl_json.c | 21 +++++++++++++++++++++ > tools/libxl/libxl_json.h | 1 + > tools/libxl/libxl_types.idl | 4 +--- > 4 files changed, 24 insertions(+), 4 deletions(-) > > diff --git a/tools/libxl/idl.py b/tools/libxl/idl.py > index e4dc79b..69e08e1 100644 > --- a/tools/libxl/idl.py > +++ b/tools/libxl/idl.py > @@ -266,7 +266,7 @@ integer = Number("int", namespace = None, signed = True) > uint8 = UInt(8) > uint16 = UInt(16) > uint32 = UInt(32) > -uint64 = UInt(64) > +uint64 = UInt(64, json_fn = "libxl__uint64_gen_json") > > string = Builtin("char *", namespace = None, dispose_fn = "free", > json_fn = "libxl__string_gen_json", > diff --git a/tools/libxl/libxl_json.c b/tools/libxl/libxl_json.c > index 3ea56a4..ff23376 100644 > --- a/tools/libxl/libxl_json.c > +++ b/tools/libxl/libxl_json.c > @@ -794,6 +794,27 @@ out: > return ret; > } > > +yajl_gen_status libxl__uint64_gen_json(yajl_gen hand, uint64_t val) > +{ > + char *num; > + unsigned int len; > + yajl_gen_status s; > + > + if (asprintf(&num, "%"PRIu64, val) == -1) { > + s = yajl_gen_in_error_state; > + goto out; > + } > + > + len = strlen(num); asprintf returns len - 1 on success (I think, check for off by one in my reading of the manpage). > + > + s = yajl_gen_number(hand, num, len); > + > + free(num); > + > +out: > + return s; > +} > + > /* > * Local variables: > * mode: C > diff --git a/tools/libxl/libxl_json.h b/tools/libxl/libxl_json.h > index a4dd8fc..a45d429 100644 > --- a/tools/libxl/libxl_json.h > +++ b/tools/libxl/libxl_json.h > @@ -22,6 +22,7 @@ > # include <yajl/yajl_version.h> > #endif > > +yajl_gen_status libxl__uint64_gen_json(yajl_gen hand, uint64_t val); > yajl_gen_status libxl_defbool_gen_json(yajl_gen hand, libxl_defbool *p); > yajl_gen_status libxl_domid_gen_json(yajl_gen hand, libxl_domid *p); > yajl_gen_status libxl_uuid_gen_json(yajl_gen hand, libxl_uuid *p); > diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl > index 7b0901c..30a4f7a 100644 > --- a/tools/libxl/libxl_types.idl > +++ b/tools/libxl/libxl_types.idl > @@ -22,7 +22,7 @@ libxl_hwcap = Builtin("hwcap", passby=PASS_BY_REFERENCE) > # Specific integer types > # > > -MemKB = UInt(64, init_val = "LIBXL_MEMKB_DEFAULT") > +MemKB = UInt(64, init_val = "LIBXL_MEMKB_DEFAULT", json_fn = > "libxl__uint64_gen_json") > > # > # Constants / Enumerations > @@ -288,8 +288,6 @@ libxl_domain_restore_params = > Struct("domain_restore_params", [ > ("checkpointed_stream", integer), > ]) > > -MemKB = UInt(64, init_val = "LIBXL_MEMKB_DEFAULT") > - > libxl_domain_sched_params = Struct("domain_sched_params",[ > ("sched", libxl_scheduler), > ("weight", integer, {'init_val': > 'LIBXL_DOMAIN_SCHED_PARAM_WEIGHT_DEFAULT'}), _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |