Ping ! On Thursday 09 January 2014 03:05 PM, Vineet Gupta wrote: > commit 00571b43df2e "libc: posix_fadvise: restore implementation for xtensa" > enabled posix_fadvise() for all arches (it was just not generated > before). > > However this also unearthed an issue introduced by ee84b8b400 > "linux: posix_fadvise: use new SYSCALL_ALIGN_64BIT" which is to > referencing LFS'ish code (off64_t) w/o proper checks which causes build > to break for !LFS. > > Fix this by calling posix_fadvise64() only for LFS case and open-code > it's equivalent for !LFS. > > Signed-off-by: Vineet Gupta <[email protected]> > Cc: Mike Frysinger <[email protected]> > Cc: Baruch Siach <[email protected]> > Cc: Khem Raj <[email protected]> > Cc: markos Chandras <[email protected]> > Cc: Bernhard Reutner-Fischer <[email protected]> > --- > libc/sysdeps/linux/common/posix_fadvise.c | 30 ++++++++++++++++++++++++------ > 1 file changed, 24 insertions(+), 6 deletions(-) > > diff --git a/libc/sysdeps/linux/common/posix_fadvise.c > b/libc/sysdeps/linux/common/posix_fadvise.c > index 25c294178e5e..14bbeeea13bc 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 >
_______________________________________________ uClibc mailing list [email protected] http://lists.busybox.net/mailman/listinfo/uclibc
