aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.hgignore1
-rw-r--r--tools/libxl/Makefile12
-rw-r--r--tools/libxl/gentest.py63
-rw-r--r--tools/libxl/gentypes.py59
-rw-r--r--tools/libxl/libxl.h11
-rw-r--r--tools/libxl/libxl_internal.h2
-rw-r--r--tools/libxl/libxl_utils.c14
-rw-r--r--tools/libxl/testenum.c210
8 files changed, 370 insertions, 2 deletions
diff --git a/.hgignore b/.hgignore
index b497e634e3..218da673be 100644
--- a/.hgignore
+++ b/.hgignore
@@ -187,6 +187,7 @@
^tools/libxl/_.*\.c$
^tools/libxl/libxlu_cfg_y\.output$
^tools/libxl/xl$
+^tools/libxl/testenum$
^tools/libaio/src/.*\.ol$
^tools/libaio/src/.*\.os$
^tools/misc/cpuperf/cpuperf-perfcntr$
diff --git a/tools/libxl/Makefile b/tools/libxl/Makefile
index 84ab76faaa..77724b3b77 100644
--- a/tools/libxl/Makefile
+++ b/tools/libxl/Makefile
@@ -44,12 +44,17 @@ AUTOSRCS= libxlu_cfg_y.c libxlu_cfg_l.c
LIBXLU_OBJS = libxlu_cfg_y.o libxlu_cfg_l.o libxlu_cfg.o
$(LIBXLU_OBJS): CFLAGS += $(CFLAGS_libxenctrl) # For xentoollog.h
-CLIENTS = xl
+CLIENTS = xl testenum
XL_OBJS = xl.o xl_cmdimpl.o xl_cmdtable.o
$(XL_OBJS): CFLAGS += $(CFLAGS_libxenctrl) # For xentoollog.h
$(XL_OBJS): CFLAGS += $(CFLAGS_libxenlight)
+testenum.o: CFLAGS += $(CFLAGS_libxenctrl) $(CFLAGS_libxenlight)
+testenum.c: libxl.idl gentest.py
+ $(PYTHON) gentest.py libxl.idl testenum.c.new
+ mv testenum.c.new testenum.c
+
.PHONY: all
all: $(CLIENTS) libxenlight.so libxenlight.a libxlutil.so libxlutil.a \
$(AUTOSRCS) $(AUTOINCS)
@@ -106,9 +111,12 @@ libxlutil.so.$(XLUMAJOR).$(XLUMINOR): $(LIBXLU_OBJS)
libxlutil.a: $(LIBXLU_OBJS)
$(AR) rcs libxlutil.a $^
-$(CLIENTS): $(XL_OBJS) libxlutil.so libxenlight.so
+xl: $(XL_OBJS) libxlutil.so libxenlight.so
$(CC) $(LDFLAGS) -o $@ $(XL_OBJS) libxlutil.so $(LDLIBS_libxenlight) $(LDLIBS_libxenctrl)
+testenum: testenum.o libxlutil.so libxenlight.so
+ $(CC) $(LDFLAGS) -o $@ testenum.o libxlutil.so $(LDLIBS_libxenlight) $(LDLIBS_libxenctrl)
+
.PHONY: install
install: all
$(INSTALL_DIR) $(DESTDIR)$(SBINDIR)
diff --git a/tools/libxl/gentest.py b/tools/libxl/gentest.py
new file mode 100644
index 0000000000..5828cfd17a
--- /dev/null
+++ b/tools/libxl/gentest.py
@@ -0,0 +1,63 @@
+#!/usr/bin/python
+
+import sys
+import re
+import random
+
+import libxltypes
+def randomize_char(c):
+ if random.random() < 0.5:
+ return str.lower(c)
+ else:
+ return str.upper(c)
+
+def randomize_case(s):
+ r = [randomize_char(c) for c in s]
+ return "".join(r)
+
+if __name__ == '__main__':
+ if len(sys.argv) < 3:
+ print >>sys.stderr, "Usage: gentest.py <idl> <implementation>"
+ sys.exit(1)
+
+ random.seed()
+
+ idl = sys.argv[1]
+ (_,types) = libxltypes.parse(idl)
+
+ impl = sys.argv[2]
+ f = open(impl, "w")
+ f.write("""
+#include <stdio.h>
+#include \"libxl.h\"
+
+int main(int argc, char **argv)
+{
+""")
+
+ for ty in [t for t in types if isinstance(t,libxltypes.Enumeration)]:
+ f.write(" %s %s_val;\n" % (ty.typename, ty.typename))
+ f.write(" int rc;\n")
+ f.write("\n")
+
+ for ty in [t for t in types if isinstance(t,libxltypes.Enumeration)]:
+ f.write(" printf(\"%s -- to string:\\n\");\n" % (ty.typename))
+ for v in ty.values:
+ f.write(" printf(\"\\t%s = %%d = \\\"%%s\\\"\\n\", %s, %s_to_string(%s));\n" %\
+ (v.valuename, v.name, ty.typename, v.name))
+ f.write("\n")
+
+ f.write(" printf(\"%s -- from string:\\n\");\n" % (ty.typename))
+ for v in [v.valuename for v in ty.values] + ["AN INVALID VALUE"]:
+ n = randomize_case(v)
+ f.write(" %s_val = -1;\n" % (ty.typename))
+ f.write(" rc = %s_from_string(\"%s\", &%s_val);\n" %\
+ (ty.typename, n, ty.typename))
+
+ f.write(" printf(\"\\t%s = \\\"%%s\\\" = %%d (rc %%d)\\n\", \"%s\", %s_val, rc);\n" %\
+ (v, n, ty.typename))
+ f.write("\n")
+
+ f.write("""return 0;
+}
+""")
diff --git a/tools/libxl/gentypes.py b/tools/libxl/gentypes.py
index e764e200af..c9a3d9c2f9 100644
--- a/tools/libxl/gentypes.py
+++ b/tools/libxl/gentypes.py
@@ -113,6 +113,43 @@ def libxl_C_type_destroy(ty, v, indent = " ", parent = None):
s = indent + s
return s.replace("\n", "\n%s" % indent).rstrip(indent)
+def libxl_C_enum_to_string(ty, e, indent = " "):
+ s = ""
+ s += "switch(%s) {\n" % e
+ for v in ty.values:
+ s += " case %s:\n" % (v.name)
+ s += " return \"%s\";\n" % (v.valuename.lower())
+ s += " default:\n "
+ s += " return NULL;\n"
+ s += "}\n"
+
+ if s != "":
+ s = indent + s
+ return s.replace("\n", "\n%s" % indent).rstrip(indent)
+
+def libxl_C_enum_strings(ty, indent=""):
+ s = ""
+ s += "libxl_enum_string_table %s_string_table[] = {\n" % (ty.typename)
+ for v in ty.values:
+ s += " { .s = \"%s\", .v = %s },\n" % (v.valuename.lower(), v.name)
+ s += " { NULL, -1 },\n"
+ s += "};\n"
+ s += "\n"
+
+ if s != "":
+ s = indent + s
+ return s.replace("\n", "\n%s" % indent).rstrip(indent)
+
+def libxl_C_enum_from_string(ty, str, e, indent = " "):
+ s = ""
+ s += "return libxl__enum_from_string(%s_string_table,\n" % ty.typename
+ s += " %s, (int *)%s);\n" % (str, e)
+
+ if s != "":
+ s = indent + s
+ return s.replace("\n", "\n%s" % indent).rstrip(indent)
+
+
if __name__ == '__main__':
if len(sys.argv) < 4:
print >>sys.stderr, "Usage: gentypes.py <idl> <header> <implementation>"
@@ -142,6 +179,10 @@ if __name__ == '__main__':
f.write(libxl_C_type_define(ty) + ";\n")
if ty.destructor_fn is not None:
f.write("void %s(%s *p);\n" % (ty.destructor_fn, ty.typename))
+ if isinstance(ty, libxltypes.Enumeration):
+ f.write("const char *%s_to_string(%s e);\n" % (ty.typename, ty.typename))
+ f.write("int %s_from_string(const char *s, %s *e);\n" % (ty.typename, ty.typename))
+ f.write("extern libxl_enum_string_table %s_string_table[];\n" % (ty.typename))
f.write("\n")
f.write("""#endif /* __LIBXL_TYPES_H */\n""")
@@ -165,6 +206,7 @@ if __name__ == '__main__':
#include <string.h>
#include "libxl.h"
+#include "libxl_internal.h"
#define LIBXL_DTOR_POISON 0xa5
@@ -177,4 +219,21 @@ if __name__ == '__main__':
f.write(" memset(p, LIBXL_DTOR_POISON, sizeof(*p));\n")
f.write("}\n")
f.write("\n")
+
+ for ty in [t for t in types if isinstance(t,libxltypes.Enumeration)]:
+ f.write("const char *%s_to_string(%s e)\n" % (ty.typename, ty.typename))
+ f.write("{\n")
+ f.write(libxl_C_enum_to_string(ty, "e"))
+ f.write("}\n")
+ f.write("\n")
+
+ f.write(libxl_C_enum_strings(ty))
+
+ f.write("int %s_from_string(const char *s, %s *e)\n" % (ty.typename, ty.typename))
+ f.write("{\n")
+ f.write(libxl_C_enum_from_string(ty, "s", "e"))
+ f.write("}\n")
+ f.write("\n")
+
+
f.close()
diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
index b0471c0654..b8392b7fad 100644
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -185,6 +185,17 @@ void libxl_cpuid_destroy(libxl_cpuid_policy_list *cpuid_list);
typedef uint32_t libxl_domid;
+/*
+ * Formatting Enumerations.
+ *
+ * Each enumeration type libxl_E declares an associated lookup table
+ * libxl_E_string_table and a lookup function libxl_E_from_string.
+ */
+typedef struct {
+ const char *s;
+ int v;
+} libxl_enum_string_table;
+
#include "_libxl_types.h"
typedef struct libxl__ctx libxl_ctx;
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index 49665b891a..df5a797d9e 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -325,6 +325,8 @@ _hidden char *libxl__abs_path(libxl__gc *gc, const char *s, const char *path);
_hidden char *libxl__domid_to_name(libxl__gc *gc, uint32_t domid);
_hidden char *libxl__cpupoolid_to_name(libxl__gc *gc, uint32_t poolid);
+_hidden int libxl__enum_from_string(const libxl_enum_string_table *t,
+ const char *s, int *e);
/* holds the CPUID response for a single CPUID leaf
* input contains the value of the EAX and ECX register,
diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c
index b23cf2550b..889d02cb7a 100644
--- a/tools/libxl/libxl_utils.c
+++ b/tools/libxl/libxl_utils.c
@@ -639,3 +639,17 @@ int libxl_get_max_cpus(libxl_ctx *ctx)
{
return xc_get_max_cpus(ctx->xch);
}
+
+int libxl__enum_from_string(const libxl_enum_string_table *t,
+ const char *s, int *e)
+{
+ if (!t) return ERROR_INVAL;
+
+ for( ; t->s; t++) {
+ if (!strcasecmp(t->s, s)) {
+ *e = t->v;
+ return 0;
+ }
+ }
+ return ERROR_FAIL;
+}
diff --git a/tools/libxl/testenum.c b/tools/libxl/testenum.c
new file mode 100644
index 0000000000..047d9dedd7
--- /dev/null
+++ b/tools/libxl/testenum.c
@@ -0,0 +1,210 @@
+
+#include <stdio.h>
+#include "libxl.h"
+
+int main(int argc, char **argv)
+{
+ libxl_domain_type libxl_domain_type_val;
+ libxl_device_model_version libxl_device_model_version_val;
+ libxl_console_type libxl_console_type_val;
+ libxl_console_backend libxl_console_backend_val;
+ libxl_disk_format libxl_disk_format_val;
+ libxl_disk_backend libxl_disk_backend_val;
+ libxl_nic_type libxl_nic_type_val;
+ libxl_action_on_shutdown libxl_action_on_shutdown_val;
+ libxl_event_type libxl_event_type_val;
+ libxl_button libxl_button_val;
+ int rc;
+
+ printf("libxl_domain_type -- to string:\n");
+ printf("\tFV = %d = \"%s\"\n", LIBXL_DOMAIN_TYPE_FV, libxl_domain_type_to_string(LIBXL_DOMAIN_TYPE_FV));
+ printf("\tPV = %d = \"%s\"\n", LIBXL_DOMAIN_TYPE_PV, libxl_domain_type_to_string(LIBXL_DOMAIN_TYPE_PV));
+
+ printf("libxl_domain_type -- from string:\n");
+ libxl_domain_type_val = -1;
+ rc = libxl_domain_type_from_string("FV", &libxl_domain_type_val);
+ printf("\tFV = \"%s\" = %d (rc %d)\n", "FV", libxl_domain_type_val, rc);
+ libxl_domain_type_val = -1;
+ rc = libxl_domain_type_from_string("pV", &libxl_domain_type_val);
+ printf("\tPV = \"%s\" = %d (rc %d)\n", "pV", libxl_domain_type_val, rc);
+ libxl_domain_type_val = -1;
+ rc = libxl_domain_type_from_string("an InVALId VALUE", &libxl_domain_type_val);
+ printf("\tAN INVALID VALUE = \"%s\" = %d (rc %d)\n", "an InVALId VALUE", libxl_domain_type_val, rc);
+
+ printf("libxl_device_model_version -- to string:\n");
+ printf("\tQEMU_XEN_TRADITIONAL = %d = \"%s\"\n", LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL, libxl_device_model_version_to_string(LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL));
+ printf("\tQEMU_XEN = %d = \"%s\"\n", LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN, libxl_device_model_version_to_string(LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN));
+
+ printf("libxl_device_model_version -- from string:\n");
+ libxl_device_model_version_val = -1;
+ rc = libxl_device_model_version_from_string("QEmU_Xen_TrAdiTioNAl", &libxl_device_model_version_val);
+ printf("\tQEMU_XEN_TRADITIONAL = \"%s\" = %d (rc %d)\n", "QEmU_Xen_TrAdiTioNAl", libxl_device_model_version_val, rc);
+ libxl_device_model_version_val = -1;
+ rc = libxl_device_model_version_from_string("QemU_xen", &libxl_device_model_version_val);
+ printf("\tQEMU_XEN = \"%s\" = %d (rc %d)\n", "QemU_xen", libxl_device_model_version_val, rc);
+ libxl_device_model_version_val = -1;
+ rc = libxl_device_model_version_from_string("aN InVALiD vaLUE", &libxl_device_model_version_val);
+ printf("\tAN INVALID VALUE = \"%s\" = %d (rc %d)\n", "aN InVALiD vaLUE", libxl_device_model_version_val, rc);
+
+ printf("libxl_console_type -- to string:\n");
+ printf("\tSERIAL = %d = \"%s\"\n", LIBXL_CONSOLE_TYPE_SERIAL, libxl_console_type_to_string(LIBXL_CONSOLE_TYPE_SERIAL));
+ printf("\tPV = %d = \"%s\"\n", LIBXL_CONSOLE_TYPE_PV, libxl_console_type_to_string(LIBXL_CONSOLE_TYPE_PV));
+
+ printf("libxl_console_type -- from string:\n");
+ libxl_console_type_val = -1;
+ rc = libxl_console_type_from_string("SErIaL", &libxl_console_type_val);
+ printf("\tSERIAL = \"%s\" = %d (rc %d)\n", "SErIaL", libxl_console_type_val, rc);
+ libxl_console_type_val = -1;
+ rc = libxl_console_type_from_string("pv", &libxl_console_type_val);
+ printf("\tPV = \"%s\" = %d (rc %d)\n", "pv", libxl_console_type_val, rc);
+ libxl_console_type_val = -1;
+ rc = libxl_console_type_from_string("An InvAlID valuE", &libxl_console_type_val);
+ printf("\tAN INVALID VALUE = \"%s\" = %d (rc %d)\n", "An InvAlID valuE", libxl_console_type_val, rc);
+
+ printf("libxl_console_backend -- to string:\n");
+ printf("\tXENCONSOLED = %d = \"%s\"\n", LIBXL_CONSOLE_BACKEND_XENCONSOLED, libxl_console_backend_to_string(LIBXL_CONSOLE_BACKEND_XENCONSOLED));
+ printf("\tIOEMU = %d = \"%s\"\n", LIBXL_CONSOLE_BACKEND_IOEMU, libxl_console_backend_to_string(LIBXL_CONSOLE_BACKEND_IOEMU));
+
+ printf("libxl_console_backend -- from string:\n");
+ libxl_console_backend_val = -1;
+ rc = libxl_console_backend_from_string("XENCoNSoleD", &libxl_console_backend_val);
+ printf("\tXENCONSOLED = \"%s\" = %d (rc %d)\n", "XENCoNSoleD", libxl_console_backend_val, rc);
+ libxl_console_backend_val = -1;
+ rc = libxl_console_backend_from_string("iOEmU", &libxl_console_backend_val);
+ printf("\tIOEMU = \"%s\" = %d (rc %d)\n", "iOEmU", libxl_console_backend_val, rc);
+ libxl_console_backend_val = -1;
+ rc = libxl_console_backend_from_string("an INvAliD VALuE", &libxl_console_backend_val);
+ printf("\tAN INVALID VALUE = \"%s\" = %d (rc %d)\n", "an INvAliD VALuE", libxl_console_backend_val, rc);
+
+ printf("libxl_disk_format -- to string:\n");
+ printf("\tUNKNOWN = %d = \"%s\"\n", LIBXL_DISK_FORMAT_UNKNOWN, libxl_disk_format_to_string(LIBXL_DISK_FORMAT_UNKNOWN));
+ printf("\tQCOW = %d = \"%s\"\n", LIBXL_DISK_FORMAT_QCOW, libxl_disk_format_to_string(LIBXL_DISK_FORMAT_QCOW));
+ printf("\tQCOW2 = %d = \"%s\"\n", LIBXL_DISK_FORMAT_QCOW2, libxl_disk_format_to_string(LIBXL_DISK_FORMAT_QCOW2));
+ printf("\tVHD = %d = \"%s\"\n", LIBXL_DISK_FORMAT_VHD, libxl_disk_format_to_string(LIBXL_DISK_FORMAT_VHD));
+ printf("\tRAW = %d = \"%s\"\n", LIBXL_DISK_FORMAT_RAW, libxl_disk_format_to_string(LIBXL_DISK_FORMAT_RAW));
+ printf("\tEMPTY = %d = \"%s\"\n", LIBXL_DISK_FORMAT_EMPTY, libxl_disk_format_to_string(LIBXL_DISK_FORMAT_EMPTY));
+
+ printf("libxl_disk_format -- from string:\n");
+ libxl_disk_format_val = -1;
+ rc = libxl_disk_format_from_string("uNKnOWn", &libxl_disk_format_val);
+ printf("\tUNKNOWN = \"%s\" = %d (rc %d)\n", "uNKnOWn", libxl_disk_format_val, rc);
+ libxl_disk_format_val = -1;
+ rc = libxl_disk_format_from_string("QcoW", &libxl_disk_format_val);
+ printf("\tQCOW = \"%s\" = %d (rc %d)\n", "QcoW", libxl_disk_format_val, rc);
+ libxl_disk_format_val = -1;
+ rc = libxl_disk_format_from_string("qcOW2", &libxl_disk_format_val);
+ printf("\tQCOW2 = \"%s\" = %d (rc %d)\n", "qcOW2", libxl_disk_format_val, rc);
+ libxl_disk_format_val = -1;
+ rc = libxl_disk_format_from_string("vhd", &libxl_disk_format_val);
+ printf("\tVHD = \"%s\" = %d (rc %d)\n", "vhd", libxl_disk_format_val, rc);
+ libxl_disk_format_val = -1;
+ rc = libxl_disk_format_from_string("raw", &libxl_disk_format_val);
+ printf("\tRAW = \"%s\" = %d (rc %d)\n", "raw", libxl_disk_format_val, rc);
+ libxl_disk_format_val = -1;
+ rc = libxl_disk_format_from_string("EmpTy", &libxl_disk_format_val);
+ printf("\tEMPTY = \"%s\" = %d (rc %d)\n", "EmpTy", libxl_disk_format_val, rc);
+ libxl_disk_format_val = -1;
+ rc = libxl_disk_format_from_string("aN INvAlId vAluE", &libxl_disk_format_val);
+ printf("\tAN INVALID VALUE = \"%s\" = %d (rc %d)\n", "aN INvAlId vAluE", libxl_disk_format_val, rc);
+
+ printf("libxl_disk_backend -- to string:\n");
+ printf("\tUNKNOWN = %d = \"%s\"\n", LIBXL_DISK_BACKEND_UNKNOWN, libxl_disk_backend_to_string(LIBXL_DISK_BACKEND_UNKNOWN));
+ printf("\tPHY = %d = \"%s\"\n", LIBXL_DISK_BACKEND_PHY, libxl_disk_backend_to_string(LIBXL_DISK_BACKEND_PHY));
+ printf("\tTAP = %d = \"%s\"\n", LIBXL_DISK_BACKEND_TAP, libxl_disk_backend_to_string(LIBXL_DISK_BACKEND_TAP));
+ printf("\tQDISK = %d = \"%s\"\n", LIBXL_DISK_BACKEND_QDISK, libxl_disk_backend_to_string(LIBXL_DISK_BACKEND_QDISK));
+
+ printf("libxl_disk_backend -- from string:\n");
+ libxl_disk_backend_val = -1;
+ rc = libxl_disk_backend_from_string("unKNOWN", &libxl_disk_backend_val);
+ printf("\tUNKNOWN = \"%s\" = %d (rc %d)\n", "unKNOWN", libxl_disk_backend_val, rc);
+ libxl_disk_backend_val = -1;
+ rc = libxl_disk_backend_from_string("pHY", &libxl_disk_backend_val);
+ printf("\tPHY = \"%s\" = %d (rc %d)\n", "pHY", libxl_disk_backend_val, rc);
+ libxl_disk_backend_val = -1;
+ rc = libxl_disk_backend_from_string("taP", &libxl_disk_backend_val);
+ printf("\tTAP = \"%s\" = %d (rc %d)\n", "taP", libxl_disk_backend_val, rc);
+ libxl_disk_backend_val = -1;
+ rc = libxl_disk_backend_from_string("QdIsK", &libxl_disk_backend_val);
+ printf("\tQDISK = \"%s\" = %d (rc %d)\n", "QdIsK", libxl_disk_backend_val, rc);
+ libxl_disk_backend_val = -1;
+ rc = libxl_disk_backend_from_string("AN InValID VALue", &libxl_disk_backend_val);
+ printf("\tAN INVALID VALUE = \"%s\" = %d (rc %d)\n", "AN InValID VALue", libxl_disk_backend_val, rc);
+
+ printf("libxl_nic_type -- to string:\n");
+ printf("\tIOEMU = %d = \"%s\"\n", LIBXL_NIC_TYPE_IOEMU, libxl_nic_type_to_string(LIBXL_NIC_TYPE_IOEMU));
+ printf("\tVIF = %d = \"%s\"\n", LIBXL_NIC_TYPE_VIF, libxl_nic_type_to_string(LIBXL_NIC_TYPE_VIF));
+
+ printf("libxl_nic_type -- from string:\n");
+ libxl_nic_type_val = -1;
+ rc = libxl_nic_type_from_string("ioemU", &libxl_nic_type_val);
+ printf("\tIOEMU = \"%s\" = %d (rc %d)\n", "ioemU", libxl_nic_type_val, rc);
+ libxl_nic_type_val = -1;
+ rc = libxl_nic_type_from_string("vIf", &libxl_nic_type_val);
+ printf("\tVIF = \"%s\" = %d (rc %d)\n", "vIf", libxl_nic_type_val, rc);
+ libxl_nic_type_val = -1;
+ rc = libxl_nic_type_from_string("aN invAlid vaLuE", &libxl_nic_type_val);
+ printf("\tAN INVALID VALUE = \"%s\" = %d (rc %d)\n", "aN invAlid vaLuE", libxl_nic_type_val, rc);
+
+ printf("libxl_action_on_shutdown -- to string:\n");
+ printf("\tDESTROY = %d = \"%s\"\n", LIBXL_ACTION_ON_SHUTDOWN_DESTROY, libxl_action_on_shutdown_to_string(LIBXL_ACTION_ON_SHUTDOWN_DESTROY));
+ printf("\tRESTART = %d = \"%s\"\n", LIBXL_ACTION_ON_SHUTDOWN_RESTART, libxl_action_on_shutdown_to_string(LIBXL_ACTION_ON_SHUTDOWN_RESTART));
+ printf("\tRESTART_RENAME = %d = \"%s\"\n", LIBXL_ACTION_ON_SHUTDOWN_RESTART_RENAME, libxl_action_on_shutdown_to_string(LIBXL_ACTION_ON_SHUTDOWN_RESTART_RENAME));
+ printf("\tPRESERVE = %d = \"%s\"\n", LIBXL_ACTION_ON_SHUTDOWN_PRESERVE, libxl_action_on_shutdown_to_string(LIBXL_ACTION_ON_SHUTDOWN_PRESERVE));
+ printf("\tCOREDUMP_DESTROY = %d = \"%s\"\n", LIBXL_ACTION_ON_SHUTDOWN_COREDUMP_DESTROY, libxl_action_on_shutdown_to_string(LIBXL_ACTION_ON_SHUTDOWN_COREDUMP_DESTROY));
+ printf("\tCOREDUMP_RESTART = %d = \"%s\"\n", LIBXL_ACTION_ON_SHUTDOWN_COREDUMP_RESTART, libxl_action_on_shutdown_to_string(LIBXL_ACTION_ON_SHUTDOWN_COREDUMP_RESTART));
+
+ printf("libxl_action_on_shutdown -- from string:\n");
+ libxl_action_on_shutdown_val = -1;
+ rc = libxl_action_on_shutdown_from_string("DESTRoy", &libxl_action_on_shutdown_val);
+ printf("\tDESTROY = \"%s\" = %d (rc %d)\n", "DESTRoy", libxl_action_on_shutdown_val, rc);
+ libxl_action_on_shutdown_val = -1;
+ rc = libxl_action_on_shutdown_from_string("rEsTarT", &libxl_action_on_shutdown_val);
+ printf("\tRESTART = \"%s\" = %d (rc %d)\n", "rEsTarT", libxl_action_on_shutdown_val, rc);
+ libxl_action_on_shutdown_val = -1;
+ rc = libxl_action_on_shutdown_from_string("rEsTart_RenAmE", &libxl_action_on_shutdown_val);
+ printf("\tRESTART_RENAME = \"%s\" = %d (rc %d)\n", "rEsTart_RenAmE", libxl_action_on_shutdown_val, rc);
+ libxl_action_on_shutdown_val = -1;
+ rc = libxl_action_on_shutdown_from_string("pRESeRve", &libxl_action_on_shutdown_val);
+ printf("\tPRESERVE = \"%s\" = %d (rc %d)\n", "pRESeRve", libxl_action_on_shutdown_val, rc);
+ libxl_action_on_shutdown_val = -1;
+ rc = libxl_action_on_shutdown_from_string("CoRedUMp_DEsTROy", &libxl_action_on_shutdown_val);
+ printf("\tCOREDUMP_DESTROY = \"%s\" = %d (rc %d)\n", "CoRedUMp_DEsTROy", libxl_action_on_shutdown_val, rc);
+ libxl_action_on_shutdown_val = -1;
+ rc = libxl_action_on_shutdown_from_string("coREDUMp_RestArt", &libxl_action_on_shutdown_val);
+ printf("\tCOREDUMP_RESTART = \"%s\" = %d (rc %d)\n", "coREDUMp_RestArt", libxl_action_on_shutdown_val, rc);
+ libxl_action_on_shutdown_val = -1;
+ rc = libxl_action_on_shutdown_from_string("An InvAliD valUe", &libxl_action_on_shutdown_val);
+ printf("\tAN INVALID VALUE = \"%s\" = %d (rc %d)\n", "An InvAliD valUe", libxl_action_on_shutdown_val, rc);
+
+ printf("libxl_event_type -- to string:\n");
+ printf("\tDOMAIN_DEATH = %d = \"%s\"\n", LIBXL_EVENT_TYPE_DOMAIN_DEATH, libxl_event_type_to_string(LIBXL_EVENT_TYPE_DOMAIN_DEATH));
+ printf("\tDISK_EJECT = %d = \"%s\"\n", LIBXL_EVENT_TYPE_DISK_EJECT, libxl_event_type_to_string(LIBXL_EVENT_TYPE_DISK_EJECT));
+
+ printf("libxl_event_type -- from string:\n");
+ libxl_event_type_val = -1;
+ rc = libxl_event_type_from_string("doMAIN_DeAth", &libxl_event_type_val);
+ printf("\tDOMAIN_DEATH = \"%s\" = %d (rc %d)\n", "doMAIN_DeAth", libxl_event_type_val, rc);
+ libxl_event_type_val = -1;
+ rc = libxl_event_type_from_string("DIsk_EJECT", &libxl_event_type_val);
+ printf("\tDISK_EJECT = \"%s\" = %d (rc %d)\n", "DIsk_EJECT", libxl_event_type_val, rc);
+ libxl_event_type_val = -1;
+ rc = libxl_event_type_from_string("aN INVAlID Value", &libxl_event_type_val);
+ printf("\tAN INVALID VALUE = \"%s\" = %d (rc %d)\n", "aN INVAlID Value", libxl_event_type_val, rc);
+
+ printf("libxl_button -- to string:\n");
+ printf("\tPOWER = %d = \"%s\"\n", LIBXL_BUTTON_POWER, libxl_button_to_string(LIBXL_BUTTON_POWER));
+ printf("\tSLEEP = %d = \"%s\"\n", LIBXL_BUTTON_SLEEP, libxl_button_to_string(LIBXL_BUTTON_SLEEP));
+
+ printf("libxl_button -- from string:\n");
+ libxl_button_val = -1;
+ rc = libxl_button_from_string("poWer", &libxl_button_val);
+ printf("\tPOWER = \"%s\" = %d (rc %d)\n", "poWer", libxl_button_val, rc);
+ libxl_button_val = -1;
+ rc = libxl_button_from_string("SLEEP", &libxl_button_val);
+ printf("\tSLEEP = \"%s\" = %d (rc %d)\n", "SLEEP", libxl_button_val, rc);
+ libxl_button_val = -1;
+ rc = libxl_button_from_string("An InvAlid VALUe", &libxl_button_val);
+ printf("\tAN INVALID VALUE = \"%s\" = %d (rc %d)\n", "An InvAlid VALUe", libxl_button_val, rc);
+
+return 0;
+}