Hi,
updated patch attached.

Honestly, I have no idea why naddy@ added EPOCH to the port today,
so I left REVISION as it was before.

Best regards,
Piotr Sikora < piotr.sik...@frickle.com >

Index: Makefile
===================================================================
RCS file: /cvs/ports/lang/erlang/Makefile,v
retrieving revision 1.42
diff -u -r1.42 Makefile
--- Makefile    25 Jun 2011 07:48:43 -0000      1.42
+++ Makefile    5 Jul 2011 18:01:23 -0000
@@ -5,7 +5,7 @@
 V=             R13B04
 DISTNAME=      otp_src_${V}
 PKGNAME=       erlang-13b.04
-REVISION=      3
+REVISION=      4
 CATEGORIES=    lang
 
 # Erlang Public License
Index: patches/patch-erts_configure_in
===================================================================
RCS file: patches/patch-erts_configure_in
diff -N patches/patch-erts_configure_in
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-erts_configure_in     5 Jul 2011 18:01:23 -0000
@@ -0,0 +1,13 @@
+$OpenBSD$
+--- erts/configure.in.orig
++++ erts/configure.in
+@@ -1698,6 +1698,9 @@ AC_CHECK_FUNCS([ieee_handler fpsetmask finite isnan 
isinf res_gethostbyname dlop
+               gethrtime localtime_r gmtime_r mmap mremap memcpy mallopt \
+               sbrk _sbrk __sbrk brk _brk __brk \
+               flockfile fstat strlcpy strlcat setsid posix2time setlocale 
nl_langinfo poll])
++
++AC_CHECK_DECLS([posix2time],,,[#include <time.h>])
++
+ if test "X$host" = "Xwin32"; then
+       ac_cv_func_setvbuf_reversed=yes
+ fi
Index: patches/patch-erts_emulator_beam_erl_time_sup_c
===================================================================
RCS file: patches/patch-erts_emulator_beam_erl_time_sup_c
diff -N patches/patch-erts_emulator_beam_erl_time_sup_c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-erts_emulator_beam_erl_time_sup_c     5 Jul 2011 18:01:23 
-0000
@@ -0,0 +1,41 @@
+$OpenBSD$
+
+Backport fix for correct handling of date/time conversions on systems
+with timezone without DST (like UTC):
+https://github.com/erlang/otp/commit/7e6fe78278c203c3756ce0d6bf23a6bd6cf7bb5d
+--- erts/emulator/beam/erl_time_sup.c.orig
++++ erts/emulator/beam/erl_time_sup.c
+@@ -650,6 +650,22 @@ local_to_univ(Sint *year, Sint *month, Sint *day,
+     t.tm_sec = *second;
+     t.tm_isdst = isdst;
+     the_clock = mktime(&t);
++    if (the_clock == -1) {
++       if (isdst) {
++           /* If this is a timezone without DST and the OS (correctly)
++              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;
++           the_clock = mktime(&t);
++           if (the_clock == -1) {
++               /* Failed anyway, something else is bad - will be a badarg */
++               return 0;
++           }
++       } else {
++           /* Something else is the matter, badarg. */
++           return 0;
++       }
++    }
+ #ifdef HAVE_GMTIME_R
+     gmtime_r(&the_clock, (tm = &tmbuf));
+ #else
+@@ -663,6 +679,10 @@ local_to_univ(Sint *year, Sint *month, Sint *day,
+     *second = tm->tm_sec;
+     return 1;
+ }
++#if defined(HAVE_POSIX2TIME) && defined(HAVE_DECL_POSIX2TIME) && \
++    !HAVE_DECL_POSIX2TIME
++extern time_t posix2time(time_t);
++#endif
+
+ int
+ univ_to_local(Sint *year, Sint *month, Sint *day,
Index: patches/patch-erts_emulator_test_time_SUITE_erl
===================================================================
RCS file: patches/patch-erts_emulator_test_time_SUITE_erl
diff -N patches/patch-erts_emulator_test_time_SUITE_erl
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-erts_emulator_test_time_SUITE_erl     5 Jul 2011 18:01:23 
-0000
@@ -0,0 +1,54 @@
+$OpenBSD$
+--- erts/emulator/test/time_SUITE.erl.orig
++++ erts/emulator/test/time_SUITE.erl
+@@ -34,6 +34,8 @@
+        consistency/1,
+        now/1, now_unique/1, now_update/1, timestamp/1]).
+
++-export([local_to_univ_utc/1]).
++
+ -include("test_server.hrl").
+
+ -export([linear_time/1]).
+@@ -53,7 +55,40 @@
+ -define(dst_timezone, 2).
+
+ all(suite) -> [univ_to_local, local_to_univ,
+-             bad_univ_to_local, bad_local_to_univ, consistency, now, 
timestamp].
++             local_to_univ_utc,
++             bad_univ_to_local, bad_local_to_univ,
++             consistency, now, timestamp].
++
++local_to_univ_utc(suite) ->
++    [];
++local_to_univ_utc(doc) ->
++    ["Test that DST = true on timezones without DST is ignored"];
++local_to_univ_utc(Config) when is_list(Config) ->
++    case os:type() of
++       {unix,_} ->
++           %% TZ variable has a meaning
++           ?line {ok, Node} =
++               test_server:start_node(local_univ_utc,peer,
++                                      [{args, "-env TZ UTC"}]),
++           ?line {{2008,8,1},{0,0,0}} =
++               rpc:call(Node,
++                        erlang,localtime_to_universaltime,
++                        [{{2008, 8, 1}, {0, 0, 0}},
++                         false]),
++           ?line {{2008,8,1},{0,0,0}} =
++               rpc:call(Node,
++                        erlang,localtime_to_universaltime,
++                        [{{2008, 8, 1}, {0, 0, 0}},
++                         true]),
++           ?line [{{2008,8,1},{0,0,0}}] =
++               rpc:call(Node,
++                        calendar,local_time_to_universal_time_dst,
++                        [{{2008, 8, 1}, {0, 0, 0}}]),
++           ?line test_server:stop_node(Node),
++           ok;
++       _ ->
++           {skip,"Only valid on Unix"}
++    end.
+
+
+ %% Tests conversion from univeral to local time.

Reply via email to