Code refactoring for bpa operator
[icn.git] / cmd / bpa-operator / vendor / golang.org / x / sys / unix / syscall_openbsd.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 // OpenBSD 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 (
16         "sort"
17         "syscall"
18         "unsafe"
19 )
20
21 // SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
22 type SockaddrDatalink struct {
23         Len    uint8
24         Family uint8
25         Index  uint16
26         Type   uint8
27         Nlen   uint8
28         Alen   uint8
29         Slen   uint8
30         Data   [24]int8
31         raw    RawSockaddrDatalink
32 }
33
34 func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
35
36 func nametomib(name string) (mib []_C_int, err error) {
37         i := sort.Search(len(sysctlMib), func(i int) bool {
38                 return sysctlMib[i].ctlname >= name
39         })
40         if i < len(sysctlMib) && sysctlMib[i].ctlname == name {
41                 return sysctlMib[i].ctloid, nil
42         }
43         return nil, EINVAL
44 }
45
46 func SysctlClockinfo(name string) (*Clockinfo, error) {
47         mib, err := sysctlmib(name)
48         if err != nil {
49                 return nil, err
50         }
51
52         n := uintptr(SizeofClockinfo)
53         var ci Clockinfo
54         if err := sysctl(mib, (*byte)(unsafe.Pointer(&ci)), &n, nil, 0); err != nil {
55                 return nil, err
56         }
57         if n != SizeofClockinfo {
58                 return nil, EIO
59         }
60         return &ci, nil
61 }
62
63 func SysctlUvmexp(name string) (*Uvmexp, error) {
64         mib, err := sysctlmib(name)
65         if err != nil {
66                 return nil, err
67         }
68
69         n := uintptr(SizeofUvmexp)
70         var u Uvmexp
71         if err := sysctl(mib, (*byte)(unsafe.Pointer(&u)), &n, nil, 0); err != nil {
72                 return nil, err
73         }
74         if n != SizeofUvmexp {
75                 return nil, EIO
76         }
77         return &u, nil
78 }
79
80 //sysnb pipe(p *[2]_C_int) (err error)
81 func Pipe(p []int) (err error) {
82         if len(p) != 2 {
83                 return EINVAL
84         }
85         var pp [2]_C_int
86         err = pipe(&pp)
87         p[0] = int(pp[0])
88         p[1] = int(pp[1])
89         return
90 }
91
92 //sys getdents(fd int, buf []byte) (n int, err error)
93 func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
94         return getdents(fd, buf)
95 }
96
97 const ImplementsGetwd = true
98
99 //sys   Getcwd(buf []byte) (n int, err error) = SYS___GETCWD
100
101 func Getwd() (string, error) {
102         var buf [PathMax]byte
103         _, err := Getcwd(buf[0:])
104         if err != nil {
105                 return "", err
106         }
107         n := clen(buf[:])
108         if n < 1 {
109                 return "", EINVAL
110         }
111         return string(buf[:n]), nil
112 }
113
114 func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
115         if raceenabled {
116                 raceReleaseMerge(unsafe.Pointer(&ioSync))
117         }
118         return sendfile(outfd, infd, offset, count)
119 }
120
121 // TODO
122 func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
123         return -1, ENOSYS
124 }
125
126 func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
127         var _p0 unsafe.Pointer
128         var bufsize uintptr
129         if len(buf) > 0 {
130                 _p0 = unsafe.Pointer(&buf[0])
131                 bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
132         }
133         r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags))
134         n = int(r0)
135         if e1 != 0 {
136                 err = e1
137         }
138         return
139 }
140
141 func setattrlistTimes(path string, times []Timespec, flags int) error {
142         // used on Darwin for UtimesNano
143         return ENOSYS
144 }
145
146 //sys   ioctl(fd int, req uint, arg uintptr) (err error)
147
148 // ioctl itself should not be exposed directly, but additional get/set
149 // functions for specific types are permissible.
150
151 // IoctlSetInt performs an ioctl operation which sets an integer value
152 // on fd, using the specified request number.
153 func IoctlSetInt(fd int, req uint, value int) error {
154         return ioctl(fd, req, uintptr(value))
155 }
156
157 func ioctlSetWinsize(fd int, req uint, value *Winsize) error {
158         return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
159 }
160
161 func ioctlSetTermios(fd int, req uint, value *Termios) error {
162         return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
163 }
164
165 // IoctlGetInt performs an ioctl operation which gets an integer value
166 // from fd, using the specified request number.
167 func IoctlGetInt(fd int, req uint) (int, error) {
168         var value int
169         err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
170         return value, err
171 }
172
173 func IoctlGetWinsize(fd int, req uint) (*Winsize, error) {
174         var value Winsize
175         err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
176         return &value, err
177 }
178
179 func IoctlGetTermios(fd int, req uint) (*Termios, error) {
180         var value Termios
181         err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
182         return &value, err
183 }
184
185 //sys   ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error)
186
187 func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
188         if len(fds) == 0 {
189                 return ppoll(nil, 0, timeout, sigmask)
190         }
191         return ppoll(&fds[0], len(fds), timeout, sigmask)
192 }
193
194 func Uname(uname *Utsname) error {
195         mib := []_C_int{CTL_KERN, KERN_OSTYPE}
196         n := unsafe.Sizeof(uname.Sysname)
197         if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {
198                 return err
199         }
200
201         mib = []_C_int{CTL_KERN, KERN_HOSTNAME}
202         n = unsafe.Sizeof(uname.Nodename)
203         if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil {
204                 return err
205         }
206
207         mib = []_C_int{CTL_KERN, KERN_OSRELEASE}
208         n = unsafe.Sizeof(uname.Release)
209         if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil {
210                 return err
211         }
212
213         mib = []_C_int{CTL_KERN, KERN_VERSION}
214         n = unsafe.Sizeof(uname.Version)
215         if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil {
216                 return err
217         }
218
219         // The version might have newlines or tabs in it, convert them to
220         // spaces.
221         for i, b := range uname.Version {
222                 if b == '\n' || b == '\t' {
223                         if i == len(uname.Version)-1 {
224                                 uname.Version[i] = 0
225                         } else {
226                                 uname.Version[i] = ' '
227                         }
228                 }
229         }
230
231         mib = []_C_int{CTL_HW, HW_MACHINE}
232         n = unsafe.Sizeof(uname.Machine)
233         if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {
234                 return err
235         }
236
237         return nil
238 }
239
240 /*
241  * Exposed directly
242  */
243 //sys   Access(path string, mode uint32) (err error)
244 //sys   Adjtime(delta *Timeval, olddelta *Timeval) (err error)
245 //sys   Chdir(path string) (err error)
246 //sys   Chflags(path string, flags int) (err error)
247 //sys   Chmod(path string, mode uint32) (err error)
248 //sys   Chown(path string, uid int, gid int) (err error)
249 //sys   Chroot(path string) (err error)
250 //sys   Close(fd int) (err error)
251 //sys   Dup(fd int) (nfd int, err error)
252 //sys   Dup2(from int, to int) (err error)
253 //sys   Exit(code int)
254 //sys   Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
255 //sys   Fchdir(fd int) (err error)
256 //sys   Fchflags(fd int, flags int) (err error)
257 //sys   Fchmod(fd int, mode uint32) (err error)
258 //sys   Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
259 //sys   Fchown(fd int, uid int, gid int) (err error)
260 //sys   Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
261 //sys   Flock(fd int, how int) (err error)
262 //sys   Fpathconf(fd int, name int) (val int, err error)
263 //sys   Fstat(fd int, stat *Stat_t) (err error)
264 //sys   Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
265 //sys   Fstatfs(fd int, stat *Statfs_t) (err error)
266 //sys   Fsync(fd int) (err error)
267 //sys   Ftruncate(fd int, length int64) (err error)
268 //sysnb Getegid() (egid int)
269 //sysnb Geteuid() (uid int)
270 //sysnb Getgid() (gid int)
271 //sysnb Getpgid(pid int) (pgid int, err error)
272 //sysnb Getpgrp() (pgrp int)
273 //sysnb Getpid() (pid int)
274 //sysnb Getppid() (ppid int)
275 //sys   Getpriority(which int, who int) (prio int, err error)
276 //sysnb Getrlimit(which int, lim *Rlimit) (err error)
277 //sysnb Getrtable() (rtable int, err error)
278 //sysnb Getrusage(who int, rusage *Rusage) (err error)
279 //sysnb Getsid(pid int) (sid int, err error)
280 //sysnb Gettimeofday(tv *Timeval) (err error)
281 //sysnb Getuid() (uid int)
282 //sys   Issetugid() (tainted bool)
283 //sys   Kill(pid int, signum syscall.Signal) (err error)
284 //sys   Kqueue() (fd int, err error)
285 //sys   Lchown(path string, uid int, gid int) (err error)
286 //sys   Link(path string, link string) (err error)
287 //sys   Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
288 //sys   Listen(s int, backlog int) (err error)
289 //sys   Lstat(path string, stat *Stat_t) (err error)
290 //sys   Mkdir(path string, mode uint32) (err error)
291 //sys   Mkdirat(dirfd int, path string, mode uint32) (err error)
292 //sys   Mkfifo(path string, mode uint32) (err error)
293 //sys   Mkfifoat(dirfd int, path string, mode uint32) (err error)
294 //sys   Mknod(path string, mode uint32, dev int) (err error)
295 //sys   Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
296 //sys   Nanosleep(time *Timespec, leftover *Timespec) (err error)
297 //sys   Open(path string, mode int, perm uint32) (fd int, err error)
298 //sys   Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
299 //sys   Pathconf(path string, name int) (val int, err error)
300 //sys   Pread(fd int, p []byte, offset int64) (n int, err error)
301 //sys   Pwrite(fd int, p []byte, offset int64) (n int, err error)
302 //sys   read(fd int, p []byte) (n int, err error)
303 //sys   Readlink(path string, buf []byte) (n int, err error)
304 //sys   Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
305 //sys   Rename(from string, to string) (err error)
306 //sys   Renameat(fromfd int, from string, tofd int, to string) (err error)
307 //sys   Revoke(path string) (err error)
308 //sys   Rmdir(path string) (err error)
309 //sys   Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
310 //sys   Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error)
311 //sysnb Setegid(egid int) (err error)
312 //sysnb Seteuid(euid int) (err error)
313 //sysnb Setgid(gid int) (err error)
314 //sys   Setlogin(name string) (err error)
315 //sysnb Setpgid(pid int, pgid int) (err error)
316 //sys   Setpriority(which int, who int, prio int) (err error)
317 //sysnb Setregid(rgid int, egid int) (err error)
318 //sysnb Setreuid(ruid int, euid int) (err error)
319 //sysnb Setresgid(rgid int, egid int, sgid int) (err error)
320 //sysnb Setresuid(ruid int, euid int, suid int) (err error)
321 //sysnb Setrlimit(which int, lim *Rlimit) (err error)
322 //sysnb Setrtable(rtable int) (err error)
323 //sysnb Setsid() (pid int, err error)
324 //sysnb Settimeofday(tp *Timeval) (err error)
325 //sysnb Setuid(uid int) (err error)
326 //sys   Stat(path string, stat *Stat_t) (err error)
327 //sys   Statfs(path string, stat *Statfs_t) (err error)
328 //sys   Symlink(path string, link string) (err error)
329 //sys   Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
330 //sys   Sync() (err error)
331 //sys   Truncate(path string, length int64) (err error)
332 //sys   Umask(newmask int) (oldmask int)
333 //sys   Unlink(path string) (err error)
334 //sys   Unlinkat(dirfd int, path string, flags int) (err error)
335 //sys   Unmount(path string, flags int) (err error)
336 //sys   write(fd int, p []byte) (n int, err error)
337 //sys   mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
338 //sys   munmap(addr uintptr, length uintptr) (err error)
339 //sys   readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ
340 //sys   writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE
341 //sys   utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)
342
343 /*
344  * Unimplemented
345  */
346 // __getcwd
347 // __semctl
348 // __syscall
349 // __sysctl
350 // adjfreq
351 // break
352 // clock_getres
353 // clock_gettime
354 // clock_settime
355 // closefrom
356 // execve
357 // fcntl
358 // fhopen
359 // fhstat
360 // fhstatfs
361 // fork
362 // futimens
363 // getfh
364 // getgid
365 // getitimer
366 // getlogin
367 // getresgid
368 // getresuid
369 // getthrid
370 // ktrace
371 // lfs_bmapv
372 // lfs_markv
373 // lfs_segclean
374 // lfs_segwait
375 // mincore
376 // minherit
377 // mount
378 // mquery
379 // msgctl
380 // msgget
381 // msgrcv
382 // msgsnd
383 // nfssvc
384 // nnpfspioctl
385 // preadv
386 // profil
387 // pwritev
388 // quotactl
389 // readv
390 // reboot
391 // renameat
392 // rfork
393 // sched_yield
394 // semget
395 // semop
396 // setgroups
397 // setitimer
398 // setsockopt
399 // shmat
400 // shmctl
401 // shmdt
402 // shmget
403 // sigaction
404 // sigaltstack
405 // sigpending
406 // sigprocmask
407 // sigreturn
408 // sigsuspend
409 // sysarch
410 // syscall
411 // threxit
412 // thrsigdivert
413 // thrsleep
414 // thrwakeup
415 // vfork
416 // writev