about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMikael Magnusson <mikachu@gmail.com>2015-06-16 01:36:50 +0200
committerMikael Magnusson <mikachu@gmail.com>2015-06-17 02:26:17 +0200
commite55c16708320aee327fe192d543a25e05343fae5 (patch)
treeed05888ed41b29e9872e800374f4f0d486d507f1
parent2cfe892414a2c6af6fd7b569c18cffeff1e39310 (diff)
downloadzsh-e55c16708320aee327fe192d543a25e05343fae5.tar.gz
zsh-e55c16708320aee327fe192d543a25e05343fae5.tar.xz
zsh-e55c16708320aee327fe192d543a25e05343fae5.zip
35476: Allow setting $0 when POSIX_ARGZERO is not set
-rw-r--r--ChangeLog3
-rw-r--r--Src/params.c17
2 files changed, 19 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 9dbdbdf27..1a11c3669 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,9 @@
 	* 35477: Completion/Unix/Command/_gdb: _gdb: Allow 'core' to
 	occur anywhere in a coredump filename
 
+	* 35476: Src/params.c: Allow setting $0 when POSIX_ARGZERO is
+	not set	
+
 2015-06-16  Barton E. Schaefer  <schaefer@zsh.org>
 
 	* 35493: Src/exec.c: erase $_ when the command line is an assignment
diff --git a/Src/params.c b/Src/params.c
index 98541a6da..3b757359b 100644
--- a/Src/params.c
+++ b/Src/params.c
@@ -196,7 +196,7 @@ static const struct gsu_integer ttyidle_gsu =
 { ttyidlegetfn, nullintsetfn, stdunsetfn };
 
 static const struct gsu_scalar argzero_gsu =
-{ argzerogetfn, nullstrsetfn, nullunsetfn };
+{ argzerogetfn, argzerosetfn, nullunsetfn };
 static const struct gsu_scalar username_gsu =
 { usernamegetfn, usernamesetfn, stdunsetfn };
 static const struct gsu_scalar dash_gsu =
@@ -4044,6 +4044,21 @@ lcsetfn(Param pm, char *x)
 }
 #endif /* USE_LOCALE */
 
+/* Function to set value for special parameter `0' */
+
+/**/
+static void
+argzerosetfn(UNUSED(Param pm), char *x)
+{
+    if (x) {
+	if (!isset(POSIXARGZERO)) {
+	    zsfree(argzero);
+	    argzero = ztrdup(x);
+	}
+	zsfree(x);
+    }
+}
+
 /* Function to get value for special parameter `0' */
 
 /**/