rc: avoid forking for final command that has variable assignments (to get $apid right)

basically, we want the following commands to print
the same pid twice:

rc -c 'cat /dev/pid &;echo $apid'

vs:

rc -c 'a=1 cat /dev/pid &;echo $apid'

basically, Xsimple() calls exitnext() to determine if
a simple command should be promoted to exec, by peeking
ahead into the code and searching for Xexit instruction.

Xexit might not follow immediately after the Xsimple
instruction because of redirections, which exitnext()
would skip.

but it would not skip the Xunlocal instructions that
where added by the variable assignment.
This commit is contained in:
cinap_lenrek 2020-05-30 02:03:18 +02:00
parent 0e97c8d1d7
commit a48b462e44

View file

@ -12,7 +12,7 @@
int
exitnext(void){
union code *c=&runq->code[runq->pc];
while(c->f==Xpopredir) c++;
while(c->f==Xpopredir || c->f==Xunlocal) c++;
return c->f==Xexit;
}