|
|
researchv10 Norman
#include "sys/param.h"
#include "sys/user.h"
#include "sys/inode.h"
#include "sys/file.h"
#include "sys/conf.h"
#include "sys/filio.h"
/*
* ioctl system call
* Check legality, execute common code, and switch out to individual
* device routine.
*/
ioctl()
{
register struct file *fp;
register struct inode *ip;
register struct a {
int fdes;
int cmd;
caddr_t cmarg;
} *uap;
uap = (struct a *)u.u_ap;
if ((fp = getf(uap->fdes)) == NULL
|| (fp->f_flag & (FREAD|FWRITE)) == 0) {
u.u_error = EBADF;
return;
}
ip = fp->f_inode;
switch (uap->cmd) {
case FIOCLEX: /* close on exec */
u.u_pofile[uap->fdes] |= EXCLOSE;
return;
case FIONCLEX: /* no close on exec */
u.u_pofile[uap->fdes] &= ~EXCLOSE;
return;
}
if (ip->i_sptr) {
stioctl(ip, uap->cmd, uap->cmarg);
return;
}
(*fstypsw[ip->i_fstyp]->t_ioctl)(ip, uap->cmd, uap->cmarg, fp->f_flag);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.