From b2c4dbaf7a3f9da9e4236fc46cf72b0ef4ee300d Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Mon, 24 Sep 2007 16:13:58 +0100 Subject: Version 0.3.2.8. Added support for init files. --- virt-top/virt_top_utils.ml | 74 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 virt-top/virt_top_utils.ml (limited to 'virt-top/virt_top_utils.ml') diff --git a/virt-top/virt_top_utils.ml b/virt-top/virt_top_utils.ml new file mode 100644 index 0000000..3a0c4ba --- /dev/null +++ b/virt-top/virt_top_utils.ml @@ -0,0 +1,74 @@ +(* 'top'-like tool for libvirt domains. + * $Id: virt_top.ml,v 1.5 2007/08/30 13:52:40 rjones Exp $ + *) + +let (//) = Filename.concat + +(* Input a whole file as a list of lines. *) +let input_all_lines chan = + let lines = ref [] in + (try + while true; do + lines := input_line chan :: !lines + done + with + End_of_file -> ()); + List.rev !lines + +(* Trim whitespace from the beginning and end of strings. *) +let isspace c = + c = ' ' + (* || c = '\f' *) || c = '\n' || c = '\r' || c = '\t' (* || c = '\v' *) + +let triml ?(test = isspace) str = + let i = ref 0 in + let n = ref (String.length str) in + while !n > 0 && test str.[!i]; do + decr n; + incr i + done; + if !i = 0 then str + else String.sub str !i !n + +let trimr ?(test = isspace) str = + let n = ref (String.length str) in + while !n > 0 && test str.[!n-1]; do + decr n + done; + if !n = String.length str then str + else String.sub str 0 !n + +let trim ?(test = isspace) str = + trimr (triml str) + +(* Read a configuration file as a list of (key, value) pairs. + * If the config file is missing this returns an empty list. + *) +let blanks_and_comments = Str.regexp "^[ \t]*\\(#.*\\)?$" + +let read_config_file filename = + let lines = + try + let chan = open_in filename in + let lines = input_all_lines chan in + close_in chan; + lines + with + Sys_error _ -> [] in (* Ignore errors opening file. *) + + (* Line numbers. *) + let lines = + let i = ref 0 in List.map (fun line -> (incr i; !i), line) lines in + + (* Remove blank lines and comment lines. *) + let lines = + List.filter + (fun (lineno, line) -> + not (Str.string_match blanks_and_comments line 0)) lines in + + (* Convert to key, value pairs. *) + List.map ( + fun (lineno, line) -> + let key, value = ExtString.String.split line " " in + lineno, trim key, trim value + ) lines -- cgit