github.com/gotranspile/cxgo@v0.3.7/runtime/stdio/unix.go (about) 1 package stdio 2 3 import ( 4 "log" 5 "math" 6 "os" 7 "unsafe" 8 9 "github.com/gotranspile/cxgo/runtime/csys" 10 "github.com/gotranspile/cxgo/runtime/libc" 11 ) 12 13 func Create(path *byte, mode csys.Mode) uintptr { 14 panic("TODO") 15 } 16 17 func Open(path *byte, flags int32, ctls ...interface{}) uintptr { 18 spath := libc.GoString(path) 19 if len(ctls) != 0 { 20 log.Printf("FIXME: open(%q, %x): ignoring controls: %#v", spath, flags, ctls) 21 } 22 if flags != 0 { 23 log.Printf("FIXME: open(%q, %x): ignoring flags: 0x%x", spath, flags, flags) 24 } 25 // FIXME: handle flags 26 f := defaultFS.Open(spath, os.O_RDONLY) 27 log.Printf("open(%q, %x): %v", spath, flags, f) 28 if f == nil { 29 return 0 30 } 31 return f.FileNo() 32 } 33 34 func FDControl(fd uintptr, flags int32, ctls ...interface{}) int32 { 35 panic("TODO") 36 } 37 38 func Chdir(path *byte) int32 { 39 spath := libc.GoString(path) 40 err := FS().Chdir(spath) 41 log.Printf("chdir(%q): %v", spath, err) 42 if err != nil { 43 libc.SetErr(err) 44 return -1 45 } 46 return 0 47 } 48 49 func Rmdir(path *byte) int32 { 50 name := libc.GoString(path) 51 err := FS().Rmdir(name) 52 log.Printf("rmdir(%q): %v", name, err) 53 if err != nil { 54 libc.SetErr(err) 55 return -1 56 } 57 return 0 58 } 59 60 func Unlink(path *byte) int32 { 61 name := libc.GoString(path) 62 err := FS().Unlink(name) 63 log.Printf("unlink(%q): %v", name, err) 64 if err != nil { 65 libc.SetErr(err) 66 return -1 67 } 68 return 0 69 } 70 71 func Access(path *byte, flags int32) int32 { 72 name := libc.GoString(path) 73 _, err := FS().Stat(name) 74 log.Printf("access(%q, %x): %v", name, flags, err) 75 if err != nil { 76 libc.SetErr(err) 77 return -1 78 } 79 // TODO: check access bits 80 return 0 81 } 82 83 func Lseek(fd uintptr, offs uint64, whence int32) uint64 { 84 f := ByFD(fd) 85 if f == nil { 86 return math.MaxUint64 87 } 88 off := f.Seek(int64(offs), whence) 89 if off < 0 { 90 return math.MaxUint64 91 } 92 return uint64(off) 93 } 94 95 func GetCwd(p *byte, sz int) *byte { 96 dir, err := FS().Getwd() 97 if err != nil { 98 libc.SetErr(err) 99 return nil 100 } 101 dst := unsafe.Slice(p, sz) 102 copy(dst, dir) 103 return p 104 }