1 # Check links in tz tables. 2 3 # Contributed by Paul Eggert. This file is in the public domain. 4 5 BEGIN { 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 /^Z/ { 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 /^L/ { 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 39 END { 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