diff options
Diffstat (limited to 'libgo/go/syscall/syscall_solaris.go')
-rw-r--r-- | libgo/go/syscall/syscall_solaris.go | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/libgo/go/syscall/syscall_solaris.go b/libgo/go/syscall/syscall_solaris.go index c1919171b7..673ba8223f 100644 --- a/libgo/go/syscall/syscall_solaris.go +++ b/libgo/go/syscall/syscall_solaris.go @@ -4,6 +4,8 @@ package syscall +import "unsafe" + func (ts *Timestruc) Unix() (sec int64, nsec int64) { return int64(ts.Sec), int64(ts.Nsec) } @@ -11,3 +13,36 @@ func (ts *Timestruc) Unix() (sec int64, nsec int64) { func (ts *Timestruc) Nano() int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) +} + +func direntReclen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) +} + +func direntNamlen(buf []byte) (uint64, bool) { + reclen, ok := direntReclen(buf) + if !ok { + return 0, false + } + return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true +} + +//sysnb getexecname() (execname unsafe.Pointer, err error) +//getexecname() *byte + +func Getexecname() (path string, err error) { + ptr, err := getexecname() + if err != nil { + return "", err + } + bytes := (*[1 << 29]byte)(ptr)[:] + for i, b := range bytes { + if b == 0 { + return string(bytes[:i]), nil + } + } + panic("unreachable") +} |