From f71065d116172550f2ebd99ce3fe77ffcaf37b31 Mon Sep 17 00:00:00 2001 From: Shulhan Date: Tue, 21 Nov 2023 20:35:38 +0700 Subject: lib/memfs: check for file not exist in scanDir and updateDir Another error for handling fs.ErrNotExist when scanning directory which is may caused by broken symlink. --- lib/memfs/memfs.go | 3 +++ lib/memfs/node.go | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/lib/memfs/memfs.go b/lib/memfs/memfs.go index f75fe95d..a40b7ee1 100644 --- a/lib/memfs/memfs.go +++ b/lib/memfs/memfs.go @@ -605,6 +605,9 @@ func (mfs *MemFS) scanDir(node *Node) (n int, err error) { for _, fi = range fis { child, err = mfs.AddChild(node, fi) if err != nil { + if errors.Is(err, fs.ErrNotExist) { + continue + } err = fmt.Errorf(`%s %q: %w`, logp, node.SysPath, err) goto out } diff --git a/lib/memfs/node.go b/lib/memfs/node.go index ffcf371d..4bb7a498 100644 --- a/lib/memfs/node.go +++ b/lib/memfs/node.go @@ -10,6 +10,7 @@ import ( "errors" "fmt" "io" + "io/fs" "mime" "net/http" "os" @@ -610,6 +611,10 @@ func (node *Node) updateDir(maxFileSize int64) (err error) { // Ignore error due to permission. continue } + if errors.Is(err, fs.ErrNotExist) { + // File exist but a broken symlink. + continue + } return err } -- cgit v1.3