~ chicken-core (chicken-5) 24ee7e193ff1d63f3d5d6e6a03a7e767de37007d


commit 24ee7e193ff1d63f3d5d6e6a03a7e767de37007d
Author:     zbigniew <zbigniewsz@gmail.com>
AuthorDate: Fri Jan 8 23:54:49 2010 -0600
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Sun Jan 10 13:16:01 2010 +0100

    Fix find-files on Windows to include directories
    
    Synchronized posixwin.scm's find-files with posixunix.scm.
    Makes find-files execute ACTION for directories, rather
    than skipping them.

diff --git a/posixwin.scm b/posixwin.scm
index be8d81e4..96555413 100644
--- a/posixwin.scm
+++ b/posixwin.scm
@@ -2034,8 +2034,9 @@ EOF
 	[pathname-file pathname-file]
 	[directory? directory?] )
     (lambda (dir pred . action-id-limit)
-      (let-optionals action-id-limit
-	  ([action (lambda (x y) (cons x y))] ; no eta reduction here - we want cons inlined.
+      (let-optionals
+	  action-id-limit
+	  ([action (lambda (x y) (cons x y))] ; we want cons inlined
 	   [id '()]
 	   [limit #f] )
 	(##sys#check-string dir 'find-files)
@@ -2045,7 +2046,7 @@ EOF
 		      [(fixnum? limit) (lambda _ (fx< depth limit))]
 		      [else limit] ) ]
 	       [pproc
-		(if (string? pred)
+		(if (or (string? pred) (regexp? pred))
 		    (lambda (x) (string-match pred x))
 		    pred) ] )
 	  (let loop ([fs (glob (make-pathname dir "*"))]
@@ -2059,8 +2060,9 @@ EOF
 			       [(lproc f)
 				(loop rest
 				      (fluid-let ([depth (fx+ depth 1)])
-					(loop (glob (make-pathname f "*")) r) ) ) ]
-			       [else (loop rest r)] ) ]
+					(loop (glob (make-pathname f "*"))
+					      (if (pproc f) (action f r) r)) ) ) ]
+			       [else (loop rest (if (pproc f) (action f r) r))] ) ]
 			[(pproc f) (loop rest (action f r))]
 			[else (loop rest r)] ) ) ) ) ) ) ) ) )
 
Trap