aboutsummaryrefslogtreecommitdiffstats
path: root/lib/dialyzer
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dialyzer')
-rw-r--r--lib/dialyzer/test/small_SUITE_data/src/file_open_encoding.erl26
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/dialyzer/test/small_SUITE_data/src/file_open_encoding.erl b/lib/dialyzer/test/small_SUITE_data/src/file_open_encoding.erl
new file mode 100644
index 0000000000..4f1268eba8
--- /dev/null
+++ b/lib/dialyzer/test/small_SUITE_data/src/file_open_encoding.erl
@@ -0,0 +1,26 @@
+%%-----------------------------------------------------------------------
+%% Program that gave erroneous warnings due to missing information about
+%% the {encoding, latin1 | unicode | utf8 | ...} option of file:open/3.
+%%-----------------------------------------------------------------------
+-module(file_open_encoding).
+
+-export([parse/1]).
+
+-type proplist() :: [{atom(), any()}].
+
+-spec parse(string()) -> proplist().
+parse(FileName) ->
+ {ok, IoDevice} = file:open(FileName, [read, binary, {encoding, utf8}]),
+ do_parse(IoDevice, []).
+
+do_parse(IoDevice, ResultSoFar) ->
+ case io:get_line(IoDevice, "") of
+ eof ->
+ file:close(IoDevice),
+ ResultSoFar;
+ <<"--"/utf8, _Comment/binary>> ->
+ do_parse(IoDevice, ResultSoFar);
+ Line ->
+ [Key, Value] = binary:split(Line, [<<": ">>, <<"\n">>], [global, trim]),
+ do_parse(IoDevice, [{binary_to_atom(Key, utf8), Value} | ResultSoFar])
+ end.