gl_WINSIZE_IN_PTEM
-AC_MSG_CHECKING([whether localtime caches TZ])
-AC_CACHE_VAL([utils_cv_localtime_cache],
-[if test x$ac_cv_func_tzset = xyes; then
-AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <time.h>
-#if STDC_HEADERS
-# include <stdlib.h>
-#endif
-extern char **environ;
-void unset_TZ (void)
-{
- char **from, **to;
- for (to = from = environ; (*to = *from); from++)
- if (! (to[0][0] == 'T' && to[0][1] == 'Z' && to[0][2] == '='))
- to++;
-}
-int
-main ()
-{
- time_t now = time ((time_t *) 0);
- int hour_GMT0, hour_unset;
- if (putenv ("TZ=GMT0") != 0)
- return 1;
- hour_GMT0 = localtime (&now)->tm_hour;
- unset_TZ ();
- hour_unset = localtime (&now)->tm_hour;
- if (putenv ("TZ=PST8") != 0)
- return 1;
- if (localtime (&now)->tm_hour == hour_GMT0)
- return 1;
- unset_TZ ();
- if (localtime (&now)->tm_hour != hour_unset)
- return 1;
- return 0;
-}]])],
-[utils_cv_localtime_cache=no],
-[utils_cv_localtime_cache=yes],
-[# If we have tzset, assume the worst when cross-compiling.
-utils_cv_localtime_cache=yes])
-else
- # If we lack tzset, report that localtime does not cache TZ,
- # since we can't invalidate the cache if we don't have tzset.
- utils_cv_localtime_cache=no
-fi])dnl
-AC_MSG_RESULT([$utils_cv_localtime_cache])
-if test $utils_cv_localtime_cache = yes; then
- AC_DEFINE([LOCALTIME_CACHE], [1], [FIXME])
-fi
-
# Find the library for dynamic loading of shared libraries.
AC_SEARCH_LIBS([dlopen], [dl])
AS_CASE([$ac_cv_search_dlopen],
/* flags for parse_datetime2 */
static unsigned int parse_datetime_flags;
-#if LOCALTIME_CACHE
-# define TZSET tzset ()
-#else
-# define TZSET /* empty */
-#endif
-
#ifdef _DATE_FMT
# define DATE_FMT_LANGINFO() nl_langinfo (_DATE_FMT)
#else
char *reference = NULL;
bool discarded_datestr = false;
bool discarded_set_datestr = false;
- bool utc = false;
+ char const *tzstring = NULL;
initialize_main (&argc, &argv);
set_program_name (argv[0]);
set_date = true;
break;
case 'u':
- utc = true;
+ tzstring = "UTC0";
break;
case_GETOPT_HELP_CHAR;
case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
}
}
- if (utc)
- {
- /* POSIX says that 'date -u' is equivalent to setting the TZ
- environment variable, so this option should do nothing other
- than setting TZ. */
- if (putenv (bad_cast ("TZ=UTC0")) != 0)
- xalloc_die ();
- TZSET;
- }
-
int option_specified_date = (!!datestr + !!batch_file + !!reference
+ get_resolution);
char *format_copy = adjust_resolution (format);
char const *format_res = format_copy ? format_copy : format;
- char const *tzstring = getenv ("TZ");
+ if (!tzstring)
+ tzstring = getenv ("TZ");
timezone_t tz = tzalloc (tzstring);
bool ok = true;