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