let load_sexp ?(buf = String.create 8192) file =
let buf_len = String.length buf in
let ic = open_in file in
let rec loop this_parse =
let len = input ic buf 0 buf_len in
if len = 0 then
failwith (sprintf "Sexplib.Sexp.load_sexp: end of file: %s" file)
else
match this_parse ~pos:0 ~len buf with
| Done (sexp, _) -> sexp
| Cont (_, this_parse) -> loop this_parse
in
try
let sexp = loop plain_parse in
close_in ic;
sexp
with exc -> close_in_noerr ic; raise exc