github.com/maenmax/kairep@v0.0.0-20210218001208-55bf3df36788/src/golang.org/x/sys/unix/syscall_netbsd.go (about) 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 // NetBSD 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 "syscall" 17 "unsafe" 18 ) 19 20 type SockaddrDatalink struct { 21 Len uint8 22 Family uint8 23 Index uint16 24 Type uint8 25 Nlen uint8 26 Alen uint8 27 Slen uint8 28 Data [12]int8 29 raw RawSockaddrDatalink 30 } 31 32 func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) 33 34 func sysctlNodes(mib []_C_int) (nodes []Sysctlnode, err error) { 35 var olen uintptr 36 37 // Get a list of all sysctl nodes below the given MIB by performing 38 // a sysctl for the given MIB with CTL_QUERY appended. 39 mib = append(mib, CTL_QUERY) 40 qnode := Sysctlnode{Flags: SYSCTL_VERS_1} 41 qp := (*byte)(unsafe.Pointer(&qnode)) 42 sz := unsafe.Sizeof(qnode) 43 if err = sysctl(mib, nil, &olen, qp, sz); err != nil { 44 return nil, err 45 } 46 47 // Now that we know the size, get the actual nodes. 48 nodes = make([]Sysctlnode, olen/sz) 49 np := (*byte)(unsafe.Pointer(&nodes[0])) 50 if err = sysctl(mib, np, &olen, qp, sz); err != nil { 51 return nil, err 52 } 53 54 return nodes, nil 55 } 56 57 func nametomib(name string) (mib []_C_int, err error) { 58 59 // Split name into components. 60 var parts []string 61 last := 0 62 for i := 0; i < len(name); i++ { 63 if name[i] == '.' { 64 parts = append(parts, name[last:i]) 65 last = i + 1 66 } 67 } 68 parts = append(parts, name[last:]) 69 70 // Discover the nodes and construct the MIB OID. 71 for partno, part := range parts { 72 nodes, err := sysctlNodes(mib) 73 if err != nil { 74 return nil, err 75 } 76 for _, node := range nodes { 77 n := make([]byte, 0) 78 for i := range node.Name { 79 if node.Name[i] != 0 { 80 n = append(n, byte(node.Name[i])) 81 } 82 } 83 if string(n) == part { 84 mib = append(mib, _C_int(node.Num)) 85 break 86 } 87 } 88 if len(mib) != partno+1 { 89 return nil, EINVAL 90 } 91 } 92 93 return mib, nil 94 } 95 96 // ParseDirent parses up to max directory entries in buf, 97 // appending the names to names. It returns the number 98 // bytes consumed from buf, the number of entries added 99 // to names, and the new names slice. 100 func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) { 101 origlen := len(buf) 102 for max != 0 && len(buf) > 0 { 103 dirent := (*Dirent)(unsafe.Pointer(&buf[0])) 104 if dirent.Reclen == 0 { 105 buf = nil 106 break 107 } 108 buf = buf[dirent.Reclen:] 109 if dirent.Fileno == 0 { // File absent in directory. 110 continue 111 } 112 bytes := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0])) 113 var name = string(bytes[0:dirent.Namlen]) 114 if name == "." || name == ".." { // Useless names 115 continue 116 } 117 max-- 118 count++ 119 names = append(names, name) 120 } 121 return origlen - len(buf), count, names 122 } 123 124 //sysnb pipe() (fd1 int, fd2 int, err error) 125 func Pipe(p []int) (err error) { 126 if len(p) != 2 { 127 return EINVAL 128 } 129 p[0], p[1], err = pipe() 130 return 131 } 132 133 //sys getdents(fd int, buf []byte) (n int, err error) 134 func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { 135 return getdents(fd, buf) 136 } 137 138 // TODO 139 func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { 140 return -1, ENOSYS 141 } 142 143 /* 144 * Exposed directly 145 */ 146 //sys Access(path string, mode uint32) (err error) 147 //sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) 148 //sys Chdir(path string) (err error) 149 //sys Chflags(path string, flags int) (err error) 150 //sys Chmod(path string, mode uint32) (err error) 151 //sys Chown(path string, uid int, gid int) (err error) 152 //sys Chroot(path string) (err error) 153 //sys Close(fd int) (err error) 154 //sys Dup(fd int) (nfd int, err error) 155 //sys Dup2(from int, to int) (err error) 156 //sys Exit(code int) 157 //sys Fchdir(fd int) (err error) 158 //sys Fchflags(fd int, flags int) (err error) 159 //sys Fchmod(fd int, mode uint32) (err error) 160 //sys Fchown(fd int, uid int, gid int) (err error) 161 //sys Flock(fd int, how int) (err error) 162 //sys Fpathconf(fd int, name int) (val int, err error) 163 //sys Fstat(fd int, stat *Stat_t) (err error) 164 //sys Fsync(fd int) (err error) 165 //sys Ftruncate(fd int, length int64) (err error) 166 //sysnb Getegid() (egid int) 167 //sysnb Geteuid() (uid int) 168 //sysnb Getgid() (gid int) 169 //sysnb Getpgid(pid int) (pgid int, err error) 170 //sysnb Getpgrp() (pgrp int) 171 //sysnb Getpid() (pid int) 172 //sysnb Getppid() (ppid int) 173 //sys Getpriority(which int, who int) (prio int, err error) 174 //sysnb Getrlimit(which int, lim *Rlimit) (err error) 175 //sysnb Getrusage(who int, rusage *Rusage) (err error) 176 //sysnb Getsid(pid int) (sid int, err error) 177 //sysnb Gettimeofday(tv *Timeval) (err error) 178 //sysnb Getuid() (uid int) 179 //sys Issetugid() (tainted bool) 180 //sys Kill(pid int, signum syscall.Signal) (err error) 181 //sys Kqueue() (fd int, err error) 182 //sys Lchown(path string, uid int, gid int) (err error) 183 //sys Link(path string, link string) (err error) 184 //sys Listen(s int, backlog int) (err error) 185 //sys Lstat(path string, stat *Stat_t) (err error) 186 //sys Mkdir(path string, mode uint32) (err error) 187 //sys Mkfifo(path string, mode uint32) (err error) 188 //sys Mknod(path string, mode uint32, dev int) (err error) 189 //sys Mlock(b []byte) (err error) 190 //sys Mlockall(flags int) (err error) 191 //sys Mprotect(b []byte, prot int) (err error) 192 //sys Munlock(b []byte) (err error) 193 //sys Munlockall() (err error) 194 //sys Nanosleep(time *Timespec, leftover *Timespec) (err error) 195 //sys Open(path string, mode int, perm uint32) (fd int, err error) 196 //sys Pathconf(path string, name int) (val int, err error) 197 //sys Pread(fd int, p []byte, offset int64) (n int, err error) 198 //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) 199 //sys read(fd int, p []byte) (n int, err error) 200 //sys Readlink(path string, buf []byte) (n int, err error) 201 //sys Rename(from string, to string) (err error) 202 //sys Revoke(path string) (err error) 203 //sys Rmdir(path string) (err error) 204 //sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK 205 //sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) 206 //sysnb Setegid(egid int) (err error) 207 //sysnb Seteuid(euid int) (err error) 208 //sysnb Setgid(gid int) (err error) 209 //sysnb Setpgid(pid int, pgid int) (err error) 210 //sys Setpriority(which int, who int, prio int) (err error) 211 //sysnb Setregid(rgid int, egid int) (err error) 212 //sysnb Setreuid(ruid int, euid int) (err error) 213 //sysnb Setrlimit(which int, lim *Rlimit) (err error) 214 //sysnb Setsid() (pid int, err error) 215 //sysnb Settimeofday(tp *Timeval) (err error) 216 //sysnb Setuid(uid int) (err error) 217 //sys Stat(path string, stat *Stat_t) (err error) 218 //sys Symlink(path string, link string) (err error) 219 //sys Sync() (err error) 220 //sys Truncate(path string, length int64) (err error) 221 //sys Umask(newmask int) (oldmask int) 222 //sys Unlink(path string) (err error) 223 //sys Unmount(path string, flags int) (err error) 224 //sys write(fd int, p []byte) (n int, err error) 225 //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) 226 //sys munmap(addr uintptr, length uintptr) (err error) 227 //sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ 228 //sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE 229 230 /* 231 * Unimplemented 232 */ 233 // ____semctl13 234 // __clone 235 // __fhopen40 236 // __fhstat40 237 // __fhstatvfs140 238 // __fstat30 239 // __getcwd 240 // __getfh30 241 // __getlogin 242 // __lstat30 243 // __mount50 244 // __msgctl13 245 // __msync13 246 // __ntp_gettime30 247 // __posix_chown 248 // __posix_fadvise50 249 // __posix_fchown 250 // __posix_lchown 251 // __posix_rename 252 // __setlogin 253 // __shmctl13 254 // __sigaction_sigtramp 255 // __sigaltstack14 256 // __sigpending14 257 // __sigprocmask14 258 // __sigsuspend14 259 // __sigtimedwait 260 // __stat30 261 // __syscall 262 // __vfork14 263 // _ksem_close 264 // _ksem_destroy 265 // _ksem_getvalue 266 // _ksem_init 267 // _ksem_open 268 // _ksem_post 269 // _ksem_trywait 270 // _ksem_unlink 271 // _ksem_wait 272 // _lwp_continue 273 // _lwp_create 274 // _lwp_ctl 275 // _lwp_detach 276 // _lwp_exit 277 // _lwp_getname 278 // _lwp_getprivate 279 // _lwp_kill 280 // _lwp_park 281 // _lwp_self 282 // _lwp_setname 283 // _lwp_setprivate 284 // _lwp_suspend 285 // _lwp_unpark 286 // _lwp_unpark_all 287 // _lwp_wait 288 // _lwp_wakeup 289 // _pset_bind 290 // _sched_getaffinity 291 // _sched_getparam 292 // _sched_setaffinity 293 // _sched_setparam 294 // acct 295 // aio_cancel 296 // aio_error 297 // aio_fsync 298 // aio_read 299 // aio_return 300 // aio_suspend 301 // aio_write 302 // break 303 // clock_getres 304 // clock_gettime 305 // clock_settime 306 // compat_09_ogetdomainname 307 // compat_09_osetdomainname 308 // compat_09_ouname 309 // compat_10_omsgsys 310 // compat_10_osemsys 311 // compat_10_oshmsys 312 // compat_12_fstat12 313 // compat_12_getdirentries 314 // compat_12_lstat12 315 // compat_12_msync 316 // compat_12_oreboot 317 // compat_12_oswapon 318 // compat_12_stat12 319 // compat_13_sigaction13 320 // compat_13_sigaltstack13 321 // compat_13_sigpending13 322 // compat_13_sigprocmask13 323 // compat_13_sigreturn13 324 // compat_13_sigsuspend13 325 // compat_14___semctl 326 // compat_14_msgctl 327 // compat_14_shmctl 328 // compat_16___sigaction14 329 // compat_16___sigreturn14 330 // compat_20_fhstatfs 331 // compat_20_fstatfs 332 // compat_20_getfsstat 333 // compat_20_statfs 334 // compat_30___fhstat30 335 // compat_30___fstat13 336 // compat_30___lstat13 337 // compat_30___stat13 338 // compat_30_fhopen 339 // compat_30_fhstat 340 // compat_30_fhstatvfs1 341 // compat_30_getdents 342 // compat_30_getfh 343 // compat_30_ntp_gettime 344 // compat_30_socket 345 // compat_40_mount 346 // compat_43_fstat43 347 // compat_43_lstat43 348 // compat_43_oaccept 349 // compat_43_ocreat 350 // compat_43_oftruncate 351 // compat_43_ogetdirentries 352 // compat_43_ogetdtablesize 353 // compat_43_ogethostid 354 // compat_43_ogethostname 355 // compat_43_ogetkerninfo 356 // compat_43_ogetpagesize 357 // compat_43_ogetpeername 358 // compat_43_ogetrlimit 359 // compat_43_ogetsockname 360 // compat_43_okillpg 361 // compat_43_olseek 362 // compat_43_ommap 363 // compat_43_oquota 364 // compat_43_orecv 365 // compat_43_orecvfrom 366 // compat_43_orecvmsg 367 // compat_43_osend 368 // compat_43_osendmsg 369 // compat_43_osethostid 370 // compat_43_osethostname 371 // compat_43_osetrlimit 372 // compat_43_osigblock 373 // compat_43_osigsetmask 374 // compat_43_osigstack 375 // compat_43_osigvec 376 // compat_43_otruncate 377 // compat_43_owait 378 // compat_43_stat43 379 // execve 380 // extattr_delete_fd 381 // extattr_delete_file 382 // extattr_delete_link 383 // extattr_get_fd 384 // extattr_get_file 385 // extattr_get_link 386 // extattr_list_fd 387 // extattr_list_file 388 // extattr_list_link 389 // extattr_set_fd 390 // extattr_set_file 391 // extattr_set_link 392 // extattrctl 393 // fchroot 394 // fdatasync 395 // fgetxattr 396 // fktrace 397 // flistxattr 398 // fork 399 // fremovexattr 400 // fsetxattr 401 // fstatvfs1 402 // fsync_range 403 // getcontext 404 // getitimer 405 // getvfsstat 406 // getxattr 407 // ioctl 408 // ktrace 409 // lchflags 410 // lchmod 411 // lfs_bmapv 412 // lfs_markv 413 // lfs_segclean 414 // lfs_segwait 415 // lgetxattr 416 // lio_listio 417 // listxattr 418 // llistxattr 419 // lremovexattr 420 // lseek 421 // lsetxattr 422 // lutimes 423 // madvise 424 // mincore 425 // minherit 426 // modctl 427 // mq_close 428 // mq_getattr 429 // mq_notify 430 // mq_open 431 // mq_receive 432 // mq_send 433 // mq_setattr 434 // mq_timedreceive 435 // mq_timedsend 436 // mq_unlink 437 // mremap 438 // msgget 439 // msgrcv 440 // msgsnd 441 // nfssvc 442 // ntp_adjtime 443 // pmc_control 444 // pmc_get_info 445 // poll 446 // pollts 447 // preadv 448 // profil 449 // pselect 450 // pset_assign 451 // pset_create 452 // pset_destroy 453 // ptrace 454 // pwritev 455 // quotactl 456 // rasctl 457 // readv 458 // reboot 459 // removexattr 460 // sa_enable 461 // sa_preempt 462 // sa_register 463 // sa_setconcurrency 464 // sa_stacks 465 // sa_yield 466 // sbrk 467 // sched_yield 468 // semconfig 469 // semget 470 // semop 471 // setcontext 472 // setitimer 473 // setxattr 474 // shmat 475 // shmdt 476 // shmget 477 // sstk 478 // statvfs1 479 // swapctl 480 // sysarch 481 // syscall 482 // timer_create 483 // timer_delete 484 // timer_getoverrun 485 // timer_gettime 486 // timer_settime 487 // undelete 488 // utrace 489 // uuidgen 490 // vadvise 491 // vfork 492 // writev