bitmatch >= 1.9.5 now required
[virt-df.git] / lib / diskimage_impl.ml
index 18af635..7dbd5fb 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,15 +391,33 @@ 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_from_devices name disks =
+  let disks = List.map (
+    fun (name, dev) ->
+      { d_name = name; d_dev = dev; d_content = `Unknown }
+  ) disks in
+  { m_name = name; m_disks = disks; m_lv_filesystems = [] }
+
 let open_machine name disks =
   let disks = List.map (
     fun (name, path) ->
       let dev = new block_device path disk_block_size (* XXX *) in
-      { d_name = name; d_dev = dev; d_content = `Unknown }
+      name, dev
   ) disks in
-  { m_name = name; m_disks = disks; m_lv_filesystems = [] }
+  open_machine_from_devices name disks
 
 let close_machine { m_disks = m_disks } =
   (* Only close the disks, assume all other devices are derived from them. *)