mirror of https://github.com/spf13/afero.git
Treat existing files and directories differently in MemMapFS.
This commit is contained in:
parent
19b2cf0372
commit
3f6f746a75
22
memmap.go
22
memmap.go
|
@ -154,9 +154,16 @@ func (m *MemMapFs) registerWithParent(f File) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MemMapFs) lockfreeMkdir(name string, perm os.FileMode) error {
|
func (m *MemMapFs) lockfreeMkdir(name string, perm os.FileMode) error {
|
||||||
_, ok := m.getData()[name]
|
x, ok := m.getData()[name]
|
||||||
if ok {
|
if ok {
|
||||||
return ErrFileExists
|
// Only return ErrFileExists if it's a file, not a directory.
|
||||||
|
i, err := x.Stat()
|
||||||
|
if !i.IsDir() {
|
||||||
|
return ErrFileExists
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
item := &InMemoryFile{name: name, memDir: &MemDirMap{}, dir: true}
|
item := &InMemoryFile{name: name, memDir: &MemDirMap{}, dir: true}
|
||||||
m.getData()[name] = item
|
m.getData()[name] = item
|
||||||
|
@ -167,10 +174,17 @@ func (m *MemMapFs) lockfreeMkdir(name string, perm os.FileMode) error {
|
||||||
|
|
||||||
func (m *MemMapFs) Mkdir(name string, perm os.FileMode) error {
|
func (m *MemMapFs) Mkdir(name string, perm os.FileMode) error {
|
||||||
m.rlock()
|
m.rlock()
|
||||||
_, ok := m.getData()[name]
|
x, ok := m.getData()[name]
|
||||||
m.runlock()
|
m.runlock()
|
||||||
if ok {
|
if ok {
|
||||||
return ErrFileExists
|
// Only return ErrFileExists if it's a file, not a directory.
|
||||||
|
i, err := x.Stat()
|
||||||
|
if !i.IsDir() {
|
||||||
|
return ErrFileExists
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
m.lock()
|
m.lock()
|
||||||
item := &InMemoryFile{name: name, memDir: &MemDirMap{}, dir: true}
|
item := &InMemoryFile{name: name, memDir: &MemDirMap{}, dir: true}
|
||||||
|
|
Loading…
Reference in New Issue