X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=lib%2Fdiskimage_utils.ml;h=80a7e3a503b30c521133c8e412ed7b3f4718a23a;hb=e1e5cfb926e886b8fc3126429d045b8ba305fe50;hp=4ad508d392ee98868517d9d38468f9a44ede4fc7;hpb=063c6a300ed7ed6a9ec99d22159b3e246d08a70a;p=virt-df.git diff --git a/lib/diskimage_utils.ml b/lib/diskimage_utils.ml index 4ad508d..80a7e3a 100644 --- a/lib/diskimage_utils.ml +++ b/lib/diskimage_utils.ml @@ -29,7 +29,8 @@ object (self) method virtual size : int63 method virtual name : string method virtual blocksize : int63 - method virtual mapblock : int63 -> (device * int63) list + method virtual map_block : int63 -> (device * int63) list + method virtual contiguous : Int63.t -> Int63.t (* Block-based read. Inefficient so normally overridden in subclasses. *) method read offset len = @@ -51,7 +52,7 @@ object (self) let not_mapped_error () = invalid_arg "device: read: block not mapped" in (* Copy the first block (partial). *) - (match self#mapblock first_blk with + (match self#map_block first_blk with | [] -> not_mapped_error () | (dev, base) :: _ -> let len = @@ -63,7 +64,7 @@ object (self) (* Copy the middle blocks. *) let rec loop blk = if blk < last_blk then ( - (match self#mapblock blk with + (match self#map_block blk with | [] -> not_mapped_error () | (dev, base) :: _ -> let str = dev#read ~^0 self#blocksize in @@ -76,7 +77,7 @@ object (self) (* Copy the last block (partial). *) if first_blk < last_blk then ( - match self#mapblock last_blk with + match self#map_block last_blk with | [] -> not_mapped_error () | (dev, base) :: _ -> let len = (offset +^ len) -^ last_blk *^ blocksize in @@ -109,7 +110,9 @@ object (self) method size = size method name = filename method blocksize = blocksize - method mapblock _ = [] + method map_block _ = [] + method contiguous offset = + size -^ offset method close () = close fd end @@ -128,7 +131,9 @@ object ); dev#read (start+^offset) len method blocksize = blocksize - method mapblock i = [dev, i *^ blocksize +^ start] + method map_block i = [dev, i *^ blocksize +^ start] + method contiguous offset = + size -^ offset end (* A device with just a modified block size. *) @@ -137,11 +142,12 @@ object inherit device method name = dev#name method size = dev#size - method read offset len = dev#read offset len + method read = dev#read method blocksize = new_blocksize - method mapblock new_blk = + method map_block new_blk = let orig_blk = new_blk *^ new_blocksize /^ dev#blocksize in - dev#mapblock orig_blk + dev#map_block orig_blk + method contiguous offset = dev#size -^ offset end (* The null device. Any attempt to read generates an error. *) @@ -152,7 +158,8 @@ object method size = ~^0 method name = "null" method blocksize = ~^1 - method mapblock _ = assert false + method map_block _ = assert false + method contiguous _ = ~^0 end type machine = {