about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2007-02-02 21:42:14 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2007-02-02 21:42:14 +0000
commit54d692c4b557eecbb15d0ba4814fa99902ab3008 (patch)
tree0f8002764070f951674462e5cb0e79e1840ea883
parent56085ffebb9776b663e2562d71425662d6d6a13f (diff)
downloadzsh-54d692c4b557eecbb15d0ba4814fa99902ab3008.tar.gz
zsh-54d692c4b557eecbb15d0ba4814fa99902ab3008.tar.xz
zsh-54d692c4b557eecbb15d0ba4814fa99902ab3008.zip
23143: make =-expansion with metacharacters more consistent
-rw-r--r--ChangeLog6
-rw-r--r--Src/string.c2
-rw-r--r--Src/subst.c20
3 files changed, 17 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 009addd39..f0b3f11c1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-02-02  Peter Stephenson  <p.w.stephenson@ntlworld.com>
+
+	* 23143: Src/string.c, Src/subst.c: =-expansion failed
+	when there were metacharacters in the following string,
+	but still tried to expand it.  It now succeeds.
+
 2007-02-01  Peter Stephenson  <pws@csr.com>
 
 	* unposted: Src/Sched.c: using 23142 turned up sched bug:
diff --git a/Src/string.c b/Src/string.c
index 6a381ca30..190ca2d57 100644
--- a/Src/string.c
+++ b/Src/string.c
@@ -135,7 +135,7 @@ bicat(const char *s1, const char *s2)
     return ptr;
 }
 
-/* like strdup(), but with a specified length */
+/* like dupstring(), but with a specified length */
 
 /**/
 mod_export char *
diff --git a/Src/subst.c b/Src/subst.c
index ea2c50bde..be7b5321c 100644
--- a/Src/subst.c
+++ b/Src/subst.c
@@ -570,21 +570,21 @@ filesubstr(char **namptr, int assign)
 	    return 1;
 	}
     } else if (*str == Equals && isset(EQUALS) && str[1]) {   /* =foo */
-	char sav, *pp, *cnam;
-
-	for (pp = str + 1; !isend2(*pp); pp++);
-	sav = *pp;
-	*pp = 0;
-	if (!(cnam = findcmd(str + 1, 1))) {
+	char *pp, *cnam, *cmdstr, *str1 = str+1;
+
+	for (pp = str1; !isend2(*pp); pp++)
+	    ;
+	cmdstr = dupstrpfx(str1, pp-str1);
+	untokenize(cmdstr);
+	remnulargs(cmdstr);
+	if (!(cnam = findcmd(cmdstr, 1))) {
 	    if (isset(NOMATCH))
-		zerr("%s not found", str + 1);
+		zerr("%s not found", cmdstr);
 	    return 0;
 	}
 	*namptr = dupstring(cnam);
-	if (sav) {
-	    *pp = sav;
+	if (*pp)
 	    *namptr = dyncat(*namptr, pp);
-	}
 	return 1;
     }
     return 0;