diff options
Diffstat (limited to 'internal/nametransform/diriv_cache.go')
-rw-r--r-- | internal/nametransform/diriv_cache.go | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/internal/nametransform/diriv_cache.go b/internal/nametransform/diriv_cache.go new file mode 100644 index 0000000..c6f2ca9 --- /dev/null +++ b/internal/nametransform/diriv_cache.go @@ -0,0 +1,43 @@ +package nametransform + +import "sync" + +// A simple one-entry DirIV cache +type dirIVCache struct { + // Invalidated? + cleared bool + // The DirIV + iv []byte + // Directory the DirIV belongs to + dir string + // Ecrypted version of "dir" + translatedDir string + // Synchronisation + lock sync.RWMutex +} + +// lookup - fetch entry for "dir" from the cache +func (c *dirIVCache) lookup(dir string) (bool, []byte, string) { + c.lock.RLock() + defer c.lock.RUnlock() + if !c.cleared && c.dir == dir { + return true, c.iv, c.translatedDir + } + return false, nil, "" +} + +// store - write entry for "dir" into the caches +func (c *dirIVCache) store(dir string, iv []byte, translatedDir string) { + c.lock.Lock() + defer c.lock.Unlock() + c.cleared = false + c.iv = iv + c.dir = dir + c.translatedDir = translatedDir +} + +func (c *dirIVCache) Clear() { + c.lock.Lock() + defer c.lock.Unlock() + c.cleared = true +} |