summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2023-11-21 20:35:38 +0700
committerShulhan <ms@kilabit.info>2023-11-21 20:35:38 +0700
commitf71065d116172550f2ebd99ce3fe77ffcaf37b31 (patch)
tree2e1662989855aa2d8198b885e56238a5a6252fb0
parent9ef7d782eb2b0a767bba5b8f5fd95e5814cfa748 (diff)
downloadpakakeh.go-f71065d116172550f2ebd99ce3fe77ffcaf37b31.tar.xz
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.
-rw-r--r--lib/memfs/memfs.go3
-rw-r--r--lib/memfs/node.go5
2 files changed, 8 insertions, 0 deletions
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
}