Rename aout_imgact.c and shell_imgact.c to imgact_* for consistency.
[unix-history] / sys / kern / tty_pty.c
index 143fd34..7a10916 100644 (file)
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     @(#)tty_pty.c   7.21 (Berkeley) 5/30/91
- *
- * PATCHES MAGIC                LEVEL   PATCH THAT GOT US HERE
- * --------------------         -----   ----------------------
- * CURRENT PATCH LEVEL:         5       00094
- * --------------------         -----   ----------------------
- *
- * 11 Dec 92   Williams Jolitz         Fixed tty handling
- *
- * 28 Nov 1991 Warren Toomey           Cleaned up the use of COMPAT_43
- *                                     in the 386BSD kernel.    
- * 6 Oct 1992  Holger Veit             Fixed 'hanging console' bug
- * 11 Jan 93   Julian Elischer         Fixes multiple processes on one
- *                                     pty bug
- * 27 Feb 93   Charles Hannum          Proper return values for ptsclose()
- *                                     and ptcclose()
+ *     from: @(#)tty_pty.c     7.21 (Berkeley) 5/30/91
+ *     $Id: tty_pty.c,v 1.5 1993/11/25 01:33:29 wollman Exp $
  */
  */
-static char rcsid[] = "$Header: /usr/bill/working/sys/kern/RCS/tty_pty.c,v 1.3 92/01/21 21:31:23 william Exp $";
 
 /*
  * Pseudo-teletype Driver
 
 /*
  * Pseudo-teletype Driver
@@ -66,6 +51,7 @@ static char rcsid[] = "$Header: /usr/bill/working/sys/kern/RCS/tty_pty.c,v 1.3 9
 #include "uio.h"
 #include "kernel.h"
 #include "vnode.h"
 #include "uio.h"
 #include "kernel.h"
 #include "vnode.h"
+#include "signalvar.h"
 
 #if NPTY == 1
 #undef NPTY
 
 #if NPTY == 1
 #undef NPTY
@@ -74,6 +60,8 @@ static char rcsid[] = "$Header: /usr/bill/working/sys/kern/RCS/tty_pty.c,v 1.3 9
 
 #define BUFSIZ 100             /* Chunk size iomoved to/from user */
 
 
 #define BUFSIZ 100             /* Chunk size iomoved to/from user */
 
+static void ptcwakeup(struct tty *, int);
+
 /*
  * pts == /dev/tty[pqrs]?
  * ptc == /dev/pty[pqrs]?
 /*
  * pts == /dev/tty[pqrs]?
  * ptc == /dev/pty[pqrs]?
@@ -96,8 +84,11 @@ int  npty = NPTY;            /* for pstat -t */
 #define PF_UCNTL       0x80            /* user control mode */
 
 /*ARGSUSED*/
 #define PF_UCNTL       0x80            /* user control mode */
 
 /*ARGSUSED*/
+int
 ptsopen(dev, flag, devtype, p)
        dev_t dev;
 ptsopen(dev, flag, devtype, p)
        dev_t dev;
+       int flag;
+       int devtype;
        struct proc *p;
 {
        register struct tty *tp;
        struct proc *p;
 {
        register struct tty *tp;
@@ -135,6 +126,7 @@ ptsopen(dev, flag, devtype, p)
        return (error);
 }
 
        return (error);
 }
 
+int
 ptsclose(dev, flag, mode, p)
        dev_t dev;
        int flag, mode;
 ptsclose(dev, flag, mode, p)
        dev_t dev;
        int flag, mode;
@@ -149,9 +141,11 @@ ptsclose(dev, flag, mode, p)
        return(0);
 }
 
        return(0);
 }
 
+int
 ptsread(dev, uio, flag)
        dev_t dev;
        struct uio *uio;
 ptsread(dev, uio, flag)
        dev_t dev;
        struct uio *uio;
+       int flag;
 {
        struct proc *p = curproc;
        register struct tty *tp = &pt_tty[minor(dev)];
 {
        struct proc *p = curproc;
        register struct tty *tp = &pt_tty[minor(dev)];
@@ -200,9 +194,11 @@ again:
  * Wakeups of controlling tty will happen
  * indirectly, when tty driver calls ptsstart.
  */
  * Wakeups of controlling tty will happen
  * indirectly, when tty driver calls ptsstart.
  */
+int
 ptswrite(dev, uio, flag)
        dev_t dev;
        struct uio *uio;
 ptswrite(dev, uio, flag)
        dev_t dev;
        struct uio *uio;
+       int flag;
 {
        register struct tty *tp;
 
 {
        register struct tty *tp;
 
@@ -216,6 +212,7 @@ ptswrite(dev, uio, flag)
  * Start output on pseudo-tty.
  * Wake up process selecting or sleeping for input from controlling tty.
  */
  * Start output on pseudo-tty.
  * Wake up process selecting or sleeping for input from controlling tty.
  */
+void
 ptsstart(tp)
        struct tty *tp;
 {
 ptsstart(tp)
        struct tty *tp;
 {
@@ -230,8 +227,10 @@ ptsstart(tp)
        ptcwakeup(tp, FREAD);
 }
 
        ptcwakeup(tp, FREAD);
 }
 
+static void
 ptcwakeup(tp, flag)
        struct tty *tp;
 ptcwakeup(tp, flag)
        struct tty *tp;
+       int flag;
 {
        struct pt_ioctl *pti = &pt_ioctl[minor(tp->t_dev)];
 
 {
        struct pt_ioctl *pti = &pt_ioctl[minor(tp->t_dev)];
 
@@ -254,8 +253,9 @@ ptcwakeup(tp, flag)
 }
 
 /*ARGSUSED*/
 }
 
 /*ARGSUSED*/
+int
 #ifdef __STDC__
 #ifdef __STDC__
-ptcopen(dev_t dev, int flag, int devtype, struct proc *p)
+ptcopen(int /*dev_t*/ dev, int flag, int devtype, struct proc *p)
 #else
 ptcopen(dev, flag, devtype, p)
        dev_t dev;
 #else
 ptcopen(dev, flag, devtype, p)
        dev_t dev;
@@ -282,6 +282,8 @@ ptcopen(dev, flag, devtype, p)
 }
 
 extern struct tty *constty;    /* -hv- 06.Oct.92*/
 }
 
 extern struct tty *constty;    /* -hv- 06.Oct.92*/
+
+int
 ptcclose(dev)
        dev_t dev;
 {
 ptcclose(dev)
        dev_t dev;
 {
@@ -300,9 +302,11 @@ ptcclose(dev)
        return (0);
 }
 
        return (0);
 }
 
+int
 ptcread(dev, uio, flag)
        dev_t dev;
        struct uio *uio;
 ptcread(dev, uio, flag)
        dev_t dev;
        struct uio *uio;
+       int flag;
 {
        register struct tty *tp = &pt_tty[minor(dev)];
        struct pt_ioctl *pti = &pt_ioctl[minor(dev)];
 {
        register struct tty *tp = &pt_tty[minor(dev)];
        struct pt_ioctl *pti = &pt_ioctl[minor(dev)];
@@ -378,6 +382,7 @@ ptcread(dev, uio, flag)
        return (error);
 }
 
        return (error);
 }
 
+void
 ptsstop(tp, flush)
        register struct tty *tp;
        int flush;
 ptsstop(tp, flush)
        register struct tty *tp;
        int flush;
@@ -401,6 +406,7 @@ ptsstop(tp, flush)
        ptcwakeup(tp, flag);
 }
 
        ptcwakeup(tp, flag);
 }
 
+int
 ptcselect(dev, rw, p)
        dev_t dev;
        int rw;
 ptcselect(dev, rw, p)
        dev_t dev;
        int rw;
@@ -462,12 +468,14 @@ ptcselect(dev, rw, p)
        return (0);
 }
 
        return (0);
 }
 
+int
 ptcwrite(dev, uio, flag)
        dev_t dev;
        register struct uio *uio;
 ptcwrite(dev, uio, flag)
        dev_t dev;
        register struct uio *uio;
+       int flag;
 {
        register struct tty *tp = &pt_tty[minor(dev)];
 {
        register struct tty *tp = &pt_tty[minor(dev)];
-       register u_char *cp;
+       register u_char *cp = 0;
        register int cc = 0;
        u_char locbuf[BUFSIZ];
        int cnt = 0;
        register int cc = 0;
        u_char locbuf[BUFSIZ];
        int cnt = 0;
@@ -483,7 +491,7 @@ again:
                while (uio->uio_resid > 0 && RB_LEN(&tp->t_can) < TTYHOG - 1) {
                        if (cc == 0) {
                                cc = min(uio->uio_resid, BUFSIZ);
                while (uio->uio_resid > 0 && RB_LEN(&tp->t_can) < TTYHOG - 1) {
                        if (cc == 0) {
                                cc = min(uio->uio_resid, BUFSIZ);
-                               cc = min(cc, TTYHOG - 1 - RB_CONTIGPUT(&tp->t_can));
+                               cc = min(cc, RB_CONTIGPUT(&tp->t_can));
                                cp = locbuf;
                                error = uiomove((caddr_t)cp, cc, uio);
                                if (error)
                                cp = locbuf;
                                error = uiomove((caddr_t)cp, cc, uio);
                                if (error)
@@ -557,15 +565,17 @@ block:
 }
 
 /*ARGSUSED*/
 }
 
 /*ARGSUSED*/
+int
 ptyioctl(dev, cmd, data, flag)
        caddr_t data;
 ptyioctl(dev, cmd, data, flag)
        caddr_t data;
+       int cmd;
        dev_t dev;
        dev_t dev;
+       int flag;
 {
        register struct tty *tp = &pt_tty[minor(dev)];
        register struct pt_ioctl *pti = &pt_ioctl[minor(dev)];
        register u_char *cc = tp->t_cc;
        int stop, error;
 {
        register struct tty *tp = &pt_tty[minor(dev)];
        register struct pt_ioctl *pti = &pt_ioctl[minor(dev)];
        register u_char *cc = tp->t_cc;
        int stop, error;
-       extern ttyinput();
 
        /*
         * IF CONTROLLER STTY THEN MUST FLUSH TO PREVENT A HANG.
 
        /*
         * IF CONTROLLER STTY THEN MUST FLUSH TO PREVENT A HANG.
@@ -655,8 +665,9 @@ ptyioctl(dev, cmd, data, flag)
                        return(0);
                }
        error = (*linesw[tp->t_line].l_ioctl)(tp, cmd, data, flag);
                        return(0);
                }
        error = (*linesw[tp->t_line].l_ioctl)(tp, cmd, data, flag);
-       if (error < 0)
-                error = ttioctl(tp, cmd, data, flag);
+       if (error >= 0)
+           return (error);
+       error = ttioctl(tp, cmd, data, flag);
        /*
         * Since we use the tty queues internally,
         * pty's can't be switched to disciplines which overwrite
        /*
         * Since we use the tty queues internally,
         * pty's can't be switched to disciplines which overwrite