# Module Extended_filename

    module Extended_filename: sig .. end

Extensions to `Core.Core_filename`.

    val normalize : string -> string

`normalize path` Removes as much "." and ".." from the path as possible. If the path is absolute they will all be removed.

    val parent : string -> string

`parent path` The parent of the root directory is the root directory
Returns the path to the parent of `path`.

    val make_relative : ?to_:string -> string -> string

`make_relative ~to_:src f` returns `f` relative to `src`.
Raises `Failure` if `is_relative f <> is_relative src`

    val make_absolute : string -> string

`make_absolute src` Turn `src` into an absolute path expanded from the current working directory.

    val expand : ?from:string -> string -> string

`expand` Makes a path absolute and expands `~` `~username` to home directories. In case of error (e.g.: path home of a none existing user) raises `Failure` with a (hopefully) helpful message.

    val explode : string -> string list

Splits a given path into a list of strings.

    val implode : string list -> string

dual to explode

    val compare : string -> string -> int

Filename.compare is a comparison that normalizes filenames ("./a" = "a"), uses a more human ready algorithm based on `String.collate` ("rfc02.txt > rfc1.txt") and extenstions ("a.c" > "a.h").

It is a total comparison on normalized filenames.

    val with_open_temp_file : ?in_dir:string ->
           ?write:(Pervasives.out_channel -> unit) ->
           f:(string -> 'a) -> string -> string -> 'a

`with_open_temp_file ~write ~f prefix suffix` create a temporary file; runs `write` on its `out_channel` and then `f` on the resulting file. The file is removed once `f` is done running.

    val with_temp_dir : ?in_dir:string -> string -> string -> f:(string -> 'a) -> 'a

Runs `f` with a temporary dir as option and removes the directory afterwards.

    val is_parent : string -> string -> bool

`is_parent dir1 dir2` returns `true` if `dir1` is a parent of `dir2`

Note: This function is context independent, use `expand` if you want to consider relatives paths from a given point.

In particular:

- A directory is always the parent of itself.
- The root is the parent of any directory
- An absolute path is never the parent of relative one and vice versa.
- `"../../a"` is never the parent of `"."` even if this could be true given form the current working directory.