summary refs log tree commit diff
path: root/src/jobs.c
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2007-09-25 22:29:00 +0800
committerHerbert Xu <herbert@gondor.apana.org.au>2007-09-25 22:29:00 +0800
commit7cfd8be0dc83342b4a71f3a8e5b7efab4670e50c (patch)
tree58bea2cd50124e8599e4ebdbbd2f622138bdc8c2 /src/jobs.c
parent[EXPAND] Do not expand tilde in parameter expansion within quotes (diff)
downloaddash-7cfd8be0dc83342b4a71f3a8e5b7efab4670e50c.tar.gz
dash-7cfd8be0dc83342b4a71f3a8e5b7efab4670e50c.zip
[EXPAND] Move parse-time quote flag detection to run-time
Because the parser does not recursively parse parameter expansion with respect
to quotes, we can't accurately determine quote status at parse time.  This
patch works around this by moving the quote detection to run-time where we
do interpret it recursively.

Test case:

	foo=\\
	echo "<${foo#[\\]}>"

Old result:

	<\>

New result:

	<>
Diffstat (limited to 'src/jobs.c')
-rw-r--r--src/jobs.c10
1 files changed, 1 insertions, 9 deletions
diff --git a/src/jobs.c b/src/jobs.c
index 7285d0d..529d615 100644
--- a/src/jobs.c
+++ b/src/jobs.c
@@ -1377,12 +1377,7 @@ cmdputs(const char *s)
 				str = "${#";
 			else
 				str = "${";
-			if (!(subtype & VSQUOTE) != !(quoted & 1)) {
-				quoted ^= 1;
-				c = '"';
-			} else
-				goto dostr;
-			break;
+			goto dostr;
 		case CTLENDVAR:
 			str = "\"}" + !(quoted & 1);
 			quoted >>= 1;
@@ -1391,9 +1386,6 @@ cmdputs(const char *s)
 		case CTLBACKQ:
 			str = "$(...)";
 			goto dostr;
-		case CTLBACKQ+CTLQUOTE:
-			str = "\"$(...)\"";
-			goto dostr;
 		case CTLARI:
 			str = "$((";
 			goto dostr;