Added private_data_functions.
authorRichard W.M. Jones <rjones@redhat.com>
Wed, 7 May 2008 09:01:14 +0000 (10:01 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Wed, 7 May 2008 09:01:14 +0000 (10:01 +0100)
lib/diskimage_impl.ml
lib/diskimage_impl.mli

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 =
index 26dd555..23f619f 100644 (file)
@@ -141,6 +141,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;
 }
@@ -148,6 +149,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;
@@ -156,6 +158,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;
@@ -173,9 +176,8 @@ val register_plugin :
 
 (** {3 Plug-in-specific data management. *)
 
-
-
-
+val private_data_functions :
+  ('key -> int) -> ('key -> 'data -> unit) * ('key -> 'data)
 
 (** {2 Internal functions used by the plug-ins} *)