diff --git a/link.go b/link.go index c1e7ed9..757366a 100644 --- a/link.go +++ b/link.go @@ -2,7 +2,11 @@ package localcache -import "os" +import ( + "os" +) + +// Simply use native symlinks everywhere but on windows. func Readlink(name string) (string, error) { return os.Readlink(name) @@ -11,3 +15,11 @@ func Readlink(name string) (string, error) { func Symlink(oldname, newname string) error { return os.Symlink(oldname, newname) } + +func Openlink(name string) (*os.File, error) { + return os.Open(name) +} + +func ReadlinkFile(name string) ([]byte, error) { + return os.ReadFile(name) +} diff --git a/link_windows.go b/link_windows.go index b391177..1734998 100644 --- a/link_windows.go +++ b/link_windows.go @@ -17,3 +17,19 @@ func Readlink(name string) (string, error) { func Symlink(oldname, newname string) error { return os.WriteFile(newname, []byte(oldname), 0644) } + +func Openlink(name string) (*os.File, error) { + entry, err := Readlink(name) + if err != nil { + return nil, err + } + return os.Open(entry) +} + +func ReadlinkFile(name string) ([]byte, error) { + entry, err := Readlink(name) + if err != nil { + return nil, err + } + return os.ReadFile(entry) +} diff --git a/localcache.go b/localcache.go index 4794ff6..7a952b8 100644 --- a/localcache.go +++ b/localcache.go @@ -3,7 +3,6 @@ package localcache import ( "crypto/sha256" "fmt" - "io/ioutil" "os" "path/filepath" "strings" @@ -240,22 +239,14 @@ func (c *Cache) IfExists(key string) string { func (c *Cache) Open(key string) (*os.File, error) { key = hash(key, false) path := filepath.Join(c.root, key[:2], key) - entry, err := Readlink(path) - if err != nil { - return nil, err - } - return os.Open(entry) + return Openlink(path) } // ReadFile identified by key. func (c *Cache) ReadFile(key string) ([]byte, error) { key = hash(key, false) path := filepath.Join(c.root, key[:2], key) - entry, err := Readlink(path) - if err != nil { - return nil, err - } - return ioutil.ReadFile(entry) + return ReadlinkFile(path) } // Purge entry for given key if older than given age.