- (let ((dir #+cmu(unix:open-dir directory)
- #+sbcl(sb-posix:opendir directory)))
- (unwind-protect
- (loop
- as filename = #+cmu(unix:read-dir dir)
- #+sbcl(let ((dirent (sb-posix:readdir dir)))
- (unless (sb-grovel::foreign-nullp dirent)
- (sb-posix:dirent-name dirent)))
- while filename
- unless (or (equal filename ".") (equal filename ".."))
- do (let* ((pathname (format nil "~A~A" directory filename))
- (directory-p
- #+cmu(eq (unix:unix-file-kind pathname) :directory)
- #+sbcl(sb-posix:s-isdir (sb-posix:stat-mode (sb-posix:stat pathname)))))
- (list-store-append store
- (vector
- filename
- (if directory-p folder-pixbuf file-pixbuf)
- directory-p))))
- #+cmu(unix:close-dir dir)
- #+sbcl(sb-posix:closedir dir))))
+ (let ((dir-listing
+ (mapcar #'namestring
+ (nconc
+ (directory (format nil "~A*" directory))
+ #+clisp(directory (format nil "~A*/" directory))))))
+ (loop
+ for pathname in dir-listing
+ do (let* ((directory-p
+ (char= #\/ (char pathname (1- (length pathname)))))
+ (filename
+ (subseq pathname
+ (length directory)
+ (if directory-p
+ (1- (length pathname))
+ (length pathname)))))
+ (list-store-append store
+ (vector
+ filename
+ (if directory-p folder-pixbuf file-pixbuf)
+ directory-p))))))