chiark / gitweb /
tree-wide: port various places over to use new rearrange_stdio()
authorLennart Poettering <lennart@poettering.net>
Wed, 28 Feb 2018 22:32:49 +0000 (23:32 +0100)
committerSven Eden <yamakuzure@gmx.net>
Wed, 30 May 2018 05:59:13 +0000 (07:59 +0200)
src/basic/exec-util.c
src/libelogind/sd-bus/bus-socket.c

index 336bb7ca555a7418b2b0e56ea4e6bf35fea9f5e6..f8ac40671cbccbffcd5e4e81c72112daf00a6f0a 100644 (file)
@@ -62,12 +62,9 @@ static int do_spawn(const char *path, char *argv[], int stdout_fd, pid_t *pid) {
                 char *_argv[2];
 
                 if (stdout_fd >= 0) {
-                        /* If the fd happens to be in the right place, go along with that */
-                        if (stdout_fd != STDOUT_FILENO &&
-                            dup2(stdout_fd, STDOUT_FILENO) < 0)
+                        r = rearrange_stdio(STDIN_FILENO, stdout_fd, STDERR_FILENO);
+                        if (r < 0)
                                 _exit(EXIT_FAILURE);
-
-                        (void) fd_cloexec(STDOUT_FILENO, false);
                 }
 
                 if (!argv) {
index a86d092a6736b46915658e1a752de5e90d805d2c..0e58bc9536130325c8ab6d74cd1859d4baa803dc 100644 (file)
@@ -960,14 +960,11 @@ int bus_socket_exec(sd_bus *b) {
         if (r == 0) {
                 /* Child */
 
-                assert_se(dup3(s[1], STDIN_FILENO, 0) == STDIN_FILENO);
-                assert_se(dup3(s[1], STDOUT_FILENO, 0) == STDOUT_FILENO);
+                safe_close(s[0]);
 
-                if (!IN_SET(s[1], STDIN_FILENO, STDOUT_FILENO))
-                        safe_close(s[1]);
+                if (rearrange_stdio(s[1], s[1], STDERR_FILENO) < 0)
+                        _exit(EXIT_FAILURE);
 
-                (void) fd_cloexec(STDIN_FILENO, false);
-                (void) fd_cloexec(STDOUT_FILENO, false);
                 (void) fd_nonblock(STDIN_FILENO, false);
                 (void) fd_nonblock(STDOUT_FILENO, false);
 
@@ -1223,7 +1220,7 @@ int bus_socket_read_message(sd_bus *bus) {
                                         return -EIO;
                                 }
 
-                                f = reallocarray(bus->fds, bus->n_fds + n, sizeof(int));
+                                f = realloc(bus->fds, sizeof(int) * (bus->n_fds + n));
                                 if (!f) {
                                         close_many((int*) CMSG_DATA(cmsg), n);
                                         return -ENOMEM;