1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
|
@BEGIN_FROM_4_14_0@
include In_channel
@END_FROM_4_14_0@
@BEGIN_BEFORE_5_2_0@
(*
let max_buffer_size = 0x1000000
let input_and_copy_to_bigarray channel buffer tgt pos len =
let read = input channel buffer 0 len in
for i = 0 to read - 1 do
Bigarray.Array1.unsafe_set tgt (pos + i) (int_of_char (Bytes.unsafe_get buffer i))
done;
read
let rec input_and_copy_to_bigarray_loop channel buffer tgt pos len already_read =
let buffer_length = Bytes.length buffer in
if buffer_length < len then
begin
let read =
input_and_copy_to_bigarray channel buffer tgt pos buffer_length in
let already_read = already_read + read in
if read = buffer_length then
input_and_copy_to_bigarray_loop channel buffer tgt (pos + read)
(len - read) already_read
else
already_read
end
else
begin
let read = input_and_copy_to_bigarray channel buffer tgt pos len in
already_read + read
end
let input_bigarray channel tgt pos len =
if len < 0 || pos + len >= Bigarray.Array1.dim tgt then
invalid_arg "input_bigarray";
let buffer_size = min max_buffer_size len in
let buffer = Bytes.create buffer_size in
input_and_copy_to_bigarray_loop channel buffer tgt pos len 0
let really_input_bigarray channel tgt pos len =
if len < 0 || pos + len >= Bigarray.Array1.dim tgt then
invalid_arg "input_bigarray";
let buffer_size = min max_buffer_size len in
let buffer = Bytes.create buffer_size in
let rec loop len =
let read = input_and_copy_to_bigarray_loop channel buffer tgt pos len 0 in
if read = 0 then
None
else if read < len then
Some ()
else
loop (len - read) in
loop len
*)
let input_bigarray _channel _tgt _pos _len =
failwith "input_bigarray"
let really_input_bigarray _channel _tgt _pos _len =
failwith "really_input_bigarray"
let is_binary_mode _channel =
failwith "is_binary_mode"
@END_BEFORE_5_2_0@
@BEGIN_BEFORE_4_14_0@
type t = in_channel
type open_flag = Pervasives.open_flag =
Open_rdonly
| Open_wronly
| Open_append
| Open_creat
| Open_trunc
| Open_excl
| Open_binary
| Open_text
| Open_nonblock
let stdin = stdin
let open_bin = open_in_bin
let open_text = open_in
let open_gen = open_in_gen
let read_and_close channel f =
Stdcompat__fun.protect
~finally:(fun () -> close_in_noerr channel)
(fun () -> f channel)
let with_open_bin filename f =
read_and_close (open_bin filename) f
let with_open_text filename f =
read_and_close (open_text filename) f
let with_open_gen flags perm filename f =
read_and_close (open_gen flags perm filename) f
let seek = LargeFile.seek_in
let pos = LargeFile.pos_in
let length = LargeFile.in_channel_length
let close = close_in
let close_noerr = close_in_noerr
let input_char ic =
try
Some (input_char ic)
with End_of_file ->
None
let input_byte ic =
try
Some (input_byte ic)
with End_of_file ->
None
let input_line ic =
try
Some (input_line ic)
with End_of_file ->
None
let input = input
let really_input ic buf pos len =
try
really_input ic buf pos len;
Some ()
with End_of_file ->
None
let really_input_string ic len =
try
Some (Stdcompat__pervasives.really_input_string ic len)
with End_of_file ->
None
let set_binary_mode = set_binary_mode_in
let rec add_channel_to_the_end ~chunk_size buffer channel =
if
try
Stdcompat__buffer.add_channel buffer channel chunk_size;
true
with End_of_file ->
false
then
add_channel_to_the_end ~chunk_size buffer channel
let input_all channel =
let chunk_size = 65536 in
let buffer_size =
try
in_channel_length channel - pos_in channel
with Sys_error _ ->
-1 in
let buffer = Buffer.create buffer_size in
add_channel_to_the_end ~chunk_size buffer channel;
Buffer.contents buffer
@END_BEFORE_4_14_0@
@BEGIN_BEFORE_5_1_0@
let rec fold_lines f acc ic =
match input_line ic with
| None -> acc
| Some line -> fold_lines f (f acc line) ic
let input_lines ic =
List.rev (fold_lines (fun acc line -> line :: acc) [] ic)
let isatty _ic =
failwith "not implemented"
@END_BEFORE_5_1_0@
|