github.com/gotranspile/cxgo@v0.3.8-0.20240118201721-29871598a6a2/runtime/csys/stat.go (about) 1 package csys 2 3 import ( 4 "log" 5 "os" 6 7 "github.com/gotranspile/cxgo/runtime/libc" 8 ) 9 10 const modeDir = 1 11 12 type Mode int32 13 14 func IsDir(mode Mode) int32 { 15 if mode&modeDir != 0 { 16 return 1 17 } 18 return 0 19 } 20 21 type StatRes struct { 22 Dev int32 23 Inode int32 24 Mode Mode 25 Links int32 26 UID int32 27 GID int32 28 RDev int32 29 Size uint64 30 ATime libc.TimeVal 31 MTime libc.TimeVal 32 CTime libc.TimeVal 33 BlockSize int32 34 Blocks int32 35 } 36 37 func Stat(path *byte, dst *StatRes) int32 { 38 name := libc.GoString(path) 39 if name == "" { 40 panic("empty name") 41 } 42 st, err := os.Stat(name) 43 if err != nil { 44 log.Printf("stat(%q, %p): %v", name, dst, err) 45 libc.SetErr(err) 46 return -1 47 } 48 dst.Mode = 0 49 if st.Mode().IsDir() { 50 dst.Mode = modeDir 51 } 52 dst.Size = uint64(st.Size()) 53 // TODO: other fields 54 return 0 55 } 56 57 func Chmod(path *byte, mode Mode) int32 { 58 spath := libc.GoString(path) 59 log.Printf("TODO: chmod(%q, 0%o)", spath, mode) // TODO 60 return 0 61 } 62 63 func Mkdir(path *byte, mode Mode) int32 { 64 spath := libc.GoString(path) 65 err := os.Mkdir(spath, 0755) 66 log.Printf("mkdir(%q, %x): %v", spath, mode, err) 67 if err != nil { 68 libc.SetErr(err) 69 return -1 70 } 71 return 0 72 }