dpdk/devtools/check-forbidden-tokens.awk
<<
>>
Prefs
   1# SPDX-License-Identifier: BSD-3-Clause
   2# Copyright 2018 Arnon Warshavsky <arnon@qwilt.com>
   3
   4# This awk script receives a list of expressions to monitor
   5# and a list of folders to search these expressions in
   6# - No search is done inside comments
   7# - Both additions and removals of the expressions are checked
   8#   A positive balance of additions fails the check
   9
  10BEGIN {
  11        split(FOLDERS,deny_folders," ");
  12        split(EXPRESSIONS,deny_expr," ");
  13        in_file=0;
  14        in_comment=0;
  15        count=0;
  16        comment_start="/*"
  17        comment_end="*/"
  18}
  19# search for add/remove instances in current file
  20# state machine assumes the comments structure is enforced by
  21# checkpatches.pl
  22(in_file) {
  23        if ($0 ~ "^@@") {
  24                in_comment = 0
  25        }
  26        # comment start
  27        if (index($0,comment_start) > 0) {
  28                in_comment = 1
  29        }
  30        # non comment code
  31        if (in_comment == 0) {
  32                for (i in deny_expr) {
  33                        forbidden_added = "^\\+.*" deny_expr[i];
  34                        forbidden_removed="^-.*" deny_expr[i];
  35                        current = expressions[deny_expr[i]]
  36                        if ($0 ~ forbidden_added) {
  37                                count = count + 1;
  38                                expressions[deny_expr[i]] = current + 1
  39                        }
  40                        if ($0 ~ forbidden_removed) {
  41                                count = count - 1;
  42                                expressions[deny_expr[i]] = current - 1
  43                        }
  44                }
  45        }
  46        # comment end
  47        if (index($0,comment_end) > 0) {
  48                in_comment = 0
  49        }
  50}
  51# switch to next file , check if the balance of add/remove
  52# of previous filehad new additions
  53($0 ~ "^\\+\\+\\+ b/") {
  54        in_file = 0;
  55        if (count > 0) {
  56                exit;
  57        }
  58        for (i in deny_folders) {
  59                re = "^\\+\\+\\+ b/" deny_folders[i];
  60                if ($0 ~ re) {
  61                        in_file = 1
  62                        last_file = $0
  63                }
  64        }
  65}
  66END {
  67        if (count > 0) {
  68                print "Warning in " substr(last_file,7) ":"
  69                print MESSAGE
  70                exit RET_ON_FAIL
  71        }
  72}
  73