summaryrefslogtreecommitdiff
path: root/source3/locking
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2003-02-12 20:40:29 +0000
committerJeremy Allison <jra@samba.org>2003-02-12 20:40:29 +0000
commit7fe6742d04f05c28af9e5bda37bc1dce734fe559 (patch)
tree3bfa6bea1f12fce60aa4a8ca4e5313d46dad76f9 /source3/locking
parent3bfd4406201593c1b5b7a97825bc514e700aea7a (diff)
downloadsamba-7fe6742d04f05c28af9e5bda37bc1dce734fe559.tar.gz
samba-7fe6742d04f05c28af9e5bda37bc1dce734fe559.tar.bz2
samba-7fe6742d04f05c28af9e5bda37bc1dce734fe559.zip
Fixes for HPUX only having limited POSIX lock range from Michael Steffens <michael.steffens@hp.com>
Jeremy. (This used to be commit e9b4fb8b9aedda9afc01af976264298002be3096)
Diffstat (limited to 'source3/locking')
-rw-r--r--source3/locking/posix.c19
1 files changed, 7 insertions, 12 deletions
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;
/*