fix: IO.write_lines should produce an empty file for an empty iter

This commit is contained in:
Simon Cruanes 2023-04-19 21:17:08 -04:00
parent b48048891d
commit 694933d1e1
No known key found for this signature in database
GPG key ID: EBFFF6F283F3A2B4

View file

@ -1192,22 +1192,28 @@ module IO = struct
close_in_noerr ic;
raise e
let write_bytes_to ?(mode = 0o644) ?(flags = [ Open_creat; Open_wronly ])
filename seq =
let with_out_ ?(mode = 0o644) ?(flags = [ Open_creat; Open_wronly ]) filename
f =
let oc = open_out_gen flags mode filename in
try
seq (fun s -> output oc s 0 (Bytes.length s));
f oc;
close_out oc
with e ->
close_out oc;
raise e
let write_bytes_to ?mode ?flags filename it =
with_out_ ?mode ?flags filename (fun oc ->
it (fun s -> output oc s 0 (Bytes.length s)))
let write_to ?mode ?flags filename seq =
write_bytes_to ?mode ?flags filename (map Bytes.unsafe_of_string seq)
let write_bytes_lines ?mode ?flags filename seq =
let ret = Bytes.unsafe_of_string "\n" in
write_bytes_to ?mode ?flags filename (snoc (intersperse ret seq) ret)
let write_bytes_lines ?mode ?flags filename it =
with_out_ ?mode ?flags filename (fun oc ->
it (fun s ->
output oc s 0 (Bytes.length s);
output_char oc '\n'))
let write_lines ?mode ?flags filename seq =
write_bytes_lines ?mode ?flags filename (map Bytes.unsafe_of_string seq)