1#!/usr/bin/env python 2 3import sys 4import re 5 6def type_map(x): 7 return "TYPE_" + x.upper() 8 9re_comments=re.compile(r'#.*$') 10 11nentries = 0 12extra_entries = 5 13bl = file(sys.argv[1]) 14 15print r'struct blacklist_entry blacklist[] = {' 16 17for line in bl.readlines(): 18 line = re_comments.sub("", line).strip() 19 20 if not line: 21 continue 22 23 fields = line.split(":") 24 if len(fields) != 3: 25 continue 26 27 (kext, func, ty) = fields 28 29 if kext == "": 30 kext = "NULL"; 31 else: 32 kext = '"' + kext + '"' 33 34 if func == "": 35 func = "NULL"; 36 else: 37 func = '"' + func + '"' 38 39 if ty == "": 40 ty = "normal"; 41 42 print """ {{ 43 .kext_name = {}, 44 .func_name = {}, 45 .type_mask = {}, 46 }},""".format(kext, func, type_map(ty)) 47 nentries += 1 48 49# add space for new entries added at runtime 50print '' 51print r' /* Unused entries that can be populated at runtime */' 52for i in xrange(0, extra_entries): 53 print """ {{ 54 .kext_name = {}, 55 .func_name = {}, 56 .type_mask = {}, 57 }},""".format("NULL", "NULL", 0) 58 59print r'};' 60print 61 62print 'static size_t blacklist_entries = {};'.format(nentries) 63print 'static const size_t blacklist_max_entries = {};'.format(nentries + extra_entries) 64