checklinks.awk revision 1.1.1.3.6.1 1 1.1 apb # Check links in tz tables.
2 1.1 apb
3 1.1.1.2 christos # Contributed by Paul Eggert. This file is in the public domain.
4 1.1 apb
5 1.1.1.2 christos BEGIN {
6 1.1.1.2 christos # Special marker indicating that the name is defined as a Zone.
7 1.1.1.2 christos # It is a newline so that it cannot match a valid name.
8 1.1.1.2 christos # It is not null so that its slot does not appear unset.
9 1.1.1.2 christos Zone = "\n"
10 1.1.1.2 christos }
11 1.1 apb
12 1.1.1.3 kre /^Z/ {
13 1.1.1.2 christos if (defined[$2]) {
14 1.1.1.2 christos if (defined[$2] == Zone) {
15 1.1.1.2 christos printf "%s: Zone has duplicate definition\n", $2
16 1.1.1.2 christos } else {
17 1.1.1.2 christos printf "%s: Link with same name as Zone\n", $2
18 1.1.1.2 christos }
19 1.1.1.2 christos status = 1
20 1.1.1.2 christos }
21 1.1.1.2 christos defined[$2] = Zone
22 1.1.1.2 christos }
23 1.1 apb
24 1.1.1.3 kre /^L/ {
25 1.1.1.2 christos if (defined[$3]) {
26 1.1.1.2 christos if (defined[$3] == Zone) {
27 1.1.1.2 christos printf "%s: Link with same name as Zone\n", $3
28 1.1.1.2 christos } else if (defined[$3] == $2) {
29 1.1.1.2 christos printf "%s: Link has duplicate definition\n", $3
30 1.1.1.2 christos } else {
31 1.1.1.2 christos printf "%s: Link to both %s and %s\n", $3, defined[$3], $2
32 1.1.1.2 christos }
33 1.1.1.2 christos status = 1
34 1.1.1.2 christos }
35 1.1.1.3.6.1 martin if (backcheck && FILENAME != backcheck && $3 != "GMT") {
36 1.1.1.3.6.1 martin printf "%s: Link should be in '%s'\n", $3, backcheck
37 1.1.1.3.6.1 martin status = 1
38 1.1.1.3.6.1 martin }
39 1.1.1.3.6.1 martin if ($4 == "#=") {
40 1.1.1.3.6.1 martin shortcut[$5] = $3
41 1.1.1.3.6.1 martin }
42 1.1.1.2 christos used[$2] = 1
43 1.1.1.2 christos defined[$3] = $2
44 1.1.1.2 christos }
45 1.1.1.2 christos
46 1.1.1.2 christos END {
47 1.1 apb for (tz in used) {
48 1.1.1.2 christos if (defined[tz] != Zone) {
49 1.1.1.3.6.1 martin if (!defined[tz]) {
50 1.1.1.3.6.1 martin printf "%s: Link to nowhere\n", tz
51 1.1 apb status = 1
52 1.1.1.3.6.1 martin } else if (DATAFORM != "vanguard") {
53 1.1.1.3.6.1 martin printf "%s: Link to link\n", tz
54 1.1.1.3.6.1 martin status = 1
55 1.1.1.3.6.1 martin }
56 1.1 apb }
57 1.1 apb }
58 1.1.1.3.6.1 martin for (tz in shortcut) {
59 1.1.1.3.6.1 martin if (defined[shortcut[tz]] != defined[tz]) {
60 1.1.1.3.6.1 martin target = (!defined[tz] ? "absence" \
61 1.1.1.3.6.1 martin : defined[tz] == "\n" ? "zone" \
62 1.1.1.3.6.1 martin : defined[tz])
63 1.1.1.3.6.1 martin printf "%s: target %s disagrees with %s's target %s\n", \
64 1.1.1.3.6.1 martin tz, target, shortcut[tz], defined[shortcut[tz]]
65 1.1.1.3.6.1 martin status = 1
66 1.1.1.3.6.1 martin }
67 1.1.1.3.6.1 martin }
68 1.1 apb
69 1.1 apb exit status
70 1.1 apb }
71