diff options
Diffstat (limited to 'contrib/tzdata/checklinks.awk')
-rw-r--r-- | contrib/tzdata/checklinks.awk | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/contrib/tzdata/checklinks.awk b/contrib/tzdata/checklinks.awk new file mode 100644 index 0000000..5b3e157 --- /dev/null +++ b/contrib/tzdata/checklinks.awk @@ -0,0 +1,48 @@ +# 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" +} + +/^Zone/ { + 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 +} + +/^Link/ { + 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 + } + used[$2] = 1 + defined[$3] = $2 +} + +END { + for (tz in used) { + if (defined[tz] != Zone) { + printf "%s: Link to non-zone\n", tz + status = 1 + } + } + + exit status +} |