| 590 | } |
| 591 | |
| 592 | Status LockFile(const std::string& filename, FileLock** lock) override { |
| 593 | *lock = nullptr; |
| 594 | Status result; |
| 595 | auto wFilename = toUtf16(filename); |
| 596 | ScopedHandle handle = ::CreateFileW( |
| 597 | wFilename.c_str(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, |
| 598 | /*lpSecurityAttributes=*/nullptr, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, |
| 599 | nullptr); |
| 600 | if (!handle.is_valid()) { |
| 601 | result = WindowsError(filename, ::GetLastError()); |
| 602 | } else if (!LockOrUnlock(handle.get(), true)) { |
| 603 | result = WindowsError("lock " + filename, ::GetLastError()); |
| 604 | } else { |
| 605 | *lock = new WindowsFileLock(std::move(handle), filename); |
| 606 | } |
| 607 | return result; |
| 608 | } |
| 609 | |
| 610 | Status UnlockFile(FileLock* lock) override { |
| 611 | WindowsFileLock* windows_file_lock = |
nothing calls this directly
no test coverage detected