github.com/prattmic/llgo-embedded@v0.0.0-20150820070356-41cfecea0e1e/third_party/gofrontend/libgo/go/os/stat.go (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package os 6 7 import ( 8 "syscall" 9 "time" 10 ) 11 12 func sameFile(fs1, fs2 *fileStat) bool { 13 stat1 := fs1.sys.(*syscall.Stat_t) 14 stat2 := fs2.sys.(*syscall.Stat_t) 15 return stat1.Dev == stat2.Dev && stat1.Ino == stat2.Ino 16 } 17 18 func fileInfoFromStat(st *syscall.Stat_t, name string) FileInfo { 19 fs := &fileStat{ 20 name: basename(name), 21 size: int64(st.Size), 22 modTime: timespecToTime(st.Mtim), 23 sys: st, 24 } 25 fs.mode = FileMode(st.Mode & 0777) 26 switch st.Mode & syscall.S_IFMT { 27 case syscall.S_IFBLK, syscall.S_IFCHR: 28 fs.mode |= ModeDevice 29 case syscall.S_IFDIR: 30 fs.mode |= ModeDir 31 case syscall.S_IFIFO: 32 fs.mode |= ModeNamedPipe 33 case syscall.S_IFLNK: 34 fs.mode |= ModeSymlink 35 case syscall.S_IFREG: 36 // nothing to do 37 case syscall.S_IFSOCK: 38 fs.mode |= ModeSocket 39 } 40 if st.Mode&syscall.S_ISGID != 0 { 41 fs.mode |= ModeSetgid 42 } 43 if st.Mode&syscall.S_ISUID != 0 { 44 fs.mode |= ModeSetuid 45 } 46 return fs 47 } 48 49 func timespecToTime(ts syscall.Timespec) time.Time { 50 return time.Unix(int64(ts.Sec), int64(ts.Nsec)) 51 } 52 53 // For testing. 54 func atime(fi FileInfo) time.Time { 55 return timespecToTime(fi.Sys().(*syscall.Stat_t).Atim) 56 }