|
6 | 6 | * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
7 | 7 | *
|
8 | 8 | * IDENTIFICATION
|
9 |
| - * $PostgreSQL: pgsql/src/timezone/pgtz.c,v 1.19 2004/07/22 05:28:30 tgl Exp $ |
| 9 | + * $PostgreSQL: pgsql/src/timezone/pgtz.c,v 1.20 2004/07/30 17:31:24 tgl Exp $ |
10 | 10 | *
|
11 | 11 | *-------------------------------------------------------------------------
|
12 | 12 | */
|
@@ -182,6 +182,15 @@ score_timezone(const char *tzname, struct tztry *tt)
|
182 | 182 | if (!pgtm)
|
183 | 183 | return -1; /* probably shouldn't happen */
|
184 | 184 | systm = localtime(&(tt->test_times[i]));
|
| 185 | + if (!systm) |
| 186 | + { |
| 187 | + elog(DEBUG4, "TZ \"%s\" scores %d: at %ld %04d-%02d-%02d %02d:%02d:%02d %s, system had no data", |
| 188 | + tzname, i, (long) pgtt, |
| 189 | + pgtm->tm_year + 1900, pgtm->tm_mon + 1, pgtm->tm_mday, |
| 190 | + pgtm->tm_hour, pgtm->tm_min, pgtm->tm_sec, |
| 191 | + pgtm->tm_isdst ? "dst" : "std"); |
| 192 | + return i; |
| 193 | + } |
185 | 194 | if (!compare_tm(systm, pgtm))
|
186 | 195 | {
|
187 | 196 | elog(DEBUG4, "TZ \"%s\" scores %d: at %ld %04d-%02d-%02d %02d:%02d:%02d %s versus %04d-%02d-%02d %02d:%02d:%02d %s",
|
@@ -302,6 +311,8 @@ identify_system_timezone(void)
|
302 | 311 | for (t = tnow; t <= tnow + T_MONTH * 14; t += T_MONTH)
|
303 | 312 | {
|
304 | 313 | tm = localtime(&t);
|
| 314 | + if (!tm) |
| 315 | + continue; |
305 | 316 | if (tm->tm_isdst < 0)
|
306 | 317 | continue;
|
307 | 318 | if (tm->tm_isdst == 0 && std_zone_name[0] == '\0')
|
@@ -491,7 +502,7 @@ tz_acceptable(void)
|
491 | 502 | */
|
492 | 503 | time2000 = (POSTGRES_EPOCH_JDATE - UNIX_EPOCH_JDATE) * 86400;
|
493 | 504 | tt = pg_localtime(&time2000);
|
494 |
| - if (tt->tm_sec != 0) |
| 505 | + if (!tt || tt->tm_sec != 0) |
495 | 506 | return false;
|
496 | 507 |
|
497 | 508 | return true;
|
|
0 commit comments