projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
must include proc before tty.h and socketvar.h
[unix-history]
/
usr
/
src
/
sys
/
kern
/
tty_tty.c
diff --git
a/usr/src/sys/kern/tty_tty.c
b/usr/src/sys/kern/tty_tty.c
index
882b7f5
..
9b26f68
100644
(file)
--- a/
usr/src/sys/kern/tty_tty.c
+++ b/
usr/src/sys/kern/tty_tty.c
@@
-1,93
+1,111
@@
-/*
- * Copyright (c) 1982, 1986 Regents of the University of California.
- * All rights reserved. The Berkeley software License Agreement
- * specifies the terms and conditions for redistribution.
+/*-
+ * Copyright (c) 1982, 1986, 1991 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * %sccs.include.redist.c%
*
*
- * @(#)tty_tty.c 7.
2
(Berkeley) %G%
+ * @(#)tty_tty.c 7.
17
(Berkeley) %G%
*/
/*
* Indirect driver for controlling tty.
*/
/*
* Indirect driver for controlling tty.
- *
- * THIS IS GARBAGE: MUST SOON BE DONE WITH struct inode * IN PROC TABLE.
*/
#include "param.h"
#include "systm.h"
#include "conf.h"
*/
#include "param.h"
#include "systm.h"
#include "conf.h"
-#include "dir.h"
-#include "user.h"
#include "ioctl.h"
#include "ioctl.h"
-#include "tty.h"
#include "proc.h"
#include "proc.h"
-#include "uio.h"
+#include "tty.h"
+#include "vnode.h"
+#include "file.h"
+
+#define cttyvp(p) ((p)->p_flag&SCTTY ? (p)->p_session->s_ttyvp : NULL)
/*ARGSUSED*/
/*ARGSUSED*/
-
syopen(dev, flag
)
+
cttyopen(dev, flag, mode, p
)
dev_t dev;
dev_t dev;
- int flag;
+ int flag, mode;
+ struct proc *p;
{
{
+ struct vnode *ttyvp = cttyvp(p);
+ int error;
- if (
u.u_tty
p == NULL)
+ if (
ttyv
p == NULL)
return (ENXIO);
return (ENXIO);
- return ((*cdevsw[major(u.u_ttyd)].d_open)(u.u_ttyd, flag));
+ VOP_LOCK(ttyvp);
+ error = VOP_ACCESS(ttyvp,
+ (flag&FREAD ? VREAD : 0) | (flag&FWRITE ? VWRITE : 0), p->p_ucred, p);
+ if (!error)
+ error = VOP_OPEN(ttyvp, flag, NOCRED, p);
+ VOP_UNLOCK(ttyvp);
+ return (error);
}
/*ARGSUSED*/
}
/*ARGSUSED*/
-
syread(dev, uio
)
+
cttyread(dev, uio, flag
)
dev_t dev;
struct uio *uio;
dev_t dev;
struct uio *uio;
+ int flag;
{
{
+ register struct vnode *ttyvp = cttyvp(uio->uio_procp);
+ int error;
- if (u.u_ttyp == NULL)
- return (ENXIO);
- return ((*cdevsw[major(u.u_ttyd)].d_read)(u.u_ttyd, uio));
+ if (ttyvp == NULL)
+ return (EIO);
+ VOP_LOCK(ttyvp);
+ error = VOP_READ(ttyvp, uio, flag, NOCRED);
+ VOP_UNLOCK(ttyvp);
+ return (error);
}
/*ARGSUSED*/
}
/*ARGSUSED*/
-
sywrite(dev, uio
)
+
cttywrite(dev, uio, flag
)
dev_t dev;
struct uio *uio;
dev_t dev;
struct uio *uio;
+ int flag;
{
{
+ register struct vnode *ttyvp = cttyvp(uio->uio_procp);
+ int error;
- if (u.u_ttyp == NULL)
- return (ENXIO);
- return ((*cdevsw[major(u.u_ttyd)].d_write)(u.u_ttyd, uio));
+ if (ttyvp == NULL)
+ return (EIO);
+ VOP_LOCK(ttyvp);
+ error = VOP_WRITE(ttyvp, uio, flag, NOCRED);
+ VOP_UNLOCK(ttyvp);
+ return (error);
}
/*ARGSUSED*/
}
/*ARGSUSED*/
-
syioctl(dev, cmd, addr, flag
)
+
cttyioctl(dev, cmd, addr, flag, p
)
dev_t dev;
int cmd;
caddr_t addr;
int flag;
dev_t dev;
int cmd;
caddr_t addr;
int flag;
+ struct proc *p;
{
{
+ struct vnode *ttyvp = cttyvp(p);
+ if (ttyvp == NULL)
+ return (EIO);
if (cmd == TIOCNOTTY) {
if (cmd == TIOCNOTTY) {
- u.u_ttyp = 0;
- u.u_ttyd = 0;
- if (SESS_LEADER(u.u_procp)) {
- /*
- * XXX - check posix draft
- */
- u.u_ttyp->t_session = 0;
- u.u_ttyp->t_pgid = 0;
- }
- return (0);
+ if (!SESS_LEADER(p)) {
+ p->p_flag &= ~SCTTY;
+ return (0);
+ } else
+ return (EINVAL);
}
}
- if (u.u_ttyp == NULL)
- return (ENXIO);
- return ((*cdevsw[major(u.u_ttyd)].d_ioctl)(u.u_ttyd, cmd, addr, flag));
+ return (VOP_IOCTL(ttyvp, cmd, addr, flag, NOCRED, p));
}
/*ARGSUSED*/
}
/*ARGSUSED*/
-
syselect(dev, flag
)
+
cttyselect(dev, flag, p
)
dev_t dev;
int flag;
dev_t dev;
int flag;
+ struct proc *p;
{
{
+ struct vnode *ttyvp = cttyvp(p);
- if (u.u_ttyp == NULL) {
- u.u_error = ENXIO;
- return (0);
- }
- return ((*cdevsw[major(u.u_ttyd)].d_select)(u.u_ttyd, flag));
+ if (ttyvp == NULL)
+ return (1); /* try operation to get EOF/failure */
+ return (VOP_SELECT(ttyvp, flag, FREAD|FWRITE, NOCRED, p));
}
}