From 81bde16fb0a27c3e3c7918da2bab2448a07452cb Mon Sep 17 00:00:00 2001 From: Max Date: Tue, 27 Jun 2017 11:20:33 +0200 Subject: [PATCH] Add value string termination check from libosmocore The script by Neels Hofmeyr has actually nothing to do with libosmocore itself - it's a generic build-time check used by jenkins so it should be part of this repo to avoid extra checkout of libosmocore just for this script. Change-Id: I079218b61f512975ec5bfc7dc23503ec369cbb5a --- ...rify_value_string_arrays_are_terminated.py | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100755 scripts/verify_value_string_arrays_are_terminated.py diff --git a/scripts/verify_value_string_arrays_are_terminated.py b/scripts/verify_value_string_arrays_are_terminated.py new file mode 100755 index 00000000..020bb4dd --- /dev/null +++ b/scripts/verify_value_string_arrays_are_terminated.py @@ -0,0 +1,33 @@ +#!/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)