--- /usr/src/lib/libc/stdtime/localtime.c Mon Jun 14 12:31:52 2004 +++ /usr/src/lib/libc/stdtime/localtime.c Tue Mar 8 20:51:39 2005 @@ -195,6 +195,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; static pthread_mutex_t lcl_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t gmt_mutex = PTHREAD_MUTEX_INITIALIZER; @@ -988,6 +989,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; @@ -1109,12 +1115,14 @@ _pthread_setspecific(localtime_key, p_tm); } _pthread_mutex_lock(&lcl_mutex); - tzset_basic(); + if (!lcl_tz_is_set_by_Zlo) + tzset_basic(); localsub(timep, 0L, p_tm); _pthread_mutex_unlock(&lcl_mutex); return(p_tm); } else { - tzset_basic(); + if (!lcl_tz_is_set_by_Zlo) + tzset_basic(); localsub(timep, 0L, &tm); return(&tm); } @@ -1678,7 +1686,8 @@ { time_t mktime_return_value; _MUTEX_LOCK(&lcl_mutex); - tzset_basic(); + if (!lcl_tz_is_set_by_Zlo) + tzset_basic(); mktime_return_value = time1(tmp, localsub, 0L); _MUTEX_UNLOCK(&lcl_mutex); return(mktime_return_value); @@ -1769,7 +1778,8 @@ time2posix(t) time_t t; { - tzset(); + if (!lcl_tz_is_set_by_Zlo) + tzset(); return t - leapcorr(&t); } @@ -1780,7 +1790,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 Tue Mar 8 20:23:55 2005 +++ /usr/src/lib/libc/stdtime/strftime.c Tue Mar 8 20:52:48 2005 @@ -90,7 +90,9 @@ char * p; int warn; - tzset(); + if (!lcl_tz_is_set_by_Zlo) + tzset(); + warn = IN_NONE; p = _fmt(((format == NULL) ? "%c" : format), t, s, s + maxsize, &warn); #ifndef NO_RUN_TIME_WARNINGS_ABOUT_YEAR_2000_PROBLEMS_THANK_YOU --- /usr/src/lib/libc/stdtime/tzfile.h Sat Mar 23 00:42:05 2002 +++ /usr/src/lib/libc/stdtime/tzfile.h Tue Mar 8 20:30:52 2005 @@ -17,6 +17,8 @@ ** Thank you! */ +extern int lcl_tz_is_set_by_Zlo; + /* ** ID */