vendor/golang.org/x/sys/unix/syscall_netbsd.go
changeset 251 1c52a0eeb952
parent 242 2a9ec03fe5a1
child 256 6d9efbef00a9
equal deleted inserted replaced
250:c040f992052f 251:1c52a0eeb952
    11 // syscall_bsd.go or syscall_unix.go.
    11 // syscall_bsd.go or syscall_unix.go.
    12 
    12 
    13 package unix
    13 package unix
    14 
    14 
    15 import (
    15 import (
       
    16 	"runtime"
    16 	"syscall"
    17 	"syscall"
    17 	"unsafe"
    18 	"unsafe"
    18 )
    19 )
    19 
    20 
    20 // SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
    21 // SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
    91 	}
    92 	}
    92 
    93 
    93 	return mib, nil
    94 	return mib, nil
    94 }
    95 }
    95 
    96 
    96 func SysctlClockinfo(name string) (*Clockinfo, error) {
    97 func direntIno(buf []byte) (uint64, bool) {
    97 	mib, err := sysctlmib(name)
    98 	return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))
    98 	if err != nil {
    99 }
    99 		return nil, err
   100 
   100 	}
   101 func direntReclen(buf []byte) (uint64, bool) {
   101 
   102 	return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
   102 	n := uintptr(SizeofClockinfo)
   103 }
   103 	buf := make([]byte, SizeofClockinfo)
   104 
   104 	if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {
   105 func direntNamlen(buf []byte) (uint64, bool) {
   105 		return nil, err
   106 	return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
   106 	}
       
   107 	if n != SizeofClockinfo {
       
   108 		return nil, EIO
       
   109 	}
       
   110 	return (*Clockinfo)(unsafe.Pointer(&buf[0])), nil
       
   111 }
   107 }
   112 
   108 
   113 //sysnb pipe() (fd1 int, fd2 int, err error)
   109 //sysnb pipe() (fd1 int, fd2 int, err error)
   114 func Pipe(p []int) (err error) {
   110 func Pipe(p []int) (err error) {
   115 	if len(p) != 2 {
   111 	if len(p) != 2 {
   117 	}
   113 	}
   118 	p[0], p[1], err = pipe()
   114 	p[0], p[1], err = pipe()
   119 	return
   115 	return
   120 }
   116 }
   121 
   117 
   122 //sys getdents(fd int, buf []byte) (n int, err error)
   118 //sys Getdents(fd int, buf []byte) (n int, err error)
   123 func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
   119 func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
   124 	return getdents(fd, buf)
   120 	n, err = Getdents(fd, buf)
       
   121 	if err != nil || basep == nil {
       
   122 		return
       
   123 	}
       
   124 
       
   125 	var off int64
       
   126 	off, err = Seek(fd, 0, 1 /* SEEK_CUR */)
       
   127 	if err != nil {
       
   128 		*basep = ^uintptr(0)
       
   129 		return
       
   130 	}
       
   131 	*basep = uintptr(off)
       
   132 	if unsafe.Sizeof(*basep) == 8 {
       
   133 		return
       
   134 	}
       
   135 	if off>>32 != 0 {
       
   136 		// We can't stuff the offset back into a uintptr, so any
       
   137 		// future calls would be suspect. Generate an error.
       
   138 		// EIO is allowed by getdirentries.
       
   139 		err = EIO
       
   140 	}
       
   141 	return
   125 }
   142 }
   126 
   143 
   127 const ImplementsGetwd = true
   144 const ImplementsGetwd = true
   128 
   145 
   129 //sys	Getcwd(buf []byte) (n int, err error) = SYS___GETCWD
   146 //sys	Getcwd(buf []byte) (n int, err error) = SYS___GETCWD
   151 	return ENOSYS
   168 	return ENOSYS
   152 }
   169 }
   153 
   170 
   154 //sys	ioctl(fd int, req uint, arg uintptr) (err error)
   171 //sys	ioctl(fd int, req uint, arg uintptr) (err error)
   155 
   172 
   156 // ioctl itself should not be exposed directly, but additional get/set
   173 //sys   sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
   157 // functions for specific types are permissible.
   174 
   158 
   175 func IoctlGetPtmget(fd int, req uint) (*Ptmget, error) {
   159 // IoctlSetInt performs an ioctl operation which sets an integer value
   176 	var value Ptmget
   160 // on fd, using the specified request number.
       
   161 func IoctlSetInt(fd int, req uint, value int) error {
       
   162 	return ioctl(fd, req, uintptr(value))
       
   163 }
       
   164 
       
   165 func ioctlSetWinsize(fd int, req uint, value *Winsize) error {
       
   166 	return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
       
   167 }
       
   168 
       
   169 func ioctlSetTermios(fd int, req uint, value *Termios) error {
       
   170 	return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
       
   171 }
       
   172 
       
   173 // IoctlGetInt performs an ioctl operation which gets an integer value
       
   174 // from fd, using the specified request number.
       
   175 func IoctlGetInt(fd int, req uint) (int, error) {
       
   176 	var value int
       
   177 	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
   177 	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
   178 	return value, err
   178 	runtime.KeepAlive(value)
   179 }
       
   180 
       
   181 func IoctlGetWinsize(fd int, req uint) (*Winsize, error) {
       
   182 	var value Winsize
       
   183 	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
       
   184 	return &value, err
       
   185 }
       
   186 
       
   187 func IoctlGetTermios(fd int, req uint) (*Termios, error) {
       
   188 	var value Termios
       
   189 	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
       
   190 	return &value, err
   179 	return &value, err
   191 }
   180 }
   192 
   181 
   193 func Uname(uname *Utsname) error {
   182 func Uname(uname *Utsname) error {
   194 	mib := []_C_int{CTL_KERN, KERN_OSTYPE}
   183 	mib := []_C_int{CTL_KERN, KERN_OSTYPE}
   232 	if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {
   221 	if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {
   233 		return err
   222 		return err
   234 	}
   223 	}
   235 
   224 
   236 	return nil
   225 	return nil
       
   226 }
       
   227 
       
   228 func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
       
   229 	if raceenabled {
       
   230 		raceReleaseMerge(unsafe.Pointer(&ioSync))
       
   231 	}
       
   232 	return sendfile(outfd, infd, offset, count)
       
   233 }
       
   234 
       
   235 func Fstatvfs(fd int, buf *Statvfs_t) (err error) {
       
   236 	return Fstatvfs1(fd, buf, ST_WAIT)
       
   237 }
       
   238 
       
   239 func Statvfs(path string, buf *Statvfs_t) (err error) {
       
   240 	return Statvfs1(path, buf, ST_WAIT)
   237 }
   241 }
   238 
   242 
   239 /*
   243 /*
   240  * Exposed directly
   244  * Exposed directly
   241  */
   245  */
   247 //sys	Chown(path string, uid int, gid int) (err error)
   251 //sys	Chown(path string, uid int, gid int) (err error)
   248 //sys	Chroot(path string) (err error)
   252 //sys	Chroot(path string) (err error)
   249 //sys	Close(fd int) (err error)
   253 //sys	Close(fd int) (err error)
   250 //sys	Dup(fd int) (nfd int, err error)
   254 //sys	Dup(fd int) (nfd int, err error)
   251 //sys	Dup2(from int, to int) (err error)
   255 //sys	Dup2(from int, to int) (err error)
       
   256 //sys	Dup3(from int, to int, flags int) (err error)
   252 //sys	Exit(code int)
   257 //sys	Exit(code int)
   253 //sys	ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
   258 //sys	ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
   254 //sys	ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
   259 //sys	ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
   255 //sys	ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error)
   260 //sys	ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error)
   256 //sys	ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
   261 //sys	ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
   267 //sys	Fchdir(fd int) (err error)
   272 //sys	Fchdir(fd int) (err error)
   268 //sys	Fchflags(fd int, flags int) (err error)
   273 //sys	Fchflags(fd int, flags int) (err error)
   269 //sys	Fchmod(fd int, mode uint32) (err error)
   274 //sys	Fchmod(fd int, mode uint32) (err error)
   270 //sys	Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
   275 //sys	Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
   271 //sys	Fchown(fd int, uid int, gid int) (err error)
   276 //sys	Fchown(fd int, uid int, gid int) (err error)
       
   277 //sys	Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
   272 //sys	Flock(fd int, how int) (err error)
   278 //sys	Flock(fd int, how int) (err error)
   273 //sys	Fpathconf(fd int, name int) (val int, err error)
   279 //sys	Fpathconf(fd int, name int) (val int, err error)
   274 //sys	Fstat(fd int, stat *Stat_t) (err error)
   280 //sys	Fstat(fd int, stat *Stat_t) (err error)
   275 //sys	Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
   281 //sys	Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
       
   282 //sys	Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) = SYS_FSTATVFS1
   276 //sys	Fsync(fd int) (err error)
   283 //sys	Fsync(fd int) (err error)
   277 //sys	Ftruncate(fd int, length int64) (err error)
   284 //sys	Ftruncate(fd int, length int64) (err error)
   278 //sysnb	Getegid() (egid int)
   285 //sysnb	Getegid() (egid int)
   279 //sysnb	Geteuid() (uid int)
   286 //sysnb	Geteuid() (uid int)
   280 //sysnb	Getgid() (gid int)
   287 //sysnb	Getgid() (gid int)
   291 //sys	Issetugid() (tainted bool)
   298 //sys	Issetugid() (tainted bool)
   292 //sys	Kill(pid int, signum syscall.Signal) (err error)
   299 //sys	Kill(pid int, signum syscall.Signal) (err error)
   293 //sys	Kqueue() (fd int, err error)
   300 //sys	Kqueue() (fd int, err error)
   294 //sys	Lchown(path string, uid int, gid int) (err error)
   301 //sys	Lchown(path string, uid int, gid int) (err error)
   295 //sys	Link(path string, link string) (err error)
   302 //sys	Link(path string, link string) (err error)
       
   303 //sys	Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
   296 //sys	Listen(s int, backlog int) (err error)
   304 //sys	Listen(s int, backlog int) (err error)
   297 //sys	Lstat(path string, stat *Stat_t) (err error)
   305 //sys	Lstat(path string, stat *Stat_t) (err error)
   298 //sys	Mkdir(path string, mode uint32) (err error)
   306 //sys	Mkdir(path string, mode uint32) (err error)
       
   307 //sys	Mkdirat(dirfd int, path string, mode uint32) (err error)
   299 //sys	Mkfifo(path string, mode uint32) (err error)
   308 //sys	Mkfifo(path string, mode uint32) (err error)
       
   309 //sys	Mkfifoat(dirfd int, path string, mode uint32) (err error)
   300 //sys	Mknod(path string, mode uint32, dev int) (err error)
   310 //sys	Mknod(path string, mode uint32, dev int) (err error)
       
   311 //sys	Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
   301 //sys	Nanosleep(time *Timespec, leftover *Timespec) (err error)
   312 //sys	Nanosleep(time *Timespec, leftover *Timespec) (err error)
   302 //sys	Open(path string, mode int, perm uint32) (fd int, err error)
   313 //sys	Open(path string, mode int, perm uint32) (fd int, err error)
       
   314 //sys	Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
   303 //sys	Pathconf(path string, name int) (val int, err error)
   315 //sys	Pathconf(path string, name int) (val int, err error)
   304 //sys	Pread(fd int, p []byte, offset int64) (n int, err error)
   316 //sys	Pread(fd int, p []byte, offset int64) (n int, err error)
   305 //sys	Pwrite(fd int, p []byte, offset int64) (n int, err error)
   317 //sys	Pwrite(fd int, p []byte, offset int64) (n int, err error)
   306 //sys	read(fd int, p []byte) (n int, err error)
   318 //sys	read(fd int, p []byte) (n int, err error)
   307 //sys	Readlink(path string, buf []byte) (n int, err error)
   319 //sys	Readlink(path string, buf []byte) (n int, err error)
       
   320 //sys	Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
   308 //sys	Rename(from string, to string) (err error)
   321 //sys	Rename(from string, to string) (err error)
       
   322 //sys	Renameat(fromfd int, from string, tofd int, to string) (err error)
   309 //sys	Revoke(path string) (err error)
   323 //sys	Revoke(path string) (err error)
   310 //sys	Rmdir(path string) (err error)
   324 //sys	Rmdir(path string) (err error)
   311 //sys	Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
   325 //sys	Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
   312 //sys	Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error)
   326 //sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
   313 //sysnb	Setegid(egid int) (err error)
   327 //sysnb	Setegid(egid int) (err error)
   314 //sysnb	Seteuid(euid int) (err error)
   328 //sysnb	Seteuid(euid int) (err error)
   315 //sysnb	Setgid(gid int) (err error)
   329 //sysnb	Setgid(gid int) (err error)
   316 //sysnb	Setpgid(pid int, pgid int) (err error)
   330 //sysnb	Setpgid(pid int, pgid int) (err error)
   317 //sys	Setpriority(which int, who int, prio int) (err error)
   331 //sys	Setpriority(which int, who int, prio int) (err error)
   320 //sysnb	Setrlimit(which int, lim *Rlimit) (err error)
   334 //sysnb	Setrlimit(which int, lim *Rlimit) (err error)
   321 //sysnb	Setsid() (pid int, err error)
   335 //sysnb	Setsid() (pid int, err error)
   322 //sysnb	Settimeofday(tp *Timeval) (err error)
   336 //sysnb	Settimeofday(tp *Timeval) (err error)
   323 //sysnb	Setuid(uid int) (err error)
   337 //sysnb	Setuid(uid int) (err error)
   324 //sys	Stat(path string, stat *Stat_t) (err error)
   338 //sys	Stat(path string, stat *Stat_t) (err error)
       
   339 //sys	Statvfs1(path string, buf *Statvfs_t, flags int) (err error) = SYS_STATVFS1
   325 //sys	Symlink(path string, link string) (err error)
   340 //sys	Symlink(path string, link string) (err error)
       
   341 //sys	Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
   326 //sys	Sync() (err error)
   342 //sys	Sync() (err error)
   327 //sys	Truncate(path string, length int64) (err error)
   343 //sys	Truncate(path string, length int64) (err error)
   328 //sys	Umask(newmask int) (oldmask int)
   344 //sys	Umask(newmask int) (oldmask int)
   329 //sys	Unlink(path string) (err error)
   345 //sys	Unlink(path string) (err error)
       
   346 //sys	Unlinkat(dirfd int, path string, flags int) (err error)
   330 //sys	Unmount(path string, flags int) (err error)
   347 //sys	Unmount(path string, flags int) (err error)
   331 //sys	write(fd int, p []byte) (n int, err error)
   348 //sys	write(fd int, p []byte) (n int, err error)
   332 //sys	mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
   349 //sys	mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
   333 //sys	munmap(addr uintptr, length uintptr) (err error)
   350 //sys	munmap(addr uintptr, length uintptr) (err error)
   334 //sys	readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ
   351 //sys	readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ