|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] libxl: idl: always initialise the KeyedEnum keyvar in the member init function
# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1343984054 -3600
# Node ID 32aa98840f2ba38081d007a919a40efefc62d20a
# Parent aa93fe2d5a60770c697a44fc9635918417b1f5b5
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@xxxxxxxxxx>
Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
Committed-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---
diff -r aa93fe2d5a60 -r 32aa98840f2b tools/libxl/gentypes.py
--- a/tools/libxl/gentypes.py Fri Aug 03 09:54:14 2012 +0100
+++ b/tools/libxl/gentypes.py Fri Aug 03 09:54:14 2012 +0100
@@ -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 -r aa93fe2d5a60 -r 32aa98840f2b tools/libxl/libxl_event.c
--- a/tools/libxl/libxl_event.c Fri Aug 03 09:54:14 2012 +0100
+++ b/tools/libxl/libxl_event.c Fri Aug 03 09:54:14 2012 +0100
@@ -1163,7 +1163,10 @@ libxl_event *libxl__event_new(libxl__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;
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |