summaryrefslogtreecommitdiff
path: root/module/ice-9/ftw.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/ice-9/ftw.scm')
-rw-r--r--module/ice-9/ftw.scm19
1 files changed, 11 insertions, 8 deletions
diff --git a/module/ice-9/ftw.scm b/module/ice-9/ftw.scm
index 96422b5e4..6c9db27ee 100644
--- a/module/ice-9/ftw.scm
+++ b/module/ice-9/ftw.scm
@@ -538,26 +538,29 @@ of file names is sorted according to ENTRY<?, which defaults to
(define (enter? dir stat result)
(and stat (string=? dir name)))
- (define (leaf name stat result)
- (if (select? name)
- (and (pair? result) ; must have a "." entry
- (cons (basename name) result))
+ (define (visit basename result)
+ (if (select? basename)
+ (cons basename result)
result))
+ (define (leaf name stat result)
+ (and result
+ (visit (basename name) result)))
+
(define (down name stat result)
- (list "."))
+ (visit "." '()))
(define (up name stat result)
- (cons ".." result))
+ (visit ".." result))
(define (skip name stat result)
;; All the sub-directories are skipped.
- (cons (basename name) result))
+ (visit (basename name) result))
(define (error name* stat errno result)
(if (string=? name name*) ; top-level NAME is unreadable
result
- (cons (basename name*) result)))
+ (visit (basename name*) result)))
(and=> (file-system-fold enter? leaf down up skip error #f name stat)
(lambda (files)