pgindent did a pretty awful job on the timezone code, particularly with
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 21 May 2004 20:59:10 +0000 (20:59 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 21 May 2004 20:59:10 +0000 (20:59 +0000)
respect to doubly-starred comment blocks.  Do some manual cleanup.

src/timezone/ialloc.c
src/timezone/localtime.c
src/timezone/private.h
src/timezone/scheck.c
src/timezone/strftime.c
src/timezone/tzfile.h
src/timezone/zic.c

index ec3cbaf29a0dfeea271af61ff0c55cb3224c3615..0899cb18d82c4f1ba0d760e75fb4c6cd5307f758 100644 (file)
@@ -1,3 +1,11 @@
+/*
+ * This file is in the public domain, so clarified as of
+ * 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
+ *
+ * IDENTIFICATION
+ *   $PostgreSQL: pgsql/src/timezone/ialloc.c,v 1.5 2004/05/21 20:59:10 tgl Exp $
+ */
+
 #include "postgres.h"
 
 #include "private.h"
index c48b1ea20693e38e4a0dbe7fa9297b0133ee0b57..5ce8664f274e0b143f616be08a01c5d907455f43 100644 (file)
@@ -1,13 +1,16 @@
 /*
-** This file is in the public domain, so clarified as of
-** 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
-*/
+ * This file is in the public domain, so clarified as of
+ * 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
+ *
+ * IDENTIFICATION
+ *   $PostgreSQL: pgsql/src/timezone/localtime.c,v 1.6 2004/05/21 20:59:10 tgl Exp $
+ */
 
 /*
-** Leap second handling from Bradley White (bww@k.gp.cs.cmu.edu).
-** POSIX-style TZ environment variable handling from Guy Harris
-** (guy@auspex.com).
-*/
+ * Leap second handling from Bradley White (bww@k.gp.cs.cmu.edu).
+ * POSIX-style TZ environment variable handling from Guy Harris
+ * (guy@auspex.com).
+ */
 
 #include "postgres.h"
 
 
 
 #ifndef WILDABBR
-/*
-** Someone might make incorrect use of a time zone abbreviation:
-** 1.  They might reference tzname[0] before calling tzset (explicitly
-**     or implicitly).
-** 2.  They might reference tzname[1] before calling tzset (explicitly
-**     or implicitly).
-** 3.  They might reference tzname[1] after setting to a time zone
-**     in which Daylight Saving Time is never observed.
-** 4.  They might reference tzname[0] after setting to a time zone
-**     in which Standard Time is never observed.
-** 5.  They might reference tm.TM_ZONE after calling offtime.
-** What's best to do in the above cases is open to debate;
-** for now, we just set things up so that in any of the five cases
-** WILDABBR is used.  Another possibility: initialize tzname[0] to the
-** string "tzname[0] used before set", and similarly for the other cases.
-** And another:  initialize tzname[0] to "ERA", with an explanation in the
-** manual page of what this "time zone abbreviation" means (doing this so
-** that tzname[0] has the "normal" length of three characters).
-*/
+/*----------
+ * Someone might make incorrect use of a time zone abbreviation:
+ * 1.  They might reference tzname[0] before calling tzset (explicitly
+ *     or implicitly).
+ * 2.  They might reference tzname[1] before calling tzset (explicitly
+ *     or implicitly).
+ * 3.  They might reference tzname[1] after setting to a time zone
+ *     in which Daylight Saving Time is never observed.
+ * 4.  They might reference tzname[0] after setting to a time zone
+ *     in which Standard Time is never observed.
+ * 5.  They might reference tm.TM_ZONE after calling offtime.
+ * What's best to do in the above cases is open to debate;
+ * for now, we just set things up so that in any of the five cases
+ * WILDABBR is used.  Another possibility: initialize tzname[0] to the
+ * string "tzname[0] used before set", and similarly for the other cases.
+ * And another:  initialize tzname[0] to "ERA", with an explanation in the
+ * manual page of what this "time zone abbreviation" means (doing this so
+ * that tzname[0] has the "normal" length of three characters).
+ *----------
+ */
 #define WILDABBR   "   "
 #endif   /* !defined WILDABBR */
 
@@ -46,12 +50,12 @@ static char wildabbr[] = "WILDABBR";
 static const char gmt[] = "GMT";
 
 /*
-** The DST rules to use if TZ has no rules and we can't load TZDEFRULES.
-** We default to US rules as of 1999-08-17.
-** POSIX 1003.1 section 8.1.1 says that the default DST rules are
-** implementation dependent; for historical reasons, US rules are a
-** common default.
-*/
+ * The DST rules to use if TZ has no rules and we can't load TZDEFRULES.
+ * We default to US rules as of 1999-08-17.
+ * POSIX 1003.1 section 8.1.1 says that the default DST rules are
+ * implementation dependent; for historical reasons, US rules are a
+ * common default.
+ */
 #define TZDEFRULESTRING ",M4.1.0,M10.5.0"
 
 struct ttinfo
@@ -100,8 +104,8 @@ struct rule
                                         * week */
 
 /*
-** Prototypes for static functions.
-*/
+ * Prototypes for static functions.
+ */
 
 static long detzcode(const char *codep);
 static const char *getzname(const char *strp);
@@ -114,12 +118,20 @@ static void gmtsub(const time_t *timep, long offset, struct pg_tm * tmp);
 static void localsub(const time_t *timep, long offset, struct pg_tm * tmp);
 static int increment_overflow(int *number, int delta);
 static int normalize_overflow(int *tensptr, int *unitsptr, int base);
-static time_t time1(struct pg_tm * tmp, void (*funcp) (const time_t *, long, struct pg_tm *), long offset);
-static time_t time2(struct pg_tm * tmp, void (*funcp) (const time_t *, long, struct pg_tm *), long offset, int *okayp);
-static time_t time2sub(struct pg_tm * tmp, void (*funcp) (const time_t *, long, struct pg_tm *), long offset, int *okayp, int do_norm_secs);
-static void timesub(const time_t *timep, long offset, const struct state * sp, struct pg_tm * tmp);
+static time_t time1(struct pg_tm * tmp,
+                   void (*funcp) (const time_t *, long, struct pg_tm *),
+                   long offset);
+static time_t time2(struct pg_tm * tmp,
+                   void (*funcp) (const time_t *, long, struct pg_tm *),
+                   long offset, int *okayp);
+static time_t time2sub(struct pg_tm * tmp,
+                      void (*funcp) (const time_t *, long, struct pg_tm *),
+                      long offset, int *okayp, int do_norm_secs);
+static void timesub(const time_t *timep, long offset,
+                   const struct state * sp, struct pg_tm * tmp);
 static int tmcomp(const struct pg_tm * atmp, const struct pg_tm * btmp);
-static time_t transtime(time_t janfirst, int year, const struct rule * rulep, long offset);
+static time_t transtime(time_t janfirst, int year,
+                       const struct rule * rulep, long offset);
 static int tzload(const char *name, struct state * sp);
 static int tzparse(const char *name, struct state * sp, int lastditch);
 
@@ -134,12 +146,12 @@ static int    lcl_is_set = 0;
 static int gmt_is_set = 0;
 
 /*
-** Section 4.12.3 of X3.159-1989 requires that
-** Except for the strftime function, these functions [asctime,
-** ctime, gmtime, localtime] return values in one of two static
-** objects: a broken-down time structure and an array of char.
-** Thanks to Paul Eggert (eggert@twinsun.com) for noting this.
-*/
+ * Section 4.12.3 of X3.159-1989 requires that
+ * Except for the strftime function, these functions [asctime,
+ * ctime, gmtime, localtime] return values in one of two static
+ * objects: a broken-down time structure and an array of char.
+ * Thanks to Paul Eggert (eggert@twinsun.com) for noting this.
+ */
 
 static struct pg_tm tm;
 
@@ -184,7 +196,7 @@ tzload(register const char *name, register struct state * sp)
            (void) strcat(fullname, name);
 
            /*
-            * Set doaccess if '.' (as in "../") shows up in name.
+            * Set doaccess if '.' (as in "../") shows up in name.
             */
            if (strchr(name, '.') != NULL)
                doaccess = TRUE;
@@ -313,11 +325,10 @@ static const int year_lengths[2] = {
 };
 
 /*
-** Given a pointer into a time zone string, scan until a character that is not
-** a valid character in a zone name is found.  Return a pointer to that
-** character.
-*/
-
+ * Given a pointer into a time zone string, scan until a character that is not
+ * a valid character in a zone name is found.  Return a pointer to that
+ * character.
+ */
 static const char *
 getzname(register const char *strp)
 {
@@ -330,12 +341,11 @@ getzname(register const char *strp)
 }
 
 /*
-** Given a pointer into a time zone string, extract a number from that string.
-** Check that the number is within a specified range; if it is not, return
-** NULL.
-** Otherwise, return a pointer to the first character not part of the number.
-*/
-
+ * Given a pointer into a time zone string, extract a number from that string.
+ * Check that the number is within a specified range; if it is not, return
+ * NULL.
+ * Otherwise, return a pointer to the first character not part of the number.
+ */
 static const char *
 getnum(register const char *strp, int *nump, const int min, const int max)
 {
@@ -359,22 +369,21 @@ getnum(register const char *strp, int *nump, const int min, const int max)
 }
 
 /*
-** Given a pointer into a time zone string, extract a number of seconds,
-** in hh[:mm[:ss]] form, from the string.
-** If any error occurs, return NULL.
-** Otherwise, return a pointer to the first character not part of the number
-** of seconds.
-*/
-
+ * Given a pointer into a time zone string, extract a number of seconds,
+ * in hh[:mm[:ss]] form, from the string.
+ * If any error occurs, return NULL.
+ * Otherwise, return a pointer to the first character not part of the number
+ * of seconds.
+ */
 static const char *
 getsecs(register const char *strp, long *secsp)
 {
    int         num;
 
    /*
-    * * `HOURSPERDAY * DAYSPERWEEK - 1' allows quasi-Posix rules like *
-    * "M10.4.6/26", which does not conform to Posix, but which
-    * specifies the equivalent of ``02:00 on the first Sunday on or
+    * `HOURSPERDAY * DAYSPERWEEK - 1' allows quasi-Posix rules like
+    * "M10.4.6/26", which does not conform to Posix, but which
+    * specifies the equivalent of ``02:00 on the first Sunday on or
     * after 23 Oct''.
     */
    strp = getnum(strp, &num, 0, HOURSPERDAY * DAYSPERWEEK - 1);
@@ -402,12 +411,11 @@ getsecs(register const char *strp, long *secsp)
 }
 
 /*
-** Given a pointer into a time zone string, extract an offset, in
-** [+-]hh[:mm[:ss]] form, from the string.
-** If any error occurs, return NULL.
-** Otherwise, return a pointer to the first character not part of the time.
-*/
-
+ * Given a pointer into a time zone string, extract an offset, in
+ * [+-]hh[:mm[:ss]] form, from the string.
+ * If any error occurs, return NULL.
+ * Otherwise, return a pointer to the first character not part of the time.
+ */
 static const char *
 getoffset(register const char *strp, long *offsetp)
 {
@@ -429,19 +437,18 @@ getoffset(register const char *strp, long *offsetp)
 }
 
 /*
-** Given a pointer into a time zone string, extract a rule in the form
-** date[/time].  See POSIX section 8 for the format of "date" and "time".
-** If a valid rule is not found, return NULL.
-** Otherwise, return a pointer to the first character not part of the rule.
-*/
-
+ * Given a pointer into a time zone string, extract a rule in the form
+ * date[/time].  See POSIX section 8 for the format of "date" and "time".
+ * If a valid rule is not found, return NULL.
+ * Otherwise, return a pointer to the first character not part of the rule.
+ */
 static const char *
 getrule(const char *strp, register struct rule * rulep)
 {
    if (*strp == 'J')
    {
        /*
-        * Julian day.
+        * Julian day.
         */
        rulep->r_type = JULIAN_DAY;
        ++strp;
@@ -450,7 +457,7 @@ getrule(const char *strp, register struct rule * rulep)
    else if (*strp == 'M')
    {
        /*
-        * Month, week, day.
+        * Month, week, day.
         */
        rulep->r_type = MONTH_NTH_DAY_OF_WEEK;
        ++strp;
@@ -469,7 +476,7 @@ getrule(const char *strp, register struct rule * rulep)
    else if (is_digit(*strp))
    {
        /*
-        * Day of year.
+        * Day of year.
         */
        rulep->r_type = DAY_OF_YEAR;
        strp = getnum(strp, &rulep->r_day, 0, DAYSPERLYEAR - 1);
@@ -481,7 +488,7 @@ getrule(const char *strp, register struct rule * rulep)
    if (*strp == '/')
    {
        /*
-        * Time specified.
+        * Time specified.
         */
        ++strp;
        strp = getsecs(strp, &rulep->r_time);
@@ -492,13 +499,13 @@ getrule(const char *strp, register struct rule * rulep)
 }
 
 /*
-** Given the Epoch-relative time of January 1, 00:00:00 UTC, in a year, the
-** year, a rule, and the offset from UTC at the time that rule takes effect,
-** calculate the Epoch-relative time that rule takes effect.
-*/
-
+ * Given the Epoch-relative time of January 1, 00:00:00 UTC, in a year, the
+ * year, a rule, and the offset from UTC at the time that rule takes effect,
+ * calculate the Epoch-relative time that rule takes effect.
+ */
 static time_t
-transtime(const time_t janfirst, const int year, register const struct rule * rulep, const long offset)
+transtime(const time_t janfirst, const int year,
+         register const struct rule * rulep, const long offset)
 {
    register int leapyear;
    register time_t value = 0;
@@ -517,10 +524,10 @@ transtime(const time_t janfirst, const int year, register const struct rule * ru
        case JULIAN_DAY:
 
            /*
-            * Jn - Julian day, 1 == January 1, 60 == March 1 even in
-            * leap * years. * In non-leap years, or if the day number is
-            * 59 or less, just add SECSPERDAY times the day number-1 to
-            * the time of January 1, midnight, to get the day.
+            * Jn - Julian day, 1 == January 1, 60 == March 1 even in
+            * leap years. In non-leap years, or if the day number is
+            * 59 or less, just add SECSPERDAY times the day number-1 to
+            * the time of January 1, midnight, to get the day.
             */
            value = janfirst + (rulep->r_day - 1) * SECSPERDAY;
            if (leapyear && rulep->r_day >= 60)
@@ -530,8 +537,8 @@ transtime(const time_t janfirst, const int year, register const struct rule * ru
        case DAY_OF_YEAR:
 
            /*
-            * * n - day of year. * Just add SECSPERDAY times the day
-            * number to the time of January 1, midnight, to get the
+            * n - day of year. Just add SECSPERDAY times the day
+            * number to the time of January 1, midnight, to get the
             * day.
             */
            value = janfirst + rulep->r_day * SECSPERDAY;
@@ -540,15 +547,15 @@ transtime(const time_t janfirst, const int year, register const struct rule * ru
        case MONTH_NTH_DAY_OF_WEEK:
 
            /*
-            * Mm.n.d - nth "dth day" of month m.
+            * Mm.n.d - nth "dth day" of month m.
             */
            value = janfirst;
            for (i = 0; i < rulep->r_mon - 1; ++i)
                value += mon_lengths[leapyear][i] * SECSPERDAY;
 
            /*
-            * Use Zeller's Congruence to get day-of-week of first day
-            * of month.
+            * Use Zeller's Congruence to get day-of-week of first day
+            * of month.
             */
            m1 = (rulep->r_mon + 9) % 12 + 1;
            yy0 = (rulep->r_mon <= 2) ? (year - 1) : year;
@@ -560,9 +567,9 @@ transtime(const time_t janfirst, const int year, register const struct rule * ru
                dow += DAYSPERWEEK;
 
            /*
-            * "dow" is the day-of-week of the first day of the month.
-            * Get the day-of-month (zero-origin) of the first "dow" day
-            * of the month.
+            * "dow" is the day-of-week of the first day of the month.
+            * Get the day-of-month (zero-origin) of the first "dow" day
+            * of the month.
             */
            d = rulep->r_day - dow;
            if (d < 0)
@@ -576,25 +583,25 @@ transtime(const time_t janfirst, const int year, register const struct rule * ru
            }
 
            /*
-            * "d" is the day-of-month (zero-origin) of the day we want.
+            * "d" is the day-of-month (zero-origin) of the day we want.
             */
            value += d * SECSPERDAY;
            break;
    }
 
    /*
-    * * "value" is the Epoch-relative time of 00:00:00 UTC on the day in *
-    * question.  To get the Epoch-relative time of the specified local *
-    * time on that day, add the transition time and the current offset *
+    * "value" is the Epoch-relative time of 00:00:00 UTC on the day in
+    * question.  To get the Epoch-relative time of the specified local
+    * time on that day, add the transition time and the current offset
     * from UTC.
     */
    return value + rulep->r_time + offset;
 }
 
 /*
-** Given a POSIX section 8-style TZ string, fill in the rule tables as
-** appropriate.
-*/
+ * Given a POSIX section 8-style TZ string, fill in the rule tables as
+ * appropriate.
+ */
 
 static int
 tzparse(const char *name, register struct state * sp, const int lastditch)
@@ -672,7 +679,7 @@ tzparse(const char *name, register struct state * sp, const int lastditch)
            sp->typecnt = 2;    /* standard time and DST */
 
            /*
-            * Two transitions per year, from EPOCH_YEAR to 2037.
+            * Two transitions per year, from EPOCH_YEAR to 2037.
             */
            sp->timecnt = 2 * (2037 - EPOCH_YEAR + 1);
            if (sp->timecnt > TZ_MAX_TIMES)
@@ -723,7 +730,7 @@ tzparse(const char *name, register struct state * sp, const int lastditch)
                return -1;
 
            /*
-            * Initial values of theirstdoffset and theirdstoffset.
+            * Initial values of theirstdoffset and theirdstoffset.
             */
            theirstdoffset = 0;
            for (i = 0; i < sp->timecnt; ++i)
@@ -749,13 +756,13 @@ tzparse(const char *name, register struct state * sp, const int lastditch)
            }
 
            /*
-            * Initially we're assumed to be in standard time.
+            * Initially we're assumed to be in standard time.
             */
            isdst = FALSE;
            theiroffset = theirstdoffset;
 
            /*
-            * * Now juggle transition times and types * tracking offsets
+            * Now juggle transition times and types tracking offsets
             * as you do.
             */
            for (i = 0; i < sp->timecnt; ++i)
@@ -769,16 +776,16 @@ tzparse(const char *name, register struct state * sp, const int lastditch)
                else
                {
                    /*
-                    * * If summer time is in effect, and the * transition
-                    * time was not specified as standard time, add the
-                    * summer time * offset to the transition time; *
-                    * otherwise, add the standard time offset to the
+                    * If summer time is in effect, and the transition
+                    * time was not specified as standard time, add the
+                    * summer time offset to the transition time;
+                    * otherwise, add the standard time offset to the
                     * transition time.
                     */
 
                    /*
-                    * * Transitions from DST to DDST * will effectively
-                    * disappear since * POSIX provides for only one DST *
+                    * Transitions from DST to DDST will effectively
+                    * disappear since POSIX provides for only one DST
                     * offset.
                     */
                    if (isdst && !sp->ttis[j].tt_ttisstd)
@@ -800,7 +807,7 @@ tzparse(const char *name, register struct state * sp, const int lastditch)
            }
 
            /*
-            * * Finally, fill in ttis. * ttisstd and ttisgmt need not be
+            * Finally, fill in ttis. ttisstd and ttisgmt need not be
             * handled.
             */
            sp->ttis[0].tt_gmtoff = -stdoffset;
@@ -871,14 +878,13 @@ pg_tzset(const char *name)
 }
 
 /*
-** The easy way to behave "as if no library function calls" localtime
-** is to not call it--so we drop its guts into "localsub", which can be
-** freely called.  (And no, the PANS doesn't require the above behavior--
-** but it *is* desirable.)
-**
-** The unused offset argument is for the benefit of mktime variants.
-*/
-
+ * The easy way to behave "as if no library function calls" localtime
+ * is to not call it--so we drop its guts into "localsub", which can be
+ * freely called.  (And no, the PANS doesn't require the above behavior--
+ * but it *is* desirable.)
+ *
+ * The unused offset argument is for the benefit of mktime variants.
+ */
 static void
 localsub(const time_t *timep, const long offset, struct pg_tm * tmp)
 {
@@ -907,16 +913,12 @@ localsub(const time_t *timep, const long offset, struct pg_tm * tmp)
    }
    ttisp = &sp->ttis[i];
 
-   /*
-    * * To get (wrong) behavior that's compatible with System V Release
-    * 2.0 * you'd replace the statement below with *  t +=
-    * ttisp->tt_gmtoff; *  timesub(&t, 0L, sp, tmp);
-    */
    timesub(&t, ttisp->tt_gmtoff, sp, tmp);
    tmp->tm_isdst = ttisp->tt_isdst;
    tmp->tm_zone = &sp->chars[ttisp->tt_abbrind];
 }
 
+
 struct pg_tm *
 pg_localtime(const time_t *timep)
 {
@@ -926,9 +928,8 @@ pg_localtime(const time_t *timep)
 
 
 /*
-** gmtsub is to gmtime as localsub is to localtime.
-*/
-
+ * gmtsub is to gmtime as localsub is to localtime.
+ */
 static void
 gmtsub(const time_t *timep, const long offset, struct pg_tm * tmp)
 {
@@ -940,8 +941,8 @@ gmtsub(const time_t *timep, const long offset, struct pg_tm * tmp)
    timesub(timep, offset, gmtptr, tmp);
 
    /*
-    * * Could get fancy here and deliver something such as * "UTC+xxxx"
-    * or "UTC-xxxx" if offset is non-zero, but this is no time for a
+    * Could get fancy here and deliver something such as "UTC+xxxx"
+    * or "UTC-xxxx" if offset is non-zero, but this is no time for a
     * treasure hunt.
     */
    if (offset != 0)
@@ -959,7 +960,8 @@ pg_gmtime(const time_t *timep)
 
 
 static void
-timesub(const time_t *timep, const long offset, register const struct state * sp, register struct pg_tm * tmp)
+timesub(const time_t *timep, const long offset,
+       register const struct state * sp, register struct pg_tm * tmp)
 {
    register const struct lsinfo *lp;
    register long days;
@@ -1004,7 +1006,7 @@ timesub(const time_t *timep, const long offset, register const struct state * sp
    if (*timep == 0x80000000)
    {
        /*
-        * A 3B1 muffs the division on the most negative number.
+        * A 3B1 muffs the division on the most negative number.
         */
        days = -24855;
        rem = -11648;
@@ -1026,7 +1028,7 @@ timesub(const time_t *timep, const long offset, register const struct state * sp
    tmp->tm_min = (int) (rem / SECSPERMIN);
 
    /*
-    * * A positive leap second requires a special * representation.  This
+    * A positive leap second requires a special representation.  This
     * uses "... ??:59:60" et seq.
     */
    tmp->tm_sec = (int) (rem % SECSPERMIN) + hit;
@@ -1058,20 +1060,20 @@ timesub(const time_t *timep, const long offset, register const struct state * sp
 }
 
 /*
-** Adapted from code provided by Robert Elz, who writes:
-** The "best" way to do mktime I think is based on an idea of Bob
-** Kridle's (so its said...) from a long time ago.
-** [kridle@xinet.com as of 1996-01-16.]
-** It does a binary search of the time_t space.  Since time_t's are
-** just 32 bits, its a max of 32 iterations (even at 64 bits it
-** would still be very reasonable).
-*/
+ * Adapted from code provided by Robert Elz, who writes:
+ * The "best" way to do mktime I think is based on an idea of Bob
+ * Kridle's (so its said...) from a long time ago.
+ * [kridle@xinet.com as of 1996-01-16.]
+ * It does a binary search of the time_t space.  Since time_t's are
+ * just 32 bits, its a max of 32 iterations (even at 64 bits it
+ * would still be very reasonable).
+ */
 
 #define WRONG  (-1)
 
 /*
-** Simplified normalize logic courtesy Paul Eggert (eggert@twinsun.com).
-*/
+ * Simplified normalize logic courtesy Paul Eggert (eggert@twinsun.com).
+ */
 
 static int
 increment_overflow(int *number, int delta)
@@ -1109,7 +1111,10 @@ tmcomp(register const struct pg_tm * atmp, register const struct pg_tm * btmp)
    return result;
 }
 
-static time_t time2sub(struct pg_tm * tmp, void (*funcp) (const time_t *, long, struct pg_tm *), const long offset, int *okayp, const int do_norm_secs)
+static time_t
+time2sub(struct pg_tm * tmp,
+        void (*funcp) (const time_t *, long, struct pg_tm *),
+        const long offset, int *okayp, const int do_norm_secs)
 {
    register const struct state *sp;
    register int dir;
@@ -1138,7 +1143,7 @@ static time_t time2sub(struct pg_tm * tmp, void (*funcp) (const time_t *, long,
        return WRONG;
 
    /*
-    * * Turn yourtm.tm_year into an actual year number for now. * It is
+    * Turn yourtm.tm_year into an actual year number for now. It is
     * converted back to an offset from TM_YEAR_BASE later.
     */
    if (increment_overflow(&yourtm.tm_year, TM_YEAR_BASE))
@@ -1177,10 +1182,10 @@ static time_t time2sub(struct pg_tm * tmp, void (*funcp) (const time_t *, long,
    else if (yourtm.tm_year + TM_YEAR_BASE < EPOCH_YEAR)
    {
        /*
-        * * We can't set tm_sec to 0, because that might push the * time
-        * below the minimum representable time. Set tm_sec to 59
-        * instead. * This assumes that the minimum representable time is *
-        * not in the same minute that a leap second was deleted from, *
+        * We can't set tm_sec to 0, because that might push the time
+        * below the minimum representable time. Set tm_sec to 59
+        * instead. This assumes that the minimum representable time is
+        * not in the same minute that a leap second was deleted from,
         * which is a safer assumption than using 58 would be.
         */
        if (increment_overflow(&yourtm.tm_sec, 1 - SECSPERMIN))
@@ -1195,14 +1200,14 @@ static time_t time2sub(struct pg_tm * tmp, void (*funcp) (const time_t *, long,
    }
 
    /*
-    * * Divide the search space in half * (this works whether time_t is
+    * Divide the search space in half (this works whether time_t is
     * signed or unsigned).
     */
    bits = TYPE_BIT(time_t) -1;
 
    /*
-    * * If time_t is signed, then 0 is just above the median, * assuming
-    * two's complement arithmetic. If time_t is unsigned, then (1 <<
+    * If time_t is signed, then 0 is just above the median, assuming
+    * two's complement arithmetic. If time_t is unsigned, then (1 <<
     * bits) is just above the median.
     */
    t = TYPE_SIGNED(time_t) ? 0 : (((time_t) 1) << bits);
@@ -1226,12 +1231,12 @@ static time_t time2sub(struct pg_tm * tmp, void (*funcp) (const time_t *, long,
            break;
 
        /*
-        * * Right time, wrong type. * Hunt for right time, right type. *
-        * It's okay to guess wrong since the guess gets checked.
+        * Right time, wrong type. Hunt for right time, right type.
+        * It's okay to guess wrong since the guess gets checked.
         */
 
        /*
-        * The (void *) casts are the benefit of SunOS 3.3 on Sun 2's.
+        * The (void *) casts are the benefit of SunOS 3.3 on Sun 2's.
         */
        sp = (const struct state *)
            (((void *) funcp == (void *) localsub) ?
@@ -1253,7 +1258,7 @@ static time_t time2sub(struct pg_tm * tmp, void (*funcp) (const time_t *, long,
                    continue;
 
                /*
-                * We have a match.
+                * We have a match.
                 */
                t = newt;
                goto label;
@@ -1271,20 +1276,26 @@ label:
    return t;
 }
 
-static time_t time2(struct pg_tm * tmp, void (*funcp) (const time_t *, long, struct pg_tm *), const long offset, int *okayp)
+static time_t
+time2(struct pg_tm * tmp,
+     void (*funcp) (const time_t *, long, struct pg_tm *),
+     const long offset, int *okayp)
 {
    time_t      t;
 
    /*
-    * * First try without normalization of seconds * (in case tm_sec
-    * contains a value associated with a leap second). If that fails,
+    * First try without normalization of seconds (in case tm_sec
+    * contains a value associated with a leap second). If that fails,
     * try with normalization of seconds.
     */
    t = time2sub(tmp, funcp, offset, okayp, FALSE);
    return *okayp ? t : time2sub(tmp, funcp, offset, okayp, TRUE);
 }
 
-static time_t time1(struct pg_tm * tmp, void (*funcp) (const time_t *, long, struct pg_tm *), const long offset)
+static time_t
+time1(struct pg_tm * tmp,
+     void (*funcp) (const time_t *, long, struct pg_tm *),
+     const long offset)
 {
    register time_t t;
    register const struct state *sp;
@@ -1305,14 +1316,14 @@ static time_t time1(struct pg_tm * tmp, void (*funcp) (const time_t *, long, str
        return t;
 
    /*
-    * * We're supposed to assume that somebody took a time of one type *
-    * and did some math on it that yielded a "struct pg_tm" that's bad. *
-    * We try to divine the type they started from and adjust to the *
+    * We're supposed to assume that somebody took a time of one type
+    * and did some math on it that yielded a "struct pg_tm" that's bad.
+    * We try to divine the type they started from and adjust to the
     * type they need.
     */
 
    /*
-    * The (void *) casts are the benefit of SunOS 3.3 on Sun 2's.
+    * The (void *) casts are the benefit of SunOS 3.3 on Sun 2's.
     */
    sp = (const struct state *) (((void *) funcp == (void *) localsub) ?
                                 lclptr : gmtptr);
index 75b30724897fc15be93539c77fcc6bc715c3b59a..7339ef0db55bf72fa919e3ed137533a358b6656d 100644 (file)
@@ -2,17 +2,20 @@
 #define PRIVATE_H
 
 /*
-** This file is in the public domain, so clarified as of
-** 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
-*/
+ * This file is in the public domain, so clarified as of
+ * 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
+ *
+ * IDENTIFICATION
+ *   $PostgreSQL: pgsql/src/timezone/private.h,v 1.8 2004/05/21 20:59:10 tgl Exp $
+ */
 
 /*
-** This header is for use ONLY with the time conversion code.
-** There is no guarantee that it will remain unchanged,
-** or that it will remain at all.
-** Do NOT copy it to any system include directory.
-** Thank you!
-*/
+ * This header is for use ONLY with the time conversion code.
+ * There is no guarantee that it will remain unchanged,
+ * or that it will remain at all.
+ * Do NOT copy it to any system include directory.
+ * Thank you!
+ */
 
 #include <limits.h>                /* for CHAR_BIT */
 #include <sys/wait.h>          /* for WIFEXITED and WEXITSTATUS */
 #define WEXITSTATUS(status) (((status) >> 8) & 0xff)
 #endif   /* !defined WEXITSTATUS */
 
-/* Unlike <ctype.h>'s isdigit, this also works if c < 0 | c > UCHAR_MAX.  */
+/* Unlike <ctype.h>'s isdigit, this also works if c < 0 | c > UCHAR_MAX. */
 #define is_digit(c) ((unsigned)(c) - '0' <= 9)
 
 /*
-** SunOS 4.1.1 headers lack EXIT_SUCCESS.
-*/
+ * SunOS 4.1.1 headers lack EXIT_SUCCESS.
+ */
 
 #ifndef EXIT_SUCCESS
 #define EXIT_SUCCESS   0
 #endif   /* !defined EXIT_SUCCESS */
 
 /*
-** SunOS 4.1.1 headers lack EXIT_FAILURE.
-*/
+ * SunOS 4.1.1 headers lack EXIT_FAILURE.
+ */
 
 #ifndef EXIT_FAILURE
 #define EXIT_FAILURE   1
 #endif   /* !defined EXIT_FAILURE */
 
 /*
-** SunOS 4.1.1 libraries lack remove.
-*/
+ * SunOS 4.1.1 libraries lack remove.
+ */
 
 #ifndef remove
 extern int unlink(const char *filename);
-
 #define remove unlink
 #endif   /* !defined remove */
 
@@ -92,11 +94,11 @@ extern char *scheck(const char *string, const char *format);
 
 #ifndef INT_STRLEN_MAXIMUM
 /*
-** 302 / 1000 is log10(2.0) rounded up.
-** Subtract one for the sign bit if the type is signed;
-** add one for integer division truncation;
-** add one more for a minus sign if the type is signed.
-*/
+ * 302 / 1000 is log10(2.0) rounded up.
+ * Subtract one for the sign bit if the type is signed;
+ * add one for integer division truncation;
+ * add one more for a minus sign if the type is signed.
+ */
 #define INT_STRLEN_MAXIMUM(type) \
    ((TYPE_BIT(type) - TYPE_SIGNED(type)) * 302 / 1000 + 1 + TYPE_SIGNED(type))
 #endif   /* !defined INT_STRLEN_MAXIMUM */
@@ -104,7 +106,7 @@ extern char *scheck(const char *string, const char *format);
 #define _(msgid) (msgid)
 
 /*
-** UNIX was a registered trademark of The Open Group in 2003.
-*/
+ * UNIX was a registered trademark of The Open Group in 2003.
+ */
 
 #endif   /* !defined PRIVATE_H */
index 8b72a4dcfad71a22f915144394fa0aafc06a4edf..992739e8156189e76aa8bbd9a66c395a4bc442f1 100644 (file)
@@ -1,3 +1,11 @@
+/*
+ * This file is in the public domain, so clarified as of
+ * 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
+ *
+ * IDENTIFICATION
+ *   $PostgreSQL: pgsql/src/timezone/scheck.c,v 1.5 2004/05/21 20:59:10 tgl Exp $
+ */
+
 #include "postgres.h"
 
 #include "private.h"
index 9a64df1f1d3458a593e73f0233ffe8c765383639..3b505364ef6d99c958834699cc2dab6545088999 100644 (file)
@@ -1,19 +1,22 @@
 /*
-** Copyright (c) 1989 The Regents of the University of California.
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms are permitted
-** provided that the above copyright notice and this paragraph are
-** duplicated in all such forms and that any documentation,
-** advertising materials, and other materials related to such
-** distribution and use acknowledge that the software was developed
-** by the University of California, Berkeley.  The name of the
-** University may not be used to endorse or promote products derived
-** from this software without specific prior written permission.
-** THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
-** IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-*/
+ * Copyright (c) 1989 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Berkeley.  The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * IDENTIFICATION
+ *   $PostgreSQL: pgsql/src/timezone/strftime.c,v 1.3 2004/05/21 20:59:10 tgl Exp $
+ */
 
 #include "postgres.h"
 
@@ -60,15 +63,19 @@ static const struct lc_time_T C_time_locale = {
    "%H:%M:%S",
 
    /*
-    * * x_fmt * C99 requires this format. * Using just numbers (as here)
-    * makes Quakers happier; * it's also compatible with SVR4.
+    * x_fmt
+    *
+    * C99 requires this format. Using just numbers (as here)
+    * makes Quakers happier; it's also compatible with SVR4.
     */
    "%m/%d/%y",
 
    /*
-    * * c_fmt * C99 requires this format. * Previously this code used "%D
-    * %X", but we now conform to C99. * Note that *      "%a %b %d
-    * %H:%M:%S %Y" * is used by Solaris 2.3.
+    * c_fmt
+    *
+    * C99 requires this format. Previously this code used "%D %X", but we now
+    * conform to C99. Note that "%a %b %d %H:%M:%S %Y" is used by Solaris
+    * 2.3.
     */
    "%a %b %e %T %Y",
 
@@ -84,7 +91,8 @@ static const struct lc_time_T C_time_locale = {
 
 static char *_add(const char *, char *, const char *);
 static char *_conv(int, const char *, char *, const char *);
-static char *_fmt(const char *, const struct pg_tm *, char *, const char *, int *);
+static char *_fmt(const char *, const struct pg_tm *, char *,
+                 const char *, int *);
 
 #define IN_NONE 0
 #define IN_SOME 1
@@ -93,7 +101,8 @@ static char *_fmt(const char *, const struct pg_tm *, char *, const char *, int
 
 
 size_t
-pg_strftime(char *s, size_t maxsize, const char *format, const struct pg_tm * t)
+pg_strftime(char *s, size_t maxsize, const char *format,
+           const struct pg_tm *t)
 {
    char       *p;
    int         warn;
@@ -107,7 +116,8 @@ pg_strftime(char *s, size_t maxsize, const char *format, const struct pg_tm * t)
 }
 
 static char *
-_fmt(const char *format, const struct pg_tm * t, char *pt, const char *ptlim, int *warnp)
+_fmt(const char *format, const struct pg_tm * t, char *pt, const char *ptlim,
+    int *warnp)
 {
    for (; *format; ++format)
    {
@@ -147,9 +157,9 @@ _fmt(const char *format, const struct pg_tm * t, char *pt, const char *ptlim, in
                case 'C':
 
                    /*
-                    * * %C used to do a... *  _fmt("%a %b %e %X %Y", t); *
-                    * ...whereas now POSIX 1003.2 calls for something
-                    * completely different. (ado, 1993-05-24)
+                    * %C used to do a... _fmt("%a %b %e %X %Y", t);
+                    * ...whereas now POSIX 1003.2 calls for something
+                    * completely different. (ado, 1993-05-24)
                     */
                    pt = _conv((t->tm_year + TM_YEAR_BASE) / 100,
                               "%02d", pt, ptlim);
@@ -175,10 +185,10 @@ _fmt(const char *format, const struct pg_tm * t, char *pt, const char *ptlim, in
                case 'O':
 
                    /*
-                    * * C99 locale modifiers. * The sequences *  %Ec %EC
-                    * %Ex %EX %Ey %EY *  %Od %oe %OH %OI %Om %OM *  %OS
-                    * %Ou %OU %OV %Ow %OW %Oy are supposed to provide
-                    * alternate representations.
+                    * C99 locale modifiers. The sequences  %Ec %EC
+                    * %Ex %EX %Ey %EY  %Od %oe %OH %OI %Om %OM  %OS
+                    * %Ou %OU %OV %Ow %OW %Oy are supposed to provide
+                    * alternate representations.
                     */
                    goto label;
                case 'e':
@@ -201,12 +211,11 @@ _fmt(const char *format, const struct pg_tm * t, char *pt, const char *ptlim, in
                case 'k':
 
                    /*
-                    * * This used to be... *  _conv(t->tm_hour % 12 ? *
-                    * t->tm_hour % 12 : 12, 2, ' '); * ...and has been
-                    * changed to the below to * match SunOS 4.1.1 and
-                    * Arnold Robbins' * strftime version 3.0.  That is,
-                    * "%k" and * "%l" have been swapped. * (ado,
-                    * 1993-05-24)
+                    * This used to be...  _conv(t->tm_hour % 12 ?  t->tm_hour
+                    * % 12 : 12, 2, ' '); ...and has been changed to the
+                    * below to match SunOS 4.1.1 and Arnold Robbins' strftime
+                    * version 3.0.  That is, "%k" and "%l" have been
+                    * swapped. (ado, 1993-05-24)
                     */
                    pt = _conv(t->tm_hour, "%2d", pt, ptlim);
                    continue;
@@ -222,10 +231,10 @@ _fmt(const char *format, const struct pg_tm * t, char *pt, const char *ptlim, in
                case 'l':
 
                    /*
-                    * * This used to be... *  _conv(t->tm_hour, 2, ' '); *
-                    * ...and has been changed to the below to match
-                    * SunOS 4.1.1 and Arnold Robbin's strftime version
-                    * 3.0.  That is, "%k" and * "%l" have been swapped. *
+                    * This used to be...  _conv(t->tm_hour, 2, ' ');
+                    * ...and has been changed to the below to match
+                    * SunOS 4.1.1 and Arnold Robbin's strftime version
+                    * 3.0.  That is, "%k" and "%l" have been swapped.
                     * (ado, 1993-05-24)
                     */
                    pt = _conv((t->tm_hour % 12) ?
@@ -285,9 +294,9 @@ _fmt(const char *format, const struct pg_tm * t, char *pt, const char *ptlim, in
                case 'u':
 
                    /*
-                    * * From Arnold Robbins' strftime version 3.0: * "ISO
-                    * 8601: Weekday as a decimal number * [1 (Monday) -
-                    * 7]" * (ado, 1993-05-24)
+                    * From Arnold Robbins' strftime version 3.0: "ISO 8601:
+                    * Weekday as a decimal number [1 (Monday) - 7]"
+                    * (ado, 1993-05-24)
                     */
                    pt = _conv((t->tm_wday == 0) ?
                               DAYSPERWEEK : t->tm_wday,
@@ -297,23 +306,23 @@ _fmt(const char *format, const struct pg_tm * t, char *pt, const char *ptlim, in
                case 'G':       /* ISO 8601 year (four digits) */
                case 'g':       /* ISO 8601 year (two digits) */
 /*
-** From Arnold Robbins' strftime version 3.0:  "the week number of the
-** year (the first Monday as the first day of week 1) as a decimal number
-** (01-53)."
-** (ado, 1993-05-24)
-**
-** From "http://www.ft.uni-erlangen.de/~mskuhn/iso-time.html" by Markus Kuhn:
-** "Week 01 of a year is per definition the first week which has the
-** Thursday in this year, which is equivalent to the week which contains
-** the fourth day of January. In other words, the first week of a new year
-** is the week which has the majority of its days in the new year. Week 01
-** might also contain days from the previous year and the week before week
-** 01 of a year is the last week (52 or 53) of the previous year even if
-** it contains days from the new year. A week starts with Monday (day 1)
-** and ends with Sunday (day 7).  For example, the first week of the year
-** 1997 lasts from 1996-12-30 to 1997-01-05..."
-** (ado, 1996-01-02)
-*/
+ * From Arnold Robbins' strftime version 3.0:  "the week number of the
+ * year (the first Monday as the first day of week 1) as a decimal number
+ * (01-53)."
+ * (ado, 1993-05-24)
+ *
+ * From "http://www.ft.uni-erlangen.de/~mskuhn/iso-time.html" by Markus Kuhn:
+ * "Week 01 of a year is per definition the first week which has the
+ * Thursday in this year, which is equivalent to the week which contains
+ * the fourth day of January. In other words, the first week of a new year
+ * is the week which has the majority of its days in the new year. Week 01
+ * might also contain days from the previous year and the week before week
+ * 01 of a year is the last week (52 or 53) of the previous year even if
+ * it contains days from the new year. A week starts with Monday (day 1)
+ * and ends with Sunday (day 7).  For example, the first week of the year
+ * 1997 lasts from 1996-12-30 to 1997-01-05..."
+ * (ado, 1996-01-02)
+ */
                    {
                        int         year;
                        int         yday;
@@ -334,14 +343,14 @@ _fmt(const char *format, const struct pg_tm * t, char *pt, const char *ptlim, in
                                DAYSPERNYEAR;
 
                            /*
-                            * * What yday (-3 ... 3) does * the ISO year
+                            * What yday (-3 ... 3) does the ISO year
                             * begin on?
                             */
                            bot = ((yday + 11 - wday) %
                                   DAYSPERWEEK) - 3;
 
                            /*
-                            * * What yday does the NEXT * ISO year begin
+                            * What yday does the NEXT ISO year begin
                             * on?
                             */
                            top = bot -
@@ -383,8 +392,8 @@ _fmt(const char *format, const struct pg_tm * t, char *pt, const char *ptlim, in
                case 'v':
 
                    /*
-                    * * From Arnold Robbins' strftime version 3.0: *
-                    * "date as dd-bbb-YYYY" (ado, 1993-05-24)
+                    * From Arnold Robbins' strftime version 3.0:
+                    * "date as dd-bbb-YYYY" (ado, 1993-05-24)
                     */
                    pt = _fmt("%e-%b-%Y", t, pt, ptlim, warnp);
                    continue;
@@ -426,8 +435,8 @@ _fmt(const char *format, const struct pg_tm * t, char *pt, const char *ptlim, in
                        pt = _add(t->tm_zone, pt, ptlim);
 
                    /*
-                    * * C99 says that %Z must be replaced by the * empty
-                    * string if the time zone is not determinable.
+                    * C99 says that %Z must be replaced by the empty
+                    * string if the time zone is not determinable.
                     */
                    continue;
                case 'z':
@@ -458,8 +467,8 @@ _fmt(const char *format, const struct pg_tm * t, char *pt, const char *ptlim, in
                case '%':
 
                    /*
-                    * * X311J/88-090 (4.12.3.5): if conversion char is *
-                    * undefined, behavior is undefined.  Print out the *
+                    * X311J/88-090 (4.12.3.5): if conversion char is
+                    * undefined, behavior is undefined.  Print out the
                     * character itself as printf(3) also does.
                     */
                default:
index cbea51ff3f221bbe4fdc3bcdd5390cd4878ccba9..29096f7d7968ebad98a3a95aa7473515c3ec96c7 100644 (file)
@@ -1,30 +1,32 @@
 #ifndef TZFILE_H
-
 #define TZFILE_H
 
 /*
-** This file is in the public domain, so clarified as of
-** 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
-*/
+ * This file is in the public domain, so clarified as of
+ * 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
+ *
+ * IDENTIFICATION
+ *   $PostgreSQL: pgsql/src/timezone/tzfile.h,v 1.5 2004/05/21 20:59:10 tgl Exp $
+ */
 
 /*
-** This header is for use ONLY with the time conversion code.
-** There is no guarantee that it will remain unchanged,
-** or that it will remain at all.
-** Do NOT copy it to any system include directory.
-** Thank you!
-*/
+ * This header is for use ONLY with the time conversion code.
+ * There is no guarantee that it will remain unchanged,
+ * or that it will remain at all.
+ * Do NOT copy it to any system include directory.
+ * Thank you!
+ */
 
 /*
-** Information about time zone files.
-*/
+ * Information about time zone files.
+ */
 
 #define TZDEFAULT  "localtime"
 #define TZDEFRULES "posixrules"
 
 /*
-** Each file begins with. . .
-*/
+ * Each file begins with. . .
+ */
 
 #define TZ_MAGIC   "TZif"
 
@@ -42,42 +44,43 @@ struct tzhead
    char        tzh_charcnt[4]; /* coded number of abbr. chars */
 };
 
-/*
-** . . .followed by. . .
-**
-** tzh_timecnt (char [4])s     coded transition times a la time(2)
-** tzh_timecnt (unsigned char)s    types of local time starting at above
-** tzh_typecnt repetitions of
-**     one (char [4])      coded UTC offset in seconds
-**     one (unsigned char) used to set tm_isdst
-**     one (unsigned char) that's an abbreviation list index
-** tzh_charcnt (char)s     '\0'-terminated zone abbreviations
-** tzh_leapcnt repetitions of
-**     one (char [4])      coded leap second transition times
-**     one (char [4])      total correction after above
-** tzh_ttisstdcnt (char)s      indexed by type; if TRUE, transition
-**                 time is standard time, if FALSE,
-**                 transition time is wall clock time
-**                 if absent, transition times are
-**                 assumed to be wall clock time
-** tzh_ttisgmtcnt (char)s      indexed by type; if TRUE, transition
-**                 time is UTC, if FALSE,
-**                 transition time is local time
-**                 if absent, transition times are
-**                 assumed to be local time
-*/
+/*----------
+ * . . .followed by. . .
+ *
+ * tzh_timecnt (char [4])s     coded transition times a la time(2)
+ * tzh_timecnt (unsigned char)s    types of local time starting at above
+ * tzh_typecnt repetitions of
+ *     one (char [4])      coded UTC offset in seconds
+ *     one (unsigned char) used to set tm_isdst
+ *     one (unsigned char) that's an abbreviation list index
+ * tzh_charcnt (char)s     '\0'-terminated zone abbreviations
+ * tzh_leapcnt repetitions of
+ *     one (char [4])      coded leap second transition times
+ *     one (char [4])      total correction after above
+ * tzh_ttisstdcnt (char)s      indexed by type; if TRUE, transition
+ *                 time is standard time, if FALSE,
+ *                 transition time is wall clock time
+ *                 if absent, transition times are
+ *                 assumed to be wall clock time
+ * tzh_ttisgmtcnt (char)s      indexed by type; if TRUE, transition
+ *                 time is UTC, if FALSE,
+ *                 transition time is local time
+ *                 if absent, transition times are
+ *                 assumed to be local time
+ *----------
+ */
 
 /*
-** In the current implementation, "tzset()" refuses to deal with files that
-** exceed any of the limits below.
-*/
+ * In the current implementation, "tzset()" refuses to deal with files that
+ * exceed any of the limits below.
+ */
 
 /*
-** The TZ_MAX_TIMES value below is enough to handle a bit more than a
-** year's worth of solar time (corrected daily to the nearest second) or
-** 138 years of Pacific Presidential Election time
-** (where there are three time zone transitions every fourth year).
-*/
+ * The TZ_MAX_TIMES value below is enough to handle a bit more than a
+ * year's worth of solar time (corrected daily to the nearest second) or
+ * 138 years of Pacific Presidential Election time
+ * (where there are three time zone transitions every fourth year).
+ */
 #define TZ_MAX_TIMES   370
 
 #define TZ_MAX_TYPES   256     /* Limited by what (unsigned char)'s can
@@ -127,9 +130,9 @@ struct tzhead
 #define EPOCH_WDAY TM_THURSDAY
 
 /*
-** Accurate only for the past couple of centuries;
-** that will probably do.
-*/
+ * Accurate only for the past couple of centuries;
+ * that will probably do.
+ */
 
 #define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
 
index 16e44ad6a7f0abec503060ffd0dd4175253404c0..a427e75686e2c1394955153ea8d06ee53ff31e19 100644 (file)
@@ -1,3 +1,11 @@
+/*
+ * This file is in the public domain, so clarified as of
+ * 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
+ *
+ * IDENTIFICATION
+ *   $PostgreSQL: pgsql/src/timezone/zic.c,v 1.7 2004/05/21 20:59:10 tgl Exp $
+ */
+
 #include "postgres.h"
 
 #include <locale.h>
 static char elsieid[] = "@(#)zic.c 7.115";
 
 /*
-** On some ancient hosts, predicates like `isspace(C)' are defined
-** only if isascii(C) || C == EOF. Modern hosts obey the C Standard,
-** which says they are defined only if C == ((unsigned char) C) || C == EOF.
-** Neither the C Standard nor Posix require that `isascii' exist.
-** For portability, we check both ancient and modern requirements.
-** If isascii is not defined, the isascii check succeeds trivially.
-*/
+ * On some ancient hosts, predicates like `isspace(C)' are defined
+ * only if isascii(C) || C == EOF. Modern hosts obey the C Standard,
+ * which says they are defined only if C == ((unsigned char) C) || C == EOF.
+ * Neither the C Standard nor Posix require that `isascii' exist.
+ * For portability, we check both ancient and modern requirements.
+ * If isascii is not defined, the isascii check succeeds trivially.
+ */
 #include <ctype.h>
 #ifndef isascii
 #define isascii(x) 1
@@ -67,8 +75,8 @@ struct rule
 };
 
 /*
-** r_dycode        r_dayofmonth    r_wday
-*/
+ * r_dycode        r_dayofmonth    r_wday
+ */
 
 #define DC_DOM     0   /* 1..31 */     /* unused */
 #define DC_DOWGEQ  1   /* 1..31 */     /* 0..6 (Sun..Sat) */
@@ -164,8 +172,8 @@ static int  timecnt;
 static int typecnt;
 
 /*
-** Line codes.
-*/
+ * Line codes.
+ */
 
 #define LC_RULE        0
 #define LC_ZONE        1
@@ -173,8 +181,8 @@ static int  typecnt;
 #define LC_LEAP        3
 
 /*
-** Which fields are which on a Zone line.
-*/
+ * Which fields are which on a Zone line.
+ */
 
 #define ZF_NAME        1
 #define ZF_GMTOFF  2
@@ -188,8 +196,8 @@ static int  typecnt;
 #define ZONE_MAXFIELDS 9
 
 /*
-** Which fields are which on a Zone continuation line.
-*/
+ * Which fields are which on a Zone continuation line.
+ */
 
 #define ZFC_GMTOFF 0
 #define ZFC_RULE   1
@@ -202,8 +210,8 @@ static int  typecnt;
 #define ZONEC_MAXFIELDS 7
 
 /*
-** Which files are which on a Rule line.
-*/
+ * Which files are which on a Rule line.
+ */
 
 #define RF_NAME        1
 #define RF_LOYEAR  2
@@ -217,16 +225,16 @@ static int    typecnt;
 #define RULE_FIELDS 10
 
 /*
-** Which fields are which on a Link line.
-*/
+ * Which fields are which on a Link line.
+ */
 
 #define LF_FROM        1
 #define LF_TO      2
 #define LINK_FIELDS 3
 
 /*
-** Which fields are which on a Leap line.
-*/
+ * Which fields are which on a Leap line.
+ */
 
 #define LP_YEAR        1
 #define LP_MONTH   2
@@ -237,8 +245,8 @@ static int  typecnt;
 #define LEAP_FIELDS 7
 
 /*
-** Year synonyms.
-*/
+ * Year synonyms.
+ */
 
 #define YR_MINIMUM 0
 #define YR_MAXIMUM 1
@@ -360,8 +368,8 @@ static long corr[TZ_MAX_LEAPS];
 static char roll[TZ_MAX_LEAPS];
 
 /*
-** Memory allocation.
-*/
+ * Memory allocation.
+ */
 
 static char *
 memcheck(ptr)
@@ -384,8 +392,8 @@ char       *const ptr;
 #define ecatalloc(oldp, newp)  memcheck(icatalloc((oldp), (newp)))
 
 /*
-** Error handling.
-*/
+ * Error handling.
+ */
 
 #ifndef HAVE_STRERROR
 static char *
@@ -418,8 +426,8 @@ static void
 error(const char *string)
 {
    /*
-    * * Match the format of "cc" to allow sh users to *  zic ... 2>&1 |
-    * error -t "*" -v on BSD systems.
+    * Match the format of "cc" to allow sh users to  zic ... 2>&1 |
+    * error -t "*" -v on BSD systems.
     */
    (void) fprintf(stderr, _("\"%s\", line %d: %s"),
                   filename, linenum, string);
@@ -564,7 +572,7 @@ main(int argc, char *argv[])
    for (i = 0; i < nzones; i = j)
    {
        /*
-        * Find the next non-continuation zone entry.
+        * Find the next non-continuation zone entry.
         */
        for (j = i + 1; j < nzones && zones[j].z_name == NULL; ++j)
            continue;
@@ -572,7 +580,7 @@ main(int argc, char *argv[])
    }
 
    /*
-    * Make links.
+    * Make links.
     */
    for (i = 0; i < nlinks; ++i)
    {
@@ -616,7 +624,7 @@ dolink(const char *fromfile, const char *tofile)
    }
 
    /*
-    * * We get to be careful here since * there's a fair chance of root
+    * We get to be careful here since there's a fair chance of root
     * running us.
     */
    if (!itsdir(toname))
@@ -670,11 +678,11 @@ dolink(const char *fromfile, const char *tofile)
 #endif   /* !defined INT_MIN */
 
 /*
-** The tz file format currently allows at most 32-bit quantities.
-** This restriction should be removed before signed 32-bit values
-** wrap around in 2038, but unfortunately this will require a
-** change to the tz file format.
-*/
+ * The tz file format currently allows at most 32-bit quantities.
+ * This restriction should be removed before signed 32-bit values
+ * wrap around in 2038, but unfortunately this will require a
+ * change to the tz file format.
+ */
 
 #define MAX_BITS_IN_FILE   32
 #define TIME_T_BITS_IN_FILE ((TYPE_BIT(time_t) < MAX_BITS_IN_FILE) ? TYPE_BIT(time_t) : MAX_BITS_IN_FILE)
@@ -717,12 +725,12 @@ itsdir(const char *name)
 }
 
 /*
-** Associate sets of rules with zones.
-*/
+ * Associate sets of rules with zones.
+ */
 
 /*
-** Sort by rule name.
-*/
+ * Sort by rule name.
+ */
 
 static int
 rcomp(const void *cp1, const void *cp2)
@@ -800,14 +808,14 @@ associate(void)
        if (zp->z_nrules == 0)
        {
            /*
-            * Maybe we have a local standard time offset.
+            * Maybe we have a local standard time offset.
             */
            eat(zp->z_filename, zp->z_linenum);
            zp->z_stdoff = gethms(zp->z_rule, _("unruly zone"),
                                  TRUE);
 
            /*
-            * * Note, though, that if there's no rule, * a '%s' in the
+            * Note, though, that if there's no rule, a '%s' in the
             * format is a bad thing.
             */
            if (strchr(zp->z_format, '%') != 0)
@@ -927,14 +935,14 @@ infile(const char *name)
        error(_("expected continuation line not found"));
 }
 
-/*
-** Convert a string of one of the forms
-** h   -h  hh:mm   -hh:mm  hh:mm:ss    -hh:mm:ss
-** into a number of seconds.
-** A null string maps to zero.
-** Call error with errstring and return zero on errors.
-*/
-
+/*----------
+ * Convert a string of one of the forms
+ * h   -h  hh:mm   -hh:mm  hh:mm:ss    -hh:mm:ss
+ * into a number of seconds.
+ * A null string maps to zero.
+ * Call error with errstring and return zero on errors.
+ *----------
+ */
 static long
 gethms(const char *string, const char *errstring, const int signable)
 {
@@ -1144,7 +1152,7 @@ inzsub(register char **fields, const int nfields, const int iscont)
    zones[nzones++] = z;
 
    /*
-    * * If there was an UNTIL field on this line, * there's more
+    * If there was an UNTIL field on this line, there's more
     * information about the zone on the next line.
     */
    return hasuntil;
@@ -1302,7 +1310,9 @@ inlink(register char **fields, const int nfields)
 }
 
 static void
-rulesub(register struct rule * rp, const char *loyearp, const char *hiyearp, const char *typep, const char *monthp, const char *dayp, const char *timep)
+rulesub(register struct rule * rp, const char *loyearp, const char *hiyearp,
+       const char *typep, const char *monthp, const char *dayp,
+       const char *timep)
 {
    register const struct lookup *lp;
    register const char *cp;
@@ -1346,7 +1356,7 @@ rulesub(register struct rule * rp, const char *loyearp, const char *hiyearp, con
    ifree(dp);
 
    /*
-    * Year work.
+    * Year work.
     */
    cp = loyearp;
    lp = byword(cp, begin_years);
@@ -1428,8 +1438,7 @@ rulesub(register struct rule * rp, const char *loyearp, const char *hiyearp, con
        min_year = rp->r_loyear;
 
    /*
-    * * Day work. * Accept things such as: *  1 *  last-Sunday *  Sun<=20 *
-    * Sun>=7
+    * Day work. Accept things such as:  1  last-Sunday  Sun<=20  Sun>=7
     */
    dp = ecpyalloc(dayp);
    if ((lp = byword(dp, lasts)) != NULL)
@@ -1520,14 +1529,14 @@ writezone(const char *name)
    unsigned char types[TZ_MAX_TIMES];
 
    /*
-    * Sort.
+    * Sort.
     */
    if (timecnt > 1)
        (void) qsort((void *) attypes, (size_t) timecnt,
                     (size_t) sizeof *attypes, atcomp);
 
    /*
-    * Optimize.
+    * Optimize.
     */
    {
        int         fromi;
@@ -1560,7 +1569,7 @@ writezone(const char *name)
    }
 
    /*
-    * Transfer.
+    * Transfer.
     */
    for (i = 0; i < timecnt; ++i)
    {
@@ -1572,7 +1581,7 @@ writezone(const char *name)
    (void) sprintf(fullname, "%s/%s", directory, name);
 
    /*
-    * Remove old file, if any, to snap links.
+    * Remove old file, if any, to snap links.
     */
    if (!itsdir(fullname) && remove(fullname) != 0 && errno != ENOENT)
    {
@@ -1714,14 +1723,14 @@ outzone(const struct zone * zpfirst, const int zonecount)
    char        startbuf[BUFSIZ];
 
    /*
-    * Now. . .finally. . .generate some useful data!
+    * Now. . .finally. . .generate some useful data!
     */
    timecnt = 0;
    typecnt = 0;
    charcnt = 0;
 
    /*
-    * * Thanks to Earl Chew (earl@dnd.icp.nec.com.au) * for noting the
+    * Thanks to Earl Chew (earl@dnd.icp.nec.com.au) for noting the
     * need to unconditionally initialize startttisstd.
     */
    startttisstd = FALSE;
@@ -1729,7 +1738,7 @@ outzone(const struct zone * zpfirst, const int zonecount)
    for (i = 0; i < zonecount; ++i)
    {
        /*
-        * A guess that may well be corrected later.
+        * A guess that may well be corrected later.
         */
        stdoff = 0;
        zp = &zpfirst[i];
@@ -1764,7 +1773,7 @@ outzone(const struct zone * zpfirst, const int zonecount)
                    break;
 
                /*
-                * * Mark which rules to do in the current year. * For
+                * Mark which rules to do in the current year. For
                 * those to do, calculate rpytime(rp, year);
                 */
                for (j = 0; j < zp->z_nrules; ++j)
@@ -1789,8 +1798,8 @@ outzone(const struct zone * zpfirst, const int zonecount)
                    if (useuntil)
                    {
                        /*
-                        * * Turn untiltime into UTC * assuming the
-                        * current gmtoff and stdoff values.
+                        * Turn untiltime into UTC assuming the
+                        * current gmtoff and stdoff values.
                         */
                        untiltime = zp->z_untiltime;
                        if (!zp->z_untilrule.r_todisgmt)
@@ -1802,7 +1811,7 @@ outzone(const struct zone * zpfirst, const int zonecount)
                    }
 
                    /*
-                    * * Find the rule (of those to do, if any) * that
+                    * Find the rule (of those to do, if any) that
                     * takes effect earliest in the year.
                     */
                    k = -1;
@@ -1885,7 +1894,7 @@ outzone(const struct zone * zpfirst, const int zonecount)
        }
 
        /*
-        * Now we may get to set starttime for the next zone line.
+        * Now we may get to set starttime for the next zone line.
         */
        if (useuntil)
        {
@@ -1930,7 +1939,8 @@ addtt(const time_t starttime, int type)
 }
 
 static int
-addtype(const long gmtoff, const char *abbr, const int isdst, const int ttisstd, const int ttisgmt)
+addtype(const long gmtoff, const char *abbr, const int isdst,
+       const int ttisstd, const int ttisgmt)
 {
    register int i,
                j;
@@ -1952,7 +1962,7 @@ addtype(const long gmtoff, const char *abbr, const int isdst, const int ttisstd,
    }
 
    /*
-    * * See if there's already an entry for this zone type. * If so, just
+    * See if there's already an entry for this zone type. If so, just
     * return its index.
     */
    for (i = 0; i < typecnt; ++i)
@@ -1965,7 +1975,7 @@ addtype(const long gmtoff, const char *abbr, const int isdst, const int ttisstd,
    }
 
    /*
-    * * There isn't one; add a new one, unless there are already too *
+    * There isn't one; add a new one, unless there are already too
     * many.
     */
    if (typecnt >= TZ_MAX_TYPES)
@@ -2031,7 +2041,7 @@ adjleap(void)
    register long last = 0;
 
    /*
-    * propagate leap seconds forward
+    * propagate leap seconds forward
     */
    for (i = 0; i < leapcnt; ++i)
    {
@@ -2107,14 +2117,14 @@ byword(register const char *word, register const struct lookup * table)
        return NULL;
 
    /*
-    * Look for exact match.
+    * Look for exact match.
     */
    for (lp = table; lp->l_word != NULL; ++lp)
        if (ciequal(word, lp->l_word))
            return lp;
 
    /*
-    * Look for inexact match.
+    * Look for inexact match.
     */
    foundlp = NULL;
    for (lp = table; lp->l_word != NULL; ++lp)
@@ -2200,9 +2210,9 @@ tadd(const time_t t1, const long t2)
 }
 
 /*
-** Given a rule, and a year, compute the date - in seconds since January 1,
-** 1970, 00:00 LOCAL time - in that year that the rule refers to.
-*/
+ * Given a rule, and a year, compute the date - in seconds since January 1,
+ * 1970, 00:00 LOCAL time - in that year that the rule refers to.
+ */
 
 static time_t
 rpytime(register const struct rule * rp, register const int wantedy)
@@ -2261,7 +2271,7 @@ rpytime(register const struct rule * rp, register const int wantedy)
        wday = eitol(EPOCH_WDAY);
 
        /*
-        * Don't trust mod of negative numbers.
+        * Don't trust mod of negative numbers.
         */
        if (dayoff >= 0)
            wday = (wday + dayoff) % LDAYSPERWEEK;
@@ -2333,7 +2343,7 @@ mkdirs(char *argname)
 #ifdef WIN32
 
        /*
-        * DOS drive specifier?
+        * DOS drive specifier?
         */
        if (isalpha((unsigned char) name[0]) &&
            name[1] == ':' && name[2] == '\0')
@@ -2345,9 +2355,9 @@ mkdirs(char *argname)
        if (!itsdir(name))
        {
            /*
-            * * It doesn't seem to exist, so we try to create it. *
-            * Creation may fail because of the directory being created
-            * by some other multiprocessor, so we get to do extra
+            * It doesn't seem to exist, so we try to create it.
+            * Creation may fail because of the directory being created
+            * by some other multiprocessor, so we get to do extra
             * checking.
             */
            if (mkdir(name, MKDIR_UMASK) != 0)
@@ -2387,8 +2397,8 @@ eitol(const int i)
 }
 
 /*
-** UNIX was a registered trademark of The Open Group in 2003.
-*/
+ * UNIX was a registered trademark of The Open Group in 2003.
+ */
 
 
 #ifdef WIN32