34 lines
513 B
Go
34 lines
513 B
Go
|
// +build !windows
|
||
|
|
||
|
package fs
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"os"
|
||
|
"syscall"
|
||
|
)
|
||
|
|
||
|
func getHardLink(name string, fi os.FileInfo, inodes map[uint64]string) (string, error) {
|
||
|
if fi.IsDir() {
|
||
|
return "", nil
|
||
|
}
|
||
|
|
||
|
s, ok := fi.Sys().(*syscall.Stat_t)
|
||
|
if !ok {
|
||
|
return "", errors.New("unsupported stat type")
|
||
|
}
|
||
|
|
||
|
// If inode is not hardlinked, no reason to lookup or save inode
|
||
|
if s.Nlink == 1 {
|
||
|
return "", nil
|
||
|
}
|
||
|
|
||
|
inode := uint64(s.Ino)
|
||
|
|
||
|
path, ok := inodes[inode]
|
||
|
if !ok {
|
||
|
inodes[inode] = name
|
||
|
}
|
||
|
return path, nil
|
||
|
}
|