Changeset View
Changeset View
Standalone View
Standalone View
head/sys/kern/kern_descrip.c
Show First 20 Lines • Show All 483 Lines • ▼ Show 20 Lines | |||||
kern_fcntl(struct thread *td, int fd, int cmd, intptr_t arg) | kern_fcntl(struct thread *td, int fd, int cmd, intptr_t arg) | ||||
{ | { | ||||
struct filedesc *fdp; | struct filedesc *fdp; | ||||
struct flock *flp; | struct flock *flp; | ||||
struct file *fp, *fp2; | struct file *fp, *fp2; | ||||
struct filedescent *fde; | struct filedescent *fde; | ||||
struct proc *p; | struct proc *p; | ||||
struct vnode *vp; | struct vnode *vp; | ||||
int error, flg, tmp; | int error, flg, seals, tmp; | ||||
uint64_t bsize; | uint64_t bsize; | ||||
off_t foffset; | off_t foffset; | ||||
error = 0; | error = 0; | ||||
flg = F_POSIX; | flg = F_POSIX; | ||||
p = td->td_proc; | p = td->td_proc; | ||||
fdp = p->p_fd; | fdp = p->p_fd; | ||||
▲ Show 20 Lines • Show All 247 Lines • ▼ Show 20 Lines | if (flp->l_whence == SEEK_CUR) { | ||||
fdrop(fp, td); | fdrop(fp, td); | ||||
break; | break; | ||||
} | } | ||||
flp->l_start += foffset; | flp->l_start += foffset; | ||||
} | } | ||||
vp = fp->f_vnode; | vp = fp->f_vnode; | ||||
error = VOP_ADVLOCK(vp, (caddr_t)p->p_leader, F_GETLK, flp, | error = VOP_ADVLOCK(vp, (caddr_t)p->p_leader, F_GETLK, flp, | ||||
F_POSIX); | F_POSIX); | ||||
fdrop(fp, td); | |||||
break; | |||||
case F_ADD_SEALS: | |||||
error = fget_unlocked(fdp, fd, &cap_no_rights, &fp, NULL); | |||||
if (error != 0) | |||||
break; | |||||
error = fo_add_seals(fp, arg); | |||||
fdrop(fp, td); | |||||
break; | |||||
case F_GET_SEALS: | |||||
error = fget_unlocked(fdp, fd, &cap_no_rights, &fp, NULL); | |||||
if (error != 0) | |||||
break; | |||||
if (fo_get_seals(fp, &seals) == 0) | |||||
td->td_retval[0] = seals; | |||||
else | |||||
error = EINVAL; | |||||
fdrop(fp, td); | fdrop(fp, td); | ||||
break; | break; | ||||
case F_RDAHEAD: | case F_RDAHEAD: | ||||
arg = arg ? 128 * 1024: 0; | arg = arg ? 128 * 1024: 0; | ||||
/* FALLTHROUGH */ | /* FALLTHROUGH */ | ||||
case F_READAHEAD: | case F_READAHEAD: | ||||
error = fget_unlocked(fdp, fd, &cap_no_rights, &fp, NULL); | error = fget_unlocked(fdp, fd, &cap_no_rights, &fp, NULL); | ||||
▲ Show 20 Lines • Show All 3,497 Lines • Show Last 20 Lines |