X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ffilesys.lisp;h=8817dcf3a2263d24f7631eed1740f8224aa5b1e3;hb=f2942b56a5ed1b60b730b387ee2b9e40c8cc28fb;hp=d1933d614480e33bfe3f69754872cf384ffef770;hpb=9df2abae0a60d757448f06f0cc90213ec9fa775b;p=sbcl.git diff --git a/src/code/filesys.lisp b/src/code/filesys.lisp index d1933d6..8817dcf 100644 --- a/src/code/filesys.lisp +++ b/src/code/filesys.lisp @@ -296,6 +296,22 @@ (sb!unix:unix-stat filename) (declare (ignore ino nlink gid rdev size atime #!+win32 uid)) + #!+win32 + ;; On win32, stat regards UNC pathnames and device names as + ;; nonexisting, so we check once more with the native API. + (unless existsp + (setf existsp + (let ((handle (sb!win32:create-file + filename 0 0 nil + sb!win32:file-open-existing + 0 0))) + (when (/= -1 handle) + (setf mode + (or mode + (if (logbitp 4 + (sb!win32:get-file-attributes filename)) + sb!unix:s-ifdir 0))) + (progn (sb!win32:close-handle handle) t))))) (if existsp (case query-for (:existence (nth-value @@ -991,7 +1007,7 @@ Experimental: interface subject to change." ((or (null one) (eq one :unspecific)) two) ((or (null two) (eq two :unspecific)) one) ((string= one two) one) - (t nil))) + (t (return-from pathname-intersections nil)))) (intersect-directory (one two) (aver (typep one '(or null (member :wild :unspecific) list))) (aver (typep two '(or null (member :wild :unspecific) list)))