Better fix for strftime/mktime bug, now more compatible since local timezone

name and offset restored for compatibility with standard perl
This commit is contained in:
Andrey A. Chernov 2000-05-11 23:49:13 +00:00
parent 0f32c069d9
commit 738988c182
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=60410

View File

@ -3620,9 +3620,12 @@ strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1)
char tmpbuf[128];
struct tm mytm;
int len;
#ifndef __FreeBSD__
init_tm(&mytm); /* XXX workaround - see init_tm() above */
#ifdef __FreeBSD__
long sgmtoff;
int sisdst;
char *szone;
#endif
init_tm(&mytm); /* XXX workaround - see init_tm() above */
mytm.tm_sec = sec;
mytm.tm_min = min;
mytm.tm_hour = hour;
@ -3633,8 +3636,14 @@ strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1)
mytm.tm_yday = yday;
mytm.tm_isdst = isdst;
#ifdef __FreeBSD__
mytm.tm_gmtoff = 0;
mytm.tm_zone = "???";
sgmtoff = mytm.tm_gmtoff;
sisdst = mytm.tm_isdst;
szone = mytm.tm_zone;
/* to prevent mess with shifted hours/days/etc. */
(void) timegm(&mytm);
mytm.tm_gmtoff = sgmtoff;
mytm.tm_isdst = sisdst;
mytm.tm_zone = szone;
#else
(void) mktime(&mytm);
#endif