1//go:build !windows
2//+build !windows
3
4package pty
5
6import (
7	"os"
8	"syscall"
9	"unsafe"
10)
11
12// Winsize describes the terminal size.
13type Winsize struct {
14	Rows uint16 // ws_row: Number of rows (in cells)
15	Cols uint16 // ws_col: Number of columns (in cells)
16	X    uint16 // ws_xpixel: Width in pixels
17	Y    uint16 // ws_ypixel: Height in pixels
18}
19
20// Setsize resizes t to s.
21func Setsize(t *os.File, ws *Winsize) error {
22	//nolint:gosec // Expected unsafe pointer for Syscall call.
23	return ioctl(t.Fd(), syscall.TIOCSWINSZ, uintptr(unsafe.Pointer(ws)))
24}
25
26// GetsizeFull returns the full terminal size description.
27func GetsizeFull(t *os.File) (size *Winsize, err error) {
28	var ws Winsize
29
30	//nolint:gosec // Expected unsafe pointer for Syscall call.
31	if err := ioctl(t.Fd(), syscall.TIOCGWINSZ, uintptr(unsafe.Pointer(&ws))); err != nil {
32		return nil, err
33	}
34	return &ws, nil
35}
36