generate_dynamic_blacklist.py [plain text]
import sys
import re
def type_map(x):
return "TYPE_" + x.upper()
re_comments=re.compile(r'#.*$')
nentries = 0
extra_entries = 5
bl = file(sys.argv[1])
print r'struct blacklist_entry blacklist[] = {'
for line in bl.readlines():
line = re_comments.sub("", line).strip()
if not line:
continue
fields = line.split(":")
if len(fields) != 3:
continue
(kext, func, ty) = fields
if kext == "":
kext = "NULL";
else:
kext = '"' + kext + '"'
if func == "":
func = "NULL";
else:
func = '"' + func + '"'
if ty == "":
ty = "normal";
print """ {{
.kext_name = {},
.func_name = {},
.type_mask = {},
}},""".format(kext, func, type_map(ty))
nentries += 1
print ''
print r' /* Unused entries that can be populated at runtime */'
for i in xrange(0, extra_entries):
print """ {{
.kext_name = {},
.func_name = {},
.type_mask = {},
}},""".format("NULL", "NULL", 0)
print r'};'
print
print 'static size_t blacklist_entries = {};'.format(nentries)
print 'static const size_t blacklist_max_entries = {};'.format(nentries + extra_entries)