(* vim: set sw=8 ts=8 et: *)

(* TODO document *)
let mapjoin f l = (List.fold_left (fun a b -> a ^ (f b)) "" l)

(* TODO document *)
let mapjoine e f = function
    [] -> ""
  | h::t -> (List.fold_left (fun a b -> a ^ e ^ (f b)) (f h) t)

(* Exception used by open_out_unless_exists below *)
exception FileAlreadyExists

(* Wrapper which raise an exception when output path already exist *)
let open_out_unless_exists path =
    if Sys.file_exists path
    then raise FileAlreadyExists
    else open_out path

(* *)
let run_in_other_directory tmppath cmd =
    let prevdir = Sys.getcwd () in(
        Sys.chdir tmppath;
        let retval = Sys.command cmd in
            (Sys.chdir prevdir; retval)
    )