ANSI
[unix-history] / usr / src / usr.bin / window / wwenviron.c
index 8e0f1c8..1aa6636 100644 (file)
@@ -2,24 +2,20 @@
  * Copyright (c) 1983 Regents of the University of California.
  * All rights reserved.
  *
  * Copyright (c) 1983 Regents of the University of California.
  * All rights reserved.
  *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley.  The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ * This code is derived from software contributed to Berkeley by
+ * Edward Wang at The University of California, Berkeley.
+ *
+ * %sccs.include.redist.c%
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)wwenviron.c        3.21 (Berkeley) %G%";
+static char sccsid[] = "@(#)wwenviron.c        3.27 (Berkeley) %G%";
 #endif /* not lint */
 
 #include "ww.h"
 #endif /* not lint */
 
 #include "ww.h"
+#if !defined(OLD_TTY) && !defined(TIOCSCTTY) && !defined(TIOCNOTTY)
+#include <sys/ioctl.h>
+#endif
 #include <sys/signal.h>
 
 /*
 #include <sys/signal.h>
 
 /*
@@ -29,18 +25,24 @@ wwenviron(wp)
 register struct ww *wp;
 {
        register i;
 register struct ww *wp;
 {
        register i;
+#ifndef TIOCSCTTY
        int pgrp = getpid();
        int pgrp = getpid();
+#endif
        char buf[1024];
 
        char buf[1024];
 
+#ifndef TIOCSCTTY
        if ((i = open("/dev/tty", 0)) < 0)
                goto bad;
        if (ioctl(i, TIOCNOTTY, (char *)0) < 0)
                goto bad;
        (void) close(i);
        if ((i = open("/dev/tty", 0)) < 0)
                goto bad;
        if (ioctl(i, TIOCNOTTY, (char *)0) < 0)
                goto bad;
        (void) close(i);
+#endif
        if ((i = wp->ww_socket) < 0) {
                if ((i = open(wp->ww_ttyname, 2)) < 0)
                        goto bad;
        if ((i = wp->ww_socket) < 0) {
                if ((i = open(wp->ww_ttyname, 2)) < 0)
                        goto bad;
-               if (wwsettty(i, &wwwintty, (struct ww_tty *)0) < 0)
+               if (wwsettty(i, &wwwintty) < 0)
+                       goto bad;
+               if (wwsetttysize(i, wp->ww_w.nr, wp->ww_w.nc) < 0)
                        goto bad;
        }
        (void) dup2(i, 0);
                        goto bad;
        }
        (void) dup2(i, 0);
@@ -48,8 +50,13 @@ register struct ww *wp;
        (void) dup2(i, 2);
        for (i = wwdtablesize - 1; i > 2; i--)
                (void) close(i);
        (void) dup2(i, 2);
        for (i = wwdtablesize - 1; i > 2; i--)
                (void) close(i);
+#ifdef TIOCSCTTY
+       (void) setsid();
+       (void) ioctl(0, TIOCSCTTY, 0);
+#else
        (void) ioctl(0, TIOCSPGRP, (char *)&pgrp);
        (void) setpgrp(pgrp, pgrp);
        (void) ioctl(0, TIOCSPGRP, (char *)&pgrp);
        (void) setpgrp(pgrp, pgrp);
+#endif
        /* SIGPIPE is the only one we ignore */
        (void) signal(SIGPIPE, SIG_DFL);
        (void) sigsetmask(0);
        /* SIGPIPE is the only one we ignore */
        (void) signal(SIGPIPE, SIG_DFL);
        (void) sigsetmask(0);