vendor: github.com/creack/pty v1.1.18

full diff: https://github.com/creack/pty/compare/v1.1.11...v1.1.18

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
Sebastiaan van Stijn 2023-04-27 02:20:43 +02:00
parent eabb927811
commit c177e2060d
No known key found for this signature in database
GPG Key ID: 76698F39D527CE8C
48 changed files with 537 additions and 265 deletions

View File

@ -8,7 +8,7 @@ go 1.18
require ( require (
github.com/containerd/containerd v1.6.20 github.com/containerd/containerd v1.6.20
github.com/creack/pty v1.1.11 github.com/creack/pty v1.1.18
github.com/docker/distribution v2.8.1+incompatible github.com/docker/distribution v2.8.1+incompatible
github.com/docker/docker v24.0.0-beta.2+incompatible github.com/docker/docker v24.0.0-beta.2+incompatible
github.com/docker/docker-credential-helpers v0.7.0 github.com/docker/docker-credential-helpers v0.7.0

View File

@ -87,8 +87,8 @@ github.com/containerd/containerd v1.6.20/go.mod h1:apei1/i5Ux2FzrK6+DM/suEsGuK/M
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

17
vendor/github.com/creack/pty/Dockerfile.golang generated vendored Normal file
View File

@ -0,0 +1,17 @@
ARG GOVERSION=1.14
FROM golang:${GOVERSION}
# Set base env.
ARG GOOS=linux
ARG GOARCH=amd64
ENV GOOS=${GOOS} GOARCH=${GOARCH} CGO_ENABLED=0 GOFLAGS='-v -ldflags=-s -ldflags=-w'
# Pre compile the stdlib for 386/arm (32bits).
RUN go build -a std
# Add the code to the image.
WORKDIR pty
ADD . .
# Build the lib.
RUN go build

View File

@ -1,3 +1,4 @@
# NOTE: Using 1.13 as a base to build the RISCV compiler, the resulting version is based on go1.6.
FROM golang:1.13 FROM golang:1.13
# Clone and complie a riscv compatible version of the go compiler. # Clone and complie a riscv compatible version of the go compiler.
@ -8,7 +9,15 @@ ENV PATH=/riscv-go/misc/riscv:/riscv-go/bin:$PATH
RUN cd /riscv-go/src && GOROOT_BOOTSTRAP=$(go env GOROOT) ./make.bash RUN cd /riscv-go/src && GOROOT_BOOTSTRAP=$(go env GOROOT) ./make.bash
ENV GOROOT=/riscv-go ENV GOROOT=/riscv-go
# Make sure we compile. # Set the base env.
ENV GOOS=linux GOARCH=riscv CGO_ENABLED=0 GOFLAGS='-v -ldflags=-s -ldflags=-w'
# Pre compile the stdlib.
RUN go build -a std
# Add the code to the image.
WORKDIR pty WORKDIR pty
ADD . . ADD . .
RUN GOOS=linux GOARCH=riscv go build
# Build the lib.
RUN go build

View File

@ -4,9 +4,13 @@ Pty is a Go package for using unix pseudo-terminals.
## Install ## Install
go get github.com/creack/pty ```sh
go get github.com/creack/pty
```
## Example ## Examples
Note that those examples are for demonstration purpose only, to showcase how to use the library. They are not meant to be used in any kind of production environment.
### Command ### Command
@ -14,10 +18,11 @@ Pty is a Go package for using unix pseudo-terminals.
package main package main
import ( import (
"github.com/creack/pty"
"io" "io"
"os" "os"
"os/exec" "os/exec"
"github.com/creack/pty"
) )
func main() { func main() {
@ -51,7 +56,7 @@ import (
"syscall" "syscall"
"github.com/creack/pty" "github.com/creack/pty"
"golang.org/x/crypto/ssh/terminal" "golang.org/x/term"
) )
func test() error { func test() error {
@ -77,15 +82,17 @@ func test() error {
} }
}() }()
ch <- syscall.SIGWINCH // Initial resize. ch <- syscall.SIGWINCH // Initial resize.
defer func() { signal.Stop(ch); close(ch) }() // Cleanup signals when done.
// Set stdin in raw mode. // Set stdin in raw mode.
oldState, err := terminal.MakeRaw(int(os.Stdin.Fd())) oldState, err := term.MakeRaw(int(os.Stdin.Fd()))
if err != nil { if err != nil {
panic(err) panic(err)
} }
defer func() { _ = terminal.Restore(int(os.Stdin.Fd()), oldState) }() // Best effort. defer func() { _ = term.Restore(int(os.Stdin.Fd()), oldState) }() // Best effort.
// Copy stdin to the pty and the pty to stdout. // Copy stdin to the pty and the pty to stdout.
// NOTE: The goroutine will keep reading until the next keystroke before returning.
go func() { _, _ = io.Copy(ptmx, os.Stdin) }() go func() { _, _ = io.Copy(ptmx, os.Stdin) }()
_, _ = io.Copy(os.Stdout, ptmx) _, _ = io.Copy(os.Stdout, ptmx)

18
vendor/github.com/creack/pty/asm_solaris_amd64.s generated vendored Normal file
View File

@ -0,0 +1,18 @@
// Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//go:build gc
//+build gc
#include "textflag.h"
//
// System calls for amd64, Solaris are implemented in runtime/syscall_solaris.go
//
TEXT ·sysvicall6(SB),NOSPLIT,$0-88
JMP syscall·sysvicall6(SB)
TEXT ·rawSysvicall6(SB),NOSPLIT,$0-88
JMP syscall·rawSysvicall6(SB)

View File

@ -10,7 +10,7 @@ import (
// available on the current platform. // available on the current platform.
var ErrUnsupported = errors.New("unsupported") var ErrUnsupported = errors.New("unsupported")
// Opens a pty and its corresponding tty. // Open a pty and its corresponding tty.
func Open() (pty, tty *os.File, err error) { func Open() (pty, tty *os.File, err error) {
return open() return open()
} }

View File

@ -1,9 +1,15 @@
// +build !windows,!solaris //go:build !windows && !solaris && !aix
// +build !windows,!solaris,!aix
package pty package pty
import "syscall" import "syscall"
const (
TIOCGWINSZ = syscall.TIOCGWINSZ
TIOCSWINSZ = syscall.TIOCSWINSZ
)
func ioctl(fd, cmd, ptr uintptr) error { func ioctl(fd, cmd, ptr uintptr) error {
_, _, e := syscall.Syscall(syscall.SYS_IOCTL, fd, cmd, ptr) _, _, e := syscall.Syscall(syscall.SYS_IOCTL, fd, cmd, ptr)
if e != 0 { if e != 0 {

View File

@ -1,3 +1,4 @@
//go:build darwin || dragonfly || freebsd || netbsd || openbsd
// +build darwin dragonfly freebsd netbsd openbsd // +build darwin dragonfly freebsd netbsd openbsd
package pty package pty

View File

@ -1,30 +1,48 @@
//go:build solaris
// +build solaris
package pty package pty
import ( import (
"golang.org/x/sys/unix" "syscall"
"unsafe" "unsafe"
) )
//go:cgo_import_dynamic libc_ioctl ioctl "libc.so"
//go:linkname procioctl libc_ioctl
var procioctl uintptr
const ( const (
// see /usr/include/sys/stropts.h // see /usr/include/sys/stropts.h
I_PUSH = uintptr((int32('S')<<8 | 002)) I_PUSH = uintptr((int32('S')<<8 | 002))
I_STR = uintptr((int32('S')<<8 | 010)) I_STR = uintptr((int32('S')<<8 | 010))
I_FIND = uintptr((int32('S')<<8 | 013)) I_FIND = uintptr((int32('S')<<8 | 013))
// see /usr/include/sys/ptms.h // see /usr/include/sys/ptms.h
ISPTM = (int32('P') << 8) | 1 ISPTM = (int32('P') << 8) | 1
UNLKPT = (int32('P') << 8) | 2 UNLKPT = (int32('P') << 8) | 2
PTSSTTY = (int32('P') << 8) | 3 PTSSTTY = (int32('P') << 8) | 3
ZONEPT = (int32('P') << 8) | 4 ZONEPT = (int32('P') << 8) | 4
OWNERPT = (int32('P') << 8) | 5 OWNERPT = (int32('P') << 8) | 5
// see /usr/include/sys/termios.h
TIOCSWINSZ = (uint32('T') << 8) | 103
TIOCGWINSZ = (uint32('T') << 8) | 104
) )
type strioctl struct { type strioctl struct {
ic_cmd int32 icCmd int32
ic_timout int32 icTimeout int32
ic_len int32 icLen int32
ic_dp unsafe.Pointer icDP unsafe.Pointer
} }
// Defined in asm_solaris_amd64.s.
func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)
func ioctl(fd, cmd, ptr uintptr) error { func ioctl(fd, cmd, ptr uintptr) error {
return unix.IoctlSetInt(int(fd), uint(cmd), int(ptr)) if _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, fd, cmd, ptr, 0, 0, 0); errno != 0 {
return errno
}
return nil
} }

13
vendor/github.com/creack/pty/ioctl_unsupported.go generated vendored Normal file
View File

@ -0,0 +1,13 @@
//go:build aix
// +build aix
package pty
const (
TIOCGWINSZ = 0
TIOCSWINSZ = 0
)
func ioctl(fd, cmd, ptr uintptr) error {
return ErrUnsupported
}

View File

@ -13,7 +13,7 @@ GODEFS="go tool cgo -godefs"
$GODEFS types.go |gofmt > ztypes_$GOARCH.go $GODEFS types.go |gofmt > ztypes_$GOARCH.go
case $GOOS in case $GOOS in
freebsd|dragonfly|openbsd) freebsd|dragonfly|netbsd|openbsd)
$GODEFS types_$GOOS.go |gofmt > ztypes_$GOOSARCH.go $GODEFS types_$GOOS.go |gofmt > ztypes_$GOOSARCH.go
;; ;;
esac esac

View File

@ -1,3 +1,6 @@
//go:build darwin
// +build darwin
package pty package pty
import ( import (
@ -33,7 +36,7 @@ func open() (pty, tty *os.File, err error) {
return nil, nil, err return nil, nil, err
} }
t, err := os.OpenFile(sname, os.O_RDWR, 0) t, err := os.OpenFile(sname, os.O_RDWR|syscall.O_NOCTTY, 0)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }

View File

@ -1,3 +1,6 @@
//go:build dragonfly
// +build dragonfly
package pty package pty
import ( import (

View File

@ -1,3 +1,6 @@
//go:build freebsd
// +build freebsd
package pty package pty
import ( import (

View File

@ -1,3 +1,6 @@
//go:build linux
// +build linux
package pty package pty
import ( import (
@ -28,7 +31,7 @@ func open() (pty, tty *os.File, err error) {
return nil, nil, err return nil, nil, err
} }
t, err := os.OpenFile(sname, os.O_RDWR|syscall.O_NOCTTY, 0) t, err := os.OpenFile(sname, os.O_RDWR|syscall.O_NOCTTY, 0) //nolint:gosec // Expected Open from a variable.
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
@ -37,7 +40,7 @@ func open() (pty, tty *os.File, err error) {
func ptsname(f *os.File) (string, error) { func ptsname(f *os.File) (string, error) {
var n _C_uint var n _C_uint
err := ioctl(f.Fd(), syscall.TIOCGPTN, uintptr(unsafe.Pointer(&n))) err := ioctl(f.Fd(), syscall.TIOCGPTN, uintptr(unsafe.Pointer(&n))) //nolint:gosec // Expected unsafe pointer for Syscall call.
if err != nil { if err != nil {
return "", err return "", err
} }
@ -47,5 +50,5 @@ func ptsname(f *os.File) (string, error) {
func unlockpt(f *os.File) error { func unlockpt(f *os.File) error {
var u _C_int var u _C_int
// use TIOCSPTLCK with a pointer to zero to clear the lock // use TIOCSPTLCK with a pointer to zero to clear the lock
return ioctl(f.Fd(), syscall.TIOCSPTLCK, uintptr(unsafe.Pointer(&u))) return ioctl(f.Fd(), syscall.TIOCSPTLCK, uintptr(unsafe.Pointer(&u))) //nolint:gosec // Expected unsafe pointer for Syscall call.
} }

69
vendor/github.com/creack/pty/pty_netbsd.go generated vendored Normal file
View File

@ -0,0 +1,69 @@
//go:build netbsd
// +build netbsd
package pty
import (
"errors"
"os"
"syscall"
"unsafe"
)
func open() (pty, tty *os.File, err error) {
p, err := os.OpenFile("/dev/ptmx", os.O_RDWR, 0)
if err != nil {
return nil, nil, err
}
// In case of error after this point, make sure we close the ptmx fd.
defer func() {
if err != nil {
_ = p.Close() // Best effort.
}
}()
sname, err := ptsname(p)
if err != nil {
return nil, nil, err
}
if err := grantpt(p); err != nil {
return nil, nil, err
}
// In NetBSD unlockpt() does nothing, so it isn't called here.
t, err := os.OpenFile(sname, os.O_RDWR|syscall.O_NOCTTY, 0)
if err != nil {
return nil, nil, err
}
return p, t, nil
}
func ptsname(f *os.File) (string, error) {
/*
* from ptsname(3): The ptsname() function is equivalent to:
* struct ptmget pm;
* ioctl(fd, TIOCPTSNAME, &pm) == -1 ? NULL : pm.sn;
*/
var ptm ptmget
if err := ioctl(f.Fd(), uintptr(ioctl_TIOCPTSNAME), uintptr(unsafe.Pointer(&ptm))); err != nil {
return "", err
}
name := make([]byte, len(ptm.Sn))
for i, c := range ptm.Sn {
name[i] = byte(c)
if c == 0 {
return string(name[:i]), nil
}
}
return "", errors.New("TIOCPTSNAME string not NUL-terminated")
}
func grantpt(f *os.File) error {
/*
* from grantpt(3): Calling grantpt() is equivalent to:
* ioctl(fd, TIOCGRANTPT, 0);
*/
return ioctl(f.Fd(), uintptr(ioctl_TIOCGRANTPT), 0)
}

View File

@ -1,3 +1,6 @@
//go:build openbsd
// +build openbsd
package pty package pty
import ( import (

View File

@ -1,3 +1,6 @@
//go:build solaris
// +build solaris
package pty package pty
/* based on: /* based on:
@ -6,48 +9,54 @@ http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libc/port/gen/pt.c
import ( import (
"errors" "errors"
"golang.org/x/sys/unix"
"os" "os"
"strconv" "strconv"
"syscall" "syscall"
"unsafe" "unsafe"
) )
const NODEV = ^uint64(0)
func open() (pty, tty *os.File, err error) { func open() (pty, tty *os.File, err error) {
masterfd, err := syscall.Open("/dev/ptmx", syscall.O_RDWR|unix.O_NOCTTY, 0) ptmxfd, err := syscall.Open("/dev/ptmx", syscall.O_RDWR|syscall.O_NOCTTY, 0)
//masterfd, err := syscall.Open("/dev/ptmx", syscall.O_RDWR|syscall.O_CLOEXEC|unix.O_NOCTTY, 0)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
p := os.NewFile(uintptr(masterfd), "/dev/ptmx") p := os.NewFile(uintptr(ptmxfd), "/dev/ptmx")
// In case of error after this point, make sure we close the ptmx fd.
defer func() {
if err != nil {
_ = p.Close() // Best effort.
}
}()
sname, err := ptsname(p) sname, err := ptsname(p)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
err = grantpt(p) if err := grantpt(p); err != nil {
if err != nil {
return nil, nil, err return nil, nil, err
} }
err = unlockpt(p) if err := unlockpt(p); err != nil {
if err != nil {
return nil, nil, err return nil, nil, err
} }
slavefd, err := syscall.Open(sname, os.O_RDWR|unix.O_NOCTTY, 0) ptsfd, err := syscall.Open(sname, os.O_RDWR|syscall.O_NOCTTY, 0)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
t := os.NewFile(uintptr(slavefd), sname) t := os.NewFile(uintptr(ptsfd), sname)
// In case of error after this point, make sure we close the pts fd.
defer func() {
if err != nil {
_ = t.Close() // Best effort.
}
}()
// pushing terminal driver STREAMS modules as per pts(7) // pushing terminal driver STREAMS modules as per pts(7)
for _, mod := range([]string{"ptem", "ldterm", "ttcompat"}) { for _, mod := range []string{"ptem", "ldterm", "ttcompat"} {
err = streams_push(t, mod) if err := streamsPush(t, mod); err != nil {
if err != nil {
return nil, nil, err return nil, nil, err
} }
} }
@ -55,73 +64,79 @@ func open() (pty, tty *os.File, err error) {
return p, t, nil return p, t, nil
} }
func minor(x uint64) uint64 {
return x & 0377
}
func ptsdev(fd uintptr) uint64 {
istr := strioctl{ISPTM, 0, 0, nil}
err := ioctl(fd, I_STR, uintptr(unsafe.Pointer(&istr)))
if err != nil {
return NODEV
}
var status unix.Stat_t
err = unix.Fstat(int(fd), &status)
if err != nil {
return NODEV
}
return uint64(minor(status.Rdev))
}
func ptsname(f *os.File) (string, error) { func ptsname(f *os.File) (string, error) {
dev := ptsdev(f.Fd()) dev, err := ptsdev(f.Fd())
if dev == NODEV { if err != nil {
return "", errors.New("not a master pty") return "", err
} }
fn := "/dev/pts/" + strconv.FormatInt(int64(dev), 10) fn := "/dev/pts/" + strconv.FormatInt(int64(dev), 10)
// access(2) creates the slave device (if the pty exists)
// F_OK == 0 (unistd.h) if err := syscall.Access(fn, 0); err != nil {
err := unix.Access(fn, 0)
if err != nil {
return "", err return "", err
} }
return fn, nil return fn, nil
} }
type pt_own struct { func unlockpt(f *os.File) error {
pto_ruid int32 istr := strioctl{
pto_rgid int32 icCmd: UNLKPT,
icTimeout: 0,
icLen: 0,
icDP: nil,
}
return ioctl(f.Fd(), I_STR, uintptr(unsafe.Pointer(&istr)))
}
func minor(x uint64) uint64 { return x & 0377 }
func ptsdev(fd uintptr) (uint64, error) {
istr := strioctl{
icCmd: ISPTM,
icTimeout: 0,
icLen: 0,
icDP: nil,
}
if err := ioctl(fd, I_STR, uintptr(unsafe.Pointer(&istr))); err != nil {
return 0, err
}
var status syscall.Stat_t
if err := syscall.Fstat(int(fd), &status); err != nil {
return 0, err
}
return uint64(minor(status.Rdev)), nil
}
type ptOwn struct {
rUID int32
rGID int32
} }
func grantpt(f *os.File) error { func grantpt(f *os.File) error {
if ptsdev(f.Fd()) == NODEV { if _, err := ptsdev(f.Fd()); err != nil {
return errors.New("not a master pty") return err
} }
var pto pt_own pto := ptOwn{
pto.pto_ruid = int32(os.Getuid()) rUID: int32(os.Getuid()),
// XXX should first attempt to get gid of DEFAULT_TTY_GROUP="tty" // XXX should first attempt to get gid of DEFAULT_TTY_GROUP="tty"
pto.pto_rgid = int32(os.Getgid()) rGID: int32(os.Getgid()),
var istr strioctl }
istr.ic_cmd = OWNERPT istr := strioctl{
istr.ic_timout = 0 icCmd: OWNERPT,
istr.ic_len = int32(unsafe.Sizeof(istr)) icTimeout: 0,
istr.ic_dp = unsafe.Pointer(&pto) icLen: int32(unsafe.Sizeof(strioctl{})),
err := ioctl(f.Fd(), I_STR, uintptr(unsafe.Pointer(&istr))) icDP: unsafe.Pointer(&pto),
if err != nil { }
if err := ioctl(f.Fd(), I_STR, uintptr(unsafe.Pointer(&istr))); err != nil {
return errors.New("access denied") return errors.New("access denied")
} }
return nil return nil
} }
func unlockpt(f *os.File) error { // streamsPush pushes STREAMS modules if not already done so.
istr := strioctl{UNLKPT, 0, 0, nil} func streamsPush(f *os.File, mod string) error {
return ioctl(f.Fd(), I_STR, uintptr(unsafe.Pointer(&istr)))
}
// push STREAMS modules if not already done so
func streams_push(f *os.File, mod string) error {
var err error
buf := []byte(mod) buf := []byte(mod)
// XXX I_FIND is not returning an error when the module // XXX I_FIND is not returning an error when the module
// is already pushed even though truss reports a return // is already pushed even though truss reports a return
// value of 1. A bug in the Go Solaris syscall interface? // value of 1. A bug in the Go Solaris syscall interface?
@ -130,10 +145,8 @@ func streams_push(f *os.File, mod string) error {
// but since we are not using libc or XPG4.2, we should not be // but since we are not using libc or XPG4.2, we should not be
// double-pushing modules // double-pushing modules
err = ioctl(f.Fd(), I_FIND, uintptr(unsafe.Pointer(&buf[0]))) if err := ioctl(f.Fd(), I_FIND, uintptr(unsafe.Pointer(&buf[0]))); err != nil {
if err != nil {
return nil return nil
} }
err = ioctl(f.Fd(), I_PUSH, uintptr(unsafe.Pointer(&buf[0]))) return ioctl(f.Fd(), I_PUSH, uintptr(unsafe.Pointer(&buf[0])))
return err
} }

View File

@ -1,4 +1,5 @@
// +build !linux,!darwin,!freebsd,!dragonfly,!openbsd,!solaris //go:build !linux && !darwin && !freebsd && !dragonfly && !netbsd && !openbsd && !solaris
// +build !linux,!darwin,!freebsd,!dragonfly,!netbsd,!openbsd,!solaris
package pty package pty

29
vendor/github.com/creack/pty/run.go generated vendored
View File

@ -1,5 +1,3 @@
// +build !windows
package pty package pty
import ( import (
@ -13,23 +11,8 @@ import (
// corresponding pty. // corresponding pty.
// //
// Starts the process in a new session and sets the controlling terminal. // Starts the process in a new session and sets the controlling terminal.
func Start(c *exec.Cmd) (pty *os.File, err error) { func Start(cmd *exec.Cmd) (*os.File, error) {
return StartWithSize(c, nil) return StartWithSize(cmd, nil)
}
// StartWithSize assigns a pseudo-terminal tty os.File to c.Stdin, c.Stdout,
// and c.Stderr, calls c.Start, and returns the File of the tty's
// corresponding pty.
//
// This will resize the pty to the specified size before starting the command.
// Starts the process in a new session and sets the controlling terminal.
func StartWithSize(c *exec.Cmd, sz *Winsize) (pty *os.File, err error) {
if c.SysProcAttr == nil {
c.SysProcAttr = &syscall.SysProcAttr{}
}
c.SysProcAttr.Setsid = true
c.SysProcAttr.Setctty = true
return StartWithAttrs(c, sz, c.SysProcAttr)
} }
// StartWithAttrs assigns a pseudo-terminal tty os.File to c.Stdin, c.Stdout, // StartWithAttrs assigns a pseudo-terminal tty os.File to c.Stdin, c.Stdout,
@ -41,16 +24,16 @@ func StartWithSize(c *exec.Cmd, sz *Winsize) (pty *os.File, err error) {
// //
// This should generally not be needed. Used in some edge cases where it is needed to create a pty // This should generally not be needed. Used in some edge cases where it is needed to create a pty
// without a controlling terminal. // without a controlling terminal.
func StartWithAttrs(c *exec.Cmd, sz *Winsize, attrs *syscall.SysProcAttr) (pty *os.File, err error) { func StartWithAttrs(c *exec.Cmd, sz *Winsize, attrs *syscall.SysProcAttr) (*os.File, error) {
pty, tty, err := Open() pty, tty, err := Open()
if err != nil { if err != nil {
return nil, err return nil, err
} }
defer tty.Close() defer func() { _ = tty.Close() }() // Best effort.
if sz != nil { if sz != nil {
if err := Setsize(pty, sz); err != nil { if err := Setsize(pty, sz); err != nil {
pty.Close() _ = pty.Close() // Best effort.
return nil, err return nil, err
} }
} }
@ -67,7 +50,7 @@ func StartWithAttrs(c *exec.Cmd, sz *Winsize, attrs *syscall.SysProcAttr) (pty *
c.SysProcAttr = attrs c.SysProcAttr = attrs
if err := c.Start(); err != nil { if err := c.Start(); err != nil {
_ = pty.Close() _ = pty.Close() // Best effort.
return nil, err return nil, err
} }
return pty, err return pty, err

25
vendor/github.com/creack/pty/start.go generated vendored Normal file
View File

@ -0,0 +1,25 @@
//go:build !windows
// +build !windows
package pty
import (
"os"
"os/exec"
"syscall"
)
// StartWithSize assigns a pseudo-terminal tty os.File to c.Stdin, c.Stdout,
// and c.Stderr, calls c.Start, and returns the File of the tty's
// corresponding pty.
//
// This will resize the pty to the specified size before starting the command.
// Starts the process in a new session and sets the controlling terminal.
func StartWithSize(cmd *exec.Cmd, ws *Winsize) (*os.File, error) {
if cmd.SysProcAttr == nil {
cmd.SysProcAttr = &syscall.SysProcAttr{}
}
cmd.SysProcAttr.Setsid = true
cmd.SysProcAttr.Setctty = true
return StartWithAttrs(cmd, ws, cmd.SysProcAttr)
}

19
vendor/github.com/creack/pty/start_windows.go generated vendored Normal file
View File

@ -0,0 +1,19 @@
//go:build windows
// +build windows
package pty
import (
"os"
"os/exec"
)
// StartWithSize assigns a pseudo-terminal tty os.File to c.Stdin, c.Stdout,
// and c.Stderr, calls c.Start, and returns the File of the tty's
// corresponding pty.
//
// This will resize the pty to the specified size before starting the command.
// Starts the process in a new session and sets the controlling terminal.
func StartWithSize(cmd *exec.Cmd, ws *Winsize) (*os.File, error) {
return nil, ErrUnsupported
}

View File

@ -4,31 +4,31 @@
# Does not actually test the logic, just the compilation so we make sure we don't break code depending on the lib. # Does not actually test the logic, just the compilation so we make sure we don't break code depending on the lib.
echo2() { echo2() {
echo $@ >&2 echo $@ >&2
} }
trap end 0 trap end 0
end() { end() {
[ "$?" = 0 ] && echo2 "Pass." || (echo2 "Fail."; exit 1) [ "$?" = 0 ] && echo2 "Pass." || (echo2 "Fail."; exit 1)
} }
cross() { cross() {
os=$1 os=$1
shift shift
echo2 "Build for $os." echo2 "Build for $os."
for arch in $@; do for arch in $@; do
echo2 " - $os/$arch" echo2 " - $os/$arch"
GOOS=$os GOARCH=$arch go build GOOS=$os GOARCH=$arch go build
done done
echo2 echo2
} }
set -e set -e
cross linux amd64 386 arm arm64 ppc64 ppc64le s390x mips mipsle mips64 mips64le cross linux amd64 386 arm arm64 ppc64 ppc64le s390x mips mipsle mips64 mips64le
cross darwin amd64 386 arm arm64 cross darwin amd64 arm64
cross freebsd amd64 386 arm cross freebsd amd64 386 arm arm64
cross netbsd amd64 386 arm cross netbsd amd64 386 arm arm64
cross openbsd amd64 386 arm arm64 cross openbsd amd64 386 arm arm64
cross dragonfly amd64 cross dragonfly amd64
cross solaris amd64 cross solaris amd64
@ -41,10 +41,24 @@ cross windows amd64 386 arm
# Some os/arch require a different compiler. Run in docker. # Some os/arch require a different compiler. Run in docker.
if ! hash docker; then if ! hash docker; then
# If docker is not present, stop here. # If docker is not present, stop here.
return return
fi fi
echo2 "Build for linux." echo2 "Build for linux."
echo2 " - linux/riscv" echo2 " - linux/riscv"
docker build -t test -f Dockerfile.riscv . docker build -t creack-pty-test -f Dockerfile.riscv .
# Golang dropped support for darwin 32bits since go1.15. Make sure the lib still compile with go1.14 on those archs.
echo2 "Build for darwin (32bits)."
echo2 " - darwin/386"
docker build -t creack-pty-test -f Dockerfile.golang --build-arg=GOVERSION=1.14 --build-arg=GOOS=darwin --build-arg=GOARCH=386 .
echo2 " - darwin/arm"
docker build -t creack-pty-test -f Dockerfile.golang --build-arg=GOVERSION=1.14 --build-arg=GOOS=darwin --build-arg=GOARCH=arm .
# Run a single test for an old go version. Would be best with go1.0, but not available on Dockerhub.
# Using 1.6 as it is the base version for the RISCV compiler.
# Would also be better to run all the tests, not just one, need to refactor this file to allow for specifc archs per version.
echo2 "Build for linux - go1.6."
echo2 " - linux/amd64"
docker build -t creack-pty-test -f Dockerfile.golang --build-arg=GOVERSION=1.6 --build-arg=GOOS=linux --build-arg=GOARCH=amd64 .

64
vendor/github.com/creack/pty/util.go generated vendored
View File

@ -1,64 +0,0 @@
// +build !windows,!solaris
package pty
import (
"os"
"syscall"
"unsafe"
)
// InheritSize applies the terminal size of pty to tty. This should be run
// in a signal handler for syscall.SIGWINCH to automatically resize the tty when
// the pty receives a window size change notification.
func InheritSize(pty, tty *os.File) error {
size, err := GetsizeFull(pty)
if err != nil {
return err
}
err = Setsize(tty, size)
if err != nil {
return err
}
return nil
}
// Setsize resizes t to s.
func Setsize(t *os.File, ws *Winsize) error {
return windowRectCall(ws, t.Fd(), syscall.TIOCSWINSZ)
}
// GetsizeFull returns the full terminal size description.
func GetsizeFull(t *os.File) (size *Winsize, err error) {
var ws Winsize
err = windowRectCall(&ws, t.Fd(), syscall.TIOCGWINSZ)
return &ws, err
}
// Getsize returns the number of rows (lines) and cols (positions
// in each line) in terminal t.
func Getsize(t *os.File) (rows, cols int, err error) {
ws, err := GetsizeFull(t)
return int(ws.Rows), int(ws.Cols), err
}
// Winsize describes the terminal size.
type Winsize struct {
Rows uint16 // ws_row: Number of rows (in cells)
Cols uint16 // ws_col: Number of columns (in cells)
X uint16 // ws_xpixel: Width in pixels
Y uint16 // ws_ypixel: Height in pixels
}
func windowRectCall(ws *Winsize, fd, a2 uintptr) error {
_, _, errno := syscall.Syscall(
syscall.SYS_IOCTL,
fd,
a2,
uintptr(unsafe.Pointer(ws)),
)
if errno != 0 {
return syscall.Errno(errno)
}
return nil
}

View File

@ -1,51 +0,0 @@
//
package pty
import (
"os"
"golang.org/x/sys/unix"
)
const (
TIOCGWINSZ = 21608 // 'T' << 8 | 104
TIOCSWINSZ = 21607 // 'T' << 8 | 103
)
// Winsize describes the terminal size.
type Winsize struct {
Rows uint16 // ws_row: Number of rows (in cells)
Cols uint16 // ws_col: Number of columns (in cells)
X uint16 // ws_xpixel: Width in pixels
Y uint16 // ws_ypixel: Height in pixels
}
// GetsizeFull returns the full terminal size description.
func GetsizeFull(t *os.File) (size *Winsize, err error) {
var wsz *unix.Winsize
wsz, err = unix.IoctlGetWinsize(int(t.Fd()), TIOCGWINSZ)
if err != nil {
return nil, err
} else {
return &Winsize{wsz.Row, wsz.Col, wsz.Xpixel, wsz.Ypixel}, nil
}
}
// Get Windows Size
func Getsize(t *os.File) (rows, cols int, err error) {
var wsz *unix.Winsize
wsz, err = unix.IoctlGetWinsize(int(t.Fd()), TIOCGWINSZ)
if err != nil {
return 80, 25, err
} else {
return int(wsz.Row), int(wsz.Col), nil
}
}
// Setsize resizes t to s.
func Setsize(t *os.File, ws *Winsize) error {
wsz := unix.Winsize{ws.Rows, ws.Cols, ws.X, ws.Y}
return unix.IoctlSetWinsize(int(t.Fd()), TIOCSWINSZ, &wsz)
}

27
vendor/github.com/creack/pty/winsize.go generated vendored Normal file
View File

@ -0,0 +1,27 @@
package pty
import "os"
// InheritSize applies the terminal size of pty to tty. This should be run
// in a signal handler for syscall.SIGWINCH to automatically resize the tty when
// the pty receives a window size change notification.
func InheritSize(pty, tty *os.File) error {
size, err := GetsizeFull(pty)
if err != nil {
return err
}
if err := Setsize(tty, size); err != nil {
return err
}
return nil
}
// Getsize returns the number of rows (lines) and cols (positions
// in each line) in terminal t.
func Getsize(t *os.File) (rows, cols int, err error) {
ws, err := GetsizeFull(t)
if err != nil {
return 0, 0, err
}
return int(ws.Rows), int(ws.Cols), nil
}

35
vendor/github.com/creack/pty/winsize_unix.go generated vendored Normal file
View File

@ -0,0 +1,35 @@
//go:build !windows
// +build !windows
package pty
import (
"os"
"syscall"
"unsafe"
)
// Winsize describes the terminal size.
type Winsize struct {
Rows uint16 // ws_row: Number of rows (in cells)
Cols uint16 // ws_col: Number of columns (in cells)
X uint16 // ws_xpixel: Width in pixels
Y uint16 // ws_ypixel: Height in pixels
}
// Setsize resizes t to s.
func Setsize(t *os.File, ws *Winsize) error {
//nolint:gosec // Expected unsafe pointer for Syscall call.
return ioctl(t.Fd(), syscall.TIOCSWINSZ, uintptr(unsafe.Pointer(ws)))
}
// GetsizeFull returns the full terminal size description.
func GetsizeFull(t *os.File) (size *Winsize, err error) {
var ws Winsize
//nolint:gosec // Expected unsafe pointer for Syscall call.
if err := ioctl(t.Fd(), syscall.TIOCGWINSZ, uintptr(unsafe.Pointer(&ws))); err != nil {
return nil, err
}
return &ws, nil
}

23
vendor/github.com/creack/pty/winsize_unsupported.go generated vendored Normal file
View File

@ -0,0 +1,23 @@
//go:build windows
// +build windows
package pty
import (
"os"
)
// Winsize is a dummy struct to enable compilation on unsupported platforms.
type Winsize struct {
Rows, Cols, X, Y uint16
}
// Setsize resizes t to s.
func Setsize(*os.File, *Winsize) error {
return ErrUnsupported
}
// GetsizeFull returns the full terminal size description.
func GetsizeFull(*os.File) (*Winsize, error) {
return nil, ErrUnsupported
}

View File

@ -1,3 +1,6 @@
//go:build 386
// +build 386
// Created by cgo -godefs - DO NOT EDIT // Created by cgo -godefs - DO NOT EDIT
// cgo -godefs types.go // cgo -godefs types.go

View File

@ -1,3 +1,6 @@
//go:build amd64
// +build amd64
// Created by cgo -godefs - DO NOT EDIT // Created by cgo -godefs - DO NOT EDIT
// cgo -godefs types.go // cgo -godefs types.go

View File

@ -1,3 +1,6 @@
//go:build arm
// +build arm
// Created by cgo -godefs - DO NOT EDIT // Created by cgo -godefs - DO NOT EDIT
// cgo -godefs types.go // cgo -godefs types.go

View File

@ -1,8 +1,9 @@
//go:build arm64
// +build arm64
// Created by cgo -godefs - DO NOT EDIT // Created by cgo -godefs - DO NOT EDIT
// cgo -godefs types.go // cgo -godefs types.go
// +build arm64
package pty package pty
type ( type (

View File

@ -1,3 +1,6 @@
//go:build amd64 && dragonfly
// +build amd64,dragonfly
// Created by cgo -godefs - DO NOT EDIT // Created by cgo -godefs - DO NOT EDIT
// cgo -godefs types_dragonfly.go // cgo -godefs types_dragonfly.go

View File

@ -1,3 +1,6 @@
//go:build 386 && freebsd
// +build 386,freebsd
// Created by cgo -godefs - DO NOT EDIT // Created by cgo -godefs - DO NOT EDIT
// cgo -godefs types_freebsd.go // cgo -godefs types_freebsd.go

View File

@ -1,3 +1,6 @@
//go:build amd64 && freebsd
// +build amd64,freebsd
// Created by cgo -godefs - DO NOT EDIT // Created by cgo -godefs - DO NOT EDIT
// cgo -godefs types_freebsd.go // cgo -godefs types_freebsd.go

View File

@ -1,3 +1,6 @@
//go:build arm && freebsd
// +build arm,freebsd
// Created by cgo -godefs - DO NOT EDIT // Created by cgo -godefs - DO NOT EDIT
// cgo -godefs types_freebsd.go // cgo -godefs types_freebsd.go

View File

@ -1,3 +1,6 @@
//go:build arm64 && freebsd
// +build arm64,freebsd
// Code generated by cmd/cgo -godefs; DO NOT EDIT. // Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs types_freebsd.go // cgo -godefs types_freebsd.go

14
vendor/github.com/creack/pty/ztypes_freebsd_ppc64.go generated vendored Normal file
View File

@ -0,0 +1,14 @@
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs types_freebsd.go
package pty
const (
_C_SPECNAMELEN = 0x3f
)
type fiodgnameArg struct {
Len int32
Pad_cgo_0 [4]byte
Buf *byte
}

12
vendor/github.com/creack/pty/ztypes_loong64.go generated vendored Normal file
View File

@ -0,0 +1,12 @@
//go:build loong64
// +build loong64
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs types.go
package pty
type (
_C_int int32
_C_uint uint32
)

View File

@ -1,9 +1,10 @@
//go:build (mips || mipsle || mips64 || mips64le) && linux
// +build mips mipsle mips64 mips64le
// +build linux
// Created by cgo -godefs - DO NOT EDIT // Created by cgo -godefs - DO NOT EDIT
// cgo -godefs types.go // cgo -godefs types.go
// +build linux
// +build mips mipsle mips64 mips64le
package pty package pty
type ( type (

View File

@ -0,0 +1,17 @@
//go:build (386 || amd64 || arm || arm64) && netbsd
// +build 386 amd64 arm arm64
// +build netbsd
package pty
type ptmget struct {
Cfd int32
Sfd int32
Cn [1024]int8
Sn [1024]int8
}
var (
ioctl_TIOCPTSNAME = 0x48087448
ioctl_TIOCGRANTPT = 0x20007447
)

View File

@ -1,13 +1,14 @@
//go:build (386 || amd64 || arm || arm64 || mips64) && openbsd
// +build 386 amd64 arm arm64 mips64
// +build openbsd // +build openbsd
// +build 386 amd64 arm arm64
package pty package pty
type ptmget struct { type ptmget struct {
Cfd int32 Cfd int32
Sfd int32 Sfd int32
Cn [16]int8 Cn [16]int8
Sn [16]int8 Sn [16]int8
} }
var ioctl_PTMGET = 0x40287401 var ioctl_PTMGET = 0x40287401

View File

@ -1,3 +1,4 @@
//go:build ppc64
// +build ppc64 // +build ppc64
// Created by cgo -godefs - DO NOT EDIT // Created by cgo -godefs - DO NOT EDIT

View File

@ -1,3 +1,4 @@
//go:build ppc64le
// +build ppc64le // +build ppc64le
// Created by cgo -godefs - DO NOT EDIT // Created by cgo -godefs - DO NOT EDIT

View File

@ -1,8 +1,9 @@
//go:build riscv || riscv64
// +build riscv riscv64
// Code generated by cmd/cgo -godefs; DO NOT EDIT. // Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs types.go // cgo -godefs types.go
// +build riscv riscv64
package pty package pty
type ( type (

View File

@ -1,3 +1,4 @@
//go:build s390x
// +build s390x // +build s390x
// Created by cgo -godefs - DO NOT EDIT // Created by cgo -godefs - DO NOT EDIT

2
vendor/modules.txt vendored
View File

@ -18,7 +18,7 @@ github.com/containerd/containerd/errdefs
github.com/containerd/containerd/log github.com/containerd/containerd/log
github.com/containerd/containerd/pkg/userns github.com/containerd/containerd/pkg/userns
github.com/containerd/containerd/platforms github.com/containerd/containerd/platforms
# github.com/creack/pty v1.1.11 # github.com/creack/pty v1.1.18
## explicit; go 1.13 ## explicit; go 1.13
github.com/creack/pty github.com/creack/pty
# github.com/docker/distribution v2.8.1+incompatible # github.com/docker/distribution v2.8.1+incompatible