summaryrefslogtreecommitdiff
path: root/vendor/modernc.org/libc/libc_freebsd.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/modernc.org/libc/libc_freebsd.go')
-rw-r--r--vendor/modernc.org/libc/libc_freebsd.go140
1 files changed, 82 insertions, 58 deletions
diff --git a/vendor/modernc.org/libc/libc_freebsd.go b/vendor/modernc.org/libc/libc_freebsd.go
index 9f27366f8..2e7286d9d 100644
--- a/vendor/modernc.org/libc/libc_freebsd.go
+++ b/vendor/modernc.org/libc/libc_freebsd.go
@@ -11,7 +11,6 @@ import (
"os"
"os/exec"
"path/filepath"
- "runtime"
"runtime/debug"
"strconv"
"strings"
@@ -29,6 +28,7 @@ import (
"modernc.org/libc/limits"
"modernc.org/libc/netdb"
"modernc.org/libc/netinet/in"
+ "modernc.org/libc/pthread"
"modernc.org/libc/pwd"
"modernc.org/libc/signal"
"modernc.org/libc/stdio"
@@ -138,44 +138,15 @@ func Xgetrusage(t *TLS, who int32, usage uintptr) int32 {
return 0
}
-// char *fgets(char *s, int size, FILE *stream);
-func Xfgets(t *TLS, s uintptr, size int32, stream uintptr) uintptr {
+// int fgetc(FILE *stream);
+func Xfgetc(t *TLS, stream uintptr) int32 {
fd := int((*stdio.FILE)(unsafe.Pointer(stream)).F_file)
- var b []byte
- buf := [1]byte{}
- for ; size > 0; size-- {
- n, err := unix.Read(fd, buf[:])
- if n != 0 {
- b = append(b, buf[0])
- if buf[0] == '\n' {
- b = append(b, 0)
- copy((*RawMem)(unsafe.Pointer(s))[:len(b):len(b)], b)
- return s
- }
-
- continue
- }
-
- switch {
- case n == 0 && err == nil && len(b) == 0:
- return 0
- default:
- panic(todo(""))
- }
-
- // if err == nil {
- // panic("internal error")
- // }
-
- // if len(b) != 0 {
- // b = append(b, 0)
- // copy((*RawMem)(unsafe.Pointer(s)[:len(b)]), b)
- // return s
- // }
-
- // t.setErrno(err)
+ var buf [1]byte
+ if n, _ := unix.Read(fd, buf[:]); n != 0 {
+ return int32(buf[0])
}
- panic(todo(""))
+
+ return stdio.EOF
}
// int lstat(const char *pathname, struct stat *statbuf);
@@ -238,7 +209,7 @@ func Xopen(t *TLS, pathname uintptr, flags int32, args uintptr) int32 {
func Xopen64(t *TLS, pathname uintptr, flags int32, args uintptr) int32 {
var mode types.Mode_t
if args != 0 {
- mode = *(*types.Mode_t)(unsafe.Pointer(args))
+ mode = (types.Mode_t)(VaUint32(&args))
}
fdcwd := fcntl.AT_FDCWD
n, _, err := unix.Syscall6(unix.SYS_OPENAT, uintptr(fdcwd), pathname, uintptr(flags), uintptr(mode), 0, 0)
@@ -1742,16 +1713,6 @@ func Xferror(t *TLS, stream uintptr) int32 {
return Bool32(file(stream).err())
}
-// int fgetc(FILE *stream);
-func Xfgetc(t *TLS, stream uintptr) int32 {
- panic(todo(""))
-}
-
-// int getc(FILE *stream);
-func Xgetc(t *TLS, stream uintptr) int32 {
- return Xfgetc(t, stream)
-}
-
// int ungetc(int c, FILE *stream);
func Xungetc(t *TLS, c int32, stream uintptr) int32 {
panic(todo(""))
@@ -1762,11 +1723,6 @@ func Xfscanf(t *TLS, stream, format, va uintptr) int32 {
panic(todo(""))
}
-// FILE *fdopen(int fd, const char *mode);
-func Xfdopen(t *TLS, fd int32, mode uintptr) uintptr {
- panic(todo(""))
-}
-
// int fputs(const char *s, FILE *stream);
func Xfputs(t *TLS, s, stream uintptr) int32 {
if _, _, err := unix.Syscall(unix.SYS_WRITE, uintptr(file(stream).fd()), s, uintptr(Xstrlen(t, s))); err != 0 {
@@ -1931,11 +1887,6 @@ func X__isoc99_sscanf(t *TLS, str, format, va uintptr) int32 {
return r
}
-// int sched_yield(void);
-func Xsched_yield(t *TLS) {
- runtime.Gosched()
-}
-
var ctimeStaticBuf [32]byte
// char *ctime(const time_t *timep);
@@ -2118,3 +2069,76 @@ func Xmmap(t *TLS, addr uintptr, length types.Size_t, prot, flags, fd int32, off
}
return data
}
+
+const PTHREAD_MUTEX_DEFAULT = 0
+
+func X__ccgo_pthreadMutexattrGettype(tls *TLS, a uintptr) int32 { /* pthread_attr_get.c:93:5: */
+ return (int32((*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr & uint32(3)))
+}
+
+func X__ccgo_getMutexType(tls *TLS, m uintptr) int32 { /* pthread_mutex_lock.c:3:5: */
+ return (*(*int32)(unsafe.Pointer((m /* &.__u */ /* &.__i */))) & 15)
+}
+
+func X__ccgo_pthreadAttrGetDetachState(tls *TLS, a uintptr) int32 { /* pthread_attr_get.c:3:5: */
+ return *(*int32)(unsafe.Pointer((a /* &.__u */ /* &.__i */) + 6*4))
+}
+
+func Xpthread_attr_init(t *TLS, pAttr uintptr) int32 {
+ *(*pthread.Pthread_attr_t)(unsafe.Pointer(pAttr)) = pthread.Pthread_attr_t(0)
+ return 0
+}
+
+// The pthread_mutex_init() function shall initialize the mutex referenced by
+// mutex with attributes specified by attr. If attr is NULL, the default mutex
+// attributes are used; the effect shall be the same as passing the address of
+// a default mutex attributes object. Upon successful initialization, the state
+// of the mutex becomes initialized and unlocked.
+//
+// If successful, the pthread_mutex_destroy() and pthread_mutex_init()
+// functions shall return zero; otherwise, an error number shall be returned to
+// indicate the error.
+//
+// int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);
+func Xpthread_mutex_init(t *TLS, pMutex, pAttr uintptr) int32 {
+ typ := PTHREAD_MUTEX_DEFAULT
+ if pAttr != 0 {
+ typ = int(X__ccgo_pthreadMutexattrGettype(t, pAttr))
+ }
+ mutexesMu.Lock()
+
+ defer mutexesMu.Unlock()
+
+ mutexes[pMutex] = newMutex(typ)
+ return 0
+}
+
+func Xpthread_attr_getdetachstate(tls *TLS, a uintptr, state uintptr) int32 { /* pthread_attr_get.c:7:5: */
+ *(*int32)(unsafe.Pointer(state)) = *(*int32)(unsafe.Pointer((a /* &.__u */ /* &.__i */) + 6*4))
+ return 0
+}
+
+func Xpthread_attr_setdetachstate(tls *TLS, a uintptr, state int32) int32 { /* pthread_attr_setdetachstate.c:3:5: */
+ if uint32(state) > 1 {
+ return 22
+ }
+ *(*int32)(unsafe.Pointer((a /* &.__u */ /* &.__i */) + 6*4)) = state
+ return 0
+}
+
+func Xpthread_mutexattr_destroy(tls *TLS, a uintptr) int32 { /* pthread_mutexattr_destroy.c:3:5: */
+ return 0
+}
+
+func Xpthread_mutexattr_init(tls *TLS, a uintptr) int32 { /* pthread_mutexattr_init.c:3:5: */
+ *(*pthread_mutexattr_t)(unsafe.Pointer(a)) = pthread_mutexattr_t{}
+ return 0
+}
+
+func Xpthread_mutexattr_settype(tls *TLS, a uintptr, type1 int32) int32 { /* pthread_mutexattr_settype.c:3:5: */
+ if uint32(type1) > uint32(2) {
+ return 22
+ }
+ (*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr = (((*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr & Uint32FromInt32(CplInt32(3))) | uint32(type1))
+ return 0
+}