summaryrefslogtreecommitdiffstats
path: root/virt-top/virt_top_utils.ml
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2007-09-24 16:13:58 +0100
committerRichard W.M. Jones <rjones@redhat.com>2007-09-24 16:13:58 +0100
commitb2c4dbaf7a3f9da9e4236fc46cf72b0ef4ee300d (patch)
tree10dc1a590c6df3c2607a485306db1db69124fe9e /virt-top/virt_top_utils.ml
parent4a3610a5813163d322b304d56b41bb68dbe83513 (diff)
downloadvirt-top-b2c4dbaf7a3f9da9e4236fc46cf72b0ef4ee300d.tar.gz
virt-top-b2c4dbaf7a3f9da9e4236fc46cf72b0ef4ee300d.tar.xz
virt-top-b2c4dbaf7a3f9da9e4236fc46cf72b0ef4ee300d.zip
Version 0.3.2.8.
Added support for init files.
Diffstat (limited to 'virt-top/virt_top_utils.ml')
-rw-r--r--virt-top/virt_top_utils.ml74
1 files changed, 74 insertions, 0 deletions
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