On Sun, Nov 21, 2010 at 2:55 AM, Stephen McKay <mc...@freebsd.org> wrote:
> Author: mckay
> Date: Sun Nov 21 10:55:16 2010
> New Revision: 215615
> URL: http://svn.freebsd.org/changeset/base/215615
>
> Log:
>  xargs can be fooled by exiting children that it did not start, causing
>  it to kick off a new command before the previous has finished, resulting
>  in corrupted (interleaved) output.  It is also fooled by non-exiting
>  children it did not start, failing to exit until all extraneous children
>  have exited.
>
>  This patch makes xargs keep track of children it starts, ignoring
>  pre-existing ones.

    Unfortunately this broke tinderbox and compile on HEAD. Could you
please commit the following patch that fixes the compile and a handful
of style(9) violations in the new code?
Thanks!
-Garrett
Index: usr.bin/xargs/xargs.c
===================================================================
--- usr.bin/xargs/xargs.c	(revision 215636)
+++ usr.bin/xargs/xargs.c	(working copy)
@@ -586,14 +586,14 @@
 
 	if (pids_empty()) {
 		errno = ECHILD;
-		return -1;
+		return (-1);
 	}
 
 	while ((pid = waitpid(-1, status, block ? 0 : WNOHANG)) > 0)
 		if (pids_remove(pid))
 			break;
 
-	return pid;
+	return (pid);
 }
 
 static void
@@ -625,27 +625,27 @@
 #define	NOPID	(0)
 
 static void
-pids_init()
+pids_init(void)
 {
 	int i;
 
 	if ((childpids = malloc(maxprocs * sizeof(*childpids))) == NULL)
-	    errx(1, "malloc failed");
+		errx(1, "malloc failed");
 
 	for (i = 0; i < maxprocs; i++)
 		clearslot(i);
 }
 
 static int
-pids_empty()
+pids_empty(void)
 {
-	return curprocs == 0;
+	return (curprocs == 0);
 }
 
 static int
-pids_full()
+pids_full(void)
 {
-	return curprocs >= maxprocs;
+	return (curprocs >= maxprocs);
 }
 
 static void
@@ -664,22 +664,22 @@
 	int slot;
 
 	if ((slot = findslot(pid)) < 0)
-	    return 0;
+		return (0);
 
 	clearslot(slot);
 	curprocs--;
-	return 1;
+	return (1);
 }
 
 static int
-findfreeslot()
+findfreeslot(void)
 {
 	int slot;
 
 	if ((slot = findslot(NOPID)) < 0)
 		errx(1, "internal error: no free pid slot");
 
-	return slot;
+	return (slot);
 }
 
 static int
@@ -689,9 +689,9 @@
 
 	for (slot = 0; slot < maxprocs; slot++)
 		if (childpids[slot] == pid)
-			return slot;
+			return (slot);
 
-	return -1;
+	return (-1);
 }
 
 static void
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to