[Git][cmucl/cmucl][master] 2 commits: Fix: directory followed symlinks with :follow-links nil
Raymond Toy
rtoy at common-lisp.net
Sun Oct 2 16:48:12 UTC 2016
Raymond Toy pushed to branch master at cmucl / cmucl
Commits:
17499591 by Elias Pipping at 2016-09-28T21:21:52+00:00
Fix: directory followed symlinks with :follow-links nil
- - - - -
4bf2062f by Raymond Toy at 2016-10-02T16:48:11+00:00
Merge branch 'master' into 'master'
Fix: directory followed symlinks with :follow-links nil
I'm on Linux. I'm looking at a directory that contains both physical directories and symbolic links to directories.
### What I would expect:
```common-lisp
(directory "/path/to/dir/*.*" :check-for-subdirs t :follow-links t :truenamep nil)
```
will show both (because it will show everything in that directory) and mark both types as directories with trailing slashes.
```common-lisp
(directory "/path/to/dir/*.*" :check-for-subdirs t :follow-links nil :truenamep nil)
```
will again show all files but only add trailing slashes to the physical subdirectories.
### What actually happens
Both commands give me the same output. That is because `directory` calls `unix:unix-file-kind` to categorise files into directory/link/etc., which internally calls `stat`. It will only use `lstat` if the second, optional argument is passed as **t**. In default mode (the way it currently is) symlinks to directories will be assigned the type :directory regardless of the flags passed to `directory`.
I believe the change contained in this merge request is thus the correct fix.
See merge request !15
- - - - -
1 changed file:
- src/code/filesys.lisp
Changes:
=====================================
src/code/filesys.lisp
=====================================
--- a/src/code/filesys.lisp
+++ b/src/code/filesys.lisp
@@ -1125,7 +1125,7 @@ optionally keeping some of the most recent old versions."
(let ((*ignore-wildcards* t))
(mapcar #'(lambda (name)
(let ((name (if (and check-for-subdirs
- (eq (unix:unix-file-kind name)
+ (eq (unix:unix-file-kind name (not follow-links))
:directory))
(concatenate 'string name "/")
name)))
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/compare/3d18025d13e030958e44641c7c4cec18408831cc...4bf2062f18694d662f79d25c04989f61eab87460
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/cmucl-cvs/attachments/20161002/2cb63e93/attachment.html>
More information about the cmucl-cvs
mailing list