ftruncate with LFS OFF (was Re: [PATCH v2 24/46] ftruncate: Use ftruncate64 if arch does not have the ftruncate syscall)

Vineet Gupta Vineet.Gupta1 at synopsys.com
Sat Dec 8 06:52:24 UTC 2012


On Monday 26 November 2012 07:54 PM, Markos Chandras wrote:
> From: Markos Chandras <markos.chandras at imgtec.com>
> 
> Signed-off-by: Markos Chandras <markos.chandras at imgtec.com>
> ---
>  libc/sysdeps/linux/common/ftruncate.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/libc/sysdeps/linux/common/ftruncate.c b/libc/sysdeps/linux/common/ftruncate.c
> index 3bdef3f..72f86f9 100644
> --- a/libc/sysdeps/linux/common/ftruncate.c
> +++ b/libc/sysdeps/linux/common/ftruncate.c
> @@ -11,5 +11,14 @@
>  #include <unistd.h>
>  
>  
> +#if defined(__NR_ftruncate64) && !defined(__NR_ftruncate)
> +int ftruncate(int fd, __off_t length)
> +{
> +	return ftruncate64(fd, length);
> +}
> +libc_hidden_def(ftruncate);
> +
> +#else
>  _syscall2(int, ftruncate, int, fd, __off_t, length)
>  libc_hidden_def(ftruncate)
> +#endif
> 

In my local tests this fails with uClibc w/o LFS because ftruncate64()
is only defined for LFS. Same goes for truncate64 and lseek64.
So your libc (non LFS) will build fine but will have undefined refs
which will show up when linking the app.

arc-linux-uclibc-nm -u lib/libc.so.0
...
         U ftruncate64
         U lseek64
         U truncate64

There are 2 approaches to fix this - either fix the __UCLIBC_HAS_LFS__
gaurd in ftruncate64.c (and friends) or replicate the logic in
fruncate.c - which gets messy given that we need to handle both WORDSIZE
32 and 64.




More information about the uClibc mailing list