diff options
| author | Bruce Momjian | 2009-06-11 14:49:15 +0000 |
|---|---|---|
| committer | Bruce Momjian | 2009-06-11 14:49:15 +0000 |
| commit | d7471402794266078953f1bd113dab4913d631a1 (patch) | |
| tree | 618e392a84eaf837e00bf78f8694097b78fec227 /src/timezone | |
| parent | 4e86efb4e51b66ef57b3fe6f28576de23a1bf1c6 (diff) | |
8.4 pgindent run, with new combined Linux/FreeBSD/MinGW typedef list
provided by Andrew.
Diffstat (limited to 'src/timezone')
| -rw-r--r-- | src/timezone/localtime.c | 139 | ||||
| -rw-r--r-- | src/timezone/pgtz.c | 31 | ||||
| -rw-r--r-- | src/timezone/pgtz.h | 6 | ||||
| -rw-r--r-- | src/timezone/private.h | 20 | ||||
| -rw-r--r-- | src/timezone/strftime.c | 26 | ||||
| -rw-r--r-- | src/timezone/tzfile.h | 10 | ||||
| -rw-r--r-- | src/timezone/zic.c | 311 |
7 files changed, 305 insertions, 238 deletions
diff --git a/src/timezone/localtime.c b/src/timezone/localtime.c index 2efa3ecc0e..869b446209 100644 --- a/src/timezone/localtime.c +++ b/src/timezone/localtime.c @@ -3,7 +3,7 @@ * 1996-06-05 by Arthur David Olson. * * IDENTIFICATION - * $PostgreSQL: pgsql/src/timezone/localtime.c,v 1.20 2008/02/16 21:16:04 tgl Exp $ + * $PostgreSQL: pgsql/src/timezone/localtime.c,v 1.21 2009/06/11 14:49:15 momjian Exp $ */ /* @@ -77,7 +77,7 @@ struct rule static long detzcode(const char *codep); static pg_time_t detzcode64(const char *codep); -static int differ_by_repeat(pg_time_t t1, pg_time_t t0); +static int differ_by_repeat(pg_time_t t1, pg_time_t t0); static const char *getzname(const char *strp); static const char *getqzname(const char *strp, int delim); static const char *getnum(const char *strp, int *nump, int min, int max); @@ -85,16 +85,16 @@ static const char *getsecs(const char *strp, long *secsp); static const char *getoffset(const char *strp, long *offsetp); static const char *getrule(const char *strp, struct rule * rulep); static void gmtload(struct state * sp); -static struct pg_tm *gmtsub(const pg_time_t *timep, long offset, - struct pg_tm *tmp); -static struct pg_tm *localsub(const pg_time_t *timep, long offset, - struct pg_tm *tmp, const pg_tz *tz); -static int increment_overflow(int *number, int delta); +static struct pg_tm *gmtsub(const pg_time_t *timep, long offset, + struct pg_tm * tmp); +static struct pg_tm *localsub(const pg_time_t *timep, long offset, + struct pg_tm * tmp, const pg_tz *tz); +static int increment_overflow(int *number, int delta); static pg_time_t transtime(pg_time_t janfirst, int year, - const struct rule *rulep, long offset); -static int typesequiv(const struct state *sp, int a, int b); + const struct rule * rulep, long offset); +static int typesequiv(const struct state * sp, int a, int b); static struct pg_tm *timesub(const pg_time_t *timep, long offset, - const struct state *sp, struct pg_tm *tmp); + const struct state * sp, struct pg_tm * tmp); /* GMT timezone */ static struct state gmtmem; @@ -130,10 +130,10 @@ detzcode(const char *codep) static pg_time_t detzcode64(const char *codep) { - pg_time_t result; - int i; + pg_time_t result; + int i; - result = (codep[0] & 0x80) ? (~(int64) 0) : 0; + result = (codep[0] & 0x80) ? (~(int64) 0) : 0; for (i = 0; i < 8; ++i) result = result * 256 + (codep[i] & 0xff); return result; @@ -143,7 +143,7 @@ static int differ_by_repeat(pg_time_t t1, pg_time_t t0) { if (TYPE_INTEGRAL(pg_time_t) && - TYPE_BIT(pg_time_t) - TYPE_SIGNED(pg_time_t) < SECSPERREPEAT_BITS) + TYPE_BIT(pg_time_t) -TYPE_SIGNED(pg_time_t) <SECSPERREPEAT_BITS) return 0; return t1 - t0 == SECSPERREPEAT; } @@ -160,9 +160,9 @@ tzload(const char *name, char *canonname, struct state * sp, int doextend) { struct tzhead tzhead; char buf[2 * sizeof(struct tzhead) + - 2 * sizeof *sp + - 4 * TZ_MAX_TIMES]; - } u; + 2 * sizeof *sp + + 4 * TZ_MAX_TIMES]; + } u; if (name == NULL && (name = TZDEFAULT) == NULL) return -1; @@ -194,9 +194,9 @@ tzload(const char *name, char *canonname, struct state * sp, int doextend) (ttisgmtcnt != sp->typecnt && ttisgmtcnt != 0)) return -1; if (nread - (p - u.buf) < - sp->timecnt * stored + /* ats */ + sp->timecnt * stored + /* ats */ sp->timecnt + /* types */ - sp->typecnt * 6 + /* ttinfos */ + sp->typecnt * 6 + /* ttinfos */ sp->charcnt + /* chars */ sp->leapcnt * (stored + 4) + /* lsinfos */ ttisstdcnt + /* ttisstds */ @@ -271,10 +271,10 @@ tzload(const char *name, char *canonname, struct state * sp, int doextend) return -1; } } + /* - * Out-of-sort ats should mean we're running on a - * signed time_t system but using a data file with - * unsigned values (or vice versa). + * Out-of-sort ats should mean we're running on a signed time_t system + * but using a data file with unsigned values (or vice versa). */ for (i = 0; i < sp->timecnt - 2; ++i) if (sp->ats[i] > sp->ats[i + 1]) @@ -292,8 +292,8 @@ tzload(const char *name, char *canonname, struct state * sp, int doextend) /* * Ignore the beginning (harder). */ - int j; - + int j; + for (j = 0; j + i < sp->timecnt; ++j) { sp->ats[j] = sp->ats[j + i]; @@ -303,6 +303,7 @@ tzload(const char *name, char *canonname, struct state * sp, int doextend) } break; } + /* * If this is an old file, we're done. */ @@ -311,6 +312,7 @@ tzload(const char *name, char *canonname, struct state * sp, int doextend) nread -= p - u.buf; for (i = 0; i < nread; ++i) u.buf[i] = p[i]; + /* * If this is a narrow integer time_t system, we're done. */ @@ -321,9 +323,9 @@ tzload(const char *name, char *canonname, struct state * sp, int doextend) u.buf[0] == '\n' && u.buf[nread - 1] == '\n' && sp->typecnt + 2 <= TZ_MAX_TYPES) { - struct state ts; - int result; - + struct state ts; + int result; + u.buf[nread - 1] = '\0'; result = tzparse(&u.buf[1], &ts, FALSE); if (result == 0 && ts.typecnt == 2 && @@ -369,9 +371,9 @@ tzload(const char *name, char *canonname, struct state * sp, int doextend) } static int -typesequiv(const struct state *sp, int a, int b) +typesequiv(const struct state * sp, int a, int b) { - int result; + int result; if (sp == NULL || a < 0 || a >= sp->typecnt || @@ -428,7 +430,7 @@ getzname(const char *strp) static const char * getqzname(const char *strp, int delim) { - int c; + int c; while ((c = *strp) != '\0' && c != delim) ++strp; @@ -814,7 +816,7 @@ tzparse(const char *name, struct state * sp, int lastditch) sp->timecnt + 2 <= TZ_MAX_TIMES; ++year) { - pg_time_t newfirst; + pg_time_t newfirst; starttime = transtime(janfirst, year, &start, stdoffset); @@ -986,7 +988,7 @@ gmtload(struct state * sp) */ static struct pg_tm * localsub(const pg_time_t *timep, long offset, - struct pg_tm *tmp, const pg_tz *tz) + struct pg_tm * tmp, const pg_tz *tz) { const struct state *sp; const struct ttinfo *ttisp; @@ -1002,10 +1004,11 @@ localsub(const pg_time_t *timep, long offset, pg_time_t seconds; pg_time_t tcycles; int64 icycles; - + if (t < sp->ats[0]) seconds = sp->ats[0] - t; - else seconds = t - sp->ats[sp->timecnt - 1]; + else + seconds = t - sp->ats[sp->timecnt - 1]; --seconds; tcycles = seconds / YEARSPERREPEAT / AVGSECSPERYEAR; ++tcycles; @@ -1017,19 +1020,21 @@ localsub(const pg_time_t *timep, long offset, seconds *= AVGSECSPERYEAR; if (t < sp->ats[0]) newt += seconds; - else newt -= seconds; + else + newt -= seconds; if (newt < sp->ats[0] || newt > sp->ats[sp->timecnt - 1]) - return NULL; /* "cannot happen" */ + return NULL; /* "cannot happen" */ result = localsub(&newt, offset, tmp, tz); if (result == tmp) { - pg_time_t newy; + pg_time_t newy; newy = tmp->tm_year; if (t < sp->ats[0]) newy -= icycles * YEARSPERREPEAT; - else newy += icycles * YEARSPERREPEAT; + else + newy += icycles * YEARSPERREPEAT; tmp->tm_year = newy; if (tmp->tm_year != newy) return NULL; @@ -1048,16 +1053,17 @@ localsub(const pg_time_t *timep, long offset, } else { - int lo = 1; - int hi = sp->timecnt; - + int lo = 1; + int hi = sp->timecnt; + while (lo < hi) { - int mid = (lo + hi) >> 1; - + int mid = (lo + hi) >> 1; + if (t < sp->ats[mid]) hi = mid; - else lo = mid + 1; + else + lo = mid + 1; } i = (int) sp->types[lo - 1]; } @@ -1081,7 +1087,7 @@ pg_localtime(const pg_time_t *timep, const pg_tz *tz) * gmtsub is to gmtime as localsub is to localtime. */ static struct pg_tm * -gmtsub(const pg_time_t *timep, long offset, struct pg_tm *tmp) +gmtsub(const pg_time_t *timep, long offset, struct pg_tm * tmp) { struct pg_tm *result; @@ -1125,11 +1131,11 @@ leaps_thru_end_of(const int y) static struct pg_tm * timesub(const pg_time_t *timep, long offset, - const struct state *sp, struct pg_tm *tmp) + const struct state * sp, struct pg_tm * tmp) { const struct lsinfo *lp; pg_time_t tdays; - int idays; /* unsigned would be so 2003 */ + int idays; /* unsigned would be so 2003 */ long rem; int y; const int *ip; @@ -1169,11 +1175,11 @@ timesub(const pg_time_t *timep, long offset, rem = *timep - tdays * SECSPERDAY; while (tdays < 0 || tdays >= year_lengths[isleap(y)]) { - int newy; + int newy; pg_time_t tdelta; - int idelta; - int leapdays; - + int idelta; + int leapdays; + tdelta = tdays / DAYSPERLYEAR; idelta = tdelta; if (tdelta - idelta >= 1 || idelta - tdelta >= 1) @@ -1190,12 +1196,13 @@ timesub(const pg_time_t *timep, long offset, y = newy; } { - long seconds; - + long seconds; + seconds = tdays * SECSPERDAY + 0.5; tdays = seconds / SECSPERDAY; rem += seconds - tdays * SECSPERDAY; } + /* * Given the range, we can now fearlessly cast... */ @@ -1227,6 +1234,7 @@ timesub(const pg_time_t *timep, long offset, if (increment_overflow(&tmp->tm_year, -TM_YEAR_BASE)) return NULL; tmp->tm_yday = idays; + /* * The "extra" mods below avoid overflow problems. */ @@ -1264,7 +1272,7 @@ timesub(const pg_time_t *timep, long offset, static int increment_overflow(int *number, int delta) { - int number0; + int number0; number0 = *number; *number += delta; @@ -1330,10 +1338,11 @@ pg_next_dst_boundary(const pg_time_t *timep, pg_time_t tcycles; int64 icycles; int result; - + if (t < sp->ats[0]) seconds = sp->ats[0] - t; - else seconds = t - sp->ats[sp->timecnt - 1]; + else + seconds = t - sp->ats[sp->timecnt - 1]; --seconds; tcycles = seconds / YEARSPERREPEAT / AVGSECSPERYEAR; ++tcycles; @@ -1345,10 +1354,11 @@ pg_next_dst_boundary(const pg_time_t *timep, seconds *= AVGSECSPERYEAR; if (t < sp->ats[0]) newt += seconds; - else newt -= seconds; + else + newt -= seconds; if (newt < sp->ats[0] || newt > sp->ats[sp->timecnt - 1]) - return -1; /* "cannot happen" */ + return -1; /* "cannot happen" */ result = pg_next_dst_boundary(&newt, before_gmtoff, before_isdst, @@ -1395,16 +1405,17 @@ pg_next_dst_boundary(const pg_time_t *timep, } /* Else search to find the containing segment */ { - int lo = 1; - int hi = sp->timecnt; - + int lo = 1; + int hi = sp->timecnt; + while (lo < hi) { - int mid = (lo + hi) >> 1; - + int mid = (lo + hi) >> 1; + if (t < sp->ats[mid]) hi = mid; - else lo = mid + 1; + else + lo = mid + 1; } i = lo; } diff --git a/src/timezone/pgtz.c b/src/timezone/pgtz.c index e4850ec665..82a0243878 100644 --- a/src/timezone/pgtz.c +++ b/src/timezone/pgtz.c @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * * IDENTIFICATION - * $PostgreSQL: pgsql/src/timezone/pgtz.c,v 1.62 2009/01/01 17:24:04 momjian Exp $ + * $PostgreSQL: pgsql/src/timezone/pgtz.c,v 1.63 2009/06/11 14:49:15 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -387,15 +387,15 @@ identify_system_timezone(void) * enough to identify DST transition rules, since everybody switches on * Sundays.) This is sufficient to cover most of the Unix time_t range, * and we don't want to look further than that since many systems won't - * have sane TZ behavior further back anyway. The further - * back the zone matches, the better we score it. This may seem like a - * rather random way of doing things, but experience has shown that - * system-supplied timezone definitions are likely to have DST behavior - * that is right for the recent past and not so accurate further back. - * Scoring in this way allows us to recognize zones that have some - * commonality with the zic database, without insisting on exact match. - * (Note: we probe Thursdays, not Sundays, to avoid triggering - * DST-transition bugs in localtime itself.) + * have sane TZ behavior further back anyway. The further back the zone + * matches, the better we score it. This may seem like a rather random + * way of doing things, but experience has shown that system-supplied + * timezone definitions are likely to have DST behavior that is right for + * the recent past and not so accurate further back. Scoring in this way + * allows us to recognize zones that have some commonality with the zic + * database, without insisting on exact match. (Note: we probe Thursdays, + * not Sundays, to avoid triggering DST-transition bugs in localtime + * itself.) */ tnow = time(NULL); tm = localtime(&tnow); @@ -404,6 +404,7 @@ identify_system_timezone(void) thisyear = tm->tm_year + 1900; t = build_time_t(thisyear, 1, 15); + /* * Round back to GMT midnight Thursday. This depends on the knowledge * that the time_t origin is Thu Jan 01 1970. (With a different origin @@ -731,7 +732,7 @@ static const struct "Central Standard Time (Mexico)", "Central Daylight Time (Mexico)", "America/Mexico_City" }, /* (GMT-06:00) Guadalajara, Mexico City, - Monterrey - New */ + * Monterrey - New */ { "China Standard Time", "China Daylight Time", "Asia/Hong_Kong" @@ -852,8 +853,8 @@ static const struct { "Mountain Standard Time (Mexico)", "Mountain Daylight Time (Mexico)", "America/Chihuahua" - }, /* (GMT-07:00) Chihuahua, La Paz, - Mazatlan - New */ + }, /* (GMT-07:00) Chihuahua, La Paz, Mazatlan - + * New */ { "Myanmar Standard Time", "Myanmar Daylight Time", "Asia/Rangoon" @@ -974,7 +975,7 @@ static const struct "Australia/Perth" }, /* (GMT+08:00) Perth */ /* {"W. Central Africa Standard Time", "W. Central Africa Daylight Time", - * * * * * * * ""}, Could not find a match for this one. Excluded for now. *//* ( + * * * * * * * * ""}, Could not find a match for this one. Excluded for now. *//* ( * G MT+01:00) West Central Africa */ { "W. Europe Standard Time", "W. Europe Daylight Time", @@ -1492,7 +1493,7 @@ pg_tzenumerate_next(pg_tzenum *dir) * Load this timezone using tzload() not pg_tzset(), so we don't fill * the cache */ - if (tzload(fullname + dir->baselen, dir->tz.TZname, &dir->tz.state, + if (tzload(fullname + dir->baselen, dir->tz.TZname, &dir->tz.state, TRUE) != 0) { /* Zone could not be loaded, ignore it */ diff --git a/src/timezone/pgtz.h b/src/timezone/pgtz.h index 9e5a15afad..db865e37b1 100644 --- a/src/timezone/pgtz.h +++ b/src/timezone/pgtz.h @@ -9,7 +9,7 @@ * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * * IDENTIFICATION - * $PostgreSQL: pgsql/src/timezone/pgtz.h,v 1.23 2009/01/01 17:24:04 momjian Exp $ + * $PostgreSQL: pgsql/src/timezone/pgtz.h,v 1.24 2009/06/11 14:49:15 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -66,8 +66,8 @@ struct pg_tz extern int pg_open_tzfile(const char *name, char *canonname); /* in localtime.c */ -extern int tzload(const char *name, char *canonname, struct state * sp, - int doextend); +extern int tzload(const char *name, char *canonname, struct state * sp, + int doextend); extern int tzparse(const char *name, struct state * sp, int lastditch); #endif /* _PGTZ_H */ diff --git a/src/timezone/private.h b/src/timezone/private.h index 0f6b405da8..8d6a411a39 100644 --- a/src/timezone/private.h +++ b/src/timezone/private.h @@ -6,7 +6,7 @@ * 1996-06-05 by Arthur David Olson. * * IDENTIFICATION - * $PostgreSQL: pgsql/src/timezone/private.h,v 1.12 2008/02/16 21:16:04 tgl Exp $ + * $PostgreSQL: pgsql/src/timezone/private.h,v 1.13 2009/06/11 14:49:15 momjian Exp $ */ /* @@ -85,7 +85,7 @@ extern const char *scheck(const char *string, const char *format); #ifndef TYPE_INTEGRAL #define TYPE_INTEGRAL(type) (((type) 0.5) != 0.5) -#endif /* !defined TYPE_INTEGRAL */ +#endif /* !defined TYPE_INTEGRAL */ #ifndef INT_STRLEN_MAXIMUM /* @@ -102,24 +102,24 @@ extern const char *scheck(const char *string, const char *format); #define _(msgid) (msgid) #ifndef YEARSPERREPEAT -#define YEARSPERREPEAT 400 /* years before a Gregorian repeat */ -#endif /* !defined YEARSPERREPEAT */ +#define YEARSPERREPEAT 400 /* years before a Gregorian repeat */ +#endif /* !defined YEARSPERREPEAT */ /* ** The Gregorian year averages 365.2425 days, which is 31556952 seconds. */ #ifndef AVGSECSPERYEAR -#define AVGSECSPERYEAR 31556952L -#endif /* !defined AVGSECSPERYEAR */ +#define AVGSECSPERYEAR 31556952L +#endif /* !defined AVGSECSPERYEAR */ #ifndef SECSPERREPEAT -#define SECSPERREPEAT ((int64) YEARSPERREPEAT * (int64) AVGSECSPERYEAR) -#endif /* !defined SECSPERREPEAT */ +#define SECSPERREPEAT ((int64) YEARSPERREPEAT * (int64) AVGSECSPERYEAR) +#endif /* !defined SECSPERREPEAT */ #ifndef SECSPERREPEAT_BITS -#define SECSPERREPEAT_BITS 34 /* ceil(log2(SECSPERREPEAT)) */ -#endif /* !defined SECSPERREPEAT_BITS */ +#define SECSPERREPEAT_BITS 34 /* ceil(log2(SECSPERREPEAT)) */ +#endif /* !defined SECSPERREPEAT_BITS */ /* * UNIX was a registered trademark of The Open Group in 2003. diff --git a/src/timezone/strftime.c b/src/timezone/strftime.c index 3d9d4274c5..39443af9d5 100644 --- a/src/timezone/strftime.c +++ b/src/timezone/strftime.c @@ -15,7 +15,7 @@ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * IDENTIFICATION - * $PostgreSQL: pgsql/src/timezone/strftime.c,v 1.13 2008/02/19 12:06:35 mha Exp $ + * $PostgreSQL: pgsql/src/timezone/strftime.c,v 1.14 2009/06/11 14:49:15 momjian Exp $ */ #include "postgres.h" @@ -92,8 +92,8 @@ 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 * _yconv(const int, const int, const int, const int, - char *, const char * const); +static char *_yconv(const int, const int, const int, const int, + char *, const char *const); #define IN_NONE 0 #define IN_SOME 1 @@ -368,11 +368,11 @@ _fmt(const char *format, const struct pg_tm * t, char *pt, const char *ptlim, { *warnp = IN_ALL; pt = _yconv(year, base, 0, 1, - pt, ptlim); + pt, ptlim); } else pt = _yconv(year, base, 1, 1, - pt, ptlim); + pt, ptlim); } continue; case 'v': @@ -493,13 +493,13 @@ _add(const char *str, char *pt, const char *ptlim) * with more only if necessary. */ static char * -_yconv(const int a, const int b, const int convert_top, - const int convert_yy, char *pt, const char * const ptlim) +_yconv(const int a, const int b, const int convert_top, + const int convert_yy, char *pt, const char *const ptlim) { - int lead; - int trail; - -#define DIVISOR 100 + int lead; + int trail; + +#define DIVISOR 100 trail = a % DIVISOR + b % DIVISOR; lead = a / DIVISOR + b / DIVISOR + trail / DIVISOR; trail %= DIVISOR; @@ -517,10 +517,10 @@ _yconv(const int a, const int b, const int convert_top, { if (lead == 0 && trail < 0) pt = _add("-0", pt, ptlim); - else pt = _conv(lead, "%02d", pt, ptlim); + else + pt = _conv(lead, "%02d", pt, ptlim); } if (convert_yy) pt = _conv(((trail < 0) ? -trail : trail), "%02d", pt, ptlim); return pt; } - diff --git a/src/timezone/tzfile.h b/src/timezone/tzfile.h index a358cad521..46e380b608 100644 --- a/src/timezone/tzfile.h +++ b/src/timezone/tzfile.h @@ -6,7 +6,7 @@ * 1996-06-05 by Arthur David Olson. * * IDENTIFICATION - * $PostgreSQL: pgsql/src/timezone/tzfile.h,v 1.7 2008/02/16 21:16:04 tgl Exp $ + * $PostgreSQL: pgsql/src/timezone/tzfile.h,v 1.8 2009/06/11 14:49:15 momjian Exp $ */ /* @@ -133,16 +133,16 @@ struct tzhead /* * Since everything in isleap is modulo 400 (or a factor of 400), we know that - * isleap(y) == isleap(y % 400) + * isleap(y) == isleap(y % 400) * and so - * isleap(a + b) == isleap((a + b) % 400) + * isleap(a + b) == isleap((a + b) % 400) * or - * isleap(a + b) == isleap(a % 400 + b % 400) + * isleap(a + b) == isleap(a % 400 + b % 400) * This is true even if % means modulo rather than Fortran remainder * (which is allowed by C89 but not C99). * We use this to avoid addition overflow problems. */ -#define isleap_sum(a, b) isleap((a) % 400 + (b) % 400) +#define isleap_sum(a, b) isleap((a) % 400 + (b) % 400) #endif /* !defined TZFILE_H */ diff --git a/src/timezone/zic.c b/src/timezone/zic.c index 221c18ef5e..2f03f558fc 100644 --- a/src/timezone/zic.c +++ b/src/timezone/zic.c @@ -3,7 +3,7 @@ * 2006-07-17 by Arthur David Olson. * * IDENTIFICATION - * $PostgreSQL: pgsql/src/timezone/zic.c,v 1.23 2008/02/16 21:16:04 tgl Exp $ + * $PostgreSQL: pgsql/src/timezone/zic.c,v 1.24 2009/06/11 14:49:15 momjian Exp $ */ #include "postgres_fe.h" @@ -21,13 +21,13 @@ extern char *optarg; #include "pgtz.h" #include "tzfile.h" -#define ZIC_VERSION '2' +#define ZIC_VERSION '2' -typedef int64 zic_t; +typedef int64 zic_t; #ifndef ZIC_MAX_ABBR_LEN_WO_WARN -#define ZIC_MAX_ABBR_LEN_WO_WARN 6 -#endif /* !defined ZIC_MAX_ABBR_LEN_WO_WARN */ +#define ZIC_MAX_ABBR_LEN_WO_WARN 6 +#endif /* !defined ZIC_MAX_ABBR_LEN_WO_WARN */ #ifdef HAVE_SYS_STAT_H #include <sys/stat.h> @@ -57,9 +57,9 @@ static char elsieid[] = "@(#)zic.c 8.17"; #endif #define OFFSET_STRLEN_MAXIMUM (7 + INT_STRLEN_MAXIMUM(long)) -#define RULE_STRLEN_MAXIMUM 8 /* "Mdd.dd.d" */ +#define RULE_STRLEN_MAXIMUM 8 /* "Mdd.dd.d" */ -#define end(cp) (strchr((cp), '\0')) +#define end(cp) (strchr((cp), '\0')) struct rule { @@ -115,7 +115,7 @@ struct zone int z_nrules; struct rule z_untilrule; - zic_t z_untiltime; + zic_t z_untiltime; }; extern int link(const char *fromname, const char *toname); @@ -370,7 +370,7 @@ static const int len_years[2] = { static struct attype { - zic_t at; + zic_t at; unsigned char type; } attypes[TZ_MAX_TIMES]; static long gmtoffs[TZ_MAX_TYPES]; @@ -480,9 +480,10 @@ main(int argc, char *argv[]) (void) umask(umask(S_IWGRP | S_IWOTH) | (S_IWGRP | S_IWOTH)); #endif /* !WIN32 */ progname = argv[0]; - if (TYPE_BIT(zic_t) < 64) { + if (TYPE_BIT(zic_t) < 64) + { (void) fprintf(stderr, "%s: %s\n", progname, - _("wild compilation-time specification of zic_t")); + _("wild compilation-time specification of zic_t")); exit(EXIT_FAILURE); } for (i = 1; i < argc; ++i) @@ -688,8 +689,8 @@ dolink(const char *fromfield, const char *tofield) static void setboundaries(void) { - int i; - + int i; + min_time = -1; for (i = 0; i < TIME_T_BITS_IN_FILE - 1; ++i) min_time *= 2; @@ -964,7 +965,8 @@ gethms(const char *string, const char *errstring, int signable) error(errstring); return 0; } - if (LONG_MAX / SECSPERHOUR < hh) { + if (LONG_MAX / SECSPERHOUR < hh) + { error(_("time overflow")); return 0; } @@ -1481,9 +1483,9 @@ convert(long val, char *buf) static void convert64(zic_t val, char *buf) { - int i; - int shift; - + int i; + int shift; + for (i = 0, shift = 56; i < 8; ++i, shift -= 8) buf[i] = val >> shift; } @@ -1500,8 +1502,8 @@ puttzcode(long val, FILE *fp) static void puttzcode64(zic_t val, FILE *fp) { - char buf[8]; - + char buf[8]; + convert64(val, buf); (void) fwrite((void *) buf, (size_t) sizeof buf, (size_t) 1, fp); } @@ -1509,9 +1511,9 @@ puttzcode64(zic_t val, FILE *fp) static int atcomp(const void *avp, const void *bvp) { - const zic_t a = ((const struct attype *) avp)->at; - const zic_t b = ((const struct attype *) bvp)->at; - + const zic_t a = ((const struct attype *) avp)->at; + const zic_t b = ((const struct attype *) bvp)->at; + return (a < b) ? -1 : (a > b); } @@ -1527,8 +1529,10 @@ writezone(const char *name, const char *string) FILE *fp; int i, j; - int leapcnt32, leapi32; - int timecnt32, timei32; + int leapcnt32, + leapi32; + int timecnt32, + timei32; int pass; static char *fullname; static const struct tzhead tzh0; @@ -1584,17 +1588,21 @@ writezone(const char *name, const char *string) ats[i] = attypes[i].at; types[i] = attypes[i].type; } + /* * Correct for leap seconds. */ - for (i = 0; i < timecnt; ++i) { + for (i = 0; i < timecnt; ++i) + { j = leapcnt; while (--j >= 0) - if (ats[i] > trans[j] - corr[j]) { + if (ats[i] > trans[j] - corr[j]) + { ats[i] = tadd(ats[i], corr[j]); break; } } + /* * Figure out 32-bit-limited starts and counts. */ @@ -1644,23 +1652,30 @@ writezone(const char *name, const char *string) exit(EXIT_FAILURE); } } - for (pass = 1; pass <= 2; ++pass) { - register int thistimei, thistimecnt; - register int thisleapi, thisleapcnt; - register int thistimelim, thisleaplim; - int writetype[TZ_MAX_TIMES]; - int typemap[TZ_MAX_TYPES]; - register int thistypecnt; + for (pass = 1; pass <= 2; ++pass) + { + register int thistimei, + thistimecnt; + register int thisleapi, + thisleapcnt; + register int thistimelim, + thisleaplim; + int writetype[TZ_MAX_TIMES]; + int typemap[TZ_MAX_TYPES]; + register int thistypecnt; char thischars[TZ_MAX_CHARS]; char thischarcnt; - int indmap[TZ_MAX_CHARS]; + int indmap[TZ_MAX_CHARS]; - if (pass == 1) { + if (pass == 1) + { thistimei = timei32; thistimecnt = timecnt32; thisleapi = leapi32; thisleapcnt = leapcnt32; - } else { + } + else + { thistimei = 0; thistimecnt = timecnt; thisleapi = 0; @@ -1670,31 +1685,36 @@ writezone(const char *name, const char *string) thisleaplim = thisleapi + thisleapcnt; for (i = 0; i < typecnt; ++i) writetype[i] = thistimecnt == timecnt; - if (thistimecnt == 0) { + if (thistimecnt == 0) + { /* - ** No transition times fall in the current - ** (32- or 64-bit) window. - */ + * * No transition times fall in the current * (32- or 64-bit) + * window. + */ if (typecnt != 0) writetype[typecnt - 1] = TRUE; - } else { + } + else + { for (i = thistimei - 1; i < thistimelim; ++i) if (i >= 0) writetype[types[i]] = TRUE; + /* - ** For America/Godthab and Antarctica/Palmer - */ + * * For America/Godthab and Antarctica/Palmer + */ if (thistimei == 0) writetype[0] = TRUE; } thistypecnt = 0; for (i = 0; i < typecnt; ++i) - typemap[i] = writetype[i] ? thistypecnt++ : -1; + typemap[i] = writetype[i] ? thistypecnt++ : -1; for (i = 0; i < sizeof indmap / sizeof indmap[0]; ++i) indmap[i] = -1; thischarcnt = 0; - for (i = 0; i < typecnt; ++i) { - register char * thisabbr; + for (i = 0; i < typecnt; ++i) + { + register char *thisabbr; if (!writetype[i]) continue; @@ -1704,9 +1724,10 @@ writezone(const char *name, const char *string) for (j = 0; j < thischarcnt; ++j) if (strcmp(&thischars[j], thisabbr) == 0) break; - if (j == thischarcnt) { + if (j == thischarcnt) + { (void) strcpy(&thischars[(int) thischarcnt], - thisabbr); + thisabbr); thischarcnt += strlen(thisabbr) + 1; } indmap[abbrinds[i]] = j; @@ -1735,49 +1756,61 @@ writezone(const char *name, const char *string) for (i = thistimei; i < thistimelim; ++i) if (pass == 1) puttzcode((long) ats[i], fp); - else puttzcode64(ats[i], fp); - for (i = thistimei; i < thistimelim; ++i) { - unsigned char uc; + else + puttzcode64(ats[i], fp); + for (i = thistimei; i < thistimelim; ++i) + { + unsigned char uc; uc = typemap[types[i]]; (void) fwrite((void *) &uc, - (size_t) sizeof uc, - (size_t) 1, - fp); + (size_t) sizeof uc, + (size_t) 1, + fp); } for (i = 0; i < typecnt; ++i) - if (writetype[i]) { + if (writetype[i]) + { puttzcode(gmtoffs[i], fp); (void) putc(isdsts[i], fp); (void) putc((unsigned char) indmap[abbrinds[i]], fp); } if (thischarcnt != 0) (void) fwrite((void *) thischars, - (size_t) sizeof thischars[0], - (size_t) thischarcnt, fp); - for (i = thisleapi; i < thisleaplim; ++i) { - register zic_t todo; + (size_t) sizeof thischars[0], + (size_t) thischarcnt, fp); + for (i = thisleapi; i < thisleaplim; ++i) + { + register zic_t todo; - if (roll[i]) { - if (timecnt == 0 || trans[i] < ats[0]) { + if (roll[i]) + { + if (timecnt == 0 || trans[i] < ats[0]) + { j = 0; while (isdsts[j]) - if (++j >= typecnt) { + if (++j >= typecnt) + { j = 0; break; } - } else { + } + else + { j = 1; while (j < timecnt && - trans[i] >= ats[j]) - ++j; + trans[i] >= ats[j]) + ++j; j = types[j - 1]; } todo = tadd(trans[i], -gmtoffs[j]); - } else todo = trans[i]; + } + else + todo = trans[i]; if (pass == 1) puttzcode((long) todo, fp); - else puttzcode64(todo, fp); + else + puttzcode64(todo, fp); puttzcode(corr[i], fp); } for (i = 0; i < typecnt; ++i) @@ -1788,20 +1821,21 @@ writezone(const char *name, const char *string) (void) putc(ttisgmts[i], fp); } (void) fprintf(fp, "\n%s\n", string); - if (ferror(fp) || fclose(fp)) { + if (ferror(fp) || fclose(fp)) + { (void) fprintf(stderr, _("%s: Error writing %s\n"), - progname, fullname); + progname, fullname); exit(EXIT_FAILURE); } } static void -doabbr(char *abbr, const char *format, const char *letters, int isdst, +doabbr(char *abbr, const char *format, const char *letters, int isdst, int doquotes) { - char * cp; - char * slashp; - int len; + char *cp; + char *slashp; + int len; slashp = strchr(format, '/'); if (slashp == NULL) @@ -1831,7 +1865,7 @@ doabbr(char *abbr, const char *format, const char *letters, int isdst, return; abbr[len + 2] = '\0'; abbr[len + 1] = '>'; - for ( ; len > 0; --len) + for (; len > 0; --len) abbr[len] = abbr[len - 1]; abbr[0] = '<'; } @@ -1848,12 +1882,13 @@ updateminmax(int x) static int stringoffset(char *result, long offset) { - int hours; - int minutes; - int seconds; + int hours; + int minutes; + int seconds; result[0] = '\0'; - if (offset < 0) { + if (offset < 0) + { (void) strcpy(result, "-"); offset = -offset; } @@ -1862,12 +1897,14 @@ stringoffset(char *result, long offset) minutes = offset % MINSPERHOUR; offset /= MINSPERHOUR; hours = offset; - if (hours >= HOURSPERDAY) { + if (hours >= HOURSPERDAY) + { result[0] = '\0'; return -1; } (void) sprintf(end(result), "%d", hours); - if (minutes != 0 || seconds != 0) { + if (minutes != 0 || seconds != 0) + { (void) sprintf(end(result), ":%02d", minutes); if (seconds != 0) (void) sprintf(end(result), ":%02d", seconds); @@ -1876,14 +1913,15 @@ stringoffset(char *result, long offset) } static int -stringrule(char *result, const struct rule *rp, long dstoff, long gmtoff) +stringrule(char *result, const struct rule * rp, long dstoff, long gmtoff) { - long tod; + long tod; result = end(result); - if (rp->r_dycode == DC_DOM) + if (rp->r_dycode == DC_DOM) { - int month, total; + int month, + total; if (rp->r_dayofmonth == 29 && rp->r_month == TM_FEBRUARY) return -1; @@ -1894,7 +1932,7 @@ stringrule(char *result, const struct rule *rp, long dstoff, long gmtoff) } else { - int week; + int week; if (rp->r_dycode == DC_DOWGEQ) { @@ -1906,14 +1944,15 @@ stringrule(char *result, const struct rule *rp, long dstoff, long gmtoff) { if (rp->r_dayofmonth == len_months[1][rp->r_month]) week = 5; - else { + else + { week = 1 + rp->r_dayofmonth / DAYSPERWEEK; if (week * DAYSPERWEEK - 1 != rp->r_dayofmonth) return -1; } } else - return -1; /* "cannot happen" */ + return -1; /* "cannot happen" */ (void) sprintf(result, "M%d.%d.%d", rp->r_month + 1, week, rp->r_wday); } @@ -1937,14 +1976,14 @@ stringrule(char *result, const struct rule *rp, long dstoff, long gmtoff) } static void -stringzone(char *result, const struct zone *zpfirst, int zonecount) +stringzone(char *result, const struct zone * zpfirst, int zonecount) { - const struct zone * zp; - struct rule * rp; - struct rule * stdrp; - struct rule * dstrp; + const struct zone *zp; + struct rule *rp; + struct rule *stdrp; + struct rule *dstrp; int i; - const char * abbrvar; + const char *abbrvar; result[0] = '\0'; zp = zpfirst + zonecount - 1; @@ -1956,38 +1995,42 @@ stringzone(char *result, const struct zone *zpfirst, int zonecount) continue; if (rp->r_yrtype != NULL) continue; - if (rp->r_stdoff == 0) { + if (rp->r_stdoff == 0) + { if (stdrp == NULL) stdrp = rp; - else return; + else + return; } else { if (dstrp == NULL) dstrp = rp; - else return; + else + return; } } if (stdrp == NULL && dstrp == NULL) { /* - * There are no rules running through "max". - * Let's find the latest rule. + * There are no rules running through "max". Let's find the latest + * rule. */ for (i = 0; i < zp->z_nrules; ++i) { rp = &zp->z_rules[i]; if (stdrp == NULL || rp->r_hiyear > stdrp->r_hiyear || (rp->r_hiyear == stdrp->r_hiyear && - rp->r_month > stdrp->r_month)) - stdrp = rp; + rp->r_month > stdrp->r_month)) + stdrp = rp; } if (stdrp != NULL && stdrp->r_stdoff != 0) - return; /* We end up in DST (a POSIX no-no). */ + return; /* We end up in DST (a POSIX no-no). */ + /* - * Horrid special case: if year is 2037, - * presume this is a zone handled on a year-by-year basis; - * do not try to apply a rule to the zone. + * Horrid special case: if year is 2037, presume this is a zone + * handled on a year-by-year basis; do not try to apply a rule to the + * zone. */ if (stdrp != NULL && stdrp->r_hiyear == 2037) return; @@ -1996,7 +2039,8 @@ stringzone(char *result, const struct zone *zpfirst, int zonecount) return; abbrvar = (stdrp == NULL) ? "" : stdrp->r_abbrvar; doabbr(result, zp->z_format, abbrvar, FALSE, TRUE); - if (stringoffset(end(result), -zp->z_gmtoff) != 0) { + if (stringoffset(end(result), -zp->z_gmtoff) != 0) + { result[0] = '\0'; return; } @@ -2005,17 +2049,20 @@ stringzone(char *result, const struct zone *zpfirst, int zonecount) doabbr(end(result), zp->z_format, dstrp->r_abbrvar, TRUE, TRUE); if (dstrp->r_stdoff != SECSPERMIN * MINSPERHOUR) if (stringoffset(end(result), - -(zp->z_gmtoff + dstrp->r_stdoff)) != 0) { - result[0] = '\0'; - return; + -(zp->z_gmtoff + dstrp->r_stdoff)) != 0) + { + result[0] = '\0'; + return; } (void) strcat(result, ","); - if (stringrule(result, dstrp, dstrp->r_stdoff, zp->z_gmtoff) != 0) { + if (stringrule(result, dstrp, dstrp->r_stdoff, zp->z_gmtoff) != 0) + { result[0] = '\0'; return; } (void) strcat(result, ","); - if (stringrule(result, stdrp, dstrp->r_stdoff, zp->z_gmtoff) != 0) { + if (stringrule(result, stdrp, dstrp->r_stdoff, zp->z_gmtoff) != 0) + { result[0] = '\0'; return; } @@ -2059,8 +2106,8 @@ outzone(const struct zone * zpfirst, int zonecount) charcnt = 0; /* - * Thanks to Earl Chew for noting the need to - * unconditionally initialize startttisstd. + * Thanks to Earl Chew for noting the need to unconditionally initialize + * startttisstd. */ startttisstd = FALSE; startttisgmt = FALSE; @@ -2084,12 +2131,14 @@ outzone(const struct zone * zpfirst, int zonecount) updateminmax(rp->r_hiyear); } } + /* * Generate lots of data if a rule can't cover all future times. */ stringzone(envvar, zpfirst, zonecount); - if (noise && envvar[0] == '\0') { - char * wp; + if (noise && envvar[0] == '\0') + { + char *wp; wp = ecpyalloc(_("no POSIX environment variable for zone")); wp = ecatalloc(wp, " "); @@ -2101,14 +2150,16 @@ outzone(const struct zone * zpfirst, int zonecount) { if (min_year >= INT_MIN + YEARSPERREPEAT) min_year -= YEARSPERREPEAT; - else min_year = INT_MIN; + else + min_year = INT_MIN; if (max_year <= INT_MAX - YEARSPERREPEAT) max_year += YEARSPERREPEAT; - else max_year = INT_MAX; + else + max_year = INT_MAX; } + /* - * For the benefit of older systems, - * generate data from 1900 through 2037. + * For the benefit of older systems, generate data from 1900 through 2037. */ if (min_year > 1900) min_year = 1900; @@ -2235,7 +2286,7 @@ outzone(const struct zone * zpfirst, int zonecount) FALSE); continue; } - if (*startbuf == '\0' && + if (*startbuf == '\0' && startoff == oadd(zp->z_gmtoff, stdoff)) { doabbr(startbuf, @@ -2366,7 +2417,8 @@ addtype(long gmtoff, const char *abbr, int isdst, error(_("too many local time types")); exit(EXIT_FAILURE); } - if (! (-1L - 2147483647L <= gmtoff && gmtoff <= 2147483647L)) { + if (!(-1L - 2147483647L <= gmtoff && gmtoff <= 2147483647L)) + { error(_("UTC offset out of range")); exit(EXIT_FAILURE); } @@ -2585,7 +2637,7 @@ oadd(long t1, long t2) static zic_t tadd(const zic_t t1, long t2) { - zic_t t; + zic_t t; if (t1 == max_time && t2 > 0) return max_time; @@ -2612,7 +2664,7 @@ rpytime(const struct rule * rp, int wantedy) m, i; long dayoff; /* with a nod to Margaret O. */ - zic_t t; + zic_t t; if (wantedy == INT_MIN) return min_time; @@ -2699,6 +2751,7 @@ will not work with pre-2004 versions of zic")); if (dayoff > max_time / SECSPERDAY) return max_time; t = (zic_t) dayoff *SECSPERDAY; + return tadd(t, rp->r_tod); } @@ -2709,12 +2762,12 @@ newabbr(const char *string) if (strcmp(string, GRANDPARENTED) != 0) { - const char * cp; - char * wp; + const char *cp; + char *wp; /* - * Want one to ZIC_MAX_ABBR_LEN_WO_WARN alphabetics - * optionally followed by a + or - and a number from 1 to 14. + * Want one to ZIC_MAX_ABBR_LEN_WO_WARN alphabetics optionally + * followed by a + or - and a number from 1 to 14. */ cp = string; wp = NULL; @@ -2727,7 +2780,8 @@ newabbr(const char *string) wp = _("time zone abbreviation has more than 3 alphabetics"); if (cp - string > ZIC_MAX_ABBR_LEN_WO_WARN) wp = _("time zone abbreviation has too many alphabetics"); - if (wp == NULL && (*cp == '+' || *cp == '-')) { + if (wp == NULL && (*cp == '+' || *cp == '-')) + { ++cp; if (isascii((unsigned char) *cp) && isdigit((unsigned char) *cp)) @@ -2737,7 +2791,8 @@ newabbr(const char *string) } if (*cp != '\0') wp = _("time zone abbreviation differs from POSIX standard"); - if (wp != NULL) { + if (wp != NULL) + { wp = ecpyalloc(wp); wp = ecatalloc(wp, " ("); wp = ecatalloc(wp, string); |
