Files
wehub-resource-sync bf9395e022
CI / license-header (push) Has been skipped
CI / e2e-dry-run (push) Has been skipped
CI / fast-gate (push) Failing after 0s
Test PR Label Logic / test-pr-labels (push) Failing after 1s
Skill Format Check / check-format (push) Failing after 2s
CI / security (push) Failing after 5s
CI / unit-test (push) Has been skipped
CI / lint (push) Has been skipped
CI / script-test (push) Has been skipped
CI / deterministic-gate (push) Has been skipped
CI / coverage (push) Has been skipped
CI / results (push) Has been cancelled
CI / deadcode (push) Has been cancelled
CI / e2e-live (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:22:54 +08:00

56 lines
1.0 KiB
Go

// Copyright (c) 2026 Lark Technologies Pte. Ltd.
// SPDX-License-Identifier: MIT
//go:build windows
package lockfile
import (
"fmt"
"os"
"syscall"
"unsafe"
)
var (
modkernel32 = syscall.NewLazyDLL("kernel32.dll")
procLockFileEx = modkernel32.NewProc("LockFileEx")
procUnlockFile = modkernel32.NewProc("UnlockFileEx")
)
const (
lockfileExclusiveLock = 0x00000002
lockfileFailImmediately = 0x00000001
)
func tryLockFile(f *os.File) error {
var ol syscall.Overlapped
handle := syscall.Handle(f.Fd())
r1, _, err := procLockFileEx.Call(
uintptr(handle),
uintptr(lockfileExclusiveLock|lockfileFailImmediately),
0,
1, 0,
uintptr(unsafe.Pointer(&ol)),
)
if r1 == 0 {
return fmt.Errorf("%w (lock: %s, syscall: %v)", ErrHeld, f.Name(), err)
}
return nil
}
func unlockFile(f *os.File) error {
var ol syscall.Overlapped
handle := syscall.Handle(f.Fd())
r1, _, err := procUnlockFile.Call(
uintptr(handle),
0,
1, 0,
uintptr(unsafe.Pointer(&ol)),
)
if r1 == 0 {
return err
}
return nil
}