diff options
author | Jeremy Allison <jra@samba.org> | 2003-02-12 20:38:02 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2003-02-12 20:38:02 +0000 |
commit | fbdda574d8bcdae3356bc06a46d42549649a5499 (patch) | |
tree | 90829b008d08b44976e66e62a66d05d0d3628746 /source3 | |
parent | 8e5585a20fe1ef7ebc6d37b40d65bf730ee93256 (diff) | |
download | samba-fbdda574d8bcdae3356bc06a46d42549649a5499.tar.gz samba-fbdda574d8bcdae3356bc06a46d42549649a5499.tar.bz2 samba-fbdda574d8bcdae3356bc06a46d42549649a5499.zip |
Fixes for HPUX only having limited POSIX lock range from Michael Steffens <michael.steffens@hp.com>
Jeremy.
(This used to be commit ba0f47f78db488bd8dcd59023f48aa77a1cb2c27)
Diffstat (limited to 'source3')
-rw-r--r-- | source3/configure.in | 4 | ||||
-rw-r--r-- | source3/locking/posix.c | 19 |
2 files changed, 9 insertions, 14 deletions
diff --git a/source3/configure.in b/source3/configure.in index 0d9814f681..aaa0499531 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -337,7 +337,7 @@ case "$host_os" in # case `uname -r` in *9*|*10*) - CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_POSIX_SOURCE -D_ALIGNMENT_REQUIRED=1 -D_MAX_ALIGNMENT=4" + CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_POSIX_SOURCE -D_ALIGNMENT_REQUIRED=1 -D_MAX_ALIGNMENT=4 -DMAX_POSITIVE_LOCK_OFFSET=0x1ffffffffffLL" AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls]) AC_DEFINE(_HPUX_SOURCE, 1, [Whether to use HPUX extensions]) AC_DEFINE(_POSIX_SOURCE, 1, [Whether to use POSIX compatible functions]) @@ -345,7 +345,7 @@ case "$host_os" in AC_DEFINE(_MAX_ALIGNMENT,4,[Maximum alignment]) ;; *11*) - CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_POSIX_SOURCE -D_LARGEFILE64_SOURCE -D_ALIGNMENT_REQUIRED=1 -D_MAX_ALIGNMENT=4" + CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_POSIX_SOURCE -D_LARGEFILE64_SOURCE -D_ALIGNMENT_REQUIRED=1 -D_MAX_ALIGNMENT=4 -DMAX_POSITIVE_LOCK_OFFSET=0x1ffffffffffLL" AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls]) AC_DEFINE(_HPUX_SOURCE, 1, [Whether to use HPUX extensions]) AC_DEFINE(_POSIX_SOURCE, 1, [Whether to use POSIX compatible functions]) diff --git a/source3/locking/posix.c b/source3/locking/posix.c index fcf19d21cf..2b64631d39 100644 --- a/source3/locking/posix.c +++ b/source3/locking/posix.c @@ -552,7 +552,11 @@ static BOOL posix_lock_in_range(SMB_OFF_T *offset_out, SMB_OFF_T *count_out, * find the maximum positive lock offset as an SMB_OFF_T. */ -#if defined(LARGE_SMB_OFF_T) && !defined(HAVE_BROKEN_FCNTL64_LOCKS) +#if defined(MAX_POSITIVE_LOCK_OFFSET) /* Some systems have arbitrary limits. */ + + SMB_OFF_T max_positive_lock_offset = (MAX_POSITIVE_LOCK_OFFSET); + +#elif defined(LARGE_SMB_OFF_T) && !defined(HAVE_BROKEN_FCNTL64_LOCKS) /* * In this case SMB_OFF_T is 64 bits, @@ -598,19 +602,10 @@ static BOOL posix_lock_in_range(SMB_OFF_T *offset_out, SMB_OFF_T *count_out, } /* - * We must truncate the offset and count to less than max_positive_lock_offset. - */ - - offset &= max_positive_lock_offset; - count &= max_positive_lock_offset; - - - /* - * Deal with a very common case of count of all ones. - * (lock entire file). + * We must truncate the count to less than max_positive_lock_offset. */ - if(count == (SMB_OFF_T)-1) + if (u_count & ~((SMB_BIG_UINT)max_positive_lock_offset)) count = max_positive_lock_offset; /* |