diff options
-rw-r--r-- | lib/libc/gen/pmadvise.c | 12 | ||||
-rw-r--r-- | lib/libc/sys/madvise.2 | 7 | ||||
-rw-r--r-- | lib/libc/sys/posix_fadvise.2 | 4 | ||||
-rw-r--r-- | lib/libc/sys/posix_fallocate.2 | 5 | ||||
-rw-r--r-- | sys/compat/freebsd32/freebsd32_misc.c | 6 | ||||
-rw-r--r-- | sys/kern/vfs_syscalls.c | 5 |
6 files changed, 27 insertions, 12 deletions
diff --git a/lib/libc/gen/pmadvise.c b/lib/libc/gen/pmadvise.c index 60cef63..0dc77e3 100644 --- a/lib/libc/gen/pmadvise.c +++ b/lib/libc/gen/pmadvise.c @@ -8,9 +8,19 @@ __FBSDID("$FreeBSD$"); #include <sys/mman.h> +#include <errno.h> int posix_madvise(void *address, size_t size, int how) { - return madvise(address, size, how); + int ret, saved_errno; + + saved_errno = errno; + if (madvise(address, size, how) == -1) { + ret = errno; + errno = saved_errno; + } else { + ret = 0; + } + return (ret); } diff --git a/lib/libc/sys/madvise.2 b/lib/libc/sys/madvise.2 index b5ea6b2..357e05e 100644 --- a/lib/libc/sys/madvise.2 +++ b/lib/libc/sys/madvise.2 @@ -28,7 +28,7 @@ .\" @(#)madvise.2 8.1 (Berkeley) 6/9/93 .\" $FreeBSD$ .\" -.Dd July 19, 1996 +.Dd January 30, 2014 .Dt MADVISE 2 .Os .Sh NAME @@ -50,7 +50,10 @@ allows a process that has knowledge of its memory behavior to describe it to the system. The .Fn posix_madvise -interface is identical and is provided for standards conformance. +interface is identical, except it returns an error number on error and does +not modify +.Va errno , +and is provided for standards conformance. .Pp The known behaviors are: .Bl -tag -width MADV_SEQUENTIAL diff --git a/lib/libc/sys/posix_fadvise.2 b/lib/libc/sys/posix_fadvise.2 index 7a9a648..8691f6b 100644 --- a/lib/libc/sys/posix_fadvise.2 +++ b/lib/libc/sys/posix_fadvise.2 @@ -28,7 +28,7 @@ .\" @(#)madvise.2 8.1 (Berkeley) 6/9/93 .\" $FreeBSD$ .\" -.Dd June 19, 2012 +.Dd January 30, 2014 .Dt POSIX_FADVISE 2 .Os .Sh NAME @@ -93,7 +93,7 @@ Future access to this data may require a read operation. .Sh ERRORS The .Fn posix_fadvise -system call will fail if: +system call returns zero on success, and an error on failure: .Bl -tag -width Er .It Bq Er EBADF The diff --git a/lib/libc/sys/posix_fallocate.2 b/lib/libc/sys/posix_fallocate.2 index 1460764..7501777 100644 --- a/lib/libc/sys/posix_fallocate.2 +++ b/lib/libc/sys/posix_fallocate.2 @@ -83,9 +83,8 @@ that reduces the file size to a size smaller than If successful, .Fn posix_fallocate returns zero. -It returns error number on failure, without setting -.Va errno -variable. +It returns an error on failure, without setting +.Va errno . .Sh ERRORS Possible failure conditions: .Bl -tag -width Er diff --git a/sys/compat/freebsd32/freebsd32_misc.c b/sys/compat/freebsd32/freebsd32_misc.c index e4ffbe4..c7b677f 100644 --- a/sys/compat/freebsd32/freebsd32_misc.c +++ b/sys/compat/freebsd32/freebsd32_misc.c @@ -3005,8 +3005,10 @@ freebsd32_posix_fadvise(struct thread *td, struct freebsd32_posix_fadvise_args *uap) { - return (kern_posix_fadvise(td, uap->fd, PAIR32TO64(off_t, uap->offset), - PAIR32TO64(off_t, uap->len), uap->advice)); + td->td_retval[0] = kern_posix_fadvise(td, uap->fd, + PAIR32TO64(off_t, uap->offset), PAIR32TO64(off_t, uap->len), + uap->advice); + return (0); } int diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c index b864c90..4be9738 100644 --- a/sys/kern/vfs_syscalls.c +++ b/sys/kern/vfs_syscalls.c @@ -4725,6 +4725,7 @@ int sys_posix_fadvise(struct thread *td, struct posix_fadvise_args *uap) { - return (kern_posix_fadvise(td, uap->fd, uap->offset, uap->len, - uap->advice)); + td->td_retval[0] = kern_posix_fadvise(td, uap->fd, uap->offset, + uap->len, uap->advice); + return (0); } |