예제 #1
0
파일: isatty.c 프로젝트: akat1/impala
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;
}
예제 #2
0
파일: ftruncate.c 프로젝트: akat1/impala
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;
}
예제 #3
0
파일: lseek.c 프로젝트: akat1/impala
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;
}
예제 #4
0
파일: ioctl.c 프로젝트: akat1/impala
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;
}
예제 #5
0
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;
}