[tz] zic changes (1/2)

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


A possibility mentioned last year at the time of the Macquarie fix:
here's a more general fix for zic.c. For clarity, it comes in two pieces.
This first piece simply rolls back the Macquarie-specific changes to zic.c;
it's both attached and appears in mangled form below. These changes are
relative to the git repository version.

    @dashdashado

1.1
2838 lines
1.2
2805 lines
*** /tmp/,azic.c    2014-05-01 01:51:26.531315400 -0400
--- /tmp/,bzic.c    2014-05-01 01:51:26.640515600 -0400
***************
*** 1480,1490 ****
          fromi = 0;
          while (fromi < timecnt && attypes[fromi].at < min_time)
              ++fromi;
!         /*
!         ** Remember that type 0 is reserved.
!         */
!         if (isdsts[1] == 0)
!             while (fromi < timecnt && attypes[fromi].type == 1)
                  ++fromi;    /* handled by default rule */
          for ( ; fromi < timecnt; ++fromi) {
              if (toi != 0 && ((attypes[fromi].at +
--- 1480,1487 ----
          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 +
***************
*** 1589,1599 ****
          }
          thistimelim = thistimei + thistimecnt;
          thisleaplim = thisleapi + thisleapcnt;
!         /*
!         ** Remember that type 0 is reserved.
!         */
!         writetype[0] = FALSE;
!         for (i = 1; i < typecnt; ++i)
              writetype[i] = thistimecnt == timecnt;
          if (thistimecnt == 0) {
              /*
--- 1586,1592 ----
          }
          thistimelim = thistimei + thistimecnt;
          thisleaplim = thisleapi + thisleapcnt;
!         for (i = 0; i < typecnt; ++i)
              writetype[i] = thistimecnt == timecnt;
          if (thistimecnt == 0) {
              /*
***************
*** 1609,1619 ****
              /*
              ** For America/Godthab and Antarctica/Palmer
              */
-             /*
-             ** Remember that type 0 is reserved.
-             */
              if (thistimei == 0)
!                 writetype[1] = TRUE;
          }
  #ifndef LEAVE_SOME_PRE_2011_SYSTEMS_IN_THE_LURCH
          /*
--- 1602,1609 ----
              /*
              ** For America/Godthab and Antarctica/Palmer
              */
              if (thistimei == 0)
!                 writetype[0] = TRUE;
          }
  #ifndef LEAVE_SOME_PRE_2011_SYSTEMS_IN_THE_LURCH
          /*
***************
*** 1663,1688 ****
          }
  #endif /* !defined LEAVE_SOME_PRE_2011_SYSTEMS_IN_THE_LURCH */
          thistypecnt = 0;
-         /*
-         ** Potentially, set type 0 to that of lowest-valued time.
-         */
-         if (thistimei > 0) {
-             for (i = 1; i < typecnt; ++i)
-                 if (writetype[i] && !isdsts[i])
-                     break;
-             if (i != types[thistimei - 1]) {
-                 i = types[thistimei - 1];
-                 gmtoffs[0] = gmtoffs[i];
-                 isdsts[0] = isdsts[i];
-                 ttisstds[0] = ttisstds[i];
-                 ttisgmts[0] = ttisgmts[i];
-                 abbrinds[0] = abbrinds[i];
-                 writetype[0] = TRUE;
-                 writetype[i] = FALSE;
-             }
-         }
          for (i = 0; i < typecnt; ++i)
!             typemap[i] = writetype[i] ?  thistypecnt++ : 0;
          for (i = 0; i < sizeof indmap / sizeof indmap[0]; ++i)
              indmap[i] = -1;
          thischarcnt = 0;
--- 1653,1660 ----
          }
  #endif /* !defined LEAVE_SOME_PRE_2011_SYSTEMS_IN_THE_LURCH */
          thistypecnt = 0;
          for (i = 0; i < typecnt; ++i)
!             typemap[i] = writetype[i] ?  thistypecnt++ : -1;
          for (i = 0; i < sizeof indmap / sizeof indmap[0]; ++i)
              indmap[i] = -1;
          thischarcnt = 0;
***************
*** 2105,2115 ****
          updateminmax(leapminyear);
          updateminmax(leapmaxyear + (leapmaxyear < ZIC_MAX));
      }
-     /*
-     ** Reserve type 0.
-     */
-     gmtoffs[0] = isdsts[0] = ttisstds[0] = ttisgmts[0] = abbrinds[0] = -1;
-     typecnt = 1;
      for (i = 0; i < zonecount; ++i) {
          zp = &zpfirst[i];
          if (i < zonecount - 1)
--- 2077,2082 ----
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mm.icann.org/pipermail/tz/attachments/20140501/8085712d/attachment.html>
-------------- next part --------------
1.1
2838 lines
1.2
2805 lines
*** /tmp/,azic.c	2014-05-01 01:51:26.531315400 -0400
--- /tmp/,bzic.c	2014-05-01 01:51:26.640515600 -0400
***************
*** 1480,1490 ****
  		fromi = 0;
  		while (fromi < timecnt && attypes[fromi].at < min_time)
  			++fromi;
! 		/*
! 		** Remember that type 0 is reserved.
! 		*/
! 		if (isdsts[1] == 0)
! 			while (fromi < timecnt && attypes[fromi].type == 1)
  				++fromi;	/* handled by default rule */
  		for ( ; fromi < timecnt; ++fromi) {
  			if (toi != 0 && ((attypes[fromi].at +
--- 1480,1487 ----
  		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 +
***************
*** 1589,1599 ****
  		}
  		thistimelim = thistimei + thistimecnt;
  		thisleaplim = thisleapi + thisleapcnt;
! 		/*
! 		** Remember that type 0 is reserved.
! 		*/
! 		writetype[0] = FALSE;
! 		for (i = 1; i < typecnt; ++i)
  			writetype[i] = thistimecnt == timecnt;
  		if (thistimecnt == 0) {
  			/*
--- 1586,1592 ----
  		}
  		thistimelim = thistimei + thistimecnt;
  		thisleaplim = thisleapi + thisleapcnt;
! 		for (i = 0; i < typecnt; ++i)
  			writetype[i] = thistimecnt == timecnt;
  		if (thistimecnt == 0) {
  			/*
***************
*** 1609,1619 ****
  			/*
  			** For America/Godthab and Antarctica/Palmer
  			*/
- 			/*
- 			** Remember that type 0 is reserved.
- 			*/
  			if (thistimei == 0)
! 				writetype[1] = TRUE;
  		}
  #ifndef LEAVE_SOME_PRE_2011_SYSTEMS_IN_THE_LURCH
  		/*
--- 1602,1609 ----
  			/*
  			** For America/Godthab and Antarctica/Palmer
  			*/
  			if (thistimei == 0)
! 				writetype[0] = TRUE;
  		}
  #ifndef LEAVE_SOME_PRE_2011_SYSTEMS_IN_THE_LURCH
  		/*
***************
*** 1663,1688 ****
  		}
  #endif /* !defined LEAVE_SOME_PRE_2011_SYSTEMS_IN_THE_LURCH */
  		thistypecnt = 0;
- 		/*
- 		** Potentially, set type 0 to that of lowest-valued time.
- 		*/
- 		if (thistimei > 0) {
- 			for (i = 1; i < typecnt; ++i)
- 				if (writetype[i] && !isdsts[i])
- 					break;
- 			if (i != types[thistimei - 1]) {
- 				i = types[thistimei - 1];
- 				gmtoffs[0] = gmtoffs[i];
- 				isdsts[0] = isdsts[i];
- 				ttisstds[0] = ttisstds[i];
- 				ttisgmts[0] = ttisgmts[i];
- 				abbrinds[0] = abbrinds[i];
- 				writetype[0] = TRUE;
- 				writetype[i] = FALSE;
- 			}
- 		}
  		for (i = 0; i < typecnt; ++i)
! 			typemap[i] = writetype[i] ?  thistypecnt++ : 0;
  		for (i = 0; i < sizeof indmap / sizeof indmap[0]; ++i)
  			indmap[i] = -1;
  		thischarcnt = 0;
--- 1653,1660 ----
  		}
  #endif /* !defined LEAVE_SOME_PRE_2011_SYSTEMS_IN_THE_LURCH */
  		thistypecnt = 0;
  		for (i = 0; i < typecnt; ++i)
! 			typemap[i] = writetype[i] ?  thistypecnt++ : -1;
  		for (i = 0; i < sizeof indmap / sizeof indmap[0]; ++i)
  			indmap[i] = -1;
  		thischarcnt = 0;
***************
*** 2105,2115 ****
  		updateminmax(leapminyear);
  		updateminmax(leapmaxyear + (leapmaxyear < ZIC_MAX));
  	}
- 	/*
- 	** Reserve type 0.
- 	*/
- 	gmtoffs[0] = isdsts[0] = ttisstds[0] = ttisgmts[0] = abbrinds[0] = -1;
- 	typecnt = 1;
  	for (i = 0; i < zonecount; ++i) {
  		zp = &zpfirst[i];
  		if (i < zonecount - 1)
--- 2077,2082 ----


More information about the tz mailing list