52 Slen uint8 |
52 Slen uint8 |
53 Data [46]int8 |
53 Data [46]int8 |
54 raw RawSockaddrDatalink |
54 raw RawSockaddrDatalink |
55 } |
55 } |
56 |
56 |
|
57 func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { |
|
58 return nil, EAFNOSUPPORT |
|
59 } |
|
60 |
57 // Translate "kern.hostname" to []_C_int{0,1,2,3}. |
61 // Translate "kern.hostname" to []_C_int{0,1,2,3}. |
58 func nametomib(name string) (mib []_C_int, err error) { |
62 func nametomib(name string) (mib []_C_int, err error) { |
59 const siz = unsafe.Sizeof(mib[0]) |
63 const siz = unsafe.Sizeof(mib[0]) |
60 |
64 |
61 // NOTE(rsc): It seems strange to set the buffer to have |
65 // NOTE(rsc): It seems strange to set the buffer to have |
120 |
124 |
121 func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) { |
125 func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) { |
122 return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) |
126 return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) |
123 } |
127 } |
124 |
128 |
|
129 // GetsockoptXucred is a getsockopt wrapper that returns an Xucred struct. |
|
130 // The usual level and opt are SOL_LOCAL and LOCAL_PEERCRED, respectively. |
|
131 func GetsockoptXucred(fd, level, opt int) (*Xucred, error) { |
|
132 x := new(Xucred) |
|
133 vallen := _Socklen(SizeofXucred) |
|
134 err := getsockopt(fd, level, opt, unsafe.Pointer(x), &vallen) |
|
135 return x, err |
|
136 } |
|
137 |
125 func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) { |
138 func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) { |
126 var rsa RawSockaddrAny |
139 var rsa RawSockaddrAny |
127 var len _Socklen = SizeofSockaddrAny |
140 var len _Socklen = SizeofSockaddrAny |
128 nfd, err = accept4(fd, &rsa, &len, flags) |
141 nfd, err = accept4(fd, &rsa, &len, flags) |
129 if err != nil { |
142 if err != nil { |
138 nfd = 0 |
151 nfd = 0 |
139 } |
152 } |
140 return |
153 return |
141 } |
154 } |
142 |
155 |
143 const ImplementsGetwd = true |
|
144 |
|
145 //sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD |
156 //sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD |
146 |
|
147 func Getwd() (string, error) { |
|
148 var buf [PathMax]byte |
|
149 _, err := Getcwd(buf[0:]) |
|
150 if err != nil { |
|
151 return "", err |
|
152 } |
|
153 n := clen(buf[:]) |
|
154 if n < 1 { |
|
155 return "", EINVAL |
|
156 } |
|
157 return string(buf[:n]), nil |
|
158 } |
|
159 |
157 |
160 func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { |
158 func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { |
161 var ( |
159 var ( |
162 _p0 unsafe.Pointer |
160 _p0 unsafe.Pointer |
163 bufsize uintptr |
161 bufsize uintptr |
197 func setattrlistTimes(path string, times []Timespec, flags int) error { |
195 func setattrlistTimes(path string, times []Timespec, flags int) error { |
198 // used on Darwin for UtimesNano |
196 // used on Darwin for UtimesNano |
199 return ENOSYS |
197 return ENOSYS |
200 } |
198 } |
201 |
199 |
202 //sys ioctl(fd int, req uint, arg uintptr) (err error) |
200 //sys ioctl(fd int, req uint, arg uintptr) (err error) |
203 |
201 |
204 //sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL |
202 //sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL |
205 |
203 |
206 func Uname(uname *Utsname) error { |
204 func Uname(uname *Utsname) error { |
207 mib := []_C_int{CTL_KERN, KERN_OSTYPE} |
205 mib := []_C_int{CTL_KERN, KERN_OSTYPE} |
208 n := unsafe.Sizeof(uname.Sysname) |
206 n := unsafe.Sizeof(uname.Sysname) |
209 if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil { |
207 if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil { |
517 return ptrace(PTRACE_DETACH, pid, 1, 0) |
515 return ptrace(PTRACE_DETACH, pid, 1, 0) |
518 } |
516 } |
519 |
517 |
520 func PtraceGetFpRegs(pid int, fpregsout *FpReg) (err error) { |
518 func PtraceGetFpRegs(pid int, fpregsout *FpReg) (err error) { |
521 return ptrace(PTRACE_GETFPREGS, pid, uintptr(unsafe.Pointer(fpregsout)), 0) |
519 return ptrace(PTRACE_GETFPREGS, pid, uintptr(unsafe.Pointer(fpregsout)), 0) |
522 } |
|
523 |
|
524 func PtraceGetFsBase(pid int, fsbase *int64) (err error) { |
|
525 return ptrace(PTRACE_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0) |
|
526 } |
520 } |
527 |
521 |
528 func PtraceGetRegs(pid int, regsout *Reg) (err error) { |
522 func PtraceGetRegs(pid int, regsout *Reg) (err error) { |
529 return ptrace(PTRACE_GETREGS, pid, uintptr(unsafe.Pointer(regsout)), 0) |
523 return ptrace(PTRACE_GETREGS, pid, uintptr(unsafe.Pointer(regsout)), 0) |
530 } |
524 } |
678 //sys Undelete(path string) (err error) |
672 //sys Undelete(path string) (err error) |
679 //sys Unlink(path string) (err error) |
673 //sys Unlink(path string) (err error) |
680 //sys Unlinkat(dirfd int, path string, flags int) (err error) |
674 //sys Unlinkat(dirfd int, path string, flags int) (err error) |
681 //sys Unmount(path string, flags int) (err error) |
675 //sys Unmount(path string, flags int) (err error) |
682 //sys write(fd int, p []byte) (n int, err error) |
676 //sys write(fd int, p []byte) (n int, err error) |
683 //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) |
677 //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) |
684 //sys munmap(addr uintptr, length uintptr) (err error) |
678 //sys munmap(addr uintptr, length uintptr) (err error) |
685 //sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ |
679 //sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ |
686 //sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE |
680 //sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE |
687 //sys accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) |
681 //sys accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) |
688 //sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) |
682 //sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) |
689 |
683 |