71 lines
1.6 KiB
Awk
71 lines
1.6 KiB
Awk
# Check links in tz tables.
|
|
|
|
# Contributed by Paul Eggert. This file is in the public domain.
|
|
|
|
BEGIN {
|
|
# Special marker indicating that the name is defined as a Zone.
|
|
# It is a newline so that it cannot match a valid name.
|
|
# It is not null so that its slot does not appear unset.
|
|
Zone = "\n"
|
|
}
|
|
|
|
/^Z/ {
|
|
if (defined[$2]) {
|
|
if (defined[$2] == Zone) {
|
|
printf "%s: Zone has duplicate definition\n", $2
|
|
} else {
|
|
printf "%s: Link with same name as Zone\n", $2
|
|
}
|
|
status = 1
|
|
}
|
|
defined[$2] = Zone
|
|
}
|
|
|
|
/^L/ {
|
|
if (defined[$3]) {
|
|
if (defined[$3] == Zone) {
|
|
printf "%s: Link with same name as Zone\n", $3
|
|
} else if (defined[$3] == $2) {
|
|
printf "%s: Link has duplicate definition\n", $3
|
|
} else {
|
|
printf "%s: Link to both %s and %s\n", $3, defined[$3], $2
|
|
}
|
|
status = 1
|
|
}
|
|
if (backcheck && FILENAME != backcheck && $3 != "GMT") {
|
|
printf "%s: Link should be in '%s'\n", $3, backcheck
|
|
status = 1
|
|
}
|
|
if ($4 == "#=") {
|
|
shortcut[$5] = $3
|
|
}
|
|
used[$2] = 1
|
|
defined[$3] = $2
|
|
}
|
|
|
|
END {
|
|
for (tz in used) {
|
|
if (defined[tz] != Zone) {
|
|
if (!defined[tz]) {
|
|
printf "%s: Link to nowhere\n", tz
|
|
status = 1
|
|
} else if (DATAFORM != "vanguard") {
|
|
printf "%s: Link to link\n", tz
|
|
status = 1
|
|
}
|
|
}
|
|
}
|
|
for (tz in shortcut) {
|
|
if (defined[shortcut[tz]] != defined[tz]) {
|
|
target = (!defined[tz] ? "absence" \
|
|
: defined[tz] == "\n" ? "zone" \
|
|
: defined[tz])
|
|
printf "%s: target %s disagrees with %s's target %s\n", \
|
|
tz, target, shortcut[tz], defined[shortcut[tz]]
|
|
status = 1
|
|
}
|
|
}
|
|
|
|
exit status
|
|
}
|