bug fixes from elz and utcsrgv!thomson
[unix-history] / usr / src / sys / kern / tty_tty.c
index 4bbee83..57ed5b8 100644 (file)
@@ -1,7 +1,9 @@
-/*     tty_tty.c       3.1     %H%     */
+/*     tty_tty.c       4.9     82/03/31        */
 
 /*
 
 /*
- *     indirect driver for controlling tty.
+ * Indirect driver for controlling tty.
+ *
+ * THIS IS GARBAGE: MUST SOON BE DONE WITH struct inode * IN PROC TABLE.
  */
 #include "../h/param.h"
 #include "../h/systm.h"
  */
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -15,7 +17,7 @@
 syopen(dev, flag)
 {
 
 syopen(dev, flag)
 {
 
-       if(u.u_ttyp == NULL) {
+       if (u.u_ttyp == NULL) {
                u.u_error = ENXIO;
                return;
        }
                u.u_error = ENXIO;
                return;
        }
@@ -26,6 +28,10 @@ syopen(dev, flag)
 syread(dev)
 {
 
 syread(dev)
 {
 
+       if (u.u_ttyp == NULL) {
+               u.u_error = ENXIO;
+               return;
+       }
        (*cdevsw[major(u.u_ttyd)].d_read)(u.u_ttyd);
 }
 
        (*cdevsw[major(u.u_ttyd)].d_read)(u.u_ttyd);
 }
 
@@ -33,13 +39,40 @@ syread(dev)
 sywrite(dev)
 {
 
 sywrite(dev)
 {
 
+       if (u.u_ttyp == NULL) {
+               u.u_error = ENXIO;
+               return;
+       }
        (*cdevsw[major(u.u_ttyd)].d_write)(u.u_ttyd);
 }
 
 /*ARGSUSED*/
 syioctl(dev, cmd, addr, flag)
        (*cdevsw[major(u.u_ttyd)].d_write)(u.u_ttyd);
 }
 
 /*ARGSUSED*/
 syioctl(dev, cmd, addr, flag)
-caddr_t addr;
+       dev_t dev;
+       int cmd;
+       caddr_t addr;
+       int flag;
 {
 
 {
 
+       if (cmd == TIOCNOTTY) {
+               u.u_ttyp = 0;
+               u.u_ttyd = 0;
+               u.u_procp->p_pgrp = 0;
+               return;
+       }
+       if (u.u_ttyp == NULL) {
+               u.u_error = ENXIO;
+               return;
+       }
        (*cdevsw[major(u.u_ttyd)].d_ioctl)(u.u_ttyd, cmd, addr, flag);
 }
        (*cdevsw[major(u.u_ttyd)].d_ioctl)(u.u_ttyd, cmd, addr, flag);
 }
+
+syselect(dev, flag)
+{
+
+       if (u.u_ttyp == NULL) {
+               u.u_error = ENXIO;
+               return (0);
+       }
+       return ((*cdevsw[major(u.u_ttyd)].d_select)(u.u_ttyd, flag));
+}