diff --git a/src/cli/cli.go b/src/cli/cli.go index 98dbdea..022aab8 100644 --- a/src/cli/cli.go +++ b/src/cli/cli.go @@ -324,7 +324,7 @@ func getPaths(fnames []string) (paths []string, haveFolder bool, err error) { haveFolder = false paths = []string{} for _, fname := range fnames { - stat, errStat := os.Stat(fname) + stat, errStat := os.Lstat(fname) if errStat != nil { err = errStat return diff --git a/src/utils/utils.go b/src/utils/utils.go index cc74bf6..d54e422 100644 --- a/src/utils/utils.go +++ b/src/utils/utils.go @@ -41,8 +41,23 @@ func GetInput(prompt string) string { return strings.TrimSpace(text) } +// HashFile returns the hash of a file or, in case of a symlink, the +// SHA256 hash of its target // HashFile returns the hash of a file func HashFile(fname string) (hash256 []byte, err error) { + var fstats os.FileInfo + fstats, err = os.Lstat(fname) + if err != nil { + return nil, err + } + if fstats.Mode()&os.ModeSymlink != 0 { + var target string + target, err = os.Readlink(fname) + return []byte(SHA256(target)), nil + } + if err != nil { + return nil, err + } return IMOHashFile(fname) }