[tz] zic changes (2/2)

Arthur David Olson arthurdavidolson at gmail.com
Thu May 1 19:10:41 UTC 2014


And now, the update. These changes arrange things so that binary files
include "transition" entries for minimum time values; these entries
eliminate localtime guesswork in handling low-valued time stamps.

The bad news: binary files grow slightly as a result of these changes.
The good news: there are no changes in the output of "zdump -v" applied to
before-and-after versions of all the binary files generated by a "make
install."

Changes are attached and appear in mangled form below; these are relative
to the github version of zic.c after the rollback in the earlier message
today.

    @dashdashado

1.2
2805 lines
1.4
2813 lines
*** /tmp/,azic.c    2014-05-01 01:51:36.998933800 -0400
--- /tmp/,bzic.c    2014-05-01 01:51:37.092534000 -0400
***************
*** 1480,1493 ****
          fromi = 0;
          while (fromi < timecnt && attypes[fromi].at < min_time)
              ++fromi;
-         if (isdsts[0] == 0)
-             while (fromi < timecnt && attypes[fromi].type == 0)
-                 ++fromi;    /* handled by default rule */
          for ( ; fromi < timecnt; ++fromi) {
!             if (toi != 0 && ((attypes[fromi].at +
                  gmtoffs[attypes[toi - 1].type]) <=
!                 (attypes[toi - 1].at + gmtoffs[toi == 1 ? 0
!                 : attypes[toi - 2].type]))) {
                      attypes[toi - 1].type =
                          attypes[fromi].type;
                      continue;
--- 1480,1490 ----
          fromi = 0;
          while (fromi < timecnt && attypes[fromi].at < min_time)
              ++fromi;
          for ( ; fromi < timecnt; ++fromi) {
!             if (toi > 1 && ((attypes[fromi].at +
                  gmtoffs[attypes[toi - 1].type]) <=
!                 (attypes[toi - 1].at +
!                 gmtoffs[attypes[toi - 2].type]))) {
                      attypes[toi - 1].type =
                          attypes[fromi].type;
                      continue;
***************
*** 1532,1537 ****
--- 1529,1541 ----
          --timecnt32;
          ++timei32;
      }
+     /*
+     ** Output an INT32_MIN "transition" if appropriate--see below.
+     */
+     if (timei32 > 0 && ats[timei32] > INT32_MIN) {
+         --timei32;
+         ++timecnt32;
+     }
      while (leapcnt32 > 0 && !is32(trans[leapcnt32 - 1]))
          --leapcnt32;
      while (leapcnt32 > 0 && !is32(trans[leapi32])) {
***************
*** 1698,1704 ****
  #undef DO
          for (i = thistimei; i < thistimelim; ++i)
              if (pass == 1)
!                 puttzcode(ats[i], fp);
              else    puttzcode64(ats[i], fp);
          for (i = thistimei; i < thistimelim; ++i) {
              unsigned char    uc;
--- 1702,1713 ----
  #undef DO
          for (i = thistimei; i < thistimelim; ++i)
              if (pass == 1)
!                 /*
!                 ** Output an INT32_MIN "transition"
!                 ** if appropriate--see above.
!                 */
!                 puttzcode(((ats[i] < INT32_MIN) ?
!                     INT32_MIN : ats[i]), fp);
              else    puttzcode64(ats[i], fp);
          for (i = thistimei; i < thistimelim; ++i) {
              unsigned char    uc;
***************
*** 2176,2183 ****
              if (usestart) {
                  addtt(starttime, type);
                  usestart = FALSE;
!             } else if (stdoff != 0)
!                 addtt(min_time, type);
          } else for (year = min_year; year <= max_year; ++year) {
              if (useuntil && year > zp->z_untilrule.r_hiyear)
                  break;
--- 2185,2191 ----
              if (usestart) {
                  addtt(starttime, type);
                  usestart = FALSE;
!             } else    addtt(min_time, type);
          } else for (year = min_year; year <= max_year; ++year) {
              if (useuntil && year > zp->z_untilrule.r_hiyear)
                  break;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mm.icann.org/pipermail/tz/attachments/20140501/704f3c40/attachment-0001.html>
-------------- next part --------------
1.2
2805 lines
1.4
2813 lines
*** /tmp/,azic.c	2014-05-01 01:51:36.998933800 -0400
--- /tmp/,bzic.c	2014-05-01 01:51:37.092534000 -0400
***************
*** 1480,1493 ****
  		fromi = 0;
  		while (fromi < timecnt && attypes[fromi].at < min_time)
  			++fromi;
- 		if (isdsts[0] == 0)
- 			while (fromi < timecnt && attypes[fromi].type == 0)
- 				++fromi;	/* handled by default rule */
  		for ( ; fromi < timecnt; ++fromi) {
! 			if (toi != 0 && ((attypes[fromi].at +
  				gmtoffs[attypes[toi - 1].type]) <=
! 				(attypes[toi - 1].at + gmtoffs[toi == 1 ? 0
! 				: attypes[toi - 2].type]))) {
  					attypes[toi - 1].type =
  						attypes[fromi].type;
  					continue;
--- 1480,1490 ----
  		fromi = 0;
  		while (fromi < timecnt && attypes[fromi].at < min_time)
  			++fromi;
  		for ( ; fromi < timecnt; ++fromi) {
! 			if (toi > 1 && ((attypes[fromi].at +
  				gmtoffs[attypes[toi - 1].type]) <=
! 				(attypes[toi - 1].at +
! 				gmtoffs[attypes[toi - 2].type]))) {
  					attypes[toi - 1].type =
  						attypes[fromi].type;
  					continue;
***************
*** 1532,1537 ****
--- 1529,1541 ----
  		--timecnt32;
  		++timei32;
  	}
+ 	/*
+ 	** Output an INT32_MIN "transition" if appropriate--see below.
+ 	*/
+ 	if (timei32 > 0 && ats[timei32] > INT32_MIN) {
+ 		--timei32;
+ 		++timecnt32;
+ 	}
  	while (leapcnt32 > 0 && !is32(trans[leapcnt32 - 1]))
  		--leapcnt32;
  	while (leapcnt32 > 0 && !is32(trans[leapi32])) {
***************
*** 1698,1704 ****
  #undef DO
  		for (i = thistimei; i < thistimelim; ++i)
  			if (pass == 1)
! 				puttzcode(ats[i], fp);
  			else	puttzcode64(ats[i], fp);
  		for (i = thistimei; i < thistimelim; ++i) {
  			unsigned char	uc;
--- 1702,1713 ----
  #undef DO
  		for (i = thistimei; i < thistimelim; ++i)
  			if (pass == 1)
! 				/*
! 				** Output an INT32_MIN "transition"
! 				** if appropriate--see above.
! 				*/
! 				puttzcode(((ats[i] < INT32_MIN) ?
! 					INT32_MIN : ats[i]), fp);
  			else	puttzcode64(ats[i], fp);
  		for (i = thistimei; i < thistimelim; ++i) {
  			unsigned char	uc;
***************
*** 2176,2183 ****
  			if (usestart) {
  				addtt(starttime, type);
  				usestart = FALSE;
! 			} else if (stdoff != 0)
! 				addtt(min_time, type);
  		} else for (year = min_year; year <= max_year; ++year) {
  			if (useuntil && year > zp->z_untilrule.r_hiyear)
  				break;
--- 2185,2191 ----
  			if (usestart) {
  				addtt(starttime, type);
  				usestart = FALSE;
! 			} else	addtt(min_time, type);
  		} else for (year = min_year; year <= max_year; ++year) {
  			if (useuntil && year > zp->z_untilrule.r_hiyear)
  				break;


More information about the tz mailing list