generate_dynamic_blacklist.py   [plain text]


#!/usr/bin/env python

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

# add space for new entries added at runtime
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)