]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
terminal-util: port some generic code over to rearrange_stdio()
authorLennart Poettering <lennart@poettering.net>
Wed, 28 Feb 2018 20:21:33 +0000 (21:21 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 2 Mar 2018 10:42:10 +0000 (11:42 +0100)
src/basic/fd-util.h
src/basic/terminal-util.c
src/basic/terminal-util.h

index b687f1a555942d791b06553211891140c15542cc..e8d915bfa6e62470345e61b1aaf8eaf80aebd808 100644 (file)
@@ -102,3 +102,7 @@ int acquire_data_fd(const void *data, size_t size, unsigned flags);
 int fd_move_above_stdio(int fd);
 
 int rearrange_stdio(int original_input_fd, int original_output_fd, int original_error_fd);
+
+static inline int make_null_stdio(void) {
+        return rearrange_stdio(-1, -1, -1);
+}
index cdad4cb621341e009826569a64f342ffc347d4a9..eacfd14677a4e50cd47f245baebfd9236c4f26fb 100644 (file)
@@ -628,9 +628,9 @@ int make_console_stdio(void) {
         if (r < 0)
                 log_warning_errno(r, "Failed to reset terminal, ignoring: %m");
 
-        r = make_stdio(fd);
+        r = rearrange_stdio(fd, fd, fd); /* This invalidates 'fd' both on success and on failure. */
         if (r < 0)
-                return log_error_errno(r, "Failed to duplicate terminal fd: %m");
+                return log_error_errno(r, "Failed to make terminal stdin/stdout/stderr: %m");
 
         reset_terminal_feature_caches();
 
@@ -905,40 +905,6 @@ bool on_tty(void) {
         return cached_on_tty;
 }
 
-int make_stdio(int fd) {
-        int r = 0;
-
-        assert(fd >= 0);
-
-        if (dup2(fd, STDIN_FILENO) < 0)
-                r = -errno;
-        if (dup2(fd, STDOUT_FILENO) < 0 && r >= 0)
-                r = -errno;
-        if (dup2(fd, STDERR_FILENO) < 0 && r >= 0)
-                r = -errno;
-
-        safe_close_above_stdio(fd);
-
-        /* Explicitly unset O_CLOEXEC, since if fd was < 3, then dup2() was a NOP and the bit hence possibly set. */
-        stdio_unset_cloexec();
-
-        return r;
-}
-
-int make_null_stdio(void) {
-        int null_fd, r;
-
-        null_fd = open("/dev/null", O_RDWR|O_NOCTTY|O_CLOEXEC);
-        if (null_fd < 0)
-                return -errno;
-
-        r = make_stdio(null_fd);
-
-        reset_terminal_feature_caches();
-
-        return r;
-}
-
 int getttyname_malloc(int fd, char **ret) {
         size_t l = 100;
         int r;
index f6e6020b66e078b4896b4198acb0fb758001a969..643e8e55bdcbaf22484309310c4e289b7c6d5bf1 100644 (file)
@@ -90,8 +90,6 @@ bool tty_is_console(const char *tty) _pure_;
 int vtnr_from_tty(const char *tty);
 const char *default_term_for_tty(const char *tty);
 
-int make_stdio(int fd);
-int make_null_stdio(void);
 int make_console_stdio(void);
 
 int fd_columns(int fd);