X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=lib%2Fdiskimage_mbr.ml;h=30c5dc46129c2d6e1e0939679f50f744584e26a5;hb=063c6a300ed7ed6a9ec99d22159b3e246d08a70a;hp=07f9df8a999918bbf1faa07b28327e3aad121745;hpb=70ecd5f92e887185fd3e09f603e4c5e1a06ef4f4;p=virt-df.git diff --git a/lib/diskimage_mbr.ml b/lib/diskimage_mbr.ml index 07f9df8..30c5dc4 100644 --- a/lib/diskimage_mbr.ml +++ b/lib/diskimage_mbr.ml @@ -26,10 +26,11 @@ open ExtList open Diskimage_utils +open Int63.Operators + let plugin_id = "mbr" -let sector_size = 512 -let sector_size64 = 512L +let sector_size = ~^512 (* Maximum number of extended partitions possible. *) let max_extended_partitions = 100 @@ -47,8 +48,8 @@ let max_extended_partitions = 100 class partition_device partno start size dev = let devname = dev#name in let name = sprintf "%s%d" devname partno in - let start = start *^ sector_size64 in - let size = size *^ sector_size64 in + let start = start *^ sector_size in + let size = size *^ sector_size in object (self) inherit offset_device name start size sector_size dev end @@ -62,7 +63,7 @@ end let rec probe dev = (* Read the first sector. *) let bits = - try dev#read_bitstring 0L sector_size + try dev#read_bitstring ~^0 sector_size with exn -> raise Not_found in (* Does this match a likely-looking MBR? *) @@ -116,11 +117,16 @@ and parse_mbr_entry dev i bits = part_dev = null_device; part_content = `Unknown } and make_mbr_entry part_status dev partno part_type first_lba part_size = - let first_lba = uint64_of_int32 first_lba in - let part_size = uint64_of_int32 part_size in + let first_lba = Int63.of_int32 first_lba in + let part_size = Int63.of_int32 part_size in + (* + XXX Used to be: + let first_lba = uint63_of_int32 first_lba in + let part_size = uint63_of_int32 part_size in + *) if !debug then - eprintf "make_mbr_entry: first_lba = %Lx part_size = %Lx\n%!" - first_lba part_size; + eprintf "make_mbr_entry: first_lba = %s part_size = %s\n%!" + (Int63.to_string first_lba) (Int63.to_string part_size); { part_status = part_status; part_type = part_type; part_dev = new partition_device partno first_lba part_size dev; @@ -169,6 +175,7 @@ and probe_extended_partition max fd epart sect = else [] *) +(* (* Ugh, fake a UInt32 -> UInt64 conversion without sign extension, until * we get working UInt32/UInt64 modules in extlib. *) @@ -176,3 +183,4 @@ and uint64_of_int32 u32 = let i64 = Int64.of_int32 u32 in if u32 >= 0l then i64 else Int64.add i64 0x1_0000_0000_L +*)