mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-04 18:13:42 +08:00 
			
		
		
		
	full diff: https://github.com/creack/pty/compare/v1.1.18...v1.1.21 Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
		
			
				
	
	
		
			48 lines
		
	
	
		
			987 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			987 B
		
	
	
	
		
			Go
		
	
	
	
	
	
//go:build openbsd
 | 
						|
// +build openbsd
 | 
						|
 | 
						|
package pty
 | 
						|
 | 
						|
import (
 | 
						|
	"os"
 | 
						|
	"syscall"
 | 
						|
	"unsafe"
 | 
						|
)
 | 
						|
 | 
						|
func cInt8ToString(in []int8) string {
 | 
						|
	var s []byte
 | 
						|
	for _, v := range in {
 | 
						|
		if v == 0 {
 | 
						|
			break
 | 
						|
		}
 | 
						|
		s = append(s, byte(v))
 | 
						|
	}
 | 
						|
	return string(s)
 | 
						|
}
 | 
						|
 | 
						|
func open() (pty, tty *os.File, err error) {
 | 
						|
	/*
 | 
						|
	 * from ptm(4):
 | 
						|
	 * The PTMGET command allocates a free pseudo terminal, changes its
 | 
						|
	 * ownership to the caller, revokes the access privileges for all previous
 | 
						|
	 * users, opens the file descriptors for the pty and tty devices and
 | 
						|
	 * returns them to the caller in struct ptmget.
 | 
						|
	 */
 | 
						|
 | 
						|
	p, err := os.OpenFile("/dev/ptm", os.O_RDWR|syscall.O_CLOEXEC, 0)
 | 
						|
	if err != nil {
 | 
						|
		return nil, nil, err
 | 
						|
	}
 | 
						|
	defer p.Close()
 | 
						|
 | 
						|
	var ptm ptmget
 | 
						|
	if err := ioctl(p, uintptr(ioctl_PTMGET), uintptr(unsafe.Pointer(&ptm))); err != nil {
 | 
						|
		return nil, nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	pty = os.NewFile(uintptr(ptm.Cfd), cInt8ToString(ptm.Cn[:]))
 | 
						|
	tty = os.NewFile(uintptr(ptm.Sfd), cInt8ToString(ptm.Sn[:]))
 | 
						|
 | 
						|
	return pty, tty, nil
 | 
						|
}
 |