Use lseek64 instead of lseek, if available (large files on 32-bit systems)
This commit is contained in:
parent
0620e94e27
commit
8c511dc590
|
@ -377,6 +377,7 @@ set(NEEDED_FUNCTIONS
|
|||
htonll
|
||||
iconv_open
|
||||
localtime_r
|
||||
lseek64
|
||||
memmem
|
||||
mkdtemp
|
||||
ntohll
|
||||
|
|
|
@ -8,14 +8,10 @@
|
|||
*/
|
||||
|
||||
#if defined (HAVE_MKDTEMP) && (!defined (_XOPEN_SOURCE) || _XOPEN_SOURCE < 700)
|
||||
#ifdef _XOPEN_SOURCE
|
||||
#undef _XOPEN_SOURCE
|
||||
#endif
|
||||
#undef _XOPEN_SOURCE
|
||||
#define _XOPEN_SOURCE 700
|
||||
#elif (defined (HAVE_POSIX_FADVISE) || defined (HAVE_POSIX_FALLOCATE)) && (!defined (_XOPEN_SOURCE) || _XOPEN_SOURCE < 600)
|
||||
#ifdef _XOPEN_SOURCE
|
||||
#undef _XOPEN_SOURCE
|
||||
#endif
|
||||
#undef _XOPEN_SOURCE
|
||||
#define _XOPEN_SOURCE 600
|
||||
#endif
|
||||
|
||||
|
@ -27,6 +23,10 @@
|
|||
#define _DARWIN_C_SOURCE
|
||||
#endif
|
||||
|
||||
#if !defined (_LARGEFILE64_SOURCE)
|
||||
#define _LARGEFILE64_SOURCE
|
||||
#endif
|
||||
|
||||
#include <assert.h>
|
||||
#include <dirent.h>
|
||||
#include <errno.h>
|
||||
|
@ -68,6 +68,14 @@
|
|||
#define PATH_MAX 4096
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_LSEEK64
|
||||
#define tr_off_t off64_t
|
||||
#define tr_lseek lseek64
|
||||
#else
|
||||
#define tr_off_t off_t
|
||||
#define tr_lseek lseek
|
||||
#endif
|
||||
|
||||
/* don't use pread/pwrite on old versions of uClibc because they're buggy.
|
||||
* https://trac.transmissionbt.com/ticket/3826 */
|
||||
#ifdef __UCLIBC__
|
||||
|
@ -534,7 +542,7 @@ tr_sys_file_seek (tr_sys_file_t handle,
|
|||
tr_error ** error)
|
||||
{
|
||||
bool ret = false;
|
||||
off_t my_new_offset;
|
||||
tr_off_t my_new_offset;
|
||||
|
||||
TR_STATIC_ASSERT (TR_SEEK_SET == SEEK_SET, "values should match");
|
||||
TR_STATIC_ASSERT (TR_SEEK_CUR == SEEK_CUR, "values should match");
|
||||
|
@ -545,9 +553,9 @@ tr_sys_file_seek (tr_sys_file_t handle,
|
|||
assert (handle != TR_BAD_SYS_FILE);
|
||||
assert (origin == TR_SEEK_SET || origin == TR_SEEK_CUR || origin == TR_SEEK_END);
|
||||
|
||||
my_new_offset = lseek (handle, offset, origin);
|
||||
my_new_offset = tr_lseek (handle, offset, origin);
|
||||
|
||||
if (my_new_offset != (off_t)-1)
|
||||
if (my_new_offset != -1)
|
||||
{
|
||||
if (new_offset != NULL)
|
||||
*new_offset = my_new_offset;
|
||||
|
@ -616,7 +624,7 @@ tr_sys_file_read_at (tr_sys_file_t handle,
|
|||
|
||||
#else
|
||||
|
||||
if (lseek (handle, offset, SEEK_SET) != -1)
|
||||
if (tr_lseek (handle, offset, SEEK_SET) != -1)
|
||||
my_bytes_read = read (handle, buffer, size);
|
||||
else
|
||||
my_bytes_read = -1;
|
||||
|
@ -692,7 +700,7 @@ tr_sys_file_write_at (tr_sys_file_t handle,
|
|||
|
||||
#else
|
||||
|
||||
if (lseek (handle, offset, SEEK_SET) != -1)
|
||||
if (tr_lseek (handle, offset, SEEK_SET) != -1)
|
||||
my_bytes_written = write (handle, buffer, size);
|
||||
else
|
||||
my_bytes_written = -1;
|
||||
|
|
|
@ -320,7 +320,7 @@ tr_buildPath (const char *first_element, ...)
|
|||
*pch++ = '\0';
|
||||
|
||||
/* sanity checks & return */
|
||||
assert (pch - buf == (off_t)bufLen);
|
||||
assert (pch - buf == (ptrdiff_t)bufLen);
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue