summaryrefslogtreecommitdiff
path: root/lib/intercept/intercept.cpp
diff options
context:
space:
mode:
authorChris Wilson <qris@users.noreply.github.com>2018-03-13 21:12:54 +0000
committerGitHub <noreply@github.com>2018-03-13 21:12:54 +0000
commit16a11e868c6280a64ec3f26f7537161dfa748d61 (patch)
tree28b9f1ac7afb1f062035ca4c6021325e4e0050c3 /lib/intercept/intercept.cpp
parentf2223e6a6db1d8b282ab23a80fb34d7a89bb3a20 (diff)
parent82445a8e54abbcb37e41db532130dcb82088ac5d (diff)
Merge pull request #26 from boxbackup/fix_raidfile_i386
Fix raidfile tests on 32-bit Linux. A recent fix for Solaris (commit 81e9aa6545f7f19124c9f5e88982b867d8732965) broke support for 32-bit Linux (which wasn't spotted at the time, because we didn't have any 32-bit builders). Try a different approach: detect explicitly whether the `lseek` syscall takes a 64-bit integer offset, regardless of the size of `off_t` in user space. CMake: Add support for M4 CXX flag detection in CMakeLists. Reimplement autoconf tests for 64-bit lseek. Fix error in t-gdb when no debugger is detected. Thanks to Reinhard Tartler (our Debian package maintainer) for pointing out the error, and James O'Gorman for setting up i386 builders to ensure that it's fixed and cannot recur.
Diffstat (limited to 'lib/intercept/intercept.cpp')
-rw-r--r--lib/intercept/intercept.cpp18
1 files changed, 9 insertions, 9 deletions
diff --git a/lib/intercept/intercept.cpp b/lib/intercept/intercept.cpp
index 72bd8d4e..f46e6982 100644
--- a/lib/intercept/intercept.cpp
+++ b/lib/intercept/intercept.cpp
@@ -390,23 +390,23 @@ lseek(int fildes, off_t offset, int whence)
{
// random magic for lseek syscall, see /usr/src/lib/libc/sys/lseek.c
CHECK_FOR_FAKE_ERROR_COND(fildes, 0, SYS_lseek, -1);
+
#ifdef PLATFORM_NO_SYSCALL
int r = TEST_lseek(fildes, offset, whence);
+#elif defined HAVE_LSEEK_DUMMY_PARAM
+ off_t r = syscall(SYS_lseek, fildes, 0 /* extra 0 required here! */, (int32_t)offset,
+ whence);
+#elif defined HAVE_LSEEK_64_BIT
+ off_t r = syscall(SYS_lseek, fildes, (int64_t)offset, whence);
#else
- #ifdef HAVE_LSEEK_DUMMY_PARAM
- off_t r = syscall(SYS_lseek, fildes, 0 /* extra 0 required here! */, offset, whence);
- #elif defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 32
- // Don't bother trying to call SYS__llseek on 32 bit since it is
- // fiddly and not needed for the tests
- off_t r = syscall(SYS_lseek, fildes, (uint32_t)offset, whence);
- #else
- off_t r = syscall(SYS_lseek, fildes, offset, whence);
- #endif
+ off_t r = syscall(SYS_lseek, fildes, (int32_t)offset, whence);
#endif
+
if(r != -1)
{
intercept_filepos = r;
}
+
return r;
}