package libc
import (
"os"
gosignal "os/signal"
"reflect"
"syscall"
"unsafe"
"golang.org/x/sys/unix"
"modernc.org/libc/errno"
"modernc.org/libc/poll"
"modernc.org/libc/signal"
"modernc.org/libc/stdio"
"modernc.org/libc/sys/types"
)
func Xsignal (t *TLS , signum int32 , handler uintptr ) uintptr {
signalsMu .Lock ()
defer signalsMu .Unlock ()
r := signals [signum ]
signals [signum ] = handler
switch handler {
case signal .SIG_DFL :
panic (todo ("%v %#x" , syscall .Signal (signum ), handler ))
case signal .SIG_IGN :
switch r {
case signal .SIG_DFL :
gosignal .Ignore (syscall .Signal (signum ))
case signal .SIG_IGN :
gosignal .Ignore (syscall .Signal (signum ))
default :
panic (todo ("%v %#x" , syscall .Signal (signum ), handler ))
}
default :
switch r {
case signal .SIG_DFL :
c := make (chan os .Signal , 1 )
gosignal .Notify (c , syscall .Signal (signum ))
go func () {
for {
<-c
var f func (*TLS , int32 )
*(*uintptr )(unsafe .Pointer (&f )) = handler
tls := NewTLS ()
f (tls , signum )
tls .Close ()
}
}()
case signal .SIG_IGN :
panic (todo ("%v %#x" , syscall .Signal (signum ), handler ))
default :
panic (todo ("%v %#x" , syscall .Signal (signum ), handler ))
}
}
return r
}
func Xrewind (t *TLS , stream uintptr ) {
Xfseek (t , stream , 0 , stdio .SEEK_SET )
}
func Xputchar (t *TLS , c int32 ) int32 {
if _ , err := write ([]byte {byte (c )}); err != nil {
return stdio .EOF
}
return int32 (c )
}
func Xgethostname (t *TLS , name uintptr , slen types .Size_t ) int32 {
if slen < 0 {
t .setErrno (errno .EINVAL )
return -1
}
if slen == 0 {
return 0
}
s , err := os .Hostname ()
if err != nil {
panic (todo ("" ))
}
n := len (s )
if len (s ) >= int (slen ) {
n = int (slen ) - 1
}
sh := (*reflect .StringHeader )(unsafe .Pointer (&s ))
copy ((*RawMem )(unsafe .Pointer (name ))[:n :n ], (*RawMem )(unsafe .Pointer (sh .Data ))[:n :n ])
*(*byte )(unsafe .Pointer (name + uintptr (n ))) = 0
return 0
}
func Xremove (t *TLS , pathname uintptr ) int32 {
panic (todo ("" ))
}
func Xpathconf (t *TLS , path uintptr , name int32 ) long {
panic (todo ("" ))
}
func Xrecvfrom (t *TLS , sockfd int32 , buf uintptr , len types .Size_t , flags int32 , src_addr , addrlen uintptr ) types .Ssize_t {
panic (todo ("" ))
}
func Xsendto (t *TLS , sockfd int32 , buf uintptr , len types .Size_t , flags int32 , src_addr uintptr , addrlen socklen_t ) types .Ssize_t {
panic (todo ("" ))
}
func Xsrand48 (t *TLS , seedval long ) {
panic (todo ("" ))
}
func Xlrand48 (t *TLS ) long {
panic (todo ("" ))
}
func Xsendmsg (t *TLS , sockfd int32 , msg uintptr , flags int32 ) types .Ssize_t {
panic (todo ("" ))
}
func Xpoll (t *TLS , fds uintptr , nfds poll .Nfds_t , timeout int32 ) int32 {
if nfds == 0 {
panic (todo ("" ))
}
n , err := unix .Poll ((*[1000 ]unix .PollFd )(unsafe .Pointer (fds ))[:nfds :nfds ], int (timeout ))
if err != nil {
t .setErrno (err )
return -1
}
return int32 (n )
}
func Xrecvmsg (t *TLS , sockfd int32 , msg uintptr , flags int32 ) types .Ssize_t {
n , _ , err := unix .Syscall (unix .SYS_RECVMSG , uintptr (sockfd ), msg , uintptr (flags ))
if err != 0 {
t .setErrno (err )
return -1
}
return types .Ssize_t (n )
}
func X__cmsg_nxthdr (t *TLS , msgh , cmsg uintptr ) uintptr {
panic (todo ("" ))
}
func Xwcschr (t *TLS , wcs uintptr , wc wchar_t ) wchar_t {
panic (todo ("" ))
}
func Xgetegid (t *TLS ) types .Gid_t {
panic (todo ("" ))
}
func Xgetgid (t *TLS ) types .Gid_t {
panic (todo ("" ))
}
func Xshmat (t *TLS , shmid int32 , shmaddr uintptr , shmflg int32 ) uintptr {
panic (todo ("" ))
}
func Xshmctl (t *TLS , shmid , cmd int32 , buf uintptr ) int32 {
panic (todo ("" ))
}
func Xshmdt (t *TLS , shmaddr uintptr ) int32 {
panic (todo ("" ))
}
func Xgetresuid (t *TLS , ruid , euid , suid uintptr ) int32 {
panic (todo ("" ))
}
func Xgetresgid (t *TLS , rgid , egid , sgid uintptr ) int32 {
panic (todo ("" ))
}
The pages are generated with Golds v0.3.6 . (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 .