Update of /project/osicat/cvsroot/src
In directory common-lisp.net:/tmp/cvs-serv19603
Modified Files:
osicat.lisp packages.lisp
Log Message:
Shadow directory
Date: Mon Mar 8 01:41:32 2004
Author: nsiivola
Index: src/osicat.lisp
diff -u src/osicat.lisp:1.16 src/osicat.lisp:1.17
--- src/osicat.lisp:1.16 Sun Feb 29 18:41:50 2004
+++ src/osicat.lisp Mon Mar 8 01:41:32 2004
@@ -71,17 +71,25 @@
(defun relative-pathname-p (pathspec)
(not (eq :absolute (car (pathname-directory pathspec)))))
-(defun absolute-pathname
- (pathspec &optional (default *default-pathname-defaults*))
- (if (relative-pathname-p pathspec)
- (let ((tmp (merge-pathnames
- pathspec
- (make-pathname :name nil :type nil :version nil
- :defaults default))))
- (if (relative-pathname-p tmp)
- (merge-pathnames tmp (current-directory))
- tmp))
- pathspec))
+(defun absolute-pathname (pathspec &optional (default *default-pathname-defaults*))
+ (if (relative-pathname-p pathspec)
+ (let ((tmp (merge-pathnames
+ pathspec
+ (make-pathname :name nil :type nil :version nil
+ :defaults default))))
+ (if (relative-pathname-p tmp)
+ (merge-pathnames tmp (current-directory))
+ tmp))
+ pathspec))
+
+(defun escape-wild-name (name)
+ (declare (simple-string name))
+ (let (stack)
+ (loop for char across name
+ when (member char '(#\* #\[))
+ do (push #\\ stack)
+ do (push char stack))
+ (coerce (nreverse stack) 'simple-string)))
(defun unmerge-pathnames
(pathspec &optional (known *default-pathname-defaults*))
@@ -107,8 +115,6 @@
dir
(cons :relative dir)))))
(let ((path (absolute-pathname pathspec)))
- (when (wild-pathname-p path)
- (error "Pathname is wild: ~S." path))
(with-cstring (cfile (namestring path))
(let ((abspath (if (eq :directory (c-file-kind cfile t))
(make-pathname :name nil :type nil
@@ -170,13 +176,13 @@
(let ((entry (readdir ,dp)))
(if (null-pointer-p entry)
nil
- (let ((name
+ (let ((string
(convert-from-cstring
(osicat-dirent-name entry))))
- (if (member name '("." "..")
+ (if (member string '("." "..")
:test #'string=)
(,one-iter)
- (normpath name)))))))
+ (normpath (escape-wild-name string))))))))
(macrolet ((,iterator ()
`(,',one-iter)))
(setf ,dp (opendir ,cdir))
Index: src/packages.lisp
diff -u src/packages.lisp:1.6 src/packages.lisp:1.7
--- src/packages.lisp:1.6 Sun Feb 29 18:43:09 2004
+++ src/packages.lisp Mon Mar 8 01:41:32 2004
@@ -35,6 +35,9 @@
When a relative pathname designator is used as a directory designator
it is first resolved agains *default-pathname-default*, and then
against the current directory. (With MERGE-PATHNAMES in both cases.)")
+ (:shadow
+ ;; DIRECTORY is used as constant internally. Let's not confuse other packages.
+ #:directory)
(:export
;;; Evironment
#:environment