|
[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 |