---
src/hyperv/hyperv_wmi_generator.py | 57 ++++++++++++++++++++++++++++++++++++--
1 file changed, 54 insertions(+), 3 deletions(-)
diff --git a/src/hyperv/hyperv_wmi_generator.py b/src/hyperv/hyperv_wmi_generator.py
index f767d54..8384634 100755
--- a/src/hyperv/hyperv_wmi_generator.py
+++ b/src/hyperv/hyperv_wmi_generator.py
@@ -68,7 +68,7 @@ class Class:
header += "\n"
header += "#define %s_RESOURCE_URI \\\n" % name_upper
- if self.name.startswith("Win32_"):
+ if self.name.startswith("Win32_") or
self.name.startswith("CIM_DataFile"):
header += "
\"http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/%s\"\n" %
self.name
else:
header += "
\"http://schemas.microsoft.com/wbem/wsman/1/wmi/root/virtualization/%s\"\n"
% self.name
@@ -100,6 +100,25 @@ class Class:
return header
+ def generate_cimtypes_header2(self):
+ header = separator
+ header += " * %s\n" % self.name
+ header += " */\n"
+ header += "\n"
+ header += "CimTypes cimTypes_%s[] = {\n" % self.name
+ for property in self.properties:
+ header += property.generate_cimtypes_header2()
+ header += ",\n"
+ header += "\t{ \"\", \"\", 0 },\n};\n\n"
+
+ return header
+
+ def generate_cimtypes_header3(self):
+ header = " { \"%s" % self.name
+ header += "\", cimTypes_%s" % self.name
+ header += " },\n"
+
+ return header
def generate_source(self):
name_upper = self.name.upper()
@@ -113,7 +132,7 @@ class Class:
% (self.name.replace("_", ""), self.name)
source += "{\n"
- if self.name.startswith("Win32_"):
+ if self.name.startswith("Win32_") or
self.name.startswith("CIM_DataFile"):
source += " return hypervEnumAndPull(priv, query,
ROOT_CIMV2,\n"
else:
source += " return hypervEnumAndPull(priv, query,
ROOT_VIRTUALIZATION,\n"
@@ -189,6 +208,16 @@ class Property:
return " SER_NS_%s(%s_RESOURCE_URI, \"%s\", 1),\n" \
% (Property.typemap[self.type], class_name.upper(), self.name)
+ def generate_cimtypes_header2(self):
+ header = " { \"%s" % self.name
+ header += "\", \"%s\", " % self.type
+ if self.is_array:
+ header += "true"
+ else:
+ header += "false"
+ header += " }"
+ return header
+
def open_and_print(filename):
@@ -238,7 +267,20 @@ def parse_class(block):
return Class(name=name, properties=properties)
-
+def generate_cimtypes_header1():
+ header = "struct cimTypes{\n"
+ header += " const char *name;\n"
+ header += " const char *type;\n"
+ header += " bool isArray;\n"
+ header += "};\n"
+ header += "typedef struct cimTypes CimTypes;\n\n"
+ header += "struct cimClasses{\n"
+ header += " const char *name;\n"
+ header += " CimTypes *cimTypesPtr;\n"
+ header += "};\n"
+ header += "typedef struct cimClasses CimClasses;\n\n"
+
+ return header
def main():
if "srcdir" in os.environ:
@@ -253,6 +295,7 @@ def main():
classes_typedef = open_and_print(os.path.join(output_dirname,
"hyperv_wmi_classes.generated.typedef"))
classes_header = open_and_print(os.path.join(output_dirname,
"hyperv_wmi_classes.generated.h"))
classes_source = open_and_print(os.path.join(output_dirname,
"hyperv_wmi_classes.generated.c"))
+ cimtypes_header = open_and_print(os.path.join(output_dirname,
"hyperv_wmi_cimtypes.generated.h"))
# parse input file
number = 0
@@ -294,6 +337,8 @@ def main():
classes_typedef.write(notice)
classes_header.write(notice)
classes_source.write(notice)
+ cimtypes_header.write(notice)
+ cimtypes_header.write(generate_cimtypes_header1())
names = classes_by_name.keys()
names.sort()
@@ -304,6 +349,12 @@ def main():
classes_typedef.write(classes_by_name[name].generate_classes_typedef())
classes_header.write(classes_by_name[name].generate_classes_header())
classes_source.write(classes_by_name[name].generate_classes_source())
+ cimtypes_header.write(classes_by_name[name].generate_cimtypes_header2())
+
+ cimtypes_header.write("CimClasses cimClasses[] = {\n")
+ for name in names:
+ cimtypes_header.write(classes_by_name[name].generate_cimtypes_header3())
+ cimtypes_header.write("\t{ \"\", NULL },\n};\n")
--
2.7.4