diff options
author | José Valim <jose.valim@dashbit.co> | 2020-08-09 09:33:08 +0200 |
---|---|---|
committer | José Valim <jose.valim@dashbit.co> | 2020-10-14 20:29:37 +0200 |
commit | e95f648dd49d8699225ba46cea81ab6b831525bc (patch) | |
tree | 2628397887cae86d87c8607ae984fd2b85a4b8d3 /lib/stdlib/src/beam_lib.erl | |
parent | 3bb99d3b61bbb9d63a8b5d98919494e5c2f89b4b (diff) | |
download | erlang-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.erl | 34 |
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) -> |