[fs.path.generic] (original) (raw)

31 Input/output library [input.output]

31.12 File systems [filesystems]

31.12.6 Class path [fs.class.path]

31.12.6.2 Generic pathname format [fs.path.generic]

root-name:
operating system dependent sequences of characters
implementation-defined sequences of characters

filename:
non-empty sequence of characters other than directory-separator characters

preferred-separator:
operating system dependent directory separator character

A filename is the name of a file.

The dot and dot-dot filenames, consisting solely of one and two period characters respectively, have special meaning.

The following characteristics of filenames are operating system dependent:

Except in a root-name, multiple successive directory-separator characters are considered to be the same as one directory-separator character.

The dot filename is treated as a reference to the current directory.

The dot-dot filename is treated as a reference to the parent directory.

What the dot-dot filename refers to relative to root-directory is implementation-defined.

Specific filenames may have special meanings for a particular operating system.

A root-name identifies the starting location for pathname resolution ([fs.class.path]).

If there are no operating system dependent root-names, at least one implementation-defined root-name is required.

[Note 2:

Many operating systems define a name beginning with two directory-separator characters as a root-name that identifies network or other resource locations.

Some operating systems define a single letter followed by a colon as a drive specifier — a root-nameidentifying a specific device such as a disk drive.

— _end note_]

If a root-name is otherwise ambiguous, the possibility with the longest sequence of characters is chosen.

[Note 3:

On a POSIX-like operating system, it is impossible to have aroot-name and a relative-pathwithout an intervening root-directory element.

— _end note_]

Normalization of a generic format pathname means:

1. If the path is empty, stop.
2. Replace each slash character in the root-name with a preferred-separator.
3. Replace each directory-separator with a preferred-separator. [Note 4: The generic pathname grammar defines directory-separator as one or more slashes and preferred-separators. — _end note_]
4. Remove each dot filename and any immediately following directory-separator.
5. As long as any appear, remove a non-dot-dot filename immediately followed by a directory-separator and a dot-dot filename, along with any immediately following directory-separator.
6. If there is a root-directory, remove all dot-dot filenames and any directory-separators immediately following them. [Note 5: These dot-dot filenames attempt to refer to nonexistent parent directories. — _end note_]
7. If the last filename is dot-dot, remove any trailing directory-separator.
8. If the path is empty, add a dot.

The result of normalization is a path in normal form, which is said to be normalized.