Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 5 Jun 2013 19:08:22 +0000 (UTC)
From:      Jilles Tjoelker <jilles@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r251429 - in head: bin/sh tools/regression/bin/sh/builtins
Message-ID:  <201306051908.r55J8NZR005631@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jilles
Date: Wed Jun  5 19:08:22 2013
New Revision: 251429
URL: http://svnweb.freebsd.org/changeset/base/251429

Log:
  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

Added:
  head/tools/regression/bin/sh/builtins/wait8.0   (contents, props changed)
Modified:
  head/bin/sh/jobs.c

Modified: head/bin/sh/jobs.c
==============================================================================
--- head/bin/sh/jobs.c	Wed Jun  5 18:49:28 2013	(r251428)
+++ head/bin/sh/jobs.c	Wed Jun  5 19:08:22 2013	(r251429)
@@ -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

Added: head/tools/regression/bin/sh/builtins/wait8.0
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/tools/regression/bin/sh/builtins/wait8.0	Wed Jun  5 19:08:22 2013	(r251429)
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+exit 44 & p44=$!
+exit 45 & p45=$!
+exit 7 & p7=$!
+wait "$p44" "$p7" "$p45"
+[ "$?" = 45 ]



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201306051908.r55J8NZR005631>