aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Campbell <ian.campbell@citrix.com>2012-08-03 09:54:14 +0100
committerIan Campbell <ian.campbell@citrix.com>2012-08-03 09:54:14 +0100
commit15c7bb46682e37def21acb584f0cfd096a9f96dc (patch)
tree90335549944b40efbc3e6f9f4fbc6809f12809e3
parentb8457ba8411ab6afcd0c77e97eadeaa87081d9fc (diff)
downloadxen-15c7bb46682e37def21acb584f0cfd096a9f96dc.tar.gz
xen-15c7bb46682e37def21acb584f0cfd096a9f96dc.tar.bz2
xen-15c7bb46682e37def21acb584f0cfd096a9f96dc.zip
libxl: idl: always initialise the KeyedEnum keyvar in the member init function
Previously we only initialised it if an explicit keyvar_init_val was given but not if the default was implicitly 0. In the generated code this only changes the unused libxl_event_init_type function: void libxl_event_init_type(libxl_event *p, libxl_event_type type) { + assert(!p->type); + p->type = type; switch (p->type) { case LIBXL_EVENT_TYPE_DOMAIN_SHUTDOWN: break; However I think it is wrong that this function is unused, this and libxl_event_init should be used by libxl__event_new. As it happens both are just memset to zero but for correctness we should use the init functions (in case the IDL changes). In the generator we also need to properly handle init_var == 0 which the current if statements incorrectly treat as False. This doesn't actually have any impact on the generated code. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com> Committed-by: Ian Campbell <ian.campbell@citrix.com>
-rw-r--r--tools/libxl/gentypes.py11
-rw-r--r--tools/libxl/libxl_event.c5
2 files changed, 11 insertions, 5 deletions
diff --git a/tools/libxl/gentypes.py b/tools/libxl/gentypes.py
index 1d132019ba..30f29ba55b 100644
--- a/tools/libxl/gentypes.py
+++ b/tools/libxl/gentypes.py
@@ -162,17 +162,20 @@ def libxl_C_type_member_init(ty, field):
ku.keyvar.type.make_arg(ku.keyvar.name))
s += "{\n"
- if ku.keyvar.init_val:
+ if ku.keyvar.init_val is not None:
init_val = ku.keyvar.init_val
- elif ku.keyvar.type.init_val:
+ elif ku.keyvar.type.init_val is not None:
init_val = ku.keyvar.type.init_val
else:
init_val = None
+ (nparent,fexpr) = ty.member(ty.pass_arg("p"), ku.keyvar, isref=True)
if init_val is not None:
- (nparent,fexpr) = ty.member(ty.pass_arg("p"), ku.keyvar, isref=True)
s += " assert(%s == %s);\n" % (fexpr, init_val)
- s += " %s = %s;\n" % (fexpr, ku.keyvar.name)
+ else:
+ s += " assert(!%s);\n" % (fexpr)
+ s += " %s = %s;\n" % (fexpr, ku.keyvar.name)
+
(nparent,fexpr) = ty.member(ty.pass_arg("p"), field, isref=True)
s += _libxl_C_type_init(ku, fexpr, parent=nparent, subinit=True)
s += "}\n"
diff --git a/tools/libxl/libxl_event.c b/tools/libxl/libxl_event.c
index 1af64c8361..939906c03c 100644
--- a/tools/libxl/libxl_event.c
+++ b/tools/libxl/libxl_event.c
@@ -1163,7 +1163,10 @@ libxl_event *libxl__event_new(libxl__egc *egc,
libxl_event *ev;
ev = libxl__zalloc(NOGC,sizeof(*ev));
- ev->type = type;
+
+ libxl_event_init(ev);
+ libxl_event_init_type(ev, type);
+
ev->domid = domid;
return ev;