From 19d2075236c4c3fd932f7cf003b9f7283dafaeca Mon Sep 17 00:00:00 2001 From: Enrico Tassi Date: Thu, 26 Jun 2014 15:38:49 +0200 Subject: more APIs in TQueue and CThread These are now sufficient to implement PIDE --- lib/cThread.ml | 19 +++++++++++++++++++ lib/cThread.mli | 3 +++ 2 files changed, 22 insertions(+) (limited to 'lib') diff --git a/lib/cThread.ml b/lib/cThread.ml index a38c88d802..76e975d2d0 100644 --- a/lib/cThread.ml +++ b/lib/cThread.ml @@ -34,6 +34,25 @@ let really_read_fd fd s off len = i := !i + r done +let thread_friendly_really_read ic s ~off ~len = + try + let fd = Unix.descr_of_in_channel ic in + really_read_fd fd s off len + with Unix.Unix_error _ -> raise End_of_file + +let thread_friendly_really_read_line ic = + try + let fd = Unix.descr_of_in_channel ic in + let b = Buffer.create 1024 in + let s = String.make 1 '\000' in + while s <> "\n" do + let n = thread_friendly_read_fd fd s ~off:0 ~len:1 in + if n = 0 then raise End_of_file; + if s <> "\n" then Buffer.add_string b s; + done; + Buffer.contents b + with Unix.Unix_error _ -> raise End_of_file + let thread_friendly_input_value ic = try let fd = Unix.descr_of_in_channel ic in diff --git a/lib/cThread.mli b/lib/cThread.mli index 6c635748e9..ada492dd40 100644 --- a/lib/cThread.mli +++ b/lib/cThread.mli @@ -18,4 +18,7 @@ val prepare_in_channel_for_thread_friendly_io : in_channel -> unit val thread_friendly_input_value : in_channel -> 'a val thread_friendly_read : in_channel -> string -> off:int -> len:int -> int +val thread_friendly_really_read : + in_channel -> string -> off:int -> len:int -> unit +val thread_friendly_really_read_line : in_channel -> string -- cgit v1.2.3