mirror of
https://github.com/containers/podman.git
synced 2025-09-26 00:06:04 +08:00

Add support for short-name aliasing. Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
40 lines
842 B
Go
40 lines
842 B
Go
// +build linux darwin
|
|
|
|
package util
|
|
|
|
import (
|
|
"os"
|
|
"sync"
|
|
"syscall"
|
|
)
|
|
|
|
type hardlinkDeviceAndInode struct {
|
|
device, inode uint64
|
|
}
|
|
|
|
type HardlinkChecker struct {
|
|
hardlinks sync.Map
|
|
}
|
|
|
|
func (h *HardlinkChecker) Check(fi os.FileInfo) string {
|
|
if st, ok := fi.Sys().(*syscall.Stat_t); ok && fi.Mode().IsRegular() && st.Nlink > 1 {
|
|
if name, ok := h.hardlinks.Load(makeHardlinkDeviceAndInode(st)); ok && name.(string) != "" {
|
|
return name.(string)
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
func (h *HardlinkChecker) Add(fi os.FileInfo, name string) {
|
|
if st, ok := fi.Sys().(*syscall.Stat_t); ok && fi.Mode().IsRegular() && st.Nlink > 1 {
|
|
h.hardlinks.Store(makeHardlinkDeviceAndInode(st), name)
|
|
}
|
|
}
|
|
|
|
func UID(st os.FileInfo) int {
|
|
return int(st.Sys().(*syscall.Stat_t).Uid)
|
|
}
|
|
|
|
func GID(st os.FileInfo) int {
|
|
return int(st.Sys().(*syscall.Stat_t).Gid)
|
|
}
|