(cppcheckpath, filename)
| 33 | |
| 34 | |
| 35 | def parseheader(cppcheckpath, filename): |
| 36 | with open(filename, 'rt') as f: |
| 37 | data = f.read() |
| 38 | |
| 39 | with open(cppcheckpath + '/cfg/std.cfg', 'rt') as f: |
| 40 | stdcfg = f.read() |
| 41 | |
| 42 | with open(cppcheckpath + '/cfg/posix.cfg', 'rt') as f: |
| 43 | posixcfg = f.read() |
| 44 | |
| 45 | while '/*' in data: |
| 46 | pos1 = data.find('/*') |
| 47 | pos2 = data.find('*/', pos1 + 2) |
| 48 | data = data[:pos1] + data[pos2 + 2:] |
| 49 | |
| 50 | data = data.replace('\\\n', '') |
| 51 | |
| 52 | while '\n#' in data: |
| 53 | pos1 = data.find('\n#') |
| 54 | pos2 = data.find('\n', pos1 + 1) |
| 55 | data = data[:pos1] + data[pos2:] |
| 56 | |
| 57 | while '\n__BEGIN' in data: |
| 58 | pos1 = data.find('\n__BEGIN') |
| 59 | pos2 = data.find('\n', pos1 + 1) |
| 60 | data = data[:pos1] + data[pos2:] |
| 61 | |
| 62 | while '\n__END' in data: |
| 63 | pos1 = data.find('\n__END') |
| 64 | pos2 = data.find('\n', pos1 + 1) |
| 65 | data = data[:pos1] + data[pos2:] |
| 66 | |
| 67 | data = data.replace('\n\n', '\n') |
| 68 | data = data.replace('\t', ' ') |
| 69 | data = data.replace(',\n ', ',') |
| 70 | data = data.replace(')\n ', ',') |
| 71 | data = data.replace(' ', ' ') |
| 72 | |
| 73 | output = [] |
| 74 | |
| 75 | for line in data.split('\n'): |
| 76 | if (line[:7] != 'extern ' and ' extern ' not in line) or line[-1] != ';': |
| 77 | continue |
| 78 | |
| 79 | functionNameEnd = line.find('(') - 1 |
| 80 | if functionNameEnd < 0: |
| 81 | continue |
| 82 | while line[functionNameEnd] == ' ': |
| 83 | functionNameEnd -= 1 |
| 84 | if functionNameEnd < 10: |
| 85 | continue |
| 86 | functionNameStart = functionNameEnd |
| 87 | while line[functionNameStart] == '_' or line[functionNameStart].isalnum(): |
| 88 | functionNameStart -= 1 |
| 89 | if functionNameStart < 10: |
| 90 | continue |
| 91 | if line[functionNameStart] != '*' and line[functionNameStart] != ' ': |
| 92 | continue |
no test coverage detected