Skip to content

Commit d62fe84

Browse files
authored
Merge pull request #10 from jawr/o_excl
memfs: Add support for O_EXC to memfs
2 parents b791567 + c862faa commit d62fe84

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

memfs/memory.go

+8
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ func (fs *Memory) OpenFile(filename string, flag int, perm os.FileMode) (billy.F
5252
return nil, err
5353
}
5454
} else {
55+
if isExclusive(flag) {
56+
return nil, os.ErrExist
57+
}
58+
5559
if target, isLink := fs.resolveLink(filename, f); isLink {
5660
return fs.OpenFile(target, flag, perm)
5761
}
@@ -377,6 +381,10 @@ func isCreate(flag int) bool {
377381
return flag&os.O_CREATE != 0
378382
}
379383

384+
func isExclusive(flag int) bool {
385+
return flag&os.O_EXCL != 0
386+
}
387+
380388
func isAppend(flag int) bool {
381389
return flag&os.O_APPEND != 0
382390
}

memfs/memory_test.go

+15
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package memfs
22

33
import (
4+
"fmt"
45
"io"
6+
"os"
57
"testing"
68

79
"github.com/go-git/go-billy/v5"
@@ -45,6 +47,19 @@ func (s *MemorySuite) TestNegativeOffsets(c *C) {
4547
c.Assert(err, ErrorMatches, "writeat negative: negative offset")
4648
}
4749

50+
51+
func (s *MemorySuite) TestExclusive(c *C) {
52+
f, err := s.FS.OpenFile("exclusive", os.O_CREATE|os.O_EXCL|os.O_RDWR, 0666)
53+
c.Assert(err, IsNil)
54+
55+
fmt.Fprint(f, "mememememe")
56+
57+
err = f.Close()
58+
c.Assert(err, IsNil)
59+
60+
_, err = s.FS.OpenFile("exclusive", os.O_CREATE|os.O_EXCL|os.O_RDWR, 0666)
61+
c.Assert(err, ErrorMatches, os.ErrExist.Error())
62+
4863
func (s *MemorySuite) TestOrder(c *C) {
4964
var err error
5065

0 commit comments

Comments
 (0)