61 lines
2.9 KiB
Racket
61 lines
2.9 KiB
Racket
#reader(lib "docreader.ss" "scribble")
|
|
@require[(lib "bnf.ss" "scribble")]
|
|
@require["mz.ss"]
|
|
|
|
@title[#:tag "mz:unixpaths"]{@|AllUnix| Paths}
|
|
|
|
In @|AllUnix| paths, a @litchar{/} separates elements of the path,
|
|
@litchar{.} as a path element always means the directory indicated by
|
|
preceding path, and @litchar{..} as a path element always means the
|
|
parent of the directory indicated by the preceding path. A path that
|
|
starts with a @litchar{~} indicates a user's home directory; the
|
|
username follows the @litchar{~} (before a @litchar{/} or the end of
|
|
the path), where @litchar{~} by itself indicates the home directory of
|
|
the current user. No other character or byte has a special meaning
|
|
within a path. Multiple adjacent @litchar{/} are equivalent to a
|
|
single @litchar{/} (i.e., they act as a single path separator).
|
|
|
|
A path root is either @litchar{/} or a home-directory specification
|
|
starting with @litchar{~}. A relative path whose first element starts
|
|
with a @litchar{~} is encoded by prefixing the path with @litchar{./}.
|
|
|
|
Any pathname that ends with a @litchar{/} syntactically refers to a
|
|
directory, as does any path whose last element is @litchar{.} or
|
|
@litchar{..}, or any path that contains only a root.
|
|
|
|
A @|AllUnix| path is @tech{path-expand}ed by replacing a
|
|
home-directory specification (starting with @litchar{~}) with an
|
|
absolute path, and by replacing multiple adjacent @litchar{/}s with a
|
|
single @litchar{/}.
|
|
|
|
For @scheme[(bytes->path-element _bstr)], @scheme[bstr] can start with
|
|
a @litchar{~}, and it is encoded as a literal part of the path element
|
|
using a @litchar{./} prefix. The @scheme[_bstr] argument must not
|
|
contain @litchar{/}, otherwise the @exnraise[exn:fail:contract].
|
|
|
|
For @scheme[(path-element->bytes _path)] or
|
|
@scheme[(path-element->string _path)], if the bytes form of
|
|
@scheme[_path] starts with @litchar{~/.}, the @litchar{./} prefix is
|
|
not included in the result.
|
|
|
|
For @scheme[(build-path _base-path _sub-path ...)], when a
|
|
@scheme[_sub-path] starts with @litchar{./~}, the @litchar{./} is
|
|
removed before adding the path. This conversion is performed because
|
|
an initial sequence @litchar{./~} is the canonical way of representing
|
|
relative paths whose first element's name starts with @litchar{~}.
|
|
|
|
For @scheme[(simplify-path _path _use-filesystem?)], if @scheme[_path]
|
|
starts @litchar{./~}, the leading period is the only indicator, and
|
|
there are no redundant @litchar{/}s, then @scheme[_path] is returned.
|
|
|
|
For @scheme[(split-path _path)] producing @scheme[_base],
|
|
@scheme[_name], and @scheme[_must-be-dir?], the result @scheme[name]
|
|
can start with @litchar{./~} if the result would otherwise start with
|
|
@litchar{~} and it is not the start of @scheme[_path]. Furthermore, if
|
|
@scheme[path] starts with @litchar{./~} with any non-zero number of
|
|
@litchar{/}s between @litchar{.} and @litchar{~}, then the
|
|
@litchar{./} is kept with the following element (i.e., they are not
|
|
split separately).
|
|
|
|
Under Mac OS X, Finder aliases are zero-length files.
|