lib9p

Go 9P library.
Log | Files | Refs | LICENSE

commit bf5fb5e53c5b29bf9a93cdce0b005fd16916683a
parent 0531b25255f82a3671a0c01acddba5c47d09570c
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Wed, 29 Nov 2023 08:18:53 +0900

fix bug where Create() tried to open newly created directory
with os.O_CREATE bit set

Diffstat:
Mdiskfs/fs.go | 25++++++++++++++++---------
1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/diskfs/fs.go b/diskfs/fs.go @@ -4,7 +4,6 @@ package diskfs import ( "fmt" - "io/fs" "os" "path/filepath" "strings" @@ -83,15 +82,24 @@ func (fsys *FS) Create(name string, uid string, omode lib9p.OpenMode, perm lib9p if omode&lib9p.ORCLOSE != 0 { return nil, fmt.Errorf("orclose not implemented in os package") } - flag |= os.O_CREATE - if perm&fs.ModeDir != 0 { + var ( + osfile *os.File + err error + ) + if perm&os.ModeDir != 0 { if err := os.Mkdir(ospath, perm); err != nil { return nil, fmt.Errorf("mkdir: %v", err) } - } - osfile, err := os.OpenFile(ospath, flag, perm) - if err != nil { - return nil, fmt.Errorf("openfile: %v", err) + osfile, err = os.OpenFile(ospath, flag, 0) + if err != nil { + return nil, fmt.Errorf("openfile: %v", err) + } + } else { + flag |= os.O_CREATE + osfile, err = os.OpenFile(ospath, flag, perm) + if err != nil { + return nil, fmt.Errorf("openfile: %v", err) + } } return &File{ fs: fsys, @@ -104,4 +112,4 @@ func (fsys *FS) Remove(name string) error { paths := append([]string{fsys.rootPath}, strings.Split(name, "/")...) ospath := filepath.Join(paths...) return os.Remove(ospath) -} -\ No newline at end of file +}