|
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 | +returni; |
| 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; |
|