errno_t sc_isatty(thread_t *t, syscall_result_t *r, sc_isatty_args *args) { r->result = 0; file_t *file = f_get(t->thr_proc->p_fd, args->fd); if (file == NULL) { return -EBADF; } if(!vnode_isatty(file->f_vnode)) { frele(file); return -ENOTTY; } frele(file); r->result = 1; return -EOK; }
int sc_ftruncate(thread_t *t, syscall_result_t *r, ftruncate_args_t *args) { file_t *f = f_get(t->thr_proc->p_fd, args->fd); if(!f) return -EBADF; f_truncate(f, args->length); frele(f); return -EOK; }
errno_t sc_lseek(thread_t *p, syscall_result_t *r, lseek_args *args) { file_t *f = f_get(p->thr_proc->p_fd, args->fd); if (!f) return -EBADF; int res = f_seek(f, args->offset, args->whence); frele(f); if(res < 0) return res; r->result = res; return -EOK; }
errno_t sc_ioctl(thread_t *t, syscall_result_t *r, sc_ioctl_args *args) { file_t *file = f_get(t->thr_proc->p_fd, args->fd); if (file == NULL) { return -EBADF; } int res = f_ioctl(file, args->cmd, args->arg); frele(file); if(res < 0) return res; r->result = res; return -EOK; }
int kern_file_sync (cfs_file_t *fp) { struct vnode *vp = (struct vnode *)fp->f_data; struct proc *p = current_proc(); int error = 0; CFS_DECL_CONE_DATA; CFS_CONE_IN; if (fref(fp) == -1) { CFS_CONE_EX; return (-EBADF); } vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p); error = VOP_FSYNC(vp, fp->f_cred, MNT_WAIT, p); VOP_UNLOCK(vp, 0, p); frele(fp); CFS_CONE_EX; return error; }