]> granicus.if.org Git - sudo/commitdiff
Replace pipe_nonblock() with pipe2()
authorTodd C. Miller <Todd.Miller@courtesan.com>
Mon, 13 Mar 2017 18:11:52 +0000 (12:11 -0600)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Mon, 13 Mar 2017 18:11:52 +0000 (12:11 -0600)
src/exec.c
src/exec_monitor.c
src/signal.c
src/sudo.h

index 3bc02315873d7557e05d82a4cb87762283b26634..577a56ac5e08c86b6f16fd629cb8603c52f34c8b 100644 (file)
@@ -256,35 +256,6 @@ sudo_execute(struct command_details *details, struct command_status *cstat)
     debug_return_int(cstat->type == CMD_ERRNO ? -1 : 0);
 }
 
-/*
- * Open a pipe and make both ends non-blocking.
- * Returns 0 on success and -1 on error.
- */
-int
-pipe_nonblock(int fds[2])
-{
-    int flags, ret;
-    debug_decl(pipe_nonblock, SUDO_DEBUG_EXEC)
-
-    ret = pipe(fds);
-    if (ret != -1) {
-       flags = fcntl(fds[0], F_GETFL, 0);
-       if (flags != -1 && !ISSET(flags, O_NONBLOCK))
-           ret = fcntl(fds[0], F_SETFL, flags | O_NONBLOCK);
-       if (ret != -1) {
-           flags = fcntl(fds[1], F_GETFL, 0);
-           if (flags != -1 && !ISSET(flags, O_NONBLOCK))
-               ret = fcntl(fds[1], F_SETFL, flags | O_NONBLOCK);
-       }
-       if (ret == -1) {
-           close(fds[0]);
-           close(fds[1]);
-       }
-    }
-
-    debug_return_int(ret);
-}
-
 /*
  * Kill command with increasing urgency.
  */
index 5650c562cdd42373d2a438f8eb669284c289db32..ace1073a25432de83aa4f9caa256772bd3361d7e 100644 (file)
@@ -492,7 +492,7 @@ exec_monitor(struct command_details *details, bool foreground, int backchannel)
      * We use a pipe to atomically handle signal notification within
      * the event loop.
      */
-    if (pipe_nonblock(signal_pipe) != 0)
+    if (pipe2(signal_pipe, O_NONBLOCK) != 0)
        sudo_fatal(U_("unable to create pipe"));
 
     /* Reset SIGWINCH and SIGALRM. */
index 69cdaa9b9c1f99d8c44830858586bf1188a737b8..53c402998dd056a52c6504ed5721794692510f90 100644 (file)
@@ -27,6 +27,7 @@
 #endif /* HAVE_STRINGS_H */
 #include <unistd.h>
 #include <errno.h>
+#include <fcntl.h>
 #include <signal.h>
 
 #include "sudo.h"
@@ -125,7 +126,7 @@ init_signals(void)
      * We use a pipe to atomically handle signal notification within
      * the select() loop without races (we may not have pselect()).
      */
-    if (pipe_nonblock(signal_pipe) != 0)
+    if (pipe2(signal_pipe, O_NONBLOCK) != 0)
        sudo_fatal(U_("unable to create pipe"));
 
     memset(&sa, 0, sizeof(sa));
index 43175b68028f53aa95ef2c3cb85516aca877208a..cac16762d435f36827eebef33d3017e308337d6e 100644 (file)
@@ -195,7 +195,6 @@ char *tgetpass(const char *prompt, int timeout, int flags,
     struct sudo_conv_callback *callback);
 
 /* exec.c */
-int pipe_nonblock(int fds[2]);
 int sudo_execute(struct command_details *details, struct command_status *cstat);
 
 /* parse_args.c */