fusefronted: dirCache: fix bug handling ""
Bug looked like this: $ ls -l . total 0 drwxrwxr-x. 2 jakob jakob 60 Jan 3 15:42 foo -rw-rw-r--. 1 jakob jakob 0 Jan 3 15:46 x $ ls -l . ls: cannot access '.': No such file or directory (only happened when "" was in the dirCache)
This commit is contained in:
parent
bb9884549b
commit
fcdb4bec09
@ -33,6 +33,10 @@ func (fs *FS) openBackingDir(relPath string) (dirfd int, cName string, err error
|
|||||||
// Cache lookup
|
// Cache lookup
|
||||||
dirfd, iv := fs.dirCache.Lookup(dirRelPath)
|
dirfd, iv := fs.dirCache.Lookup(dirRelPath)
|
||||||
if dirfd > 0 {
|
if dirfd > 0 {
|
||||||
|
// If relPath is empty, cName is ".".
|
||||||
|
if relPath == "" {
|
||||||
|
return dirfd, ".", nil
|
||||||
|
}
|
||||||
name := filepath.Base(relPath)
|
name := filepath.Base(relPath)
|
||||||
cName = fs.nameTransform.EncryptAndHashName(name, iv)
|
cName = fs.nameTransform.EncryptAndHashName(name, iv)
|
||||||
return dirfd, cName, nil
|
return dirfd, cName, nil
|
||||||
|
@ -37,6 +37,18 @@ func TestOpenBackingDir(t *testing.T) {
|
|||||||
if cName != "." {
|
if cName != "." {
|
||||||
t.Fatal("cName should be .")
|
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)
|
err = syscallcompat.Faccessat(dirfd, cName, unix.R_OK)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
|
Loading…
Reference in New Issue
Block a user