Exemple #1
0
            if (err) {
                set_errno(EFAULT);
                goto out;
            }
        }
    }

    /* Actual ioctl call */
    retval = file->vnode->vnode_ops->ioctl(file, args.request,
                                           ioargs, args.arg_len);
    if (retval < 0)
        set_errno(-retval);

    /* Copyout if request type was get. */
    if (args.request & 1)
        copyout(ioargs, (__user void *)args.arg, args.arg_len);

out:
    kfree(ioargs);
    fs_fildes_ref(curproc->files, args.fd, -1);
    return retval;
}

/**
 * Declarations of fs syscall functions.
 */
static const syscall_handler_t fs_sysfnmap[] = {
    ARRDECL_SYSCALL_HNDL(SYSCALL_IOCTL_GETSET, sys_ioctl),
};
SYSCALL_HANDLERDEF(ioctl_syscall, fs_sysfnmap);
Exemple #2
0
static intptr_t sys_pipe(__user void * user_args)
{
    struct _ipc_pipe_args args;
    int err;

    if (!useracc(user_args, sizeof(args), VM_PROT_WRITE)) {
        set_errno(EFAULT);
        return -1;
    }
    copyin(user_args, &args, sizeof(args));

    err = fs_pipe_curproc_creat(curproc->files, args.fildes, args.len);
    if (err) {
        set_errno(-err);
        return -1;
    }

    copyout(&args, user_args, sizeof(args));

    return 0;
}

/**
 * Declarations of ipc syscall functions.
 */
static const syscall_handler_t ipc_sysfnmap[] = {
    ARRDECL_SYSCALL_HNDL(SYSCALL_IPC_PIPE, sys_pipe),
};
SYSCALL_HANDLERDEF(ipc_syscall, ipc_sysfnmap)
Exemple #3
0
    if (err) {
        set_errno(-err);
        goto out;
    }

    retval = 0;
out:
    freecpystruct(args);
    return retval;
}

/**
 * Declarations of fs syscall functions.
 */
static const syscall_handler_t fs_sysfnmap[] = {
    ARRDECL_SYSCALL_HNDL(SYSCALL_FS_OPEN, sys_open),
    ARRDECL_SYSCALL_HNDL(SYSCALL_FS_CLOSE, sys_close),
    ARRDECL_SYSCALL_HNDL(SYSCALL_FS_READ, sys_read),
    ARRDECL_SYSCALL_HNDL(SYSCALL_FS_WRITE, sys_write),
    ARRDECL_SYSCALL_HNDL(SYSCALL_FS_LSEEK, sys_lseek),
    ARRDECL_SYSCALL_HNDL(SYSCALL_FS_GETDENTS, sys_getdents),
    ARRDECL_SYSCALL_HNDL(SYSCALL_FS_FCNTL, sys_fcntl),
    ARRDECL_SYSCALL_HNDL(SYSCALL_FS_LINK, sys_link),
    ARRDECL_SYSCALL_HNDL(SYSCALL_FS_UNLINK, sys_unlink),
    ARRDECL_SYSCALL_HNDL(SYSCALL_FS_MKDIR, sys_mkdir),
    ARRDECL_SYSCALL_HNDL(SYSCALL_FS_RMDIR, sys_rmdir),
    ARRDECL_SYSCALL_HNDL(SYSCALL_FS_STAT, sys_filestat),
    ARRDECL_SYSCALL_HNDL(SYSCALL_FS_FSTAT, 0), /* Not implemented */
    ARRDECL_SYSCALL_HNDL(SYSCALL_FS_ACCESS, sys_access),
    ARRDECL_SYSCALL_HNDL(SYSCALL_FS_CHMOD, sys_chmod),
    ARRDECL_SYSCALL_HNDL(SYSCALL_FS_CHOWN, sys_chown),