diff --git a/internal/fusefrontend_reverse/reverse_longnames.go b/internal/fusefrontend_reverse/reverse_longnames.go index 3b2ddea..ec164f1 100644 --- a/internal/fusefrontend_reverse/reverse_longnames.go +++ b/internal/fusefrontend_reverse/reverse_longnames.go @@ -86,7 +86,7 @@ func (rfs *ReverseFS) newNameFile(relPath string) (nodefs.File, fuse.Status) { dotName := filepath.Base(relPath) // gocryptfs.longname.XYZ.name longname := dotName[:len(dotName)-len(nametransform.LongNameSuffix)] // gocryptfs.longname.XYZ // cipher directory - cDir := saneDir(relPath) + cDir := nametransform.Dir(relPath) // plain directory pDir, err := rfs.decryptPath(cDir) if err != nil { diff --git a/internal/fusefrontend_reverse/rpath.go b/internal/fusefrontend_reverse/rpath.go index 6f6895a..fa7680f 100644 --- a/internal/fusefrontend_reverse/rpath.go +++ b/internal/fusefrontend_reverse/rpath.go @@ -11,15 +11,6 @@ import ( "github.com/rfjakob/gocryptfs/internal/tlog" ) -// saneDir is like filepath.Dir but returns "" instead of "." -func saneDir(path string) string { - d := filepath.Dir(path) - if d == "." { - return "" - } - return d -} - // abs basically returns storage dir + "/" + relPath. // It takes an error parameter so it can directly wrap decryptPath like this: // a, err := rfs.abs(rfs.decryptPath(relPath)) @@ -71,7 +62,7 @@ func (rfs *ReverseFS) decryptPath(relPath string) (string, error) { return relPath, nil } // Check if the parent dir is in the cache - cDir := saneDir(relPath) + cDir := nametransform.Dir(relPath) dirIV, pDir := rPathCache.lookup(cDir) if dirIV != nil { cName := filepath.Base(relPath) @@ -95,6 +86,6 @@ func (rfs *ReverseFS) decryptPath(relPath string) (string, error) { transformedParts = append(transformedParts, transformedPart) } pRelPath := filepath.Join(transformedParts...) - rPathCache.store(cDir, dirIV, saneDir(pRelPath)) + rPathCache.store(cDir, dirIV, nametransform.Dir(pRelPath)) return pRelPath, nil } diff --git a/internal/fusefrontend_reverse/virtualfile.go b/internal/fusefrontend_reverse/virtualfile.go index 05b8349..2fae175 100644 --- a/internal/fusefrontend_reverse/virtualfile.go +++ b/internal/fusefrontend_reverse/virtualfile.go @@ -7,6 +7,7 @@ import ( "github.com/hanwen/go-fuse/fuse" "github.com/hanwen/go-fuse/fuse/nodefs" + "github.com/rfjakob/gocryptfs/internal/nametransform" "github.com/rfjakob/gocryptfs/internal/pathiv" "github.com/rfjakob/gocryptfs/internal/tlog" ) @@ -31,7 +32,7 @@ const ( ) func (rfs *ReverseFS) newDirIVFile(cRelPath string) (nodefs.File, fuse.Status) { - cDir := saneDir(cRelPath) + cDir := nametransform.Dir(cRelPath) absDir, err := rfs.abs(rfs.decryptPath(cDir)) if err != nil { return nil, fuse.ToStatus(err) diff --git a/internal/nametransform/diriv.go b/internal/nametransform/diriv.go index 6746f04..87e7887 100644 --- a/internal/nametransform/diriv.go +++ b/internal/nametransform/diriv.go @@ -162,3 +162,12 @@ func (be *NameTransform) EncryptPathDirIV(plainPath string, rootDir string) (cip be.DirIVCache.Store(parentDir, iv, cParentDir) return cipherPath, nil } + +// Dir is like filepath.Dir but returns "" instead of ".". +func Dir(path string) string { + d := filepath.Dir(path) + if d == "." { + return "" + } + return d +}