aboutsummaryrefslogtreecommitdiffstats
path: root/lib/sasl/src/misc_supp.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sasl/src/misc_supp.erl')
-rw-r--r--lib/sasl/src/misc_supp.erl106
1 files changed, 106 insertions, 0 deletions
diff --git a/lib/sasl/src/misc_supp.erl b/lib/sasl/src/misc_supp.erl
new file mode 100644
index 0000000000..8948fdb797
--- /dev/null
+++ b/lib/sasl/src/misc_supp.erl
@@ -0,0 +1,106 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(misc_supp).
+
+%%%---------------------------------------------------------------------
+%%% Description:
+%%% This module contains MISCellaneous routines for the SUPPort tools.
+%%% 1) The function format_pdict/3 is called by every process that
+%%% wants to format its process dictionary.
+%%% 2) Very generic functions such as, multi_map, is_string...
+%%%
+%%% This module is a part of the BOS. (format_pdict is called from
+%%% init, memsup, disksup, overload (but not the fileserver since it
+%%% formats its pdict its own way).)
+%%%---------------------------------------------------------------------
+
+-export([format_pdict/3, format_tuples/2, assq/2, passq/2, is_string/1,
+ multi_map/2]).
+
+%%-----------------------------------------------------------------
+%% Uses format_tuples to format the data in process dictionary.
+%% This function is called from format_status_info by several modules
+%% that want to format its process dictionary.
+%% Args: Exclude is: list of atoms to exclude
+%%-----------------------------------------------------------------
+format_pdict(normal, _PDict, _Exclude) ->
+ [];
+format_pdict(all, PDict, Exclude) ->
+ case format_tuples(PDict, ['$sys_dict$' | Exclude]) of
+ [] -> [];
+ Data -> [{newline, 1} | Data]
+ end.
+
+
+%%-----------------------------------------------------------------
+%% Format all Key value tuples except for the Keys in the
+%% Exclude list.
+%%-----------------------------------------------------------------
+format_tuples(KeyValues, Exclude) ->
+ case format_tuples(KeyValues, Exclude, []) of
+ [] -> [];
+ Data -> [{data, Data}]
+ end.
+format_tuples([], _Exclude, Res) -> Res;
+format_tuples([{Key, Value} | T], Exclude, Res) ->
+ case lists:member(Key, Exclude) of
+ true ->
+ format_tuples(T, Exclude, Res);
+ false ->
+ format_tuples(T, Exclude, [{Key, Value} | Res])
+ end.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% "Very" generic misc stuff:
+%%--------------------------------------------------
+
+assq(Key, List) ->
+ case lists:keysearch(Key, 1, List) of
+ {value, {Key, Val}} -> {value, Val};
+ _ -> false
+ end.
+
+%% Primitive assq. Use to get items from a process dictionary list.
+passq(Key, List) ->
+ case lists:keysearch(Key, 1, List) of
+ {value, {Key, Val}} -> Val;
+ _ -> undefined
+ end.
+
+%% This one doesn't treat [] as a string (as io_lib:char_list)
+is_string([]) -> false;
+is_string(X) -> is_string_2(X).
+
+is_string_2([]) -> true;
+is_string_2([H|T]) when is_integer(H), H >= $ , H =< 255 ->
+ is_string_2(T);
+is_string_2(_) -> false.
+
+%%-----------------------------------------------------------------
+%% Pre: ListOfLists is a list of N lists, each of length M.
+%% Func is a function of arity N.
+%% Returns: A list of length M where element Y is the result of
+%% applying Func on [Elem(Y, List1), ..., Elem(Y, ListN)].
+%%-----------------------------------------------------------------
+multi_map(_Func, [[] | _ListOfLists]) -> [];
+multi_map(Func, ListOfLists) ->
+ [apply(Func, lists:map(fun(List) -> hd(List) end, ListOfLists)) |
+ multi_map(Func,
+ lists:map(fun(List) -> tl(List) end, ListOfLists))].