1# Check links in tz tables.
2
3# Contributed by Paul Eggert.  This file is in the public domain.
4
5BEGIN {
6    # Special marker indicating that the name is defined as a Zone.
7    # It is a newline so that it cannot match a valid name.
8    # It is not null so that its slot does not appear unset.
9    Zone = "\n"
10}
11
12/^Zone/ {
13    if (defined[$2]) {
14	if (defined[$2] == Zone) {
15	    printf "%s: Zone has duplicate definition\n", $2
16	} else {
17	    printf "%s: Link with same name as Zone\n", $2
18	}
19	status = 1
20    }
21    defined[$2] = Zone
22}
23
24/^Link/ {
25    if (defined[$3]) {
26	if (defined[$3] == Zone) {
27	    printf "%s: Link with same name as Zone\n", $3
28	} else if (defined[$3] == $2) {
29	    printf "%s: Link has duplicate definition\n", $3
30	} else {
31	    printf "%s: Link to both %s and %s\n", $3, defined[$3], $2
32	}
33	status = 1
34    }
35    used[$2] = 1
36    defined[$3] = $2
37}
38
39END {
40    for (tz in used) {
41	if (defined[tz] != Zone) {
42	    printf "%s: Link to non-zone\n", tz
43	    status = 1
44	}
45    }
46
47    exit status
48}
49