---
 zic.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/zic.c b/zic.c
index cf449a55..70a2ab09 100644
--- a/zic.c
+++ b/zic.c
@@ -2666,7 +2666,7 @@ writezone(const char *const name, const char *const 
string, char version,
        if (timecnt > 1)
                qsort(attypes, timecnt, sizeof *attypes, atcomp);
        /*
-       ** Optimize.
+       ** Optimize and skip unwanted transitions.
        */
        {
                ptrdiff_t fromi, toi;
@@ -2675,6 +2675,10 @@ writezone(const char *const name, const char *const 
string, char version,
                fromi = 0;
                for ( ; fromi < timecnt; ++fromi) {
                        if (toi != 0) {
+                           /* Skip the previous transition if it is unwanted
+                              because its local time is not earlier.
+                              The UT offset additions can't overflow because
+                              of how the times were calculated.  */
                            unsigned char type_2 =
                              toi == 1 ? 0 : attypes[toi - 2].type;
                            if ((attypes[fromi].at
@@ -2688,6 +2692,10 @@ writezone(const char *const name, const char *const 
string, char version,
                                    continue;
                            }
                        }
+
+                       /* Use a transition if it is the first one,
+                          or if it cannot be merged for other reasons,
+                          or if it transitions to different timekeeping.  */
                        if (toi == 0
                            || attypes[fromi].dontmerge
                            || (utoffs[attypes[toi - 1].type]
-- 
2.51.0

Reply via email to