commit 301f794f33d145b08fbf7f5247c8663d404fabb5 Author: Paul Eggert Date: Fri Feb 26 08:58:45 2016 -0800 Fix tzname redefinition in MS-Windows Problem reported by Ian Abbott in: http://mm.icann.org/pipermail/tz/2016-February/023289.html * localtime.c (tzname): Don’t define if HAVE_POSIX_DECLS, as causes the Microsoft compiler to complain that tzname is redeclared without dllimport. * localtime.c, private.h (altzone): Do define even if HAVE_POSIX_DECLS, since this is not a POSIX-specified variable. diff --git a/localtime.c b/localtime.c index e3bc763..276ce34 100644 --- a/localtime.c +++ b/localtime.c @@ -178,11 +178,6 @@ static struct state gmtmem; static char lcl_TZname[TZ_STRLEN_MAX + 1]; static int lcl_is_set; -char * tzname[2] = { - (char *) wildabbr, - (char *) wildabbr -}; - /* ** Section 4.12.3 of X3.159-1989 requires that ** Except for the strftime function, these functions [asctime, @@ -193,10 +188,16 @@ char * tzname[2] = { static struct tm tm; -#ifdef USG_COMPAT +#if !HAVE_POSIX_DECLS +char * tzname[2] = { + (char *) wildabbr, + (char *) wildabbr +}; +# ifdef USG_COMPAT long timezone; int daylight; -#endif /* defined USG_COMPAT */ +# endif +#endif #ifdef ALTZONE long altzone; diff --git a/private.h b/private.h index 6080e71..e23764d 100644 --- a/private.h +++ b/private.h @@ -386,8 +386,6 @@ time_t time(time_t *); void tzset(void); #endif -#if !HAVE_POSIX_DECLS - /* ** Some time.h implementations don't declare asctime_r. ** Others might define it as a macro. @@ -395,24 +393,24 @@ void tzset(void); ** Similarly for timezone, daylight, and altzone. */ -#ifndef asctime_r +#if !HAVE_POSIX_DECLS +# ifndef asctime_r extern char * asctime_r(struct tm const *restrict, char *restrict); -#endif - -#ifdef USG_COMPAT -# ifndef timezone -extern long timezone; # endif -# ifndef daylight +# ifdef USG_COMPAT +# ifndef timezone +extern long timezone; +# endif +# ifndef daylight extern int daylight; +# endif # endif #endif + #if defined ALTZONE && !defined altzone extern long altzone; #endif -#endif - /* ** The STD_INSPIRED functions are similar, but most also need ** declarations if time_tz is defined.