let mkpath_plus path perm = let user = 0o700 in let finish dirs = List.iter (fun file -> chmod file perm) dirs in let rec mkpath path = try let st = stat path in if st.st_kind <> S_DIR then raise (Unix_error (ENOTDIR, "mkdirp", path)); [] with Unix_error (ENOENT, _, _) -> let parent = Filename.dirname path in let dirs = if parent <> path then mkpath parent else [] in let () = try mkdir path user with exn -> finish dirs; raise exn in path :: dirs in finish (mkpath path);; |