diff options
| -rw-r--r-- | internal/fusefrontend/openbackingdir.go | 4 | ||||
| -rw-r--r-- | internal/fusefrontend/openbackingdir_test.go | 12 | 
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) | 
