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
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
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? *)
let extendeds = List.concat extendeds in
primaries @ extendeds
*)
- { parts_plugin_id = plugin_id; parts = primaries }
+ { parts_plugin_id = plugin_id; parts_dev = dev; parts = primaries }
| { _ } ->
raise Not_found (* not an MBR *)
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;
else []
*)
+(*
(* Ugh, fake a UInt32 -> UInt64 conversion without sign extension, until
* we get working UInt32/UInt64 modules in extlib.
*)
let i64 = Int64.of_int32 u32 in
if u32 >= 0l then i64
else Int64.add i64 0x1_0000_0000_L
+*)