diff options
| author | Mark Johnston <markj@FreeBSD.org> | 2016-02-25 19:58:23 +0000 |
|---|---|---|
| committer | Mark Johnston <markj@FreeBSD.org> | 2016-02-25 19:58:23 +0000 |
| commit | 0acf5d0bfdfe43ad4e4f950a01b4648e72c08a42 (patch) | |
| tree | b010a81a603d2e4723b6c282351b854c13946c40 | |
| parent | d173587f9a5a67e0de9708dba043d021758d26b4 (diff) | |
Notes
| -rw-r--r-- | sys/compat/freebsd32/freebsd32_misc.c | 13 | ||||
| -rw-r--r-- | sys/kern/sys_generic.c | 16 | ||||
| -rw-r--r-- | sys/kern/vfs_syscalls.c | 13 | ||||
| -rw-r--r-- | sys/sys/syscallsubr.h | 1 |
4 files changed, 31 insertions, 12 deletions
diff --git a/sys/compat/freebsd32/freebsd32_misc.c b/sys/compat/freebsd32/freebsd32_misc.c index 7a33d619ba866..bdcdf6f0b611c 100644 --- a/sys/compat/freebsd32/freebsd32_misc.c +++ b/sys/compat/freebsd32/freebsd32_misc.c @@ -2965,21 +2965,22 @@ int freebsd32_posix_fallocate(struct thread *td, struct freebsd32_posix_fallocate_args *uap) { + int error; - td->td_retval[0] = kern_posix_fallocate(td, uap->fd, + error = kern_posix_fallocate(td, uap->fd, PAIR32TO64(off_t, uap->offset), PAIR32TO64(off_t, uap->len)); - return (0); + return (kern_posix_error(td, error)); } int freebsd32_posix_fadvise(struct thread *td, struct freebsd32_posix_fadvise_args *uap) { + int error; - td->td_retval[0] = kern_posix_fadvise(td, uap->fd, - PAIR32TO64(off_t, uap->offset), PAIR32TO64(off_t, uap->len), - uap->advice); - return (0); + error = kern_posix_fadvise(td, uap->fd, PAIR32TO64(off_t, uap->offset), + PAIR32TO64(off_t, uap->len), uap->advice); + return (kern_posix_error(td, error)); } int diff --git a/sys/kern/sys_generic.c b/sys/kern/sys_generic.c index 55ae6500017c9..fe79f52929be5 100644 --- a/sys/kern/sys_generic.c +++ b/sys/kern/sys_generic.c @@ -1910,3 +1910,19 @@ selectinit(void *dummy __unused) NULL, NULL, UMA_ALIGN_PTR, 0); mtxpool_select = mtx_pool_create("select mtxpool", 128, MTX_DEF); } + +/* + * Set up a syscall return value that follows the convention specified for + * posix_* functions. + */ +int +kern_posix_error(struct thread *td, int error) +{ + + if (error <= 0) + return (error); + td->td_errno = error; + td->td_pflags |= TDP_NERRNO; + td->td_retval[0] = error; + return (0); +} diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c index 0762ca7a73fdd..26bcfa0a092e2 100644 --- a/sys/kern/vfs_syscalls.c +++ b/sys/kern/vfs_syscalls.c @@ -4533,10 +4533,10 @@ kern_posix_fallocate(struct thread *td, int fd, off_t offset, off_t len) int sys_posix_fallocate(struct thread *td, struct posix_fallocate_args *uap) { + int error; - td->td_retval[0] = kern_posix_fallocate(td, uap->fd, uap->offset, - uap->len); - return (0); + error = kern_posix_fallocate(td, uap->fd, uap->offset, uap->len); + return (kern_posix_error(td, error)); } /* @@ -4668,8 +4668,9 @@ out: int sys_posix_fadvise(struct thread *td, struct posix_fadvise_args *uap) { + int error; - td->td_retval[0] = kern_posix_fadvise(td, uap->fd, uap->offset, - uap->len, uap->advice); - return (0); + error = kern_posix_fadvise(td, uap->fd, uap->offset, uap->len, + uap->advice); + return (kern_posix_error(td, error)); } diff --git a/sys/sys/syscallsubr.h b/sys/sys/syscallsubr.h index f7773f429463f..a0e58e9e79c17 100644 --- a/sys/sys/syscallsubr.h +++ b/sys/sys/syscallsubr.h @@ -158,6 +158,7 @@ int kern_pipe(struct thread *td, int fildes[2], int flags, struct filecaps *fcaps1, struct filecaps *fcaps2); int kern_poll(struct thread *td, struct pollfd *fds, u_int nfds, struct timespec *tsp, sigset_t *uset); +int kern_posix_error(struct thread *td, int error); int kern_posix_fadvise(struct thread *td, int fd, off_t offset, off_t len, int advice); int kern_posix_fallocate(struct thread *td, int fd, off_t offset, |
