From 604421f7c6e1272587bc35bbf93cf578f3d81ef9 Mon Sep 17 00:00:00 2001 From: jvdias Date: Thu, 3 Nov 2005 19:14:29 +0000 Subject: [PATCH] fix bug 172396 / upstream bug 26136 --- perl-5.8.7-172396.patch | 111 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 perl-5.8.7-172396.patch diff --git a/perl-5.8.7-172396.patch b/perl-5.8.7-172396.patch new file mode 100644 index 0000000..38b687c --- /dev/null +++ b/perl-5.8.7-172396.patch @@ -0,0 +1,111 @@ +--- perl-5.8.7/reentr.inc.161305 2005-11-03 12:56:58.000000000 -0500 ++++ perl-5.8.7/reentr.inc 2005-11-03 12:58:16.000000000 -0500 +@@ -1368,10 +1368,10 @@ + #ifdef HAS_LOCALTIME_R + # undef localtime + # if !defined(localtime) && LOCALTIME_R_PROTO == REENTRANT_PROTO_S_TS +-# define localtime(a) (localtime_r(a, &PL_reentrant_buffer->_localtime_struct) ? &PL_reentrant_buffer->_localtime_struct : 0) ++# define localtime(a) ( L_R_TZSET localtime_r(a, &PL_reentrant_buffer->_localtime_struct) ? &PL_reentrant_buffer->_localtime_struct : 0) + # endif + # if !defined(localtime) && LOCALTIME_R_PROTO == REENTRANT_PROTO_I_TS +-# define localtime(a) (localtime_r(a, &PL_reentrant_buffer->_localtime_struct) == 0 ? &PL_reentrant_buffer->_localtime_struct : 0) ++# define localtime(a) ( L_R_TZSET localtime_r(a, &PL_reentrant_buffer->_localtime_struct) == 0 ? &PL_reentrant_buffer->_localtime_struct : 0) + # endif + #endif /* HAS_LOCALTIME_R */ + +--- perl-5.8.7/config_h.SH.161305 2005-04-30 10:34:20.000000000 -0400 ++++ perl-5.8.7/config_h.SH 2005-11-03 12:58:16.000000000 -0500 +@@ -1916,7 +1916,18 @@ + */ + #$d_localtime_r HAS_LOCALTIME_R /**/ + #define LOCALTIME_R_PROTO $localtime_r_proto /**/ +- ++/* LOCALTIME_R_NEEDS_TZSET : ++ * many libc's localtime_r implementations do not call tzset, ++ * making them differ from localtime(), and making timezone ++ * changes using $ENV{TZ} without explicitly calling tzset ++ * impossible. This symbol makes us call tzset before localtime_r: ++ */ ++#$d_localtime_r_needs_tzset LOCALTIME_R_NEEDS_TZSET /**/ ++#ifdef LOCALTIME_R_NEEDS_TZSET ++#define L_R_TZSET tzset(), ++#else ++#define L_R_TZSET ++#endif + /* HAS_LONG_DOUBLE: + * This symbol will be defined if the C compiler supports long + * doubles. +--- perl-5.8.7/Configure.161305 2005-11-03 12:56:58.000000000 -0500 ++++ perl-5.8.7/Configure 2005-11-03 13:13:54.000000000 -0500 +@@ -528,6 +528,7 @@ + d_libm_lib_version='' + d_link='' + d_localtime_r='' ++d_localtime_r_needs_tzset='' + localtime_r_proto='' + d_locconv='' + d_lockf='' +@@ -14023,7 +14024,55 @@ + *) localtime_r_proto=0 + ;; + esac ++: see if localtime_r calls tzset ++case "$localtime_r_proto" in ++REENTRANT_PROTO*) ++ $cat >try.c < ++#include ++#include ++#include ++#include ++int main() ++{ ++ time_t t = time(0L); ++ char w_tz[]="TZ=GMT+5", ++ e_tz[]="TZ=GMT-5", ++ *tz_e = (char*)malloc(16), ++ *tz_w = (char*)malloc(16); ++ struct tm tm_e, tm_w; ++ ++ strcpy(tz_e,e_tz); ++ strcpy(tz_w,w_tz); ++ ++ putenv(tz_e); ++ localtime_r(&t, &tm_e); ++ ++ putenv(tz_w); ++ localtime_r(&t, &tm_w); + ++ if( memcmp(&tm_e, &tm_w, sizeof(struct tm)) == 0 ) ++ return 1; ++ return 0; ++} ++EOCP ++ set try ++ if eval $compile; then ++ if ./try; then ++ d_localtime_r_needs_tzset=undef; ++ else ++ d_localtime_r_needs_tzset=define; ++ fi; ++ rm -f ./try; ++ else ++ d_localtime_r_needs_tzset=undef; ++ fi; ++ rm -f try.c; ++ ;; ++esac + : see if localeconv exists + set localeconv d_locconv + eval $inlibc +@@ -20769,6 +20818,7 @@ + d_libm_lib_version='$d_libm_lib_version' + d_link='$d_link' + d_localtime_r='$d_localtime_r' ++d_localtime_r_needs_tzset='$d_localtime_r_needs_tzset' + d_locconv='$d_locconv' + d_lockf='$d_lockf' + d_longdbl='$d_longdbl'