...

Source file src/pkg/cmd/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
   417	

View as plain text