aboutsummaryrefslogtreecommitdiffstats
path: root/lib/sasl/src
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sasl/src')
-rw-r--r--lib/sasl/src/erlsrv.erl15
-rw-r--r--lib/sasl/src/format_lib_supp.erl4
-rw-r--r--lib/sasl/src/overload.erl3
-rw-r--r--lib/sasl/src/rb.erl14
-rw-r--r--lib/sasl/src/release_handler.erl101
-rw-r--r--lib/sasl/src/release_handler_1.erl2
-rw-r--r--lib/sasl/src/sasl.app.src4
-rw-r--r--lib/sasl/src/sasl.appup.src18
-rw-r--r--lib/sasl/src/sasl_report_file_h.erl6
-rw-r--r--lib/sasl/src/sasl_report_tty_h.erl4
-rw-r--r--lib/sasl/src/si.erl4
-rw-r--r--lib/sasl/src/si_sasl_supp.erl8
-rw-r--r--lib/sasl/src/systools_lib.erl12
-rw-r--r--lib/sasl/src/systools_make.erl73
-rw-r--r--lib/sasl/src/systools_rc.erl14
-rw-r--r--lib/sasl/src/systools_relup.erl19
16 files changed, 171 insertions, 130 deletions
diff --git a/lib/sasl/src/erlsrv.erl b/lib/sasl/src/erlsrv.erl
index 086dc7c651..0d931f1779 100644
--- a/lib/sasl/src/erlsrv.erl
+++ b/lib/sasl/src/erlsrv.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2013. 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
@@ -39,7 +39,7 @@ current_version() ->
run_erlsrv(Command) ->
run_erlsrv(current_version(),Command).
run_erlsrv(EVer, Command) ->
- case catch(open_port({spawn, erlsrv(EVer) ++ " " ++ Command},
+ case catch(open_port({spawn, "\"" ++ erlsrv(EVer) ++ "\" " ++ Command},
[{line,1000}, in, eof])) of
{'EXIT',{Reason,_}} ->
{port_error, Reason};
@@ -53,7 +53,7 @@ run_erlsrv(EVer, Command) ->
end.
run_erlsrv_interactive(EVer, Commands) ->
- case catch(open_port({spawn, erlsrv(EVer) ++ " readargs"},
+ case catch(open_port({spawn, "\""++ erlsrv(EVer) ++ "\" readargs"},
[{line,1000}, eof])) of
{'EXIT',{Reason,_}} ->
{port_error, Reason};
@@ -71,11 +71,14 @@ write_all_data(Port,[]) ->
Port ! {self(), {command, io_lib:nl()}},
ok;
write_all_data(Port,[H|T]) ->
- Port ! {self(), {command, H ++ io_lib:nl()}},
+ Port ! {self(), {command, unicode:characters_to_binary([H,io_lib:nl()])}},
write_all_data(Port,T).
read_all_data(Port) ->
- lists:reverse(read_all_data(Port,[],[])).
+ Data0 = lists:reverse(read_all_data(Port,[],[])),
+ %% Convert from utf8 to a list of chars
+ [unicode:characters_to_list(list_to_binary(Data)) || Data <- Data0].
+
read_all_data(Port,Line,Lines) ->
receive
{Port, {data, {noeol,Data}}} ->
@@ -178,7 +181,7 @@ get_service(EVer, ServiceName) ->
[]
end
end,
- %%% First split by Env:
+ %%% First split by Env:
{Before, After} = split_by_env(Data),
FirstPass = lists:flatten(lists:map(F,Before)),
%%% If the arguments are there, split them to
diff --git a/lib/sasl/src/format_lib_supp.erl b/lib/sasl/src/format_lib_supp.erl
index af15fd3288..5348bc6d59 100644
--- a/lib/sasl/src/format_lib_supp.erl
+++ b/lib/sasl/src/format_lib_supp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2013. 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
@@ -77,7 +77,7 @@ print_format(Device, Line, [{data, Data}|T]) ->
print_data(Device, Line, Data),
print_format(Device, Line, T);
print_format(Device, Line, [{table, Table}|T]) ->
- print_table(Device, Line, Table),
+ _ = print_table(Device, Line, Table),
print_format(Device, Line, T);
print_format(Device, Line, [{items, Items}|T]) ->
print_items(Device, Line, Items),
diff --git a/lib/sasl/src/overload.erl b/lib/sasl/src/overload.erl
index 97f7bebe00..736423484a 100644
--- a/lib/sasl/src/overload.erl
+++ b/lib/sasl/src/overload.erl
@@ -1,8 +1,7 @@
-%% -*- coding: utf-8 -*-
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2013. 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
diff --git a/lib/sasl/src/rb.erl b/lib/sasl/src/rb.erl
index 767932e659..65011af568 100644
--- a/lib/sasl/src/rb.erl
+++ b/lib/sasl/src/rb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2013. 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
@@ -329,11 +329,11 @@ scan_files(RptDir, Max, Type) ->
{ok, Fd} ->
case catch file:read(Fd, 1) of
{ok, [LastWritten]} ->
- file:close(Fd),
+ ok = file:close(Fd),
Files = make_file_list(RptDir, LastWritten),
scan_files(RptDir, Files, Max, Type);
_X ->
- file:close(Fd),
+ _ = file:close(Fd),
exit("cannot read the index file")
end;
_X -> exit("cannot read the index file")
@@ -406,7 +406,7 @@ read_reports(No, Fd, Fname, Max, Type) ->
io:format("rb: reading report..."),
case catch read_reports(Fd, [], Type) of
{ok, Res} ->
- file:close(Fd),
+ ok = file:close(Fd),
io:format("done.~n"),
NewRes =
if
@@ -417,7 +417,7 @@ read_reports(No, Fd, Fname, Max, Type) ->
end,
add_report_data(NewRes, No, Fname);
{error, [Problem | Res]} ->
- file:close(Fd),
+ _ = file:close(Fd),
io:format("Error: ~p~n",[Problem]),
io:format("Salvaged ~p entries from corrupt report file ~s...~n",
[length(Res),Fname]),
@@ -918,7 +918,7 @@ handle_bad_form(Date, Msg, Device, Abort, Log) ->
end.
read_rep_msg(Fd, FilePosition) ->
- file:position(Fd, {bof, FilePosition}),
+ {ok,_} = file:position(Fd, {bof, FilePosition}),
Res =
case catch read_report(Fd) of
{ok, Report} ->
@@ -926,5 +926,5 @@ read_rep_msg(Fd, FilePosition) ->
{Date, Report};
_ -> error
end,
- file:close(Fd),
+ ok = file:close(Fd),
Res.
diff --git a/lib/sasl/src/release_handler.erl b/lib/sasl/src/release_handler.erl
index a5a234cbc0..ccd84f0c37 100644
--- a/lib/sasl/src/release_handler.erl
+++ b/lib/sasl/src/release_handler.erl
@@ -585,11 +585,9 @@ init([]) ->
handle_call({unpack_release, ReleaseName}, _From, S)
when S#state.masters == false ->
- RelDir = S#state.rel_dir,
- case catch do_unpack_release(S#state.root, RelDir,
+ case catch do_unpack_release(S#state.root, S#state.rel_dir,
ReleaseName, S#state.releases) of
{ok, NewReleases, Vsn} ->
- clean_release(RelDir, ReleaseName),
{reply, {ok, Vsn}, S#state{releases = NewReleases}};
{error, Reason} ->
{reply, {error, Reason}, S};
@@ -739,7 +737,7 @@ mk_lib_name([]) -> [].
handle_info(timeout, S) ->
case soft_purge(S#state.unpurged) of
[] ->
- timer:cancel(S#state.timer),
+ _ = timer:cancel(S#state.timer),
{noreply, S#state{unpurged = [], timer = undefined}};
Unpurged ->
{noreply, S#state{unpurged = Unpurged}}
@@ -850,15 +848,11 @@ do_unpack_release(Root, RelDir, ReleaseName, Releases) ->
Dir = filename:join([RelDir, Vsn]),
copy_file(RelFile, Dir, false),
- {ok, NewReleases, Vsn}.
+ %% Clean release
+ _ = file:delete(Tar),
+ _ = file:delete(RelFile),
-%% Note that this function is not executed by a client
-%% release_handler.
-clean_release(RelDir, ReleaseName) ->
- Tar = filename:join(RelDir, ReleaseName ++ ".tar.gz"),
- Rel = filename:join(RelDir, ReleaseName ++ ".rel"),
- file:delete(Tar),
- file:delete(Rel).
+ {ok, NewReleases, Vsn}.
check_rel(Root, RelFile, Masters) ->
check_rel(Root, RelFile, [], Masters).
@@ -1184,7 +1178,8 @@ rename_tmp_service(EVsn,TmpVsn,NewVsn) ->
{error, _Error} ->
ok;
_Data ->
- erlsrv:remove_service(ToName)
+ {ok,_} = erlsrv:remove_service(ToName),
+ ok
end,
rename_service(EVsn,FromName,ToName).
@@ -1237,13 +1232,12 @@ do_make_services_permanent(PermanentVsn,Vsn, PermanentEVsn, EVsn) ->
UpdData = erlsrv:new_service(Name, Data, []),
case erlsrv:store_service(EVsn,UpdData) of
ok ->
- erlsrv:disable_service(PermanentEVsn, PermName),
- erlsrv:enable_service(EVsn, Name),
- erlsrv:remove_service(PermName),
+ {ok,_} = erlsrv:disable_service(PermanentEVsn, PermName),
+ {ok,_} = erlsrv:enable_service(EVsn, Name),
+ {ok,_} = erlsrv:remove_service(PermName),
%%% Read comments about these above...
os:putenv("ERLSRV_SERVICE_NAME", Name),
- heart:cycle(),
- ok;
+ ok = heart:cycle();
Error4 ->
throw(Error4)
end
@@ -1288,7 +1282,7 @@ do_make_permanent(#state{releases = Releases,
_ ->
ok
end,
- init:make_permanent(filename:join(Dir, "start"), Sys),
+ ok = init:make_permanent(filename:join(Dir, "start"), Sys),
{ok, NewReleases, brutal_purge(Unpurged)};
{value, #release{status = permanent}} ->
{ok, Releases, Unpurged};
@@ -1309,13 +1303,13 @@ do_back_service(OldVersion, CurrentVersion,OldEVsn,CurrentEVsn) ->
Data ->
erlsrv:new_service(OldName, Data, [])
end,
- case erlsrv:store_service(OldEVsn,UpdData) of
- ok ->
- erlsrv:disable_service(CurrentEVsn,CurrentName),
- erlsrv:enable_service(OldEVsn,OldName);
- Error2 ->
- throw(Error2)
- end,
+ _ = case erlsrv:store_service(OldEVsn,UpdData) of
+ ok ->
+ {ok,_} = erlsrv:disable_service(CurrentEVsn,CurrentName),
+ {ok,_} = erlsrv:enable_service(OldEVsn,OldName);
+ Error2 ->
+ throw(Error2)
+ end,
OldErlSrv = filename:nativename(erlsrv:erlsrv(OldEVsn)),
CurrentErlSrv = filename:nativename(erlsrv:erlsrv(CurrentEVsn)),
case heart:set_cmd(CurrentErlSrv ++ " remove " ++ CurrentName ++
@@ -1386,10 +1380,18 @@ set_permanent_files(RelDir, _EVsn, Vsn, Masters, _Static) ->
do_remove_service(Vsn) ->
- %%% Very unconditionally remove the service.
+ %% Very unconditionally remove the service.
+ %% Note that the service could already have been removed when
+ %% making another release permanent.
ServiceName = hd(string:tokens(atom_to_list(node()),"@"))
++ "_" ++ Vsn,
- erlsrv:remove_service(ServiceName).
+ case erlsrv:get_service(ServiceName) of
+ {error, _Error} ->
+ ok;
+ _Data ->
+ {ok,_} = erlsrv:remove_service(ServiceName),
+ ok
+ end.
do_remove_release(Root, RelDir, Vsn, Releases) ->
% Decide which libs should be removed
@@ -1603,8 +1605,7 @@ do_write_file(File, Str, FileOpts) ->
case file:open(File, [write | FileOpts]) of
{ok, Fd} ->
io:put_chars(Fd, Str),
- file:close(Fd),
- ok;
+ ok = file:close(Fd);
{error, Reason} ->
{error, {Reason, File}}
end.
@@ -1651,9 +1652,9 @@ get_appls([], Res) ->
mon_nodes(true) ->
- net_kernel:monitor_nodes(true);
+ ok = net_kernel:monitor_nodes(true);
mon_nodes(false) ->
- net_kernel:monitor_nodes(false),
+ ok = net_kernel:monitor_nodes(false),
flush().
flush() ->
@@ -1691,7 +1692,7 @@ prepare_restart_nt(#release{erts_vsn = EVsn, vsn = Vsn},
{error, _} = Error2 ->
throw(Error2);
_X ->
- erlsrv:disable_service(EVsn, FutureServiceName),
+ {ok,_} = erlsrv:disable_service(EVsn, FutureServiceName),
ErlSrv = filename:nativename(erlsrv:erlsrv(EVsn)),
StartDisabled = ErlSrv ++ " start_disabled " ++ FutureServiceName,
case heart:set_cmd(StartDisabled) of
@@ -1877,8 +1878,7 @@ do_write_release(Dir, RELEASES, NewReleases) ->
case file:open(filename:join(Dir, RELEASES), [write]) of
{ok, Fd} ->
ok = io:format(Fd, "~p.~n", [NewReleases]),
- file:close(Fd),
- ok;
+ ok = file:close(Fd);
{error, Reason} ->
{error, Reason}
end.
@@ -2010,7 +2010,7 @@ do_rename_files([]) ->
%% Remove a list of files. Ignore failure.
%%-----------------------------------------------------------------
do_remove_files([File|Files]) ->
- file:delete(File),
+ _ = file:delete(File),
do_remove_files(Files);
do_remove_files([]) ->
ok.
@@ -2030,7 +2030,8 @@ do_ensure_RELEASES(RelFile) ->
%% Make a directory, ignore failures (captured later).
%%-----------------------------------------------------------------
make_dir(Dir, false) ->
- file:make_dir(Dir);
+ _ = file:make_dir(Dir),
+ ok;
make_dir(Dir, Masters) ->
lists:foreach(fun(Master) -> rpc:call(Master, file, make_dir, [Dir]) end,
Masters).
@@ -2062,12 +2063,12 @@ at_all_masters([], _, _, _) ->
%% Ignore {M,F,A} return value.
%%-----------------------------------------------------------------
takewhile(Master, Masters, M, F, A) ->
- lists:takewhile(fun(Ma) when Ma == Master ->
- false;
- (Ma) ->
- rpc:call(Ma, M, F, A),
- true
- end, Masters),
+ _ = lists:takewhile(fun(Ma) when Ma == Master ->
+ false;
+ (Ma) ->
+ rpc:call(Ma, M, F, A),
+ true
+ end, Masters),
ok.
consult(File, false) -> file:consult(File);
@@ -2205,23 +2206,23 @@ set_static_files(SrcDir, DestDir, Masters) ->
write_ini_file(RootDir,EVsn,Masters) ->
BinDir = filename:join([RootDir,"erts-"++EVsn,"bin"]),
Str0 = io_lib:format("[erlang]~n"
- "Bindir=~s~n"
+ "Bindir=~ts~n"
"Progname=erl~n"
- "Rootdir=~s~n",
+ "Rootdir=~ts~n",
[filename:nativename(BinDir),
filename:nativename(RootDir)]),
- Str = re:replace(Str0,"\\\\","\\\\\\\\",[{return,list},global]),
+ Str = re:replace(Str0,"\\\\","\\\\\\\\",[{return,list},global,unicode]),
IniFile = filename:join(BinDir,"erl.ini"),
do_write_ini_file(IniFile,Str,Masters).
do_write_ini_file(File,Data,false) ->
- case do_write_file(File, Data) of
+ case do_write_file(File, Data, [{encoding,utf8}]) of
ok -> ok;
Error -> throw(Error)
end;
do_write_ini_file(File,Data,Masters) ->
all_masters(Masters),
- safe_write_file_m(File, Data, Masters).
+ safe_write_file_m(File, Data, [{encoding,utf8}], Masters).
%%-----------------------------------------------------------------
@@ -2235,13 +2236,15 @@ do_write_ini_file(File,Data,Masters) ->
%% (as long as possible), except for 4 which is allowed to fail.
%%-----------------------------------------------------------------
safe_write_file_m(File, Data, Masters) ->
+ safe_write_file_m(File, Data, [], Masters).
+safe_write_file_m(File, Data, FileOpts, Masters) ->
Backup = File ++ ".backup",
Change = File ++ ".change",
case at_all_masters(Masters, ?MODULE, do_copy_files,
[File, [Backup]]) of
ok ->
case at_all_masters(Masters, ?MODULE, do_write_file,
- [Change, Data]) of
+ [Change, Data, FileOpts]) of
ok ->
case at_all_masters(Masters, file, rename,
[Change, File]) of
diff --git a/lib/sasl/src/release_handler_1.erl b/lib/sasl/src/release_handler_1.erl
index b37ae2f944..fa6ef77b2d 100644
--- a/lib/sasl/src/release_handler_1.erl
+++ b/lib/sasl/src/release_handler_1.erl
@@ -349,7 +349,7 @@ eval({load, {Mod, _PrePurgeMethod, PostPurgeMethod}}, EvalState) ->
{value, {_Mod, Bin, File}} = lists:keysearch(Mod, 1, Bins),
% load_binary kills all procs running old code
% if soft_purge, we know that there are no such procs now
- code:load_binary(Mod, File, Bin),
+ {module,_} = code:load_binary(Mod, File, Bin),
% Now, the prev current is old. There might be procs
% running it. Find them.
Unpurged = do_soft_purge(Mod,PostPurgeMethod,EvalState#eval_state.unpurged),
diff --git a/lib/sasl/src/sasl.app.src b/lib/sasl/src/sasl.app.src
index 8c814cfaf5..8e95197a2a 100644
--- a/lib/sasl/src/sasl.app.src
+++ b/lib/sasl/src/sasl.app.src
@@ -44,5 +44,7 @@
{applications, [kernel, stdlib]},
{env, [{sasl_error_logger, tty},
{errlog_type, all}]},
- {mod, {sasl, []}}]}.
+ {mod, {sasl, []}},
+ {runtime_dependencies, ["tools-2.6.14","stdlib-2.0","kernel-3.0",
+ "erts-6.0"]}]}.
diff --git a/lib/sasl/src/sasl.appup.src b/lib/sasl/src/sasl.appup.src
index a4a38ee40a..e789853eea 100644
--- a/lib/sasl/src/sasl.appup.src
+++ b/lib/sasl/src/sasl.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2014. 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
@@ -16,14 +16,10 @@
%%
%% %CopyrightEnd%
{"%VSN%",
- %% Up from - max two major revisions back
- [{<<"2\\.3(\\.[0-9]+)*">>,[restart_new_emulator]}, %% R16
- {<<"2\\.2(\\.[0-9]+)*">>,[restart_new_emulator]}, %% R15
- {<<"2\\.1\\.10(\\.[0-9]+)*">>,[restart_new_emulator]}, %% R14B04
- {<<"2\\.1\\.9\\.[24](\\.[0-9]+)*">>,[restart_new_emulator]}],%% R14B-R14B03
- %% Down to - max two major revisions back
- [{<<"2\\.3(\\.[0-9]+)*">>,[restart_new_emulator]}, %% R16
- {<<"2\\.2(\\.[0-9]+)*">>,[restart_new_emulator]}, %% R15
- {<<"2\\.1\\.10(\\.[0-9]+)*">>,[restart_new_emulator]}, %% R14B04
- {<<"2\\.1\\.9\\.[24](\\.[0-9]+)*">>,[restart_new_emulator]}] %% R14B-R14B03
+ %% Up from - max one major revision back
+ [{<<"2\\.4(\\.[0-9]+)*">>,[restart_new_emulator]}, %% R17
+ {<<"2\\.3(\\.[0-9]+)*">>,[restart_new_emulator]}], %% R16
+ %% Down to - max one major revision back
+ [{<<"2\\.4(\\.[0-9]+)*">>,[restart_new_emulator]}, %% R17
+ {<<"2\\.3(\\.[0-9]+)*">>,[restart_new_emulator]}] %% R16
}.
diff --git a/lib/sasl/src/sasl_report_file_h.erl b/lib/sasl/src/sasl_report_file_h.erl
index f4810d31cc..f42b4b5ff2 100644
--- a/lib/sasl/src/sasl_report_file_h.erl
+++ b/lib/sasl/src/sasl_report_file_h.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2013. 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
@@ -40,7 +40,7 @@ init({File, Type}) ->
handle_event({_Type, GL, _Msg}, State) when node(GL) /= node() ->
{ok, State};
handle_event(Event, {Fd, File, Type}) ->
- sasl_report:write_report(Fd, Type, tag_event(Event)),
+ _ = sasl_report:write_report(Fd, Type, tag_event(Event)),
{ok, {Fd, File, Type}};
handle_event(_, State) ->
{ok, State}.
@@ -53,7 +53,7 @@ handle_info(_, State) ->
handle_call(_Query, _State) -> {error, bad_query}.
terminate(_, {Fd, _File, _Type}) ->
- file:close(Fd),
+ _ = file:close(Fd),
[].
tag_event(Event) ->
diff --git a/lib/sasl/src/sasl_report_tty_h.erl b/lib/sasl/src/sasl_report_tty_h.erl
index 064f0471f2..8d63428aeb 100644
--- a/lib/sasl/src/sasl_report_tty_h.erl
+++ b/lib/sasl/src/sasl_report_tty_h.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2013. 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
@@ -35,7 +35,7 @@ init(Type) ->
handle_event({Type, GL, _Msg}, Type) when node(GL) /= node() ->
{ok, Type};
handle_event(Event, Type) ->
- sasl_report:write_report(standard_io, Type, tag_event(Event)),
+ _ = sasl_report:write_report(standard_io, Type, tag_event(Event)),
{ok, Type}.
handle_info(_, Type) -> {ok, Type}.
diff --git a/lib/sasl/src/si.erl b/lib/sasl/src/si.erl
index eeed7a9f55..e2f6d95e58 100644
--- a/lib/sasl/src/si.erl
+++ b/lib/sasl/src/si.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2013. 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
@@ -135,7 +135,7 @@ pi_impl(Opt, XPid) ->
{status_info, Pid, {module, Module}, Data} ->
si_sasl_supp:do_best_printout(Opt, Pid, Module, Data);
{error, Reason} ->
- si_sasl_supp:ppi_impl(Pid),
+ _ = si_sasl_supp:ppi_impl(Pid),
{error, {"can not get status info from process:",
XPid,
Reason}};
diff --git a/lib/sasl/src/si_sasl_supp.erl b/lib/sasl/src/si_sasl_supp.erl
index c4fc0c5f08..12b2557cd6 100644
--- a/lib/sasl/src/si_sasl_supp.erl
+++ b/lib/sasl/src/si_sasl_supp.erl
@@ -162,7 +162,7 @@ handle_call(stop, _From, State) ->
{stop, normal, stopped, State}.
terminate(_Reason, _State) ->
- close_device(get(device)),
+ _ = close_device(get(device)),
ok.
handle_cast(_Msg, State) ->
@@ -190,7 +190,7 @@ open_log_file(undefined, NewFile) ->
open_log_file(standard_io, NewFile) ->
open_log_file(NewFile);
open_log_file(OldFile, NewFile) ->
- file:close(OldFile),
+ _ = file:close(OldFile),
open_log_file(NewFile).
open_log_file(standard_io) -> standard_io;
@@ -317,7 +317,7 @@ pi_impl(Opt, XPid) ->
{status_info, Pid, {module, Module}, Data} ->
do_best_printout(Opt, Pid, Module, Data);
{error, Reason} ->
- ppi_impl(Pid),
+ _ = ppi_impl(Pid),
{error, {"can not get status info from process:",
XPid,
Reason}}
@@ -335,7 +335,7 @@ do_best_printout(Opt, Pid, Mod, Data) when is_pid(Pid) ->
case print_info(get(device), Pid, {Mod, format_status}, Opt, Data) of
ok -> ok;
{error, Reason} ->
- ppi_impl(Pid),
+ _ = ppi_impl(Pid),
{error, Reason}
end.
diff --git a/lib/sasl/src/systools_lib.erl b/lib/sasl/src/systools_lib.erl
index 6618baa2aa..0a96f2bd48 100644
--- a/lib/sasl/src/systools_lib.erl
+++ b/lib/sasl/src/systools_lib.erl
@@ -34,8 +34,10 @@
file_term2binary(FileIn, FileOut) ->
case read_term(FileIn) of
{ok, Term} ->
- file:write_file(FileOut, term_to_binary(Term)),
- ok;
+ case file:write_file(FileOut, term_to_binary(Term)) of
+ ok -> ok;
+ {error,Error} -> {error,{open,FileOut,Error}}
+ end;
Other ->
Other
end.
@@ -51,8 +53,10 @@ read_term(File) ->
case file:open(File, [read]) of
{ok, Stream} ->
Res = read_term_from_stream(Stream, File),
- file:close(Stream),
- Res;
+ case file:close(Stream) of
+ ok -> Res;
+ {error,Error} -> {error,{close,File,Error}}
+ end;
{error, Error} ->
{error, {open,File,Error}}
end.
diff --git a/lib/sasl/src/systools_make.erl b/lib/sasl/src/systools_make.erl
index bab88552f9..e5da797efb 100644
--- a/lib/sasl/src/systools_make.erl
+++ b/lib/sasl/src/systools_make.erl
@@ -406,9 +406,9 @@ check_rel(Release) ->
end.
check_rel1({release,{Name,Vsn},{erts,EVsn},Appl}) when is_list(Appl) ->
- check_name(Name),
- check_vsn(Vsn),
- check_evsn(EVsn),
+ Name = check_name(Name),
+ Vsn = check_vsn(Vsn),
+ EVsn = check_evsn(EVsn),
{{Appls,Incls},Ws} = check_appl(Appl),
{ok, {Name,Vsn,EVsn,Appls,Incls},Ws};
check_rel1(_) ->
@@ -974,7 +974,8 @@ check_xref(Appls, Path, XrefP) ->
ok;
{error, {already_started, _Pid}} ->
xref:stop(?XREF_SERVER), %% Clear out any previous data
- xref:start(?XREF_SERVER, XrefArgs)
+ {ok,_} = xref:start(?XREF_SERVER, XrefArgs),
+ ok
end,
{ok, _} = xref:set_default(?XREF_SERVER, verbose, false),
LibPath = case Path == code:get_path() of
@@ -1146,14 +1147,17 @@ generate_script(Output, Release, Appls, Flags) ->
{ok, Fd} ->
io:format(Fd, "%% script generated at ~w ~w\n~p.\n",
[date(), time(), Script]),
- file:close(Fd),
-
- BootFile = Output ++ ".boot",
- case file:write_file(BootFile, term_to_binary(Script)) of
+ case file:close(Fd) of
ok ->
- ok;
+ BootFile = Output ++ ".boot",
+ case file:write_file(BootFile, term_to_binary(Script)) of
+ ok ->
+ ok;
+ {error, Reason} ->
+ {error, ?MODULE, {open,BootFile,Reason}}
+ end;
{error, Reason} ->
- {error, ?MODULE, {open,BootFile,Reason}}
+ {error, ?MODULE, {close,ScriptFile,Reason}}
end;
{error, Reason} ->
{error, ?MODULE, {open,ScriptFile,Reason}}
@@ -1532,14 +1536,16 @@ mk_tar(RelName, Release, Appls, Flags, Path1) ->
Tar = open_main_tar(TarName),
case catch mk_tar(Tar, RelName, Release, Appls, Flags, Path1) of
{error,Error} ->
- del_tar(Tar, TarName),
+ _ = del_tar(Tar, TarName),
{error,?MODULE,Error};
{'EXIT',Reason} ->
- del_tar(Tar, TarName),
+ _ = del_tar(Tar, TarName),
{error,?MODULE,Reason};
_ ->
- close_tar(Tar),
- ok
+ case erl_tar:close(Tar) of
+ ok -> ok;
+ {error,Reason} -> {error,?MODULE,{close,TarName,Reason}}
+ end
end.
open_main_tar(TarName) ->
@@ -1594,14 +1600,13 @@ add_variable_tar({Variable,P}, Appls, Tar, Flags) ->
case catch add_applications(Appls, VarTar, [{Variable,P}],
Flags, Variable) of
ok when Flag == include ->
- close_tar(VarTar),
+ close_tar(VarTar,TarName),
add_to_tar(Tar, TarName, TarName),
del_file(TarName);
ok when Flag == ownfile ->
- close_tar(VarTar),
- ok;
+ close_tar(VarTar,TarName);
Error ->
- del_tar(VarTar, TarName),
+ _ = del_tar(VarTar, TarName),
throw(Error)
end
end.
@@ -1859,12 +1864,15 @@ open_tar(TarName) ->
throw({error,{tar_error, {open, TarName, Error}}})
end.
-close_tar(Tar) ->
- erl_tar:close(Tar).
+close_tar(Tar,File) ->
+ case erl_tar:close(Tar) of
+ ok -> ok;
+ {error,Reason} -> throw({error,{close,File,Reason}})
+ end.
del_tar(Tar, TarName) ->
- close_tar(Tar),
- del_file(TarName).
+ _ = erl_tar:close(Tar),
+ file:delete(TarName).
add_to_tar(Tar, FromFile, ToFile) ->
case erl_tar:add(Tar, FromFile, ToFile, [compressed, dereference]) of
@@ -1919,13 +1927,20 @@ read_file(File, Path) ->
Other ->
Other
end,
- file:close(Stream),
- Return;
+ case file:close(Stream) of
+ ok -> Return;
+ {error, Error} -> {error, {close,File,Error}}
+ end;
_Other ->
{error, {not_found, File}}
end.
-del_file(File) -> file:delete(File).
+del_file(File) ->
+ case file:delete(File) of
+ ok -> ok;
+ {error, Error} ->
+ throw({error, {delete, File, Error}})
+ end.
dirp(Dir) ->
case file:read_file_info(Dir) of
@@ -2218,7 +2233,7 @@ format_error({undefined_applications,Apps}) ->
io_lib:format("Undefined applications: ~p~n",[Apps]);
format_error({duplicate_modules,Dups}) ->
io_lib:format("Duplicated modules: ~n~ts",
- [map(fun({{Mod,_,App1,_,_},{Mod,_,App2,_,_}}) ->
+ [map(fun({{Mod,App1,_},{Mod,App2,_}}) ->
io_lib:format("\t~w specified in ~w and ~w~n",
[Mod,App1,App2])
end, Dups)]);
@@ -2244,6 +2259,12 @@ format_error({read,File}) ->
format_error({open,File,Error}) ->
io_lib:format("Cannot open ~p - ~ts~n",
[File,file:format_error(Error)]);
+format_error({close,File,Error}) ->
+ io_lib:format("Cannot close ~p - ~ts~n",
+ [File,file:format_error(Error)]);
+format_error({delete,File,Error}) ->
+ io_lib:format("Cannot delete ~p - ~ts~n",
+ [File,file:format_error(Error)]);
format_error({tar_error,What}) ->
form_tar_err(What);
format_error(ListOfErrors) when is_list(ListOfErrors) ->
diff --git a/lib/sasl/src/systools_rc.erl b/lib/sasl/src/systools_rc.erl
index 54c327410d..76f753c3d0 100644
--- a/lib/sasl/src/systools_rc.erl
+++ b/lib/sasl/src/systools_rc.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2014. 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
@@ -365,14 +365,22 @@ translate_application_instrs(Script, Appls, PreAppls) ->
case lists:keysearch(Appl, #application.name, Appls) of
{value, PostApplication} ->
PostMods = PostApplication#application.modules,
+ Type = PostApplication#application.type,
+ Apply =
+ case Type of
+ none -> [];
+ load -> [{apply, {application, load,
+ [Appl]}}];
+ _ -> [{apply, {application, start,
+ [Appl, Type]}}]
+ end,
[{apply, {application, stop, [Appl]}}] ++
[{remove, {M, brutal_purge, brutal_purge}}
|| M <- PreMods] ++
[{purge, PreMods}] ++
[{add_module, M, []} || M <- PostMods] ++
- [{apply, {application, start,
- [Appl, permanent]}}];
+ Apply;
false ->
throw({error, {no_such_application, Appl}})
end;
diff --git a/lib/sasl/src/systools_relup.erl b/lib/sasl/src/systools_relup.erl
index 716dc2b5ff..b3494542e5 100644
--- a/lib/sasl/src/systools_relup.erl
+++ b/lib/sasl/src/systools_relup.erl
@@ -523,7 +523,7 @@ to_list(X) when is_atom(X) -> atom_to_list(X);
to_list(X) when is_list(X) -> X.
-%% write_relup_file(Relup, Opts) -> {ok. Relup}
+%% write_relup_file(Relup, Opts) -> ok
%%
%% Writes a relup file.
%%
@@ -545,12 +545,17 @@ write_relup_file(Relup, Opts) ->
case file:open(Filename, [write]) of
{ok, Fd} ->
io:format(Fd, "~p.~n", [Relup]),
- file:close(Fd);
+ case file:close(Fd) of
+ ok -> ok;
+ {error,Reason} ->
+ throw({error, ?MODULE,
+ {file_problem, {"relup", {close,Reason}}}})
+ end;
{error, Reason} ->
- throw({error, ?MODULE, {file_problem, {"relup", Reason}}})
+ throw({error, ?MODULE,
+ {file_problem, {"relup", {open, Reason}}}})
end
- end,
- {ok, Relup}.
+ end.
add_code_path(Opts) ->
case get_opt(path, Opts) of
@@ -597,8 +602,6 @@ print_error({error, Mod, Error}) ->
print_error(Other) ->
io:format("Error: ~p~n", [Other]).
-format_error({file_problem, {"relup", _Posix}}) ->
- io_lib:format("Could not open file relup~n", []);
format_error({file_problem, {File, What}}) ->
io_lib:format("Could not ~w file ~ts~n", [get_reason(What), File]);
format_error({no_relup, File, App, Vsn}) ->
@@ -642,12 +645,14 @@ format_warning(Prefix, What) ->
get_reason({error, {open, _, _}}) -> open;
get_reason({error, {read, _, _}}) -> read;
get_reason({error, {parse, _, _}}) -> parse;
+get_reason({error, {close, _, _}}) -> close;
get_reason({error, {open, _}}) -> open;
get_reason({error, {read, _}}) -> read;
get_reason({error, {parse, _}}) -> parse;
get_reason({open, _}) -> open;
get_reason({read, _}) -> read;
get_reason({parse, _}) -> parse;
+get_reason({close, _}) -> close;
get_reason(open) -> open;
get_reason(read) -> read;
get_reason(parse) -> parse.