]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blob - vendor/github.com/fsouza/go-dockerclient/external/golang.org/x/sys/unix/syscall_freebsd.go
ec56ed608a30e861ab1cd524f5dead8edf58cd8e
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / fsouza / go-dockerclient / external / golang.org / x / sys / unix / syscall_freebsd.go
1 // Copyright 2009,2010 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 // FreeBSD system calls.
6 // This file is compiled as ordinary Go code,
7 // but it is also input to mksyscall,
8 // which parses the //sys lines and generates system call stubs.
9 // Note that sometimes we use a lowercase //sys name and wrap
10 // it in our own nicer implementation, either here or in
11 // syscall_bsd.go or syscall_unix.go.
12
13 package unix
14
15 import "unsafe"
16
17 type SockaddrDatalink struct {
18 Len uint8
19 Family uint8
20 Index uint16
21 Type uint8
22 Nlen uint8
23 Alen uint8
24 Slen uint8
25 Data [46]int8
26 raw RawSockaddrDatalink
27 }
28
29 // Translate "kern.hostname" to []_C_int{0,1,2,3}.
30 func nametomib(name string) (mib []_C_int, err error) {
31 const siz = unsafe.Sizeof(mib[0])
32
33 // NOTE(rsc): It seems strange to set the buffer to have
34 // size CTL_MAXNAME+2 but use only CTL_MAXNAME
35 // as the size. I don't know why the +2 is here, but the
36 // kernel uses +2 for its own implementation of this function.
37 // I am scared that if we don't include the +2 here, the kernel
38 // will silently write 2 words farther than we specify
39 // and we'll get memory corruption.
40 var buf [CTL_MAXNAME + 2]_C_int
41 n := uintptr(CTL_MAXNAME) * siz
42
43 p := (*byte)(unsafe.Pointer(&buf[0]))
44 bytes, err := ByteSliceFromString(name)
45 if err != nil {
46 return nil, err
47 }
48
49 // Magic sysctl: "setting" 0.3 to a string name
50 // lets you read back the array of integers form.
51 if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil {
52 return nil, err
53 }
54 return buf[0 : n/siz], nil
55 }
56
57 // ParseDirent parses up to max directory entries in buf,
58 // appending the names to names. It returns the number
59 // bytes consumed from buf, the number of entries added
60 // to names, and the new names slice.
61 func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) {
62 origlen := len(buf)
63 for max != 0 && len(buf) > 0 {
64 dirent := (*Dirent)(unsafe.Pointer(&buf[0]))
65 if dirent.Reclen == 0 {
66 buf = nil
67 break
68 }
69 buf = buf[dirent.Reclen:]
70 if dirent.Fileno == 0 { // File absent in directory.
71 continue
72 }
73 bytes := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0]))
74 var name = string(bytes[0:dirent.Namlen])
75 if name == "." || name == ".." { // Useless names
76 continue
77 }
78 max--
79 count++
80 names = append(names, name)
81 }
82 return origlen - len(buf), count, names
83 }
84
85 //sysnb pipe() (r int, w int, err error)
86
87 func Pipe(p []int) (err error) {
88 if len(p) != 2 {
89 return EINVAL
90 }
91 p[0], p[1], err = pipe()
92 return
93 }
94
95 func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {
96 var value IPMreqn
97 vallen := _Socklen(SizeofIPMreqn)
98 errno := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
99 return &value, errno
100 }
101
102 func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) {
103 return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))
104 }
105
106 func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {
107 var rsa RawSockaddrAny
108 var len _Socklen = SizeofSockaddrAny
109 nfd, err = accept4(fd, &rsa, &len, flags)
110 if err != nil {
111 return
112 }
113 if len > SizeofSockaddrAny {
114 panic("RawSockaddrAny too small")
115 }
116 sa, err = anyToSockaddr(&rsa)
117 if err != nil {
118 Close(nfd)
119 nfd = 0
120 }
121 return
122 }
123
124 func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
125 var _p0 unsafe.Pointer
126 var bufsize uintptr
127 if len(buf) > 0 {
128 _p0 = unsafe.Pointer(&buf[0])
129 bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
130 }
131 r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags))
132 n = int(r0)
133 if e1 != 0 {
134 err = e1
135 }
136 return
137 }
138
139 // Derive extattr namespace and attribute name
140
141 func xattrnamespace(fullattr string) (ns int, attr string, err error) {
142 s := -1
143 for idx, val := range fullattr {
144 if val == '.' {
145 s = idx
146 break
147 }
148 }
149
150 if s == -1 {
151 return -1, "", ENOATTR
152 }
153
154 namespace := fullattr[0:s]
155 attr = fullattr[s+1:]
156
157 switch namespace {
158 case "user":
159 return EXTATTR_NAMESPACE_USER, attr, nil
160 case "system":
161 return EXTATTR_NAMESPACE_SYSTEM, attr, nil
162 default:
163 return -1, "", ENOATTR
164 }
165 }
166
167 func initxattrdest(dest []byte, idx int) (d unsafe.Pointer) {
168 if len(dest) > idx {
169 return unsafe.Pointer(&dest[idx])
170 } else {
171 return unsafe.Pointer(_zero)
172 }
173 }
174
175 // FreeBSD implements its own syscalls to handle extended attributes
176
177 func Getxattr(file string, attr string, dest []byte) (sz int, err error) {
178 d := initxattrdest(dest, 0)
179 destsize := len(dest)
180
181 nsid, a, err := xattrnamespace(attr)
182 if err != nil {
183 return -1, err
184 }
185
186 return ExtattrGetFile(file, nsid, a, uintptr(d), destsize)
187 }
188
189 func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
190 d := initxattrdest(dest, 0)
191 destsize := len(dest)
192
193 nsid, a, err := xattrnamespace(attr)
194 if err != nil {
195 return -1, err
196 }
197
198 return ExtattrGetFd(fd, nsid, a, uintptr(d), destsize)
199 }
200
201 func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {
202 d := initxattrdest(dest, 0)
203 destsize := len(dest)
204
205 nsid, a, err := xattrnamespace(attr)
206 if err != nil {
207 return -1, err
208 }
209
210 return ExtattrGetLink(link, nsid, a, uintptr(d), destsize)
211 }
212
213 // flags are unused on FreeBSD
214
215 func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) {
216 d := unsafe.Pointer(&data[0])
217 datasiz := len(data)
218
219 nsid, a, err := xattrnamespace(attr)
220 if err != nil {
221 return
222 }
223
224 _, err = ExtattrSetFd(fd, nsid, a, uintptr(d), datasiz)
225 return
226 }
227
228 func Setxattr(file string, attr string, data []byte, flags int) (err error) {
229 d := unsafe.Pointer(&data[0])
230 datasiz := len(data)
231
232 nsid, a, err := xattrnamespace(attr)
233 if err != nil {
234 return
235 }
236
237 _, err = ExtattrSetFile(file, nsid, a, uintptr(d), datasiz)
238 return
239 }
240
241 func Lsetxattr(link string, attr string, data []byte, flags int) (err error) {
242 d := unsafe.Pointer(&data[0])
243 datasiz := len(data)
244
245 nsid, a, err := xattrnamespace(attr)
246 if err != nil {
247 return
248 }
249
250 _, err = ExtattrSetLink(link, nsid, a, uintptr(d), datasiz)
251 return
252 }
253
254 func Removexattr(file string, attr string) (err error) {
255 nsid, a, err := xattrnamespace(attr)
256 if err != nil {
257 return
258 }
259
260 err = ExtattrDeleteFile(file, nsid, a)
261 return
262 }
263
264 func Fremovexattr(fd int, attr string) (err error) {
265 nsid, a, err := xattrnamespace(attr)
266 if err != nil {
267 return
268 }
269
270 err = ExtattrDeleteFd(fd, nsid, a)
271 return
272 }
273
274 func Lremovexattr(link string, attr string) (err error) {
275 nsid, a, err := xattrnamespace(attr)
276 if err != nil {
277 return
278 }
279
280 err = ExtattrDeleteLink(link, nsid, a)
281 return
282 }
283
284 func Listxattr(file string, dest []byte) (sz int, err error) {
285 d := initxattrdest(dest, 0)
286 destsiz := len(dest)
287
288 // FreeBSD won't allow you to list xattrs from multiple namespaces
289 s := 0
290 var e error
291 for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
292 stmp, e := ExtattrListFile(file, nsid, uintptr(d), destsiz)
293
294 /* Errors accessing system attrs are ignored so that
295 * we can implement the Linux-like behavior of omitting errors that
296 * we don't have read permissions on
297 *
298 * Linux will still error if we ask for user attributes on a file that
299 * we don't have read permissions on, so don't ignore those errors
300 */
301 if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
302 e = nil
303 continue
304 } else if e != nil {
305 return s, e
306 }
307
308 s += stmp
309 destsiz -= s
310 if destsiz < 0 {
311 destsiz = 0
312 }
313 d = initxattrdest(dest, s)
314 }
315
316 return s, e
317 }
318
319 func Flistxattr(fd int, dest []byte) (sz int, err error) {
320 d := initxattrdest(dest, 0)
321 destsiz := len(dest)
322
323 s := 0
324 var e error
325 for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
326 stmp, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz)
327 if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
328 e = nil
329 continue
330 } else if e != nil {
331 return s, e
332 }
333
334 s += stmp
335 destsiz -= s
336 if destsiz < 0 {
337 destsiz = 0
338 }
339 d = initxattrdest(dest, s)
340 }
341
342 return s, e
343 }
344
345 func Llistxattr(link string, dest []byte) (sz int, err error) {
346 d := initxattrdest(dest, 0)
347 destsiz := len(dest)
348
349 s := 0
350 var e error
351 for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
352 stmp, e := ExtattrListLink(link, nsid, uintptr(d), destsiz)
353 if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
354 e = nil
355 continue
356 } else if e != nil {
357 return s, e
358 }
359
360 s += stmp
361 destsiz -= s
362 if destsiz < 0 {
363 destsiz = 0
364 }
365 d = initxattrdest(dest, s)
366 }
367
368 return s, e
369 }
370
371 /*
372 * Exposed directly
373 */
374 //sys Access(path string, mode uint32) (err error)
375 //sys Adjtime(delta *Timeval, olddelta *Timeval) (err error)
376 //sys Chdir(path string) (err error)
377 //sys Chflags(path string, flags int) (err error)
378 //sys Chmod(path string, mode uint32) (err error)
379 //sys Chown(path string, uid int, gid int) (err error)
380 //sys Chroot(path string) (err error)
381 //sys Close(fd int) (err error)
382 //sys Dup(fd int) (nfd int, err error)
383 //sys Dup2(from int, to int) (err error)
384 //sys Exit(code int)
385 //sys ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
386 //sys ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
387 //sys ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error)
388 //sys ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
389 //sys ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
390 //sys ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
391 //sys ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error)
392 //sys ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
393 //sys ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
394 //sys ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
395 //sys ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error)
396 //sys ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
397 //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE
398 //sys Fchdir(fd int) (err error)
399 //sys Fchflags(fd int, flags int) (err error)
400 //sys Fchmod(fd int, mode uint32) (err error)
401 //sys Fchown(fd int, uid int, gid int) (err error)
402 //sys Flock(fd int, how int) (err error)
403 //sys Fpathconf(fd int, name int) (val int, err error)
404 //sys Fstat(fd int, stat *Stat_t) (err error)
405 //sys Fstatfs(fd int, stat *Statfs_t) (err error)
406 //sys Fsync(fd int) (err error)
407 //sys Ftruncate(fd int, length int64) (err error)
408 //sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error)
409 //sys Getdtablesize() (size int)
410 //sysnb Getegid() (egid int)
411 //sysnb Geteuid() (uid int)
412 //sysnb Getgid() (gid int)
413 //sysnb Getpgid(pid int) (pgid int, err error)
414 //sysnb Getpgrp() (pgrp int)
415 //sysnb Getpid() (pid int)
416 //sysnb Getppid() (ppid int)
417 //sys Getpriority(which int, who int) (prio int, err error)
418 //sysnb Getrlimit(which int, lim *Rlimit) (err error)
419 //sysnb Getrusage(who int, rusage *Rusage) (err error)
420 //sysnb Getsid(pid int) (sid int, err error)
421 //sysnb Gettimeofday(tv *Timeval) (err error)
422 //sysnb Getuid() (uid int)
423 //sys Issetugid() (tainted bool)
424 //sys Kill(pid int, signum syscall.Signal) (err error)
425 //sys Kqueue() (fd int, err error)
426 //sys Lchown(path string, uid int, gid int) (err error)
427 //sys Link(path string, link string) (err error)
428 //sys Listen(s int, backlog int) (err error)
429 //sys Lstat(path string, stat *Stat_t) (err error)
430 //sys Mkdir(path string, mode uint32) (err error)
431 //sys Mkfifo(path string, mode uint32) (err error)
432 //sys Mknod(path string, mode uint32, dev int) (err error)
433 //sys Mlock(b []byte) (err error)
434 //sys Mlockall(flags int) (err error)
435 //sys Mprotect(b []byte, prot int) (err error)
436 //sys Munlock(b []byte) (err error)
437 //sys Munlockall() (err error)
438 //sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
439 //sys Open(path string, mode int, perm uint32) (fd int, err error)
440 //sys Pathconf(path string, name int) (val int, err error)
441 //sys Pread(fd int, p []byte, offset int64) (n int, err error)
442 //sys Pwrite(fd int, p []byte, offset int64) (n int, err error)
443 //sys read(fd int, p []byte) (n int, err error)
444 //sys Readlink(path string, buf []byte) (n int, err error)
445 //sys Rename(from string, to string) (err error)
446 //sys Revoke(path string) (err error)
447 //sys Rmdir(path string) (err error)
448 //sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
449 //sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error)
450 //sysnb Setegid(egid int) (err error)
451 //sysnb Seteuid(euid int) (err error)
452 //sysnb Setgid(gid int) (err error)
453 //sys Setlogin(name string) (err error)
454 //sysnb Setpgid(pid int, pgid int) (err error)
455 //sys Setpriority(which int, who int, prio int) (err error)
456 //sysnb Setregid(rgid int, egid int) (err error)
457 //sysnb Setreuid(ruid int, euid int) (err error)
458 //sysnb Setresgid(rgid int, egid int, sgid int) (err error)
459 //sysnb Setresuid(ruid int, euid int, suid int) (err error)
460 //sysnb Setrlimit(which int, lim *Rlimit) (err error)
461 //sysnb Setsid() (pid int, err error)
462 //sysnb Settimeofday(tp *Timeval) (err error)
463 //sysnb Setuid(uid int) (err error)
464 //sys Stat(path string, stat *Stat_t) (err error)
465 //sys Statfs(path string, stat *Statfs_t) (err error)
466 //sys Symlink(path string, link string) (err error)
467 //sys Sync() (err error)
468 //sys Truncate(path string, length int64) (err error)
469 //sys Umask(newmask int) (oldmask int)
470 //sys Undelete(path string) (err error)
471 //sys Unlink(path string) (err error)
472 //sys Unmount(path string, flags int) (err error)
473 //sys write(fd int, p []byte) (n int, err error)
474 //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
475 //sys munmap(addr uintptr, length uintptr) (err error)
476 //sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ
477 //sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE
478 //sys accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error)
479
480 /*
481 * Unimplemented
482 */
483 // Profil
484 // Sigaction
485 // Sigprocmask
486 // Getlogin
487 // Sigpending
488 // Sigaltstack
489 // Ioctl
490 // Reboot
491 // Execve
492 // Vfork
493 // Sbrk
494 // Sstk
495 // Ovadvise
496 // Mincore
497 // Setitimer
498 // Swapon
499 // Select
500 // Sigsuspend
501 // Readv
502 // Writev
503 // Nfssvc
504 // Getfh
505 // Quotactl
506 // Mount
507 // Csops
508 // Waitid
509 // Add_profil
510 // Kdebug_trace
511 // Sigreturn
512 // Mmap
513 // Mlock
514 // Munlock
515 // Atsocket
516 // Kqueue_from_portset_np
517 // Kqueue_portset
518 // Getattrlist
519 // Setattrlist
520 // Getdirentriesattr
521 // Searchfs
522 // Delete
523 // Copyfile
524 // Poll
525 // Watchevent
526 // Waitevent
527 // Modwatch
528 // Getxattr
529 // Fgetxattr
530 // Setxattr
531 // Fsetxattr
532 // Removexattr
533 // Fremovexattr
534 // Listxattr
535 // Flistxattr
536 // Fsctl
537 // Initgroups
538 // Posix_spawn
539 // Nfsclnt
540 // Fhopen
541 // Minherit
542 // Semsys
543 // Msgsys
544 // Shmsys
545 // Semctl
546 // Semget
547 // Semop
548 // Msgctl
549 // Msgget
550 // Msgsnd
551 // Msgrcv
552 // Shmat
553 // Shmctl
554 // Shmdt
555 // Shmget
556 // Shm_open
557 // Shm_unlink
558 // Sem_open
559 // Sem_close
560 // Sem_unlink
561 // Sem_wait
562 // Sem_trywait
563 // Sem_post
564 // Sem_getvalue
565 // Sem_init
566 // Sem_destroy
567 // Open_extended
568 // Umask_extended
569 // Stat_extended
570 // Lstat_extended
571 // Fstat_extended
572 // Chmod_extended
573 // Fchmod_extended
574 // Access_extended
575 // Settid
576 // Gettid
577 // Setsgroups
578 // Getsgroups
579 // Setwgroups
580 // Getwgroups
581 // Mkfifo_extended
582 // Mkdir_extended
583 // Identitysvc
584 // Shared_region_check_np
585 // Shared_region_map_np
586 // __pthread_mutex_destroy
587 // __pthread_mutex_init
588 // __pthread_mutex_lock
589 // __pthread_mutex_trylock
590 // __pthread_mutex_unlock
591 // __pthread_cond_init
592 // __pthread_cond_destroy
593 // __pthread_cond_broadcast
594 // __pthread_cond_signal
595 // Setsid_with_pid
596 // __pthread_cond_timedwait
597 // Aio_fsync
598 // Aio_return
599 // Aio_suspend
600 // Aio_cancel
601 // Aio_error
602 // Aio_read
603 // Aio_write
604 // Lio_listio
605 // __pthread_cond_wait
606 // Iopolicysys
607 // Mlockall
608 // Munlockall
609 // __pthread_kill
610 // __pthread_sigmask
611 // __sigwait
612 // __disable_threadsignal
613 // __pthread_markcancel
614 // __pthread_canceled
615 // __semwait_signal
616 // Proc_info
617 // Stat64_extended
618 // Lstat64_extended
619 // Fstat64_extended
620 // __pthread_chdir
621 // __pthread_fchdir
622 // Audit
623 // Auditon
624 // Getauid
625 // Setauid
626 // Getaudit
627 // Setaudit
628 // Getaudit_addr
629 // Setaudit_addr
630 // Auditctl
631 // Bsdthread_create
632 // Bsdthread_terminate
633 // Stack_snapshot
634 // Bsdthread_register
635 // Workq_open
636 // Workq_ops
637 // __mac_execve
638 // __mac_syscall
639 // __mac_get_file
640 // __mac_set_file
641 // __mac_get_link
642 // __mac_set_link
643 // __mac_get_proc
644 // __mac_set_proc
645 // __mac_get_fd
646 // __mac_set_fd
647 // __mac_get_pid
648 // __mac_get_lcid
649 // __mac_get_lctx
650 // __mac_set_lctx
651 // Setlcid
652 // Read_nocancel
653 // Write_nocancel
654 // Open_nocancel
655 // Close_nocancel
656 // Wait4_nocancel
657 // Recvmsg_nocancel
658 // Sendmsg_nocancel
659 // Recvfrom_nocancel
660 // Accept_nocancel
661 // Msync_nocancel
662 // Fcntl_nocancel
663 // Select_nocancel
664 // Fsync_nocancel
665 // Connect_nocancel
666 // Sigsuspend_nocancel
667 // Readv_nocancel
668 // Writev_nocancel
669 // Sendto_nocancel
670 // Pread_nocancel
671 // Pwrite_nocancel
672 // Waitid_nocancel
673 // Poll_nocancel
674 // Msgsnd_nocancel
675 // Msgrcv_nocancel
676 // Sem_wait_nocancel
677 // Aio_suspend_nocancel
678 // __sigwait_nocancel
679 // __semwait_signal_nocancel
680 // __mac_mount
681 // __mac_get_mount
682 // __mac_getfsstat