annotate vendor/golang.org/x/sys/unix/syscall_illumos.go @ 66:787b5ee0289d draft

Use vendored modules Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>
author yakumo.izuru
date Sun, 23 Jul 2023 13:18:53 +0000
parents
children 4b79810863f6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
66
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1 // Copyright 2021 The Go Authors. All rights reserved.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
2 // Use of this source code is governed by a BSD-style
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
3 // license that can be found in the LICENSE file.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
4
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
5 // illumos system calls not present on Solaris.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
6
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
7 //go:build amd64 && illumos
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
8 // +build amd64,illumos
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
9
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
10 package unix
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
11
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
12 import (
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
13 "fmt"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
14 "runtime"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
15 "unsafe"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
16 )
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
17
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
18 func bytes2iovec(bs [][]byte) []Iovec {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
19 iovecs := make([]Iovec, len(bs))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
20 for i, b := range bs {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
21 iovecs[i].SetLen(len(b))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
22 if len(b) > 0 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
23 iovecs[i].Base = &b[0]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
24 } else {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
25 iovecs[i].Base = (*byte)(unsafe.Pointer(&_zero))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
26 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
27 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
28 return iovecs
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
29 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
30
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
31 //sys readv(fd int, iovs []Iovec) (n int, err error)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
32
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
33 func Readv(fd int, iovs [][]byte) (n int, err error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
34 iovecs := bytes2iovec(iovs)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
35 n, err = readv(fd, iovecs)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
36 return n, err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
37 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
38
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
39 //sys preadv(fd int, iovs []Iovec, off int64) (n int, err error)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
40
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
41 func Preadv(fd int, iovs [][]byte, off int64) (n int, err error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
42 iovecs := bytes2iovec(iovs)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
43 n, err = preadv(fd, iovecs, off)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
44 return n, err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
45 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
46
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
47 //sys writev(fd int, iovs []Iovec) (n int, err error)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
48
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
49 func Writev(fd int, iovs [][]byte) (n int, err error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
50 iovecs := bytes2iovec(iovs)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
51 n, err = writev(fd, iovecs)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
52 return n, err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
53 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
54
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
55 //sys pwritev(fd int, iovs []Iovec, off int64) (n int, err error)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
56
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
57 func Pwritev(fd int, iovs [][]byte, off int64) (n int, err error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
58 iovecs := bytes2iovec(iovs)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
59 n, err = pwritev(fd, iovecs, off)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
60 return n, err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
61 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
62
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
63 //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) = libsocket.accept4
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
64
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
65 func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
66 var rsa RawSockaddrAny
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
67 var len _Socklen = SizeofSockaddrAny
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
68 nfd, err = accept4(fd, &rsa, &len, flags)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
69 if err != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
70 return
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
71 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
72 if len > SizeofSockaddrAny {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
73 panic("RawSockaddrAny too small")
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
74 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
75 sa, err = anyToSockaddr(fd, &rsa)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
76 if err != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
77 Close(nfd)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
78 nfd = 0
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
79 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
80 return
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
81 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
82
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
83 //sys putmsg(fd int, clptr *strbuf, dataptr *strbuf, flags int) (err error)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
84
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
85 func Putmsg(fd int, cl []byte, data []byte, flags int) (err error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
86 var clp, datap *strbuf
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
87 if len(cl) > 0 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
88 clp = &strbuf{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
89 Len: int32(len(cl)),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
90 Buf: (*int8)(unsafe.Pointer(&cl[0])),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
91 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
92 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
93 if len(data) > 0 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
94 datap = &strbuf{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
95 Len: int32(len(data)),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
96 Buf: (*int8)(unsafe.Pointer(&data[0])),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
97 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
98 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
99 return putmsg(fd, clp, datap, flags)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
100 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
101
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
102 //sys getmsg(fd int, clptr *strbuf, dataptr *strbuf, flags *int) (err error)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
103
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
104 func Getmsg(fd int, cl []byte, data []byte) (retCl []byte, retData []byte, flags int, err error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
105 var clp, datap *strbuf
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
106 if len(cl) > 0 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
107 clp = &strbuf{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
108 Maxlen: int32(len(cl)),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
109 Buf: (*int8)(unsafe.Pointer(&cl[0])),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
110 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
111 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
112 if len(data) > 0 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
113 datap = &strbuf{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
114 Maxlen: int32(len(data)),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
115 Buf: (*int8)(unsafe.Pointer(&data[0])),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
116 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
117 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
118
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
119 if err = getmsg(fd, clp, datap, &flags); err != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
120 return nil, nil, 0, err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
121 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
122
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
123 if len(cl) > 0 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
124 retCl = cl[:clp.Len]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
125 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
126 if len(data) > 0 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
127 retData = data[:datap.Len]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
128 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
129 return retCl, retData, flags, nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
130 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
131
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
132 func IoctlSetIntRetInt(fd int, req uint, arg int) (int, error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
133 return ioctlRet(fd, req, uintptr(arg))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
134 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
135
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
136 func IoctlSetString(fd int, req uint, val string) error {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
137 bs := make([]byte, len(val)+1)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
138 copy(bs[:len(bs)-1], val)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
139 err := ioctl(fd, req, uintptr(unsafe.Pointer(&bs[0])))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
140 runtime.KeepAlive(&bs[0])
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
141 return err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
142 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
143
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
144 // Lifreq Helpers
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
145
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
146 func (l *Lifreq) SetName(name string) error {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
147 if len(name) >= len(l.Name) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
148 return fmt.Errorf("name cannot be more than %d characters", len(l.Name)-1)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
149 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
150 for i := range name {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
151 l.Name[i] = int8(name[i])
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
152 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
153 return nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
154 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
155
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
156 func (l *Lifreq) SetLifruInt(d int) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
157 *(*int)(unsafe.Pointer(&l.Lifru[0])) = d
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
158 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
159
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
160 func (l *Lifreq) GetLifruInt() int {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
161 return *(*int)(unsafe.Pointer(&l.Lifru[0]))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
162 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
163
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
164 func (l *Lifreq) SetLifruUint(d uint) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
165 *(*uint)(unsafe.Pointer(&l.Lifru[0])) = d
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
166 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
167
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
168 func (l *Lifreq) GetLifruUint() uint {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
169 return *(*uint)(unsafe.Pointer(&l.Lifru[0]))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
170 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
171
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
172 func IoctlLifreq(fd int, req uint, l *Lifreq) error {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
173 return ioctl(fd, req, uintptr(unsafe.Pointer(l)))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
174 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
175
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
176 // Strioctl Helpers
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
177
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
178 func (s *Strioctl) SetInt(i int) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
179 s.Len = int32(unsafe.Sizeof(i))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
180 s.Dp = (*int8)(unsafe.Pointer(&i))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
181 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
182
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
183 func IoctlSetStrioctlRetInt(fd int, req uint, s *Strioctl) (int, error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
184 return ioctlRet(fd, req, uintptr(unsafe.Pointer(s)))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
185 }