X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=lib%2Fdiskimage_impl.ml;h=7dbd5fb97d91ff908f2139bda42471a10f60a5d7;hb=5318d6037135dbb8f53074d8003af769132d72bd;hp=18af6357d75b0d698a17e27bb33ee1b486a38c2a;hpb=71536ae75dceb08e0f3c3403033fb2eb25a08883;p=virt-df.git diff --git a/lib/diskimage_impl.ml b/lib/diskimage_impl.ml index 18af635..7dbd5fb 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,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. *)