39 #include "blocxx/BLOCXX_config.h"
51 #ifdef BLOCXX_HAVE_UNISTD_H
57 namespace BLOCXX_NAMESPACE
65 doLock(HANDLE hFile,
bool doWait, DWORD lockType)
67 if (hFile == INVALID_HANDLE_VALUE)
72 DWORD flags = lockType;
75 flags |= LOCKFILE_FAIL_IMMEDIATELY;
79 memset(&ov, 0,
sizeof(ov));
80 if (!LockFileEx(hFile, flags, 0, 0xffffffff,
96 DuplicateHandle(GetCurrentProcess(), x.m_hdl, GetCurrentProcess(),
97 &m_hdl , 0, FALSE, DUPLICATE_SAME_ACCESS);
104 return doLock(m_hdl,
true, type == E_WRITE_LOCK ?
105 LOCKFILE_EXCLUSIVE_LOCK : 0);
111 return doLock(m_hdl,
false, type == E_WRITE_LOCK ?
112 LOCKFILE_EXCLUSIVE_LOCK : 0);
118 if (m_hdl == INVALID_HANDLE_VALUE)
124 memset(&ov, 0,
sizeof(ov));
125 if (!UnlockFileEx(m_hdl, 0, 0xffffffff, 0xffffffff, &ov))
146 doLock(
int hdl,
int cmd,
short int type)
149 ::memset (&lck,
'\0',
sizeof (lck));
154 return ::fcntl(hdl, cmd, &lck);
175 return doLock(
m_hdl, F_SETLK, F_UNLCK);
185 Logger lgr(
"blocxx.common");
187 Format(
"Closing file handle %1 failed: %2",