summaryrefslogtreecommitdiff
path: root/src/misc/forkpty.c
AgeCommit message (Collapse)AuthorLines
2014-12-21overhaul forkpty function using new login_ttyRich Felker-26/+45
based on discussion with and patches by Felix Janda. these changes started as an effort to factor forkpty in terms of login_tty, which returns an error and skips fd reassignment and closing if setting the controlling terminal failed. the previous forkpty code was unable to handle errors in the child, and did not attempt to; it just silently ignored them. but this would have been unacceptable when switching to using login_tty, since the child would start with the wrong stdin, stdout, and stderr and thereby clobber the parent's files. the new code uses the same technique as the posix_spawn implementation to convey any possible error in the child to the parent so that the parent can report failure to the caller. it is also safe against thread cancellation and against signal delivery in the child prior to the determination of success.
2011-07-22check for fd exhaustion in forkptyRich Felker-2/+15
we cannot report failure after forking, so the idea is to ensure prior to fork that fd 0,1,2 exist. this will prevent dup2 from possibly hitting a resource limit and failing in the child process. fcntl rather than dup2 is used prior to forking to avoid race conditions.
2011-04-20properly create new session/controlling terminal in forkptyRich Felker-1/+4
2011-04-20implement (nonstandard) forkptyRich Felker-0/+22