tests:docs: add a function to load the full data structures from the table
authorMichael Adam <obnox@samba.org>
Thu, 23 Jul 2015 21:10:16 +0000 (23:10 +0200)
committerJeremy Allison <jra@samba.org>
Thu, 30 Jul 2015 23:55:32 +0000 (01:55 +0200)
instead of just loading the list of parameter names.

Signed-off-by: Michael Adam <obnox@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
python/samba/tests/docs.py

index ab105e03a3752a00dcd1261215204afb5e9105eb..cf12b54dd655208a190e1dfed12b24b28c3d274d 100644 (file)
@@ -82,6 +82,64 @@ def get_implementation_parameters(sourcedir):
     finally:
         f.close()
 
+def get_param_table_full(sourcedir, filename="lib/param/param_table_static.c"):
+    # Reading entries from source code
+    f = open(os.path.join(sourcedir, filename), "r")
+    try:
+        # burn through the preceding lines
+        while True:
+            l = f.readline()
+            if l.startswith("struct parm_struct parm_table"):
+                break
+
+        for l in f.readlines():
+
+            if re.match("^\s*\}\;\s*$", l):
+                # end of the table reached
+                break
+
+            if re.match("^\s*\{\s*$", l):
+                # start a new entry
+                _label = ""
+                _type = ""
+                _class = ""
+                _offset = ""
+                _special = ""
+                _enum_list = ""
+                _flags = ""
+                continue
+
+            if re.match("^\s*\},\s*$", l):
+                # finish the entry
+                yield _label, _type, _class, _offset, _special, _enum_list, _flags
+                continue
+
+            m = re.match("^\s*\.([^\s]+)\s*=\s*(.*),.*", l)
+            if not m:
+                continue
+
+            attrib = m.group(1)
+            value = m.group(2)
+
+            if attrib == "label":
+                _label = value
+            elif attrib == "type":
+                _type = value
+            elif attrib == "p_class":
+                _class = value
+            elif attrib == "offset":
+                _offset = value
+            elif attrib == "special":
+                _special = value
+            elif attrib == "enum_list":
+                _special = value
+            elif attrib == "flags":
+                _flags = value
+
+    finally:
+        f.close()
+
+
 def get_documented_tuples(sourcedir, omit_no_default=True):
     path = os.path.join(sourcedir, "bin", "default", "docs-xml", "smbdotconf")
     if not os.path.exists(os.path.join(path, "parameters.all.xml")):