~ chicken-core (chicken-5) 1cf1f95b8762a385647cbae839882cf00b03430a
commit 1cf1f95b8762a385647cbae839882cf00b03430a
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Mon Oct 25 02:05:48 2010 -0400
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Mon Oct 25 02:05:48 2010 -0400
find-files did not respect follow-symlinks; fixed brokenness in delete-directory
diff --git a/posix-common.scm b/posix-common.scm
index 40eb2293..07e8efb1 100644
--- a/posix-common.scm
+++ b/posix-common.scm
@@ -246,10 +246,17 @@ EOF
(##sys#check-string name 'delete-directory)
(let ((name (##sys#expand-home-path name)))
(if recursive
- (let ((files (find-files name))) ; relies on `find-files' lists dir-contents before dir
+ (let ((files (find-files ; relies on `find-files' to list dir-contents before dir
+ name
+ dotfiles: #t
+ follow-symlinks: #f)))
(for-each
(lambda (f)
- ((if (directory? f) rmdir delete-file) f))
+ ((case (file-type f)
+ ((symbolic-link) delete-file)
+ ((directory) rmdir)
+ (else delete-file))
+ f))
files)
(rmdir name))
(rmdir name)))))
@@ -326,6 +333,8 @@ EOF
(rest (##sys#slot fs 1)) )
(cond ((directory? f)
(cond ((member (pathname-file f) '("." "..")) (loop rest r))
+ ((and (symbolic-link? f) (not follow))
+ (loop rest (if (pproc f) (action f r) r)))
((lproc f)
(loop rest
(fluid-let ((depth (fx+ depth 1)))
diff --git a/tests/runtests.sh b/tests/runtests.sh
index 243a421a..563a7db3 100644
--- a/tests/runtests.sh
+++ b/tests/runtests.sh
@@ -226,6 +226,11 @@ $interpret -bnq path-tests.scm
echo "======================================== posix tests ..."
$compile posix-tests.scm
./a.out
+rm -fr tmpdir
+mkdir tmpdir
+touch tmpdir/.dotfile
+ln -s /usr tmpdir/symlink
+$interpret -R posix -e '(delete-directory "tmpdir" #t)'
echo "======================================== regular expression tests ..."
$interpret -bnq test-irregex.scm
Trap