aboutsummaryrefslogtreecommitdiff
path: root/tests/c-lint.sh
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-x[-rw-r--r--]tests/c-lint.sh65
1 files changed, 65 insertions, 0 deletions
diff --git a/tests/c-lint.sh b/tests/c-lint.sh
index e69de29..0fa0b01 100644..100755
--- a/tests/c-lint.sh
+++ b/tests/c-lint.sh
@@ -0,0 +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
+}
+' "$@"
+
+
+awk '
+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) - 2) ".h"
+ if (system("grep -q ^\"" fn_name "\" \"" header "\"")) {
+ if (ret == 0) {
+ print msg
+ }
+ printf "%s:%s:%s\n", FILENAME, FNR, $0
+ 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