txtinfo: prevent buffer overflow
[olsrd.git] / gcc-warnings
1 #!/bin/sh
2 #
3 # We expect warning options for gcc as arguments and return the ones which are
4 # accepted by the given gcc.
5 #
6
7 set -ue
8 #set -vx
9
10 # make sure we do not use some locale ....
11 export LANG=C LC_ALL=C LC_COLLATE=C LC_CTYPE=C LC_MESSAGES=C LC_NUMERIC=C
12
13 OPTS=""
14 for param; do
15     case "$param" in
16     -[fWm]?*) OPTS="$OPTS $param";;
17     *)        echo "Ignoring $param" >&2
18     esac
19 done
20
21 testcompile() {
22     $CC $OPTS -x c -o /dev/null - 2>&1 <<- EOF
23        int main(void) {
24            return 0;
25        }
26 EOF
27 }
28
29 parsetest() {
30     while read error; do 
31         case "$error" in
32         *:\ unrecognized\ *option\ \"*)
33             opt="${error#*\"}"
34             opt="${opt%\"*}"
35             ;;
36         *:\ unrecognized\ *option\ \`*)
37             opt="${error#*\`}"
38             opt="${opt%\'*}"
39             ;;
40         *) continue
41             ;;
42        esac
43        # if we come here, we have in $opt the option to remove. and
44        # we remove all instances. And we save agoinst leading "-"
45        NEW_OPTS=""
46        for o in $OPTS; do
47            case "$o" in
48                $opt) : echo "Removed $o" >&2;;
49                *)    NEW_OPTS="$NEW_OPTS $o";;
50            esac
51        done
52        OPTS="$NEW_OPTS"
53     done
54     echo $OPTS
55 }
56
57 testcompile | parsetest
58
59 exit 0