From 6b7cc6c9edbb262c46e0789115cd54ca95890f47 Mon Sep 17 00:00:00 2001 From: Mikael Pettersson Date: Mon, 7 Aug 2023 17:49:08 +0200 Subject: [PATCH] ar: move --print-armap support code to archive library --- erlang/apps/ar/src/ar.erl | 25 +------------------------ erlang/apps/lib/src/archive.erl | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/erlang/apps/ar/src/ar.erl b/erlang/apps/ar/src/ar.erl index 9de358e..b943323 100644 --- a/erlang/apps/ar/src/ar.erl +++ b/erlang/apps/ar/src/ar.erl @@ -439,7 +439,7 @@ ar_print_armap(ArchiveFile) -> case archive:read(ArchiveFile) of {ok, {FP, Archive}} -> try - ar_print_armap_1(Archive) + archive:print_armap(Archive) after pdp10_stdio:fclose(FP) end; @@ -447,29 +447,6 @@ ar_print_armap(ArchiveFile) -> escript_runtime:fatal("failed to read ~s: ~p\n", [ArchiveFile, Reason]) end. -ar_print_armap_1(Archive) -> - #archive{symtab = SymTab, members = Members} = Archive, - case SymTab of - false -> - io:format(standard_io, "No archive index\n", []); - _ -> - io:format(standard_io, "Archive index:\n", []), - OffsetToNameMap = - maps:from_list( - lists:map( - fun(#member{location = Offset, arhdr = #arhdr{ar_name = Name}}) -> - {Offset, Name} - end, Members)), - lists:foreach( - fun({Symbol, Offset}) -> - ar_print_armap(Symbol, Offset, OffsetToNameMap) - end, SymTab) - end. - -ar_print_armap(Symbol, Offset, OffsetToNameMap) -> - Name = maps:get(Offset, OffsetToNameMap, ""), - io:format(standard_io, "~s in ~s at ~p\n", [Symbol, Name, Offset]). - %% labelled archives =========================================================== %% %% - members are ordered as stored in the archive diff --git a/erlang/apps/lib/src/archive.erl b/erlang/apps/lib/src/archive.erl index 015bb86..8cf4f61 100644 --- a/erlang/apps/lib/src/archive.erl +++ b/erlang/apps/lib/src/archive.erl @@ -22,6 +22,7 @@ -export([ iocpy/4 , new/0 + , print_armap/1 , read/1 , write/4 ]). @@ -38,6 +39,32 @@ new() -> {ok, Archive} = make_archive(_SymTab = [], _Members = []), Archive. +%% print the symbol table ====================================================== + +-spec print_armap(#archive{}) -> ok. +print_armap(Archive) -> + #archive{symtab = SymTab, members = Members} = Archive, + case SymTab of + false -> + io:format(standard_io, "No archive index\n", []); + _ -> + io:format(standard_io, "Archive index:\n", []), + OffsetToNameMap = + maps:from_list( + lists:map( + fun(#member{location = Offset, arhdr = #arhdr{ar_name = Name}}) -> + {Offset, Name} + end, Members)), + lists:foreach( + fun({Symbol, Offset}) -> + print_armap(Symbol, Offset, OffsetToNameMap) + end, SymTab) + end. + +print_armap(Symbol, Offset, OffsetToNameMap) -> + Name = maps:get(Offset, OffsetToNameMap, ""), + io:format(standard_io, "~s in ~s at ~p\n", [Symbol, Name, Offset]). + %% archive output ============================================================== -spec write(boolean(), string(), file() | false, #archive{}) -> ok | {error, any()}.