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:
parent
0f32c069d9
commit
738988c182
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user