diff options
author | Björn Gustavsson <[email protected]> | 2015-10-22 13:15:25 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2015-10-22 14:07:04 +0200 |
commit | 32ba359b05658960b86f7587b61b46d1fb2021be (patch) | |
tree | eb89f4b73ee601d0f71774823e2b8c84f9eebfe6 | |
parent | a76cc1d337c0bf44ecefebeccac2d08e496ba7e8 (diff) | |
download | otp-32ba359b05658960b86f7587b61b46d1fb2021be.tar.gz otp-32ba359b05658960b86f7587b61b46d1fb2021be.tar.bz2 otp-32ba359b05658960b86f7587b61b46d1fb2021be.zip |
beam_lib: Document all_chunks/1 and build_module/1
beam_lib:all_chunks/1 and beam_lib:build_module/1 can be useful
for special-purpose stripping, for example to remove the "Line"
chunk.
-rw-r--r-- | lib/stdlib/doc/src/beam_lib.xml | 14 | ||||
-rw-r--r-- | lib/stdlib/src/beam_lib.erl | 17 |
2 files changed, 25 insertions, 6 deletions
diff --git a/lib/stdlib/doc/src/beam_lib.xml b/lib/stdlib/doc/src/beam_lib.xml index c556180b8b..faf668735e 100644 --- a/lib/stdlib/doc/src/beam_lib.xml +++ b/lib/stdlib/doc/src/beam_lib.xml @@ -224,6 +224,13 @@ <funcs> <func> + <name name="all_chunks" arity="1"/> + <fsummary>Read all chunks from a BEAM file or binary</fsummary> + <desc> + <p>Reads chunk data for all chunks.</p> + </desc> + </func> + <func> <name name="chunks" arity="2"/> <fsummary>Read selected chunks from a BEAM file or binary</fsummary> <desc> @@ -251,6 +258,13 @@ </desc> </func> <func> + <name name="build_module" arity="1"/> + <fsummary>Creates a BEAM module from a list of chunks</fsummary> + <desc> + <p>Builds a BEAM module (as a binary) from a list of chunks.</p> + </desc> + </func> + <func> <name name="version" arity="1"/> <fsummary>Read the BEAM file's module version</fsummary> <desc> diff --git a/lib/stdlib/src/beam_lib.erl b/lib/stdlib/src/beam_lib.erl index b93ce97cd3..cbbab088f4 100644 --- a/lib/stdlib/src/beam_lib.erl +++ b/lib/stdlib/src/beam_lib.erl @@ -308,6 +308,17 @@ make_crypto_key(des3_cbc=Type, String) -> <<K3:8/binary,IVec:8/binary>> = erlang:md5([First|reverse(String)]), {Type,[K1,K2,K3],IVec,8}. +-spec build_module(Chunks) -> {'ok', Binary} when + Chunks :: [{chunkid(), dataB()}], + Binary :: binary(). + +build_module(Chunks0) -> + Chunks = list_to_binary(build_chunks(Chunks0)), + Size = byte_size(Chunks), + 0 = Size rem 4, % Assertion: correct padding? + {ok, <<"FOR1", (Size+4):32, "BEAM", Chunks/binary>>}. + + %% %% Local functions %% @@ -419,12 +430,6 @@ strip_file(File) -> end end. -build_module(Chunks0) -> - Chunks = list_to_binary(build_chunks(Chunks0)), - Size = byte_size(Chunks), - 0 = Size rem 4, % Assertion: correct padding? - {ok, <<"FOR1", (Size+4):32, "BEAM", Chunks/binary>>}. - build_chunks([{Id, Data} | Chunks]) -> BId = list_to_binary(Id), Size = byte_size(Data), |