1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-05 20:58:40 +03:00

Fixes for HPUX only having limited POSIX lock range from Michael Steffens <michael.steffens@hp.com>

Jeremy.
This commit is contained in:
Jeremy Allison -
parent dfceb0aab5
commit ba0f47f78d
2 changed files with 9 additions and 14 deletions

View File

@ -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])

View File

@ -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.
* We must truncate the 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).
*/
if(count == (SMB_OFF_T)-1)
if (u_count & ~((SMB_BIG_UINT)max_positive_lock_offset))
count = max_positive_lock_offset;
/*