summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2008-01-01 13:46:01 +1100
committerHerbert Xu <herbert@gondor.apana.org.au>2008-05-02 14:09:17 +0800
commit36f0fa8fcbc8c7b2b194addd29100fb40e73e4e9 (patch)
tree670befb7730b1ac930d02e7f2e3fdaf314ac4bf9 /src
parent[PARSER] Do not show prompts in expandstr (diff)
downloaddash-36f0fa8fcbc8c7b2b194addd29100fb40e73e4e9.tar.gz
dash-36f0fa8fcbc8c7b2b194addd29100fb40e73e4e9.zip
[EXPAND] Fix slash treatment in expmeta
The change

   [EXPAND] Do not quote back slashes in parameter expansions outside quotes

triggered a latent bug in expmeta where the forward slashes when preceded
by a blackslash weren't recognised as directory separators.  This was hidden
because a work-around was put in place for glob(3) which meant that we never
had any backslashes immediately before forward slashes.

This patch fixes the metaflag loop to recognise forward slashes even when
they follow a backslash.

Thanks to Daniel Hahler for reporting this problem.

Test case:

	echo "/"root*

Old result:

	/root*

New result:

	/root

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'src')
-rw-r--r--src/expand.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/expand.c b/src/expand.c
index f3d63c4..5986236 100644
--- a/src/expand.c
+++ b/src/expand.c
@@ -1287,15 +1287,16 @@ expmeta(char *enddir, char *name)
 					break;
 				}
 			}
-		} else if (*p == '\\')
-			p++;
-		else if (*p == '/') {
-			if (metaflag)
-				goto out;
-			start = p + 1;
+		} else {
+			if (*p == '\\')
+				p++;
+			if (*p == '/') {
+				if (metaflag)
+					break;
+				start = p + 1;
+			}
 		}
 	}
-out:
 	if (metaflag == 0) {	/* we've reached the end of the file name */
 		if (enddir != expdir)
 			metaflag++;