introduce and use close_on_exec_on(fd). -50 bytes.

This commit is contained in:
Denis Vlasenko
2007-09-30 23:50:48 +00:00
parent deabacdf91
commit 96e1b38586
14 changed files with 41 additions and 43 deletions

View File

@ -3469,7 +3469,7 @@ setjobctl(int on)
close(ofd);
if (fd < 0)
goto out;
fcntl(fd, F_SETFD, FD_CLOEXEC);
close_on_exec_on(fd);
do { /* while we are in the background */
pgrp = tcgetpgrp(fd);
if (pgrp < 0) {
@ -8830,7 +8830,7 @@ closescript(void)
static void
setinputfd(int fd, int push)
{
fcntl(fd, F_SETFD, FD_CLOEXEC);
close_on_exec_on(fd);
if (push) {
pushfile();
parsefile->buf = 0;

View File

@ -760,9 +760,11 @@ static int builtin_eval(char **argv)
static int builtin_cd(char **argv)
{
const char *newdir;
if (argv[1] == NULL)
if (argv[1] == NULL) {
// bash does nothing (exitcode 0) if HOME is ""; if it's unset,
// bash says "bash: cd: HOME not set" and does nothing (exitcode 1)
newdir = getenv("HOME") ? : "/";
else
} else
newdir = argv[1];
if (chdir(newdir)) {
printf("cd: %s: %s\n", newdir, strerror(errno));
@ -3629,7 +3631,7 @@ static void setup_job_control(void)
saved_task_pgrp = shell_pgrp = getpgrp();
debug_printf_jobs("saved_task_pgrp=%d\n", saved_task_pgrp);
fcntl(interactive_fd, F_SETFD, FD_CLOEXEC);
close_on_exec_on(interactive_fd);
/* If we were ran as 'hush &',
* sleep until we are in the foreground. */

View File

@ -576,7 +576,7 @@ static int setup_redirects(struct child_prog *prog, int squirrel[])
if (openfd != redir->fd) {
if (squirrel && redir->fd < 3) {
squirrel[redir->fd] = dup(redir->fd);
fcntl(squirrel[redir->fd], F_SETFD, FD_CLOEXEC);
close_on_exec_on(squirrel[redir->fd]);
}
dup2(openfd, redir->fd);
close(openfd);