]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blame - vendor/github.com/fsouza/go-dockerclient/external/golang.org/x/sys/unix/syscall_freebsd.go
provider: Ensured Go 1.11 in TravisCI and README
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / fsouza / go-dockerclient / external / golang.org / x / sys / unix / syscall_freebsd.go
CommitLineData
9b12e4fe
JC
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
13package unix
14
15import "unsafe"
16
17type 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}.
30func 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.
61func 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
87func 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
95func 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
102func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) {
103 return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))
104}
105
106func 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
124func 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
141func 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
167func 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
177func 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
189func 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
201func 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
215func 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
228func 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
241func 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
254func 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
264func 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
274func 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
284func 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
319func 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
345func 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