Neels Hofmeyr | d80a217 | 2017-03-01 14:49:58 +0100 | [diff] [blame] | 1 | #!/usr/bin/env python3 |
| 2 | # vim: expandtab tabstop=2 shiftwidth=2 nocin |
| 3 | |
| 4 | ''' |
| 5 | Usage: |
| 6 | verify_value_string_arrays_are_terminated.py PATH [PATH [...]] |
| 7 | |
| 8 | e.g. |
| 9 | libosmocore/contrib/verify_value_string_arrays_are_terminated.py $(find . -name "*.[hc]") |
| 10 | ''' |
| 11 | |
| 12 | import re |
| 13 | import sys |
| 14 | import codecs |
| 15 | |
| 16 | value_string_array_re = re.compile( |
| 17 | r'((\bstruct\s+value_string\b[^{;]*?)\s*=[^{;]*{[^;]*}\s*;)', |
| 18 | re.MULTILINE | re.DOTALL) |
| 19 | |
| 20 | members = r'(\.(value|str)\s*=\s*)?' |
| 21 | terminator_re = re.compile('{\s*' + members + '(0|NULL)\s*,' |
| 22 | '\s*' + members + '(0|NULL)\s*}') |
| 23 | errors_found = 0 |
| 24 | |
| 25 | for f in sys.argv[1:]: |
| 26 | arrays = value_string_array_re.findall(codecs.open(f, "r", "utf-8").read()) |
| 27 | for array_def, name in arrays: |
| 28 | if not terminator_re.search(array_def): |
| 29 | print('ERROR: file contains unterminated value_string %r: %r' |
| 30 | % (name, f)) |
| 31 | errors_found += 1 |
| 32 | |
| 33 | sys.exit(errors_found) |