- if(u.u_ttyp == NULL || (u.u_procp->p_flag&SDETACH)) {
- u.u_error = ENXIO;
- return;
- }
- (*cdevsw[major(u.u_ttyd)].d_open)(u.u_ttyd, flag);
+ if (ttyvp == NULL)
+ return (ENXIO);
+ VOP_LOCK(ttyvp);
+ error = VOP_ACCESS(ttyvp,
+ (flag&FREAD ? VREAD : 0) | (flag&FWRITE ? VWRITE : 0), u.u_cred);
+ VOP_UNLOCK(ttyvp);
+ if (error)
+ return (error);
+ return (VOP_OPEN(ttyvp, flag, NOCRED));