vendor/golang.org/x/sys/unix/syscall_solaris.go
changeset 251 1c52a0eeb952
parent 242 2a9ec03fe5a1
child 256 6d9efbef00a9
equal deleted inserted replaced
250:c040f992052f 251:1c52a0eeb952
    31 	Nlen   uint8
    31 	Nlen   uint8
    32 	Alen   uint8
    32 	Alen   uint8
    33 	Slen   uint8
    33 	Slen   uint8
    34 	Data   [244]int8
    34 	Data   [244]int8
    35 	raw    RawSockaddrDatalink
    35 	raw    RawSockaddrDatalink
       
    36 }
       
    37 
       
    38 func direntIno(buf []byte) (uint64, bool) {
       
    39 	return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))
       
    40 }
       
    41 
       
    42 func direntReclen(buf []byte) (uint64, bool) {
       
    43 	return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
       
    44 }
       
    45 
       
    46 func direntNamlen(buf []byte) (uint64, bool) {
       
    47 	reclen, ok := direntReclen(buf)
       
    48 	if !ok {
       
    49 		return 0, false
       
    50 	}
       
    51 	return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true
    36 }
    52 }
    37 
    53 
    38 //sysnb	pipe(p *[2]_C_int) (n int, err error)
    54 //sysnb	pipe(p *[2]_C_int) (n int, err error)
    39 
    55 
    40 func Pipe(p []int) (err error) {
    56 func Pipe(p []int) (err error) {
   187 		a[i] = _Gid_t(v)
   203 		a[i] = _Gid_t(v)
   188 	}
   204 	}
   189 	return setgroups(len(a), &a[0])
   205 	return setgroups(len(a), &a[0])
   190 }
   206 }
   191 
   207 
       
   208 // ReadDirent reads directory entries from fd and writes them into buf.
   192 func ReadDirent(fd int, buf []byte) (n int, err error) {
   209 func ReadDirent(fd int, buf []byte) (n int, err error) {
   193 	// Final argument is (basep *uintptr) and the syscall doesn't take nil.
   210 	// Final argument is (basep *uintptr) and the syscall doesn't take nil.
   194 	// TODO(rsc): Can we use a single global basep for all calls?
   211 	// TODO(rsc): Can we use a single global basep for all calls?
   195 	return Getdents(fd, buf, new(uintptr))
   212 	return Getdents(fd, buf, new(uintptr))
   196 }
   213 }
   372 		// everyone uses this convention.
   389 		// everyone uses this convention.
   373 		n := 0
   390 		n := 0
   374 		for n < len(pp.Path) && pp.Path[n] != 0 {
   391 		for n < len(pp.Path) && pp.Path[n] != 0 {
   375 			n++
   392 			n++
   376 		}
   393 		}
   377 		bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
   394 		bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
   378 		sa.Name = string(bytes)
   395 		sa.Name = string(bytes)
   379 		return sa, nil
   396 		return sa, nil
   380 
   397 
   381 	case AF_INET:
   398 	case AF_INET:
   382 		pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))
   399 		pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))
   534  * Expose the ioctl function
   551  * Expose the ioctl function
   535  */
   552  */
   536 
   553 
   537 //sys	ioctl(fd int, req uint, arg uintptr) (err error)
   554 //sys	ioctl(fd int, req uint, arg uintptr) (err error)
   538 
   555 
   539 func IoctlSetInt(fd int, req uint, value int) (err error) {
       
   540 	return ioctl(fd, req, uintptr(value))
       
   541 }
       
   542 
       
   543 func ioctlSetWinsize(fd int, req uint, value *Winsize) (err error) {
       
   544 	return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
       
   545 }
       
   546 
       
   547 func ioctlSetTermios(fd int, req uint, value *Termios) (err error) {
       
   548 	return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
       
   549 }
       
   550 
       
   551 func IoctlSetTermio(fd int, req uint, value *Termio) (err error) {
   556 func IoctlSetTermio(fd int, req uint, value *Termio) (err error) {
   552 	return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
   557 	return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
   553 }
       
   554 
       
   555 func IoctlGetInt(fd int, req uint) (int, error) {
       
   556 	var value int
       
   557 	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
       
   558 	return value, err
       
   559 }
       
   560 
       
   561 func IoctlGetWinsize(fd int, req uint) (*Winsize, error) {
       
   562 	var value Winsize
       
   563 	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
       
   564 	return &value, err
       
   565 }
       
   566 
       
   567 func IoctlGetTermios(fd int, req uint) (*Termios, error) {
       
   568 	var value Termios
       
   569 	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
       
   570 	return &value, err
       
   571 }
   558 }
   572 
   559 
   573 func IoctlGetTermio(fd int, req uint) (*Termio, error) {
   560 func IoctlGetTermio(fd int, req uint) (*Termio, error) {
   574 	var value Termio
   561 	var value Termio
   575 	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
   562 	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
   581 func Poll(fds []PollFd, timeout int) (n int, err error) {
   568 func Poll(fds []PollFd, timeout int) (n int, err error) {
   582 	if len(fds) == 0 {
   569 	if len(fds) == 0 {
   583 		return poll(nil, 0, timeout)
   570 		return poll(nil, 0, timeout)
   584 	}
   571 	}
   585 	return poll(&fds[0], len(fds), timeout)
   572 	return poll(&fds[0], len(fds), timeout)
       
   573 }
       
   574 
       
   575 func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
       
   576 	if raceenabled {
       
   577 		raceReleaseMerge(unsafe.Pointer(&ioSync))
       
   578 	}
       
   579 	return sendfile(outfd, infd, offset, count)
   586 }
   580 }
   587 
   581 
   588 /*
   582 /*
   589  * Exposed directly
   583  * Exposed directly
   590  */
   584  */
   653 //sys	Readlink(path string, buf []byte) (n int, err error)
   647 //sys	Readlink(path string, buf []byte) (n int, err error)
   654 //sys	Rename(from string, to string) (err error)
   648 //sys	Rename(from string, to string) (err error)
   655 //sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
   649 //sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
   656 //sys	Rmdir(path string) (err error)
   650 //sys	Rmdir(path string) (err error)
   657 //sys	Seek(fd int, offset int64, whence int) (newoffset int64, err error) = lseek
   651 //sys	Seek(fd int, offset int64, whence int) (newoffset int64, err error) = lseek
   658 //sys	Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error)
   652 //sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
   659 //sysnb	Setegid(egid int) (err error)
   653 //sysnb	Setegid(egid int) (err error)
   660 //sysnb	Seteuid(euid int) (err error)
   654 //sysnb	Seteuid(euid int) (err error)
   661 //sysnb	Setgid(gid int) (err error)
   655 //sysnb	Setgid(gid int) (err error)
   662 //sys	Sethostname(p []byte) (err error)
   656 //sys	Sethostname(p []byte) (err error)
   663 //sysnb	Setpgid(pid int, pgid int) (err error)
   657 //sysnb	Setpgid(pid int, pgid int) (err error)