svn commit: r214400 - in vendor/tzcode/dist: libc/stdtime unused zic

Edwin Groothuis edwin at FreeBSD.org
Tue Oct 26 21:19:37 UTC 2010


Author: edwin
Date: Tue Oct 26 21:19:36 2010
New Revision: 214400
URL: http://svn.freebsd.org/changeset/base/214400

Log:
  Vendor import of tzcode2010n:
  
  * Makefile        Change LOCALTIME default from "Factory" to "GMT";
                    do not compile "factory" file
                    (but keep it in the distribution).
  * Theory          Remove reference to "Factory" zone.
  * localtime.c     Initialize ttinfo structures filled by tzparse
                    (thanks to Ravindra for reporting a valgrind warning).
  * zic.c           Fix generation of POSIX strings for zones with
                    rules using "weekday<=n" forms of dates
                    (thanks to Lei Liu for finding the problem).
                    Also, limit output for non-POSIX-specificable zones
                    defined to follow the same rules every year.
                    (Note that no zones of either of the above types
                    appear in the distribution; these changes cater to
                    add-on zones).
  
  Obtained from:	ftp://elsie.nci.nih.gov/pub/

Modified:
  vendor/tzcode/dist/libc/stdtime/localtime.c
  vendor/tzcode/dist/unused/Makefile
  vendor/tzcode/dist/zic/Theory
  vendor/tzcode/dist/zic/zic.c

Modified: vendor/tzcode/dist/libc/stdtime/localtime.c
==============================================================================
--- vendor/tzcode/dist/libc/stdtime/localtime.c	Tue Oct 26 20:23:29 2010	(r214399)
+++ vendor/tzcode/dist/libc/stdtime/localtime.c	Tue Oct 26 21:19:36 2010	(r214400)
@@ -5,7 +5,7 @@
 
 #ifndef lint
 #ifndef NOID
-static char	elsieid[] = "@(#)localtime.c	8.14";
+static char	elsieid[] = "@(#)localtime.c	8.15";
 #endif /* !defined NOID */
 #endif /* !defined lint */
 
@@ -914,6 +914,7 @@ const int			lastditch;
 	register unsigned char *	typep;
 	register char *			cp;
 	register int			load_result;
+	static struct ttinfo		zttinfo;
 
 	INITIALIZE(dstname);
 	stdname = name;
@@ -986,6 +987,7 @@ const int			lastditch;
 			/*
 			** Two transitions per year, from EPOCH_YEAR forward.
 			*/
+			sp->ttis[0] = sp->ttis[1] = zttinfo;
 			sp->ttis[0].tt_gmtoff = -dstoffset;
 			sp->ttis[0].tt_isdst = 1;
 			sp->ttis[0].tt_abbrind = stdlen + 1;
@@ -1099,8 +1101,8 @@ const int			lastditch;
 			}
 			/*
 			** Finally, fill in ttis.
-			** ttisstd and ttisgmt need not be handled.
 			*/
+			sp->ttis[0] = sp->ttis[1] = zttinfo;
 			sp->ttis[0].tt_gmtoff = -stdoffset;
 			sp->ttis[0].tt_isdst = FALSE;
 			sp->ttis[0].tt_abbrind = 0;
@@ -1113,6 +1115,7 @@ const int			lastditch;
 		dstlen = 0;
 		sp->typecnt = 1;		/* only standard time */
 		sp->timecnt = 0;
+		sp->ttis[0] = zttinfo;
 		sp->ttis[0].tt_gmtoff = -stdoffset;
 		sp->ttis[0].tt_isdst = 0;
 		sp->ttis[0].tt_abbrind = 0;

Modified: vendor/tzcode/dist/unused/Makefile
==============================================================================
--- vendor/tzcode/dist/unused/Makefile	Tue Oct 26 20:23:29 2010	(r214399)
+++ vendor/tzcode/dist/unused/Makefile	Tue Oct 26 21:19:36 2010	(r214400)
@@ -1,5 +1,5 @@
 # <pre>
-# @(#)Makefile	8.8
+# @(#)Makefile	8.9
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
@@ -12,7 +12,7 @@
 #	make zonenames
 # to get a list of the values you can use for LOCALTIME.
 
-LOCALTIME=	Factory
+LOCALTIME=	GMT
 
 # If you want something other than Eastern United States time as a template
 # for handling POSIX-style time zone environment variables,
@@ -262,8 +262,8 @@ MANS=		newctime.3 newstrftime.3 newtzset
 DOCS=		README Theory $(MANS) date.1 Makefile
 PRIMARY_YDATA=	africa antarctica asia australasia \
 		europe northamerica southamerica
-YDATA=		$(PRIMARY_YDATA) pacificnew etcetera factory backward
-NDATA=		systemv
+YDATA=		$(PRIMARY_YDATA) pacificnew etcetera backward
+NDATA=		systemv factory
 SDATA=		solar87 solar88 solar89
 TDATA=		$(YDATA) $(NDATA) $(SDATA)
 TABDATA=	iso3166.tab zone.tab

Modified: vendor/tzcode/dist/zic/Theory
==============================================================================
--- vendor/tzcode/dist/zic/Theory	Tue Oct 26 20:23:29 2010	(r214399)
+++ vendor/tzcode/dist/zic/Theory	Tue Oct 26 21:19:36 2010	(r214400)
@@ -1,4 +1,4 @@
-@(#)Theory	8.4
+@(#)Theory	8.5
 This file is in the public domain, so clarified as of
 2009-05-17 by Arthur David Olson.
 
@@ -287,8 +287,7 @@ and these older names are still supporte
 See the file `backward' for most of these older names
 (e.g. `US/Eastern' instead of `America/New_York').
 The other old-fashioned names still supported are
-`WET', `CET', `MET', `EET' (see the file `europe'),
-and `Factory' (see the file `factory').
+`WET', `CET', `MET', and `EET' (see the file `europe').
 
 
 ----- Time zone abbreviations -----

Modified: vendor/tzcode/dist/zic/zic.c
==============================================================================
--- vendor/tzcode/dist/zic/zic.c	Tue Oct 26 20:23:29 2010	(r214399)
+++ vendor/tzcode/dist/zic/zic.c	Tue Oct 26 21:19:36 2010	(r214400)
@@ -3,7 +3,7 @@
 ** 2006-07-17 by Arthur David Olson.
 */
 
-static char	elsieid[] = "@(#)zic.c	8.22";
+static char	elsieid[] = "@(#)zic.c	8.24";
 
 #include "private.h"
 #include "locale.h"
@@ -1881,16 +1881,16 @@ const long			gmtoff;
 		register int	week;
 
 		if (rp->r_dycode == DC_DOWGEQ) {
-			week = 1 + rp->r_dayofmonth / DAYSPERWEEK;
-			if ((week - 1) * DAYSPERWEEK + 1 != rp->r_dayofmonth)
+			if ((rp->r_dayofmonth % DAYSPERWEEK) != 1)
 				return -1;
+			week = 1 + rp->r_dayofmonth / DAYSPERWEEK;
 		} else if (rp->r_dycode == DC_DOWLEQ) {
 			if (rp->r_dayofmonth == len_months[1][rp->r_month])
 				week = 5;
 			else {
-				week = 1 + rp->r_dayofmonth / DAYSPERWEEK;
-				if (week * DAYSPERWEEK - 1 != rp->r_dayofmonth)
+				if ((rp->r_dayofmonth % DAYSPERWEEK) != 0)
 					return -1;
+				week = rp->r_dayofmonth / DAYSPERWEEK;
 			}
 		} else	return -1;	/* "cannot happen" */
 		(void) sprintf(result, "M%d.%d.%d",
@@ -2018,6 +2018,7 @@ const int			zonecount;
 	register char *			envvar;
 	register int			max_abbr_len;
 	register int			max_envvar_len;
+	register int			prodstic; /* all rules are min to max */
 
 	max_abbr_len = 2 + max_format_len + max_abbrvar_len;
 	max_envvar_len = 2 * max_abbr_len + 5 * 9;
@@ -2032,6 +2033,7 @@ const int			zonecount;
 	timecnt = 0;
 	typecnt = 0;
 	charcnt = 0;
+	prodstic = zonecount == 1;
 	/*
 	** Thanks to Earl Chew
 	** for noting the need to unconditionally initialize startttisstd.
@@ -2053,6 +2055,8 @@ const int			zonecount;
 				updateminmax(rp->r_loyear);
 			if (rp->r_hiwasnum)
 				updateminmax(rp->r_hiyear);
+			if (rp->r_lowasnum || rp->r_hiwasnum)
+				prodstic = FALSE;
 		}
 	}
 	/*
@@ -2075,6 +2079,16 @@ wp = ecpyalloc(_("no POSIX environment v
 		if (max_year <= INT_MAX - YEARSPERREPEAT)
 			max_year += YEARSPERREPEAT;
 		else	max_year = INT_MAX;
+		/*
+		** Regardless of any of the above,
+		** for a "proDSTic" zone which specifies that its rules
+		** always have and always will be in effect,
+		** we only need one cycle to define the zone.
+		*/
+		if (prodstic) {
+			min_year = 1900;
+			max_year = min_year + YEARSPERREPEAT;
+		}
 	}
 	/*
 	** For the benefit of older systems,


More information about the svn-src-all mailing list