123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #include "php.h"
- #include <windows.h>
- #include <io.h>
- #include <errno.h>
- #include "flock.h"
- PHPAPI int flock(int fd, int op)
- {
- HANDLE hdl = (HANDLE) _get_osfhandle(fd);
- DWORD low = 1, high = 0;
- OVERLAPPED offset =
- {0, 0, 0, 0, NULL};
- if (hdl < 0)
- return -1;
-
- UnlockFileEx(hdl, 0, low, high, &offset);
- switch (op & ~LOCK_NB) {
- case LOCK_EX:
- if (LockFileEx(hdl, LOCKFILE_EXCLUSIVE_LOCK +
- ((op & LOCK_NB) ? LOCKFILE_FAIL_IMMEDIATELY : 0),
- 0, low, high, &offset))
- return 0;
- break;
- case LOCK_SH:
- if (LockFileEx(hdl, ((op & LOCK_NB) ? LOCKFILE_FAIL_IMMEDIATELY : 0),
- 0, low, high, &offset))
- return 0;
- break;
- case LOCK_UN:
- return 0;
- default:
- break;
- }
- errno = EINVAL;
- return -1;
- }
|