| #!/usr/bin/env python3 |
| # vim: expandtab tabstop=2 shiftwidth=2 nocin |
| |
| ''' |
| Usage: |
| verify_value_string_arrays_are_terminated.py PATH [PATH [...]] |
| |
| e.g. |
| libosmocore/contrib/verify_value_string_arrays_are_terminated.py $(find . -name "*.[hc]") |
| ''' |
| |
| import re |
| import sys |
| import codecs |
| |
| value_string_array_re = re.compile( |
| r'((\bstruct\s+value_string\b[^{;]*?)\s*=[^{;]*{[^;]*}\s*;)', |
| re.MULTILINE | re.DOTALL) |
| |
| members = r'(\.(value|str)\s*=\s*)?' |
| terminator_re = re.compile('{\s*' + members + '(0|NULL)\s*,' |
| '\s*' + members + '(0|NULL)\s*}') |
| errors_found = 0 |
| |
| for f in sys.argv[1:]: |
| arrays = value_string_array_re.findall(codecs.open(f, "r", "utf-8").read()) |
| for array_def, name in arrays: |
| if not terminator_re.search(array_def): |
| print('ERROR: file contains unterminated value_string %r: %r' |
| % (name, f)) |
| errors_found += 1 |
| |
| sys.exit(errors_found) |