X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=lib%2Fdiskimage_impl.ml;h=20e6e7b0e9b93f5df707f21560f555aa80c18e5e;hb=91a90523b17e4efbbd90b8f8200f7047779f3ea2;hp=18af6357d75b0d698a17e27bb33ee1b486a38c2a;hpb=71536ae75dceb08e0f3c3403033fb2eb25a08883;p=virt-df.git diff --git a/lib/diskimage_impl.ml b/lib/diskimage_impl.ml index 18af635..20e6e7b 100644 --- a/lib/diskimage_impl.ml +++ b/lib/diskimage_impl.ml @@ -2,19 +2,20 @@ (C) Copyright 2007-2008 Richard W.M. Jones, Red Hat Inc. http://libvirt.org/ - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version, + with the OCaml linking exception described in ../COPYING.LIB. - This program is distributed in the hope that it will be useful, + This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *) open ExtList @@ -240,6 +241,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 +249,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 +258,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 +392,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. *)