aboutsummaryrefslogtreecommitdiffstats
path: root/tools/python
diff options
context:
space:
mode:
authorIan Campbell <ian.campbell@citrix.com>2012-03-01 12:26:14 +0000
committerIan Campbell <ian.campbell@citrix.com>2012-03-01 12:26:14 +0000
commit50cbda0d0b1bffa4a7af91b5ff8a65d88191fdbb (patch)
treefcc97d3b3fbf51bdccae615127ae6c94e4ff6a0c /tools/python
parent966deb4db61ea44e2487c84daa0939f52416fa83 (diff)
downloadxen-50cbda0d0b1bffa4a7af91b5ff8a65d88191fdbb.tar.gz
xen-50cbda0d0b1bffa4a7af91b5ff8a65d88191fdbb.tar.bz2
xen-50cbda0d0b1bffa4a7af91b5ff8a65d88191fdbb.zip
libxl: add new "defbool" built in type.
This type is a but like a "boolean" but with a third state "default" (so really I suppose it's a tristate). Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Diffstat (limited to 'tools/python')
-rw-r--r--tools/python/genwrap.py12
-rw-r--r--tools/python/xen/lowlevel/xl/xl.c15
2 files changed, 26 insertions, 1 deletions
diff --git a/tools/python/genwrap.py b/tools/python/genwrap.py
index aa5c723c3d..af8a5e9c46 100644
--- a/tools/python/genwrap.py
+++ b/tools/python/genwrap.py
@@ -4,11 +4,13 @@ import sys,os
import idl
-(TYPE_BOOL, TYPE_INT, TYPE_UINT, TYPE_STRING, TYPE_AGGREGATE) = range(5)
+(TYPE_DEFBOOL, TYPE_BOOL, TYPE_INT, TYPE_UINT, TYPE_STRING, TYPE_AGGREGATE) = range(6)
def py_type(ty):
if ty == idl.bool:
return TYPE_BOOL
+ if ty.typename == "libxl_defbool":
+ return TYPE_DEFBOOL
if isinstance(ty, idl.Enumeration):
return TYPE_UINT
if isinstance(ty, idl.Number):
@@ -44,6 +46,8 @@ def py_decls(ty):
for f in ty.fields:
if py_type(f.type) is not None:
continue
+ if py_type(f.type) == TYPE_DEFBOOL:
+ continue
if ty.marshal_out():
l.append('_hidden PyObject *attrib__%s_get(%s *%s);'%(\
fsanitize(f.type.typename), f.type.typename, f.name))
@@ -62,6 +66,8 @@ def py_attrib_get(ty, f):
l.append(' ret = (self->obj.%s) ? Py_True : Py_False;'%f.name)
l.append(' Py_INCREF(ret);')
l.append(' return ret;')
+ elif t == TYPE_DEFBOOL:
+ l.append(' return genwrap__defbool_get(&self->obj.%s);'%f.name)
elif t == TYPE_INT:
l.append(' return genwrap__ll_get(self->obj.%s);'%f.name)
elif t == TYPE_UINT:
@@ -85,6 +91,8 @@ def py_attrib_set(ty, f):
if t == TYPE_BOOL:
l.append(' self->obj.%s = (NULL == v || Py_None == v || Py_False == v) ? 0 : 1;'%f.name)
l.append(' return 0;')
+ elif t == TYPE_DEFBOOL:
+ l.append(' return genwrap__defbool_set(v, &self->obj.%s);'%f.name)
elif t == TYPE_UINT or t == TYPE_INT:
l.append(' %slong long tmp;'%(t == TYPE_UINT and 'unsigned ' or ''))
l.append(' int ret;')
@@ -275,6 +283,8 @@ _hidden PyObject *genwrap__ull_get(unsigned long long val);
_hidden int genwrap__ull_set(PyObject *v, unsigned long long *val, unsigned long long mask);
_hidden PyObject *genwrap__ll_get(long long val);
_hidden int genwrap__ll_set(PyObject *v, long long *val, long long mask);
+_hidden PyObject *genwrap__defbool_get(libxl_defbool *db);
+_hidden int genwrap__defbool_set(PyObject *v, libxl_defbool *db);
""" % " ".join(sys.argv))
for ty in [ty for ty in types if isinstance(ty, idl.Aggregate)]:
diff --git a/tools/python/xen/lowlevel/xl/xl.c b/tools/python/xen/lowlevel/xl/xl.c
index 48a828645a..74c8c887e5 100644
--- a/tools/python/xen/lowlevel/xl/xl.c
+++ b/tools/python/xen/lowlevel/xl/xl.c
@@ -156,6 +156,21 @@ int genwrap__ll_set(PyObject *v, long long *val, long long mask)
return 0;
}
+PyObject *genwrap__defbool_get(libxl_defbool *db)
+{
+ PyObject *ret;
+ ret = libxl_defbool_val(*db) ? Py_True : Py_False;
+ Py_INCREF(ret);
+ return ret;
+}
+
+int genwrap__defbool_set(PyObject *v, libxl_defbool *db)
+{
+ bool val = !(NULL == v || Py_None == v || Py_False == v);
+ libxl_defbool_set(db, val);
+ return 0;
+}
+
static int fixed_bytearray_set(PyObject *v, uint8_t *ptr, size_t len)
{
char *tmp;