Clarify licensing for Debian.
[virt-df.git] / lib / diskimage_impl.ml
index 18af635..20e6e7b 100644 (file)
@@ -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. *)