diff options
Diffstat (limited to 'tests/c-lint.sh')
-rwxr-xr-x | tests/c-lint.sh | 68 |
1 files changed, 55 insertions, 13 deletions
diff --git a/tests/c-lint.sh b/tests/c-lint.sh index 42d185c..0fa0b01 100755 --- a/tests/c-lint.sh +++ b/tests/c-lint.sh @@ -1,23 +1,65 @@ #!/bin/sh +set -eu + +awk ' +BEGIN { + ret = 0 + msg = "function not on the start of the line:" +} + +/^[a-zA-Z0-9_]+ .+\(/ { + if (ret == 0) { + print msg + } + printf "%s:%s:%s\n", FILENAME, FNR, $0 + ret = 1 +} + +END { + exit ret +} +' "$@" -RE='[a-z]+\(\) {' -if grep -Eq "$RE" "$@"; then - echo 'Functions with no argument without explicit "void" parameter:' >&2 - grep -En "$RE" "$@" - exit 1 -fi awk ' -/^[a-zA-Z0-9_]+.+{$/ && !/^static / { - match($0, /[a-zA-Z0-9_]+\(/) - fn_name = substr($0, RSTART, RLENGTH - 1) +BEGIN { + ret = 0 + static = 1 + msg = "non-static function is not declared in a header:" +} + +/^[a-zA-Z0-9_]+\(.*$/ && static == 0 { + split($0, line, /\(/) + fn_name = line[1] if (fn_name != "main") { - header = substr(FILENAME, 0, length(FILENAME) - 1) "h" - if (system("grep -qF \"" fn_name "(\" " header)) { - print "non-static function is not declared in a header:" + header = substr(FILENAME, 0, length(FILENAME) - 2) ".h" + if (system("grep -q ^\"" fn_name "\" \"" header "\"")) { + if (ret == 0) { + print msg + } printf "%s:%s:%s\n", FILENAME, FNR, $0 - exit 1 + ret = 1 } } } + +/^static / { + static = 1 +} + +!/^static / { + static = 0 +} + +END { + exit ret +} ' "$@" + + +RE='[a-z]+\(\) {' +if grep -Eq "$RE" "$@"; then + echo 'Functions with no argument without explicit "void" parameter:' >&2 + grep -En "$RE" "$@" + exit 1 +fi |