diff options
Diffstat (limited to 'win32/win32.c')
-rw-r--r-- | win32/win32.c | 41 |
1 files changed, 1 insertions, 40 deletions
diff --git a/win32/win32.c b/win32/win32.c index 9a0f910b42..7fb04166c2 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -1121,56 +1121,17 @@ stolen_get_osfhandle(int fd) return pIOSubSystem->pfn_get_osfhandle(fd); } - /* * Extras. */ -/* simulate flock by locking a range on the file */ - -#define LK_ERR(f,i) ((f) ? (i = 0) : (errno = GetLastError())) -#define LK_LEN 0xffff0000 - DllExport int win32_flock(int fd, int oper) { - OVERLAPPED o; - int i = -1; - HANDLE fh; - if (!IsWinNT()) { croak("flock() unimplemented on this platform"); return -1; } - - fh = (HANDLE)stolen_get_osfhandle(fd); - memset(&o, 0, sizeof(o)); - - switch(oper) { - case LOCK_SH: /* shared lock */ - LK_ERR(LockFileEx(fh, 0, 0, LK_LEN, 0, &o),i); - break; - case LOCK_EX: /* exclusive lock */ - LK_ERR(LockFileEx(fh, LOCKFILE_EXCLUSIVE_LOCK, 0, LK_LEN, 0, &o),i); - break; - case LOCK_SH|LOCK_NB: /* non-blocking shared lock */ - LK_ERR(LockFileEx(fh, LOCKFILE_FAIL_IMMEDIATELY, 0, LK_LEN, 0, &o),i); - break; - case LOCK_EX|LOCK_NB: /* non-blocking exclusive lock */ - LK_ERR(LockFileEx(fh, - LOCKFILE_EXCLUSIVE_LOCK|LOCKFILE_FAIL_IMMEDIATELY, - 0, LK_LEN, 0, &o),i); - break; - case LOCK_UN: /* unlock lock */ - LK_ERR(UnlockFileEx(fh, 0, LK_LEN, 0, &o),i); - break; - default: /* unknown */ - errno = EINVAL; - break; - } - return i; + return pIOSubSystem->pfnflock(fd, oper); } -#undef LK_ERR -#undef LK_LEN - |