summaryrefslogtreecommitdiff
path: root/Src/subst.c
diff options
context:
space:
mode:
authorPeter Stephenson <pws@zsh.org>2017-09-27 09:41:50 +0100
committerPeter Stephenson <pws@zsh.org>2017-09-27 09:41:50 +0100
commit6230e82d44da25773437c5438c83a5d5fe275420 (patch)
tree123f2cfd0c646b662208cd231e5431b97024feb9 /Src/subst.c
parent03af5fdbeed0930b5f1d3715ee1080fb993ed145 (diff)
downloadzsh-6230e82d44da25773437c5438c83a5d5fe275420.tar.gz
zsh-6230e82d44da25773437c5438c83a5d5fe275420.zip
41764 (test tweaked): allow [key]+=value when modifying arrays
Diffstat (limited to 'Src/subst.c')
-rw-r--r--Src/subst.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/Src/subst.c b/Src/subst.c
index 55b5444c6..eef0dc75b 100644
--- a/Src/subst.c
+++ b/Src/subst.c
@@ -53,16 +53,25 @@ keyvalpairelement(LinkList list, LinkNode node)
if ((start = (char *)getdata(node)) &&
start[0] == Inbrack &&
(end = strchr(start+1, Outbrack)) &&
- end[1] == Equals) {
+ /* ..]=value or ]+=Value */
+ (end[1] == Equals ||
+ (end[1] == '+' && end[2] == Equals))) {
static char marker[2] = { Marker, '\0' };
+ static char marker_plus[3] = { Marker, '+', '\0' };
*end = '\0';
dat = start + 1;
singsub(&dat);
untokenize(dat);
- setdata(node, marker);
- node = insertlinknode(list, node, dat);
- dat = end + 2;
+ if (end[1] == '+') {
+ setdata(node, marker_plus);
+ node = insertlinknode(list, node, dat);
+ dat = end + 3;
+ } else {
+ setdata(node, marker);
+ node = insertlinknode(list, node, dat);
+ dat = end + 2;
+ }
singsub(&dat);
untokenize(dat);
return insertlinknode(list, node, dat);