diff options
author | Peter Stephenson <p.stephenson@samsung.com> | 2018-06-15 15:02:36 +0100 |
---|---|---|
committer | Peter Stephenson <p.stephenson@samsung.com> | 2018-06-15 15:02:36 +0100 |
commit | 9408c4825b339c43299a39b46811fc6153740e01 (patch) | |
tree | b1f4e68fda0b1cf3a1f18da06d4377d36ce2fd6d /Src | |
parent | f37c181b29149c6829cc8a86f7348335a08d9670 (diff) | |
download | zsh-9408c4825b339c43299a39b46811fc6153740e01.tar.gz zsh-9408c4825b339c43299a39b46811fc6153740e01.tar.xz zsh-9408c4825b339c43299a39b46811fc6153740e01.zip |
users/23472: Add $sysparams[procsubstpid] to zsh/system
Diffstat (limited to 'Src')
-rw-r--r-- | Src/Modules/system.c | 4 | ||||
-rw-r--r-- | Src/exec.c | 10 | ||||
-rw-r--r-- | Src/zsh.h | 1 |
3 files changed, 15 insertions, 0 deletions
diff --git a/Src/Modules/system.c b/Src/Modules/system.c index 9fd4d2583..7a4f4ee13 100644 --- a/Src/Modules/system.c +++ b/Src/Modules/system.c @@ -772,6 +772,8 @@ fillpmsysparams(Param pm, const char *name) num = (int)getpid(); } else if (!strcmp(name, "ppid")) { num = (int)getppid(); + } else if (!strcmp(name, "procsubstpid")) { + num = (int)procsubstpid; } else { pm->u.str = dupstring(""); pm->node.flags |= PM_UNSET; @@ -805,6 +807,8 @@ scanpmsysparams(UNUSED(HashTable ht), ScanFunc func, int flags) func(&spm.node, flags); fillpmsysparams(&spm, "ppid"); func(&spm.node, flags); + fillpmsysparams(&spm, "procsubstpid"); + func(&spm.node, flags); } static struct mathfunc mftab[] = { diff --git a/Src/exec.c b/Src/exec.c index 963b0a5c3..d44527841 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -174,6 +174,11 @@ mod_export int zleactive; /**/ pid_t cmdoutpid; +/* pid of last process started by <(...), >(...) */ + +/**/ +mod_export pid_t procsubstpid; + /* exit status of process undergoing 'process substitution' */ /**/ @@ -4850,6 +4855,7 @@ getproc(char *cmd, char **eptr) return NULL; if (!out) addproc(pid, NULL, 1, &bgtime); + procsubstpid = pid; return pnam; } closem(FDT_UNUSED, 0); @@ -4887,6 +4893,7 @@ getproc(char *cmd, char **eptr) { addproc(pid, NULL, 1, &bgtime); } + procsubstpid = pid; return pnam; } entersubsh(ESUB_ASYNC|ESUB_PGRP); @@ -4937,6 +4944,7 @@ getpipe(char *cmd, int nullexec) } if (!nullexec) addproc(pid, NULL, 1, &bgtime); + procsubstpid = pid; return pipes[!out]; } entersubsh(ESUB_PGRP); @@ -6172,6 +6180,7 @@ execsave(void) es->cmdoutpid = cmdoutpid; es->cmdoutval = cmdoutval; es->use_cmdoutval = use_cmdoutval; + es->procsubstpid = procsubstpid; es->trap_return = trap_return; es->trap_state = trap_state; es->trapisfunc = trapisfunc; @@ -6207,6 +6216,7 @@ execrestore(void) cmdoutpid = en->cmdoutpid; cmdoutval = en->cmdoutval; use_cmdoutval = en->use_cmdoutval; + procsubstpid = en->procsubstpid; trap_return = en->trap_return; trap_state = en->trap_state; trapisfunc = en->trapisfunc; diff --git a/Src/zsh.h b/Src/zsh.h index 8535d48fb..8e7f20b2c 100644 --- a/Src/zsh.h +++ b/Src/zsh.h @@ -1095,6 +1095,7 @@ struct execstack { pid_t cmdoutpid; int cmdoutval; int use_cmdoutval; + pid_t procsubstpid; int trap_return; int trap_state; int trapisfunc; |