sh: Allow multiple operands in wait builtin.

This is only part of the PR; the behaviour for unknown/invalid pids/jobs
remains unchanged (aborts the builtin with status 2).

PR:		176916
Submitted by:	Vadim Goncharov
This commit is contained in:
Jilles Tjoelker 2013-06-05 19:08:22 +00:00
parent b303f675df
commit a4099656c3
2 changed files with 25 additions and 6 deletions

View File

@ -95,6 +95,7 @@ static int ttyfd = -1;
static void restartjob(struct job *);
#endif
static void freejob(struct job *);
static int waitcmdloop(struct job *);
static struct job *getjob(char *);
pid_t getjobpgrp(char *);
static pid_t dowait(int, struct job *);
@ -459,15 +460,26 @@ int
waitcmd(int argc __unused, char **argv __unused)
{
struct job *job;
int status, retval;
struct job *jp;
int retval;
nextopt("");
if (*argptr != NULL) {
if (*argptr == NULL)
return (waitcmdloop(NULL));
do {
job = getjob(*argptr);
} else {
job = NULL;
}
retval = waitcmdloop(job);
argptr++;
} while (*argptr != NULL);
return (retval);
}
static int
waitcmdloop(struct job *job)
{
int status, retval;
struct job *jp;
/*
* Loop until a process is terminated or stopped, or a SIGINT is

View File

@ -0,0 +1,7 @@
# $FreeBSD$
exit 44 & p44=$!
exit 45 & p45=$!
exit 7 & p7=$!
wait "$p44" "$p7" "$p45"
[ "$?" = 45 ]