summaryrefslogtreecommitdiff
path: root/Src/exec.c
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2008-11-13 21:18:14 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2008-11-13 21:18:14 +0000
commit35a8612f217f25a37caaed08b31be754cfe584b1 (patch)
tree14c1dcc8b6ae7f732a3c969fef80e498153858ca /Src/exec.c
parentdcd26714bb85b7559ae5342ae95cc30f9a98ce8c (diff)
downloadzsh-35a8612f217f25a37caaed08b31be754cfe584b1.tar.gz
zsh-35a8612f217f25a37caaed08b31be754cfe584b1.zip
26042 with some fixes from 26043 (Mikael):
allow <(...) and >(...) to occur in the middle of strings and =(...) to have extra text following
Diffstat (limited to 'Src/exec.c')
-rw-r--r--Src/exec.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/Src/exec.c b/Src/exec.c
index 47c0184aa..a398211d3 100644
--- a/Src/exec.c
+++ b/Src/exec.c
@@ -3560,7 +3560,7 @@ readoutput(int in, int qt)
/**/
static Eprog
-parsecmd(char *cmd)
+parsecmd(char *cmd, char **eptr)
{
char *str;
Eprog prog;
@@ -3571,7 +3571,9 @@ parsecmd(char *cmd)
return NULL;
}
*str = '\0';
- if (str[1] || !(prog = parse_string(cmd + 2, 0))) {
+ if (eptr)
+ *eptr = str+1;
+ if (!(prog = parse_string(cmd + 2, 0))) {
zerr("parse error in process substitution");
return NULL;
}
@@ -3582,7 +3584,7 @@ parsecmd(char *cmd)
/**/
char *
-getoutputfile(char *cmd)
+getoutputfile(char *cmd, char **eptr)
{
pid_t pid;
char *nam;
@@ -3592,7 +3594,7 @@ getoutputfile(char *cmd)
if (thisjob == -1)
return NULL;
- if (!(prog = parsecmd(cmd)))
+ if (!(prog = parsecmd(cmd, eptr)))
return NULL;
if (!(nam = gettempname(NULL, 0)))
return NULL;
@@ -3677,7 +3679,7 @@ namedpipe(void)
/**/
char *
-getproc(char *cmd)
+getproc(char *cmd, char **eptr)
{
#if !defined(HAVE_FIFOS) && !defined(PATH_DEV_FD)
zerr("doesn't look like your system supports FIFOs.");
@@ -3696,7 +3698,7 @@ getproc(char *cmd)
return NULL;
if (!(pnam = namedpipe()))
return NULL;
- if (!(prog = parsecmd(cmd)))
+ if (!(prog = parsecmd(cmd, eptr)))
return NULL;
if (!jobtab[thisjob].filelist)
jobtab[thisjob].filelist = znewlinklist();
@@ -3723,7 +3725,7 @@ getproc(char *cmd)
if (thisjob == -1)
return NULL;
pnam = hcalloc(strlen(PATH_DEV_FD) + 6);
- if (!(prog = parsecmd(cmd)))
+ if (!(prog = parsecmd(cmd, eptr)))
return NULL;
mpipe(pipes);
if ((pid = zfork(&bgtime))) {
@@ -3772,7 +3774,7 @@ getpipe(char *cmd, int nullexec)
pid_t pid;
struct timeval bgtime;
- if (!(prog = parsecmd(cmd)))
+ if (!(prog = parsecmd(cmd, NULL)))
return -1;
mpipe(pipes);
if ((pid = zfork(&bgtime))) {