-(defun un-unspecific (value)
- "Convert :UNSPECIFIC to NIL."
- (if (eq value :unspecific) nil value))
-
-(defun canonicalize-directory-name (filename)
- (flet ((un-unspecific (value)
- (if (eq value :unspecific) nil value)))
- (let* ((path (pathname filename))
- (name (un-unspecific (pathname-name path)))
- (type (un-unspecific (pathname-type path)))
- (new-dir
- (cond ((and name type) (list (concatenate 'string name "." type)))
- (name (list name))
- (type (list type))
- (t nil))))
- (if new-dir
- (make-pathname
- :directory (append (un-unspecific (pathname-directory path))
- new-dir)
- :name nil :type nil :version nil :defaults path)
- path))))
-
-(defun probe-directory (filename)
- (let ((path (canonicalize-directory-name filename)))
- #+allegro (excl:probe-directory path)
- #+clisp (values
- (ignore-errors
- (#+lisp=cl ext:probe-directory #-lisp=cl lisp:probe-directory
- path)))
- #+(or cmu scl) (eq :directory (unix:unix-file-kind (namestring path)))
- #+lispworks (lw:file-directory-p path)
- #+sbcl (eq :directory (sb-unix:unix-file-kind (namestring path)))
- #-(or allegro clisp cmu lispworks sbcl scl)
- (probe-file path)))