val safe_rmdir: string -> unit (** removes a dir if it exists and is empty *)
val is_dir_empty: string -> bool (** checks if the dir is empty *)
val rmdir_descend: string -> unit (** rmdir -p *)
+val chmod: int -> string -> unit (** chmod *)
+val normalize_path: string -> string (** /foo/./bar/..//baz -> /foo/baz *)
(** find all _files_ whose name matches test under a filesystem root.
* Test is passed the filename path relative to the given filesystem root *)
val find: ?test:(string -> bool) -> string -> string list
+ (** find_in paths name returns the first path^"/"^name such that
+ * is a regular file and the current user can 'stat' it.
+ * May raise (Failure "find_in") *)
+val find_in: string list -> string -> string
+
(** {2 File I/O} *)
val input_file: string -> string (** read all the contents of file to string *)
(** {2 Localized exceptions } *)
-exception Localized of Token.flocation * exn
+exception Localized of Stdpp.location * exn
-val loc_of_floc: Token.flocation -> int * int
-val floc_of_loc: int * int -> Token.flocation
+val loc_of_floc: Stdpp.location -> int * int
+val floc_of_loc: int * int -> Stdpp.location
-val dummy_floc: Lexing.position * Lexing.position
+val dummy_floc: Stdpp.location
-val raise_localized_exception: offset:int -> Token.flocation -> exn -> 'a
+val raise_localized_exception: offset:int -> Stdpp.location -> exn -> 'a
(* size in KB (SLOW) *)
val estimate_size: 'a -> int
+(* is_prefix_of [prefix] [string], in terms of dirs:
+ * foo/bar/ is prefix of foo/bar/baz
+ * foo/bar is prefix of foo/bar/baz
+ * foo/b isn't of foo/bar/baz
+ * foo/bar is prefix of foo/bar
+ *)
+val is_prefix_of: string -> string -> bool
+val chop_prefix: string -> string -> string
+val touch: string -> unit