diff options
author | Ondřej Surý <ondrej@sury.org> | 2011-04-26 09:55:32 +0200 |
---|---|---|
committer | Ondřej Surý <ondrej@sury.org> | 2011-04-26 09:55:32 +0200 |
commit | 7b15ed9ef455b6b66c6b376898a88aef5d6a9970 (patch) | |
tree | 3ef530baa80cdf29436ba981f5783be6b4d2202b /src/pkg/syscall/syscall_bsd.go | |
parent | 50104cc32a498f7517a51c8dc93106c51c7a54b4 (diff) | |
download | golang-7b15ed9ef455b6b66c6b376898a88aef5d6a9970.tar.gz |
Imported Upstream version 2011.04.13upstream/2011.04.13
Diffstat (limited to 'src/pkg/syscall/syscall_bsd.go')
-rw-r--r-- | src/pkg/syscall/syscall_bsd.go | 47 |
1 files changed, 38 insertions, 9 deletions
diff --git a/src/pkg/syscall/syscall_bsd.go b/src/pkg/syscall/syscall_bsd.go index 1f5b2ba9a..9f1244f13 100644 --- a/src/pkg/syscall/syscall_bsd.go +++ b/src/pkg/syscall/syscall_bsd.go @@ -27,8 +27,8 @@ func Getwd() (string, int) { return "", ENOTSUP } * Wrapped */ -//sys getgroups(ngid int, gid *_Gid_t) (n int, errno int) -//sys setgroups(ngid int, gid *_Gid_t) (errno int) +//sysnb getgroups(ngid int, gid *_Gid_t) (n int, errno int) +//sysnb setgroups(ngid int, gid *_Gid_t) (errno int) func Getgroups() (gids []int, errno int) { n, err := getgroups(0, nil) @@ -68,6 +68,12 @@ func Setgroups(gids []int) (errno int) { return setgroups(len(a), &a[0]) } +func ReadDirent(fd int, buf []byte) (n int, errno int) { + // Final argument is (basep *uintptr) and the syscall doesn't take nil. + // TODO(rsc): Can we use a single global basep for all calls? + return Getdirentries(fd, buf, new(uintptr)) +} + // Wait status is 7 bits at bottom, either 0 (exited), // 0x7F (stopped), or a signal number that caused an exit. // The 0x80 bit is whether there was a core dump. @@ -130,7 +136,7 @@ func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, return } -//sys pipe() (r int, w int, errno int) +//sysnb pipe() (r int, w int, errno int) func Pipe(p []int) (errno int) { if len(p) != 2 { @@ -148,10 +154,11 @@ func Sleep(ns int64) (errno int) { //sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, errno int) //sys bind(s int, addr uintptr, addrlen _Socklen) (errno int) //sys connect(s int, addr uintptr, addrlen _Socklen) (errno int) -//sys socket(domain int, typ int, proto int) (fd int, errno int) +//sysnb socket(domain int, typ int, proto int) (fd int, errno int) +//sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errno int) //sys setsockopt(s int, level int, name int, val uintptr, vallen int) (errno int) -//sys getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int) -//sys getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int) //sys Shutdown(s int, how int) (errno int) // For testing: clients can set this flag to force @@ -355,13 +362,20 @@ func Socket(domain, typ, proto int) (fd, errno int) { return } -//sys socketpair(domain int, typ int, proto int, fd *[2]int) (errno int) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int) (errno int) func Socketpair(domain, typ, proto int) (fd [2]int, errno int) { errno = socketpair(domain, typ, proto, &fd) return } +func GetsockoptInt(fd, level, opt int) (value, errno int) { + var n int32 + vallen := _Socklen(4) + errno = getsockopt(fd, level, opt, uintptr(unsafe.Pointer(&n)), &vallen) + return int(n), errno +} + func SetsockoptInt(fd, level, opt int, value int) (errno int) { var n = int32(value) return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(&n)), 4) @@ -552,9 +566,24 @@ func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (errno int) { // TODO: wrap // Acct(name nil-string) (errno int) // Gethostuuid(uuid *byte, timeout *Timespec) (errno int) -// Getsockopt(s int, level int, name int, val *byte, vallen *int) (errno int) // Madvise(addr *byte, len int, behav int) (errno int) // Mprotect(addr *byte, len int, prot int) (errno int) // Msync(addr *byte, len int, flags int) (errno int) -// Munmap(addr *byte, len int) (errno int) // Ptrace(req int, pid int, addr uintptr, data int) (ret uintptr, errno int) + +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, errno int) +//sys munmap(addr uintptr, length uintptr) (errno int) + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} + +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, errno int) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (errno int) { + return mapper.Munmap(b) +} |