diff options
author | Thomas White <taw@physics.org> | 2018-05-17 15:31:45 +0200 |
---|---|---|
committer | Thomas White <taw@physics.org> | 2018-05-17 15:39:22 +0200 |
commit | a9f48b6507b0326a34b84d7600f5eb791993eeb1 (patch) | |
tree | b89b6e73477125336c35c6d7d9996bd8ebae7fd7 /lib/login_tty.c | |
parent | 87fd650abf11da75e7abd2ff90821cf7cb041b91 (diff) | |
parent | a9f4c0ff4376267d90d6e8f9a0b6c012ec0588a4 (diff) |
Merge branch 'tom/cmake'
Diffstat (limited to 'lib/login_tty.c')
-rw-r--r-- | lib/login_tty.c | 75 |
1 files changed, 0 insertions, 75 deletions
diff --git a/lib/login_tty.c b/lib/login_tty.c deleted file mode 100644 index e07f1607..00000000 --- a/lib/login_tty.c +++ /dev/null @@ -1,75 +0,0 @@ -/* Assign a given terminal as controlling terminal and as standard input, - standard output, standard error of the current process. - Copyright (C) 2010-2014 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include <config.h> - -/* Currently no specification header. */ - -#include <fcntl.h> -#include <unistd.h> -#include <sys/ioctl.h> - -int -login_tty (int slave_fd) -{ - int i; - - /* Create a new session. */ - setsid (); - - /* Make fd the controlling terminal for the current process. - On BSD and OSF/1: There is ioctl TIOCSCTTY for this purpose. - On Solaris: - A terminal becomes the controlling terminal of a session - if it is being open()ed, at a moment when - 1. it is not already the controlling terminal of some session, and - 2. the process that open()s it is a session leader that does not have - a controlling terminal. - We assume condition 1, try to ensure condition 2, and then open() it. - */ - for (i = 0; i < 3; i++) - if (i != slave_fd) - close (i); -#ifdef TIOCSCTTY - if (ioctl (slave_fd, TIOCSCTTY, NULL) < 0) - return -1; -#else - { - char *slave_name; - int dummy_fd; - - slave_name = ttyname (slave_fd); - if (slave_name == NULL) - return -1; - dummy_fd = open (slave_name, O_RDWR); - if (dummy_fd < 0) - return -1; - close (dummy_fd); - } -#endif - - /* Assign fd to the standard input, standard output, and standard error of - the current process. */ - for (i = 0; i < 3; i++) - if (slave_fd != i) - if (dup2 (slave_fd, i) < 0) - return -1; - if (slave_fd >= 3) - close (slave_fd); - - return 0; -} |