Opennet Firmware
check_for_obsolete_functions.sh
gehe zur Dokumentation dieser Datei
1#!/bin/sh
2#
3# Skript fuer die Suche nach unbenutzten Shell- oder Lua-Funktionen.
4# Die Ausgabe sollte jedcoh mit Vorsicht verwendet werden: "grep -r FUNC_NAME"
5# ist ueblicherweise ein guter Einstieg in die Detail-Analyse.
6#
7
8set -eu
9
10BASE_DIR=$(cd "$(dirname "$0")/../packages"; pwd)
11cd "$BASE_DIR"
12
13
14get_lua_files() {
15 find on-*/files/usr/lib/lua -type f
16}
17
18
19get_shell_files() {
20 (
21 grep -rl '^#!/bin/sh'
22 grep -rl "GUARD_TRAPS"
23 ) | sort | uniq
24}
25
26
27get_lua_funcs() {
28 local fname
29 get_lua_files | while read fname; do grep "^[ \t]*function[ \t]*" "$fname" || true; done \
30 | sed 's/^[ \t]*function[ \t]*//' \
31 | sed 's/^\‍([a-zA-Z0-9_]\+\‍).*$/\1/' \
32 | grep -v "[^a-zA-Z0-9_]" \
33 | sort | uniq
34}
35
36
37get_shell_funcs() {
38 local fname
39 get_shell_files | while read fname; do grep "^[a-zA-Z0-9_]\+[ \t]*(" "$fname" || true; done \
40 | sed 's/^\‍([a-zA-Z0-9_]\+\‍).*$/\1/' \
41 | grep -v "[^a-zA-Z0-9_]" \
42 | sort | uniq
43}
44
45
46get_lua_func_calls() {
47 local fname="$1"
48 local funcname="$2"
49 # normaler lua-Funktionsaufruf
50 grep "[^a-zA-Z0-9_]$funcname[ \t]*(" "$fname" || true
51 # Funktion als luci-Funktion fuer eine Web-Seite: 'call("foo")'
52 grep "call(\"$funcname\")" "$fname" || true
53}
54
55
56get_shell_func_calls() {
57 local fname="$1"
58 local funcname="$2"
59 # shell-Funktionsaufruf
60 (
61 grep -E "^(.*[^a-zA-Z0-9_]|)$funcname([^a-zA-Z0-9_].*|)$" "$fname" || true
62 ) | grep -vE "(trap|$funcname\‍()" | grep -v "^[ \t]*#" || true
63}
64
65
66check_lua_function_in_use() {
67 local funcname="$1"
68 local fname
69 local count
70 count=$(get_lua_files | while read -r fname; do get_lua_func_calls "$fname" "$funcname"; done | wc -l)
71 # mehr als ein Vorkommen (inkl. der Definition der Funktion)? -> ok
72 [ "$count" -gt 1 ] && return 0
73 return 1
74}
75
76
77check_shell_function_in_use() {
78 local funcname="$1"
79 local fname
80 # shell-Funktionsaufrufe duerfen in shell- und in lua-Datei auftauchen
81 local count=$( (get_shell_files; get_lua_files) | while read fname; do get_shell_func_calls "$fname" "$funcname"; done | wc -l)
82 # mindestens ein Vorkommen? -> ok
83 [ "$count" -gt 0 ] && return 0
84 return 1
85}
86
87
88ACTION=${1:-check}
89
90case "$ACTION" in
91 check)
92 "$0" lua-check
93 "$0" shell-check
94 ;;
95 lua-check)
96 echo "**************** eventuell unbenutzte lua-Funktionen *********************"
97 get_lua_funcs | while read funcname; do
98 check_lua_function_in_use "$funcname" || echo "$funcname"
99 done
100 ;;
101 shell-check)
102 echo "*************** eventuell unbenutzte shell-Funktionen ********************"
103 get_shell_funcs | while read funcname; do
104 check_shell_function_in_use "$funcname" || echo "$funcname"
105 done
106 ;;
107 lua-funcs)
108 get_lua_funcs | sort
109 ;;
110 shell-funcs)
111 get_shell_funcs | sort
112 ;;
113 lua-files)
114 get_lua_files | sort
115 ;;
116 shell-files)
117 get_shell_files | sort
118 ;;
119 help|--help)
120 echo "Syntax: $(basename "$0") { check | lua-check | shell-check | lua-funcs | shell-funcs | lua-files | shell-files | help }"
121 echo
122 ;;
123 *)
124 "$0" help >&2
125 exit 1
126 ;;
127esac
set eu case $1 in system dhcp network wireless firewall reload_config true
Definition: 100-on-core:8
done
Definition: core.sh:85