浏览代码

Fix building the lock on windows

Barak Michener 11 年之前
父节点
当前提交
a0d72fb00c
共有 2 个文件被更改,包括 59 次插入0 次删除
  1. 2 0
      pkg/fileutil/lock_unix.go
  2. 57 0
      pkg/fileutil/lock_windows.go

+ 2 - 0
pkg/fileutil/lock.go → pkg/fileutil/lock_unix.go

@@ -1,3 +1,5 @@
+// +build !windows,!plan9
+
 package fileutil
 
 import (

+ 57 - 0
pkg/fileutil/lock_windows.go

@@ -0,0 +1,57 @@
+// +build windows
+
+package fileutil
+
+import (
+	"errors"
+	"os"
+)
+
+var (
+	ErrLocked = errors.New("file already locked")
+)
+
+type Lock interface {
+	Name() string
+	TryLock() error
+	Lock() error
+	Unlock() error
+	Destroy() error
+}
+
+type lock struct {
+	fd   int
+	file *os.File
+}
+
+func (l *lock) Name() string {
+	return l.file.Name()
+}
+
+// TryLock acquires exclusivity on the lock without blocking
+func (l *lock) TryLock() error {
+	return nil
+}
+
+// Lock acquires exclusivity on the lock without blocking
+func (l *lock) Lock() error {
+	return nil
+}
+
+// Unlock unlocks the lock
+func (l *lock) Unlock() error {
+	return nil
+}
+
+func (l *lock) Destroy() error {
+	return l.file.Close()
+}
+
+func NewLock(file string) (Lock, error) {
+	f, err := os.Open(file)
+	if err != nil {
+		return nil, err
+	}
+	l := &lock{int(f.Fd()), f}
+	return l, nil
+}