Skip to content

Commit 5f51cba

Browse files
committed
Fix snmp:config() when run from Elixir
A device read in Elixir returns a binary, not a char list (as in Erlang). Quoting Jose Valim: "Any device may return a binary on read, therefore, all Erlang/Elixir code needs to be aware of this possibility and handle it accordingly." See: elixir-lang/elixir#14757 How to reproduce the bug: ``` ~ % iex Erlang/OTP 28 [erts-16.0.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit:ns] Interactive Elixir (1.18.4) - press Ctrl+C to exit (type h() ENTER for help) iex(1)> :snmp.config() Simple SNMP configuration tool (version 5.19) ------------------------------------------------ Note: Non-trivial configurations still has to be done manually. IP addresses may be entered as dront.ericsson.se (UNIX only) or 123.12.13.23 ------------------------------------------------ y {:error, {:function_clause, [ {:lists, :delete, [10, "y\n"], [file: ~c"lists.erl", line: 725]}, {:snmp_config, :ask, 3, [file: ~c"snmp_config.erl", line: 1683]}, {:snmp_config, :snmp_agent2, 0, [file: ~c"snmp_config.erl", line: 173]}, {:snmp_config, :config_agent, 0, [file: ~c"snmp_config.erl", line: 159]}, {:snmp_config, :config2, 0, [file: ~c"snmp_config.erl", line: 130]}, {:snmp_config, :config, 0, [file: ~c"snmp_config.erl", line: 117]}, {:elixir, :eval_external_handler, 3, [file: ~c"src/elixir.erl", line: 386]}, {:erl_eval, :do_apply, 7, [file: ~c"erl_eval.erl", line: 924]} ]}} ```
1 parent 8ddda09 commit 5f51cba

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

lib/snmp/src/misc/snmp_config.erl

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1678,7 +1678,7 @@ print_q(Q, Default) when is_list(Default) ->
16781678
%% Defval = string() | mandatory
16791679
ask(Q, Default, Verify) when is_list(Q) andalso is_function(Verify) ->
16801680
print_q(Q, Default),
1681-
PrelAnsw = io:get_line(''),
1681+
PrelAnsw = conv_bin_to_list(io:get_line('')),
16821682
Answer =
16831683
case remove_newline(PrelAnsw) of
16841684
"" when Default =/= mandatory -> Default;
@@ -1741,7 +1741,12 @@ guess_engine_name() ->
17411741
% {_,_} -> "user_id"
17421742
% end.
17431743

1744-
1744+
% This is neccessary as in Elixir io:get_line returns a binary
1745+
conv_bin_to_list(Bin) when is_binary(Bin) ->
1746+
binary:bin_to_list(Bin);
1747+
conv_bin_to_list(Str) ->
1748+
Str.
1749+
17451750
remove_newline(Str) ->
17461751
lists:delete($\n, Str).
17471752

0 commit comments

Comments
 (0)