Source file src/internal/syscall/unix/pty_darwin.go

     1  // Copyright 2022 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  package unix
     6  
     7  import (
     8  	"internal/abi"
     9  	"unsafe"
    10  )
    11  
    12  //go:cgo_import_dynamic libc_grantpt grantpt "/usr/lib/libSystem.B.dylib"
    13  func libc_grantpt_trampoline()
    14  
    15  func Grantpt(fd int) error {
    16  	_, _, errno := syscall_syscall6(abi.FuncPCABI0(libc_grantpt_trampoline), uintptr(fd), 0, 0, 0, 0, 0)
    17  	if errno != 0 {
    18  		return errno
    19  	}
    20  	return nil
    21  }
    22  
    23  //go:cgo_import_dynamic libc_unlockpt unlockpt "/usr/lib/libSystem.B.dylib"
    24  func libc_unlockpt_trampoline()
    25  
    26  func Unlockpt(fd int) error {
    27  	_, _, errno := syscall_syscall6(abi.FuncPCABI0(libc_unlockpt_trampoline), uintptr(fd), 0, 0, 0, 0, 0)
    28  	if errno != 0 {
    29  		return errno
    30  	}
    31  	return nil
    32  }
    33  
    34  //go:cgo_import_dynamic libc_ptsname_r ptsname_r "/usr/lib/libSystem.B.dylib"
    35  func libc_ptsname_r_trampoline()
    36  
    37  func Ptsname(fd int) (string, error) {
    38  	buf := make([]byte, 256)
    39  	_, _, errno := syscall_syscall6(abi.FuncPCABI0(libc_ptsname_r_trampoline),
    40  		uintptr(fd),
    41  		uintptr(unsafe.Pointer(&buf[0])),
    42  		uintptr(len(buf)-1),
    43  		0, 0, 0)
    44  	if errno != 0 {
    45  		return "", errno
    46  	}
    47  	for i, c := range buf {
    48  		if c == 0 {
    49  			buf = buf[:i]
    50  			break
    51  		}
    52  	}
    53  	return string(buf), nil
    54  }
    55  
    56  //go:cgo_import_dynamic libc_posix_openpt posix_openpt "/usr/lib/libSystem.B.dylib"
    57  func libc_posix_openpt_trampoline()
    58  
    59  func PosixOpenpt(flag int) (fd int, err error) {
    60  	ufd, _, errno := syscall_syscall6(abi.FuncPCABI0(libc_posix_openpt_trampoline), uintptr(flag), 0, 0, 0, 0, 0)
    61  	if errno != 0 {
    62  		return -1, errno
    63  	}
    64  	return int(ufd), nil
    65  }
    66  

View as plain text