From: Paul Eggert Date: Sun, 20 Mar 2011 21:03:44 +0000 (-0700) Subject: * emacs.c (Fdaemon_initialized): Do not ignore I/O errors. X-Git-Tag: emacs-pretest-24.0.90~104^2~275^2~513^2~23 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=dc1ca6a87f1e100a054b0e5eab64da30dc5cad6f;p=emacs.git * emacs.c (Fdaemon_initialized): Do not ignore I/O errors. --- diff --git a/src/ChangeLog b/src/ChangeLog index 0b2a0d44c5f..82213687708 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,7 @@ 2011-03-20 Paul Eggert + * emacs.c (Fdaemon_initialized): Do not ignore I/O errors. + * process.c (Fmake_network_process): Use socklen_t, not int, where POSIX says socklen_t is required in portable programs. This fixes a porting bug on hosts like 64-bit HP-UX, where diff --git a/src/emacs.c b/src/emacs.c index 052f22ea622..bc7c07a9326 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -2312,6 +2312,7 @@ from the parent process and its tty file descriptors. */) (void) { int nfd; + int err = 0; if (!IS_DAEMON) error ("This function can only be called if emacs is run as a daemon"); @@ -2324,10 +2325,11 @@ from the parent process and its tty file descriptors. */) /* Get rid of stdin, stdout and stderr. */ nfd = open ("/dev/null", O_RDWR); - dup2 (nfd, 0); - dup2 (nfd, 1); - dup2 (nfd, 2); - close (nfd); + err |= nfd < 0; + err |= dup2 (nfd, 0) < 0; + err |= dup2 (nfd, 1) < 0; + err |= dup2 (nfd, 2) < 0; + err |= close (nfd) != 0; /* Closing the pipe will notify the parent that it can exit. FIXME: In case some other process inherited the pipe, closing it here @@ -2336,10 +2338,13 @@ from the parent process and its tty file descriptors. */) Instead, we should probably close the pipe in start-process and call-process to make sure the pipe is never inherited by subprocesses. */ - write (daemon_pipe[1], "\n", 1); - close (daemon_pipe[1]); + err |= write (daemon_pipe[1], "\n", 1) < 0; + err |= close (daemon_pipe[1]) != 0; /* Set it to an invalid value so we know we've already run this function. */ daemon_pipe[1] = -1; + + if (err) + error ("I/O error during daemon initialization"); return Qt; }