Block free/used for NTFS working
[virt-df.git] / lib / diskimage_impl.ml
index 18af635..4e338d2 100644 (file)
@@ -240,6 +240,7 @@ and lv = {
 and partitioner_probe = device -> partitions
 
 and partitioner_callbacks = {
+  parts_cb_uq : int;
   parts_cb_name : string;
   parts_cb_offset_is_free : partitions -> Int63.t -> bool;
 }
@@ -247,6 +248,7 @@ and partitioner_callbacks = {
 and filesystem_probe = device -> filesystem
 
 and filesystem_callbacks = {
+  fs_cb_uq : int;
   fs_cb_name : string;
   fs_cb_printable_name : string;
   fs_cb_offset_is_free : filesystem -> Int63.t -> bool;
@@ -255,6 +257,7 @@ and filesystem_callbacks = {
 and lvm_probe = device -> pv
 
 and lvm_callbacks = {
+  lvm_cb_uq : int;
   lvm_cb_name : string;
   lvm_cb_list_lvs : pv list -> lv list;
   lvm_cb_offset_is_free : pv -> Int63.t -> bool;
@@ -388,6 +391,17 @@ let probe_for_pv dev =
   );
   r
 
+(* This allows plug-ins to attach their own private data to
+ * the normal plug-in structures (partitions, filesystem, pv, etc.)
+ *)
+let private_data_functions get_key =
+  let h = Hashtbl.create 13 in
+  (fun struc data ->
+     Hashtbl.replace h (get_key struc) data),
+  (fun struc ->
+     try Hashtbl.find h (get_key struc)
+     with Not_found -> assert false (* internal error in the plug-in *))
+
 (*----------------------------------------------------------------------*)
 (* Create machine description. *)
 let open_machine name disks =