diff options
author | Oliver Kiddle <okiddle@yahoo.co.uk> | 2018-04-07 18:48:00 +0200 |
---|---|---|
committer | Oliver Kiddle <okiddle@yahoo.co.uk> | 2018-04-07 18:48:00 +0200 |
commit | d8753f47bb29d6bd5ca8d311b80fadca719982be (patch) | |
tree | 2c58d9e288327ad3348dd7d95a12787fa0cc756e /Src | |
parent | 31f72205630687c1cef89347863aab355296a27f (diff) | |
download | zsh-d8753f47bb29d6bd5ca8d311b80fadca719982be.tar.gz zsh-d8753f47bb29d6bd5ca8d311b80fadca719982be.tar.xz zsh-d8753f47bb29d6bd5ca8d311b80fadca719982be.zip |
42601: tidy up code for set -A/+A to not increment a NULL pointer and to be more efficient
Diffstat (limited to 'Src')
-rw-r--r-- | Src/builtin.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/Src/builtin.c b/Src/builtin.c index fb59738f3..73cfe7ad1 100644 --- a/Src/builtin.c +++ b/Src/builtin.c @@ -695,13 +695,11 @@ bin_set(char *nam, char **args, UNUSED(Options ops), UNUSED(int func)) char **a = NULL, **y; int len = arrlen(args); - if (array < 0 && (a = getaparam(arrayname))) { - int al = arrlen(a); - - if (al > len) - len = al; + if (array < 0 && (a = getaparam(arrayname)) && arrlen_gt(a, len)) { + a += len; + len += arrlen(a); } - for (x = y = zalloc((len + 1) * sizeof(char *)); len--; a++) { + for (x = y = zalloc((len + 1) * sizeof(char *)); len--;) { if (!*args) args = a; *y++ = ztrdup(*args++); |