--- /dev/null
+# Based on AC_SYS_LARGEFILE
+
+if(NOT DEFINED NO_LFS_MACROS_REQUIRED)
+ include(CheckCSourceCompiles)
+
+ # Check that off_t can represent 2**63 - 1 correctly.
+ # We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ # since some C++ compilers masquerading as C compilers
+ # incorrectly reject 9223372036854775807.
+ set(LFS_TEST_PROGRAM "
+ #include <sys/types.h>
+ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1];
+ int main() { return 0; }
+ ")
+
+ check_c_source_compiles("${LFS_TEST_PROGRAM}" NO_LFS_MACROS_REQUIRED)
+ if(NOT NO_LFS_MACROS_REQUIRED)
+ if(NOT DEFINED FILE_OFFSET_BITS_LFS_MACRO_REQUIRED)
+ check_c_source_compiles("#define _FILE_OFFSET_BITS 64 ${LFS_TEST_PROGRAM}" FILE_OFFSET_BITS_LFS_MACRO_REQUIRED)
+ if(FILE_OFFSET_BITS_LFS_MACRO_REQUIRED)
+ add_definitions(-D_FILE_OFFSET_BITS=64)
+ elseif(NOT DEFINED LARGE_FILES_LFS_MACRO_REQUIRED)
+ check_c_source_compiles("#define _LARGE_FILES 1 ${LFS_TEST_PROGRAM}" LARGE_FILES_LFS_MACRO_REQUIRED)
+ if(LARGE_FILES_LFS_MACRO_REQUIRED)
+ add_definitions(-D_LARGE_FILES=1)
+ endif()
+ endif()
+ endif()
+ endif()
+
+ unset(LFS_TEST_PROGRAM)
+endif()
#define _DARWIN_C_SOURCE
#endif
-#if !defined (_LARGEFILE64_SOURCE)
- #define _LARGEFILE64_SOURCE
-#endif
-
#include <assert.h>
#include <dirent.h>
#include <errno.h>
#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__
tr_error ** error)
{
bool ret = false;
- tr_off_t my_new_offset;
+ 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");
assert (handle != TR_BAD_SYS_FILE);
assert (origin == TR_SEEK_SET || origin == TR_SEEK_CUR || origin == TR_SEEK_END);
- my_new_offset = tr_lseek (handle, offset, origin);
+ my_new_offset = lseek (handle, offset, origin);
if (my_new_offset != -1)
{
#else
- if (tr_lseek (handle, offset, SEEK_SET) != -1)
+ if (lseek (handle, offset, SEEK_SET) != -1)
my_bytes_read = read (handle, buffer, size);
else
my_bytes_read = -1;
#else
- if (tr_lseek (handle, offset, SEEK_SET) != -1)
+ if (lseek (handle, offset, SEEK_SET) != -1)
my_bytes_written = write (handle, buffer, size);
else
my_bytes_written = -1;