rt_names: stop allocating 5k in rwdata
[oweals/busybox.git] / networking / udhcp / signalpipe.c
index 074c8a6037ea2d752cd3df70bfbd2882ac6fcb70..361596580ac70848b3c8341d2a84096c580e76a4 100644 (file)
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
 /* signalpipe.c
  *
  * Signal pipe infrastructure. A reliable way of delivering signals.
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-#include <unistd.h>
-#include <signal.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/select.h>
-
-
-#include "signalpipe.h"
 #include "common.h"
 
+
 static int signal_pipe[2];
 
 static void signal_handler(int sig)
 {
        if (send(signal_pipe[1], &sig, sizeof(sig), MSG_DONTWAIT) < 0)
-               DEBUG(LOG_ERR, "Could not send signal: %m");
+               bb_perror_msg("cannot send signal");
 }
 
 
@@ -43,6 +37,8 @@ static void signal_handler(int sig)
 void udhcp_sp_setup(void)
 {
        socketpair(AF_UNIX, SOCK_STREAM, 0, signal_pipe);
+       fcntl(signal_pipe[0], F_SETFD, FD_CLOEXEC);
+       fcntl(signal_pipe[1], F_SETFD, FD_CLOEXEC);
        signal(SIGUSR1, signal_handler);
        signal(SIGUSR2, signal_handler);
        signal(SIGTERM, signal_handler);
@@ -56,7 +52,10 @@ int udhcp_sp_fd_set(fd_set *rfds, int extra_fd)
 {
        FD_ZERO(rfds);
        FD_SET(signal_pipe[0], rfds);
-       if (extra_fd >= 0) FD_SET(extra_fd, rfds);
+       if (extra_fd >= 0) {
+               fcntl(extra_fd, F_SETFD, FD_CLOEXEC);
+               FD_SET(extra_fd, rfds);
+       }
        return signal_pipe[0] > extra_fd ? signal_pipe[0] : extra_fd;
 }