let fatal_error msg =
prerr_endline msg;
exit 1
let safe_main main =
try main ()
with
Failure s
| Sys_error s ->
prerr_endline s;
exit 1
let try_finalize f x finally y =
let res =
try f x
with exn -> finally y; raise exn
in
finally y;
res
let unopt = fun ?default v ->
match v, default with
| None, None -> raise (Invalid_argument "unopt None")
| None, Some v -> v
| Some v, _ -> v
let md5sum_of_file file =
let com = Printf.sprintf "md5sum %s | cut -d\" \" -f 1"
(Filename.quote file)
in
let ic = Unix.open_process_in com in
let s = input_line ic in
close_in ic;
ignore (Unix.wait ());
s
let md5sum_of_string s =
let com = Printf.sprintf "echo %s | md5sum | cut -d\" \" -f 1"
(Filename.quote s)
in
let ic = Unix.open_process_in com in
let s = input_line ic in
close_in ic;
ignore (Unix.wait ());
s
let rec my_int_of_string s =
let len = String.length s in
if len <= 0 then invalid_arg "my_int_of_string";
match s.[0] with
'+' -> my_int_of_string (String.sub s 1 (len - 1))
| _ -> int_of_string s;;