diff options
| author | Ondřej Surý <ondrej@sury.org> | 2012-01-30 15:38:19 +0100 |
|---|---|---|
| committer | Ondřej Surý <ondrej@sury.org> | 2012-01-30 15:38:19 +0100 |
| commit | 4cecda6c347bd6902b960c6a35a967add7070b0d (patch) | |
| tree | a462e224ff41ec9f3eb1a0b6e815806f9e8804ad /src/pkg/syscall/syscall_bsd.go | |
| parent | 6c7ca6e4d4e26e4c8cbe0d183966011b3b088a0a (diff) | |
| download | golang-4cecda6c347bd6902b960c6a35a967add7070b0d.tar.gz | |
Imported Upstream version 2012.01.27upstream-weekly/2012.01.27
Diffstat (limited to 'src/pkg/syscall/syscall_bsd.go')
| -rw-r--r-- | src/pkg/syscall/syscall_bsd.go | 317 |
1 files changed, 163 insertions, 154 deletions
diff --git a/src/pkg/syscall/syscall_bsd.go b/src/pkg/syscall/syscall_bsd.go index 59c6f4560..16f20981c 100644 --- a/src/pkg/syscall/syscall_bsd.go +++ b/src/pkg/syscall/syscall_bsd.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build darwin freebsd openbsd +// +build darwin freebsd netbsd openbsd // BSD system call wrappers shared by *BSD based systems // including OS X (Darwin) and FreeBSD. Like the other @@ -12,7 +12,10 @@ package syscall -import "unsafe" +import ( + "runtime" + "unsafe" +) /* * Pseudo-system calls @@ -22,22 +25,22 @@ import "unsafe" // even linking this function into the binary. See ../os/getwd.go. const ImplementsGetwd = false -func Getwd() (string, int) { return "", ENOTSUP } +func Getwd() (string, error) { return "", ENOTSUP } /* * Wrapped */ -//sysnb getgroups(ngid int, gid *_Gid_t) (n int, errno int) -//sysnb setgroups(ngid int, gid *_Gid_t) (errno int) +//sysnb getgroups(ngid int, gid *_Gid_t) (n int, err error) +//sysnb setgroups(ngid int, gid *_Gid_t) (err error) -func Getgroups() (gids []int, errno int) { +func Getgroups() (gids []int, err error) { n, err := getgroups(0, nil) - if err != 0 { - return nil, errno + if err != nil { + return nil, err } if n == 0 { - return nil, 0 + return nil, nil } // Sanity check group count. Max is 16 on BSD. @@ -47,8 +50,8 @@ func Getgroups() (gids []int, errno int) { a := make([]_Gid_t, n) n, err = getgroups(n, &a[0]) - if err != 0 { - return nil, errno + if err != nil { + return nil, err } gids = make([]int, n) for i, v := range a[0:n] { @@ -57,7 +60,7 @@ func Getgroups() (gids []int, errno int) { return } -func Setgroups(gids []int) (errno int) { +func Setgroups(gids []int) (err error) { if len(gids) == 0 { return setgroups(0, nil) } @@ -69,7 +72,7 @@ func Setgroups(gids []int) (errno int) { return setgroups(len(a), &a[0]) } -func ReadDirent(fd int, buf []byte) (n int, errno int) { +func ReadDirent(fd int, buf []byte) (n int, err error) { // 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)) @@ -126,38 +129,33 @@ func (w WaitStatus) StopSignal() int { func (w WaitStatus) TrapCause() int { return -1 } -//sys wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, errno int) +//sys wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) -func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, errno int) { +func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { var status _C_int - wpid, errno = wait4(pid, &status, options, rusage) + wpid, err = wait4(pid, &status, options, rusage) if wstatus != nil { *wstatus = WaitStatus(status) } return } -func Sleep(ns int64) (errno int) { - tv := NsecToTimeval(ns) - return Select(0, nil, nil, nil, &tv) -} - -//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) -//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 uintptr) (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) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys bind(s int, addr uintptr, addrlen _Socklen) (err error) +//sys connect(s int, addr uintptr, addrlen _Socklen) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val uintptr, vallen uintptr) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys Shutdown(s int, how int) (err error) // For testing: clients can set this flag to force // creation of IPv6 sockets to return EAFNOSUPPORT. var SocketDisableIPv6 bool type Sockaddr interface { - sockaddr() (ptr uintptr, len _Socklen, errno int) // lowercase; only we can define Sockaddrs + sockaddr() (ptr uintptr, len _Socklen, err error) // lowercase; only we can define Sockaddrs } type SockaddrInet4 struct { @@ -166,7 +164,7 @@ type SockaddrInet4 struct { raw RawSockaddrInet4 } -func (sa *SockaddrInet4) sockaddr() (uintptr, _Socklen, int) { +func (sa *SockaddrInet4) sockaddr() (uintptr, _Socklen, error) { if sa.Port < 0 || sa.Port > 0xFFFF { return 0, 0, EINVAL } @@ -178,7 +176,7 @@ func (sa *SockaddrInet4) sockaddr() (uintptr, _Socklen, int) { for i := 0; i < len(sa.Addr); i++ { sa.raw.Addr[i] = sa.Addr[i] } - return uintptr(unsafe.Pointer(&sa.raw)), _Socklen(sa.raw.Len), 0 + return uintptr(unsafe.Pointer(&sa.raw)), _Socklen(sa.raw.Len), nil } type SockaddrInet6 struct { @@ -188,7 +186,7 @@ type SockaddrInet6 struct { raw RawSockaddrInet6 } -func (sa *SockaddrInet6) sockaddr() (uintptr, _Socklen, int) { +func (sa *SockaddrInet6) sockaddr() (uintptr, _Socklen, error) { if sa.Port < 0 || sa.Port > 0xFFFF { return 0, 0, EINVAL } @@ -201,7 +199,7 @@ func (sa *SockaddrInet6) sockaddr() (uintptr, _Socklen, int) { for i := 0; i < len(sa.Addr); i++ { sa.raw.Addr[i] = sa.Addr[i] } - return uintptr(unsafe.Pointer(&sa.raw)), _Socklen(sa.raw.Len), 0 + return uintptr(unsafe.Pointer(&sa.raw)), _Socklen(sa.raw.Len), nil } type SockaddrUnix struct { @@ -209,7 +207,7 @@ type SockaddrUnix struct { raw RawSockaddrUnix } -func (sa *SockaddrUnix) sockaddr() (uintptr, _Socklen, int) { +func (sa *SockaddrUnix) sockaddr() (uintptr, _Socklen, error) { name := sa.Name n := len(name) if n >= len(sa.raw.Path) || n == 0 { @@ -220,10 +218,10 @@ func (sa *SockaddrUnix) sockaddr() (uintptr, _Socklen, int) { for i := 0; i < n; i++ { sa.raw.Path[i] = int8(name[i]) } - return uintptr(unsafe.Pointer(&sa.raw)), _Socklen(sa.raw.Len), 0 + return uintptr(unsafe.Pointer(&sa.raw)), _Socklen(sa.raw.Len), nil } -func (sa *SockaddrDatalink) sockaddr() (uintptr, _Socklen, int) { +func (sa *SockaddrDatalink) sockaddr() (uintptr, _Socklen, error) { if sa.Index == 0 { return 0, 0, EINVAL } @@ -237,10 +235,10 @@ func (sa *SockaddrDatalink) sockaddr() (uintptr, _Socklen, int) { for i := 0; i < len(sa.raw.Data); i++ { sa.raw.Data[i] = sa.Data[i] } - return uintptr(unsafe.Pointer(&sa.raw)), SizeofSockaddrDatalink, 0 + return uintptr(unsafe.Pointer(&sa.raw)), SizeofSockaddrDatalink, nil } -func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, int) { +func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) { switch rsa.Addr.Family { case AF_LINK: pp := (*RawSockaddrDatalink)(unsafe.Pointer(rsa)) @@ -255,7 +253,7 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, int) { for i := 0; i < len(sa.Data); i++ { sa.Data[i] = pp.Data[i] } - return sa, 0 + return sa, nil case AF_UNIX: pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) @@ -273,7 +271,7 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, int) { } bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] sa.Name = string(bytes) - return sa, 0 + return sa, nil case AF_INET: pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) @@ -283,7 +281,7 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, int) { for i := 0; i < len(sa.Addr); i++ { sa.Addr[i] = pp.Addr[i] } - return sa, 0 + return sa, nil case AF_INET6: pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa)) @@ -294,132 +292,168 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, int) { for i := 0; i < len(sa.Addr); i++ { sa.Addr[i] = pp.Addr[i] } - return sa, 0 + return sa, nil } return nil, EAFNOSUPPORT } -func Accept(fd int) (nfd int, sa Sockaddr, errno int) { +func Accept(fd int) (nfd int, sa Sockaddr, err error) { var rsa RawSockaddrAny var len _Socklen = SizeofSockaddrAny - nfd, errno = accept(fd, &rsa, &len) - if errno != 0 { + nfd, err = accept(fd, &rsa, &len) + if err != nil { return } - sa, errno = anyToSockaddr(&rsa) - if errno != 0 { + sa, err = anyToSockaddr(&rsa) + if err != nil { Close(nfd) nfd = 0 } return } -func Getsockname(fd int) (sa Sockaddr, errno int) { +func Getsockname(fd int) (sa Sockaddr, err error) { var rsa RawSockaddrAny var len _Socklen = SizeofSockaddrAny - if errno = getsockname(fd, &rsa, &len); errno != 0 { + if err = getsockname(fd, &rsa, &len); err != nil { return } return anyToSockaddr(&rsa) } -func Getpeername(fd int) (sa Sockaddr, errno int) { +func Getpeername(fd int) (sa Sockaddr, err error) { var rsa RawSockaddrAny var len _Socklen = SizeofSockaddrAny - if errno = getpeername(fd, &rsa, &len); errno != 0 { + if err = getpeername(fd, &rsa, &len); err != nil { return } return anyToSockaddr(&rsa) } -func Bind(fd int, sa Sockaddr) (errno int) { +func Bind(fd int, sa Sockaddr) (err error) { ptr, n, err := sa.sockaddr() - if err != 0 { + if err != nil { return err } return bind(fd, ptr, n) } -func Connect(fd int, sa Sockaddr) (errno int) { +func Connect(fd int, sa Sockaddr) (err error) { ptr, n, err := sa.sockaddr() - if err != 0 { + if err != nil { return err } return connect(fd, ptr, n) } -func Socket(domain, typ, proto int) (fd, errno int) { +func Socket(domain, typ, proto int) (fd int, err error) { if domain == AF_INET6 && SocketDisableIPv6 { return -1, EAFNOSUPPORT } - fd, errno = socket(domain, typ, proto) + fd, err = socket(domain, typ, proto) return } -//sysnb socketpair(domain int, typ int, proto int, fd *[2]int) (errno int) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int) (err error) -func Socketpair(domain, typ, proto int) (fd [2]int, errno int) { - errno = socketpair(domain, typ, proto, &fd) +func Socketpair(domain, typ, proto int) (fd [2]int, err error) { + err = socketpair(domain, typ, proto, &fd) return } -func GetsockoptInt(fd, level, opt int) (value, errno int) { +func GetsockoptByte(fd, level, opt int) (value byte, err error) { + var n byte + vallen := _Socklen(1) + err = getsockopt(fd, level, opt, uintptr(unsafe.Pointer(&n)), &vallen) + return n, err +} + +func GetsockoptInt(fd, level, opt int) (value int, err error) { var n int32 vallen := _Socklen(4) - errno = getsockopt(fd, level, opt, uintptr(unsafe.Pointer(&n)), &vallen) - return int(n), errno + err = getsockopt(fd, level, opt, uintptr(unsafe.Pointer(&n)), &vallen) + return int(n), err +} + +func GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) { + vallen := _Socklen(4) + err = getsockopt(fd, level, opt, uintptr(unsafe.Pointer(&value[0])), &vallen) + return value, err +} + +func GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) { + var value IPMreq + vallen := _Socklen(SizeofIPMreq) + err := getsockopt(fd, level, opt, uintptr(unsafe.Pointer(&value)), &vallen) + return &value, err +} + +func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) { + var value IPv6Mreq + vallen := _Socklen(SizeofIPv6Mreq) + err := getsockopt(fd, level, opt, uintptr(unsafe.Pointer(&value)), &vallen) + return &value, err +} + +func SetsockoptByte(fd, level, opt int, value byte) (err error) { + var n = byte(value) + return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(&n)), 1) } -func SetsockoptInt(fd, level, opt int, value int) (errno int) { +func SetsockoptInt(fd, level, opt int, value int) (err error) { var n = int32(value) return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(&n)), 4) } -func SetsockoptTimeval(fd, level, opt int, tv *Timeval) (errno int) { +func SetsockoptInet4Addr(fd, level, opt int, value [4]byte) (err error) { + return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(&value[0])), 4) +} + +func SetsockoptTimeval(fd, level, opt int, tv *Timeval) (err error) { return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(tv)), unsafe.Sizeof(*tv)) } -func SetsockoptLinger(fd, level, opt int, l *Linger) (errno int) { +func SetsockoptLinger(fd, level, opt int, l *Linger) (err error) { return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(l)), unsafe.Sizeof(*l)) } -func SetsockoptIPMreq(fd, level, opt int, mreq *IPMreq) (errno int) { +func SetsockoptIPMreq(fd, level, opt int, mreq *IPMreq) (err error) { return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(mreq)), unsafe.Sizeof(*mreq)) } -func SetsockoptIPv6Mreq(fd, level, opt int, mreq *IPv6Mreq) (errno int) { +func SetsockoptIPv6Mreq(fd, level, opt int, mreq *IPv6Mreq) (err error) { return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(mreq)), unsafe.Sizeof(*mreq)) } -func SetsockoptString(fd, level, opt int, s string) (errno int) { +func SetsockoptString(fd, level, opt int, s string) (err error) { return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(&[]byte(s)[0])), uintptr(len(s))) } -//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, errno int) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) -func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, errno int) { +func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) { var rsa RawSockaddrAny var len _Socklen = SizeofSockaddrAny - if n, errno = recvfrom(fd, p, flags, &rsa, &len); errno != 0 { + if n, err = recvfrom(fd, p, flags, &rsa, &len); err != nil { return } - from, errno = anyToSockaddr(&rsa) + from, err = anyToSockaddr(&rsa) return } -//sys sendto(s int, buf []byte, flags int, to uintptr, addrlen _Socklen) (errno int) +//sys sendto(s int, buf []byte, flags int, to uintptr, addrlen _Socklen) (err error) -func Sendto(fd int, p []byte, flags int, to Sockaddr) (errno int) { +func Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) { ptr, n, err := to.sockaddr() - if err != 0 { + if err != nil { return err } return sendto(fd, p, flags, ptr, n) } -//sys recvmsg(s int, msg *Msghdr, flags int) (n int, errno int) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) -func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, errno int) { +func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { var msg Msghdr var rsa RawSockaddrAny msg.Name = (*byte)(unsafe.Pointer(&rsa)) @@ -441,27 +475,27 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from } msg.Iov = &iov msg.Iovlen = 1 - if n, errno = recvmsg(fd, &msg, flags); errno != 0 { + if n, err = recvmsg(fd, &msg, flags); err != nil { return } oobn = int(msg.Controllen) recvflags = int(msg.Flags) // source address is only specified if the socket is unconnected if rsa.Addr.Family != AF_UNSPEC { - from, errno = anyToSockaddr(&rsa) + from, err = anyToSockaddr(&rsa) } return } -//sys sendmsg(s int, msg *Msghdr, flags int) (errno int) +//sys sendmsg(s int, msg *Msghdr, flags int) (err error) -func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (errno int) { +func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { var ptr uintptr var salen _Socklen if to != nil { - var err int + var err error ptr, salen, err = to.sockaddr() - if err != 0 { + if err != nil { return err } } @@ -485,24 +519,15 @@ func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (errno int) { } msg.Iov = &iov msg.Iovlen = 1 - if errno = sendmsg(fd, &msg, flags); errno != 0 { + if err = sendmsg(fd, &msg, flags); err != nil { return } return } -// TODO: -// FreeBSD has IP_SENDIF. Darwin probably needs BSDLLCTest, see: -// http://developer.apple.com/mac/library/samplecode/BSDLLCTest/index.html +//sys kevent(kq int, change uintptr, nchange int, event uintptr, nevent int, timeout *Timespec) (n int, err error) -// BindToDevice binds the socket associated with fd to device. -func BindToDevice(fd int, device string) (errno int) { - return ENOSYS -} - -//sys kevent(kq int, change uintptr, nchange int, event uintptr, nevent int, timeout *Timespec) (n int, errno int) - -func Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, errno int) { +func Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, err error) { var change, event uintptr if len(changes) > 0 { change = uintptr(unsafe.Pointer(&changes[0])) @@ -513,106 +538,90 @@ func Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, errno return kevent(kq, change, len(changes), event, len(events), timeout) } -//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (errno int) = SYS___SYSCTL - -// Translate "kern.hostname" to []_C_int{0,1,2,3}. -func nametomib(name string) (mib []_C_int, errno int) { - const siz = unsafe.Sizeof(mib[0]) +//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL - // NOTE(rsc): It seems strange to set the buffer to have - // size CTL_MAXNAME+2 but use only CTL_MAXNAME - // as the size. I don't know why the +2 is here, but the - // kernel uses +2 for its own implementation of this function. - // I am scared that if we don't include the +2 here, the kernel - // will silently write 2 words farther than we specify - // and we'll get memory corruption. - var buf [CTL_MAXNAME + 2]_C_int - n := uintptr(CTL_MAXNAME) * siz - - p := (*byte)(unsafe.Pointer(&buf[0])) - bytes := StringByteSlice(name) - - // Magic sysctl: "setting" 0.3 to a string name - // lets you read back the array of integers form. - if errno = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); errno != 0 { - return nil, errno - } - return buf[0 : n/siz], 0 -} - -func Sysctl(name string) (value string, errno int) { +func Sysctl(name string) (value string, err error) { // Translate name to mib number. - mib, errno := nametomib(name) - if errno != 0 { - return "", errno + mib, err := nametomib(name) + if err != nil { + return "", err } // Find size. n := uintptr(0) - if errno = sysctl(mib, nil, &n, nil, 0); errno != 0 { - return "", errno + if err = sysctl(mib, nil, &n, nil, 0); err != nil { + return "", err } if n == 0 { - return "", 0 + // TODO(jsing): Remove after OpenBSD 5.2 release. + // Work around a bug that was fixed after OpenBSD 5.0. + // The length for kern.hostname and kern.domainname is always + // returned as 0 when a nil value is passed for oldp. + if runtime.GOOS == "openbsd" && (name == "kern.hostname" || name == "kern.domainname") { + // MAXHOSTNAMELEN + n = 256 + } else { + return "", nil + } } // Read into buffer of that size. buf := make([]byte, n) - if errno = sysctl(mib, &buf[0], &n, nil, 0); errno != 0 { - return "", errno + if err = sysctl(mib, &buf[0], &n, nil, 0); err != nil { + return "", err } // Throw away terminating NUL. if n > 0 && buf[n-1] == '\x00' { n-- } - return string(buf[0:n]), 0 + return string(buf[0:n]), nil } -func SysctlUint32(name string) (value uint32, errno int) { +func SysctlUint32(name string) (value uint32, err error) { // Translate name to mib number. - mib, errno := nametomib(name) - if errno != 0 { - return 0, errno + mib, err := nametomib(name) + if err != nil { + return 0, err } // Read into buffer of that size. n := uintptr(4) buf := make([]byte, 4) - if errno = sysctl(mib, &buf[0], &n, nil, 0); errno != 0 { - return 0, errno + if err = sysctl(mib, &buf[0], &n, nil, 0); err != nil { + return 0, err } if n != 4 { return 0, EIO } - return *(*uint32)(unsafe.Pointer(&buf[0])), 0 + return *(*uint32)(unsafe.Pointer(&buf[0])), nil } -//sys utimes(path string, timeval *[2]Timeval) (errno int) -func Utimes(path string, tv []Timeval) (errno int) { +//sys utimes(path string, timeval *[2]Timeval) (err error) +func Utimes(path string, tv []Timeval) (err error) { if len(tv) != 2 { return EINVAL } return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) } -//sys futimes(fd int, timeval *[2]Timeval) (errno int) -func Futimes(fd int, tv []Timeval) (errno int) { +//sys futimes(fd int, timeval *[2]Timeval) (err error) +func Futimes(fd int, tv []Timeval) (err error) { if len(tv) != 2 { return EINVAL } return futimes(fd, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) } -//sys fcntl(fd int, cmd int, arg int) (val int, errno int) +//sys fcntl(fd int, cmd int, arg int) (val int, err error) // TODO: wrap -// Acct(name nil-string) (errno int) -// Gethostuuid(uuid *byte, timeout *Timespec) (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) -// Ptrace(req int, pid int, addr uintptr, data int) (ret uintptr, errno int) +// Acct(name nil-string) (err error) +// Gethostuuid(uuid *byte, timeout *Timespec) (err error) +// Madvise(addr *byte, len int, behav int) (err error) +// Mprotect(addr *byte, len int, prot int) (err error) +// Msync(addr *byte, len int, flags int) (err error) +// Ptrace(req int, pid int, addr uintptr, data int) (ret uintptr, err error) var mapper = &mmapper{ active: make(map[*byte][]byte), @@ -620,10 +629,10 @@ var mapper = &mmapper{ munmap: munmap, } -func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, errno int) { +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { return mapper.Mmap(fd, offset, length, prot, flags) } -func Munmap(b []byte) (errno int) { +func Munmap(b []byte) (err error) { return mapper.Munmap(b) } |
