From 4a3f07456d0a04b84916a99af6ce1cbe65e0370c Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Sun, 26 Aug 2001 19:39:40 +0000 Subject: Ignore locks of length zero as they mean different things in Win32 and POSIX. Jeremy. (This used to be commit bd9cbf4c6883c1a39f28db8afa7cc0bd04b1b09f) --- source3/locking/posix.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'source3') diff --git a/source3/locking/posix.c b/source3/locking/posix.c index 2a6f2be562..6a621200ca 100644 --- a/source3/locking/posix.c +++ b/source3/locking/posix.c @@ -107,10 +107,12 @@ static BOOL add_fd_to_close_entry(files_struct *fsp) tp = Realloc(dbuf.dptr, dbuf.dsize + sizeof(int)); if (!tp) { DEBUG(0,("add_fd_to_close_entry: Realloc fail !\n")); - if (dbuf.dptr) free(dbuf.dptr); + if (dbuf.dptr) + free(dbuf.dptr); return False; - } - else dbuf.dptr = tp; + } else + dbuf.dptr = tp; + memcpy(dbuf.dptr + dbuf.dsize, &fsp->fd, sizeof(int)); dbuf.dsize += sizeof(int); @@ -378,8 +380,8 @@ static BOOL add_posix_lock_entry(files_struct *fsp, SMB_OFF_T start, SMB_OFF_T s if (!tp) { DEBUG(0,("add_posix_lock_entry: Realloc fail !\n")); goto fail; - } - else dbuf.dptr = tp; + } else + dbuf.dptr = tp; memcpy(dbuf.dptr + dbuf.dsize, &pl, sizeof(pl)); dbuf.dsize += sizeof(pl); @@ -579,6 +581,17 @@ static BOOL posix_lock_in_range(SMB_OFF_T *offset_out, SMB_OFF_T *count_out, #endif /* !LARGE_SMB_OFF_T || HAVE_BROKEN_FCNTL64_LOCKS */ + /* + * POSIX locks of length zero mean lock to end-of-file. + * Win32 locks of length zero are point probes. Ignore + * any Win32 locks of length zero. JRA. + */ + + if (count == (SMB_OFF_T)0) { + DEBUG(10,("posix_lock_in_range: count = 0, ignoring.\n")); + return False; + } + /* * If the given offset was > max_positive_lock_offset then we cannot map this at all * ignore this lock. -- cgit