svn commit: samba r19396 - in branches/SAMBA_4_0/source/torture: .

jelmer at samba.org jelmer at samba.org
Wed Oct 18 16:47:35 GMT 2006


Author: jelmer
Date: 2006-10-18 16:47:35 +0000 (Wed, 18 Oct 2006)
New Revision: 19396

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=19396

Log:
Assume socketpair() is always available (cared for by libreplace) and 
create a socket for stderr.

Modified:
   branches/SAMBA_4_0/source/torture/subunit.c


Changeset:
Modified: branches/SAMBA_4_0/source/torture/subunit.c
===================================================================
--- branches/SAMBA_4_0/source/torture/subunit.c	2006-10-18 16:40:55 UTC (rev 19395)
+++ branches/SAMBA_4_0/source/torture/subunit.c	2006-10-18 16:47:35 UTC (rev 19396)
@@ -89,24 +89,27 @@
 	return true;
 }
 
-static pid_t piped_child(char* const command[], int *f_in)
+static pid_t piped_child(char* const command[], int *f_stdout, int *f_stderr)
 {
 	pid_t pid;
-	int sock[2];
+	int sock_out[2], sock_err[2];
 
-#ifdef HAVE_SOCKETPAIR
-	if (socketpair(AF_UNIX, SOCK_STREAM, 0, sock) == -1) {
-#else
-	if (pipe(sock) == -1) {
-#endif
+	if (socketpair(AF_UNIX, SOCK_STREAM, 0, sock_out) == -1) {
 		DEBUG(0, ("socketpair: %s", strerror(errno)));
 		return -1;
 	}
 
-	*f_in = sock[0];
+	if (socketpair(AF_UNIX, SOCK_STREAM, 0, sock_err) == -1) {
+		DEBUG(0, ("socketpair: %s", strerror(errno)));
+		return -1;
+	}
 
-	fcntl(sock[0], F_SETFL, O_NONBLOCK);
+	*f_stdout = sock_out[0];
+	*f_stderr = sock_err[0];
 
+	fcntl(sock_out[0], F_SETFL, O_NONBLOCK);
+	fcntl(sock_err[0], F_SETFL, O_NONBLOCK);
+
 	pid = fork();
 
 	if (pid == -1) {
@@ -118,15 +121,18 @@
 		close(0);
 		close(1);
 		close(2);
-		close(sock[0]);
+		close(sock_out[0]);
+		close(sock_err[0]);
 
-		dup2(sock[1], 0);
-		dup2(sock[1], 1);
+		dup2(sock_out[1], 0);
+		dup2(sock_out[1], 1);
+		dup2(sock_err[1], 2);
 		execvp(command[0], command);
 		exit(-1);
 	}
 
-	close(sock[1]);
+	close(sock_out[1]);
+	close(sock_err[1]);
 
 	return pid;
 }
@@ -171,7 +177,7 @@
 					   struct torture_suite *suite)
 {
 	static char *command[2];
-	int fd;
+	int fd_out, fd_err;
 	pid_t pid;
 	size_t size;
 	char *p, *q;
@@ -185,7 +191,7 @@
 	command[0] = talloc_strdup(context, suite->path);
 	command[1] = NULL;
 
-	pid = piped_child(command, &fd);
+	pid = piped_child(command, &fd_out, &fd_err);
 	if (pid == -1)
 		return false;
 
@@ -199,7 +205,7 @@
 		return false;
 	}
 
-	while ((size = read(fd, buffer+offset, sizeof(buffer-offset) > 0))) {
+	while ((size = read(fd_out, buffer+offset, sizeof(buffer-offset) > 0))) {
 		char *eol;
 		buffer[offset+size] = '\0';
 



More information about the samba-cvs mailing list