mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-04 10:03:42 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			37 lines
		
	
	
		
			811 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			811 B
		
	
	
	
		
			Go
		
	
	
	
	
	
//go:build openbsd
 | 
						|
// +build openbsd
 | 
						|
 | 
						|
package pty
 | 
						|
 | 
						|
import (
 | 
						|
	"os"
 | 
						|
	"syscall"
 | 
						|
	"unsafe"
 | 
						|
)
 | 
						|
 | 
						|
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.Fd(), uintptr(ioctl_PTMGET), uintptr(unsafe.Pointer(&ptm))); err != nil {
 | 
						|
		return nil, nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	pty = os.NewFile(uintptr(ptm.Cfd), "/dev/ptm")
 | 
						|
	tty = os.NewFile(uintptr(ptm.Sfd), "/dev/ptm")
 | 
						|
 | 
						|
	return pty, tty, nil
 | 
						|
}
 |