forked from mirror/afero
Merge pull request #245 from campoy/master
Add support for os.O_EXCL in afero.MemMapFs
This commit is contained in:
commit
1524d0a48b
|
@ -212,6 +212,9 @@ func (m *MemMapFs) lockfreeOpen(name string) (*mem.FileData, error) {
|
||||||
func (m *MemMapFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
|
func (m *MemMapFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
|
||||||
chmod := false
|
chmod := false
|
||||||
file, err := m.openWrite(name)
|
file, err := m.openWrite(name)
|
||||||
|
if err == nil && (flag&os.O_EXCL > 0) {
|
||||||
|
return nil, &os.PathError{Op: "open", Path: name, Err: ErrFileExists}
|
||||||
|
}
|
||||||
if os.IsNotExist(err) && (flag&os.O_CREATE > 0) {
|
if os.IsNotExist(err) && (flag&os.O_CREATE > 0) {
|
||||||
file, err = m.Create(name)
|
file, err = m.Create(name)
|
||||||
chmod = true
|
chmod = true
|
||||||
|
|
|
@ -104,6 +104,29 @@ func checkPathError(t *testing.T, err error, op string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ensure os.O_EXCL is correctly handled.
|
||||||
|
func TestOpenFileExcl(t *testing.T) {
|
||||||
|
const fileName = "/myFileTest"
|
||||||
|
const fileMode = os.FileMode(0765)
|
||||||
|
|
||||||
|
fs := NewMemMapFs()
|
||||||
|
|
||||||
|
// First creation should succeed.
|
||||||
|
f, err := fs.OpenFile(fileName, os.O_CREATE|os.O_EXCL, fileMode)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("OpenFile Create Excl failed: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
f.Close()
|
||||||
|
|
||||||
|
// Second creation should fail.
|
||||||
|
_, err = fs.OpenFile(fileName, os.O_CREATE|os.O_EXCL, fileMode)
|
||||||
|
if err == nil {
|
||||||
|
t.Errorf("OpenFile Create Excl should have failed, but it didn't")
|
||||||
|
}
|
||||||
|
checkPathError(t, err, "Open")
|
||||||
|
}
|
||||||
|
|
||||||
// Ensure Permissions are set on OpenFile/Mkdir/MkdirAll
|
// Ensure Permissions are set on OpenFile/Mkdir/MkdirAll
|
||||||
func TestPermSet(t *testing.T) {
|
func TestPermSet(t *testing.T) {
|
||||||
const fileName = "/myFileTest"
|
const fileName = "/myFileTest"
|
||||||
|
|
Loading…
Reference in New Issue