This file is indexed.

/usr/share/doc/racket/reference/windowspaths.html is in racket-doc 6.1-4.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"/><title>15.1.4&nbsp;Windows Path Conventions</title><link rel="stylesheet" type="text/css" href="../scribble.css" title="default"/><link rel="stylesheet" type="text/css" href="extras.css" title="default"/><link rel="stylesheet" type="text/css" href="../racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-style.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../doc-site.css" title="default"/><script type="text/javascript" src="../scribble-common.js"></script><script type="text/javascript" src="../manual-racket.js"></script><script type="text/javascript" src="../manual-racket.js"></script><script type="text/javascript" src="../doc-site.js"></script><script type="text/javascript" src="../local-redirect/local-redirect.js"></script><script type="text/javascript" src="../local-redirect/local-user-redirect.js"></script><!--[if IE 6]><style type="text/css">.SIEHidden { overflow: hidden; }</style><![endif]--></head><body id="doc-racket-lang-org"><div class="tocset"><div class="tocview"><div class="tocviewlist tocviewlisttopspace"><div class="tocviewtitle"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,&quot;tocview_0&quot;);">&#9658;</a></td><td></td><td><a href="index.html" class="tocviewlink" data-pltdoc="x"><span style="font-weight: bold">The Racket Reference</span></a></td></tr></table></div><div class="tocviewsublisttop" style="display: none;" id="tocview_0"><table cellspacing="0" cellpadding="0"><tr><td align="right">1&nbsp;</td><td><a href="model.html" class="tocviewlink" data-pltdoc="x">Language Model</a></td></tr><tr><td align="right">2&nbsp;</td><td><a href="notation.html" class="tocviewlink" data-pltdoc="x">Notation for Documentation</a></td></tr><tr><td align="right">3&nbsp;</td><td><a href="syntax.html" class="tocviewlink" data-pltdoc="x">Syntactic Forms</a></td></tr><tr><td align="right">4&nbsp;</td><td><a href="data.html" class="tocviewlink" data-pltdoc="x">Datatypes</a></td></tr><tr><td align="right">5&nbsp;</td><td><a href="structures.html" class="tocviewlink" data-pltdoc="x">Structures</a></td></tr><tr><td align="right">6&nbsp;</td><td><a href="mzlib_class.html" class="tocviewlink" data-pltdoc="x">Classes and Objects</a></td></tr><tr><td align="right">7&nbsp;</td><td><a href="mzlib_unit.html" class="tocviewlink" data-pltdoc="x">Units</a></td></tr><tr><td align="right">8&nbsp;</td><td><a href="contracts.html" class="tocviewlink" data-pltdoc="x">Contracts</a></td></tr><tr><td align="right">9&nbsp;</td><td><a href="match.html" class="tocviewlink" data-pltdoc="x">Pattern Matching</a></td></tr><tr><td align="right">10&nbsp;</td><td><a href="control.html" class="tocviewlink" data-pltdoc="x">Control Flow</a></td></tr><tr><td align="right">11&nbsp;</td><td><a href="concurrency.html" class="tocviewlink" data-pltdoc="x">Concurrency and Parallelism</a></td></tr><tr><td align="right">12&nbsp;</td><td><a href="Macros.html" class="tocviewlink" data-pltdoc="x">Macros</a></td></tr><tr><td align="right">13&nbsp;</td><td><a href="input-and-output.html" class="tocviewlink" data-pltdoc="x">Input and Output</a></td></tr><tr><td align="right">14&nbsp;</td><td><a href="security.html" class="tocviewlink" data-pltdoc="x">Reflection and Security</a></td></tr><tr><td align="right">15&nbsp;</td><td><a href="os.html" class="tocviewselflink" data-pltdoc="x">Operating System</a></td></tr><tr><td align="right">16&nbsp;</td><td><a href="memory.html" class="tocviewlink" data-pltdoc="x">Memory Management</a></td></tr><tr><td align="right">17&nbsp;</td><td><a href="unsafe.html" class="tocviewlink" data-pltdoc="x">Unsafe Operations</a></td></tr><tr><td align="right">18&nbsp;</td><td><a href="running.html" class="tocviewlink" data-pltdoc="x">Running Racket</a></td></tr><tr><td align="right"></td><td><a href="doc-bibliography.html" class="tocviewlink" data-pltdoc="x">Bibliography</a></td></tr><tr><td align="right"></td><td><a href="doc-index.html" class="tocviewlink" data-pltdoc="x">Index</a></td></tr></table></div></div><div class="tocviewlist"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,&quot;tocview_1&quot;);">&#9658;</a></td><td>15&nbsp;</td><td><a href="os.html" class="tocviewlink" data-pltdoc="x">Operating System</a></td></tr></table><div class="tocviewsublist" style="display: none;" id="tocview_1"><table cellspacing="0" cellpadding="0"><tr><td align="right">15.1&nbsp;</td><td><a href="pathutils.html" class="tocviewselflink" data-pltdoc="x">Paths</a></td></tr><tr><td align="right">15.2&nbsp;</td><td><a href="Filesystem.html" class="tocviewlink" data-pltdoc="x">Filesystem</a></td></tr><tr><td align="right">15.3&nbsp;</td><td><a href="networking.html" class="tocviewlink" data-pltdoc="x">Networking</a></td></tr><tr><td align="right">15.4&nbsp;</td><td><a href="subprocess.html" class="tocviewlink" data-pltdoc="x">Processes</a></td></tr><tr><td align="right">15.5&nbsp;</td><td><a href="logging.html" class="tocviewlink" data-pltdoc="x">Logging</a></td></tr><tr><td align="right">15.6&nbsp;</td><td><a href="time.html" class="tocviewlink" data-pltdoc="x">Time</a></td></tr><tr><td align="right">15.7&nbsp;</td><td><a href="envvars.html" class="tocviewlink" data-pltdoc="x">Environment Variables</a></td></tr><tr><td align="right">15.8&nbsp;</td><td><a href="runtime.html" class="tocviewlink" data-pltdoc="x">Environment and Runtime Information</a></td></tr><tr><td align="right">15.9&nbsp;</td><td><a href="Command-Line_Parsing.html" class="tocviewlink" data-pltdoc="x">Command-<wbr></wbr>Line Parsing</a></td></tr></table></div></div><div class="tocviewlist"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,&quot;tocview_2&quot;);">&#9660;</a></td><td>15.1&nbsp;</td><td><a href="pathutils.html" class="tocviewlink" data-pltdoc="x">Paths</a></td></tr></table><div class="tocviewsublistbottom" style="display: block;" id="tocview_2"><table cellspacing="0" cellpadding="0"><tr><td align="right">15.1.1&nbsp;</td><td><a href="Manipulating_Paths.html" class="tocviewlink" data-pltdoc="x">Manipulating Paths</a></td></tr><tr><td align="right">15.1.2&nbsp;</td><td><a href="More_Path_Utilities.html" class="tocviewlink" data-pltdoc="x">More Path Utilities</a></td></tr><tr><td align="right">15.1.3&nbsp;</td><td><a href="unixpaths.html" class="tocviewlink" data-pltdoc="x">Unix and Mac OS X Paths</a></td></tr><tr><td align="right">15.1.4&nbsp;</td><td><a href="" class="tocviewselflink" data-pltdoc="x">Windows Path Conventions</a></td></tr></table></div></div></div></div><div class="maincolumn"><div class="main"><div class="navsettop"><span class="navleft"><form class="searchform"><input class="searchbox" style="color: #888;" type="text" value="...search manuals..." title="Enter a search string to search the manuals" onkeypress="return DoSearchKey(event, this, &quot;6.1&quot;, &quot;../&quot;);" onfocus="this.style.color=&quot;black&quot;; this.style.textAlign=&quot;left&quot;; if (this.value == &quot;...search manuals...&quot;) this.value=&quot;&quot;;" onblur="if (this.value.match(/^ *$/)) { this.style.color=&quot;#888&quot;; this.style.textAlign=&quot;center&quot;; this.value=&quot;...search manuals...&quot;; }"/></form>&nbsp;&nbsp;<a href="../index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot(&quot;6.1&quot;);">top</a></span><span class="navright">&nbsp;&nbsp;<a href="unixpaths.html" title="backward to &quot;15.1.3 Unix and Mac OS X Paths&quot;" data-pltdoc="x">&larr; prev</a>&nbsp;&nbsp;<a href="pathutils.html" title="up to &quot;15.1 Paths&quot;" data-pltdoc="x">up</a>&nbsp;&nbsp;<a href="Filesystem.html" title="forward to &quot;15.2 Filesystem&quot;" data-pltdoc="x">next &rarr;</a></span>&nbsp;</div><h5 x-source-module="(lib &quot;scribblings/reference/reference.scrbl&quot;)" x-part-tag="&quot;windowspaths&quot;">15.1.4<tt>&nbsp;</tt><a name="(part._windowspaths)"></a>Windows Path Conventions</h5><p>In general, a Windows pathname consists of an optional drive specifier
and a drive-specific path. A Windows path can be <span style="font-style: italic">absolute</span>
but still relative to the current drive; such paths start with a
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span> separator and are not UNC paths or paths
that start with <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span>.</p><p>A path that starts with a drive specification is <span style="font-style: italic">complete</span>.
Roughly, a drive specification is either a Latin letter followed by a
colon, a UNC path of the form
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">machine</span>&#8250;</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">volume</span>&#8250;</span>, or a
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span> form followed by something other than
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">REL\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">element</span>&#8250;</span>, or
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">RED\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">element</span>&#8250;</span>. (Variants of <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span>
paths are described further below.)</p><p>Racket fails to implement the usual Windows path syntax in one
way. Outside of Racket, a pathname <span class="stt">"C:rant.txt"</span> can be a
drive-specific relative path. That is, it names a file <span class="stt">"rant.txt"</span>
on drive <span class="stt">"C:"</span>, but the complete path to the file is determined by
the current working directory for drive <span class="stt">"C:"</span>. Racket does not
support drive-specific working directories (only a working directory
across all drives, as reflected by the <span class="RktSym"><a href="Filesystem.html#%28def._%28%28quote._~23~25kernel%29._current-directory%29%29" class="RktValLink" data-pltdoc="x">current-directory</a></span>
parameter). Consequently, Racket implicitly converts a path like
<span class="stt">"C:rant.txt"</span> into <span class="stt">"C:\rant.txt"</span>.</p><ul><li><p><span style="font-style: italic">Racket-specific:</span> Whenever a path starts with a drive specifier
<span class="sroman">&#8249;<span style="font-style: italic">letter</span>&#8250;</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">:</span><span class="hspace"></span></span> that is not followed by a
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>, a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span> is inserted as
the path is <a href="pathutils.html#%28tech._cleanse%29" class="techoutside" data-pltdoc="x"><span class="techinside">cleanse</span></a>d.</p></li></ul><p>Otherwise, Racket follows standard Windows path conventions, but also
 adds <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\REL</span><span class="hspace"></span></span> and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\RED</span><span class="hspace"></span></span> conventions to
 deal with paths inexpressible in the standard convention, plus
 conventions to deal with excessive <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s in <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span>
 paths.</p><p>In the following, <span class="sroman">&#8249;<span style="font-style: italic">letter</span>&#8250;</span> stands for a Latin letter (case
does not matter), <span class="sroman">&#8249;<span style="font-style: italic">machine</span>&#8250;</span> stands for any sequence of
characters that does not include <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span> and is
not <span class="RktInBG"><span class="hspace"></span><span class="RktIn">?</span><span class="hspace"></span></span>, <span class="sroman">&#8249;<span style="font-style: italic">volume</span>&#8250;</span> stands for any sequence of
characters that does not include <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span> , and
<span class="sroman">&#8249;<span style="font-style: italic">element</span>&#8250;</span> stands for any sequence of characters that does not
include <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>.</p><ul><li><p>Trailing spaces and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span> in a path element are ignored
when the element is the last one in the path, unless the path
starts with <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span> or the element consists of only
spaces and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span>s.</p></li><li><p>The following special &ldquo;files&rdquo;, which access devices, exist in
all directories, case-insensitively, and with all possible
endings after a period or colon, except in pathnames that start
with <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span>: <a name="(idx._(gentag._250._(lib._scribblings/reference/reference..scrbl)))"></a><span class="stt">"NUL"</span>, <a name="(idx._(gentag._251._(lib._scribblings/reference/reference..scrbl)))"></a><span class="stt">"CON"</span>,
<a name="(idx._(gentag._252._(lib._scribblings/reference/reference..scrbl)))"></a><span class="stt">"PRN"</span>, <a name="(idx._(gentag._253._(lib._scribblings/reference/reference..scrbl)))"></a><span class="stt">"AUX"</span>, <a name="(idx._(gentag._254._(lib._scribblings/reference/reference..scrbl)))"></a><span class="stt">"COM1"</span>,
<a name="(idx._(gentag._255._(lib._scribblings/reference/reference..scrbl)))"></a><span class="stt">"COM2"</span>, <a name="(idx._(gentag._256._(lib._scribblings/reference/reference..scrbl)))"></a><span class="stt">"COM3"</span>, <a name="(idx._(gentag._257._(lib._scribblings/reference/reference..scrbl)))"></a><span class="stt">"COM4"</span>,
<a name="(idx._(gentag._258._(lib._scribblings/reference/reference..scrbl)))"></a><span class="stt">"COM5"</span>, <a name="(idx._(gentag._259._(lib._scribblings/reference/reference..scrbl)))"></a><span class="stt">"COM6"</span>, <a name="(idx._(gentag._260._(lib._scribblings/reference/reference..scrbl)))"></a><span class="stt">"COM7"</span>,
<a name="(idx._(gentag._261._(lib._scribblings/reference/reference..scrbl)))"></a><span class="stt">"COM8"</span>, <a name="(idx._(gentag._262._(lib._scribblings/reference/reference..scrbl)))"></a><span class="stt">"COM9"</span>, <a name="(idx._(gentag._263._(lib._scribblings/reference/reference..scrbl)))"></a><span class="stt">"LPT1"</span>,
<a name="(idx._(gentag._264._(lib._scribblings/reference/reference..scrbl)))"></a><span class="stt">"LPT2"</span>, <a name="(idx._(gentag._265._(lib._scribblings/reference/reference..scrbl)))"></a><span class="stt">"LPT3"</span>, <a name="(idx._(gentag._266._(lib._scribblings/reference/reference..scrbl)))"></a><span class="stt">"LPT4"</span>,
<a name="(idx._(gentag._267._(lib._scribblings/reference/reference..scrbl)))"></a><span class="stt">"LPT5"</span>, <a name="(idx._(gentag._268._(lib._scribblings/reference/reference..scrbl)))"></a><span class="stt">"LPT6"</span>, <a name="(idx._(gentag._269._(lib._scribblings/reference/reference..scrbl)))"></a><span class="stt">"LPT7"</span>,
<a name="(idx._(gentag._270._(lib._scribblings/reference/reference..scrbl)))"></a><span class="stt">"LPT8"</span>, <a name="(idx._(gentag._271._(lib._scribblings/reference/reference..scrbl)))"></a><span class="stt">"LPT9"</span>.</p></li><li><p>Except for <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span> paths, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span>s are
equivalent to <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s. Except for <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span>
paths and the start of UNC paths, multiple adjacent
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span>s and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s count as a single
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>. In a path that starts <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span>
paths, elements can be separated by either a single or double
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>.</p></li><li><p>A directory can be accessed with or without a trailing
separator. In the case of a non-<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span> path, the
trailing separator can be any number of <span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span>s and
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s; in the case of a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span> path, a
trailing separator must be a single <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>, except that
two <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s can follow
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">letter</span>&#8250;</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">:</span><span class="hspace"></span></span>.</p></li><li><p>Except for <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span> paths, a single <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span> as a
path element means &ldquo;the current directory,&rdquo; and a
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">..</span><span class="hspace"></span></span> as a path element means &ldquo;the parent directory.&rdquo;
Up-directory path elements (i.e., <span class="RktInBG"><span class="hspace"></span><span class="RktIn">..</span><span class="hspace"></span></span>) immediately
after a drive are ignored.</p></li><li><p>A pathname that starts
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">machine</span>&#8250;</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">volume</span>&#8250;</span>
(where a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span> can replace any <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>) is a UNC
path, and the starting
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">machine</span>&#8250;</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">volume</span>&#8250;</span>
counts as the drive specifier.</p></li><li><p>Normally, a path element cannot contain any of the following
characters:</p><blockquote class="SCentered"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">&lt;</span><span class="hspace"></span></span> <span class="RktInBG"><span class="hspace"></span><span class="RktIn">&gt;</span><span class="hspace"></span></span> <span class="RktInBG"><span class="hspace"></span><span class="RktIn">:</span><span class="hspace"></span></span> <span class="RktInBG"><span class="hspace"></span><span class="RktIn">"</span><span class="hspace"></span></span> <span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span> <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span> <span class="RktInBG"><span class="hspace"></span><span class="RktIn">|</span><span class="hspace"></span></span></p></blockquote><p>Except for <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>, path elements containing these
characters can be accessed using a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span> path
(assuming that the underlying filesystem allows the
characters).</p></li><li><p>In a pathname that starts
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">letter</span>&#8250;</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">:\</span><span class="hspace"></span></span>, the
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">letter</span>&#8250;</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">:\</span><span class="hspace"></span></span> prefix
counts as the path&rsquo;s drive, as long as the path does not both
contain non-drive elements and end with two consecutive
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s, and as long as the path contains no sequence
of three or more <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s. Two <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s can
appear in place of the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span> before
<span class="sroman">&#8249;<span style="font-style: italic">letter</span>&#8250;</span>. A <span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span> cannot be used in place of a
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span> (but <span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span>s can be used in element names,
though the result typically does not name an actual directory
or file).</p></li><li><p>In a pathname that starts
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\UNC\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">machine</span>&#8250;</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">volume</span>&#8250;</span>,
the
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\UNC\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">machine</span>&#8250;</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">volume</span>&#8250;</span>
prefix counts as the path&rsquo;s drive, as long as the path does
not end with two consecutive <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s, and as long as
the path contains no sequence of three or more
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s. Two <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s can appear in place of
the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span> before <span class="RktInBG"><span class="hspace"></span><span class="RktIn">UNC</span><span class="hspace"></span></span>, the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s
after <span class="RktInBG"><span class="hspace"></span><span class="RktIn">UNC</span><span class="hspace"></span></span>, and/or the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s
after<span class="sroman">&#8249;<span style="font-style: italic">machine</span>&#8250;</span>.  The letters in the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">UNC</span><span class="hspace"></span></span> part
can be uppercase or lowercase, and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span> cannot be used
in place of <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s (but <span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span> can be used in
element names).</p></li><li><p><span style="font-style: italic">Racket-specific:</span> A pathname that starts
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\REL\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">element</span>&#8250;</span> or
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\REL\\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">element</span>&#8250;</span> is a relative
path, as long as the path does not end with two consecutive
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s, and as long as the path contains no sequence of
three or more <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s. This Racket-specific path form
supports relative paths with elements that are not normally
expressible in Windows paths (e.g., a final element that ends
in a space). The <span class="RktInBG"><span class="hspace"></span><span class="RktIn">REL</span><span class="hspace"></span></span> part must be exactly the three
uppercase letters, and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span>s cannot be used in place
of <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s. If the path starts
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\REL\..</span><span class="hspace"></span></span>  then for as long as the
path continues with repetitions of <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\..</span><span class="hspace"></span></span>,
each element counts as an up-directory element; a single
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span> must be used to separate the up-directory
elements. As soon as a second <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span> is used to separate
the elements, or as soon as a non-<span class="RktInBG"><span class="hspace"></span><span class="RktIn">..</span><span class="hspace"></span></span>  element is
encountered, the remaining elements are all literals (never
up-directory elements). When a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\REL</span><span class="hspace"></span></span> path
value is converted to a string (or when the path value is
written or displayed), the string does not contain the
starting <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\REL</span><span class="hspace"></span></span> or the immediately following
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s; converting a path value to a byte string
preserves the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\REL</span><span class="hspace"></span></span> prefix.</p></li><li><p><span style="font-style: italic">Racket-specific:</span> A pathname that starts
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\RED\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">element</span>&#8250;</span> or
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\RED\\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">element</span>&#8250;</span> is a
drive-relative path, as long as the path does not end with two
consecutive <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s, and as long as the path contains
no sequence of three or more <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s. This
Racket-specific path form supports drive-relative paths (i.e.,
absolute given a drive) with elements that are not normally
expressible in Windows paths. The <span class="RktInBG"><span class="hspace"></span><span class="RktIn">RED</span><span class="hspace"></span></span> part must be
exactly the three uppercase letters, and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span>s cannot
be used in place of <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s. Unlike
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\REL</span><span class="hspace"></span></span> paths, a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">..</span><span class="hspace"></span></span> element is always
a literal path element. When a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\RED</span><span class="hspace"></span></span> path
value is converted to a string (or when the path value is
written or displayed), the string does not contain the
starting <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\RED</span><span class="hspace"></span></span> and it contains a single
starting <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>; converting a path value to a byte
string preserves the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\RED</span><span class="hspace"></span></span> prefix.</p></li></ul><p>Three additional Racket-specific rules provide meanings to character
sequences that are otherwise ill-formed as Windows paths:</p><ul><li><p><span style="font-style: italic">Racket-specific:</span> In a pathname of the form
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">any</span>&#8250;</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\</span><span class="hspace"></span></span> where
<span class="sroman">&#8249;<span style="font-style: italic">any</span>&#8250;</span> is any non-empty sequence of characters other
than <span class="sroman">&#8249;<span style="font-style: italic">letter</span>&#8250;</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">:</span><span class="hspace"></span></span> or
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">letter</span>&#8250;</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">:</span><span class="hspace"></span></span>, the entire path
counts as the path&rsquo;s (non-existent) drive.</p></li><li><p><span style="font-style: italic">Racket-specific:</span> In a pathname of the form
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">any</span>&#8250;</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">elements</span>&#8250;</span>,
where <span class="sroman">&#8249;<span style="font-style: italic">any</span>&#8250;</span> is any non-empty sequence of characters
and <span class="sroman">&#8249;<span style="font-style: italic">elements</span>&#8250;</span> is any sequence that does not start
with a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>, does not end with two <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s,
and does not contain a sequence of three <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s, then
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span><span class="sroman">&#8249;<span style="font-style: italic">any</span>&#8250;</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\</span><span class="hspace"></span></span> counts as the
path&rsquo;s (non-existent) drive.</p></li><li><p><span style="font-style: italic">Racket-specific:</span> In a pathname that starts <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span> and
does not match any of the patterns from the preceding bullets,
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span> counts as the path&rsquo;s (non-existent)
drive.</p></li></ul><p>Outside of Racket, except for <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span> paths, pathnames are
 typically limited to 259 characters. Racket internally converts
 pathnames to <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span> form as needed to avoid this
 limit. The operating system cannot access files through
 <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span> paths that are longer than 32,000 characters or
 so.</p><p>Where the above descriptions says &ldquo;character,&rdquo; substitute &ldquo;byte&rdquo;
for interpreting byte strings as paths. The encoding of Windows paths
into bytes preserves ASCII characters, and all special characters
mentioned above are ASCII, so all of the rules are the same.</p><p>Beware that the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span> path separator is an escape character
in Racket strings. Thus, the path <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\REL\..\\..</span><span class="hspace"></span></span>  as
a string must be written <span class="RktVal">"\\\\?\\REL\\..\\\\.."</span>.</p><p>A path that ends with a directory separator syntactically refers to a
directory.  In addition, a path syntactically refers to a directory if
its last element is a same-directory or up-directory indicator (not
quoted by a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span> form), or if it refers to a root.</p><p>Even on variants of Windows that support symbolic links, up-directory
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">..</span><span class="hspace"></span></span> indicators in a path are resolved syntactically, not
sensitive to links. For example, if a path ends with <span class="RktInBG"><span class="hspace"></span><span class="RktIn">d\..\f</span><span class="hspace"></span></span>
and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">d</span><span class="hspace"></span></span> refers to a symbolic link that references a directory
with a different parent than <span class="RktInBG"><span class="hspace"></span><span class="RktIn">d</span><span class="hspace"></span></span>, the path nevertheless refers
to <span class="RktInBG"><span class="hspace"></span><span class="RktIn">f</span><span class="hspace"></span></span> in the same directory as <span class="RktInBG"><span class="hspace"></span><span class="RktIn">d</span><span class="hspace"></span></span>. A relative-path
link is parsed as if prefixed with <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\REL</span><span class="hspace"></span></span> paths, except
that <span class="RktInBG"><span class="hspace"></span><span class="RktIn">..</span><span class="hspace"></span></span>  and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span> elements are allowed throughout the
path, and any number of redundant <span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span> separators are allowed.</p><p>Windows paths are <a href="pathutils.html#%28tech._cleanse%29" data-pltdoc="x">cleanse</a>d as follows: In paths that start
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span>, redundant <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s are removed, an extra
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span> is added in a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\REL</span><span class="hspace"></span></span> if an extra one is
not already present to separate up-directory indicators from literal
path elements, and an extra <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span> is similarly added after
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\RED</span><span class="hspace"></span></span> if an extra one is not already present.
For other paths, multiple <span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span>s and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s are
converted to single <span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span>s or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span> (except at the beginning of a shared
folder name), and a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span> is inserted after the colon in a drive
specification if it is missing.</p><p>For <span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._bytes-~3epath-element%29%29" class="RktValLink" data-pltdoc="x">bytes-&gt;path-element</a></span><span class="stt"> </span><span class="RktVar">bstr</span><span class="RktPn">)</span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span>s, colons,
trailing dots, trailing whitespace, and special device names (e.g.,
&ldquo;aux&rdquo;) in <span class="RktVar">bstr</span> are encoded as a literal part of the path
element by using a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\REL</span><span class="hspace"></span></span> prefix.  The <span class="RktSym">bstr</span>
argument must not contain a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>, otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p>For <span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-element-~3ebytes%29%29" class="RktValLink" data-pltdoc="x">path-element-&gt;bytes</a></span><span class="stt"> </span><span class="RktVar">path</span><span class="RktPn">)</span> or
<span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._path-element-~3estring%29%29" class="RktValLink" data-pltdoc="x">path-element-&gt;string</a></span><span class="stt"> </span><span class="RktVar">path</span><span class="RktPn">)</span>, if the byte-string form of
<span class="RktVar">path</span> starts with a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\REL</span><span class="hspace"></span></span>, the prefix is not
included in the result.</p><p>For <span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._build-path%29%29" class="RktValLink" data-pltdoc="x">build-path</a></span><span class="stt"> </span><span class="RktVar">base-path</span><span class="stt"> </span><span class="RktVar">sub-path</span><span class="stt"> </span><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fstxcase-scheme..rkt%29._......%29%29" class="RktStxLink" data-pltdoc="x">...</a></span><span class="RktPn">)</span>, trailing spaces
and periods are removed from the last element of <span class="RktVar">base-path</span>
and all but the last <span class="RktVar">sub-path</span> (unless the element consists of
only spaces and periods), except for those that start with
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span>. If <span class="RktVar">base-path</span> starts <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span>,
then after each non-<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\REL\</span><span class="hspace"></span></span> and
non-<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\RED\</span><span class="hspace"></span></span> <span class="RktVar">sub-path</span> is added, all
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span>s in the addition are converted to <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s,
multiple consecutive <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>s are converted to a single
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>, added <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span> elements are removed, and added
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">..</span><span class="hspace"></span></span> elements are removed along with the preceding element;
these conversions are not performed on the original <span class="RktVar">base-path</span>
part of the result or on any <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\REL\</span><span class="hspace"></span></span> or
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\RED\</span><span class="hspace"></span></span> or <span class="RktVar">sub-path</span>.  If a
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\REL\</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\RED\</span><span class="hspace"></span></span>
<span class="RktVar">sub-path</span> is added to a non-<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span>
<span class="RktVar">base-path</span>, the <span class="RktVar">base-path</span> (with any additions up
to the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\REL\</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\RED\</span><span class="hspace"></span></span>
<span class="RktVar">sub-path</span>) is simplified and converted to a
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span> path.  In other cases, a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span> may be
added or removed before combining paths to avoid changing the root
meaning of the path (e.g., combining <span class="RktInBG"><span class="hspace"></span><span class="RktIn">//x</span><span class="hspace"></span></span> and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">y</span><span class="hspace"></span></span>
produces <span class="RktInBG"><span class="hspace"></span><span class="RktIn">/x/y</span><span class="hspace"></span></span>, because <span class="RktInBG"><span class="hspace"></span><span class="RktIn">//x/y</span><span class="hspace"></span></span> would be a UNC path
instead of a drive-relative path).</p><p>For <span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._simplify-path%29%29" class="RktValLink" data-pltdoc="x">simplify-path</a></span><span class="stt"> </span><span class="RktVar">path</span><span class="stt"> </span><span class="RktVar">use-filesystem?</span><span class="RktPn">)</span>, <span class="RktVar">path</span> is
expanded, and if <span class="RktVar">path</span> does not start with
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span>, trailing spaces and periods are removed, a
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span> is inserted after the colon in a drive specification if it
is missing, and a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span> is inserted after <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span>
as a root if there are elements and no extra <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>
already. Otherwise, if no indicators or redundant separators are in
<span class="RktVar">path</span>, then <span class="RktVar">path</span> is returned.</p><p>For <span class="RktPn">(</span><span class="RktSym"><a href="Manipulating_Paths.html#%28def._%28%28quote._~23~25kernel%29._split-path%29%29" class="RktValLink" data-pltdoc="x">split-path</a></span><span class="stt"> </span><span class="RktVar">path</span><span class="RktPn">)</span> producing <span class="RktVar">base</span>,
<span class="RktVar">name</span>, and <span class="RktVar">must-be-dir?</span>, splitting a path that does
not start with <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span> can produce parts that start with
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span>. For example, splitting <span class="RktInBG"><span class="hspace"></span><span class="RktIn">C:/x~/aux/</span><span class="hspace"></span></span>
produces <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\C:\x~\</span><span class="hspace"></span></span> and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\REL\\aux</span><span class="hspace"></span></span>;
the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\?\</span><span class="hspace"></span></span> is needed in these cases to preserve a
trailing space after <span class="RktInBG"><span class="hspace"></span><span class="RktIn">x</span><span class="hspace"></span></span> and to avoid referring to the AUX
device instead of an <span class="stt">"aux"</span> file.</p><div class="navsetbottom"><span class="navleft"><form class="searchform"><input class="searchbox" style="color: #888;" type="text" value="...search manuals..." title="Enter a search string to search the manuals" onkeypress="return DoSearchKey(event, this, &quot;6.1&quot;, &quot;../&quot;);" onfocus="this.style.color=&quot;black&quot;; this.style.textAlign=&quot;left&quot;; if (this.value == &quot;...search manuals...&quot;) this.value=&quot;&quot;;" onblur="if (this.value.match(/^ *$/)) { this.style.color=&quot;#888&quot;; this.style.textAlign=&quot;center&quot;; this.value=&quot;...search manuals...&quot;; }"/></form>&nbsp;&nbsp;<a href="../index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot(&quot;6.1&quot;);">top</a></span><span class="navright">&nbsp;&nbsp;<a href="unixpaths.html" title="backward to &quot;15.1.3 Unix and Mac OS X Paths&quot;" data-pltdoc="x">&larr; prev</a>&nbsp;&nbsp;<a href="pathutils.html" title="up to &quot;15.1 Paths&quot;" data-pltdoc="x">up</a>&nbsp;&nbsp;<a href="Filesystem.html" title="forward to &quot;15.2 Filesystem&quot;" data-pltdoc="x">next &rarr;</a></span>&nbsp;</div></div></div><div id="contextindicator">&nbsp;</div></body></html>