Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: PATCH: 3.1.5: ``***'' symlink follow broken



Geoff Wing wrote:
> Heyla,
> ``***'' recursive globbing with symlink follow has been broken since at
> least 3.1.2 (maybe before):

It's amazing how the shell can totally break down without anyone
noticing.

> This patch is probably suboptimal (possibly wrong) and may encourage someone
> to make a real patch.

It works fine, but there's one minor tweak: you can still reject
things that aren't directories (the test correctly uses stat(), not
lstat(), so it may be a link to a directory), but the link count test
doesn't apply when the directory could contain only symbolic links.
The following patch is a replacement which does that.  I can't imagine
the difference is that important -- in fact, since the opendir() will
fail if the thing isn't a directory, it's hard to see that the stat()
at this point gains much at all.  Unless someone knows something
sinister about opendir()?

*** Src/glob.c.follow	Sun Nov  8 16:01:28 1998
--- Src/glob.c	Thu Nov 12 14:59:26 1998
***************
*** 365,372 ****
  	if (dirs) {
  	    struct stat st;
  	    stat(fn, &st);
! 	    /* a directory with subdirectories has link count greater than 2 */
! 	    if (!S_ISDIR(st.st_mode) || st.st_nlink == 2)
  		return;
  	}
  	lock = opendir(fn);
--- 365,374 ----
  	if (dirs) {
  	    struct stat st;
  	    stat(fn, &st);
! 	    /* a directory with subdirectories has link count greater than 2
! 	     * (unless the `subdirectory' is a symbolic link).
! 	     */
! 	    if (!S_ISDIR(st.st_mode) || (st.st_nlink == 2 && !q->follow))
  		return;
  	}
  	lock = opendir(fn);


-- 
Peter Stephenson <pws@xxxxxxxxxxxxxxxxx>       Tel: +39 050 844536
WWW:  http://www.ifh.de/~pws/
Dipartimento di Fisica, Via Buonarroti 2, 56100 Pisa, Italy



Messages sorted by: Reverse Date, Date, Thread, Author