~ chicken-core (chicken-5) 1f54db006a918ffd4d06917595b9bc4a4b17a680
commit 1f54db006a918ffd4d06917595b9bc4a4b17a680 Author: felix <felix@call-with-current-continuation.org> AuthorDate: Mon Jul 26 10:26:53 2010 +0200 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Mon Jul 26 10:26:53 2010 +0200 timezone fixes (thanks to zbigniew) diff --git a/posixunix.scm b/posixunix.scm index c90481a3..e17f6b3e 100644 --- a/posixunix.scm +++ b/posixunix.scm @@ -355,7 +355,7 @@ static time_t C_timegm(struct tm *t) (ptm)->tm_isdst = (C_block_item((v), 8) != C_SCHEME_FALSE)) #define cpy_tmvec_to_tmstc9(ptm, v) \ - (((struct tm *)ptm)->tm_gmtoff = C_unfix(C_block_item((v), 9))) + (((struct tm *)ptm)->tm_gmtoff = -C_unfix(C_block_item((v), 9))) #define cpy_tmstc08_to_tmvec(v, ptm) \ (C_set_block_item((v), 0, C_fix(((struct tm *)ptm)->tm_sec)), \ @@ -369,7 +369,7 @@ static time_t C_timegm(struct tm *t) C_set_block_item((v), 8, ((ptm)->tm_isdst ? C_SCHEME_TRUE : C_SCHEME_FALSE))) #define cpy_tmstc9_to_tmvec(v, ptm) \ - (C_set_block_item((v), 9, C_fix((ptm)->tm_gmtoff))) + (C_set_block_item((v), 9, C_fix(-(ptm)->tm_gmtoff))) #define C_tm_set_08(v) cpy_tmvec_to_tmstc08( &C_tm, (v) ) #define C_tm_set_9(v) cpy_tmvec_to_tmstc9( &C_tm, (v) ) diff --git a/runtime.c b/runtime.c index c60190f7..a2f6dbe5 100644 --- a/runtime.c +++ b/runtime.c @@ -7775,13 +7775,13 @@ void C_ccall C_decode_seconds(C_word c, C_word closure, C_word k, C_word secs, C C_fix(tmt->tm_mday), C_fix(tmt->tm_mon), C_fix(tmt->tm_year), C_fix(tmt->tm_wday), C_fix(tmt->tm_yday), tmt->tm_isdst > 0 ? C_SCHEME_TRUE : C_SCHEME_FALSE, -#ifdef C_MACOSX +#ifdef C_GNU_ENV /* negative for west of UTC, but we want positive */ C_fix(-tmt->tm_gmtoff) #elif defined(__CYGWIN__) || defined(__MINGW32__) || defined(_WIN32) || defined(__WINNT__) - C_fix(_timezone) + C_fix(mode == C_SCHEME_FALSE ? _timezone : 0) /* does not account for DST */ #else - C_fix(timezone) + C_fix(mode == C_SCHEME_FALSE ? timezone : 0) /* does not account for DST */ #endif ); C_kontinue(k, info);Trap