X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcontrib%2Flibqxt-2007-10-24%2Fsrc%2Fcore%2Fqxtfilelock_win.cpp;fp=src%2Fcontrib%2Flibqxt-2007-10-24%2Fsrc%2Fcore%2Fqxtfilelock_win.cpp;h=80ea67fd14bf77d24d389f407dc3f16cde53570f;hp=0000000000000000000000000000000000000000;hb=a634acadbcf6017474f68a3eaf7cb632660e9e49;hpb=cd122ca8e0d2c0ffc5397e0a813c75d791a7e6e3 diff --git a/src/contrib/libqxt-2007-10-24/src/core/qxtfilelock_win.cpp b/src/contrib/libqxt-2007-10-24/src/core/qxtfilelock_win.cpp new file mode 100644 index 00000000..80ea67fd --- /dev/null +++ b/src/contrib/libqxt-2007-10-24/src/core/qxtfilelock_win.cpp @@ -0,0 +1,88 @@ +#include "qxtfilelock.h" +#include "qxtfilelock_p.h" +#include +#include + +#if 1 + +bool QxtFileLock::unlock() +{ + if (file() && file()->isOpen() && isActive()) + { + HANDLE w32FileHandle; + OVERLAPPED ov1; + DWORD dwflags; + + w32FileHandle = (HANDLE)_get_osfhandle(file()->handle()); + if (w32FileHandle == INVALID_HANDLE_VALUE) + return false; + + memset(&ov1,0, sizeof(ov1)); + ov1.Offset = qxt_d().offset; + + if (UnlockFileEx(w32FileHandle, 0, qxt_d().length, 0, &ov1)) + { + qxt_d().isLocked = false; + return true; + } + } + return false; +} + +bool QxtFileLock::lock () +{ + if (file() && file()->isOpen() && !isActive()) + { + HANDLE w32FileHandle; + OVERLAPPED ov1; + DWORD dwflags; + + w32FileHandle = (HANDLE)_get_osfhandle(file()->handle()); + if (w32FileHandle == INVALID_HANDLE_VALUE) + return false; + + switch (qxt_d().mode) + { + case ReadLock: + dwflags = LOCKFILE_FAIL_IMMEDIATELY; + break; + + case ReadLockWait: + dwflags = 0; + break; + + case WriteLock: + dwflags = LOCKFILE_EXCLUSIVE_LOCK | LOCKFILE_FAIL_IMMEDIATELY; + break; + + case WriteLockWait: + dwflags = LOCKFILE_EXCLUSIVE_LOCK; + break; + + default: + return (false); + } + + memset(&ov1, 0, sizeof(ov1)); + ov1.Offset = qxt_d().offset; + + if (LockFileEx(w32FileHandle,dwflags, 0, qxt_d().length, 0, &ov1)) + { + qxt_d().isLocked = true; + return true; + } + } + return false; +} + +#else +bool QxtFileLock::unlock() +{ + return false; +} + +bool QxtFileLock::lock () +{ + return false; +} +#endif