50 |
|
|
51 |
(**************** UNIX I/O FUNCTIONS *******************) |
(**************** UNIX I/O FUNCTIONS *******************) |
52 |
|
|
|
external ftruncate64 : Unix.file_descr -> int64 -> unit = |
|
|
"mld_ftruncate_64" |
|
|
external seek64 : Unix.file_descr -> int64 -> Unix.seek_command -> int64 = |
|
|
"unix_lseek_64" |
|
|
|
|
53 |
let rec iter_write fd s pos len = |
let rec iter_write fd s pos len = |
54 |
let nwrite = Unix.write fd s pos len in |
let nwrite = Unix.write fd s pos len in |
55 |
if nwrite < len then |
if nwrite < len then |
60 |
if verbose then begin |
if verbose then begin |
61 |
lprintf_nl "write %d %d" pos len; |
lprintf_nl "write %d %d" pos len; |
62 |
end; |
end; |
63 |
ignore (seek64 fd (Int64.of_int pos) Unix.SEEK_SET); |
ignore (Unix2.c_seek64 fd (Int64.of_int pos) Unix.SEEK_SET); |
64 |
iter_write fd s 0 len |
iter_write fd s 0 len |
65 |
|
|
66 |
let rec iter_read fd s pos len = |
let rec iter_read fd s pos len = |
72 |
if verbose then begin |
if verbose then begin |
73 |
lprintf_nl "read %d %d" pos len; |
lprintf_nl "read %d %d" pos len; |
74 |
end; |
end; |
75 |
ignore (seek64 fd (Int64.of_int pos) Unix.SEEK_SET); |
ignore (Unix2.c_seek64 fd (Int64.of_int pos) Unix.SEEK_SET); |
76 |
iter_read fd s 0 len |
iter_read fd s 0 len |
77 |
|
|
78 |
(********************* FILE FUNCTIONS *****************) |
(********************* FILE FUNCTIONS *****************) |
98 |
let len_all_pos = Array.length file.file_all_pos in |
let len_all_pos = Array.length file.file_all_pos in |
99 |
if pos >= len_all_pos then begin |
if pos >= len_all_pos then begin |
100 |
let new_size = (len_all_pos + 10) * 2 in |
let new_size = (len_all_pos + 10) * 2 in |
101 |
ftruncate64 file.file_fd (Int64.of_int (new_size * file.file_entry_size)); |
Unix2.c_ftruncate64 file.file_fd (Int64.of_int (new_size * file.file_entry_size)) false; |
102 |
let new_tab = Array.create new_size 0 in |
let new_tab = Array.create new_size 0 in |
103 |
let new_weak = Weak.create new_size in |
let new_weak = Weak.create new_size in |
104 |
(try Array.blit file.file_all_pos 0 new_tab 0 pos |
(try Array.blit file.file_all_pos 0 new_tab 0 pos |