X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ftarget-pathname.lisp;h=6f8f1a0c2fff67dcc8f7ad82409bf981dd503f59;hb=3106aee96a20d1a76a114e504bc2931f8196cace;hp=bff90db738ecd89ca829e4333ab9b0ed88787145;hpb=5a7debb7fa6c532ffc4ff41f61352336d9a93697;p=sbcl.git diff --git a/src/code/target-pathname.lisp b/src/code/target-pathname.lisp index bff90db..6f8f1a0 100644 --- a/src/code/target-pathname.lisp +++ b/src/code/target-pathname.lisp @@ -27,6 +27,7 @@ (unparse-file #'unparse-unix-file) (unparse-enough #'unparse-unix-enough) (unparse-directory-separator "/") + (simplify-namestring #'simplify-unix-namestring) (customary-case :lower)))) (defvar *unix-host* (make-unix-host)) (defun make-unix-host-load-form (host) @@ -45,8 +46,9 @@ (unparse-file #'unparse-win32-file) (unparse-enough #'unparse-win32-enough) (unparse-directory-separator "\\") + (simplify-namestring #'simplify-win32-namestring) (customary-case :upper)))) -(defvar *win32-host* (make-win32-host)) +(defparameter *win32-host* (make-win32-host)) (defun make-win32-host-load-form (host) (declare (ignore host)) '*win32-host*) @@ -525,12 +527,10 @@ the operating system native pathname conventions." (error "~S is not allowed as a directory component." piece)))) (results))) (simple-string - `(:absolute - ,(maybe-diddle-case directory diddle-case))) + `(:absolute ,(maybe-diddle-case directory diddle-case))) (string `(:absolute - ,(maybe-diddle-case (coerce directory 'simple-string) - diddle-case))))) + ,(maybe-diddle-case (coerce directory 'simple-string) diddle-case))))) (defun make-pathname (&key host (device nil devp) @@ -858,7 +858,8 @@ a host-structure or string." (let* ((end (%check-vector-sequence-bounds namestr start end))) (multiple-value-bind (new-host device directory file type version) (cond - (host (funcall (host-parse-native host) namestr start end)) + (host + (funcall (host-parse-native host) namestr start end)) ((pathname-host defaults) (funcall (host-parse-native (pathname-host defaults)) namestr @@ -1269,8 +1270,9 @@ PARSE-NAMESTRING." (frob %pathname-name) (frob %pathname-type) (if (eq from-host *unix-host*) - (if (eq (%pathname-version to) :wild) - (%pathname-version from) + (if (or (eq (%pathname-version to) :wild) + (eq (%pathname-version to) nil)) + (%pathname-version source) (%pathname-version to)) (frob %pathname-version))))))))) @@ -1282,6 +1284,12 @@ PARSE-NAMESTRING." ;;;; utilities +(defun simplify-namestring (namestring &optional host) + (funcall (host-simplify-namestring + (or host + (pathname-host (sane-default-pathname-defaults)))) + namestring)) + ;;; Canonicalize a logical pathname word by uppercasing it checking that it ;;; contains only legal characters. (defun logical-word-or-lose (word) @@ -1302,7 +1310,7 @@ PARSE-NAMESTRING." is not alphanumeric or hyphen:~% ~S" :args (list ch) :namestring word :offset i)))) - (coerce word 'base-string))) + (coerce word 'string))) ; why not simple-string? ;;; Given a logical host or string, return a logical host. If ERROR-P ;;; is NIL, then return NIL when no such host exists. @@ -1682,3 +1690,4 @@ PARSE-NAMESTRING." ;; FIXME: now that we have a SYS host that the system uses, it ;; might be cute to search in "SYS:TRANSLATIONS;.LISP" (error "logical host ~S not found" host))) +