~ubuntu-branches/debian/squeeze/erlang/squeeze

« back to all changes in this revision

Viewing changes to lib/observer/src/crashdump_translate.erl

  • Committer: Bazaar Package Importer
  • Author(s): Erlang Packagers, Sergei Golovan
  • Date: 2006-12-03 17:07:44 UTC
  • mfrom: (2.1.11 feisty)
  • Revision ID: james.westby@ubuntu.com-20061203170744-rghjwupacqlzs6kv
Tags: 1:11.b.2-4
[ Sergei Golovan ]
Fixed erlang-base and erlang-base-hipe prerm scripts.

Show diffs side-by-side

added added

removed removed

Lines of Context:
31
31
-define(chunk_size,1000). % number of bytes read from crashdump at a time
32
32
-define(max_line_size,500). % max number of bytes (i.e. characters) the
33
33
                            % line/1 function can return
 
34
-define(backwards_chunk_size,10000). % number of bytes read from crashdump 
 
35
                                     % at a time when reading atoms
34
36
 
35
37
%%%-----------------------------------------------------------------
36
38
%%% Translate an old dump to a newer format
112
114
        "Atoms\n" ->
113
115
            drop_line(Read), % divider
114
116
            write(Write,"=atoms\n"),
115
 
            {_,{Atoms,N}} = read_to_empty_line_reverse(Read),
116
 
            write(Write,[Atoms,"=num_atoms:",integer_to_list(N),"\n"]),
 
117
            translate_atoms(Read,Write),
 
118
%           {_,{Atoms,N}} = read_to_empty_line_reverse(Read),
 
119
%           write(Write,[Atoms,"=num_atoms:",integer_to_list(N),"\n"]),
117
120
            translate(Read,Write);
118
121
        "Memory allocation information\n" -> 
119
122
            write(Write,"=old_instr_data\n"),
902
905
            translate_fun(Read,Write)
903
906
    end.
904
907
 
 
908
 
 
909
translate_atoms(Read,Write) ->
 
910
    StartPos = get_pos(Read),
 
911
    jump_to_empty_line_or_eof(Read),
 
912
    EndPos = get_pos(Read),
 
913
    set_pos(Read,EndPos-2),
 
914
    translate_atoms(Read,Write,StartPos,1),
 
915
    set_pos(Read,EndPos).
 
916
 
 
917
translate_atoms(Read,Write,StartPos,N) ->
 
918
    {Atom,Pos} = read_line_backwards(Read,[]),
 
919
    write(Write,[Atom,"\n"]),
 
920
    if Pos<StartPos -> 
 
921
            write(Write,["=num_atoms:",integer_to_list(N),"\n"]);
 
922
       true -> 
 
923
            translate_atoms(Read,Write,StartPos,N+1)
 
924
    end.
 
925
 
 
926
get_pos(Fd) ->
 
927
    {ok,Pos0} = file:position(Fd,cur),
 
928
    case get(chunk) of
 
929
        undefined ->
 
930
            Pos0;
 
931
        Bin ->
 
932
            Pos0 - size(Bin)
 
933
    end.
 
934
 
 
935
set_pos(Fd,Pos) ->
 
936
    erase(chunk),
 
937
    file:position(Fd,Pos).
 
938
 
 
939
jump_to_empty_line_or_eof(Fd) ->    
 
940
    case line(Fd) of
 
941
        "\n" ->
 
942
            ok;
 
943
        {eof,_PartOfLine} ->
 
944
            ok;
 
945
        _Line ->
 
946
            jump_to_empty_line_or_eof(Fd)
 
947
    end.
 
948
 
 
949
read_line_backwards(Fd,Line) ->
 
950
    {CurPos,Str} = get_backwards_chunk(Fd),
 
951
    read_line_backwards(Fd,CurPos,Str,Line).
 
952
 
 
953
read_line_backwards(_Fd,Pos,[$\n|Str],Line) ->
 
954
    put(chunk,Str),
 
955
    put(pos,Pos-1),
 
956
    {Line,Pos-1};
 
957
read_line_backwards(Fd,Pos,[$\r|Str],Line) ->
 
958
    read_line_backwards(Fd,Pos-1,Str,Line);
 
959
read_line_backwards(Fd,Pos,[Char|Str],Line) ->
 
960
    read_line_backwards(Fd,Pos-1,Str,[Char|Line]);
 
961
read_line_backwards(Fd,_Pos,[],Line) ->
 
962
    read_line_backwards(Fd,Line).
 
963
    
 
964
 
 
965
get_backwards_chunk(Fd) ->
 
966
    case erase(chunk) of
 
967
        undefined ->
 
968
            erase(pos),
 
969
            {ok,Pos} = file:position(Fd,cur),
 
970
            file:position(Fd,{cur,-?backwards_chunk_size}),
 
971
            {ok,Bin} =     file:read(Fd,?backwards_chunk_size),
 
972
            file:position(Fd,{cur,-?backwards_chunk_size}),
 
973
            {Pos,lists:reverse(binary_to_list(Bin))};
 
974
        Str ->
 
975
            {erase(pos),Str}
 
976
    end.
 
977
    
 
978
 
 
979
 
905
980
%%%-----------------------------------------------------------------
906
981
%%% Common library
907
982