- Fix use of "clever" mktime.
- Fix support for leap seconds-aware timezones. from piotr sikora
This commit is contained in:
parent
e36ebe3043
commit
91d743a84d
@ -1,4 +1,4 @@
|
||||
# $OpenBSD: Makefile,v 1.49 2012/06/22 13:08:09 phessler Exp $
|
||||
# $OpenBSD: Makefile,v 1.50 2012/07/18 13:44:31 jasper Exp $
|
||||
|
||||
COMMENT= real-time, concurrent and distributed functional language
|
||||
BROKEN-sparc= Requires v9|v9a|v9b; requested architecture is sparclite.
|
||||
@ -7,6 +7,7 @@ V= R15B01
|
||||
DISTNAME= otp_src_${V}
|
||||
PKGNAME= erlang-15b.01
|
||||
EPOCH= 0
|
||||
REVISION= 0
|
||||
CATEGORIES= lang
|
||||
|
||||
# Erlang Public License
|
||||
|
50
lang/erlang/patches/patch-erts_emulator_beam_erl_time_sup_c
Normal file
50
lang/erlang/patches/patch-erts_emulator_beam_erl_time_sup_c
Normal file
@ -0,0 +1,50 @@
|
||||
$OpenBSD: patch-erts_emulator_beam_erl_time_sup_c,v 1.3 2012/07/18 13:44:31 jasper Exp $
|
||||
|
||||
[PATCH] Fix use of "clever" mktime.
|
||||
|
||||
Commit 1eef765 introduced regression (conditional _always_ evaluates
|
||||
to true) in which erlang:localtime_to_universaltime/2 stopped working
|
||||
on systems configured with timezone without DST (i.e. UTC) on *BSD
|
||||
platforms:
|
||||
|
||||
1> erlang:localtime_to_universaltime({{2012,1,1},{0,0,0}}, true).
|
||||
** exception error: bad argument
|
||||
|
||||
|
||||
[PATCH] Fix support for leap seconds-aware timezones.
|
||||
|
||||
erlang:universaltime_to_localtime is leap seconds-aware (since 2008),
|
||||
however erlang:localtime_to_universaltime is not, which gives
|
||||
surprising results on systems configured with leap seconds-aware
|
||||
timezones:
|
||||
|
||||
1> erlang:universaltime_to_localtime({{2012,1,1},{0,0,0}}).
|
||||
{{2012,1,1},{0,0,0}}
|
||||
2> erlang:localtime_to_universaltime({{2012,1,1},{0,0,0}}).
|
||||
{{2012,1,1},{0,0,24}}
|
||||
|
||||
and completely breaks calendar:local_time_to_universal_time_dst:
|
||||
|
||||
3> calendar:local_time_to_universal_time_dst({{2011,1,1},{0,0,0}}).
|
||||
[]
|
||||
--- erts/emulator/beam/erl_time_sup.c.orig Sun Apr 1 18:14:36 2012
|
||||
+++ erts/emulator/beam/erl_time_sup.c Fri Jul 13 05:52:50 2012
|
||||
@@ -757,7 +757,7 @@
|
||||
refuses to give us a DST time, we simulate the Linux/Solaris
|
||||
behaviour of giving the same data as if is_dst was not set. */
|
||||
t.tm_isdst = 0;
|
||||
- if (erl_mktime(&the_clock, &t)) {
|
||||
+ if (erl_mktime(&the_clock, &t) < 0) {
|
||||
/* Failed anyway, something else is bad - will be a badarg */
|
||||
return 0;
|
||||
}
|
||||
@@ -766,6 +766,9 @@
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
+
|
||||
+ the_clock = time2posix(the_clock);
|
||||
+
|
||||
#ifdef HAVE_GMTIME_R
|
||||
tm = gmtime_r(&the_clock, &tmbuf);
|
||||
#else
|
Loading…
x
Reference in New Issue
Block a user