From 7a5fc851494dacaae801ef578c2b68d6184543f4 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Thu, 1 Jan 1970 00:00:00 +0000 Subject: [PATCH] Added private_data_functions. --- lib/diskimage_impl.ml | 14 ++++++++++++++ lib/diskimage_impl.mli | 8 +++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/diskimage_impl.ml b/lib/diskimage_impl.ml index 18af635..4e338d2 100644 --- a/lib/diskimage_impl.ml +++ b/lib/diskimage_impl.ml @@ -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 = diff --git a/lib/diskimage_impl.mli b/lib/diskimage_impl.mli index 26dd555..23f619f 100644 --- a/lib/diskimage_impl.mli +++ b/lib/diskimage_impl.mli @@ -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} *) -- 1.8.3.1