diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2016-11-24 14:06:29 +0300 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2016-11-24 14:06:29 +0300 |
commit | d3becf43185de8b54c3d6721d958b781f5e12fff (patch) | |
tree | 21bc69e424349ee1085d3e8078e73f1d8dfd8b5b | |
parent | b56179f83afc684a6bf1c7577a898374bb89c852 (diff) |
login_tty: Rewrite following FreeBSD's traces
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
-rw-r--r-- | winsup/cygwin/libc/bsdlib.cc | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/winsup/cygwin/libc/bsdlib.cc b/winsup/cygwin/libc/bsdlib.cc index 89bc9431c..8e1082724 100644 --- a/winsup/cygwin/libc/bsdlib.cc +++ b/winsup/cygwin/libc/bsdlib.cc @@ -77,22 +77,15 @@ daemon (int nochdir, int noclose) extern "C" int login_tty (int fd) { - char *fdname; - int newfd; - - if (setsid () == -1) + /* If setsid fails, FreeBSD uses the current sid returned by getsid(0), + then calls tcsetsid, which we don't provide (just as Linux doesn't). + tcsetsid only uses the sid to check against the value returned by + getsid(0). So, either way, that check will not fail and we can + simply ignore the return value from setsid and just perform the + ioctl call tcsetsid does. */ + setsid (); + if (ioctl (fd, TIOCSCTTY, NULL) == -1) return -1; - if ((fdname = ttyname (fd))) - { - if (fd != STDIN_FILENO) - close (STDIN_FILENO); - if (fd != STDOUT_FILENO) - close (STDOUT_FILENO); - if (fd != STDERR_FILENO) - close (STDERR_FILENO); - newfd = open (fdname, O_RDWR); - close (newfd); - } dup2 (fd, STDIN_FILENO); dup2 (fd, STDOUT_FILENO); dup2 (fd, STDERR_FILENO); |