package snapshot import ( "os" "syscall" "time" ) // fileCTime returns the inode change time on Linux. // // On Linux, "ctime" refers to the inode change time — the last time the // file's metadata (permissions, ownership, link count, etc.) was modified. // This is NOT the file creation time; Linux did not expose birth time until // the statx(2) syscall was added in kernel 4.11, and Go's syscall package // does not yet surface it. // // This differs from macOS/Darwin where "ctime" means birth time (file // creation time). See ctime_darwin.go for details. // // If the underlying stat information is unavailable (e.g. when using a // virtual filesystem like afero.MemMapFs), this falls back to mtime. func fileCTime(info os.FileInfo) time.Time { stat, ok := info.Sys().(*syscall.Stat_t) if !ok { return info.ModTime() } return time.Unix(stat.Ctim.Sec, stat.Ctim.Nsec).UTC() }