about summary refs log tree commit diff
path: root/Src/subst.c
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2011-12-21 22:39:28 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2011-12-21 22:39:28 +0000
commitae146b0fe238a693e51233da1650004c2eb32b19 (patch)
tree6bcbda9f99ac4b8d884a7e5fc7a507f75846da0b /Src/subst.c
parent1ea6009209a7aae69188d70fa3cb7d260346f059 (diff)
downloadzsh-ae146b0fe238a693e51233da1650004c2eb32b19.tar.gz
zsh-ae146b0fe238a693e51233da1650004c2eb32b19.tar.xz
zsh-ae146b0fe238a693e51233da1650004c2eb32b19.zip
30041: fix bash-style offsets for positional parameters when scalars
Diffstat (limited to 'Src/subst.c')
-rw-r--r--Src/subst.c32
1 files changed, 17 insertions, 15 deletions
diff --git a/Src/subst.c b/Src/subst.c
index 4e8ed721d..ea6bf3af2 100644
--- a/Src/subst.c
+++ b/Src/subst.c
@@ -2878,24 +2878,26 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub)
 			    return NULL;
 		    }
 		}
-		if (horrible_offset_hack) {
-		    /*
-		     * As part of the 'orrible hoffset 'ack,
-		     * (what hare you? Han 'orrible hoffset 'ack,
-		     * sergeant major), if we are given a ksh/bash/POSIX
-		     * style positional parameter array which includes
-		     * offset 0, we use $0.
-		     */
-		    if (offset == 0 && isarr) {
-			offset_hack_argzero = 1;
-		    } else if (offset > 0) {
-			offset--;
-		    }
-		}
 		if (isarr) {
-		    int alen = arrlen(aval), count;
+		    int alen, count;
 		    char **srcptr, **dstptr, **newarr;
 
+		    if (horrible_offset_hack) {
+			/*
+			 * As part of the 'orrible hoffset 'ack,
+			 * (what hare you? Han 'orrible hoffset 'ack,
+			 * sergeant major), if we are given a ksh/bash/POSIX
+			 * style positional parameter array which includes
+			 * offset 0, we use $0.
+			 */
+			if (offset == 0) {
+			    offset_hack_argzero = 1;
+			} else if (offset > 0) {
+			    offset--;
+			}
+		    }
+
+		    alen = arrlen(aval);
 		    if (offset < 0) {
 			offset += alen;
 			if (offset < 0)