devtools: move awk script ckecking forbidden tokens

The awk code previously read inline in checkpatches.sh
was using -d which is a bash option,
while bash is not the default shell in all distributions.
Now moved to be read from a separate file.

Signed-off-by: Arnon Warshavsky <arnon@qwilt.com>
Acked-by: Andrzej Ostruszka <amo@semihalf.com>
This commit is contained in:
Arnon Warshavsky 2018-09-27 12:04:08 +03:00 committed by Thomas Monjalon
parent 738ad7b42b
commit 42f4d724ec
3 changed files with 76 additions and 74 deletions

View File

@ -81,6 +81,7 @@ M: Thomas Monjalon <thomas@monjalon.net>
F: MAINTAINERS
F: devtools/check-dup-includes.sh
F: devtools/check-maintainers.sh
F: devtools/check-forbidden-tokens.awk
F: devtools/check-git-log.sh
F: devtools/check-includes.sh
F: devtools/check-symbol-maps.sh

View File

@ -0,0 +1,74 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright 2018 Arnon Warshavsky <arnon@qwilt.com>
# This awk script receives a list of expressions to monitor
# and a list of folders to search these expressions in
# - No search is done inside comments
# - Both additions and removals of the expressions are checked
# A positive balance of additions fails the check
BEGIN {
split(FOLDERS,deny_folders," ");
split(EXPRESSIONS,deny_expr," ");
in_file=0;
in_comment=0;
count=0;
comment_start="/*"
comment_end="*/"
}
# search for add/remove instances in current file
# state machine assumes the comments structure is enforced by
# checkpatches.pl
(in_file) {
# comment start
if (index($0,comment_start) > 0) {
in_comment = 1
}
# non comment code
if (in_comment == 0) {
for (i in deny_expr) {
forbidden_added = "^\\+.*" deny_expr[i];
forbidden_removed="^-.*" deny_expr[i];
current = expressions[deny_expr[i]]
if ($0 ~ forbidden_added) {
count = count + 1;
expressions[deny_expr[i]] = current + 1
}
if ($0 ~ forbidden_removed) {
count = count - 1;
expressions[deny_expr[i]] = current - 1
}
}
}
# comment end
if (index($0,comment_end) > 0) {
in_comment = 0
}
}
# switch to next file , check if the balance of add/remove
# of previous filehad new additions
($0 ~ "^\\+\\+\\+ b/") {
in_file = 0;
if (count > 0) {
exit;
}
for (i in deny_folders) {
re = "^\\+\\+\\+ b/" deny_folders[i];
if ($0 ~ deny_folders[i]) {
in_file = 1
last_file = $0
}
}
}
END {
if (count > 0) {
print "Warning in " substr(last_file,6) ":"
print "are you sure you want to add the following:"
for (key in expressions) {
if (expressions[key] > 0) {
print key
}
}
exit RET_ON_FAIL
}
}

View File

@ -44,85 +44,12 @@ print_usage () {
}
check_forbidden_additions() {
# This awk script receives a list of expressions to monitor
# and a list of folders to search these expressions in
# - No search is done inside comments
# - Both additions and removals of the expressions are checked
# A positive balance of additions fails the check
read -d '' awk_script << 'EOF'
BEGIN {
split(FOLDERS,deny_folders," ");
split(EXPRESSIONS,deny_expr," ");
in_file=0;
in_comment=0;
count=0;
comment_start="/*"
comment_end="*/"
}
# search for add/remove instances in current file
# state machine assumes the comments structure is enforced by
# checkpatches.pl
(in_file) {
# comment start
if (index($0,comment_start) > 0) {
in_comment = 1
}
# non comment code
if (in_comment == 0) {
for (i in deny_expr) {
forbidden_added = "^\+.*" deny_expr[i];
forbidden_removed="^-.*" deny_expr[i];
current = expressions[deny_expr[i]]
if ($0 ~ forbidden_added) {
count = count + 1;
expressions[deny_expr[i]] = current + 1
}
if ($0 ~ forbidden_removed) {
count = count - 1;
expressions[deny_expr[i]] = current - 1
}
}
}
# comment end
if (index($0,comment_end) > 0) {
in_comment = 0
}
}
# switch to next file , check if the balance of add/remove
# of previous filehad new additions
($0 ~ "^\+\+\+ b/") {
in_file = 0;
if (count > 0) {
exit;
}
for (i in deny_folders) {
re = "^\+\+\+ b/" deny_folders[i];
if ($0 ~ deny_folders[i]) {
in_file = 1
last_file = $0
}
}
}
END {
if (count > 0) {
print "Warning in " substr(last_file,6) ":"
print "are you sure you want to add the following:"
for (key in expressions) {
if (expressions[key] > 0) {
print key
}
}
exit RET_ON_FAIL
}
}
EOF
# ---------------------------------
# refrain from new additions of rte_panic() and rte_exit()
# multiple folders and expressions are separated by spaces
awk -v FOLDERS="lib drivers" \
-v EXPRESSIONS="rte_panic\\\( rte_exit\\\(" \
-v RET_ON_FAIL=1 \
"$awk_script" -
-f $(dirname $(readlink -e $0))/check-forbidden-tokens.awk -
}
number=0