summaryrefslogtreecommitdiff
path: root/lib/stdlib/src/beam_lib.erl
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@dashbit.co>2020-08-09 09:33:08 +0200
committerJosé Valim <jose.valim@dashbit.co>2020-10-14 20:29:37 +0200
commite95f648dd49d8699225ba46cea81ab6b831525bc (patch)
tree2628397887cae86d87c8607ae984fd2b85a4b8d3 /lib/stdlib/src/beam_lib.erl
parent3bb99d3b61bbb9d63a8b5d98919494e5c2f89b4b (diff)
downloaderlang-e95f648dd49d8699225ba46cea81ab6b831525bc.tar.gz
Remove private ram_file:compress in favor of zlib:gzip
Diffstat (limited to 'lib/stdlib/src/beam_lib.erl')
-rw-r--r--lib/stdlib/src/beam_lib.erl34
1 files changed, 17 insertions, 17 deletions
diff --git a/lib/stdlib/src/beam_lib.erl b/lib/stdlib/src/beam_lib.erl
index 0a6dc74bd0..5632da803d 100644
--- a/lib/stdlib/src/beam_lib.erl
+++ b/lib/stdlib/src/beam_lib.erl
@@ -856,10 +856,8 @@ extract_atom(<<Len, B/binary>>, Encoding) ->
bin :: binary(),
source :: binary() | string()}).
-open_file(<<"FOR1",_/binary>>=Binary) ->
- #bb{bin = Binary, source = Binary};
open_file(Binary0) when is_binary(Binary0) ->
- Binary = uncompress(Binary0),
+ Binary = maybe_uncompress(Binary0),
#bb{bin = Binary, source = Binary};
open_file(FileName) ->
case file:open(FileName, [read, raw, binary]) of
@@ -875,7 +873,7 @@ read_all(Fd, FileName, Bins) ->
read_all(Fd, FileName, [Bin | Bins]);
eof ->
ok = file:close(Fd),
- #bb{bin = uncompress(reverse(Bins)), source = FileName};
+ #bb{bin = maybe_uncompress(reverse(Bins)), source = FileName};
Error ->
ok = file:close(Fd),
file_error(FileName, Error)
@@ -905,20 +903,22 @@ beam_filename(Bin) when is_binary(Bin) ->
beam_filename(File) ->
filename:rootname(File, ".beam") ++ ".beam".
+%% Do not attempt to uncompress if we have the proper .beam format.
+%% This clause matches binaries given as input.
+maybe_uncompress(<<"FOR1",_/binary>>=Binary) ->
+ Binary;
+%% This clause matches the iolist read from files.
+maybe_uncompress([<<"FOR1",_/binary>>|_]=IOData) ->
+ iolist_to_binary(IOData);
+maybe_uncompress(IOData) ->
+ try
+ zlib:gunzip(IOData)
+ catch
+ _:_ -> iolist_to_binary(IOData)
+ end.
-uncompress(Binary0) ->
- {ok, Fd} = ram_file:open(Binary0, [write, binary]),
- {ok, _} = ram_file:uncompress(Fd),
- {ok, Binary} = ram_file:get_file(Fd),
- ok = ram_file:close(Fd),
- Binary.
-
-compress(Binary0) ->
- {ok, Fd} = ram_file:open(Binary0, [write, binary]),
- {ok, _} = ram_file:compress(Fd),
- {ok, Binary} = ram_file:get_file(Fd),
- ok = ram_file:close(Fd),
- Binary.
+compress(IOData) ->
+ zlib:gzip(IOData).
%% -> ok | throw(Error)
assert_directory(FileName) ->