Return a specialized function so we don't break type safety.
[virt-df.git] / lib / diskimage.ml
index b12ba0e..697cb76 100644 (file)
@@ -661,21 +661,22 @@ let create_ownership machine =
   (* Return the ownership structure. *)
   ownership
 
-let get_owners machine ownership disk offset =
+let get_owners_lookup machine ownership disk =
   (* Get the correct tree. *)
   let tree = List.assoc disk ownership in
 
-  let rec query = function
-    | Leaf (_, segments) -> segments
-    | Node ((Leaf ((_, leftend), _) | Node (_, ((_, leftend), _), _) as left),
-           (_, segments),
-           right) ->
-       let subsegments =
-         if offset < leftend then query left else query right in
-       segments @ subsegments
-  in
-  let owners = query tree in
+  fun offset ->
+    let rec query = function
+      | Leaf (_, segments) -> segments
+      | Node ((Leaf ((_, leftend), _) | Node (_, ((_, leftend), _), _) as left),
+             (_, segments),
+             right) ->
+         let subsegments =
+           if offset < leftend then query left else query right in
+         segments @ subsegments
+    in
+    let owners = query tree in
 
-  List.map (
-    fun (_, _, owner, owner_offset) -> (owner, offset -^ owner_offset)
-  ) owners
+    List.map (
+      fun (_, _, owner, owner_offset) -> (owner, offset -^ owner_offset)
+    ) owners