X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/504e09d413026fcac8ac94530134da2fce4dc0f2..0542eb85c46bf04c4139d6a976d49860f5f7d5e6:/lib/mount/fs.go diff --git a/lib/mount/fs.go b/lib/mount/fs.go index c008b96af6..70d02f8134 100644 --- a/lib/mount/fs.go +++ b/lib/mount/fs.go @@ -5,6 +5,7 @@ package mount import ( + "errors" "io" "log" "os" @@ -121,23 +122,25 @@ func (fs *keepFS) Utimens(path string, tmsp []fuse.Timespec) int { } 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 { @@ -271,6 +274,8 @@ func (fs *keepFS) fillStat(stat *fuse.Stat_t, fi os.FileInfo) { 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 } @@ -293,6 +298,15 @@ func (fs *keepFS) fillStat(stat *fuse.Stat_t, fi os.FileInfo) { } } +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 {