[PATCH 4/4] Consolidate Linux truncate implementations

Yury Norov ynorov@caviumnetworks.com
Thu Sep 22 15:52:00 GMT 2016


On Thu, Sep 22, 2016 at 11:42:11AM -0300, Adhemerval Zanella wrote:
> 
> 
> On 22/09/2016 11:24, Yury Norov wrote:
> >> +/* Truncate PATH to LENGTH bytes.  */
> >>  int
> >> -truncate64 (const char *path, off64_t length)
> >> +__truncate64 (const char *path, off64_t length)
> >>  {
> >> -  unsigned int low = length & 0xffffffff;
> >> -  unsigned int high = length >> 32;
> >> -  int result = INLINE_SYSCALL (truncate64, 3, path,
> >> -			       __LONG_LONG_PAIR (high, low));
> >> -  return result;
> >> +  return INLINE_SYSCALL_CALL (truncate64, path,
> >> +			      __ALIGNMENT_ARG SYSCALL_LL64 (length));
> >>  }
> >> +weak_alias (__truncate64, truncate64)
> >> +
> >> +#ifdef __OFF_T_MATCHES_OFF64_T
> >> +weak_alias (__truncate64, truncate);
> >> +#endif
> > 
> > It seems you forgot weak_alias (__truncate64, __truncate);
> > 
> 
> I do not think it requires to add __truncate alias since glibc currently
> does have internal calls to truncate.

Sorry, I was meaning __ftruncate: 
/home/yury/work/toolchain/build-glibc-aarch64-thunderx-linux-gnu-mabi-ilp32/libc_pic.os:
In function `internal_fallocate':
/home/yury/work/toolchain/gits/glibc/io/../sysdeps/posix/posix_fallocate.c:64:
undefined reference to `__ftruncate'

Truncate looks correct.
The fix is like this to me:

--
diff --git a/sysdeps/unix/sysv/linux/ftruncate64.c b/sysdeps/unix/sysv/linux/ftruncate64.c
index 914ce67..4a00db5 100644
--- a/sysdeps/unix/sysv/linux/ftruncate64.c
+++ b/sysdeps/unix/sysv/linux/ftruncate64.c
@@ -33,5 +33,6 @@ __ftruncate64 (int fd, off64_t length)
 weak_alias (__ftruncate64, ftruncate64)

 #ifdef __OFF_T_MATCHES_OFF64_T
+weak_alias (__ftruncate64, __ftruncate)
 weak_alias (__ftruncate64, ftruncate);
 #endif



More information about the Libc-alpha mailing list