summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--internal/fusefrontend/openbackingdir.go4
-rw-r--r--internal/fusefrontend/openbackingdir_test.go12
2 files changed, 16 insertions, 0 deletions
diff --git a/internal/fusefrontend/openbackingdir.go b/internal/fusefrontend/openbackingdir.go
index 4da7fd6..d56848f 100644
--- a/internal/fusefrontend/openbackingdir.go
+++ b/internal/fusefrontend/openbackingdir.go
@@ -33,6 +33,10 @@ func (fs *FS) openBackingDir(relPath string) (dirfd int, cName string, err error
// Cache lookup
dirfd, iv := fs.dirCache.Lookup(dirRelPath)
if dirfd > 0 {
+ // If relPath is empty, cName is ".".
+ if relPath == "" {
+ return dirfd, ".", nil
+ }
name := filepath.Base(relPath)
cName = fs.nameTransform.EncryptAndHashName(name, iv)
return dirfd, cName, nil
diff --git a/internal/fusefrontend/openbackingdir_test.go b/internal/fusefrontend/openbackingdir_test.go
index f784989..266e265 100644
--- a/internal/fusefrontend/openbackingdir_test.go
+++ b/internal/fusefrontend/openbackingdir_test.go
@@ -37,6 +37,18 @@ func TestOpenBackingDir(t *testing.T) {
if cName != "." {
t.Fatal("cName should be .")
}
+ syscall.Close(dirfd)
+
+ // Again, but populate the cache for "" by looking up a non-existing file
+ fs.GetAttr("xyz1234", nil)
+ dirfd, cName, err = fs.openBackingDir("")
+ if err != nil {
+ t.Fatal(err)
+ }
+ if cName != "." {
+ t.Fatal("cName should be .")
+ }
+
err = syscallcompat.Faccessat(dirfd, cName, unix.R_OK)
if err != nil {
t.Error(err)