* misc/login_tty.c [! TIOCSCTTY]: Try an emulation using ttyname
authorRoland McGrath <roland@gnu.org>
Wed, 5 Apr 1995 04:39:51 +0000 (04:39 +0000)
committerRoland McGrath <roland@gnu.org>
Wed, 5 Apr 1995 04:39:51 +0000 (04:39 +0000)
  and open.

ChangeLog
misc/login_tty.c

index 68e389a..82c406b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 Wed Apr  5 00:13:45 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>
 
+       * misc/login_tty.c [! TIOCSCTTY]: Try an emulation using ttyname
+       and open.
+
        * sysdeps/i386/bsd-_setjmp.S: Fix typo in name: setjmp -> _setjmp.
 
 Tue Apr  4 00:48:53 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>
index 6ea2b9b..e4e075c 100644 (file)
@@ -38,14 +38,34 @@ static char sccsid[] = "@(#)login_tty.c     8.1 (Berkeley) 6/4/93";
 #include <sys/param.h>
 #include <sys/ioctl.h>
 #include <unistd.h>
+#include <fcntl.h>
 
 int
 login_tty(fd)
        int fd;
 {
        (void) setsid();
+#ifdef TIOCSCTTY
        if (ioctl(fd, TIOCSCTTY, (char *)NULL) == -1)
                return (-1);
+#else
+       {
+         /* This might work.  */
+         char *fdname = ttyname (fd);
+         int newfd;
+         if (fdname)
+           {
+             if (fd != 0)
+               (void) close (0);
+             if (fd != 1)
+               (void) close (1);
+             if (fd != 2)
+               (void) close (2);
+             newfd = open (fdname, O_RDWR);
+             (void) close (newfd);
+           }
+       }
+#endif
        (void) dup2(fd, 0);
        (void) dup2(fd, 1);
        (void) dup2(fd, 2);