Changeset 14178


Ignore:
Timestamp:
10/11/12 11:33:24 (11 years ago)
Author:
Mark Evenson
Message:

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.

Location:
trunk/abcl
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/doc/manual/abcl.tex

    r14175 r14178  
    5252\item The \code{TIME} form does not return a proper \code{VALUES}
    5353  environment to its caller.
     54\item When merging pathnames and the defaults point to a \code{JAR-PATHNAME},
     55  we set the \code{DEVICE} of the result to \code{:UNSPECIFIC} if the pathname to be
     56  be merged does not contain a specified \code{DEVICE}, does not contain a
     57  specified \code{HOST}, does contain a relative \code{DIRECTORY}, and we are
     58  not running on a \textsc{MSFT} Windows platform.\footnote{The intent of this
     59    rather arcane sounding deviation from conformance is so that the
     60    result of a merge won't fill in a DEVICE with the wrong "default
     61    device for the host" in the sense of the fourth paragraph in the
     62    [CLHS description of MERGE-PATHNAMES][2] (the paragraph beginning
     63    "If the PATHNAME explicitly specifies a host and not a device
").
     64    A future version of the implementation may return to conformance
     65    by using the \code{HOST} value to reflect the type explicitly.
     66  }
     67
    5468\end{itemize}
    5569
  • trunk/abcl/src/org/armedbear/lisp/Pathname.java

    r14177 r14178  
    19861986        } else {
    19871987            if (!p.isURL()) {
    1988                 result.device = d.device;
     1988                // If the defaults contain a JAR-PATHNAME, and the
     1989                // pathname to be be merged does not have a specified
     1990                // DEVICE, a specified HOST, and doesn't contain a
     1991                // relative DIRECTORY, then on non-MSDOG, set its
     1992                // device to :UNSPECIFIC.
     1993                if (pathname.host == NIL
     1994                    && pathname.device == NIL
     1995                    && d.isJar()
     1996                    && !Utilities.isPlatformWindows) {
     1997                    if (pathname.directory != NIL
     1998                        && pathname.directory.car() == Keyword.ABSOLUTE) {
     1999                        result.device = Keyword.UNSPECIFIC;
     2000                    } else {
     2001                        result.device = d.device;
     2002                    }
     2003                } else {
     2004                    result.device = d.device;
     2005                }
    19892006            }
    19902007        }
Note: See TracChangeset for help on using the changeset viewer.