Add .gitignore file for git.
[virt-df.git] / lib / diskimage.mli
index 5d2a420..ee95453 100644 (file)
@@ -2,20 +2,21 @@
 (* (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
+*)
 
 (**
    {2 Examples}
@@ -47,9 +48,9 @@ class virtual device :
          Note: A default implementation is provided for [read],
          but it is fairly inefficient because it uses {!map_block} to
          map each block in the request. *)
-    method read_bitstring : Int63.t -> Int63.t -> Bitmatch.bitstring
+    method read_bitstring : Int63.t -> Int63.t -> Bitstring.bitstring
       (** [read_bitstring] is the same as [read] but returns
-         a pa_bitmatch-style bitstring. *)
+         a pa_bitstring-style bitstring. *)
 
     method virtual blocksize : Int63.t
       (** [blocksize] returns the natural block size of the device. *)
@@ -90,7 +91,7 @@ class block_device : string -> Int63.t ->
     method name : string
     method size : Int63.t
     method read : Int63.t -> Int63.t -> string
-    method read_bitstring : Int63.t -> Int63.t -> Bitmatch.bitstring
+    method read_bitstring : Int63.t -> Int63.t -> Bitstring.bitstring
     method blocksize : Int63.t
     method map_block : Int63.t -> (device * Int63.t) list
     method contiguous : Int63.t -> Int63.t
@@ -108,7 +109,7 @@ class offset_device : string -> Int63.t -> Int63.t -> Int63.t -> device ->
     method name : string
     method size : Int63.t
     method read : Int63.t -> Int63.t -> string
-    method read_bitstring : Int63.t -> Int63.t -> Bitmatch.bitstring
+    method read_bitstring : Int63.t -> Int63.t -> Bitstring.bitstring
     method blocksize : Int63.t
     method map_block : Int63.t -> (device * Int63.t) list
     method contiguous : Int63.t -> Int63.t
@@ -128,7 +129,7 @@ class blocksize_overlay : Int63.t -> device ->
     method name : string
     method size : Int63.t
     method read : Int63.t -> Int63.t -> string
-    method read_bitstring : Int63.t -> Int63.t -> Bitmatch.bitstring
+    method read_bitstring : Int63.t -> Int63.t -> Bitstring.bitstring
     method blocksize : Int63.t
     method contiguous : Int63.t -> Int63.t
     method map_block : Int63.t -> (device * Int63.t) list
@@ -202,7 +203,7 @@ and disk_content =
     ]
 
 and partitions = {
-  parts_plugin_id : parts_plugin_id;   (** Partitioning scheme. *)
+  parts_cb : partitioner_callbacks;    (** Partitioning scheme. *)
   parts_dev : device;                  (** Partitions (whole) device. *)
   parts : partition list;              (** Partitions. *)
 }
@@ -222,7 +223,7 @@ and partition_content =
     ]
 
 and filesystem = {
-  fs_plugin_id : fs_plugin_id;         (** Filesystem type. *)
+  fs_cb : filesystem_callbacks;                (** Filesystem type. *)
   fs_dev : device;                     (** Device containing the filesystem. *)
   fs_blocksize : Int63.t;              (** Block size (bytes). *)
   fs_blocks_total : Int63.t;           (** Total blocks. *)
@@ -238,7 +239,7 @@ and filesystem = {
     (** A filesystem, with superblock contents. *)
 
 and pv = {
-  lvm_plugin_id : lvm_plugin_id;        (** The LVM plug-in which detected
+  pv_cb : lvm_callbacks;               (** The LVM plug-in which detected
                                            this. *)
   pv_dev : device;                     (** Device covering whole PV. *)
   pv_uuid : string;                    (** UUID. *)
@@ -248,18 +249,17 @@ and lv = {
 }
     (** Physical and logical volumes as used by LVM plug-ins. *)
 
-and parts_plugin_id
-and fs_plugin_id
-and lvm_plugin_id
-  (** Opaque IDs used to refer to the plug-ins. *)
-
-val name_of_parts : parts_plugin_id -> string
-val name_of_filesystem : fs_plugin_id -> string
-val name_of_lvm : lvm_plugin_id -> string
-  (** Convert plug-in IDs to printable strings. *)
+and partitioner_callbacks
+and filesystem_callbacks
+and lvm_callbacks
 
 (** {2 Functions} *)
 
+val name_of_filesystem : filesystem -> string
+  (** [name_of_filesystem fs] returns a printable name for
+      the filesystem.
+  *)
+
 (** {3 Create 'machine'} *)
 
 val open_machine : string -> (string * string) list -> machine
@@ -275,6 +275,11 @@ val open_machine : string -> (string * string) list -> machine
       LV filesystems in the returned structure.
   *)
 
+val open_machine_from_devices : string -> (string * block_device) list ->
+  machine
+  (** This is the same as {!open_machine} except that instead
+      of passing a path you should pass a {!block_device} object. *)
+
 val close_machine : machine -> unit
   (** This is a convenience function which calls the [dev#close]
       method on any open {!block_device}s owned by the machine.  This just
@@ -333,6 +338,15 @@ val get_owners_lookup : machine -> ownership -> block_device ->
       creates a tree structure which allows ownership to be determined
       in just a few steps. *)
 
+val offset_is_free : (owner * Int63.t) list -> bool
+  (** [offset_is_free owners] tests if the offset is free (unused).
+
+      If an offset is free, then it may be discarded without
+      changing the semantics of the disk image.  In normal cases
+      this extends to the end of the current block, but blocksize
+      will differ for each owner, so what this really means is
+      tricky in practice. *)
+
 (** {2 Debugging} *)
 
 val debug : bool ref