Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2016-11-24 14:06:29 +0300
committerCorinna Vinschen <corinna@vinschen.de>2016-11-24 14:06:29 +0300
commitd3becf43185de8b54c3d6721d958b781f5e12fff (patch)
tree21bc69e424349ee1085d3e8078e73f1d8dfd8b5b
parentb56179f83afc684a6bf1c7577a898374bb89c852 (diff)
login_tty: Rewrite following FreeBSD's traces
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
-rw-r--r--winsup/cygwin/libc/bsdlib.cc23
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);