Source File
syscall_bsd.go
Belonging Package
golang.org/x/sys/unix
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])
}
type WaitStatus uint32
const (
mask = 0x7F
core = 0x80
shift = 8
exited = 0
killed = 9
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) () syscall.Signal {
:= syscall.Signal( & mask)
if == stopped || == 0 {
return -1
}
return
}
func ( WaitStatus) () bool { return .Signaled() && &core != 0 }
func ( WaitStatus) () bool { return &mask == stopped && syscall.Signal(>>shift) != SIGSTOP }
func ( WaitStatus) () bool { return &mask == killed && syscall.Signal(>>shift) != SIGKILL }
func ( WaitStatus) () bool { return &mask == stopped && syscall.Signal(>>shift) == SIGSTOP }
func ( WaitStatus) () syscall.Signal {
if !.Stopped() {
return -1
}
return syscall.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 + ) // 2 for Family, Len; 1 for NUL
.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 ( int, *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)
=
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 anyToSockaddrGOOS(, )
}
func ( int) ( int, Sockaddr, error) {
var RawSockaddrAny
var _Socklen = SizeofSockaddrAny
, = accept(, &, &)
if != nil {
return
}
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 .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 > 0 && [-1] == '\x00' {
--
}
return string([0:]), nil
}
func ( string) (uint32, error) {
return SysctlUint32Args()
}
func ( string, ...int) (uint32, error) {
, := sysctlmib(, ...)
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, ...int) (uint64, error) {
, := sysctlmib(, ...)
if != nil {
return 0,
}
:= uintptr(8)
:= make([]byte, 8)
if := sysctl(, &[0], &, nil, 0); != nil {
return 0,
}
if != 8 {
return 0, EIO
}
return *(*uint64)(unsafe.Pointer(&[0])), nil
}
func ( string, ...int) ([]byte, error) {
, := sysctlmib(, ...)
if != nil {
return nil,
}
return [:], nil
}
func ( string) (*Clockinfo, error) {
, := sysctlmib()
if != nil {
return nil,
}
:= uintptr(SizeofClockinfo)
var Clockinfo
if := sysctl(, (*byte)(unsafe.Pointer(&)), &, nil, 0); != nil {
return nil,
}
if != SizeofClockinfo {
return nil, EIO
}
return &, nil
}
func ( string) (*Timeval, error) {
, := sysctlmib()
if != nil {
return nil,
}
var Timeval
:= uintptr(unsafe.Sizeof())
if := sysctl(, (*byte)(unsafe.Pointer(&)), &, nil, 0); != nil {
return nil,
}
if != unsafe.Sizeof() {
return nil, EIO
}
return &, nil
}
func ( string, []Timeval) error {
if == nil {
return utimes(, nil)
}
if len() != 2 {
return EINVAL
}
return utimes(, (*[2]Timeval)(unsafe.Pointer(&[0])))
}
func ( string, []Timespec) error {
if == nil {
:= utimensat(AT_FDCWD, , nil, 0)
if != ENOSYS {
return
}
return utimes(, nil)
}
if len() != 2 {
return EINVAL
:= [2]Timeval{
NsecToTimeval(TimespecToNsec([0])),
NsecToTimeval(TimespecToNsec([1])),
}
return utimes(, (*[2]Timeval)(unsafe.Pointer(&[0])))
}
func ( int, string, []Timespec, int) error {
if == nil {
return utimensat(, , nil, )
}
if len() != 2 {
return EINVAL
}
:= setattrlistTimes(, , )
if != ENOSYS {
return
}
return utimensat(, , (*[2]Timespec)(unsafe.Pointer(&[0])), )
}
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |