Solaris 2.6 is end-of-life for 14 years.[1] Gnulib no longer documents supporting it for 1 year. While I occasionally see people use a Solaris 9 system, Solaris 7 and older seem to be no longer in use.
This particular workaround is costly in terms of code complexity. [1] https://en.wikipedia.org/wiki/Solaris_(operating_system)#Version_history 2020-07-26 Bruno Haible <[email protected]> tzset: Remove workaround for Solaris 2.6. * m4/tzset.m4 (gl_FUNC_TZSET_CLOBBER): Remove macro. (gl_FUNC_TZSET): Don't invoke it. Don't set TZSET_CLOBBERS_LOCALTIME. * lib/localtime-buffer.h: Don't test TZSET_CLOBBERS_LOCALTIME. * lib/localtime-buffer.c: Likewise. * lib/localtime.c: Likewise. * lib/tzset.c (tzset): Likewise. * lib/nstrftime.c (__strftime_internal): Assume HAVE_RUN_TZSET_TEST is 1. * modules/tzset (Depends-on): Remove localtime-buffer. diff --git a/lib/localtime-buffer.c b/lib/localtime-buffer.c index d386271..91b073e 100644 --- a/lib/localtime-buffer.c +++ b/lib/localtime-buffer.c @@ -22,7 +22,7 @@ /* Specification. */ #include "localtime-buffer.h" -#if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME +#if GETTIMEOFDAY_CLOBBERS_LOCALTIME static struct tm tm_zero_buffer; struct tm *localtime_buffer_addr = &tm_zero_buffer; diff --git a/lib/localtime-buffer.h b/lib/localtime-buffer.h index 43d249d..9939d81 100644 --- a/lib/localtime-buffer.h +++ b/lib/localtime-buffer.h @@ -19,7 +19,7 @@ #include <time.h> -#if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME +#if GETTIMEOFDAY_CLOBBERS_LOCALTIME /* The address of the last buffer returned by localtime() or gmtime(). */ extern struct tm *localtime_buffer_addr; diff --git a/lib/localtime.c b/lib/localtime.c index dde6b75..9070993 100644 --- a/lib/localtime.c +++ b/lib/localtime.c @@ -20,7 +20,7 @@ #include <time.h> /* Keep consistent with localtime-buffer.c! */ -#if !(GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME) +#if !GETTIMEOFDAY_CLOBBERS_LOCALTIME # include <stdlib.h> # include <string.h> diff --git a/lib/nstrftime.c b/lib/nstrftime.c index fa7ac53..791fbff 100644 --- a/lib/nstrftime.c +++ b/lib/nstrftime.c @@ -495,15 +495,6 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize) const char *format_end = NULL; #endif -#if ! defined _LIBC && ! HAVE_RUN_TZSET_TEST - /* Solaris 2.5.x and 2.6 tzset sometimes modify the storage returned - by localtime. On such systems, we must either use the tzset and - localtime wrappers to work around the bug (which sets - HAVE_RUN_TZSET_TEST) or make a copy of the structure. */ - struct tm copy = *tp; - tp = © -#endif - zone = NULL; #if HAVE_TM_ZONE /* The POSIX test suite assumes that setting diff --git a/lib/tzset.c b/lib/tzset.c index e3543ba..a1fe199 100644 --- a/lib/tzset.c +++ b/lib/tzset.c @@ -37,12 +37,6 @@ void tzset (void) #undef tzset { -#if TZSET_CLOBBERS_LOCALTIME - /* Save and restore the contents of the buffer used for localtime's - result around the call to tzset. */ - struct tm save = *localtime_buffer_addr; -#endif - #if defined _WIN32 && ! defined __CYGWIN__ /* Rectify the value of the environment variable TZ. There are four possible kinds of such values: @@ -79,8 +73,4 @@ tzset (void) #else /* Do nothing. Avoid infinite recursion. */ #endif - -#if TZSET_CLOBBERS_LOCALTIME - *localtime_buffer_addr = save; -#endif } diff --git a/m4/tzset.m4 b/m4/tzset.m4 index 7d987d8..2055c3d 100644 --- a/m4/tzset.m4 +++ b/m4/tzset.m4 @@ -1,16 +1,10 @@ -# serial 13 +# serial 14 # Copyright (C) 2003, 2007, 2009-2020 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# See if we have a working tzset function. -# If so, arrange to compile the wrapper function. -# For at least Solaris 2.5.1 and 2.6, this is necessary -# because tzset can clobber the contents of the buffer -# used by localtime. - # Written by Paul Eggert and Jim Meyering. AC_DEFUN([gl_FUNC_TZSET], @@ -22,64 +16,8 @@ AC_DEFUN([gl_FUNC_TZSET], if test $ac_cv_func_tzset = no; then HAVE_TZSET=0 fi - gl_FUNC_TZSET_CLOBBER REPLACE_TZSET=0 - case "$gl_cv_func_tzset_clobber" in - *yes) - REPLACE_TZSET=1 - AC_DEFINE([TZSET_CLOBBERS_LOCALTIME], [1], - [Define if tzset clobbers localtime's static buffer.]) - gl_LOCALTIME_BUFFER_NEEDED - ;; - esac case "$host_os" in mingw*) REPLACE_TZSET=1 ;; esac ]) - -# Set gl_cv_func_tzset_clobber. -AC_DEFUN([gl_FUNC_TZSET_CLOBBER], -[ - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether tzset clobbers localtime buffer], - [gl_cv_func_tzset_clobber], - [AC_RUN_IFELSE([AC_LANG_SOURCE([[ -#include <time.h> -#include <stdlib.h> - -int -main () -{ - time_t t1 = 853958121; - struct tm *p, s; - putenv ("TZ=GMT0"); - p = localtime (&t1); - s = *p; - putenv ("TZ=EST+3EDT+2,M10.1.0/00:00:00,M2.3.0/00:00:00"); - tzset (); - return (p->tm_year != s.tm_year - || p->tm_mon != s.tm_mon - || p->tm_mday != s.tm_mday - || p->tm_hour != s.tm_hour - || p->tm_min != s.tm_min - || p->tm_sec != s.tm_sec); -} - ]])], - [gl_cv_func_tzset_clobber=no], - [gl_cv_func_tzset_clobber=yes], - [case "$host_os" in - # Guess all is fine on glibc systems. - *-gnu* | gnu*) gl_cv_func_tzset_clobber="guessing no" ;; - # Guess all is fine on musl systems. - *-musl*) gl_cv_func_tzset_clobber="guessing no" ;; - # Guess no on native Windows. - mingw*) gl_cv_func_tzset_clobber="guessing no" ;; - # If we don't know, obey --enable-cross-guesses. - *) gl_cv_func_tzset_clobber="$gl_cross_guess_inverted" ;; - esac - ]) - ]) - - AC_DEFINE([HAVE_RUN_TZSET_TEST], [1], - [Define to 1 if you have run the test for working tzset.]) -]) diff --git a/modules/tzset b/modules/tzset index 5f036b0..ff7e60b 100644 --- a/modules/tzset +++ b/modules/tzset @@ -7,7 +7,6 @@ m4/tzset.m4 Depends-on: time -localtime-buffer [test $NEED_LOCALTIME_BUFFER = 1] configure.ac: gl_FUNC_TZSET
