2006-08-22 Eric Blake <ebb9@byu.net>
* libc/posix/popen.c (popen): Don't close output end of pipe in
        child if stdout was closed on entry.
        [HAVE_FCNTL]: In parent, mark file as close-on-exec, per POSIX.
			
			
This commit is contained in:
		
							parent
							
								
									cb5e3d1df7
								
							
						
					
					
						commit
						380d8ec45d
					
				|  | @ -1,3 +1,9 @@ | |||
| 2006-08-22  Eric Blake  <ebb9@byu.net> | ||||
| 
 | ||||
| 	* libc/posix/popen.c (popen): Don't close output end of pipe in | ||||
| 	child if stdout was closed on entry. | ||||
| 	[HAVE_FCNTL]: In parent, mark file as close-on-exec, per POSIX. | ||||
| 
 | ||||
| 2006-08-19  Ramana Radhakrishnan  <ramana.r@gmail.com> | ||||
| 
 | ||||
| 	* sys/types.h: Correct syntax error caused by missing '\' on #ifdef | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| /*	$NetBSD: popen.c,v 1.11 1995/06/16 07:05:33 jtc Exp $	*/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Copyright (c) 1988, 1993 | ||||
|  * Copyright (c) 1988, 1993, 2006 | ||||
|  *	The Regents of the University of California.  All rights reserved. | ||||
|  * | ||||
|  * This code is derived from software written by Ken Arnold and | ||||
|  | @ -55,6 +55,7 @@ static char rcsid[] = "$NetBSD: popen.c,v 1.11 1995/06/16 07:05:33 jtc Exp $"; | |||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| #include <paths.h> | ||||
| #include <fcntl.h> | ||||
| 
 | ||||
| static struct pid { | ||||
| 	struct pid *next; | ||||
|  | @ -102,7 +103,9 @@ _DEFUN(popen, (program, type), | |||
| 				(void)dup2(pdes[1], STDOUT_FILENO); | ||||
| 				(void)close(pdes[1]); | ||||
| 			} | ||||
| 			(void) close(pdes[0]); | ||||
| 			if (pdes[0] != STDOUT_FILENO) { | ||||
| 				(void) close(pdes[0]); | ||||
| 			} | ||||
| 		} else { | ||||
| 			if (pdes[0] != STDIN_FILENO) { | ||||
| 				(void)dup2(pdes[0], STDIN_FILENO); | ||||
|  | @ -129,6 +132,12 @@ _DEFUN(popen, (program, type), | |||
| 		(void)close(pdes[0]); | ||||
| 	} | ||||
| 
 | ||||
| #ifdef HAVE_FCNTL | ||||
| 	/* Hide pipe from future popens; assume fcntl can't fail.  */ | ||||
| 	fcntl (fileno (iop), F_SETFD, | ||||
| 	       fcntl (fileno (iop), F_GETFD, 0) | FD_CLOEXEC); | ||||
| #endif /* HAVE_FCNTL */ | ||||
| 
 | ||||
| 	/* Link into list of file descriptors. */ | ||||
| 	cur->fp = iop; | ||||
| 	cur->pid =  pid; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue