Updated kernel parsers.
[virt-mem.git] / lib / virt_mem_utils.ml
index 8eb312a..a1eab8f 100644 (file)
@@ -1,3 +1,4 @@
+(** Common and utility functions. *)
 (* Memory info command for virtual domains.
    (C) Copyright 2008 Richard W.M. Jones, Red Hat Inc.
    http://libvirt.org/
@@ -78,9 +79,8 @@ let bits_of_wordsize = function
 let bytes_of_wordsize = function
   | W32 -> 4 | W64 -> 8
 
-(* Returns (count, value) in order of highest frequency occurring in the
- * list.
- *)
+(** Returns (count, value) in order of highest frequency occurring in the
+    list. *)
 let frequency xs =
   let xs = List.sort compare xs in
   let rec loop = function
@@ -96,6 +96,7 @@ let frequency xs =
   let xs = loop xs in
   List.rev (List.sort compare xs)
 
+(** Like the Unix uniq(1) command. *)
 let rec uniq ?(cmp = Pervasives.compare) = function
   | [] -> []
   | [x] -> [x]
@@ -104,25 +105,35 @@ let rec uniq ?(cmp = Pervasives.compare) = function
   | x :: y :: xs ->
       x :: uniq (y :: xs)
 
+(** Like the Unix pipeline 'sort|uniq'. *)
 let sort_uniq ?cmp xs =
   let xs = ExtList.List.sort ?cmp xs in
   let xs = uniq ?cmp xs in
   xs
 
-(* Pad a string to a fixed width (from virt-top, but don't truncate). *)
+(** Pad a string to a fixed width (from virt-top, but don't truncate). *)
 let pad width str =
   let n = String.length str in
   if n >= width then str
   else (* if n < width then *) str ^ String.make (width-n) ' '
 
-(* General binary tree type.  Data 'a is stored in the leaves and 'b
- * is stored in the nodes.
+(* Truncate an OCaml string at the first ASCII NUL character, ie. as
+ * if it were a C string.
  *)
+let truncate_c_string str =
+  try
+    let i = String.index str '\000' in
+    String.sub str 0 i
+  with
+    Not_found -> str
+
+(** General binary tree type.  Data 'a is stored in the leaves and 'b
+    is stored in the nodes. *)
 type ('a,'b) binary_tree =
   | Leaf of 'a
   | Node of ('a,'b) binary_tree * 'b * ('a,'b) binary_tree
 
-(* This prints out the binary tree in graphviz dot format. *)
+(** Print out the binary tree in graphviz dot format. *)
 let print_binary_tree leaf_printer node_printer tree =
   (* Assign a unique, fixed label to each node. *)
   let label =