Source file src/pkg/cmd/vendor/golang.org/x/sys/unix/syscall_aix.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14 package unix
15
16 import "unsafe"
17
18
21
22
23 func Utimes(path string, tv []Timeval) error {
24 if len(tv) != 2 {
25 return EINVAL
26 }
27 return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
28 }
29
30
31 func UtimesNano(path string, ts []Timespec) error {
32 if len(ts) != 2 {
33 return EINVAL
34 }
35 return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
36 }
37
38 func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {
39 if ts == nil {
40 return utimensat(dirfd, path, nil, flags)
41 }
42 if len(ts) != 2 {
43 return EINVAL
44 }
45 return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)
46 }
47
48 func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {
49 if sa.Port < 0 || sa.Port > 0xFFFF {
50 return nil, 0, EINVAL
51 }
52 sa.raw.Family = AF_INET
53 p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
54 p[0] = byte(sa.Port >> 8)
55 p[1] = byte(sa.Port)
56 for i := 0; i < len(sa.Addr); i++ {
57 sa.raw.Addr[i] = sa.Addr[i]
58 }
59 return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil
60 }
61
62 func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {
63 if sa.Port < 0 || sa.Port > 0xFFFF {
64 return nil, 0, EINVAL
65 }
66 sa.raw.Family = AF_INET6
67 p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
68 p[0] = byte(sa.Port >> 8)
69 p[1] = byte(sa.Port)
70 sa.raw.Scope_id = sa.ZoneId
71 for i := 0; i < len(sa.Addr); i++ {
72 sa.raw.Addr[i] = sa.Addr[i]
73 }
74 return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil
75 }
76
77 func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {
78 name := sa.Name
79 n := len(name)
80 if n > len(sa.raw.Path) {
81 return nil, 0, EINVAL
82 }
83 if n == len(sa.raw.Path) && name[0] != '@' {
84 return nil, 0, EINVAL
85 }
86 sa.raw.Family = AF_UNIX
87 for i := 0; i < n; i++ {
88 sa.raw.Path[i] = uint8(name[i])
89 }
90
91 sl := _Socklen(2)
92 if n > 0 {
93 sl += _Socklen(n) + 1
94 }
95 if sa.raw.Path[0] == '@' {
96 sa.raw.Path[0] = 0
97
98 sl--
99 }
100
101 return unsafe.Pointer(&sa.raw), sl, nil
102 }
103
104 func Getsockname(fd int) (sa Sockaddr, err error) {
105 var rsa RawSockaddrAny
106 var len _Socklen = SizeofSockaddrAny
107 if err = getsockname(fd, &rsa, &len); err != nil {
108 return
109 }
110 return anyToSockaddr(fd, &rsa)
111 }
112
113
114
115 const ImplementsGetwd = true
116
117 func Getwd() (ret string, err error) {
118 for len := uint64(4096); ; len *= 2 {
119 b := make([]byte, len)
120 err := getcwd(b)
121 if err == nil {
122 i := 0
123 for b[i] != 0 {
124 i++
125 }
126 return string(b[0:i]), nil
127 }
128 if err != ERANGE {
129 return "", err
130 }
131 }
132 }
133
134 func Getcwd(buf []byte) (n int, err error) {
135 err = getcwd(buf)
136 if err == nil {
137 i := 0
138 for buf[i] != 0 {
139 i++
140 }
141 n = i + 1
142 }
143 return
144 }
145
146 func Getgroups() (gids []int, err error) {
147 n, err := getgroups(0, nil)
148 if err != nil {
149 return nil, err
150 }
151 if n == 0 {
152 return nil, nil
153 }
154
155
156 if n < 0 || n > 1000 {
157 return nil, EINVAL
158 }
159
160 a := make([]_Gid_t, n)
161 n, err = getgroups(n, &a[0])
162 if err != nil {
163 return nil, err
164 }
165 gids = make([]int, n)
166 for i, v := range a[0:n] {
167 gids[i] = int(v)
168 }
169 return
170 }
171
172 func Setgroups(gids []int) (err error) {
173 if len(gids) == 0 {
174 return setgroups(0, nil)
175 }
176
177 a := make([]_Gid_t, len(gids))
178 for i, v := range gids {
179 a[i] = _Gid_t(v)
180 }
181 return setgroups(len(a), &a[0])
182 }
183
184
187
188
189
190 func Accept(fd int) (nfd int, sa Sockaddr, err error) {
191 var rsa RawSockaddrAny
192 var len _Socklen = SizeofSockaddrAny
193 nfd, err = accept(fd, &rsa, &len)
194 if nfd == -1 {
195 return
196 }
197 sa, err = anyToSockaddr(fd, &rsa)
198 if err != nil {
199 Close(nfd)
200 nfd = 0
201 }
202 return
203 }
204
205 func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
206
207 sa := new(SockaddrUnix)
208 return -1, -1, -1, sa, ENOSYS
209 }
210
211 func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {
212 _, err = SendmsgN(fd, p, oob, to, flags)
213 return
214 }
215
216 func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {
217
218 return -1, ENOSYS
219 }
220
221 func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
222 switch rsa.Addr.Family {
223
224 case AF_UNIX:
225 pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))
226 sa := new(SockaddrUnix)
227
228
229
230 n := SizeofSockaddrUnix - 3
231 for i := 0; i < n; i++ {
232 if pp.Path[i] == 0 {
233 n = i
234 break
235 }
236 }
237
238 bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
239 sa.Name = string(bytes)
240 return sa, nil
241
242 case AF_INET:
243 pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))
244 sa := new(SockaddrInet4)
245 p := (*[2]byte)(unsafe.Pointer(&pp.Port))
246 sa.Port = int(p[0])<<8 + int(p[1])
247 for i := 0; i < len(sa.Addr); i++ {
248 sa.Addr[i] = pp.Addr[i]
249 }
250 return sa, nil
251
252 case AF_INET6:
253 pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))
254 sa := new(SockaddrInet6)
255 p := (*[2]byte)(unsafe.Pointer(&pp.Port))
256 sa.Port = int(p[0])<<8 + int(p[1])
257 sa.ZoneId = pp.Scope_id
258 for i := 0; i < len(sa.Addr); i++ {
259 sa.Addr[i] = pp.Addr[i]
260 }
261 return sa, nil
262 }
263 return nil, EAFNOSUPPORT
264 }
265
266 func Gettimeofday(tv *Timeval) (err error) {
267 err = gettimeofday(tv, nil)
268 return
269 }
270
271 func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
272 if raceenabled {
273 raceReleaseMerge(unsafe.Pointer(&ioSync))
274 }
275 return sendfile(outfd, infd, offset, count)
276 }
277
278
279 func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
280 return -1, ENOSYS
281 }
282
283
284 func ReadDirent(fd int, buf []byte) (n int, err error) {
285 return getdirent(fd, buf)
286 }
287
288
289 func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {
290 var status _C_int
291 var r Pid_t
292 err = ERESTART
293
294
295 for err == ERESTART {
296 r, err = wait4(Pid_t(pid), &status, options, rusage)
297 }
298 wpid = int(r)
299 if wstatus != nil {
300 *wstatus = WaitStatus(status)
301 }
302 return
303 }
304
305
308
309 type WaitStatus uint32
310
311 func (w WaitStatus) Stopped() bool { return w&0x40 != 0 }
312 func (w WaitStatus) StopSignal() Signal {
313 if !w.Stopped() {
314 return -1
315 }
316 return Signal(w>>8) & 0xFF
317 }
318
319 func (w WaitStatus) Exited() bool { return w&0xFF == 0 }
320 func (w WaitStatus) ExitStatus() int {
321 if !w.Exited() {
322 return -1
323 }
324 return int((w >> 8) & 0xFF)
325 }
326
327 func (w WaitStatus) Signaled() bool { return w&0x40 == 0 && w&0xFF != 0 }
328 func (w WaitStatus) Signal() Signal {
329 if !w.Signaled() {
330 return -1
331 }
332 return Signal(w>>16) & 0xFF
333 }
334
335 func (w WaitStatus) Continued() bool { return w&0x01000000 != 0 }
336
337 func (w WaitStatus) CoreDump() bool { return w&0x200 != 0 }
338
339 func (w WaitStatus) TrapCause() int { return -1 }
340
341
342
343
344
345
346
347
348 func IoctlSetInt(fd int, req uint, value int) error {
349 return ioctl(fd, req, uintptr(value))
350 }
351
352 func ioctlSetWinsize(fd int, req uint, value *Winsize) error {
353 return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
354 }
355
356 func ioctlSetTermios(fd int, req uint, value *Termios) error {
357 return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
358 }
359
360
361
362 func IoctlGetInt(fd int, req uint) (int, error) {
363 var value int
364 err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
365 return value, err
366 }
367
368 func IoctlGetWinsize(fd int, req uint) (*Winsize, error) {
369 var value Winsize
370 err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
371 return &value, err
372 }
373
374 func IoctlGetTermios(fd int, req uint) (*Termios, error) {
375 var value Termios
376 err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
377 return &value, err
378 }
379
380
381
382
383
384
385
386
387
388
389
390
391
392
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500 var mapper = &mmapper{
501 active: make(map[*byte][]byte),
502 mmap: mmap,
503 munmap: munmap,
504 }
505
506 func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {
507 return mapper.Mmap(fd, offset, length, prot, flags)
508 }
509
510 func Munmap(b []byte) (err error) {
511 return mapper.Munmap(b)
512 }
513
514
515
516
517
518
519
520
521
522
523
524 func Pipe(p []int) (err error) {
525 if len(p) != 2 {
526 return EINVAL
527 }
528 var pp [2]_C_int
529 err = pipe(&pp)
530 p[0] = int(pp[0])
531 p[1] = int(pp[1])
532 return
533 }
534
535
536
537 func Poll(fds []PollFd, timeout int) (n int, err error) {
538 if len(fds) == 0 {
539 return poll(nil, 0, timeout)
540 }
541 return poll(&fds[0], len(fds), timeout)
542 }
543
544
545
546
547
548
549
550
551 func Unmount(target string, flags int) (err error) {
552 if flags != 0 {
553
554 return ENOSYS
555 }
556 return umount(target)
557 }
558
View as plain text