Merging a "plain file" path on non-Windows gets an :UNSPECIFIC DEVICE.

If the defaults contain a JAR-PATHNAME, and the pathname to be be
merged does not have a specified DEVICE, a specified HOST, and doesn't
contain a relative DIRECTORY, then on non-MSDOG, set its device to
:UNSPECIFIC.
parent 49136716
......@@ -51,6 +51,20 @@ implementation due to the following known issues:
do not match the specification.
\item The \code{TIME} form does not return a proper \code{VALUES}
environment to its caller.
\item When merging pathnames and the defaults point to a \code{JAR-PATHNAME},
we set the \code{DEVICE} of the result to \code{:UNSPECIFIC} if the pathname to be
be merged does not contain a specified \code{DEVICE}, does not contain a
specified \code{HOST}, does contain a relative \code{DIRECTORY}, and we are
not running on a \textsc{MSFT} Windows platform.\footnote{The intent of this
rather arcane sounding deviation from conformance is so that the
result of a merge won't fill in a DEVICE with the wrong "default
device for the host" in the sense of the fourth paragraph in the
[CLHS description of MERGE-PATHNAMES][2] (the paragraph beginning
"If the PATHNAME explicitly specifies a host and not a device…").
A future version of the implementation may return to conformance
by using the \code{HOST} value to reflect the type explicitly.
}
\end{itemize}
Somewhat confusingly, this statement of non-conformance in the
......
......@@ -1985,7 +1985,24 @@ public class Pathname extends LispObject {
result.device = p.device;
} else {
if (!p.isURL()) {
result.device = d.device;
// If the defaults contain a JAR-PATHNAME, and the
// pathname to be be merged does not have a specified
// DEVICE, a specified HOST, and doesn't contain a
// relative DIRECTORY, then on non-MSDOG, set its
// device to :UNSPECIFIC.
if (pathname.host == NIL
&& pathname.device == NIL
&& d.isJar()
&& !Utilities.isPlatformWindows) {
if (pathname.directory != NIL
&& pathname.directory.car() == Keyword.ABSOLUTE) {
result.device = Keyword.UNSPECIFIC;
} else {
result.device = d.device;
}
} else {
result.device = d.device;
}
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment