Handle O_CREATE flag to *MemMapFs.OpenFile. - afero - [fork] go afero port for 9front
(HTM) git clone git@git.drkhsh.at/afero.git
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 47e9336de62bc9cdd252560f70f28fc4f5b8f06a
(DIR) parent 42d35dace7d89fd79d24afba9d900881b97292f5
(HTM) Author: Alex Tomlins <alex@tomlins.org.uk>
Date: Sat, 8 Aug 2015 18:50:19 +0100
Handle O_CREATE flag to *MemMapFs.OpenFile.
To allow MemMapFs to be used in place of OsFs in tests where this flag
is used to create the file if it doesn't already exist..
Diffstat:
M fs_test.go | 15 +++++++++++++++
M memmap.go | 6 +++++-
2 files changed, 20 insertions(+), 1 deletion(-)
---
(DIR) diff --git a/fs_test.go b/fs_test.go
@@ -70,6 +70,21 @@ func TestRead0(t *testing.T) {
}
}
+func TestOpenFile(t *testing.T) {
+ for _, fs := range Fss {
+ path := testDir + "/" + testName
+ fs.MkdirAll(testDir, 0777) // Just in case.
+ fs.Remove(path) // Just in case.
+
+ f, err := fs.OpenFile(path, os.O_CREATE, 0600)
+ if err != nil {
+ t.Error(fs.Name(), "OpenFile (O_CREATE) failed:", err)
+ continue
+ }
+ f.Close()
+ }
+}
+
func TestMemFileRead(t *testing.T) {
f := MemFileCreate("testfile")
f.WriteString("abcd")
(DIR) diff --git a/memmap.go b/memmap.go
@@ -205,7 +205,11 @@ func (m *MemMapFs) lockfreeOpen(name string) (File, error) {
}
func (m *MemMapFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
- return m.Open(name)
+ file, err := m.Open(name)
+ if os.IsNotExist(err) && (flag&os.O_CREATE > 0) {
+ file, err = m.Create(name)
+ }
+ return file, err
}
func (m *MemMapFs) Remove(name string) error {