This commit is contained in:
2025-10-25 03:02:53 +03:00
commit 043225d523
3416 changed files with 681196 additions and 0 deletions

137
cppdraft/fs/path/fmt/cvt.md Normal file
View File

@@ -0,0 +1,137 @@
[fs.path.fmt.cvt]
# 31 Input/output library [[input.output]](./#input.output)
## 31.12 File systems [[filesystems]](filesystems#fs.path.fmt.cvt)
### 31.12.6 Class path [[fs.class.path]](fs.class.path#fs.path.fmt.cvt)
#### 31.12.6.3 Conversions [[fs.path.cvt]](fs.path.cvt#fs.path.fmt.cvt)
#### 31.12.6.3.1 Argument format conversions [fs.path.fmt.cvt]
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L13935)
[*Note [1](#note-1)*:
The format conversions described in this subclause
are not applied on POSIX-based operating systems
because on these systems:
- [(1.1)](#1.1)
The generic format is acceptable as a native path[.](#1.1.sentence-1)
- [(1.2)](#1.2)
There is no need to distinguish between native format and generic format in function arguments[.](#1.2.sentence-1)
- [(1.3)](#1.3)
Paths for regular files and paths for directories share the same syntax[.](#1.3.sentence-1)
— *end note*]
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L13947)
Several functions are defined to accept [*detected-format*](#def:detected-format) arguments,
which are character sequences[.](#2.sentence-1)
A detected-format argument represents a path
using either a pathname in the generic format ([[fs.path.generic]](fs.path.generic "31.12.6.2Generic pathname format"))
or a pathname in the native format ([[fs.class.path]](fs.class.path "31.12.6Class path"))[.](#2.sentence-2)
Such an argument is taken to be in the generic format if and only if
it matches the generic format and is not acceptable to the operating system
as a native path[.](#2.sentence-3)
[3](#3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L13956)
[*Note [2](#note-2)*:
Some operating systems have no unambiguous way to distinguish between native format and generic format arguments[.](#3.sentence-1)
This is by design as it simplifies use for operating systems that do not require
disambiguation[.](#3.sentence-2)
It is possible that an implementation for an operating system
where disambiguation is needed distinguishes between the formats[.](#3.sentence-3)
— *end note*]
[4](#4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L13964)
Pathnames are converted as needed between the generic and native formats
in an operating-system-dependent manner[.](#4.sentence-1)
Let *G(n)* and *N(g)* in a mathematical sense
be the implementation's functions that convert native-to-generic
and generic-to-native formats respectively[.](#4.sentence-2)
If *g=G(n)* for some *n*, then *G(N(g))=g*;
if *n=N(g)* for some *g*, then *N(G(n))=n*[.](#4.sentence-3)
[*Note [3](#note-3)*:
Neither *G* nor *N* need be invertible[.](#4.sentence-4)
— *end note*]
[5](#5)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L13976)
If the native format requires paths for regular files to be formatted
differently from paths for directories, the path shall be treated as a directory
path if its last element is a [*directory-separator*](fs.path.generic#nt:directory-separator "31.12.6.2Generic pathname format[fs.path.generic]"),
otherwise it shall be treated as a path to a regular file[.](#5.sentence-1)
[6](#6)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L13982)
[*Note [4](#note-4)*:
A path stores a native format pathname ([[fs.path.native.obs]](fs.path.native.obs "31.12.6.5.6Native format observers"))
and acts as if it also stores a generic format pathname,
related as given below[.](#6.sentence-1)
The implementation can generate the generic format pathname
based on the native format pathname (and possibly other information)
when requested[.](#6.sentence-2)
— *end note*]
[7](#7)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L13992)
When a path is constructed from or is assigned a single representation
separate from any path, the other representation is selected
by the appropriate conversion function (*G* or *N*)[.](#7.sentence-1)
[8](#8)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L13997)
When the (new) value *p* of one representation of a path
is derived from the representation of that or another path,
a value *q* is chosen for the other representation[.](#8.sentence-1)
The value *q* converts to *p* (by *G* or *N* as appropriate)
if any such value does so;*q* is otherwise unspecified[.](#8.sentence-2)
[*Note [5](#note-5)*:
If *q* is the result of converting any path at all,
it is the result of converting *p*[.](#8.sentence-3)
— *end note*]