Module Name:    src
Committed By:   christos
Date:           Thu Jan 25 22:48:42 UTC 2018

Modified Files:
        src/lib/libc/time: Makefile NEWS README ctime.3 localtime.c theory.html
            tz-how-to.html tzselect.8 tzselect.ksh tzset.3 version zdump.c
            zic.8 zic.c

Log Message:
Merge tzcode2018c [ changelog with changes to tzdata sections removed ]

Release 2018c - 2018-01-22 23:00:44 -0800

  Changes to build procedure

    The build procedure now works around mawk 1.3.3's lack of support
    for character class expressions.  (Problem reported by Ohyama.)

Release 2018b - 2018-01-17 23:24:48 -0800

  Changes to build procedure

    The distribution now contains the file 'pacificnew' again.
    This file was inadvertantly omitted in the 2018a distribution.
    (Problem reported by Matias Fonzo.)

Release 2018a - 2018-01-12 22:29:21 -0800

  Changes to build procedure

    The default installation locations have been changed to mostly
    match Debian circa 2017, instead of being designed as an add-on to
    4.3BSD circa 1986.  This affects the Makefile macros TOPDIR,
    TZDIR, MANDIR, and LIBDIR.  New Makefile macros TZDEFAULT, USRDIR,
    USRSHAREDIR, BINDIR, ZDUMPDIR, and ZICDIR let installers tailor
    locations more precisely.  (This responds to suggestions from
    Brian Inglis and from Steve Summit.)

    The default installation procedure no longer creates the
    backward-compatibility link US/Pacific-New, which causes
    confusion during user setup (e.g., see Debian bug 815200).
    Use 'make BACKWARD="backward pacificnew"' to create the link
    anyway, for now.  Eventually we plan to remove the link entirely.

    tzdata.zi now contains a version-number comment.
    (Suggested by Tom Lane.)

    The Makefile now quotes values like BACKWARD more carefully when
    passing them to the shell.  (Problem reported by Zefram.)

    Builders no longer need to specify -DHAVE_SNPRINTF on platforms
    that have snprintf and use pre-C99 compilers.  (Problem reported
    by Jon Skeet.)

  Changes to code

    zic has a new option -t FILE that specifies the location of the
    file that determines local time when TZ is unset.  The default for
    this location can be configured via the new TZDEFAULT makefile
    macro, which defaults to /etc/localtime.

    Diagnostics and commentary now distinguish UT from UTC more
    carefully; see theory.html for more information about UT vs UTC.

    zic has been ported to GCC 8's -Wstringop-truncation option.
    (Problem reported by Martin Sebor.)

  Changes to documentation and commentary

    The zic man page now documents the longstanding behavior that
    times and years can be out of the usual range, with negative times
    counting backwards from midnight and with year 0 preceding year 1.
    (Problem reported by Michael Deckers.)

    The theory.html file now mentions the POSIX limit of six chars
    per abbreviation, and lists alphabetic abbreviations used.

    The files tz-art.htm and tz-link.htm have been renamed to
    tz-art.html and tz-link.html, respectively, for consistency with
    other file names and to simplify web server configuration.


To generate a diff of this commit:
cvs rdiff -u -r1.38 -r1.39 src/lib/libc/time/Makefile
cvs rdiff -u -r1.22 -r1.23 src/lib/libc/time/NEWS
cvs rdiff -u -r1.12 -r1.13 src/lib/libc/time/README
cvs rdiff -u -r1.55 -r1.56 src/lib/libc/time/ctime.3
cvs rdiff -u -r1.110 -r1.111 src/lib/libc/time/localtime.c
cvs rdiff -u -r1.1 -r1.2 src/lib/libc/time/theory.html
cvs rdiff -u -r1.3 -r1.4 src/lib/libc/time/tz-how-to.html
cvs rdiff -u -r1.6 -r1.7 src/lib/libc/time/tzselect.8
cvs rdiff -u -r1.16 -r1.17 src/lib/libc/time/tzselect.ksh
cvs rdiff -u -r1.36 -r1.37 src/lib/libc/time/tzset.3
cvs rdiff -u -r1.5 -r1.6 src/lib/libc/time/version
cvs rdiff -u -r1.47 -r1.48 src/lib/libc/time/zdump.c
cvs rdiff -u -r1.27 -r1.28 src/lib/libc/time/zic.8
cvs rdiff -u -r1.69 -r1.70 src/lib/libc/time/zic.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libc/time/Makefile
diff -u src/lib/libc/time/Makefile:1.38 src/lib/libc/time/Makefile:1.39
--- src/lib/libc/time/Makefile:1.38	Tue Oct 24 13:38:17 2017
+++ src/lib/libc/time/Makefile	Thu Jan 25 17:48:42 2018
@@ -42,36 +42,63 @@ POSIXRULES=	America/New_York
 # Also see TZDEFRULESTRING below, which takes effect only
 # if the time zone files cannot be accessed.
 
-# Everything gets put in subdirectories of. . .
 
-TOPDIR=		/usr/local
+# Installation locations.
+#
+# The defaults are suitable for Debian, except that if REDO is
+# posix_right or right_posix then files that Debian puts under
+# /usr/share/zoneinfo/posix and /usr/share/zoneinfo/right are instead
+# put under /usr/share/zoneinfo-posix and /usr/share/zoneinfo-leaps,
+# respectively.  Problems with the Debian approach are discussed in
+# the commentary for the right_posix rule (below).
+
+# Destination directory, which can be used for staging.
+# 'make DESTDIR=/stage install' installs under /stage (e.g., to
+# /stage/etc/localtime instead of to /etc/localtime).  Files under
+# /stage are not intended to work as-is, but can be copied by hand to
+# the root directory later.  If DESTDIR is empty, 'make install' does
+# not stage, but installs directly into production locations.
+DESTDIR =
+
+# Everything is installed into subdirectories of TOPDIR, and used there.
+# TOPDIR should be empty (meaning the root directory),
+# or a directory name that does not end in "/".
+# TOPDIR should be empty or an absolute name unless you're just testing.
+TOPDIR =
+
+# The default local time zone is taken from the file TZDEFAULT.
+TZDEFAULT = $(TOPDIR)/etc/localtime
+
+# The subdirectory containing installed program and data files, and
+# likewise for installed files that can be shared among architectures.
+# These should be relative file names.
+USRDIR = usr
+USRSHAREDIR = $(USRDIR)/share
 
 # "Compiled" time zone information is placed in the "TZDIR" directory
 # (and subdirectories).
-# Use an absolute path name for TZDIR unless you're just testing the software.
 # TZDIR_BASENAME should not contain "/" and should not be ".", ".." or empty.
-
 TZDIR_BASENAME=	zoneinfo
-TZDIR=		$(TOPDIR)/etc/$(TZDIR_BASENAME)
-
-# Types to try, as an alternative to time_t.  int64_t should be first.
-TIME_T_ALTERNATIVES= int64_t int32_t uint32_t uint64_t
-
-# The "tzselect", "zic", and "zdump" commands get installed in. . .
+TZDIR = $(TOPDIR)/$(USRSHAREDIR)/$(TZDIR_BASENAME)
 
-ETCDIR=		$(TOPDIR)/etc
+# The "tzselect" and (if you do "make INSTALL") "date" commands go in:
+BINDIR = $(TOPDIR)/$(USRDIR)/bin
 
-# If you "make INSTALL", the "date" command gets installed in. . .
+# The "zdump" command goes in:
+ZDUMPDIR = $(BINDIR)
 
-BINDIR=		$(TOPDIR)/bin
+# The "zic" command goes in:
+ZICDIR = $(TOPDIR)/$(USRDIR)/sbin
 
 # Manual pages go in subdirectories of. . .
-
-MANDIR=		$(TOPDIR)/man
+MANDIR = $(TOPDIR)/$(USRSHAREDIR)/man
 
 # Library functions are put in an archive in LIBDIR.
+LIBDIR = $(TOPDIR)/$(USRDIR)/lib
+
 
-LIBDIR=		$(TOPDIR)/lib
+# Types to try, as an alternative to time_t.  int64_t should be first.
+TIME_T_ALTERNATIVES = int64_t int32_t uint32_t uint64_t
 
 # If you want only POSIX time, with time values interpreted as
 # seconds since the epoch (not counting leap seconds), use
@@ -105,11 +132,14 @@ REDO=		posix_right
 TZDATA_TEXT=	leapseconds tzdata.zi
 
 # For backward-compatibility links for old zone names, use
+#	BACKWARD=	backward
+# If you also want the link US/Pacific-New, even though it is confusing
+# and is planned to be removed from the database eventually, use
 #	BACKWARD=	backward pacificnew
 # To omit these links, use
 #	BACKWARD=
 
-BACKWARD=	backward pacificnew
+BACKWARD=	backward
 
 # If you want out-of-scope and often-wrong data from the file 'backzone', use
 #	PACKRATDATA=	backzone
@@ -313,7 +343,7 @@ ZFLAGS=
 
 # How to use zic to install tz binary files.
 
-ZIC_INSTALL=	$(ZIC) -d $(DESTDIR)$(TZDIR) $(LEAPSECONDS)
+ZIC_INSTALL=	$(ZIC) -d '$(DESTDIR)$(TZDIR)' $(LEAPSECONDS)
 
 # The name of a Posix-compliant 'awk' on your system.
 AWK=		awk
@@ -341,8 +371,8 @@ SGML_CATALOG_FILES= \
 VALIDATE = nsgmls
 VALIDATE_FLAGS = -s -B -wall -wno-unused-param
 VALIDATE_ENV = \
-  SGML_CATALOG_FILES=$(SGML_CATALOG_FILES) \
-  SGML_SEARCH_PATH=$(SGML_SEARCH_PATH) \
+  SGML_CATALOG_FILES='$(SGML_CATALOG_FILES)' \
+  SGML_SEARCH_PATH='$(SGML_SEARCH_PATH)' \
   SP_CHARSET_FIXED=YES \
   SP_ENCODING=UTF-8
 
@@ -396,7 +426,7 @@ GZIPFLAGS=	-9n
 #MAKE=		make
 
 cc=		cc
-CC=		$(cc) -DTZDIR=\"$(TZDIR)\"
+CC=		$(cc) -DTZDIR='"$(TZDIR)"'
 
 AR=		ar
 
@@ -421,18 +451,19 @@ MANTXTS=	newctime.3.txt newstrftime.3.tx
 			date.1.txt
 COMMON=		calendars CONTRIBUTING LICENSE Makefile \
 			NEWS README theory.html version
-WEB_PAGES=	tz-art.htm tz-how-to.html tz-link.htm
+WEB_PAGES=	tz-art.html tz-how-to.html tz-link.html
 DOCS=		$(MANS) date.1 $(MANTXTS) $(WEB_PAGES)
 PRIMARY_YDATA=	africa antarctica asia australasia \
 		europe northamerica southamerica
-YDATA=		$(PRIMARY_YDATA) etcetera $(BACKWARD)
+YDATA=		$(PRIMARY_YDATA) etcetera
 NDATA=		systemv factory
-TDATA=		$(YDATA) $(NDATA)
+TDATA_TO_CHECK=	$(YDATA) $(NDATA) backward pacificnew
+TDATA=		$(YDATA) $(NDATA) $(BACKWARD)
 ZONETABLES=	zone1970.tab zone.tab
 TABDATA=	iso3166.tab $(TZDATA_TEXT) $(ZONETABLES)
 LEAP_DEPS=	leapseconds.awk leap-seconds.list
-TZDATA_ZI_DEPS=	zishrink.awk $(TDATA) $(PACKRATDATA)
-DATA=		$(YDATA) $(NDATA) backzone iso3166.tab leap-seconds.list \
+TZDATA_ZI_DEPS=	zishrink.awk version $(TDATA) $(PACKRATDATA)
+DATA=		$(TDATA_TO_CHECK) backzone iso3166.tab leap-seconds.list \
 			leapseconds yearistype.sh $(ZONETABLES)
 AWK_SCRIPTS=	checklinks.awk checktab.awk leapseconds.awk zishrink.awk
 MISC=		$(AWK_SCRIPTS) zoneinfo2tdf.pl
@@ -457,7 +488,7 @@ VERSION_DEPS= \
 		newctime.3 newstrftime.3 newtzset.3 northamerica \
 		pacificnew private.h \
 		southamerica strftime.c systemv theory.html \
-		time2posix.3 tz-art.htm tz-how-to.html tz-link.htm \
+		time2posix.3 tz-art.html tz-how-to.html tz-link.html \
 		tzfile.5 tzfile.h tzselect.8 tzselect.ksh \
 		workman.sh yearistype.sh \
 		zdump.8 zdump.c zic.8 zic.c \
@@ -473,35 +504,41 @@ all:		tzselect yearistype zic zdump libt
 ALL:		all date $(ENCHILADA)
 
 install:	all $(DATA) $(REDO) $(MANS)
-		mkdir -p $(DESTDIR)$(ETCDIR) $(DESTDIR)$(TZDIR) \
-			$(DESTDIR)$(LIBDIR) \
-			$(DESTDIR)$(MANDIR)/man3 $(DESTDIR)$(MANDIR)/man5 \
-			$(DESTDIR)$(MANDIR)/man8
-		$(ZIC_INSTALL) -l $(LOCALTIME) -p $(POSIXRULES)
-		cp -f $(TABDATA) $(DESTDIR)$(TZDIR)/.
-		cp tzselect zic zdump $(DESTDIR)$(ETCDIR)/.
-		cp libtz.a $(DESTDIR)$(LIBDIR)/.
-		$(RANLIB) $(DESTDIR)$(LIBDIR)/libtz.a
-		cp -f newctime.3 newtzset.3 $(DESTDIR)$(MANDIR)/man3/.
-		cp -f tzfile.5 $(DESTDIR)$(MANDIR)/man5/.
-		cp -f tzselect.8 zdump.8 zic.8 $(DESTDIR)$(MANDIR)/man8/.
+		mkdir -p '$(DESTDIR)$(BINDIR)' \
+			'$(DESTDIR)$(ZDUMPDIR)' '$(DESTDIR)$(ZICDIR)' \
+			'$(DESTDIR)$(LIBDIR)' \
+			'$(DESTDIR)$(MANDIR)/man3' '$(DESTDIR)$(MANDIR)/man5' \
+			'$(DESTDIR)$(MANDIR)/man8'
+		$(ZIC_INSTALL) -l $(LOCALTIME) -p $(POSIXRULES) \
+			-t '$(DESTDIR)$(TZDEFAULT)'
+		cp -f $(TABDATA) '$(DESTDIR)$(TZDIR)/.'
+		cp tzselect '$(DESTDIR)$(BINDIR)/.'
+		cp zdump '$(DESTDIR)$(ZDUMPDIR)/.'
+		cp zic '$(DESTDIR)$(ZICDIR)/.'
+		cp libtz.a '$(DESTDIR)$(LIBDIR)/.'
+		$(RANLIB) '$(DESTDIR)$(LIBDIR)/libtz.a'
+		cp -f newctime.3 newtzset.3 '$(DESTDIR)$(MANDIR)/man3/.'
+		cp -f tzfile.5 '$(DESTDIR)$(MANDIR)/man5/.'
+		cp -f tzselect.8 zdump.8 zic.8 '$(DESTDIR)$(MANDIR)/man8/.'
 
 INSTALL:	ALL install date.1
-		mkdir -p $(DESTDIR)$(BINDIR) $(DESTDIR)$(MANDIR)/man1
-		cp date $(DESTDIR)$(BINDIR)/.
-		cp -f date.1 $(DESTDIR)$(MANDIR)/man1/.
+		mkdir -p '$(DESTDIR)$(BINDIR)' '$(DESTDIR)$(MANDIR)/man1'
+		cp date '$(DESTDIR)$(BINDIR)/.'
+		cp -f date.1 '$(DESTDIR)$(MANDIR)/man1/.'
 
 version:	$(VERSION_DEPS)
 		{ (type git) >/dev/null 2>&1 && \
 		  V=`git describe --match '[0-9][0-9][0-9][0-9][a-z]*' \
 				--abbrev=7 --dirty` || \
-		  V=$(VERSION); } && \
+		  V='$(VERSION)'; } && \
 		printf '%s\n' "$$V" >$@.out
 		mv $@.out $@
 
 # This file can be tailored by setting BACKWARD, PACKRATDATA, etc.
 tzdata.zi:	$(TZDATA_ZI_DEPS)
-		LC_ALL=C $(AWK) -f zishrink.awk $(TDATA) $(PACKRATDATA) >$@.out
+		version=`sed 1q version` && \
+		  LC_ALL=C $(AWK) -v version="$$version" -f zishrink.awk \
+		    $(TDATA) $(PACKRATDATA) >$@.out
 		mv $@.out $@
 
 version.h:	version
@@ -529,12 +566,13 @@ leapseconds:	$(LEAP_DEPS)
 # Arguments to pass to submakes of install_data.
 # They can be overridden by later submake arguments.
 INSTALLARGS = \
- BACKWARD=$(BACKWARD) \
- DESTDIR=$(DESTDIR) \
+ BACKWARD='$(BACKWARD)' \
+ DESTDIR='$(DESTDIR)' \
  LEAPSECONDS='$(LEAPSECONDS)' \
  PACKRATDATA='$(PACKRATDATA)' \
- TZDIR=$(TZDIR) \
- YEARISTYPE=$(YEARISTYPE) \
+ TZDEFAULT='$(TZDEFAULT)' \
+ TZDIR='$(TZDIR)' \
+ YEARISTYPE='$(YEARISTYPE)' \
  ZIC='$(ZIC)'
 
 # 'make install_data' installs one set of tz binary files.
@@ -558,16 +596,16 @@ right_only:
 # You must replace all of $(TZDIR) to switch from not using leap seconds
 # to using them, or vice versa.
 right_posix:	right_only
-		rm -fr $(DESTDIR)$(TZDIR)-leaps
-		ln -s $(TZDIR_BASENAME) $(DESTDIR)$(TZDIR)-leaps || \
-		  $(MAKE) $(INSTALLARGS) TZDIR=$(TZDIR)-leaps right_only
-		$(MAKE) $(INSTALLARGS) TZDIR=$(TZDIR)-posix posix_only
+		rm -fr '$(DESTDIR)$(TZDIR)-leaps'
+		ln -s '$(TZDIR_BASENAME)' '$(DESTDIR)$(TZDIR)-leaps' || \
+		  $(MAKE) $(INSTALLARGS) TZDIR='$(TZDIR)-leaps' right_only
+		$(MAKE) $(INSTALLARGS) TZDIR='$(TZDIR)-posix' posix_only
 
 posix_right:	posix_only
-		rm -fr $(DESTDIR)$(TZDIR)-posix
-		ln -s $(TZDIR_BASENAME) $(DESTDIR)$(TZDIR)-posix || \
-		  $(MAKE) $(INSTALLARGS) TZDIR=$(TZDIR)-posix posix_only
-		$(MAKE) $(INSTALLARGS) TZDIR=$(TZDIR)-leaps right_only
+		rm -fr '$(DESTDIR)$(TZDIR)-posix'
+		ln -s '$(TZDIR_BASENAME)' '$(DESTDIR)$(TZDIR)-posix' || \
+		  $(MAKE) $(INSTALLARGS) TZDIR='$(TZDIR)-posix' posix_only
+		$(MAKE) $(INSTALLARGS) TZDIR='$(TZDIR)-leaps' right_only
 
 # This obsolescent rule is present for backwards compatibility with
 # tz releases 2014g through 2015g.  It should go away eventually.
@@ -633,7 +671,7 @@ check_character_set: $(ENCHILADA)
 			$(MISC) $(SOURCES) $(WEB_PAGES) \
 			CONTRIBUTING LICENSE Makefile README \
 			version tzdata.zi && \
-		! grep -Env $(SAFE_SHARP_LINE) $(TDATA) backzone \
+		! grep -Env $(SAFE_SHARP_LINE) $(TDATA_TO_CHECK) backzone \
 			leapseconds yearistype.sh zone.tab && \
 		! grep -Env $(OK_LINE) $(ENCHILADA); \
 	}
@@ -641,14 +679,16 @@ check_character_set: $(ENCHILADA)
 check_white_space: $(ENCHILADA)
 		patfmt=' \t|[\f\r\v]' && pat=`printf "$$patfmt\\n"` && \
 		! grep -En "$$pat" $(ENCHILADA)
-		! grep -n '[[:space:]]$$' $(ENCHILADA)
+		! grep -n '[[:space:]]$$' \
+			$$(ls $(ENCHILADA) | grep -Fvx leap-seconds.list)
 
 PRECEDES_FILE_NAME = ^(Zone|Link[[:space:]]+[^[:space:]]+)[[:space:]]+
 FILE_NAME_COMPONENT_TOO_LONG = \
   $(PRECEDES_FILE_NAME)[^[:space:]]*[^/[:space:]]{15}
 
-check_name_lengths: $(TDATA) backzone
-		! grep -En '$(FILE_NAME_COMPONENT_TOO_LONG)' $(TDATA) backzone
+check_name_lengths: $(TDATA_TO_CHECK) backzone
+		! grep -En '$(FILE_NAME_COMPONENT_TOO_LONG)' \
+			$(TDATA_TO_CHECK) backzone
 
 CHECK_CC_LIST = { n = split($$1,a,/,/); for (i=2; i<=n; i++) print a[1], a[i]; }
 
@@ -662,8 +702,8 @@ check_sorted: backward backzone iso3166.
 		$(AWK) '/^[^#]/ $(CHECK_CC_LIST)' zone1970.tab | \
 		  LC_ALL=C sort -cu
 
-check_links:	checklinks.awk $(TDATA)
-		$(AWK) -f checklinks.awk $(TDATA)
+check_links:	checklinks.awk $(TDATA_TO_CHECK)
+		$(AWK) -f checklinks.awk $(TDATA_TO_CHECK)
 		$(AWK) -f checklinks.awk tzdata.zi
 
 check_tables:	checktab.awk $(PRIMARY_YDATA) $(ZONETABLES)
@@ -764,12 +804,12 @@ set-timestamps.out: $(ENCHILADA)
 
 check_public:
 		$(MAKE) maintainer-clean
-		$(MAKE) "CFLAGS=$(GCC_DEBUG_FLAGS)" ALL
+		$(MAKE) CFLAGS='$(GCC_DEBUG_FLAGS)' ALL
 		mkdir -p public.dir
-		for i in $(TDATA) tzdata.zi; do \
+		for i in $(TDATA_TO_CHECK) tzdata.zi; do \
 		  $(zic) -v -d public.dir $$i 2>&1 || exit; \
 		done
-		$(zic) -v -d public.dir $(TDATA)
+		$(zic) -v -d public.dir $(TDATA_TO_CHECK)
 		rm -fr public.dir
 
 # Check that the code works under various alternative
@@ -790,8 +830,11 @@ check_time_t_alternatives:
 		    REDO='$(REDO)' \
 		    install && \
 		  diff $$quiet_option -r \
-		    time_t.dir/int64_t/etc/zoneinfo \
-		    time_t.dir/$$type/etc/zoneinfo && \
+		    time_t.dir/int64_t/etc \
+		    time_t.dir/$$type/etc && \
+		  diff $$quiet_option -r \
+		    time_t.dir/int64_t/usr/share \
+		    time_t.dir/$$type/usr/share && \
 		  case $$type in \
 		  int32_t) range=-2147483648,2147483647;; \
 		  uint32_t) range=0,4294967296;; \
@@ -800,9 +843,9 @@ check_time_t_alternatives:
 		  *) range=-10000000000,10000000000;; \
 		  esac && \
 		  echo checking $$type zones ... && \
-		  time_t.dir/int64_t/etc/zdump -V -t $$range $$zones \
+		  time_t.dir/int64_t/usr/bin/zdump -V -t $$range $$zones \
 		      >time_t.dir/int64_t.out && \
-		  time_t.dir/$$type/etc/zdump -V -t $$range $$zones \
+		  time_t.dir/$$type/usr/bin/zdump -V -t $$range $$zones \
 		      >time_t.dir/$$type.out && \
 		  diff -u time_t.dir/int64_t.out time_t.dir/$$type.out \
 		    || exit; \

Index: src/lib/libc/time/NEWS
diff -u src/lib/libc/time/NEWS:1.22 src/lib/libc/time/NEWS:1.23
--- src/lib/libc/time/NEWS:1.22	Tue Oct 24 13:38:17 2017
+++ src/lib/libc/time/NEWS	Thu Jan 25 17:48:42 2018
@@ -1,5 +1,147 @@
 News for the tz database
 
+Release 2018c - 2018-01-22 23:00:44 -0800
+
+  Briefly:
+  Revert Irish changes that relied on negative DST offsets.
+
+  Changes to tm_isdst
+
+    Revert the 2018a change to Europe/Dublin.  As before, this change
+    does not affect UT offsets or abbreviations; it affects only
+    whether timestamps are considered to be standard time or
+    daylight-saving time, as expressed in the tm_isdst flag of C's
+    struct tm type.  This reversion is intended to be a temporary
+    workaround for problems discovered with downstream uses of
+    releases 2018a and 2018b, which implemented Irish time by using
+    negative DST offsets in the Eire rules of the 'europe' file.
+    Although negative DST offsets have been part of tzcode for many
+    years and are supported by many platforms, they were not
+    documented before 2018a and ICU and OpenJDK do not currently
+    support them.  A mechanism to export data to platforms lacking
+    support for negative DST is planned to be developed before the
+    change is reapplied.  (Problems reported by Deborah Goldsmith and
+    Stephen Colebourne.)
+
+  Changes to past time stamps
+
+    Japanese DST transitions (1948-1951) were Sundays at 00:00, not
+    Saturdays or Sundays at 02:00.  (Thanks to Takayuki Nikai.)
+
+  Changes to build procedure
+
+    The build procedure now works around mawk 1.3.3's lack of support
+    for character class expressions.  (Problem reported by Ohyama.)
+
+
+Release 2018b - 2018-01-17 23:24:48 -0800
+
+  Briefly:
+  Fix a packaging problem in tz2018a, which was missing 'pacificnew'.
+
+  Changes to build procedure
+
+    The distribution now contains the file 'pacificnew' again.
+    This file was inadvertantly omitted in the 2018a distribution.
+    (Problem reported by Matias Fonzo.)
+
+
+Release 2018a - 2018-01-12 22:29:21 -0800
+
+  Briefly:
+  São Tomé and Príncipe switched from +00 to +01.
+  Brazil's DST will now start on November's first Sunday.
+  Ireland's standard time is now in the summer, not the winter.
+  Use Debian-style installation locations, instead of 4.3BSD-style.
+  New zic option -t.
+
+  Changes to past and future time stamps
+
+    São Tomé and Príncipe switched from +00 to +01 on 2018-01-01 at
+    01:00.  (Thanks to Steffen Thorsen and Michael Deckers.)
+
+  Changes to future time stamps
+
+    Starting in 2018 southern Brazil will begin DST on November's
+    first Sunday instead of October's third Sunday.  (Thanks to
+    Steffen Thorsen.)
+
+  Changes to past time stamps
+
+    A discrepancy of 4 s in timestamps before 1931 in South Sudan has
+    been corrected.  The 'backzone' and 'zone.tab' files did not agree
+    with the 'africa' and 'zone1970.tab' files.  (Problem reported by
+    Michael Deckers.)
+
+    The abbreviation invented for Bolivia Summer Time (1931-2) is now
+    BST instead of BOST, to be more consistent with the convention
+    used for Latvian Summer Time (1918-9) and for British Summer Time.
+
+  Changes to tm_isdst
+
+    Change Europe/Dublin so that it observes Irish Standard Time (UT
+    +01) in summer and GMT (as negative daylight-saving) in winter,
+    instead of observing standard time (GMT) in winter and Irish
+    Summer Time (UT +01) in summer.  This change does not affect UT
+    offsets or abbreviations; it affects only whether timestamps are
+    considered to be standard time or daylight-saving time, as
+    expressed in the tm_isdst flag of C's struct tm type.
+    (Discrepancy noted by Derick Rethans.)
+
+  Changes to build procedure
+
+    The default installation locations have been changed to mostly
+    match Debian circa 2017, instead of being designed as an add-on to
+    4.3BSD circa 1986.  This affects the Makefile macros TOPDIR,
+    TZDIR, MANDIR, and LIBDIR.  New Makefile macros TZDEFAULT, USRDIR,
+    USRSHAREDIR, BINDIR, ZDUMPDIR, and ZICDIR let installers tailor
+    locations more precisely.  (This responds to suggestions from
+    Brian Inglis and from Steve Summit.)
+
+    The default installation procedure no longer creates the
+    backward-compatibility link US/Pacific-New, which causes
+    confusion during user setup (e.g., see Debian bug 815200).
+    Use 'make BACKWARD="backward pacificnew"' to create the link
+    anyway, for now.  Eventually we plan to remove the link entirely.
+
+    tzdata.zi now contains a version-number comment.
+    (Suggested by Tom Lane.)
+
+    The Makefile now quotes values like BACKWARD more carefully when
+    passing them to the shell.  (Problem reported by Zefram.)
+
+    Builders no longer need to specify -DHAVE_SNPRINTF on platforms
+    that have snprintf and use pre-C99 compilers.  (Problem reported
+    by Jon Skeet.)
+
+  Changes to code
+
+    zic has a new option -t FILE that specifies the location of the
+    file that determines local time when TZ is unset.  The default for
+    this location can be configured via the new TZDEFAULT makefile
+    macro, which defaults to /etc/localtime.
+
+    Diagnostics and commentary now distinguish UT from UTC more
+    carefully; see theory.html for more information about UT vs UTC.
+
+    zic has been ported to GCC 8's -Wstringop-truncation option.
+    (Problem reported by Martin Sebor.)
+
+  Changes to documentation and commentary
+
+    The zic man page now documents the longstanding behavior that
+    times and years can be out of the usual range, with negative times
+    counting backwards from midnight and with year 0 preceding year 1.
+    (Problem reported by Michael Deckers.)
+
+    The theory.html file now mentions the POSIX limit of six chars
+    per abbreviation, and lists alphabetic abbreviations used.
+
+    The files tz-art.htm and tz-link.htm have been renamed to
+    tz-art.html and tz-link.html, respectively, for consistency with
+    other file names and to simplify web server configuration.
+
+
 Release 2017c - 2017-10-20 14:49:34 -0700
 
   Briefly:
@@ -895,8 +1037,8 @@ Release 2015f - 2015-08-10 18:06:56 -070
     (Thanks to Jon Skeet and Arthur David Olson.)  Constraints on
     simultaneity are now documented.
 
-    The two characters '%z' in a zone format now stand for the UTC
-    offset, e.g., '-07' for seven hours behind UTC and '+0530' for
+    The two characters '%z' in a zone format now stand for the UT
+    offset, e.g., '-07' for seven hours behind UT and '+0530' for
     five hours and thirty minutes ahead.  This better supports time
     zone abbreviations conforming to POSIX.1-2001 and later.
 
@@ -1019,13 +1161,13 @@ Release 2015c - 2015-04-11 08:55:55 -070
       The spring 1988 transition was 1988-10-09, not 1988-10-02.
       The fall 1990 transition was 1990-03-11, not 1990-03-18.
 
-      Assume no UTC offset change for Pacific/Easter on 1890-01-01,
+      Assume no UT offset change for Pacific/Easter on 1890-01-01,
       and omit all transitions on Pacific/Easter from 1942 through 1946
       since we have no data suggesting that they existed.
 
     One more zone has been turned into a link, as it differed
     from an existing zone only for older time stamps.  As usual,
-    this change affects UTC offsets in pre-1970 time stamps only.
+    this change affects UT offsets in pre-1970 time stamps only.
     The zone's old contents have been moved to the 'backzone' file.
     The affected zone is America/Montreal.
 
@@ -1055,7 +1197,7 @@ Release 2015b - 2015-03-19 23:28:11 -070
 
     Some more zones have been turned into links, when they differed
     from existing zones only for older time stamps.  As usual,
-    these changes affect UTC offsets in pre-1970 time stamps only.
+    these changes affect UT offsets in pre-1970 time stamps only.
     Their old contents have been moved to the 'backzone' file.
     The affected zones are: America/Antigua, America/Cayman,
     Pacific/Midway, and Pacific/Saipan.
@@ -1107,7 +1249,7 @@ Release 2015a - 2015-01-29 22:35:20 -080
 
     Some more zones have been turned into links, when they differed
     from existing zones only for older time stamps.  As usual,
-    these changes affect UTC offsets in pre-1970 time stamps only.
+    these changes affect UT offsets in pre-1970 time stamps only.
     Their old contents have been moved to the 'backzone' file.
     The affected zones are: Asia/Aden, Asia/Bahrain, Asia/Kuwait,
     and Asia/Muscat.
@@ -1154,7 +1296,7 @@ Release 2014j - 2014-11-10 17:37:11 -080
 
     Some more zones have been turned into links, when they differed
     from existing zones only for older time stamps.  As usual,
-    these changes affect UTC offsets in pre-1970 time stamps only.
+    these changes affect UT offsets in pre-1970 time stamps only.
     Their old contents have been moved to the 'backzone' file.
     The affected zones are: Africa/Addis_Ababa, Africa/Asmara,
     Africa/Dar_es_Salaam, Africa/Djibouti, Africa/Kampala,
@@ -1244,7 +1386,7 @@ Release 2014h - 2014-09-25 18:59:03 -070
 
     Some more zones have been turned into links, when they differed
     from existing zones only for older timestamps.  As usual,
-    these changes affect UTC offsets in pre-1970 timestamps only.
+    these changes affect UT offsets in pre-1970 timestamps only.
     Their old contents have been moved to the 'backzone' file.
     The affected zones are: Africa/Blantyre, Africa/Bujumbura,
     Africa/Gaborone, Africa/Harare, Africa/Kigali, Africa/Lubumbashi,
@@ -1329,7 +1471,7 @@ Release 2014g - 2014-08-28 12:31:23 -070
 
     Some more zones have been turned into links, when they differed
     from existing zones only for older timestamps.  As usual,
-    these changes affect UTC offsets in pre-1970 timestamps only.
+    these changes affect UT offsets in pre-1970 timestamps only.
     Their old contents have been moved to the 'backzone' file.
     The affected zones are: Africa/Bangui, Africa/Brazzaville,
     Africa/Douala, Africa/Kinshasa, Africa/Libreville, Africa/Luanda,
@@ -1479,7 +1621,7 @@ Release 2014f - 2014-08-05 17:42:36 -070
     standard and daylight saving time the abbreviations are AEST and AEDT
     instead of the former EST for both; similarly, ACST/ACDT, ACWST/ACWDT,
     and AWST/AWDT are now used instead of the former CST, CWST, and WST.
-    This change does not affect UTC offsets, only time zone abbreviations.
+    This change does not affect UT offsets, only time zone abbreviations.
     (Thanks to Rich Tibbett and many others.)
 
     Asia/Novokuznetsk shifts from NOVT to KRAT (remaining on UT +07)
@@ -1516,8 +1658,8 @@ Release 2014f - 2014-08-05 17:42:36 -070
     Treindl sent helpful translations of two papers by Guo Qingsheng.)
 
     Some zones have been turned into links, when they differed from existing
-    zones only for older UTC offsets where data entries were likely invented.
-    These changes affect UTC offsets in pre-1970 timestamps only.  This is
+    zones only for older UT offsets where data entries were likely invented.
+    These changes affect UT offsets in pre-1970 timestamps only.  This is
     similar to the change in release 2013e, except this time for western
     Africa.  The affected zones are: Africa/Bamako, Africa/Banjul,
     Africa/Conakry, Africa/Dakar, Africa/Freetown, Africa/Lome,

Index: src/lib/libc/time/README
diff -u src/lib/libc/time/README:1.12 src/lib/libc/time/README:1.13
--- src/lib/libc/time/README:1.12	Sat Mar 11 13:23:14 2017
+++ src/lib/libc/time/README	Thu Jan 25 17:48:42 2018
@@ -11,14 +11,14 @@ changes made by political bodies to time
 and daylight-saving rules.
 
 See <https://www.iana.org/time-zones/repository/tz-link.html> or the
-file tz-link.htm for how to acquire the code and data.  Once acquired,
+file tz-link.html for how to acquire the code and data.  Once acquired,
 read the comments in the file 'Makefile' and make any changes needed
 to make things right for your system, especially if you are using some
 platform other than GNU/Linux.  Then run the following commands,
 substituting your desired installation directory for "$HOME/tzdir":
 
 	make TOPDIR=$HOME/tzdir install
-	$HOME/tzdir/etc/zdump -v America/Los_Angeles
+	$HOME/tzdir/usr/bin/zdump -v America/Los_Angeles
 
 Historical local time information has been included here to:
 

Index: src/lib/libc/time/ctime.3
diff -u src/lib/libc/time/ctime.3:1.55 src/lib/libc/time/ctime.3:1.56
--- src/lib/libc/time/ctime.3:1.55	Tue Oct 24 13:38:17 2017
+++ src/lib/libc/time/ctime.3	Thu Jan 25 17:48:42 2018
@@ -1,8 +1,8 @@
-.\" $NetBSD: ctime.3,v 1.55 2017/10/24 17:38:17 christos Exp $
+.\" $NetBSD: ctime.3,v 1.56 2018/01/25 22:48:42 christos Exp $
 .\"
 .\" XXX: License missing?
 .\"
-.Dd October 24, 2017
+.Dd January 25, 2018
 .Dt CTIME 3
 .Os
 .Sh NAME
@@ -163,7 +163,7 @@ If
 .Fa zone
 is
 .Dv NULL ,
-UTC is used; otherwise,
+UT is used; otherwise,
 .Fa zone
 should have been allocated by
 .Fn tzalloc
@@ -444,6 +444,8 @@ function returns string containing the n
 local time zone file
 .It Pa /usr/share/zoneinfo
 time zone information directory
+.\" .It Pa usr/share/zoneinfo/localtime
+.\" local time zone file
 .It Pa /usr/share/zoneinfo/posixrules
 used with POSIX-style TZ's
 .It Pa /usr/share/zoneinfo/GMT

Index: src/lib/libc/time/localtime.c
diff -u src/lib/libc/time/localtime.c:1.110 src/lib/libc/time/localtime.c:1.111
--- src/lib/libc/time/localtime.c:1.110	Fri Oct 27 04:43:11 2017
+++ src/lib/libc/time/localtime.c	Thu Jan 25 17:48:42 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: localtime.c,v 1.110 2017/10/27 08:43:11 kre Exp $	*/
+/*	$NetBSD: localtime.c,v 1.111 2018/01/25 22:48:42 christos Exp $	*/
 
 /*
 ** This file is in the public domain, so clarified as of
@@ -10,7 +10,7 @@
 #if 0
 static char	elsieid[] = "@(#)localtime.c	8.17";
 #else
-__RCSID("$NetBSD: localtime.c,v 1.110 2017/10/27 08:43:11 kre Exp $");
+__RCSID("$NetBSD: localtime.c,v 1.111 2018/01/25 22:48:42 christos Exp $");
 #endif
 #endif /* LIBC_SCCS and not lint */
 
@@ -2116,7 +2116,7 @@ again:
 			   && ((/*CONSTCOND*/BIGGEST (INT_FAST32_MIN, LONG_MIN)
 				+ yourtm.TM_GMTOFF)
 			       <= mytm.TM_GMTOFF)))) {
-		  /* MYTM matches YOURTM except with the wrong UTC offset.
+		  /* MYTM matches YOURTM except with the wrong UT offset.
 		     YOURTM.TM_GMTOFF is plausible, so try it instead.
 		     It's OK if YOURTM.TM_GMTOFF contains uninitialized data,
 		     since the guess gets checked.  */

Index: src/lib/libc/time/theory.html
diff -u src/lib/libc/time/theory.html:1.1 src/lib/libc/time/theory.html:1.2
--- src/lib/libc/time/theory.html:1.1	Tue Oct 24 13:38:17 2017
+++ src/lib/libc/time/theory.html	Thu Jan 25 17:48:42 2018
@@ -52,6 +52,10 @@ However, the database is not designed fo
 applications requiring accurate handling of all past times everywhere,
 as it would take far too much effort and guesswork to record all
 details of pre-1970 civil timekeeping.
+Athough some information outside the scope of the database is
+collected in a file <code>backzone</code> that is distributed along
+with the database proper, this file is less reliable and does not
+necessarily follow database guidelines.
 </p>
 
 <p>
@@ -240,7 +244,7 @@ to name time
 zone rules.  It is intended to be an exhaustive list of names for
 geographic regions as described above; this is a subset of the names
 in the data.  Although a '<code>zone1970.tab</code>' location's longitude
-corresponds to its LMT offset with one hour for every 15 degrees east
+corresponds to its LMT offset with one hour for every 15&deg; east
 longitude, this relationship is not exact.
 </p>
 
@@ -279,7 +283,7 @@ Here are the general rules used for choo
 in decreasing order of importance:
 <ul>
   <li>
-	Use three or more characters that are ASCII alphanumerics or
+	Use three to six characters that are ASCII alphanumerics or
 		'<code>+</code>' or '<code>-</code>'.
 		Previous editions of this database also used characters like
 		'<code> </code>' and '<code>?</code>', but these
@@ -297,7 +301,7 @@ in decreasing order of importance:
 		'<code>+</code>' and '<code>-</code>' are safe in all locales.
 
 		In other words, in the C locale the POSIX extended regular
-		expression <code>[-+[:alnum:]]{3,}</code> should match
+		expression <code>[-+[:alnum:]]{3,6}</code> should match
 		the abbreviation.
 		This guarantees that all abbreviations could have been
 		specified by a POSIX TZ string.
@@ -308,12 +312,96 @@ in decreasing order of importance:
 		We assume that applications translate them to other languages
 		as part of the normal localization process; for example,
 		a French application might translate 'EST' to 'HNE'.
+
+<p><small>These abbreviations (for standard/daylight/etc. time) are:
+ACST/ACDT Australian Central,
+AST/ADT/APT/AWT/ADDT Atlantic,
+AEST/AEDT Australian Eastern,
+AHST/AHDT Alaska-Hawaii,
+AKST/AKDT Alaska,
+AWST/AWDT Australian Western,
+BST/BDT Bering,
+CAT/CAST Central Africa,
+CET/CEST/CEMT Central European,
+ChST Chamorro,
+CST/CDT/CWT/CPT/CDDT Central [North America],
+CST/CDT China,
+GMT/BST/IST/BDST Greenwich,
+EAT East Africa,
+EST/EDT/EWT/EPT/EDDT Eastern [North America],
+EET/EEST Eastern European,
+GST Guam,
+HST/HDT Hawaii,
+HKT/HKST Hong Kong,
+IST India,
+IST/GMT Irish,
+IST/IDT/IDDT Israel,
+JST/JDT Japan,
+KST/KDT Korea,
+MET/MEST Middle European (a backward-compatibility alias for Central European),
+MSK/MSD Moscow,
+MST/MDT/MWT/MPT/MDDT Mountain,
+NST/NDT/NWT/NPT/NDDT Newfoundland,
+NST/NDT/NWT/NPT Nome,
+NZMT/NZST New Zealand through 1945,
+NZST/NZDT New Zealand 1946&ndash;present,
+PKT/PKST Pakistan,
+PST/PDT/PWT/PPT/PDDT Pacific,
+SAST South Africa,
+SST Samoa,
+WAT/WAST West Africa,
+WET/WEST/WEMT Western European,
+WIB Waktu Indonesia Barat,
+WIT Waktu Indonesia Timur,
+WITA Waktu Indonesia Tengah,
+YST/YDT/YWT/YPT/YDDT Yukon</small>.</p>
   </li>
   <li>
 	For zones whose times are taken from a city's longitude, use the
-		traditional <var>x</var>MT notation, e.g. 'PMT' for
-		Paris Mean Time.
-		The only name like this in current use is 'GMT'.
+traditional <var>x</var>MT notation. The only abbreviation like this
+in current use is 'GMT'. The others are for timestamps before 1960,
+except that Monrovia Mean Time persisted until 1972. Typically,
+numeric abbreviations (e.g., '<code>-</code>004430' for MMT) would
+cause trouble here, as the numeric strings would exceed the POSIX length limit.
+
+<p><small>These abbreviations are:
+AMT Amsterdam, Asunción, Athens;
+BMT Baghdad, Bangkok, Batavia, Bern, Bogotá, Bridgetown, Brussels, Bucharest;
+CMT Calamarca, Caracas, Chisinau, Colón, Copenhagen, Córdoba;
+DMT Dublin/Dunsink;
+EMT Easter;
+FFMT Fort-de-France;
+FMT Funchal;
+GMT Greenwich;
+HMT Havana, Helsinki, Horta, Howrah;
+IMT Irkutsk, Istanbul;
+JMT Jerusalem;
+KMT Kaunas, Kiev, Kingston;
+LMT Lima, Lisbon, local, Luanda;
+MMT Macassar, Madras, Malé, Managua, Minsk, Monrovia, Montevideo, Moratuwa,
+ Moscow;
+PLMT Phù Liễn;
+PMT Paramaribo, Paris, Perm, Pontianak, Prague;
+PMMT Port Moresby;
+QMT Quito;
+RMT Rangoon, Riga, Rome;
+SDMT Santo Domingo;
+SJMT San José;
+SMT Santiago, Simferopol, Singapore, Stanley;
+TBMT Tbilisi;
+TMT Tallinn, Tehran;
+WMT Warsaw</small>.</p>
+
+<p><small>A few abbreviations also follow the pattern that
+GMT/BST established for time in the UK. They are:
+
+CMT/BST for Calamarca Mean Time and Bolivian Summer Time
+1890&ndash;1932, DMT/IST for Dublin/Dunsink Mean Time and Irish Summer Time
+1880&ndash;1916, MMT/MST/MDST for Moscow 1880&ndash;1919, and RMT/LST
+for Riga Mean Time and Latvian Summer time 1880&ndash;1926.
+An extra-special case is SET for Swedish Time (<em>svensk
+normaltid</em>) 1879&ndash;1899, 3&deg; west of the Stockholm
+Observatory.</small></p>
   </li>
   <li>
 	Use 'LMT' for local mean time of locations before the introduction
@@ -340,32 +428,6 @@ in decreasing order of importance:
 		history tends to use numeric abbreviations and a particular
 		entry could go either way, use a numeric abbreviation.
   </li>
-</ul>
-    [The remaining guidelines predate the introduction of <code>%z</code>.
-    They are problematic as they mean tz data entries invent
-    notation rather than record it.  These guidelines are now
-    deprecated and the plan is to gradually move to <code>%z</code> for
-    inhabited locations and to "<code>-</code>00" for uninhabited locations.]
-<ul>
-  <li>
-	If there is no common English abbreviation, abbreviate the English
-		translation of the usual phrase used by native speakers.
-		If this is not available or is a phrase mentioning the country
-		(e.g. "Cape Verde Time"), then:
-	<ul>
-	  <li>
-		When a country is identified with a single or principal zone,
-			append 'T' to the country's ISO	code, e.g. 'CVT' for
-			Cape Verde Time.  For summer time append 'ST';
-			for double summer time append 'DST'; etc.
-	  </li>
-	  <li>
-		Otherwise, take the first three letters of an English place
-			name identifying each zone and append 'T', 'ST', etc.
-			as before; e.g. 'CHAST' for CHAtham Summer Time.
-	  </li>
-	</ul>
-  </li>
   <li>
 	Use UT (with time zone abbreviation '<code>-</code>00') for
 		locations while uninhabited.  The leading
@@ -376,10 +438,10 @@ in decreasing order of importance:
 </ul>
 <p>
 Application writers should note that these abbreviations are ambiguous
-in practice: e.g. 'CST' has a different meaning in China than
-it does in the United States.  In new applications, it's often better
-to use numeric UT offsets like '<code>-</code>0600' instead of time zone
-abbreviations like 'CST'; this avoids the ambiguity.
+in practice: e.g., 'CST' means one thing in China and something else
+in North America, and 'IST' can refer to time in India, Ireland or
+Israel. To avoid ambiguity, use numeric UT offsets like
+'<code>-</code>0600' instead of time zone abbreviations like 'CST'.
 </p>
   </section>
 
@@ -388,7 +450,7 @@ abbreviations like 'CST'; this avoids th
     <h2 id="accuracy">Accuracy of the tz database</h2>
 <p>
 The tz database is not authoritative, and it surely has errors.
-Corrections are welcome and encouraged; see the file CONTRIBUTING.
+Corrections are welcome and encouraged; see the file <code>CONTRIBUTING</code>.
 Users requiring authoritative data should consult national standards
 bodies and the references cited in the database's comments.
 </p>
@@ -598,7 +660,7 @@ POSIX has the following properties and l
 		and daylight saving time (DST) zone names.
 		Starting with POSIX.1-2001, <var>std</var>
 		and <var>dst</var> may also be
-		in a quoted form like '<code>&lt;UTC+10&gt;</code>'; this allows
+		in a quoted form like '<code>&lt;+09&gt;</code>'; this allows
 		"<code>+</code>" and "<code>-</code>" in the names.
       </dd>
       <dt><var>offset</var></dt><dd>
@@ -646,7 +708,7 @@ POSIX has the following properties and l
 </dd>
 </dl>
 	Here is an example POSIX TZ string for New Zealand after 2007.
-	It says that standard time (NZST) is 12 hours ahead of UTC,
+	It says that standard time (NZST) is 12 hours ahead of UT,
 	and that daylight saving time (NZDT) is observed from September's
 	last Sunday at 02:00 until April's first Sunday at 03:00:
 
@@ -678,7 +740,7 @@ POSIX has the following properties and l
 	applications that an administrator wants used only at certain
 	times &ndash;
 	without regard to whether the user has fiddled the TZ environment
-	variable.  While an administrator can "do everything in UTC" to get
+	variable.  While an administrator can "do everything in UT" to get
 	around the problem, doing so is inconvenient and precludes handling
 	daylight saving time shifts - as might be required to limit phone
 	calls to off-peak hours.)
@@ -902,7 +964,7 @@ Interface changes in a release attempt t
 recent releases.  For example, tz data files typically do not rely on
 recently-added <code>zic</code> features, so that users can run
 older <code>zic</code> versions to process newer data
-files.  <a href="tz-link.htm">Sources for time zone and daylight
+files.  <a href="tz-link.html">Sources for time zone and daylight
 saving time data</a> describes how
 releases are tagged and distributed.
 </p>
@@ -1003,7 +1065,7 @@ Sources:
 Michael Allison and Robert Schmunk,
 "<a href="https://www.giss.nasa.gov/tools/mars24/help/notes.html";>Technical
 Notes on Mars Solar Time as Adopted by the Mars24 Sunclock</a>"
-(2012-08-08).
+(2015-06-30).
   </li>
   <li>
 Jia-Rui Chong,

Index: src/lib/libc/time/tz-how-to.html
diff -u src/lib/libc/time/tz-how-to.html:1.3 src/lib/libc/time/tz-how-to.html:1.4
--- src/lib/libc/time/tz-how-to.html:1.3	Tue Oct 24 13:38:17 2017
+++ src/lib/libc/time/tz-how-to.html	Thu Jan 25 17:48:42 2018
@@ -12,7 +12,7 @@ Database</a> Source Files</h2>
 <h3>by Bill Seymour</h3>
 <p>This page uses the <code>America/Chicago</code> and
 <code>Pacific/Honolulu</code> zones as examples of how to infer
-times of day from the <a href="tz-link.htm">tz database</a>
+times of day from the <a href="tz-link.html">tz database</a>
 source files. It might be helpful, but not absolutely necessary,
 for the reader to have already downloaded the
 latest release of the database and become familiar with the basic layout

Index: src/lib/libc/time/tzselect.8
diff -u src/lib/libc/time/tzselect.8:1.6 src/lib/libc/time/tzselect.8:1.7
--- src/lib/libc/time/tzselect.8:1.6	Fri Aug 15 07:04:07 2014
+++ src/lib/libc/time/tzselect.8	Thu Jan 25 17:48:42 2018
@@ -1,4 +1,4 @@
-.\"	$NetBSD: tzselect.8,v 1.6 2014/08/15 11:04:07 christos Exp $
+.\"	$NetBSD: tzselect.8,v 1.7 2018/01/25 22:48:42 christos Exp $
 .\"
 .TH TZSELECT 8
 .SH NAME
@@ -90,7 +90,7 @@ program (default:
 .TP
 \f3TZDIR\fP
 Name of the directory containing time zone data files (default:
-.BR /usr/local/etc/zoneinfo ).
+.BR /usr/share/zoneinfo ).
 .SH FILES
 .TP
 \f2TZDIR\fP\f3/iso3166.tab\fP

Index: src/lib/libc/time/tzselect.ksh
diff -u src/lib/libc/time/tzselect.ksh:1.16 src/lib/libc/time/tzselect.ksh:1.17
--- src/lib/libc/time/tzselect.ksh:1.16	Tue Oct 24 13:38:17 2017
+++ src/lib/libc/time/tzselect.ksh	Thu Jan 25 17:48:42 2018
@@ -1,6 +1,6 @@
 #! /bin/bash
 #
-#	$NetBSD: tzselect.ksh,v 1.16 2017/10/24 17:38:17 christos Exp $
+#	$NetBSD: tzselect.ksh,v 1.17 2018/01/25 22:48:42 christos Exp $
 #
 PKGVERSION='(tzcode) '
 TZVERSION=see_Makefile
@@ -344,8 +344,10 @@ while
 		while
 			echo >&2 'Please enter the desired value' \
 				'of the TZ environment variable.'
-			echo >&2 'For example, GST-10 is a zone named GST' \
-				'that is 10 hours ahead (east) of UTC.'
+			echo >&2 'For example, AEST-10 is a zone named AEST' \
+				'that is 10 hours'
+			echo >&2 'ahead (east) of Greenwich,' \
+				'with no daylight saving time.'
 			read TZ
 			$AWK -v TZ="$TZ" 'BEGIN {
 				tzname = "(<[[:alnum:]+-]{3,}>|[[:alpha:]]{3,})"

Index: src/lib/libc/time/tzset.3
diff -u src/lib/libc/time/tzset.3:1.36 src/lib/libc/time/tzset.3:1.37
--- src/lib/libc/time/tzset.3:1.36	Mon Jul  3 17:32:50 2017
+++ src/lib/libc/time/tzset.3	Thu Jan 25 17:48:42 2018
@@ -1,5 +1,5 @@
-.\"	$NetBSD: tzset.3,v 1.36 2017/07/03 21:32:50 wiz Exp $
-.Dd October 6, 2016
+.\"	$NetBSD: tzset.3,v 1.37 2018/01/25 22:48:42 christos Exp $
+.Dd January 25, 2018
 .Dt TZSET 3
 .Os
 .Sh NAME
@@ -116,7 +116,7 @@ If the implied call to
 .Fn tzalloc
 fails,
 .Fn tzset
-falls back on UTC.
+falls back on Universal Time (UT).
 If
 .Ev TZ
 is
@@ -131,7 +131,7 @@ is used by
 If
 .Ev TZ
 appears in the environment but its value is the empty string,
-Universal Time (UT) is used, with the abbreviation
+UT is used, with the abbreviation
 .Dq UTC
 and without leap second correction; please see
 .Xr ctime 3 .
@@ -335,19 +335,19 @@ extensions to POSIX.
 .Bl -tag
 .It EST5
 stands for US Eastern Standard
-Time (EST), 5 hours behind UTC, without daylight saving.
+Time (EST), 5 hours behind UT, without daylight saving.
 .It FJT\-12FJST,M11.1.0,M1.3.4/75
 stands for Fiji Time (FJT) and Fiji Summer Time (FJST), 12 hours ahead
-of UTC, springing forward on November's first Sunday at 02:00, and
+of UT, springing forward on November's first Sunday at 02:00, and
 falling back on January's third Thursday at 75:00 (i.e., 03:00 on the
 first Sunday on or after January 18).
 .It IST\-2IDT,M3.4.4/26,M10.5.0
 stands for Israel Standard Time (IST) and Israel Daylight Time (IDT),
-2 hours ahead of UTC, springing forward on March's fourth
+2 hours ahead of UT, springing forward on March's fourth
 Thursday at 26:00 (i.e., 02:00 on the first Friday on or after March
 23), and falling back on October's last Sunday at 02:00.
 .It WART4WARST,J1/0,J365/25
-stands for Western Argentina Summer Time (WARST), 3 hours behind UTC.
+stands for Western Argentina Summer Time (WARST), 3 hours behind UT.
 There is a dummy fall-back transition on December 31 at 25:00 daylight
 saving time (i.e., 24:00 standard time, equivalent to January 1 at
 00:00 standard time), and a simultaneous spring-forward transition on
@@ -357,9 +357,9 @@ all year and the initial
 is a placeholder.
 .It WGT3WGST,M3.5.0/\-2,M10.5.0/\-1
 stands for Western Greenland Time (WGT) and Western Greenland Summer
-Time (WGST), 3 hours behind UTC, where clocks follow the EU rules of
-springing forward on March's last Sunday at 01:00 UTC (\-02:00 local
-time) and falling back on October's last Sunday at 01:00 UTC
+Time (WGST), 3 hours behind UT, where clocks follow the EU rules of
+springing forward on March's last Sunday at 01:00 UT (\-02:00 local
+time) and falling back on October's last Sunday at 01:00 UT
 (\-01:00 local time).
 .El
 .Pp
@@ -373,7 +373,7 @@ format file
 .Pa posixrules
 in
 .Pa /usr/share/zoneinfo
-are used, with the standard and summer time offsets from UTC replaced
+are used, with the standard and summer time offsets from UT replaced
 by those specified by the
 .Cm offset
 values in
@@ -389,6 +389,8 @@ from the rest of the specification.
 local time zone file
 .It Pa /usr/share/zoneinfo
 time zone information directory
+\" .It Pa /usr/share/zoneinfo/localtime
+\" local time zone file
 .It Pa /usr/share/zoneinfo/posixrules
 used with POSIX-style TZ's
 .It Pa /usr/share/zoneinfo/GMT

Index: src/lib/libc/time/version
diff -u src/lib/libc/time/version:1.5 src/lib/libc/time/version:1.6
--- src/lib/libc/time/version:1.5	Tue Oct 24 13:38:17 2017
+++ src/lib/libc/time/version	Thu Jan 25 17:48:42 2018
@@ -1 +1 @@
-2017c
+2018c

Index: src/lib/libc/time/zdump.c
diff -u src/lib/libc/time/zdump.c:1.47 src/lib/libc/time/zdump.c:1.48
--- src/lib/libc/time/zdump.c:1.47	Tue Oct 24 13:38:17 2017
+++ src/lib/libc/time/zdump.c	Thu Jan 25 17:48:42 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: zdump.c,v 1.47 2017/10/24 17:38:17 christos Exp $	*/
+/*	$NetBSD: zdump.c,v 1.48 2018/01/25 22:48:42 christos Exp $	*/
 /*
 ** This file is in the public domain, so clarified as of
 ** 2009-05-17 by Arthur David Olson.
@@ -6,7 +6,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: zdump.c,v 1.47 2017/10/24 17:38:17 christos Exp $");
+__RCSID("$NetBSD: zdump.c,v 1.48 2018/01/25 22:48:42 christos Exp $");
 #endif /* !defined lint */
 
 /*
@@ -268,7 +268,7 @@ tzfree(timezone_t env)
 }
 #endif /* ! USE_LOCALTIME_RZ */
 
-/* A UTC time zone, and its initializer.  */
+/* A UT time zone, and its initializer.  */
 static timezone_t gmtz;
 static void
 gmtzinit(void)
@@ -282,7 +282,7 @@ gmtzinit(void)
 	}
 }
 
-/* Convert *TP to UTC, storing the broken-down time into *TMP.
+/* Convert *TP to UT, storing the broken-down time into *TMP.
    Return TMP if successful, NULL otherwise.  This is like gmtime_r(TP, TMP),
    except typically faster if USE_LOCALTIME_RZ.  */
 static struct tm *
@@ -552,6 +552,7 @@ main(int argc, char *argv[])
 		}
 		if (t < cutlotime)
 			t = cutlotime;
+		INITIALIZE (ab);
 		tm_ok = my_localtime_rz(tz, &t, &tm) != NULL;
 		if (tm_ok) {
 			ab = saveabbr(&abbrev, &abbrevsize, &tm);
@@ -567,11 +568,10 @@ main(int argc, char *argv[])
 			    ? t + SECSPERDAY / 2 : cuthitime);
 			struct tm *newtmp = localtime_rz(tz, &newt, &newtm);
 			bool newtm_ok = newtmp != NULL;
-			if (! (tm_ok & newtm_ok
-			    ? (delta(&newtm, &tm) == newt - t
-			    && newtm.tm_isdst == tm.tm_isdst
-			    && strcmp(abbr(&newtm), ab) == 0)
-			    : tm_ok == newtm_ok)) {
+			if (tm_ok != newtm_ok
+			    || (tm_ok && (delta(&newtm, &tm) != newt - t
+					  || newtm.tm_isdst != tm.tm_isdst
+					  || strcmp(abbr(&newtm), ab) != 0))) {
 				newt = hunt(tz, argv[i], t, newt);
 				newtmp = localtime_rz(tz, &newt, &newtm);
 				newtm_ok = newtmp != NULL;
@@ -733,8 +733,8 @@ adjusted_yday(struct tm const *a, struct
 }
 #endif
 
-/* If A is the broken-down local time and B the broken-down UTC for
-   the same instant, return A's UTC offset in seconds, where positive
+/* If A is the broken-down local time and B the broken-down UT for
+   the same instant, return A's UT offset in seconds, where positive
    offsets are east of Greenwich.  On failure, return LONG_MIN.
 
    If T is nonnull, *T is the timestamp that corresponds to A; call
@@ -798,12 +798,14 @@ show(timezone_t tz, char *zone, time_t t
 		abbrok(abbr(tmp), zone);
 }
 
-#if !HAVE_SNPRINTF
+#if HAVE_SNPRINTF
+# define my_snprintf snprintf
+#else
 # include <stdarg.h>
 
 /* A substitute for snprintf that is good enough for zdump.  */
-static int
-snprintf(char *s, size_t size, char const *format, ...)
+static int ATTRIBUTE_FORMAT((printf, 3, 4))
+my_snprintf(char *s, size_t size, char const *format, ...)
 {
   int n;
   va_list args;
@@ -842,16 +844,16 @@ format_local_time(char *buf, size_t size
 {
   int ss = tm->tm_sec, mm = tm->tm_min, hh = tm->tm_hour;
   return (ss
-	  ? snprintf(buf, size, "%02d:%02d:%02d", hh, mm, ss)
+	  ? my_snprintf(buf, size, "%02d:%02d:%02d", hh, mm, ss)
 	  : mm
-	  ? snprintf(buf, size, "%02d:%02d", hh, mm)
-	  : snprintf(buf, size, "%02d", hh));
+	  ? my_snprintf(buf, size, "%02d:%02d", hh, mm)
+	  : my_snprintf(buf, size, "%02d", hh));
 }
 
-/* Store into BUF, of size SIZE, a formatted UTC offset for the
+/* Store into BUF, of size SIZE, a formatted UT offset for the
    localtime *TM corresponding to time T.  Use ISO 8601 format
    +HHMMSS, or -HHMMSS for timestamps west of Greenwich; use the
-   format -00 for unknown UTC offsets.  If the hour needs more than
+   format -00 for unknown UT offsets.  If the hour needs more than
    two digits to represent, extend the length of HH as needed.
    Otherwise, omit SS if SS is zero, and omit MM too if MM is also
    zero.
@@ -880,10 +882,10 @@ format_utc_offset(char *buf, size_t size
   mm = off / 60 % 60;
   hh = off / 60 / 60;
   return (ss || 100 <= hh
-	  ? snprintf(buf, size, "%c%02ld%02d%02d", sign, hh, mm, ss)
+	  ? my_snprintf(buf, size, "%c%02ld%02d%02d", sign, hh, mm, ss)
 	  : mm
-	  ? snprintf(buf, size, "%c%02ld%02d", sign, hh, mm)
-	  : snprintf(buf, size, "%c%02ld", sign, hh));
+	  ? my_snprintf(buf, size, "%c%02ld%02d", sign, hh, mm)
+	  : my_snprintf(buf, size, "%c%02ld", sign, hh));
 }
 
 /* Store into BUF (of size SIZE) a quoted string representation of P.
@@ -926,7 +928,7 @@ format_quoted_string(char *buf, size_t s
 
    %f zone name
    %L local time as per format_local_time
-   %Q like "U\t%Z\tD" where U is the UTC offset as for format_utc_offset
+   %Q like "U\t%Z\tD" where U is the UT offset as for format_utc_offset
       and D is the isdst flag; except omit D if it is zero, omit %Z if
       it equals U, quote and escape %Z if it contains nonalphabetics,
       and omit any trailing tabs.  */
@@ -986,15 +988,16 @@ istrftime(char *buf, size_t size, char c
 	    for (abp = ab; is_alpha(*abp); abp++)
 	      continue;
 	    len = (!*abp && *ab
-		   ? (size_t)snprintf(b, s, "%s", ab)
+		   ? (size_t)my_snprintf(b, s, "%s", ab)
 		   : format_quoted_string(b, s, ab));
 	    if (s <= len)
 	      return false;
 	    b += len, s -= len;
 	  }
-	  formatted_len = (tm->tm_isdst
-			   ? snprintf(b, s, &"\t\t%d"[show_abbr], tm->tm_isdst)
-			   : 0);
+	  formatted_len
+	    = (tm->tm_isdst
+	       ? my_snprintf(b, s, &"\t\t%d"[show_abbr], tm->tm_isdst)
+	       : 0);
 	}
 	break;
       }

Index: src/lib/libc/time/zic.8
diff -u src/lib/libc/time/zic.8:1.27 src/lib/libc/time/zic.8:1.28
--- src/lib/libc/time/zic.8:1.27	Tue Oct 24 13:38:17 2017
+++ src/lib/libc/time/zic.8	Thu Jan 25 17:48:42 2018
@@ -1,5 +1,5 @@
-.\"	$NetBSD: zic.8,v 1.27 2017/10/24 17:38:17 christos Exp $
-.Dd October 24, 2017
+.\"	$NetBSD: zic.8,v 1.28 2018/01/25 22:48:42 christos Exp $
+.Dd January 25, 2018
 .Dt ZIC 8
 .Os
 .Sh NAME
@@ -13,6 +13,7 @@
 .Op Fl l Ar localtime
 .Op Fl p Ar posixrules
 .Op Fl s
+.Op Fl t Ar file
 .Op Fl v
 .Op Fl y Ar command
 .Op Ar Filename ...
@@ -52,35 +53,49 @@ will act as if the input contained a lin
 Limit time values stored in output files to values that are the same
 whether they're taken to be signed or unsigned.
 You can use this option to generate SVVS-compatible files.
+.It Fl t Ar file
+When creating local time information, put the configuration link in
+the named file rather than in the standard location.
 .It Fl v
 Be more verbose, and complain about the following situations:
 .Bl -dash
-.It The input specifies a link to a link.
-.It A year that appears in a data file is outside the range
-.It A time of 24:00 or more appears in the input.
+.It
+The input specifies a link to a link.
+.It
+A year that appears in a data file is outside the range
+of years representable by
+.Xr time 2
+values.
+.It
+A time of 24:00 or more appears in the input.
 Pre-1998 versions of
 .Xr zic 8
 prohibit 24:00, and pre-2007 versions prohibit times greater than 24:00.
-.It A rule goes past the start or end of the month.
+.It
+A rule goes past the start or end of the month.
 Pre-2004 versions of
 .Xr zic 8
 prohibit this.
-.It The output file does not contain all the information about the
+.It
+The output file does not contain all the information about the
 long-term future of a zone, because the future cannot be summarized as
 an extended POSIX TZ string.
 For example, as of 2013 this problem
 occurs for Iran's daylight-saving rules for the predicted future, as
 these rules are based on the Iranian calendar, which cannot be
 represented.
-.It The output contains data that may not be handled properly by client
+.It
+The output contains data that may not be handled properly by client
 code designed for older
 .Xr zic 8
 output formats.
 These compatibility issues affect only time stamps
 before 1970 or after the start of 2038.
-.It A time zone abbreviation has fewer than 3 characters.
+.It
+A time zone abbreviation has fewer than 3 characters.
 POSIX requires at least 3.
-.It An output file name contains a byte that is not an ASCII letter,
+.It
+An output file name contains a byte that is not an ASCII letter,
 .Dq - ,
 .Dq / ,
 or
@@ -90,6 +105,7 @@ or it contains a file name component tha
 or that starts with
 .Dq - .
 .El
+.El
 .Pp
 Input files should be text files, that is, they should be a series of
 zero or more lines, each ending in a newline byte and containing at
@@ -99,7 +115,9 @@ bytes.
 The input text's encoding
 is typically UTF-8 or ASCII; it should have a unibyte representation
 for the POSIX Portable Character Set (PPCS)
+.Rs
 .%U http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap06.html
+.Re
 and the encoding's non-unibyte characters should consist entirely of
 non-PPCS bytes.
 Non-PPCS characters typically occur only in comments:
@@ -137,22 +155,27 @@ A name can be abbreviated by omitting al
 abbreviation must be unambiguous in context.
 .Pp
 A rule line has the form
-.Dl Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+.Pp
+.Dl Rule	NAME	FROM	TO	TYPE	IN	ON		AT	SAVE	LETTER/S
+.Pp
 For example:
+.Pp
 .Dl Rule	US	1967	1973	\-	Apr	lastSun	2:00	1:00	D
+.Pp
 The fields that make up a rule line are:
-.Bl -tag -width "LETTER/S" -compact
+.Bl -tag -width "LETTER/S"
 .It NAME
 Gives the (arbitrary) name of the set of rules this rule is part of.
 .It FROM
 Gives the first year in which the rule applies.
-Any integer year can be supplied; the proleptic Gregorian calendar is assumed.
+Any signed integer year can be supplied; the proleptic Gregorian calendar
+is assumed, with year 0 preceding year 1.
 The word
 .Em minimum
-(or an abbreviation) means the minimum year representable as an integer.
+(or an abbreviation) means the indefinite past.
 The word
 .Em maximum
-(or an abbreviation) means the maximum year representable as an integer.
+(or an abbreviation) means the indefinite future.
 Rules can describe times that are not representable as time values,
 with the unrepresentable times ignored; this allows rules to be portable
 among hosts with differing time value types.
@@ -181,6 +204,7 @@ Month names may be abbreviated.
 .It ON
 Gives the day on which the rule takes effect.
 Recognized forms include:
+.Pp
 .Bl -tag -width lastSun -compact -offset indent
 .It 5
 the fifth of the month
@@ -193,6 +217,7 @@ first Sunday on or after the eighth
 .It Sun\*[Le]25
 last Sunday on or before the 25th
 .El
+.Pp
 Names of days of the week may be abbreviated or spelled out in full.
 A weekday name (e.g.,
 .Dq Sunday )
@@ -207,18 +232,24 @@ field.
 .It AT
 Gives the time of day at which the rule takes effect.
 Recognized forms include:
-.Bl -tag -width "1X28X14" -compact -offset indent
+.Pp
+.Bl -tag -width "01X28X14" -compact -offset indent
 .It 2
 time in hours
 .It 2:00
 time in hours and minutes
+.It 01:28:14
+time in hours, minutes, and seconds
 .It 15:00
 24-hour format time (for times after noon)
-.It 1:28:14
-time in hours, minutes, and seconds
+.It 260:00
+260 hours after 00:00
+.It \-2:30
+2.5 hours before 00:00
 .It \-
 equivalent to 0
 .El
+.Pp
 where hour 0 is midnight at the start of the day,
 and hour 24 is midnight at the end of the day.
 Any of these forms may be followed by the letter
@@ -249,10 +280,10 @@ This field has the same format as the
 .Em AT
 field
 (although, of course, the
-.Em w
-and
-.Em s
 suffixes are not used).
+Negative offsets are allowed; in Ireland, for example, daylight saving
+time is observed in winter and has a negative offset relative to
+Irish Standard Time.
 Only the sum of standard time and this amount matters; for example,
 .Nm
 does not distinguish a 10:30 standard time plus an 0:30
@@ -277,12 +308,15 @@ the variable part is null.
 .El
 .Pp
 A zone line has the form
-.sp
-.Dl Zone	NAME			GMTOFF	RULES/SAVE	FORMAT	[UNTILYEAR [MONTH [DAY [TIME]]]]
+.Pp
+.Dl Zone	NAME			GMTOFF	RULES/SAVE	FORMAT	[UNTIL]
+.Pp
 For example:
-.Dl Zone	Australia/Adelaide	9:30	Aus	AC%sT	1971 Oct 31 2:00
+.Pp
+.Dl Zone	Asia/Amman	2:00	Jordan	EE%sT	2017 Oct 27 1:00
+.Pp
 The fields that make up a zone line are:
-.Bl -tag -width "RULES/SAVE" -compact
+.Bl -tag -width "RULES/SAVE"
 .It NAME
 The name of the time zone.
 This is the name used in creating the time conversion information file for the
@@ -301,8 +335,8 @@ and
 .Em SAVE
 fields of rule lines;
 begin the field with a minus sign if time must be subtracted from UT.
-.It RULES/SAVE
-The name of the rule(s) that apply in the time zone or,
+.It RULES
+The name of the rules that apply in the time zone or,
 alternatively, an amount of time to add to local standard time.
 If this field is
 .Em \&-
@@ -318,7 +352,7 @@ is used to show where the
 of the time zone abbreviation goes.
 Alternately, a format can use the pair of characters
 .Em %z
-+to stand for the UTC offset in the form
++to stand for the UT offset in the form
 .Em \(+- hh ,
 .Em \(+- hhmm ,
 or
@@ -328,16 +362,16 @@ using the shortest form that does not lo
 .Em mm ,
 and
 .Em ss
-are the hours, minutes, and seconds east (+) or west (\(mi) of UTC.
+are the hours, minutes, and seconds east (+) or west (\(mi) of UT.
 Alternatively,
 a slash
 .Pq \&/
 separates standard and daylight abbreviations.
 To conform to POSIX, a time zone abbreviation should contain only
 alphanumeric ASCII characters, "+" and "\*-".
-.It UNTILYEAR [MONTH [DAY [TIME]]]
+.It UNTIL
 The time at which the UT offset or the rule(s) change for a location.
-It is specified as a year, a month, a day, and a time of day.
+It takes the form of YEAR [MONTH [DAY [TIME]]].
 If this is specified,
 the time zone information is generated from the given UT offset
 and rule change until the time specified, which is interpreted using
@@ -345,7 +379,7 @@ the rules in effect just before the tran
 The month, day, and time of day have the same format as the IN, ON, and AT
 fields of a rule; trailing fields can be omitted, and default to the
 earliest possible value for the missing fields.
-.El
+.Pp
 The next line must be a
 .Dq continuation
 line; this has the same form as a zone line except that the
@@ -359,6 +393,7 @@ Continuation lines may contain
 .Em until
 information, just as zone lines do, indicating that the next line is a further
 continuation.
+.El
 .Pp
 If a zone changes at the same instant that a rule would otherwise take
 effect in the earlier zone or continuation line, the rule is ignored.
@@ -366,9 +401,13 @@ In a single zone it is an error if two r
 instant, or if two zone changes take effect at the same instant.
 .Pp
 A link line has the form
-.Dl Link	TARGET	LINK-NAME
+.Pp
+.Dl Link	TARGET			LINK-NAME
+.Pp
 For example:
+.Pp
 .Dl Link	Europe/Istanbul	Asia/Istanbul
+.Pp
 The
 .Em TARGET
 field should appear as the
@@ -388,9 +427,13 @@ define the same name, or if the source o
 of another.
 .Pp
 Lines in the file that describes leap seconds have the following form:
+.Pp
 .Dl Leap	YEAR	MONTH	DAY	HH:MM:SS	CORR	R/S
+.Pp
 For example:
-.Dl Leap	1974	Dec	31	23:59:60	+	S
+.Pp
+.Dl Leap	2016	Dec		31	23:59:60	+	S
+.Pp
 The
 .Em YEAR ,
 .Em MONTH ,
@@ -418,12 +461,14 @@ or
 .Dq Rolling
 if the leap second time given by the other fields should be interpreted as
 local wall clock time.
-.El
 .Sh EXTENDED EXAMPLE
 Here is an extended example of
 .Ic zic
 input, intended to illustrate many of its features.
-.Bl -column -compact "# Rule" "Swiss" "FROM" "1995" "TYPE" "Oct" "lastSun" "1:00u" "SAVE" "LETTER/S"
+In this example, the EU rules are for the European Union
+and for its predecessor organization, the European Communities.
+.Pp
+.Bl -column -compact -offset indent "# Rule" "Swiss" "FROM" "1995" "TYPE" "Oct" "lastSun" "1:00u" "SAVE" "LETTER/S"
 .It # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 .It Rule	Swiss	1941	1942	-	May	Mon>=1	1:00	1:00	S
 .It Rule	Swiss	1941	1942	-	Oct	Mon>=1	2:00	0	-
@@ -436,27 +481,29 @@ input, intended to illustrate many of it
 .It Rule	EU	1996	max	-	Oct	lastSun	1:00u	0	-
 .El
 .Pp
-.Bl -column -compact "# Zone" "Europe/Zurich" "0:34:08" "RULES/SAVE" "FORMAT" "UNTIL"
-.It # Zone	NAME	GMTOFF	RULES/SAVE	FORMAT	UNTIL
+.Bl -column -compact -offset indent "# Zone" "Europe/Zurich" "0:34:08" "RULES/SAVE" "FORMAT" "UNTIL"
+.It # Zone	NAME	GMTOFF	RULES/SAVE	FORMAT	[UNTIL]
 .It Zone	Europe/Zurich	0:34:08	-	LMT	1853 Jul 16
 .It 		0:29:44	-	BMT	1894 Jun
 .It 		1:00	Swiss	CE%sT	1981
 .It 		1:00	EU	CE%sT
-.It Link	Europe/Zurich	Switzerland
+.Pp
+.El
+.Bl -column -compact -offset indent "# Zone" "Europe/Zurich" "0:34:08" "RULES/SAVE" "FORMAT" "UNTIL"
+.It Link	Europe/Zurich	Europe/Vaduz
 .El
 .Pp
 In this example, the zone is named Europe/Zurich but it has an alias
-as Switzerland.
+as Europe/Vaduz.
 This example says that Zurich was 34 minutes and 8
-seconds west of UT until 1853-07-16 at 00:00, when the legal offset
+seconds east of UT until 1853-07-16 at 00:00, when the legal offset
 was changed to 7\(de\|26\(fm\|22.50\(sd; although this works out to
 0:29:45.50, the input format cannot represent fractional seconds so it
 is rounded here.
-After 1894-06-01 at 00:00 Swiss daylight saving rules
-(defined with lines beginning with "Rule Swiss") apply, and the UT offset
-became one hour.
+After 1894-06-01 at 00:00 the UT offset became one hour
+and Swiss daylight saving rules (defined with lines beginning with "Rule
+Swiss") apply.
 From 1981 to the present, EU daylight saving rules have
-applied, and the UTC offset has remained at one hour.
 .Pp
 In 1941 and 1942, daylight saving time applied from the first Monday
 in May at 01:00 to the first Monday in October at 02:00.
@@ -497,8 +544,12 @@ This works around bugs in software that 
 Call it sour grapes, but pre-Big-Bang time stamps are physically suspect anyway.
 The pre-Big-Bang cutoff time is approximate and may change in future versions.
 .Sh FILES
-.Pa /usr/share/zoneinfo
-- standard directory used for created files
+.Bl -tag -width /usr/share/zoneinfo -compact
+.It Pa /etc/localtime
+default local time zone file
+.It Pa /usr/share/zoneinfo
+standard directory used for created files
+.El
 .Sh SEE ALSO
 .Xr ctime 3 ,
 .Xr tzfile 5 ,

Index: src/lib/libc/time/zic.c
diff -u src/lib/libc/time/zic.c:1.69 src/lib/libc/time/zic.c:1.70
--- src/lib/libc/time/zic.c:1.69	Tue Oct 24 13:38:17 2017
+++ src/lib/libc/time/zic.c	Thu Jan 25 17:48:42 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: zic.c,v 1.69 2017/10/24 17:38:17 christos Exp $	*/
+/*	$NetBSD: zic.c,v 1.70 2018/01/25 22:48:42 christos Exp $	*/
 /*
 ** This file is in the public domain, so clarified as of
 ** 2006-07-17 by Arthur David Olson.
@@ -10,7 +10,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: zic.c,v 1.69 2017/10/24 17:38:17 christos Exp $");
+__RCSID("$NetBSD: zic.c,v 1.70 2018/01/25 22:48:42 christos Exp $");
 #endif /* !defined lint */
 
 #include "private.h"
@@ -561,7 +561,7 @@ usage(FILE *stream, int status)
   fprintf(stream,
 	  _("%s: usage is %s [ --version ] [ --help ] [ -v ] \\\n"
 	    "\t[ -l localtime ] [ -p posixrules ] [ -d directory ] \\\n"
-	    "\t[ -L leapseconds ] [ filename ... ]\n\n"
+	    "\t[ -t localtime-link ] [ -L leapseconds ] [ filename ... ]\n\n"
 	    "Report bugs to %s.\n"),
 	  progname, progname, REPORT_BUGS_TO);
   if (status == EXIT_SUCCESS)
@@ -593,6 +593,7 @@ static const char *	psxrules;
 static const char *	lcltime;
 static const char *	directory;
 static const char *	leapsec;
+static const char *	tzdefault;
 static const char *	yitcommand;
 
 int
@@ -625,7 +626,7 @@ main(int argc, char **argv)
 		} else if (strcmp(argv[k], "--help") == 0) {
 			usage(stdout, EXIT_SUCCESS);
 		}
-	while ((c = getopt(argc, argv, "d:l:p:L:vsy:")) != EOF && c != -1)
+	while ((c = getopt(argc, argv, "d:l:L:p:st:vy:")) != EOF && c != -1)
 		switch (c) {
 			default:
 				usage(stderr, EXIT_FAILURE);
@@ -659,6 +660,16 @@ _("%s: More than one -p option specified
 					return EXIT_FAILURE;
 				}
 				break;
+			case 't':
+				if (tzdefault != NULL) {
+				  fprintf(stderr,
+					  _("%s: More than one -t option"
+					    " specified\n"),
+					  progname);
+				  return EXIT_FAILURE;
+				}
+				tzdefault = optarg;
+				break;
 			case 'y':
 				if (yitcommand == NULL) {
 					warning(_("-y is obsolescent"));
@@ -691,6 +702,8 @@ _("%s: More than one -L option specified
 		usage(stderr, EXIT_FAILURE);	/* usage message by request */
 	if (directory == NULL)
 		directory = TZDIR;
+	if (tzdefault == NULL)
+		tzdefault = TZDEFAULT;
 	if (yitcommand == NULL)
 		yitcommand = "yearistype";
 
@@ -727,7 +740,7 @@ _("%s: More than one -L option specified
 	}
 	if (lcltime != NULL) {
 		eat(_("command line"), 1);
-		dolink(lcltime, TZDEFAULT, true);
+		dolink(lcltime, tzdefault, true);
 	}
 	if (psxrules != NULL) {
 		eat(_("command line"), 1);
@@ -1262,10 +1275,10 @@ inzone(char **fields, int nfields)
 		error(_("wrong number of fields on Zone line"));
 		return false;
 	}
-	if (strcmp(fields[ZF_NAME], TZDEFAULT) == 0 && lcltime != NULL) {
+	if (lcltime != NULL && strcmp(fields[ZF_NAME], tzdefault) == 0) {
 		error(
 _("\"Zone %s\" line and -l option are mutually exclusive"),
-			TZDEFAULT);
+			tzdefault);
 		return false;
 	}
 	if (strcmp(fields[ZF_NAME], TZDEFRULES) == 0 && psxrules != NULL) {
@@ -1976,7 +1989,7 @@ writezone(const char *const name, const 
 		}
 #define DO(field)	fwrite(tzh.field, sizeof tzh.field, (size_t) 1, fp)
 		tzh = tzh0;
-		strncpy(tzh.tzh_magic, TZ_MAGIC, sizeof tzh.tzh_magic);
+		memcpy(tzh.tzh_magic, TZ_MAGIC, sizeof tzh.tzh_magic);
 		tzh.tzh_version[0] = version;
 		convert(thistypecnt, tzh.tzh_ttisgmtcnt);
 		convert(thistypecnt, tzh.tzh_ttisstdcnt);
@@ -2071,7 +2084,7 @@ abbroffset(char *buf, zic_t offset)
 	minutes = offset % MINSPERHOUR;
 	offset /= MINSPERHOUR;
 	if (100 <= offset) {
-		error(_("%%z UTC offset magnitude exceeds 99:59:59"));
+		error(_("%%z UT offset magnitude exceeds 99:59:59"));
 		return "%z";
 	} else {
 		char *p = buf;

Reply via email to