package mount
import (
+ "errors"
"io"
"log"
"os"
}
func (fs *keepFS) errCode(err error) int {
- if os.IsNotExist(err) {
+ if err == nil {
+ return 0
+ }
+ if errors.Is(err, os.ErrNotExist) {
return -fuse.ENOENT
}
- switch err {
- case os.ErrExist:
+ if errors.Is(err, os.ErrExist) {
return -fuse.EEXIST
- case arvados.ErrInvalidArgument:
+ }
+ if errors.Is(err, arvados.ErrInvalidArgument) {
return -fuse.EINVAL
- case arvados.ErrInvalidOperation:
+ }
+ if errors.Is(err, arvados.ErrInvalidOperation) {
return -fuse.ENOSYS
- case arvados.ErrDirectoryNotEmpty:
+ }
+ if errors.Is(err, arvados.ErrDirectoryNotEmpty) {
return -fuse.ENOTEMPTY
- case nil:
- return 0
- default:
- return -fuse.EIO
}
+ return -fuse.EIO
}
func (fs *keepFS) Mkdir(path string, mode uint32) int {
var m uint32
if fi.IsDir() {
m = m | fuse.S_IFDIR
+ } else if fi.Mod()&os.ModeSymlink != 0 {
+ m = m | fuse.S_IFLNK
} else {
m = m | fuse.S_IFREG
}
}
}
+func (fs *keepFS) Readlink(path string) (n int, target string) {
+ defer fs.debugPanics()
+ target, err := fs.root.Readlink(path)
+ if err != nil {
+ return fs.errCode(err), ""
+ }
+ return 0, target
+}
+
func (fs *keepFS) Write(path string, buf []byte, ofst int64, fh uint64) (n int) {
defer fs.debugPanics()
if fs.ReadOnly {