From 8dd345eb9ecb8626d1097ebfcde99a28781bfca6 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Wed, 23 Jan 2008 22:46:06 +0000 Subject: Fix raidfile tests on FreeBSD 7 --- infrastructure/m4/ax_check_syscall_lseek.m4 | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'infrastructure/m4/ax_check_syscall_lseek.m4') diff --git a/infrastructure/m4/ax_check_syscall_lseek.m4 b/infrastructure/m4/ax_check_syscall_lseek.m4 index 6bf93c23..491cc1ed 100644 --- a/infrastructure/m4/ax_check_syscall_lseek.m4 +++ b/infrastructure/m4/ax_check_syscall_lseek.m4 @@ -24,7 +24,7 @@ AC_DEFUN([AX_CHECK_SYSCALL_LSEEK], [ #ifdef HAVE___SYSCALL_NEED_DEFN extern "C" off_t __syscall(quad_t number, ...); #endif - #ifndef HAVE_SYSCALL + #ifdef HAVE___SYSCALL // always use it if we have it #undef syscall #define syscall __syscall #endif @@ -33,7 +33,18 @@ AC_DEFUN([AX_CHECK_SYSCALL_LSEEK], [ int res = 0; if(fh>=0) { - res = syscall(SYS_lseek, fh, 0, SEEK_SET, 99); + // This test tries first to seek to position 0, with NO + // "dummy argument". If lseek does actually require a dummy + // argument, then it will eat SEEK_SET for the offset and + // try to use 99 as whence, which is invalid, so res will be + // -1, the program will return zero and + // have_lseek_dummy_param=yes + // (whew! that took 1 hour to figure out) + // The "dummy argument" probably means that it takes a 64-bit + // offset, so this was probably a bug anyway, and now that + // we cast the offset to off_t, it should never be needed + // (if my reasoning is correct). + res = syscall(SYS_lseek, fh, (off_t)0, SEEK_SET, 99); close(fh); } unlink("lseektest"); -- cgit v1.2.3