--- /usr/src/lib/libc/stdtime/localtime.c Wed Mar 8 13:46:25 2000 +++ /usr/src/lib/libc/stdtime/localtime.c Tue Dec 19 14:38:00 2000 @@ -170,6 +170,7 @@ static char lcl_TZname[TZ_STRLEN_MAX + 1]; static int lcl_is_set; +int lcl_tz_is_set_by_Zlo; static int gmt_is_set; #ifdef _THREAD_SAFE static struct pthread_mutex _lcl_mutexd = PTHREAD_MUTEX_STATIC_INITIALIZER; @@ -989,6 +990,11 @@ return; } + /* N.B. when TZ has changed in the environment, you'll have to call + * tzset() from your program yourself. Zlo. + */ + lcl_tz_is_set_by_Zlo = 1; + if (lcl_is_set > 0 && strcmp(lcl_TZname, name) == 0) return; lcl_is_set = (strlen(name) < sizeof(lcl_TZname)); @@ -1126,12 +1132,15 @@ pthread_setspecific(localtime_key, p_tm); } pthread_mutex_lock(&lcl_mutex); - tzset(); + if (!lcl_tz_is_set_by_Zlo) + tzset(); localsub(timep, 0L, p_tm); pthread_mutex_unlock(&lcl_mutex); return p_tm; #else - tzset(); + if (!lcl_tz_is_set_by_Zlo) + tzset(); + localsub(timep, 0L, &tm); return &tm; #endif @@ -1639,7 +1648,9 @@ #ifdef _THREAD_SAFE pthread_mutex_lock(&lcl_mutex); #endif - tzset(); + if (!lcl_tz_is_set_by_Zlo) + tzset(); + mktime_return_value = time1(tmp, localsub, 0L); #ifdef _THREAD_SAFE pthread_mutex_unlock(&lcl_mutex); @@ -1732,7 +1743,8 @@ time2posix(t) time_t t; { - tzset(); + if (!lcl_tz_is_set_by_Zlo) + tzset(); return t - leapcorr(&t); } @@ -1743,7 +1755,8 @@ time_t x; time_t y; - tzset(); + if (!lcl_tz_is_set_by_Zlo) + tzset(); /* ** For a positive leap second hit, the result ** is not unique. For a negative leap second --- /usr/src/lib/libc/stdtime/strftime.c Thu Oct 26 16:25:02 2000 +++ /usr/src/lib/libc/stdtime/strftime.c Tue Dec 19 14:38:00 2000 @@ -60,7 +60,9 @@ { char *p; - tzset(); + if (!lcl_tz_is_set_by_Zlo) + tzset(); + p = _fmt(((format == NULL) ? "%c" : format), t, s, s + maxsize); if (p == s + maxsize) return 0; --- /usr/src/lib/libc/stdtime/tzfile.h Thu Jan 21 18:22:59 1999 +++ /usr/src/lib/libc/stdtime/tzfile.h Tue Dec 19 14:38:00 2000 @@ -15,6 +15,8 @@ ** Thank you! */ +extern int lcl_tz_is_set_by_Zlo; + /* ** ID */