Source file bytream_unix.ml
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
module In = struct
let of_fd ?(io_buffer_size = 4096) fd =
let buffer = Bstr.create io_buffer_size in
let reader () =
match Unix.read_bigarray fd buffer 0 io_buffer_size with
| 0 -> raise End_of_file
| length -> (~buffer, ~offset:0, ~length)
in
Bytream.In.make' reader
end
module Out = struct
let of_fd fd =
let rec really_write_bigarray buffer offset = function
| 0 -> ()
| length ->
let written_bytes = Unix.write_bigarray fd buffer 0 length in
really_write_bigarray buffer (offset + written_bytes)
(length - written_bytes)
in
let writer ((~buffer, ~length, ..) : Bytream.Out.chunk) =
really_write_bigarray buffer 0 length
in
Bytream.Out.make writer
end