package syscall
import (
)
const ImplementsGetwd = true
func () (string, error) {
var [pathMax]byte
, := getcwd([:])
if != nil {
return "",
}
:= clen([:])
if < 1 {
return "", EINVAL
}
return string([:]), nil
}
func () ( []int, error) {
, := getgroups(0, nil)
if != nil {
return nil,
}
if == 0 {
return nil, nil
}
if < 0 || > 1000 {
return nil, EINVAL
}
:= make([]_Gid_t, )
, = getgroups(, &[0])
if != nil {
return nil,
}
= make([]int, )
for , := range [0:] {
[] = int()
}
return
}
func ( []int) ( error) {
if len() == 0 {
return setgroups(0, nil)
}
:= make([]_Gid_t, len())
for , := range {
[] = _Gid_t()
}
return setgroups(len(), &[0])
}
func ( int, []byte) ( int, error) {
var = (*uintptr)(unsafe.Pointer(new(uint64)))
return Getdirentries(, , )
}
type WaitStatus uint32
const (
mask = 0x7F
core = 0x80
shift = 8
exited = 0
stopped = 0x7F
)
func ( WaitStatus) () bool { return &mask == exited }
func ( WaitStatus) () int {
if &mask != exited {
return -1
}
return int( >> shift)
}
func ( WaitStatus) () bool { return &mask != stopped && &mask != 0 }
func ( WaitStatus) () Signal {
:= Signal( & mask)
if == stopped || == 0 {
return -1
}
return
}
func ( WaitStatus) () bool { return .Signaled() && &core != 0 }
func ( WaitStatus) () bool { return &mask == stopped && Signal(>>shift) != SIGSTOP }
func ( WaitStatus) () bool { return &mask == stopped && Signal(>>shift) == SIGSTOP }
func ( WaitStatus) () Signal {
if !.Stopped() {
return -1
}
return Signal(>>shift) & 0xFF
}
func ( WaitStatus) () int { return -1 }
func ( int, *WaitStatus, int, *Rusage) ( int, error) {
var _C_int
, = wait4(, &, , )
if != nil {
* = WaitStatus()
}
return
}
func ( *SockaddrInet4) () (unsafe.Pointer, _Socklen, error) {
if .Port < 0 || .Port > 0xFFFF {
return nil, 0, EINVAL
}
.raw.Len = SizeofSockaddrInet4
.raw.Family = AF_INET
:= (*[2]byte)(unsafe.Pointer(&.raw.Port))
[0] = byte(.Port >> 8)
[1] = byte(.Port)
for := 0; < len(.Addr); ++ {
.raw.Addr[] = .Addr[]
}
return unsafe.Pointer(&.raw), _Socklen(.raw.Len), nil
}
func ( *SockaddrInet6) () (unsafe.Pointer, _Socklen, error) {
if .Port < 0 || .Port > 0xFFFF {
return nil, 0, EINVAL
}
.raw.Len = SizeofSockaddrInet6
.raw.Family = AF_INET6
:= (*[2]byte)(unsafe.Pointer(&.raw.Port))
[0] = byte(.Port >> 8)
[1] = byte(.Port)
.raw.Scope_id = .ZoneId
for := 0; < len(.Addr); ++ {
.raw.Addr[] = .Addr[]
}
return unsafe.Pointer(&.raw), _Socklen(.raw.Len), nil
}
func ( *SockaddrUnix) () (unsafe.Pointer, _Socklen, error) {
:= .Name
:= len()
if >= len(.raw.Path) || == 0 {
return nil, 0, EINVAL
}
.raw.Len = byte(3 + )
.raw.Family = AF_UNIX
for := 0; < ; ++ {
.raw.Path[] = int8([])
}
return unsafe.Pointer(&.raw), _Socklen(.raw.Len), nil
}
func ( *SockaddrDatalink) () (unsafe.Pointer, _Socklen, error) {
if .Index == 0 {
return nil, 0, EINVAL
}
.raw.Len = .Len
.raw.Family = AF_LINK
.raw.Index = .Index
.raw.Type = .Type
.raw.Nlen = .Nlen
.raw.Alen = .Alen
.raw.Slen = .Slen
for := 0; < len(.raw.Data); ++ {
.raw.Data[] = .Data[]
}
return unsafe.Pointer(&.raw), SizeofSockaddrDatalink, nil
}
func ( *RawSockaddrAny) (Sockaddr, error) {
switch .Addr.Family {
case AF_LINK:
:= (*RawSockaddrDatalink)(unsafe.Pointer())
:= new(SockaddrDatalink)
.Len = .Len
.Family = .Family
.Index = .Index
.Type = .Type
.Nlen = .Nlen
.Alen = .Alen
.Slen = .Slen
for := 0; < len(.Data); ++ {
.Data[] = .Data[]
}
return , nil
case AF_UNIX:
:= (*RawSockaddrUnix)(unsafe.Pointer())
if .Len < 2 || .Len > SizeofSockaddrUnix {
return nil, EINVAL
}
:= new(SockaddrUnix)
:= int(.Len) - 2
for := 0; < ; ++ {
if .Path[] == 0 {
=
break
}
}
:= (*[len(.Path)]byte)(unsafe.Pointer(&.Path[0]))[0:]
.Name = string()
return , nil
case AF_INET:
:= (*RawSockaddrInet4)(unsafe.Pointer())
:= new(SockaddrInet4)
:= (*[2]byte)(unsafe.Pointer(&.Port))
.Port = int([0])<<8 + int([1])
for := 0; < len(.Addr); ++ {
.Addr[] = .Addr[]
}
return , nil
case AF_INET6:
:= (*RawSockaddrInet6)(unsafe.Pointer())
:= new(SockaddrInet6)
:= (*[2]byte)(unsafe.Pointer(&.Port))
.Port = int([0])<<8 + int([1])
.ZoneId = .Scope_id
for := 0; < len(.Addr); ++ {
.Addr[] = .Addr[]
}
return , nil
}
return nil, EAFNOSUPPORT
}
func ( int) ( int, Sockaddr, error) {
var RawSockaddrAny
var _Socklen = SizeofSockaddrAny
, = accept(, &, &)
if != nil {
return
}
if (runtime.GOOS == "darwin" || runtime.GOOS == "ios") && == 0 {
Close()
return 0, nil, ECONNABORTED
}
, = anyToSockaddr(&)
if != nil {
Close()
= 0
}
return
}
func ( int) ( Sockaddr, error) {
var RawSockaddrAny
var _Socklen = SizeofSockaddrAny
if = getsockname(, &, &); != nil {
return
}
if runtime.GOOS == "dragonfly" && .Addr.Family == AF_UNSPEC && .Addr.Len == 0 {
.Addr.Family = AF_UNIX
.Addr.Len = SizeofSockaddrUnix
}
return anyToSockaddr(&)
}
func (, , int) ( byte, error) {
var byte
:= _Socklen(1)
= getsockopt(, , , unsafe.Pointer(&), &)
return ,
}
func (, , int) ( [4]byte, error) {
:= _Socklen(4)
= getsockopt(, , , unsafe.Pointer(&[0]), &)
return ,
}
func (, , int) (*IPMreq, error) {
var IPMreq
:= _Socklen(SizeofIPMreq)
:= getsockopt(, , , unsafe.Pointer(&), &)
return &,
}
func (, , int) (*IPv6Mreq, error) {
var IPv6Mreq
:= _Socklen(SizeofIPv6Mreq)
:= getsockopt(, , , unsafe.Pointer(&), &)
return &,
}
func (, , int) (*IPv6MTUInfo, error) {
var IPv6MTUInfo
:= _Socklen(SizeofIPv6MTUInfo)
:= getsockopt(, , , unsafe.Pointer(&), &)
return &,
}
func (, , int) (*ICMPv6Filter, error) {
var ICMPv6Filter
:= _Socklen(SizeofICMPv6Filter)
:= getsockopt(, , , unsafe.Pointer(&), &)
return &,
}
func ( int, , []byte, int) (, int, int, Sockaddr, error) {
var Msghdr
var RawSockaddrAny
.Name = (*byte)(unsafe.Pointer(&))
.Namelen = uint32(SizeofSockaddrAny)
var Iovec
if len() > 0 {
.Base = (*byte)(unsafe.Pointer(&[0]))
.SetLen(len())
}
var byte
if len() > 0 {
if len() == 0 {
.Base = &
.SetLen(1)
}
.Control = (*byte)(unsafe.Pointer(&[0]))
.SetControllen(len())
}
.Iov = &
.Iovlen = 1
if , = recvmsg(, &, ); != nil {
return
}
= int(.Controllen)
= int(.Flags)
if .Addr.Family != AF_UNSPEC {
, = anyToSockaddr(&)
}
return
}
func ( int, , []byte, Sockaddr, int) ( error) {
_, = SendmsgN(, , , , )
return
}
func ( int, , []byte, Sockaddr, int) ( int, error) {
var unsafe.Pointer
var _Socklen
if != nil {
, , = .sockaddr()
if != nil {
return 0,
}
}
var Msghdr
.Name = (*byte)(unsafe.Pointer())
.Namelen = uint32()
var Iovec
if len() > 0 {
.Base = (*byte)(unsafe.Pointer(&[0]))
.SetLen(len())
}
var byte
if len() > 0 {
if len() == 0 {
.Base = &
.SetLen(1)
}
.Control = (*byte)(unsafe.Pointer(&[0]))
.SetControllen(len())
}
.Iov = &
.Iovlen = 1
if , = sendmsg(, &, ); != nil {
return 0,
}
if len() > 0 && len() == 0 {
= 0
}
return , nil
}
func ( int, , []Kevent_t, *Timespec) ( int, error) {
var , unsafe.Pointer
if len() > 0 {
= unsafe.Pointer(&[0])
}
if len() > 0 {
= unsafe.Pointer(&[0])
}
return kevent(, , len(), , len(), )
}
func ( string) ( string, error) {
, := nametomib()
if != nil {
return "",
}
:= uintptr(0)
if = sysctl(, nil, &, nil, 0); != nil {
return "",
}
if == 0 {
return "", nil
}
:= make([]byte, )
if = sysctl(, &[0], &, nil, 0); != nil {
return "",
}
if > 0 && [-1] == '\x00' {
--
}
return string([0:]), nil
}
func ( string) ( uint32, error) {
, := nametomib()
if != nil {
return 0,
}
:= uintptr(4)
:= make([]byte, 4)
if = sysctl(, &[0], &, nil, 0); != nil {
return 0,
}
if != 4 {
return 0, EIO
}
return *(*uint32)(unsafe.Pointer(&[0])), nil
}
func ( string, []Timeval) ( error) {
if len() != 2 {
return EINVAL
}
return utimes(, (*[2]Timeval)(unsafe.Pointer(&[0])))
}
func ( string, []Timespec) error {
if len() != 2 {
return EINVAL
}
:= setattrlistTimes(, )
if != ENOSYS {
return
}
= utimensat(_AT_FDCWD, , (*[2]Timespec)(unsafe.Pointer(&[0])), 0)
if != ENOSYS {
return
}
:= [2]Timeval{
NsecToTimeval(TimespecToNsec([0])),
NsecToTimeval(TimespecToNsec([1])),
}
return utimes(, (*[2]Timeval)(unsafe.Pointer(&[0])))
}
func ( int, []Timeval) ( error) {
if len() != 2 {
return EINVAL
}
return futimes(, (*[2]Timeval)(unsafe.Pointer(&[0])))
}
var mapper = &mmapper{
active: make(map[*byte][]byte),
mmap: mmap,
munmap: munmap,
}
func ( int, int64, int, int, int) ( []byte, error) {
return mapper.Mmap(, , , , )
}
func ( []byte) ( error) {
return mapper.Munmap()
}