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:
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
+}