diff options
Diffstat (limited to 'libc')
| -rw-r--r-- | libc/sysdeps/linux/common/posix_fadvise.c | 30 | 
1 files changed, 24 insertions, 6 deletions
diff --git a/libc/sysdeps/linux/common/posix_fadvise.c b/libc/sysdeps/linux/common/posix_fadvise.c index 25c294178..14bbeeea1 100644 --- a/libc/sysdeps/linux/common/posix_fadvise.c +++ b/libc/sysdeps/linux/common/posix_fadvise.c @@ -22,17 +22,34 @@  # include <endian.h>  # include <bits/wordsize.h> -# ifdef __NR_fadvise64_64 -int posix_fadvise64(int fd, off64_t offset, off64_t len, int advice); -# endif +# if defined(__NR_fadvise64_64) && defined(__UCLIBC_HAS_LFS__) +#include <_lfs_64.h> +int posix_fadvise64(int fd, off64_t offset, off64_t len, int advice);  int posix_fadvise(int fd, off_t offset, off_t len, int advice)  { -# ifdef __NR_fadvise64_64  	return posix_fadvise64(fd, offset, len, advice); -# else +} +#else + +int posix_fadvise(int fd, off_t offset, off_t len, int advice) +{  	int ret;  	INTERNAL_SYSCALL_DECL(err); + +# ifdef __NR_fadvise64_64 +#  if __WORDSIZE == 64 +	ret = INTERNAL_SYSCALL(fadvise64_64, err, 4, fd, offset, len, advice); +#  else +#   if defined(__UCLIBC_SYSCALL_ALIGN_64BIT__) || defined(__arm__) +	ret = INTERNAL_SYSCALL(fadvise64_64, err, 6, fd, advice, +			OFF_HI_LO (offset), OFF_HI_LO (len)); +#   else +	ret = INTERNAL_SYSCALL(fadvise64_64, err, 6, fd, +			OFF_HI_LO (offset), OFF_HI_LO (len), advice); +#   endif +#  endif +# else  /* __NR_fadvise64 */  #  if __WORDSIZE == 64  	ret = INTERNAL_SYSCALL(fadvise64, err, 4, fd, offset, len, advice);  #  else @@ -43,12 +60,13 @@ int posix_fadvise(int fd, off_t offset, off_t len, int advice)  #   endif  			OFF_HI_LO (offset), len, advice);  #  endif +#  endif  	if (INTERNAL_SYSCALL_ERROR_P (ret, err))  		return INTERNAL_SYSCALL_ERRNO (ret, err);  	return 0; -#  endif  }  # if defined __UCLIBC_HAS_LFS__ && (!defined __NR_fadvise64_64 || __WORDSIZE == 64)  strong_alias(posix_fadvise,posix_fadvise64)  # endif  #endif +#endif  | 
