Simple support for new libvirt virDomainMemoryPeek
[virt-mem.git] / lib / virt_mem_mmap.ml
index 87741e4..98dc84a 100644 (file)
@@ -78,6 +78,25 @@ let of_file fd addr =
   let t = create () in
   add_file t fd addr
 
+let add_string ({ mappings = mappings } as t) str addr =
+  if addr &^ 7L <> 0L then
+    invalid_arg "add_file: mapping address must be aligned to 8 bytes";
+  let size = String.length str in
+  (* Use Bigarray.Array1. XXX We should just use the string. *)
+  let arr = Array1.create char c_layout size in
+  for i = 0 to size-1 do
+    Array1.set arr i (String.unsafe_get str i)
+  done;
+  (* Create the mapping entry and keep the mappings sorted by start addr. *)
+  let mappings =
+    { start = addr; size = Int64.of_int size; arr = arr } :: mappings in
+  let mappings = sort_mappings mappings in
+  { t with mappings = mappings }
+
+let of_string str addr =
+  let t = create () in
+  add_string t str addr
+
 (* Find in mappings and return first predicate match. *)
 let _find_map { mappings = mappings } pred =
   let rec loop = function