vendor/golang.org/x/sys/unix/syscall_dragonfly.go
changeset 251 1c52a0eeb952
parent 242 2a9ec03fe5a1
child 256 6d9efbef00a9
equal deleted inserted replaced
250:c040f992052f 251:1c52a0eeb952
    10 // it in our own nicer implementation, either here or in
    10 // it in our own nicer implementation, either here or in
    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 "unsafe"
    15 import (
       
    16 	"sync"
       
    17 	"unsafe"
       
    18 )
       
    19 
       
    20 // See version list in https://github.com/DragonFlyBSD/DragonFlyBSD/blob/master/sys/sys/param.h
       
    21 var (
       
    22 	osreldateOnce sync.Once
       
    23 	osreldate     uint32
       
    24 )
       
    25 
       
    26 // First __DragonFly_version after September 2019 ABI changes
       
    27 // http://lists.dragonflybsd.org/pipermail/users/2019-September/358280.html
       
    28 const _dragonflyABIChangeVersion = 500705
       
    29 
       
    30 func supportsABI(ver uint32) bool {
       
    31 	osreldateOnce.Do(func() { osreldate, _ = SysctlUint32("kern.osreldate") })
       
    32 	return osreldate >= ver
       
    33 }
    16 
    34 
    17 // SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
    35 // SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
    18 type SockaddrDatalink struct {
    36 type SockaddrDatalink struct {
    19 	Len    uint8
    37 	Len    uint8
    20 	Family uint8
    38 	Family uint8
    55 		return nil, err
    73 		return nil, err
    56 	}
    74 	}
    57 	return buf[0 : n/siz], nil
    75 	return buf[0 : n/siz], nil
    58 }
    76 }
    59 
    77 
       
    78 func direntIno(buf []byte) (uint64, bool) {
       
    79 	return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))
       
    80 }
       
    81 
       
    82 func direntReclen(buf []byte) (uint64, bool) {
       
    83 	namlen, ok := direntNamlen(buf)
       
    84 	if !ok {
       
    85 		return 0, false
       
    86 	}
       
    87 	return (16 + namlen + 1 + 7) &^ 7, true
       
    88 }
       
    89 
       
    90 func direntNamlen(buf []byte) (uint64, bool) {
       
    91 	return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
       
    92 }
       
    93 
    60 //sysnb pipe() (r int, w int, err error)
    94 //sysnb pipe() (r int, w int, err error)
    61 
    95 
    62 func Pipe(p []int) (err error) {
    96 func Pipe(p []int) (err error) {
    63 	if len(p) != 2 {
    97 	if len(p) != 2 {
    64 		return EINVAL
    98 		return EINVAL
   132 	return ENOSYS
   166 	return ENOSYS
   133 }
   167 }
   134 
   168 
   135 //sys	ioctl(fd int, req uint, arg uintptr) (err error)
   169 //sys	ioctl(fd int, req uint, arg uintptr) (err error)
   136 
   170 
   137 // ioctl itself should not be exposed directly, but additional get/set
   171 //sys   sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
   138 // functions for specific types are permissible.
       
   139 
       
   140 // IoctlSetInt performs an ioctl operation which sets an integer value
       
   141 // on fd, using the specified request number.
       
   142 func IoctlSetInt(fd int, req uint, value int) error {
       
   143 	return ioctl(fd, req, uintptr(value))
       
   144 }
       
   145 
       
   146 func ioctlSetWinsize(fd int, req uint, value *Winsize) error {
       
   147 	return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
       
   148 }
       
   149 
       
   150 func ioctlSetTermios(fd int, req uint, value *Termios) error {
       
   151 	return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
       
   152 }
       
   153 
       
   154 // IoctlGetInt performs an ioctl operation which gets an integer value
       
   155 // from fd, using the specified request number.
       
   156 func IoctlGetInt(fd int, req uint) (int, error) {
       
   157 	var value int
       
   158 	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
       
   159 	return value, err
       
   160 }
       
   161 
       
   162 func IoctlGetWinsize(fd int, req uint) (*Winsize, error) {
       
   163 	var value Winsize
       
   164 	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
       
   165 	return &value, err
       
   166 }
       
   167 
       
   168 func IoctlGetTermios(fd int, req uint) (*Termios, error) {
       
   169 	var value Termios
       
   170 	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
       
   171 	return &value, err
       
   172 }
       
   173 
   172 
   174 func sysctlUname(mib []_C_int, old *byte, oldlen *uintptr) error {
   173 func sysctlUname(mib []_C_int, old *byte, oldlen *uintptr) error {
   175 	err := sysctl(mib, old, oldlen, nil, 0)
   174 	err := sysctl(mib, old, oldlen, nil, 0)
   176 	if err != nil {
   175 	if err != nil {
   177 		// Utsname members on Dragonfly are only 32 bytes and
   176 		// Utsname members on Dragonfly are only 32 bytes and
   230 		return err
   229 		return err
   231 	}
   230 	}
   232 	uname.Machine[unsafe.Sizeof(uname.Machine)-1] = 0
   231 	uname.Machine[unsafe.Sizeof(uname.Machine)-1] = 0
   233 
   232 
   234 	return nil
   233 	return nil
       
   234 }
       
   235 
       
   236 func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
       
   237 	if raceenabled {
       
   238 		raceReleaseMerge(unsafe.Pointer(&ioSync))
       
   239 	}
       
   240 	return sendfile(outfd, infd, offset, count)
   235 }
   241 }
   236 
   242 
   237 /*
   243 /*
   238  * Exposed directly
   244  * Exposed directly
   239  */
   245  */
   246 //sys	Chroot(path string) (err error)
   252 //sys	Chroot(path string) (err error)
   247 //sys	Close(fd int) (err error)
   253 //sys	Close(fd int) (err error)
   248 //sys	Dup(fd int) (nfd int, err error)
   254 //sys	Dup(fd int) (nfd int, err error)
   249 //sys	Dup2(from int, to int) (err error)
   255 //sys	Dup2(from int, to int) (err error)
   250 //sys	Exit(code int)
   256 //sys	Exit(code int)
       
   257 //sys	Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
   251 //sys	Fchdir(fd int) (err error)
   258 //sys	Fchdir(fd int) (err error)
   252 //sys	Fchflags(fd int, flags int) (err error)
   259 //sys	Fchflags(fd int, flags int) (err error)
   253 //sys	Fchmod(fd int, mode uint32) (err error)
   260 //sys	Fchmod(fd int, mode uint32) (err error)
   254 //sys	Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
   261 //sys	Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
   255 //sys	Fchown(fd int, uid int, gid int) (err error)
   262 //sys	Fchown(fd int, uid int, gid int) (err error)
       
   263 //sys	Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
   256 //sys	Flock(fd int, how int) (err error)
   264 //sys	Flock(fd int, how int) (err error)
   257 //sys	Fpathconf(fd int, name int) (val int, err error)
   265 //sys	Fpathconf(fd int, name int) (val int, err error)
   258 //sys	Fstat(fd int, stat *Stat_t) (err error)
   266 //sys	Fstat(fd int, stat *Stat_t) (err error)
   259 //sys	Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
   267 //sys	Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
   260 //sys	Fstatfs(fd int, stat *Statfs_t) (err error)
   268 //sys	Fstatfs(fd int, stat *Statfs_t) (err error)
   261 //sys	Fsync(fd int) (err error)
   269 //sys	Fsync(fd int) (err error)
   262 //sys	Ftruncate(fd int, length int64) (err error)
   270 //sys	Ftruncate(fd int, length int64) (err error)
       
   271 //sys	Getdents(fd int, buf []byte) (n int, err error)
   263 //sys	Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error)
   272 //sys	Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error)
   264 //sys	Getdtablesize() (size int)
   273 //sys	Getdtablesize() (size int)
   265 //sysnb	Getegid() (egid int)
   274 //sysnb	Getegid() (egid int)
   266 //sysnb	Geteuid() (uid int)
   275 //sysnb	Geteuid() (uid int)
   267 //sysnb	Getgid() (gid int)
   276 //sysnb	Getgid() (gid int)
   278 //sys	Issetugid() (tainted bool)
   287 //sys	Issetugid() (tainted bool)
   279 //sys	Kill(pid int, signum syscall.Signal) (err error)
   288 //sys	Kill(pid int, signum syscall.Signal) (err error)
   280 //sys	Kqueue() (fd int, err error)
   289 //sys	Kqueue() (fd int, err error)
   281 //sys	Lchown(path string, uid int, gid int) (err error)
   290 //sys	Lchown(path string, uid int, gid int) (err error)
   282 //sys	Link(path string, link string) (err error)
   291 //sys	Link(path string, link string) (err error)
       
   292 //sys	Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
   283 //sys	Listen(s int, backlog int) (err error)
   293 //sys	Listen(s int, backlog int) (err error)
   284 //sys	Lstat(path string, stat *Stat_t) (err error)
   294 //sys	Lstat(path string, stat *Stat_t) (err error)
   285 //sys	Mkdir(path string, mode uint32) (err error)
   295 //sys	Mkdir(path string, mode uint32) (err error)
       
   296 //sys	Mkdirat(dirfd int, path string, mode uint32) (err error)
   286 //sys	Mkfifo(path string, mode uint32) (err error)
   297 //sys	Mkfifo(path string, mode uint32) (err error)
   287 //sys	Mknod(path string, mode uint32, dev int) (err error)
   298 //sys	Mknod(path string, mode uint32, dev int) (err error)
       
   299 //sys	Mknodat(fd int, path string, mode uint32, dev int) (err error)
   288 //sys	Nanosleep(time *Timespec, leftover *Timespec) (err error)
   300 //sys	Nanosleep(time *Timespec, leftover *Timespec) (err error)
   289 //sys	Open(path string, mode int, perm uint32) (fd int, err error)
   301 //sys	Open(path string, mode int, perm uint32) (fd int, err error)
       
   302 //sys	Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
   290 //sys	Pathconf(path string, name int) (val int, err error)
   303 //sys	Pathconf(path string, name int) (val int, err error)
   291 //sys	read(fd int, p []byte) (n int, err error)
   304 //sys	read(fd int, p []byte) (n int, err error)
   292 //sys	Readlink(path string, buf []byte) (n int, err error)
   305 //sys	Readlink(path string, buf []byte) (n int, err error)
   293 //sys	Rename(from string, to string) (err error)
   306 //sys	Rename(from string, to string) (err error)
       
   307 //sys	Renameat(fromfd int, from string, tofd int, to string) (err error)
   294 //sys	Revoke(path string) (err error)
   308 //sys	Revoke(path string) (err error)
   295 //sys	Rmdir(path string) (err error)
   309 //sys	Rmdir(path string) (err error)
   296 //sys	Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
   310 //sys	Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
   297 //sys	Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error)
   311 //sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
   298 //sysnb	Setegid(egid int) (err error)
   312 //sysnb	Setegid(egid int) (err error)
   299 //sysnb	Seteuid(euid int) (err error)
   313 //sysnb	Seteuid(euid int) (err error)
   300 //sysnb	Setgid(gid int) (err error)
   314 //sysnb	Setgid(gid int) (err error)
   301 //sys	Setlogin(name string) (err error)
   315 //sys	Setlogin(name string) (err error)
   302 //sysnb	Setpgid(pid int, pgid int) (err error)
   316 //sysnb	Setpgid(pid int, pgid int) (err error)
   310 //sysnb	Settimeofday(tp *Timeval) (err error)
   324 //sysnb	Settimeofday(tp *Timeval) (err error)
   311 //sysnb	Setuid(uid int) (err error)
   325 //sysnb	Setuid(uid int) (err error)
   312 //sys	Stat(path string, stat *Stat_t) (err error)
   326 //sys	Stat(path string, stat *Stat_t) (err error)
   313 //sys	Statfs(path string, stat *Statfs_t) (err error)
   327 //sys	Statfs(path string, stat *Statfs_t) (err error)
   314 //sys	Symlink(path string, link string) (err error)
   328 //sys	Symlink(path string, link string) (err error)
       
   329 //sys	Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
   315 //sys	Sync() (err error)
   330 //sys	Sync() (err error)
   316 //sys	Truncate(path string, length int64) (err error)
   331 //sys	Truncate(path string, length int64) (err error)
   317 //sys	Umask(newmask int) (oldmask int)
   332 //sys	Umask(newmask int) (oldmask int)
   318 //sys	Undelete(path string) (err error)
   333 //sys	Undelete(path string) (err error)
   319 //sys	Unlink(path string) (err error)
   334 //sys	Unlink(path string) (err error)
       
   335 //sys	Unlinkat(dirfd int, path string, flags int) (err error)
   320 //sys	Unmount(path string, flags int) (err error)
   336 //sys	Unmount(path string, flags int) (err error)
   321 //sys	write(fd int, p []byte) (n int, err error)
   337 //sys	write(fd int, p []byte) (n int, err error)
   322 //sys   mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
   338 //sys   mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
   323 //sys   munmap(addr uintptr, length uintptr) (err error)
   339 //sys   munmap(addr uintptr, length uintptr) (err error)
   324 //sys	readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ
   340 //sys	readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ