diff options
author | jilles <jilles@FreeBSD.org> | 2013-06-05 19:08:22 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2013-06-05 19:08:22 +0000 |
commit | dbbdb077d82c797a0eda74194fcf16f3264030ab (patch) | |
tree | 2692ea400c79babd9dc476ddcc0fe8acc344ccae /bin | |
parent | 018a784d3f43677b1c8a81718f963490127f4b99 (diff) | |
download | FreeBSD-src-dbbdb077d82c797a0eda74194fcf16f3264030ab.zip FreeBSD-src-dbbdb077d82c797a0eda74194fcf16f3264030ab.tar.gz |
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
Diffstat (limited to 'bin')
-rw-r--r-- | bin/sh/jobs.c | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/bin/sh/jobs.c b/bin/sh/jobs.c index 163b7e7..aa8d988 100644 --- a/bin/sh/jobs.c +++ b/bin/sh/jobs.c @@ -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 |