From e10385909c687590d6522d007bba9d72f3f5c380 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Erland=20Sch=C3=B6nbeck?= <erland@erlang.org>
Date: Tue, 24 Mar 2015 13:52:07 +0100
Subject: inets: Add new module inets_time_compat with new time API The new
 module is backwards compatible.

---
 .../examples/httpd_load_test/hdlt_random_html.erl  | 14 ++---
 lib/inets/src/ftp/ftp.erl                          | 10 +--
 lib/inets/src/http_client/httpc_handler.erl        |  4 +-
 lib/inets/src/inets_app/Makefile                   |  3 +-
 lib/inets/src/inets_app/inets.app.src              |  1 +
 lib/inets/src/inets_app/inets_lib.erl              |  3 +-
 lib/inets/src/inets_app/inets_time_compat.erl      | 71 ++++++++++++++++++++++
 lib/inets/src/tftp/tftp_logger.erl                 | 11 +---
 lib/inets/src/tftp/tftp_sup.erl                    | 13 +---
 lib/inets/test/ftp_suite_lib.erl                   | 13 +---
 lib/inets/test/httpc_SUITE.erl                     | 21 ++-----
 lib/inets/test/httpd_time_test.erl                 | 11 +---
 12 files changed, 93 insertions(+), 82 deletions(-)
 create mode 100644 lib/inets/src/inets_app/inets_time_compat.erl

(limited to 'lib')

diff --git a/lib/inets/examples/httpd_load_test/hdlt_random_html.erl b/lib/inets/examples/httpd_load_test/hdlt_random_html.erl
index c55de628c1..59073a3d23 100644
--- a/lib/inets/examples/httpd_load_test/hdlt_random_html.erl
+++ b/lib/inets/examples/httpd_load_test/hdlt_random_html.erl
@@ -19,7 +19,6 @@
 %%
 
 -module(hdlt_random_html). 
--compile([{nowarn_deprecated_function,{erlang,now,0}}]).
 -export([page/3]). 
 
 page(SessionID, _Env, Input) -> 
@@ -49,15 +48,10 @@ stop() ->
 ". 
  
 content(WorkSim, SzSim) ->  
-    %% Adapt to OTP 18 erlang time API and be backwards compatible
-    {A, B, C} = try
-                    {erlang:phash2([node()]),
-                     erlang:monotonic_time(),
-                     erlang:unique_integer()}
-                catch
-                    error:undef ->
-                        erlang:now()
-                end,
+    {A, B, C} = {erlang:phash2([node()]),
+                 inets_time_compat:monotonic_time(),
+                 inets_time_compat:unique_integer()},
+
     random:seed(A, B, C),  
     lists:sort([random:uniform(X) || X <- lists:seq(1, WorkSim)]),  
     lists:flatten(lists:duplicate(SzSim, "Dummy data ")). 
diff --git a/lib/inets/src/ftp/ftp.erl b/lib/inets/src/ftp/ftp.erl
index 361a775024..7eebe8d5bf 100644
--- a/lib/inets/src/ftp/ftp.erl
+++ b/lib/inets/src/ftp/ftp.erl
@@ -21,7 +21,6 @@
 %% It also supports ipv6 RFC 2428 and starttls RFC 4217.
 
 -module(ftp).
--compile([{nowarn_deprecated_function,{erlang,now,0}}]).
 
 -behaviour(gen_server).
 -behaviour(inets_service).
@@ -2177,14 +2176,7 @@ handle_caller(#state{caller = {transfer_data, {Cmd, Bin, RemoteFile}}} =
 %% Connect to FTP server at Host (default is TCP port 21) 
 %% in order to establish a control connection.
 setup_ctrl_connection(Host, Port, Timeout, State) ->
-    %% Adapt to OTP 18 erlang time API and be backwards compatible
-    MsTime = try
-                 erlang:monotonic_time()
-             catch
-                 error:undef ->
-                     %% Use Erlang system time as monotonic time
-                     erlang:now()
-             end,
+    MsTime = inets_time_compat:monotonic_time(),
     case connect(Host, Port, Timeout, State) of
 	{ok, IpFam, CSock} ->
 	    NewState = State#state{csock = {tcp, CSock}, ipfamily = IpFam},
diff --git a/lib/inets/src/http_client/httpc_handler.erl b/lib/inets/src/http_client/httpc_handler.erl
index 7f7328f1d9..8f2f11ce8e 100644
--- a/lib/inets/src/http_client/httpc_handler.erl
+++ b/lib/inets/src/http_client/httpc_handler.erl
@@ -1,7 +1,7 @@
 %%
 %% %CopyrightBegin%
 %% 
-%% Copyright Ericsson AB 2002-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2015. All Rights Reserved.
 %% 
 %% The contents of this file are subject to the Erlang Public License,
 %% Version 1.1, (the "License"); you may not use this file except in
@@ -1122,7 +1122,7 @@ handle_http_body(Body, #state{headers       = Headers,
                            handle_response(State#state{headers = NewHeaders,
                                                 body    = NewBody});
                         _ ->
-                           {NewBody2, NewRequest} =
+                           {NewBody2, _NewRequest} =
                                 stream(NewBody, Request, Code),
                            handle_response(State#state{headers = NewHeaders,
                                        body    = NewBody2})
diff --git a/lib/inets/src/inets_app/Makefile b/lib/inets/src/inets_app/Makefile
index 5d3f652441..926585f198 100644
--- a/lib/inets/src/inets_app/Makefile
+++ b/lib/inets/src/inets_app/Makefile
@@ -48,7 +48,8 @@ MODULES = \
 	inets_sup \
 	inets_regexp \
 	inets_trace \
-	inets_lib
+	inets_lib \
+	inets_time_compat
 
 INTERNAL_HRL_FILES = inets_internal.hrl
 EXTERNAL_HRL_FILES = ../../include/httpd.hrl \
diff --git a/lib/inets/src/inets_app/inets.app.src b/lib/inets/src/inets_app/inets.app.src
index 01d4cefc55..7207672b7f 100644
--- a/lib/inets/src/inets_app/inets.app.src
+++ b/lib/inets/src/inets_app/inets.app.src
@@ -28,6 +28,7 @@
 	    inets_regexp,	                  
 	    inets_trace,
             inets_lib,
+            inets_time_compat,
 
             %% FTP
             ftp,
diff --git a/lib/inets/src/inets_app/inets_lib.erl b/lib/inets/src/inets_app/inets_lib.erl
index 11d3bac6bb..e79959f678 100644
--- a/lib/inets/src/inets_app/inets_lib.erl
+++ b/lib/inets/src/inets_app/inets_lib.erl
@@ -18,7 +18,6 @@
 %%
 
 -module(inets_lib).
--compile([{nowarn_deprecated_function,{erlang,now,0}}]).
 
 -export([millisec_passed/1, formated_timestamp/0, format_timestamp/1]).
 
@@ -27,7 +26,7 @@
 %% Help function, elapsed milliseconds since T0
 millisec_passed({_,_,_} = T0 ) ->
     %% OTP 17 and earlier
-    timer:now_diff(erlang:now(), T0) div 1000;
+    timer:now_diff(inets_time_compat:monotonic_time(), T0) div 1000;
 
 millisec_passed(T0) ->
     %% OTP 18
diff --git a/lib/inets/src/inets_app/inets_time_compat.erl b/lib/inets/src/inets_app/inets_time_compat.erl
new file mode 100644
index 0000000000..d6297d9caf
--- /dev/null
+++ b/lib/inets/src/inets_app/inets_time_compat.erl
@@ -0,0 +1,71 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2015-2015. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+%% This module is created to be able to execute on ERTS versions both
+%% earlier and later than 7.0.
+
+-module(inets_time_compat).
+
+%% We don't want warnings about the use of erlang:now/0 in
+%% this module.
+-compile(nowarn_deprecated_function).
+
+-export([monotonic_time/0,
+         timestamp/0,
+         unique_integer/0,
+         unique_integer/1]).
+
+monotonic_time() ->
+    try
+	erlang:monotonic_time()
+    catch
+	error:undef ->
+	    %% Use Erlang system time as monotonic time
+	    erlang_system_time_fallback()
+    end.
+
+timestamp() ->
+    try
+	erlang:timestamp()
+    catch
+	error:undef ->
+	    erlang:now()
+    end.
+
+unique_integer() ->
+    try
+	erlang:unique_integer()
+    catch
+	error:undef ->
+            erlang_system_time_fallback()
+    end.
+
+unique_integer(Modifiers) ->
+    try
+	erlang:unique_integer(Modifiers)
+    catch
+	error:badarg ->
+	    erlang:error(badarg, [Modifiers]);
+	error:undef ->
+            erlang_system_time_fallback()
+    end.
+
+erlang_system_time_fallback() ->
+    {MS, S, US} = erlang:now(),
+    (MS*1000000+S)*1000000+US.
diff --git a/lib/inets/src/tftp/tftp_logger.erl b/lib/inets/src/tftp/tftp_logger.erl
index 104d6a91c6..231a705371 100644
--- a/lib/inets/src/tftp/tftp_logger.erl
+++ b/lib/inets/src/tftp/tftp_logger.erl
@@ -18,7 +18,6 @@
 %%
 %%
 -module(tftp_logger).
--compile([{nowarn_deprecated_function,{erlang,now,0}}]).
 
 %%-------------------------------------------------------------------
 %% Interface
@@ -85,14 +84,8 @@ info_msg(Format, Data) ->
 %%-------------------------------------------------------------------
 
 add_timestamp(Format, Data) ->
-    %% Adapt to new OTP 18 erlang time API and be backwards compatible
-    Now = try
-              erlang:timestamp()
-          catch
-              error:undef ->
-                  erlang:now()
-          end,
-    {{_Y, _Mo, _D}, {H, Mi, S}} = calendar:now_to_universal_time(Now),
+    Time = inets_time_compat:timestamp(),
+    {{_Y, _Mo, _D}, {H, Mi, S}} = calendar:now_to_universal_time(Time),
     %% {"~p-~s-~sT~s:~s:~sZ,~6.6.0w tftp: " ++ Format ++ "\n", 
     %%  [Y, t(Mo), t(D), t(H), t(Mi), t(S), MicroSecs | Data]}.
     {"~s:~s:~s tftp: " ++ Format, [t(H), t(Mi), t(S) | Data]}.
diff --git a/lib/inets/src/tftp/tftp_sup.erl b/lib/inets/src/tftp/tftp_sup.erl
index 3065279515..7a0dcffc90 100644
--- a/lib/inets/src/tftp/tftp_sup.erl
+++ b/lib/inets/src/tftp/tftp_sup.erl
@@ -22,7 +22,6 @@
 %%----------------------------------------------------------------------
 
 -module(tftp_sup).
--compile([{nowarn_deprecated_function,{erlang,now,0}}]).
 
 -behaviour(supervisor).
 
@@ -94,17 +93,7 @@ unique_name(Options) ->
 	{value, {_, Port}} when is_integer(Port), Port > 0 -> 
 	    {tftpd, Port};
 	_ ->
-	    {tftpd, unique_integer()}
-    end.
-
-unique_integer() ->
-    %% Adapt to OTP 18 erlang time API and be backwards compatible
-    try
-	erlang:unique_integer([positive])
-    catch
-	error:undef ->
-	    {MS, S, US} = erlang:now(),
-	    (MS*1000000+S)*1000000+US
+	    {tftpd, inets_time_compat:unique_integer([positive])}
     end.
 
 default_kill_after() ->
diff --git a/lib/inets/test/ftp_suite_lib.erl b/lib/inets/test/ftp_suite_lib.erl
index 5ae9eb736e..b637832101 100644
--- a/lib/inets/test/ftp_suite_lib.erl
+++ b/lib/inets/test/ftp_suite_lib.erl
@@ -29,7 +29,6 @@
 % -export([init_per_testcase/2, end_per_testcase/2]).
 
 -compile(export_all).
--compile([{nowarn_deprecated_function,{erlang,now,0}}]).
 
 
 -record(progress, {
@@ -1353,15 +1352,9 @@ do_delete(Pid, Config) ->
     ok.
 
 do_mkdir(Pid) ->
-    %% Adapt to OTP 18 erlang time API and be backwards compatible
-    NewDir = try
-                 "earl_" ++ integer_to_list(erlang:unique_integer([positive]))
-             catch
-                 error:undef ->
-                     {A, B, C} = erlang:now(),
-                     "nisse_" ++ integer_to_list(A) ++ "_" ++
-                         integer_to_list(B) ++ "_" ++ integer_to_list(C)
-             end,
+    NewDir = "earl_" ++
+        integer_to_list(inets_time_compat:unique_integer([positive])),
+
     ok = ftp:cd(Pid, "incoming"),
     {ok, CurrDir} = ftp:pwd(Pid),
     {error, efnamena} = ftp:mkdir(Pid, NewDir++"\r\nCWD ."),
diff --git a/lib/inets/test/httpc_SUITE.erl b/lib/inets/test/httpc_SUITE.erl
index 2193588031..0dfc65e8f7 100644
--- a/lib/inets/test/httpc_SUITE.erl
+++ b/lib/inets/test/httpc_SUITE.erl
@@ -31,7 +31,6 @@
 -include("httpc_internal.hrl").
 %% Note: This directive should only be used in test suites.
 -compile(export_all).
--compile([{nowarn_deprecated_function,{erlang,now,0}}]).
 
 -define(URL_START, "http://").
 -define(TLS_URL_START, "https://").
@@ -1934,14 +1933,8 @@ run_clients(NumClients, ServerPort, SeqNumServer) ->
 wait4clients([], _Timeout) ->
     ok;
 wait4clients(Clients, Timeout) when Timeout > 0 ->
-    %% Adapt to OTP 18 erlang time API and be backwards compatible
-    Time = try
-                 erlang:monotonic_time()
-             catch
-                 error:undef ->
-                     %% Use Erlang system time as monotonic time
-                     erlang:now()
-             end,
+    Time = inets_time_compat:monotonic_time(),
+
     receive
 	{'DOWN', _MRef, process, Pid, normal} ->
 	    {value, {Id, _, _}} = lists:keysearch(Pid, 2, Clients),
@@ -2040,14 +2033,8 @@ parse_connection_type(Request) ->
     end.
 
 set_random_seed() ->
-    %% Adapt to OTP 18 erlang time API and be backwards compatible
-    Unique = try
-	erlang:unique_integer()
-    catch
-	error:undef ->
-	    {MS, S, US} = erlang:now(),
-	    (MS*1000000+S)*1000000+US
-    end,
+    Unique = inets_time_compat:unique_integer(),
+
     A = erlang:phash2([make_ref(), self(), Unique]),
     random:seed(A, A, A).
 
diff --git a/lib/inets/test/httpd_time_test.erl b/lib/inets/test/httpd_time_test.erl
index b3e6746a01..7dd61a5517 100644
--- a/lib/inets/test/httpd_time_test.erl
+++ b/lib/inets/test/httpd_time_test.erl
@@ -18,7 +18,6 @@
 %%
 %%
 -module(httpd_time_test).
--compile([{nowarn_deprecated_function,{erlang,now,0}}]).
 
 -export([t/3, t1/2, t2/2, t4/2]).
 
@@ -117,15 +116,7 @@ main(N, SocketType, Host, Port, Time)
 loop(Pollers, Timeout) ->
     d("loop -> entry when"
       "~n   Timeout: ~p", [Timeout]),
-    %% Adapt to OTP 18 erlang time API and be backwards compatible
-    Start = try
-                erlang:monotonic_time(1000)
-            catch
-                error:undef ->
-                    %% Use Erlang system time as monotonic time
-                    {A,B,C} = erlang:now(),
-                    A*1000000000+B*1000+(C div 1000)
-            end,
+    Start = inets_time_compat:monotonic_time(),
 
     receive 
 	{'EXIT', Pid, {poller_stat_failure, SocketType, Host, Port, Time, Reason}} ->
-- 
cgit v1.2.3