about summary refs log tree commit diff
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>1999-09-03 15:56:04 +0000
committerTanaka Akira <akr@users.sourceforge.net>1999-09-03 15:56:04 +0000
commitcef45cd543c1c8ac2da327803ac878a87435329f (patch)
tree6d1a8fa46efe6ab9e4f5876a79f13e5e4998f6c7
parent051884d7fd21e87ee1f3d5305ac76c81102853ab (diff)
downloadzsh-cef45cd543c1c8ac2da327803ac878a87435329f.tar.gz
zsh-cef45cd543c1c8ac2da327803ac878a87435329f.tar.xz
zsh-cef45cd543c1c8ac2da327803ac878a87435329f.zip
zsh-workers/7639
-rw-r--r--Doc/Zsh/expn.yo8
-rw-r--r--Src/glob.c6
2 files changed, 11 insertions, 3 deletions
diff --git a/Doc/Zsh/expn.yo b/Doc/Zsh/expn.yo
index 7baa42b8c..b548770a2 100644
--- a/Doc/Zsh/expn.yo
+++ b/Doc/Zsh/expn.yo
@@ -1107,9 +1107,13 @@ If the tt(KSH_GLOB) option is set, then a
 the `tt(LPAR())' is treated specially, as detailed below. The option
 tt(SH_GLOB) prevents bare parentheses from being used in this way, though
 the tt(KSH_GLOB) option is still available.
+
 Note that grouping cannot extend over multiple directories: it is an error
-to have a `tt(/)' within a group (this only applies for patterns which
-match filenames).
+to have a `tt(/)' within a group (this only applies for patterns used in
+filename generation).  There is one exception:  a group of the form
+tt(LPAR())var(pat)tt(/RPAR()#) appearing as a complete path segment can
+match a sequence of directories.  For example, tt(foo/(a*/)#bar) matches
+tt(foo/bar), tt(foo/any/bar), tt(foo/any/anyother/bar), and so on).
 )
 item(var(x)tt(|)var(y))(
 Matches either var(x) or var(y).
diff --git a/Src/glob.c b/Src/glob.c
index 68cd81b01..cbfd699c2 100644
--- a/Src/glob.c
+++ b/Src/glob.c
@@ -243,7 +243,11 @@ statfullpath(const char *s, struct stat *st, int l)
 	  "BUG: statfullpath(): pathname too long");
     strcpy(buf, pathbuf + pathbufcwd);
     strcpy(buf + pathpos - pathbufcwd, s);
-    if (!*s) {
+    if (!*s && *buf) {
+	/*
+	 * Don't add the '.' if the path so far is empty, since
+	 * then we get bogus empty strings inserted as files.
+	 */
 	buf[pathpos - pathbufcwd] = '.';
 	buf[pathpos - pathbufcwd + 1] = '\0';
 	l = 0;