Ignore:
Timestamp:
02/22/10 16:32:45 (13 years ago)
Author:
Mark Evenson
Message:

DIRECTORY now works for jar pathnames.

The semantics for listing directories are a little bit different from
DIRECTORY on filesystems because directory entries in jar files
*always* have a trailing '/'.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/src/org/armedbear/lisp/directory.lisp

    r12502 r12503  
    5454   (entries (list-directory newpath)))
    5555    (if (not wild)
    56   entries (mapcan (lambda (entry)
    57                           (let* ((pathname (pathname entry))
    58                                  (directory (pathname-directory pathname))
    59                                  (rest-wild (cdr wild)))
    60                             (unless (pathname-name pathname)
    61             (when (pathname-match-p (first (last directory)) (if (eql (car wild) :wild) "*" (car wild)))
    62         (when rest-wild
    63           (setf directory (nconc directory rest-wild)))
    64           (list-directories-with-wildcards
    65          (make-pathname :directory directory
    66             :defaults newpath))))))
    67                         entries))))
     56  entries
     57        (mapcan (lambda (entry)
     58                  (let* ((pathname (pathname entry))
     59                         (directory (pathname-directory pathname))
     60                         (rest-wild (cdr wild)))
     61                    (unless (pathname-name pathname)
     62                      (when (pathname-match-p (first (last directory))
     63                                              (if (eql (car wild) :wild) "*" (car wild)))
     64                        (when rest-wild
     65                          (setf directory (nconc directory rest-wild)))
     66                        (list-directories-with-wildcards
     67                         (make-pathname :directory directory
     68                                        :defaults newpath))))))
     69                entries))))
    6870
    6971
     
    7476    (if (or (position #\* (namestring pathname))
    7577      (wild-pathname-p pathname))
    76         (let ((namestring (directory-namestring pathname)))
    77           (when (and namestring (> (length namestring) 0))
    78             (when (featurep :windows)
    79               (let ((device (pathname-device pathname)))
    80                 (when device
    81                   (setq namestring (concatenate 'string device ":" namestring)))))
    82             (let ((entries (list-directories-with-wildcards namestring))
    83                   (matching-entries ()))
    84               (dolist (entry entries)
    85                 (cond ((file-directory-p entry)
    86                        (when (pathname-match-p (file-namestring (pathname-as-file entry)) (file-namestring pathname))
    87                          (push entry matching-entries)))
    88                       ((pathname-match-p (file-namestring entry) (file-namestring pathname))
    89                        (push entry matching-entries))))
    90               matching-entries)))
     78        (if (pathname-jar-p pathname)
     79            (match-wild-jar-pathname pathname)
     80            (let ((namestring (directory-namestring pathname)))
     81              (when (and namestring (> (length namestring) 0))
     82                (when (featurep :windows)
     83                  (let ((device (pathname-device pathname)))
     84                    (when device
     85                      (setq namestring (concatenate 'string device ":" namestring)))))
     86                (let ((entries (list-directories-with-wildcards namestring))
     87                      (matching-entries ()))
     88                  (dolist (entry entries)
     89                    (cond ((file-directory-p entry)
     90                           (when (pathname-match-p (file-namestring (pathname-as-file entry)) (file-namestring pathname))
     91                             (push entry matching-entries)))
     92                          ((pathname-match-p (file-namestring entry) (file-namestring pathname))
     93                           (push entry matching-entries))))
     94                  matching-entries))))
    9195        ;; Not wild.
    9296        (let ((truename (probe-file pathname)))
Note: See TracChangeset for help on using the changeset viewer.