aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Bolinder <[email protected]>2018-01-12 16:43:55 +0100
committerHans Bolinder <[email protected]>2018-01-15 08:37:17 +0100
commitff65e1164cc16739c51c456b4e350e966cc2b1ef (patch)
treef23fc8962f6705a4a951923a52aebe167b0eff5e
parent8fbbc9713e86b51295835f4b5065769c4ca407ef (diff)
downloadotp-ff65e1164cc16739c51c456b4e350e966cc2b1ef.tar.gz
otp-ff65e1164cc16739c51c456b4e350e966cc2b1ef.tar.bz2
otp-ff65e1164cc16739c51c456b4e350e966cc2b1ef.zip
stdlib: Handle Unicode when formatting stacktraces
See also ERL-553 and ERL-544 (commit c3ddb0f).
-rw-r--r--erts/emulator/test/code_SUITE.erl9
-rw-r--r--lib/stdlib/src/lib.erl6
2 files changed, 10 insertions, 5 deletions
diff --git a/erts/emulator/test/code_SUITE.erl b/erts/emulator/test/code_SUITE.erl
index fcef070f08..661a2ee6c9 100644
--- a/erts/emulator/test/code_SUITE.erl
+++ b/erts/emulator/test/code_SUITE.erl
@@ -951,9 +951,14 @@ erl_544(Config) when is_list(Config) ->
receive Go -> ok end,
Res2 = process_info(Tester, current_stacktrace),
io:format("~p~n", [Res2]),
- {current_stacktrace,
- [{Mod, wait, 2, Info2}|_]} = Res2,
+ {current_stacktrace, Stack} = Res2,
+ [{Mod, wait, 2, Info2}|_] = Stack,
File = proplists:get_value(file, Info2),
+ StackFun = fun(_, _, _) -> false end,
+ FormatFun = fun (Term, _) -> io_lib:format("~tp", [Term]) end,
+ Formated =
+ lib:format_stacktrace(1, Stack, StackFun, FormatFun),
+ true = is_list(Formated),
ok
after
ok = file:set_cwd(CWD)
diff --git a/lib/stdlib/src/lib.erl b/lib/stdlib/src/lib.erl
index c6eb0d7915..be11e86100 100644
--- a/lib/stdlib/src/lib.erl
+++ b/lib/stdlib/src/lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2017. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2018. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -551,7 +551,7 @@ format_stacktrace1(S0, Stack0, PF, SF, Enc) ->
format_stacktrace2(S, Stack, 1, PF, Enc).
format_stacktrace2(S, [{M,F,A,L}|Fs], N, PF, Enc) when is_integer(A) ->
- [io_lib:fwrite(<<"~s~s ~ts ~s">>,
+ [io_lib:fwrite(<<"~s~s ~ts ~ts">>,
[sep(N, S), origin(N, M, F, A),
mfa_to_string(M, F, A, Enc),
location(L)])
@@ -573,7 +573,7 @@ location(L) ->
Line = proplists:get_value(line, L),
if
File =/= undefined, Line =/= undefined ->
- io_lib:format("(~s, line ~w)", [File, Line]);
+ io_lib:format("(~ts, line ~w)", [File, Line]);
true ->
""
end.