mirror of https://github.com/docker/cli.git
vendor: github.com/creack/pty v1.1.21
full diff: https://github.com/creack/pty/compare/v1.18.0...v1.21.0 Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
4b06a93c5e
commit
1ebc233b4b
|
@ -9,7 +9,7 @@ go 1.19
|
|||
require (
|
||||
dario.cat/mergo v1.0.0
|
||||
github.com/containerd/containerd v1.7.11
|
||||
github.com/creack/pty v1.1.18
|
||||
github.com/creack/pty v1.1.21
|
||||
github.com/distribution/reference v0.5.0
|
||||
github.com/docker/distribution v2.8.3+incompatible
|
||||
github.com/docker/docker v25.0.0-rc.1+incompatible
|
||||
|
|
|
@ -43,8 +43,8 @@ github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3
|
|||
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
|
||||
github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
|
||||
github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0=
|
||||
github.com/creack/pty v1.1.21/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.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
|
|
|
@ -0,0 +1,324 @@
|
|||
---
|
||||
# Reference: https://golangci-lint.run/usage/configuration/
|
||||
run:
|
||||
timeout: 5m
|
||||
# modules-download-mode: vendor
|
||||
|
||||
# Include test files.
|
||||
tests: true
|
||||
|
||||
skip-dirs: []
|
||||
|
||||
skip-files: []
|
||||
|
||||
output:
|
||||
# colored-line-number|line-number|json|tab|checkstyle|code-climate, default is "colored-line-number".
|
||||
format: colored-line-number
|
||||
print-issued-lines: true
|
||||
print-linter-name: true
|
||||
|
||||
# Linter specific settings. See below in the `linter.enable` section for details on what each linter is doing.
|
||||
linters-settings:
|
||||
dogsled:
|
||||
# Checks assignments with too many blank identifiers. Default is 2.
|
||||
max-blank-identifiers: 2
|
||||
|
||||
dupl:
|
||||
# Tokens count to trigger issue.
|
||||
threshold: 150
|
||||
|
||||
errcheck:
|
||||
# Report about not checking of errors in type assertions: `a := b.(MyStruct)`.
|
||||
# Enabled as this is often overlooked by developers.
|
||||
check-type-assertions: true
|
||||
# Report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`.
|
||||
# Disabled as we consider that if the developer did type `_`, it was on purpose.
|
||||
# Note that while this isn't enforced by the linter, each and every case of ignored error should
|
||||
# be accompanied with a comment explaining why that error is being discarded.
|
||||
check-blank: false
|
||||
|
||||
exhaustive:
|
||||
# Indicates that switch statements are to be considered exhaustive if a
|
||||
# 'default' case is present, even if all enum members aren't listed in the
|
||||
# switch.
|
||||
default-signifies-exhaustive: false
|
||||
|
||||
funlen:
|
||||
# funlen checks the number of lines/statements in a function.
|
||||
# While is is always best to keep functions short for readability, maintainability and testing,
|
||||
# the default are a bit too strict (60 lines / 40 statements), increase it to be more flexible.
|
||||
lines: 160
|
||||
statements: 70
|
||||
|
||||
# NOTE: We don't set `gci` for import order as it supports only one prefix. Use `goimports.local-prefixes` instead.
|
||||
|
||||
gocognit:
|
||||
# Minimal code complexity to report, defaults to 30 in gocognit, defaults 10 in golangci.
|
||||
# Use 15 as it allows for some flexibility while preventing too much complexity.
|
||||
# NOTE: Similar to gocyclo.
|
||||
min-complexity: 35
|
||||
|
||||
nestif:
|
||||
# Minimal complexity of if statements to report.
|
||||
min-complexity: 8
|
||||
|
||||
goconst:
|
||||
# Minimal length of string constant.
|
||||
min-len: 4
|
||||
# Minimal occurrences count to trigger.
|
||||
# Increase the default from 3 to 5 as small number of const usage can reduce readability instead of improving it.
|
||||
min-occurrences: 5
|
||||
|
||||
gocritic:
|
||||
# Which checks should be disabled; can't be combined with 'enabled-checks'.
|
||||
# See https://go-critic.github.io/overview#checks-overview
|
||||
# To check which checks are enabled run `GL_DEBUG=gocritic golangci-lint run`
|
||||
disabled-checks:
|
||||
- hugeParam # Very strict check on the size of variables being copied. Too strict for most developer.
|
||||
# Enable multiple checks by tags, run `GL_DEBUG=gocritic golangci-lint run` to see all tags and checks.
|
||||
# Empty list by default. See https://github.com/go-critic/go-critic#usage -> section "Tags".
|
||||
enabled-tags:
|
||||
- diagnostic
|
||||
- style
|
||||
- opinionated
|
||||
- performance
|
||||
settings:
|
||||
rangeValCopy:
|
||||
sizeThreshold: 1024 # Increase the allowed copied bytes in range.
|
||||
|
||||
cyclop:
|
||||
max-complexity: 35
|
||||
|
||||
gocyclo:
|
||||
# Similar check as gocognit.
|
||||
# NOTE: We might be able to remove this linter as it is redundant with gocyclo. It is in golangci-lint, so we keep it for now.
|
||||
min-complexity: 35
|
||||
|
||||
godot:
|
||||
# Check all top-level comments, not only declarations.
|
||||
check-all: true
|
||||
|
||||
gofmt:
|
||||
# simplify code: gofmt with `-s` option.
|
||||
simplify: true
|
||||
|
||||
# NOTE: the goheader settings are set per-project.
|
||||
|
||||
goimports:
|
||||
# Put imports beginning with prefix after 3rd-party packages.
|
||||
# It's a comma-separated list of prefixes.
|
||||
local-prefixes: "github.com/creack/pty"
|
||||
|
||||
golint:
|
||||
# Minimal confidence for issues, default is 0.8.
|
||||
min-confidence: 0.8
|
||||
|
||||
gosimple:
|
||||
# Select the Go version to target. The default is '1.13'.
|
||||
go: "1.18"
|
||||
# https://staticcheck.io/docs/options#checks
|
||||
checks: ["all"]
|
||||
|
||||
gosec:
|
||||
|
||||
govet:
|
||||
# Enable all available checks from go vet.
|
||||
enable-all: false
|
||||
# Report about shadowed variables.
|
||||
check-shadowing: true
|
||||
|
||||
# NOTE: depguard is disabled as it is very slow and made redundant by gomodguard.
|
||||
|
||||
lll:
|
||||
# Make sure everyone is on the same level, fix the tab width to go's default.
|
||||
tab-width: 8
|
||||
# Increase the default max line length to give more flexibility. Forcing newlines can reduce readability instead of improving it.
|
||||
line-length: 180
|
||||
|
||||
misspell:
|
||||
locale: US
|
||||
ignore-words:
|
||||
|
||||
nakedret:
|
||||
# Make an issue if func has more lines of code than this setting and it has naked returns; default is 30.
|
||||
# NOTE: Consider setting this to 1 to prevent naked returns.
|
||||
max-func-lines: 30
|
||||
|
||||
nolintlint:
|
||||
# Prevent ununsed directive to avoid stale comments.
|
||||
allow-unused: false
|
||||
# Require an explanation of nonzero length after each nolint directive.
|
||||
require-explanation: true
|
||||
# Exclude following linters from requiring an explanation.
|
||||
# NOTE: It is strongly discouraged to put anything in there.
|
||||
allow-no-explanation: []
|
||||
# Enable to require nolint directives to mention the specific linter being suppressed. This ensurce the developer understand the reason being the error.
|
||||
require-specific: true
|
||||
|
||||
prealloc:
|
||||
# NOTE: For most programs usage of prealloc will be a premature optimization.
|
||||
# Keep thing simple, pre-alloc what is obvious and profile the program for more complex scenarios.
|
||||
#
|
||||
simple: true # Checkonly on simple loops that have no returns/breaks/continues/gotos in them.
|
||||
range-loops: true # Check range loops, true by default
|
||||
for-loops: false # Check suggestions on for loops, false by default
|
||||
|
||||
rowserrcheck:
|
||||
packages: []
|
||||
|
||||
staticcheck:
|
||||
# Select the Go version to target. The default is '1.13'.
|
||||
go: "1.18"
|
||||
# https://staticcheck.io/docs/options#checks
|
||||
checks: ["all"]
|
||||
|
||||
stylecheck:
|
||||
# Select the Go version to target. The default is '1.13'.
|
||||
go: "1.18"
|
||||
# https://staticcheck.io/docs/options#checks
|
||||
checks: ["all"] # "-ST1000", "-ST1003", "-ST1016", "-ST1020", "-ST1021", "-ST1022"]
|
||||
|
||||
tagliatelle:
|
||||
# Check the struck tag name case.
|
||||
case:
|
||||
# Use the struct field name to check the name of the struct tag.
|
||||
use-field-name: false
|
||||
rules:
|
||||
# Any struct tag type can be used.
|
||||
# support string case: `camel`, `pascal`, `kebab`, `snake`, `goCamel`, `goPascal`, `goKebab`, `goSnake`, `upper`, `lower`
|
||||
json: snake
|
||||
firestore: camel
|
||||
yaml: camel
|
||||
xml: camel
|
||||
bson: camel
|
||||
avro: snake
|
||||
mapstructure: kebab
|
||||
envconfig: upper
|
||||
|
||||
unparam:
|
||||
# Don't create an error if an exported code have static params being used. It is often expected in libraries.
|
||||
# NOTE: It would be nice if this linter would differentiate between a main package and a lib.
|
||||
check-exported: true
|
||||
|
||||
unused: {}
|
||||
|
||||
whitespace:
|
||||
multi-if: false # Enforces newlines (or comments) after every multi-line if statement
|
||||
multi-func: false # Enforces newlines (or comments) after every multi-line function signature
|
||||
|
||||
# Run `golangci-lint help linters` to get the full list of linter with their description.
|
||||
linters:
|
||||
disable-all: true
|
||||
# NOTE: enable-all is deprecated because too many people don't pin versions...
|
||||
# We still require explicit documentation on why some linters are disabled.
|
||||
# disable:
|
||||
# - depguard # Go linter that checks if package imports are in a list of acceptable packages [fast: true, auto-fix: false]
|
||||
# - exhaustivestruct # Checks if all struct's fields are initialized [fast: true, auto-fix: false]
|
||||
# - forbidigo # Forbids identifiers [fast: true, auto-fix: false]
|
||||
# - gci # Gci control golang package import order and make it always deterministic. [fast: true, auto-fix: true]
|
||||
# - godox # Tool for detection of FIXME, TODO and other comment keywords [fast: true, auto-fix: false]
|
||||
# - goerr113 # Golang linter to check the errors handling expressions [fast: true, auto-fix: false]
|
||||
# - golint # Golint differs from gofmt. Gofmt reformats Go source code, whereas golint prints out style mistakes [fast: false, auto-fix: false]
|
||||
# - gomnd # An analyzer to detect magic numbers. [fast: true, auto-fix: false]
|
||||
# - gomoddirectives # Manage the use of 'replace', 'retract', and 'excludes' directives in go.mod. [fast: true, auto-fix: false]
|
||||
# - interfacer # Linter that suggests narrower interface types [fast: false, auto-fix: false]
|
||||
# - maligned # Tool to detect Go structs that would take less memory if their fields were sorted [fast: false, auto-fix: false]
|
||||
# - nlreturn # nlreturn checks for a new line before return and branch statements to increase code clarity [fast: true, auto-fix: false]
|
||||
# - scopelint # Scopelint checks for unpinned variables in go programs [fast: true, auto-fix: false]
|
||||
# - wrapcheck # Checks that errors returned from external packages are wrapped [fast: false, auto-fix: false]
|
||||
# - wsl # Whitespace Linter - Forces you to use empty lines! [fast: true, auto-fix: false]
|
||||
|
||||
# disable-reasons:
|
||||
# - depguard # Checks whitelisted/blacklisted import path, but runs way too slow. Not that useful.
|
||||
# - exhaustivestruct # Good concept, but not mature enough (errors on not assignable fields like locks) and too noisy when using AWS SDK as most fields are unused.
|
||||
# - forbidigo # Great idea, but too strict out of the box. Probably will re-enable soon.
|
||||
# - gci # Conflicts with goimports/gofumpt.
|
||||
# - godox # Don't fail when finding TODO, FIXME, etc.
|
||||
# - goerr113 # Too many false positives.
|
||||
# - golint # Deprecated (since v1.41.0) due to: The repository of the linter has been archived by the owner. Replaced by revive.
|
||||
# - gomnd # Checks for magic numbers. Disabled due to too many false positives not configurable (03/01/2020 v1.23.7).
|
||||
# - gomoddirectives # Doesn't support //nolint to whitelist.
|
||||
# - interfacer # Deprecated (since v1.38.0) due to: The repository of the linter has been archived by the owner.
|
||||
# - maligned # Deprecated (since v1.38.0) due to: The repository of the linter has been archived by the owner. Replaced by govet 'fieldalignment'.
|
||||
# - nlreturn # Actually reduces readability in most cases.
|
||||
# - scopelint # Deprecated (since v1.39.0) due to: The repository of the linter has been deprecated by the owner. Replaced by exportloopref.
|
||||
# - wrapcheck # Good concept, but always warns for http coded errors. Need to re-enable and whitelist our error package.
|
||||
# - wsl # Forces to add newlines around blocks. Lots of false positives, not that useful.
|
||||
|
||||
enable:
|
||||
- asciicheck # Simple linter to check that your code does not contain non-ASCII identifiers [fast: true, auto-fix: false]
|
||||
- bodyclose # checks whether HTTP response body is closed successfully [fast: false, auto-fix: false]
|
||||
- cyclop # checks function and package cyclomatic complexity [fast: false, auto-fix: false]
|
||||
- dogsled # Checks assignments with too many blank identifiers (e.g. x, _, _, _, := f()) [fast: true, auto-fix: false]
|
||||
- dupl # Tool for code clone detection [fast: true, auto-fix: false]
|
||||
- durationcheck # check for two durations multiplied together [fast: false, auto-fix: false]
|
||||
- errcheck # Errcheck is a program for checking for unchecked errors in go programs. These unchecked errors can be critical bugs in some cases [fast: false, auto-fix: false]
|
||||
- errname # Checks that sentinel errors are prefixed with the `Err` and error types are suffixed with the `Error`. [fast: false, auto-fix: false]
|
||||
- errorlint # go-errorlint is a source code linter for Go software that can be used to find code that will cause problems with the error wrapping scheme introduced in Go 1.13. [fast: false, auto-fix: false]
|
||||
- exhaustive # check exhaustiveness of enum switch statements [fast: false, auto-fix: false]
|
||||
- exportloopref # checks for pointers to enclosing loop variables [fast: false, auto-fix: false]
|
||||
- forcetypeassert # finds forced type assertions [fast: true, auto-fix: false]
|
||||
- funlen # Tool for detection of long functions [fast: true, auto-fix: false]
|
||||
- gochecknoglobals # check that no global variables exist [fast: true, auto-fix: false]
|
||||
- gochecknoinits # Checks that no init functions are present in Go code [fast: true, auto-fix: false]
|
||||
- gocognit # Computes and checks the cognitive complexity of functions [fast: true, auto-fix: false]
|
||||
- goconst # Finds repeated strings that could be replaced by a constant [fast: true, auto-fix: false]
|
||||
- gocritic # Provides many diagnostics that check for bugs, performance and style issues. [fast: false, auto-fix: false]
|
||||
- gocyclo # Computes and checks the cyclomatic complexity of functions [fast: true, auto-fix: false]
|
||||
- godot # Check if comments end in a period [fast: true, auto-fix: true]
|
||||
- gofmt # Gofmt checks whether code was gofmt-ed. By default this tool runs with -s option to check for code simplification [fast: true, auto-fix: true]
|
||||
- gofumpt # Gofumpt checks whether code was gofumpt-ed. [fast: true, auto-fix: true]
|
||||
- goheader # Checks is file header matches to pattern [fast: true, auto-fix: false]
|
||||
- goimports # Goimports does everything that gofmt does. Additionally it checks unused imports [fast: true, auto-fix: true]
|
||||
- gomodguard # Allow and block list linter for direct Go module dependencies. This is different from depguard where there are different block types for example version constraints and module recommendations. [fast: true, auto-fix: false]
|
||||
- goprintffuncname # Checks that printf-like functions are named with `f` at the end [fast: true, auto-fix: false]
|
||||
- gosec # (gas): Inspects source code for security problems [fast: false, auto-fix: false]
|
||||
- gosimple # (megacheck): Linter for Go source code that specializes in simplifying a code [fast: false, auto-fix: false]
|
||||
- govet # (vet, vetshadow): Vet examines Go source code and reports suspicious constructs, such as Printf calls whose arguments do not align with the format string [fast: false, auto-fix: false]
|
||||
- importas # Enforces consistent import aliases [fast: false, auto-fix: false]
|
||||
- ineffassign # Detects when assignments to existing variables are not used [fast: true, auto-fix: false]
|
||||
- lll # Reports long lines [fast: true, auto-fix: false]
|
||||
- makezero # Finds slice declarations with non-zero initial length [fast: false, auto-fix: false]
|
||||
- misspell # Finds commonly misspelled English words in comments [fast: true, auto-fix: true]
|
||||
- nakedret # Finds naked returns in functions greater than a specified function length [fast: true, auto-fix: false]
|
||||
- nestif # Reports deeply nested if statements [fast: true, auto-fix: false]
|
||||
- nilerr # Finds the code that returns nil even if it checks that the error is not nil. [fast: false, auto-fix: false]
|
||||
- noctx # noctx finds sending http request without context.Context [fast: false, auto-fix: false]
|
||||
- nolintlint # Reports ill-formed or insufficient nolint directives [fast: true, auto-fix: false]
|
||||
- paralleltest # paralleltest detects missing usage of t.Parallel() method in your Go test [fast: true, auto-fix: false]
|
||||
- prealloc # Finds slice declarations that could potentially be preallocated [fast: true, auto-fix: false]
|
||||
- predeclared # find code that shadows one of Go's predeclared identifiers [fast: true, auto-fix: false]
|
||||
- promlinter # Check Prometheus metrics naming via promlint [fast: true, auto-fix: false]
|
||||
- revive # Fast, configurable, extensible, flexible, and beautiful linter for Go. Drop-in replacement of golint. [fast: false, auto-fix: false]
|
||||
# Disabled due to generic. Work in progress upstream.
|
||||
# - rowserrcheck # checks whether Err of rows is checked successfully [fast: false, auto-fix: false]
|
||||
# Disabled due to generic. Work in progress upstream.
|
||||
# - sqlclosecheck # Checks that sql.Rows and sql.Stmt are closed. [fast: false, auto-fix: false]
|
||||
- staticcheck # (megacheck): Staticcheck is a go vet on steroids, applying a ton of static analysis checks [fast: false, auto-fix: false]
|
||||
- stylecheck # Stylecheck is a replacement for golint [fast: false, auto-fix: false]
|
||||
# Disabled due to generic. Work in progress upstream.
|
||||
# - tagliatelle # Checks the struct tags. [fast: true, auto-fix: false]
|
||||
# - testpackage # linter that makes you use a separate _test package [fast: true, auto-fix: false]
|
||||
- thelper # thelper detects golang test helpers without t.Helper() call and checks the consistency of test helpers [fast: false, auto-fix: false]
|
||||
- tparallel # tparallel detects inappropriate usage of t.Parallel() method in your Go test codes [fast: false, auto-fix: false]
|
||||
- typecheck # Like the front-end of a Go compiler, parses and type-checks Go code [fast: false, auto-fix: false]
|
||||
- unconvert # Remove unnecessary type conversions [fast: false, auto-fix: false]
|
||||
- unparam # Reports unused function parameters [fast: false, auto-fix: false]
|
||||
# Disabled due to way too many false positive in go1.20.
|
||||
# - unused # (megacheck): Checks Go code for unused constants, variables, functions and types [fast: false, auto-fix: false]
|
||||
# Disabled due to generic. Work in progress upstream.
|
||||
# - wastedassign # wastedassign finds wasted assignment statements. [fast: false, auto-fix: false]
|
||||
- whitespace # Tool for detection of leading and trailing whitespace [fast: true, auto-fix: true]
|
||||
|
||||
issues:
|
||||
exclude:
|
||||
# Allow shadowing of 'err'.
|
||||
- 'shadow: declaration of "err" shadows declaration'
|
||||
# Allow shadowing of `ctx`.
|
||||
- 'shadow: declaration of "ctx" shadows declaration'
|
||||
# Maximum issues count per one linter. Set to 0 to disable. Default is 50.
|
||||
max-per-linter: 10
|
||||
# Disable default excludes. Always be explicit on what we exclude.
|
||||
exclude-use-default: false
|
||||
# Exclude some linters from running on tests files.
|
||||
exclude-rules: []
|
|
@ -1,4 +1,4 @@
|
|||
ARG GOVERSION=1.14
|
||||
ARG GOVERSION=1.18.2
|
||||
FROM golang:${GOVERSION}
|
||||
|
||||
# Set base env.
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
# NOTE: Using 1.13 as a base to build the RISCV compiler, the resulting version is based on go1.6.
|
||||
FROM golang:1.13
|
||||
|
||||
# Clone and complie a riscv compatible version of the go compiler.
|
||||
RUN git clone https://review.gerrithub.io/riscv/riscv-go /riscv-go
|
||||
# riscvdev branch HEAD as of 2019-06-29.
|
||||
RUN cd /riscv-go && git checkout 04885fddd096d09d4450726064d06dd107e374bf
|
||||
ENV PATH=/riscv-go/misc/riscv:/riscv-go/bin:$PATH
|
||||
RUN cd /riscv-go/src && GOROOT_BOOTSTRAP=$(go env GOROOT) ./make.bash
|
||||
ENV GOROOT=/riscv-go
|
||||
|
||||
# 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
|
||||
ADD . .
|
||||
|
||||
# Build the lib.
|
||||
RUN go build
|
|
@ -1,19 +1,28 @@
|
|||
//go:build !windows && !solaris && !aix
|
||||
// +build !windows,!solaris,!aix
|
||||
//go:build !windows && go1.12
|
||||
// +build !windows,go1.12
|
||||
|
||||
package pty
|
||||
|
||||
import "syscall"
|
||||
import "os"
|
||||
|
||||
const (
|
||||
TIOCGWINSZ = syscall.TIOCGWINSZ
|
||||
TIOCSWINSZ = syscall.TIOCSWINSZ
|
||||
)
|
||||
func ioctl(f *os.File, cmd, ptr uintptr) error {
|
||||
return ioctlInner(f.Fd(), cmd, ptr) // Fall back to blocking io.
|
||||
}
|
||||
|
||||
func ioctl(fd, cmd, ptr uintptr) error {
|
||||
_, _, e := syscall.Syscall(syscall.SYS_IOCTL, fd, cmd, ptr)
|
||||
if e != 0 {
|
||||
// NOTE: Unused. Keeping for reference.
|
||||
func ioctlNonblock(f *os.File, cmd, ptr uintptr) error {
|
||||
sc, e := f.SyscallConn()
|
||||
if e != nil {
|
||||
return ioctlInner(f.Fd(), cmd, ptr) // Fall back to blocking io (old behavior).
|
||||
}
|
||||
|
||||
ch := make(chan error, 1)
|
||||
defer close(ch)
|
||||
|
||||
e = sc.Control(func(fd uintptr) { ch <- ioctlInner(fd, cmd, ptr) })
|
||||
if e != nil {
|
||||
return e
|
||||
}
|
||||
return nil
|
||||
e = <-ch
|
||||
return e
|
||||
}
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
//go:build !windows && !solaris && !aix
|
||||
// +build !windows,!solaris,!aix
|
||||
|
||||
package pty
|
||||
|
||||
import "syscall"
|
||||
|
||||
// Local syscall const values.
|
||||
const (
|
||||
TIOCGWINSZ = syscall.TIOCGWINSZ
|
||||
TIOCSWINSZ = syscall.TIOCSWINSZ
|
||||
)
|
||||
|
||||
func ioctlInner(fd, cmd, ptr uintptr) error {
|
||||
_, _, e := syscall.Syscall(syscall.SYS_IOCTL, fd, cmd, ptr)
|
||||
if e != 0 {
|
||||
return e
|
||||
}
|
||||
return nil
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
//go:build !windows && !go1.12
|
||||
// +build !windows,!go1.12
|
||||
|
||||
package pty
|
||||
|
||||
import "os"
|
||||
|
||||
func ioctl(f *os.File, cmd, ptr uintptr) error {
|
||||
return ioctlInner(f.Fd(), cmd, ptr) // fall back to blocking io (old behavior)
|
||||
}
|
|
@ -40,7 +40,7 @@ type strioctl struct {
|
|||
// 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 ioctlInner(fd, cmd, ptr uintptr) error {
|
||||
if _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, fd, cmd, ptr, 0, 0, 0); errno != 0 {
|
||||
return errno
|
||||
}
|
||||
|
|
|
@ -8,6 +8,6 @@ const (
|
|||
TIOCSWINSZ = 0
|
||||
)
|
||||
|
||||
func ioctl(fd, cmd, ptr uintptr) error {
|
||||
func ioctlInner(fd, cmd, ptr uintptr) error {
|
||||
return ErrUnsupported
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@ func open() (pty, tty *os.File, err error) {
|
|||
func ptsname(f *os.File) (string, error) {
|
||||
n := make([]byte, _IOC_PARM_LEN(syscall.TIOCPTYGNAME))
|
||||
|
||||
err := ioctl(f.Fd(), syscall.TIOCPTYGNAME, uintptr(unsafe.Pointer(&n[0])))
|
||||
err := ioctl(f, syscall.TIOCPTYGNAME, uintptr(unsafe.Pointer(&n[0])))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
@ -60,9 +60,9 @@ func ptsname(f *os.File) (string, error) {
|
|||
}
|
||||
|
||||
func grantpt(f *os.File) error {
|
||||
return ioctl(f.Fd(), syscall.TIOCPTYGRANT, 0)
|
||||
return ioctl(f, syscall.TIOCPTYGRANT, 0)
|
||||
}
|
||||
|
||||
func unlockpt(f *os.File) error {
|
||||
return ioctl(f.Fd(), syscall.TIOCPTYUNLK, 0)
|
||||
return ioctl(f, syscall.TIOCPTYUNLK, 0)
|
||||
}
|
||||
|
|
|
@ -45,17 +45,17 @@ func open() (pty, tty *os.File, err error) {
|
|||
}
|
||||
|
||||
func grantpt(f *os.File) error {
|
||||
_, err := isptmaster(f.Fd())
|
||||
_, err := isptmaster(f)
|
||||
return err
|
||||
}
|
||||
|
||||
func unlockpt(f *os.File) error {
|
||||
_, err := isptmaster(f.Fd())
|
||||
_, err := isptmaster(f)
|
||||
return err
|
||||
}
|
||||
|
||||
func isptmaster(fd uintptr) (bool, error) {
|
||||
err := ioctl(fd, syscall.TIOCISPTMASTER, 0)
|
||||
func isptmaster(f *os.File) (bool, error) {
|
||||
err := ioctl(f, syscall.TIOCISPTMASTER, 0)
|
||||
return err == nil, err
|
||||
}
|
||||
|
||||
|
@ -68,7 +68,7 @@ func ptsname(f *os.File) (string, error) {
|
|||
name := make([]byte, _C_SPECNAMELEN)
|
||||
fa := fiodgnameArg{Name: (*byte)(unsafe.Pointer(&name[0])), Len: _C_SPECNAMELEN, Pad_cgo_0: [4]byte{0, 0, 0, 0}}
|
||||
|
||||
err := ioctl(f.Fd(), ioctl_FIODNAME, uintptr(unsafe.Pointer(&fa)))
|
||||
err := ioctl(f, ioctl_FIODNAME, uintptr(unsafe.Pointer(&fa)))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
|
|
@ -44,8 +44,8 @@ func open() (pty, tty *os.File, err error) {
|
|||
return p, t, nil
|
||||
}
|
||||
|
||||
func isptmaster(fd uintptr) (bool, error) {
|
||||
err := ioctl(fd, syscall.TIOCPTMASTER, 0)
|
||||
func isptmaster(f *os.File) (bool, error) {
|
||||
err := ioctl(f, syscall.TIOCPTMASTER, 0)
|
||||
return err == nil, err
|
||||
}
|
||||
|
||||
|
@ -55,7 +55,7 @@ var (
|
|||
)
|
||||
|
||||
func ptsname(f *os.File) (string, error) {
|
||||
master, err := isptmaster(f.Fd())
|
||||
master, err := isptmaster(f)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
@ -68,7 +68,7 @@ func ptsname(f *os.File) (string, error) {
|
|||
buf = make([]byte, n)
|
||||
arg = fiodgnameArg{Len: n, Buf: (*byte)(unsafe.Pointer(&buf[0]))}
|
||||
)
|
||||
if err := ioctl(f.Fd(), ioctlFIODGNAME, uintptr(unsafe.Pointer(&arg))); err != nil {
|
||||
if err := ioctl(f, ioctlFIODGNAME, uintptr(unsafe.Pointer(&arg))); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ func open() (pty, tty *os.File, err error) {
|
|||
|
||||
func ptsname(f *os.File) (string, error) {
|
||||
var n _C_uint
|
||||
err := ioctl(f.Fd(), syscall.TIOCGPTN, uintptr(unsafe.Pointer(&n))) //nolint:gosec // Expected unsafe pointer for Syscall call.
|
||||
err := ioctl(f, syscall.TIOCGPTN, uintptr(unsafe.Pointer(&n))) //nolint:gosec // Expected unsafe pointer for Syscall call.
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
@ -49,6 +49,6 @@ func ptsname(f *os.File) (string, error) {
|
|||
|
||||
func unlockpt(f *os.File) error {
|
||||
var u _C_int
|
||||
// use TIOCSPTLCK with a pointer to zero to clear the lock
|
||||
return ioctl(f.Fd(), syscall.TIOCSPTLCK, uintptr(unsafe.Pointer(&u))) //nolint:gosec // Expected unsafe pointer for Syscall call.
|
||||
// use TIOCSPTLCK with a pointer to zero to clear the lock.
|
||||
return ioctl(f, syscall.TIOCSPTLCK, uintptr(unsafe.Pointer(&u))) //nolint:gosec // Expected unsafe pointer for Syscall call.
|
||||
}
|
||||
|
|
|
@ -47,7 +47,7 @@ func ptsname(f *os.File) (string, error) {
|
|||
* 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 {
|
||||
if err := ioctl(f, uintptr(ioctl_TIOCPTSNAME), uintptr(unsafe.Pointer(&ptm))); err != nil {
|
||||
return "", err
|
||||
}
|
||||
name := make([]byte, len(ptm.Sn))
|
||||
|
@ -65,5 +65,5 @@ 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)
|
||||
return ioctl(f, uintptr(ioctl_TIOCGRANTPT), 0)
|
||||
}
|
||||
|
|
|
@ -9,6 +9,17 @@ import (
|
|||
"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):
|
||||
|
@ -25,12 +36,12 @@ func open() (pty, tty *os.File, err error) {
|
|||
defer p.Close()
|
||||
|
||||
var ptm ptmget
|
||||
if err := ioctl(p.Fd(), uintptr(ioctl_PTMGET), uintptr(unsafe.Pointer(&ptm))); err != nil {
|
||||
if err := ioctl(p, 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")
|
||||
pty = os.NewFile(uintptr(ptm.Cfd), cInt8ToString(ptm.Cn[:]))
|
||||
tty = os.NewFile(uintptr(ptm.Sfd), cInt8ToString(ptm.Sn[:]))
|
||||
|
||||
return pty, tty, nil
|
||||
}
|
||||
|
|
|
@ -65,7 +65,7 @@ func open() (pty, tty *os.File, err error) {
|
|||
}
|
||||
|
||||
func ptsname(f *os.File) (string, error) {
|
||||
dev, err := ptsdev(f.Fd())
|
||||
dev, err := ptsdev(f)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
@ -84,12 +84,12 @@ func unlockpt(f *os.File) error {
|
|||
icLen: 0,
|
||||
icDP: nil,
|
||||
}
|
||||
return ioctl(f.Fd(), I_STR, uintptr(unsafe.Pointer(&istr)))
|
||||
return ioctl(f, I_STR, uintptr(unsafe.Pointer(&istr)))
|
||||
}
|
||||
|
||||
func minor(x uint64) uint64 { return x & 0377 }
|
||||
|
||||
func ptsdev(fd uintptr) (uint64, error) {
|
||||
func ptsdev(f *os.File) (uint64, error) {
|
||||
istr := strioctl{
|
||||
icCmd: ISPTM,
|
||||
icTimeout: 0,
|
||||
|
@ -97,14 +97,33 @@ func ptsdev(fd uintptr) (uint64, error) {
|
|||
icDP: nil,
|
||||
}
|
||||
|
||||
if err := ioctl(fd, I_STR, uintptr(unsafe.Pointer(&istr))); err != nil {
|
||||
if err := ioctl(f, 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 {
|
||||
var errors = make(chan error, 1)
|
||||
var results = make(chan uint64, 1)
|
||||
defer close(errors)
|
||||
defer close(results)
|
||||
|
||||
var err error
|
||||
var sc syscall.RawConn
|
||||
sc, err = f.SyscallConn()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return uint64(minor(status.Rdev)), nil
|
||||
err = sc.Control(func(fd uintptr) {
|
||||
var status syscall.Stat_t
|
||||
if err := syscall.Fstat(int(fd), &status); err != nil {
|
||||
results <- 0
|
||||
errors <- err
|
||||
}
|
||||
results <- uint64(minor(status.Rdev))
|
||||
errors <- nil
|
||||
})
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return <-results, <-errors
|
||||
}
|
||||
|
||||
type ptOwn struct {
|
||||
|
@ -113,7 +132,7 @@ type ptOwn struct {
|
|||
}
|
||||
|
||||
func grantpt(f *os.File) error {
|
||||
if _, err := ptsdev(f.Fd()); err != nil {
|
||||
if _, err := ptsdev(f); err != nil {
|
||||
return err
|
||||
}
|
||||
pto := ptOwn{
|
||||
|
@ -127,7 +146,7 @@ func grantpt(f *os.File) error {
|
|||
icLen: int32(unsafe.Sizeof(strioctl{})),
|
||||
icDP: unsafe.Pointer(&pto),
|
||||
}
|
||||
if err := ioctl(f.Fd(), I_STR, uintptr(unsafe.Pointer(&istr))); err != nil {
|
||||
if err := ioctl(f, I_STR, uintptr(unsafe.Pointer(&istr))); err != nil {
|
||||
return errors.New("access denied")
|
||||
}
|
||||
return nil
|
||||
|
@ -145,8 +164,8 @@ func streamsPush(f *os.File, mod string) error {
|
|||
// but since we are not using libc or XPG4.2, we should not be
|
||||
// double-pushing modules
|
||||
|
||||
if err := ioctl(f.Fd(), I_FIND, uintptr(unsafe.Pointer(&buf[0]))); err != nil {
|
||||
if err := ioctl(f, I_FIND, uintptr(unsafe.Pointer(&buf[0]))); err != nil {
|
||||
return nil
|
||||
}
|
||||
return ioctl(f.Fd(), I_PUSH, uintptr(unsafe.Pointer(&buf[0])))
|
||||
return ioctl(f, I_PUSH, uintptr(unsafe.Pointer(&buf[0])))
|
||||
}
|
||||
|
|
|
@ -25,9 +25,9 @@ cross() {
|
|||
|
||||
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 riscv64
|
||||
cross darwin amd64 arm64
|
||||
cross freebsd amd64 386 arm arm64
|
||||
cross freebsd amd64 386 arm arm64 riscv64
|
||||
cross netbsd amd64 386 arm arm64
|
||||
cross openbsd amd64 386 arm arm64
|
||||
cross dragonfly amd64
|
||||
|
@ -45,10 +45,6 @@ if ! hash docker; then
|
|||
return
|
||||
fi
|
||||
|
||||
echo2 "Build for linux."
|
||||
echo2 " - linux/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"
|
||||
|
|
|
@ -10,10 +10,7 @@ func InheritSize(pty, tty *os.File) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Setsize(tty, size); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
return Setsize(tty, size)
|
||||
}
|
||||
|
||||
// Getsize returns the number of rows (lines) and cols (positions
|
||||
|
|
|
@ -11,16 +11,16 @@ import (
|
|||
|
||||
// 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
|
||||
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)))
|
||||
return ioctl(t, syscall.TIOCSWINSZ, uintptr(unsafe.Pointer(ws)))
|
||||
}
|
||||
|
||||
// GetsizeFull returns the full terminal size description.
|
||||
|
@ -28,7 +28,7 @@ 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 {
|
||||
if err := ioctl(t, syscall.TIOCGWINSZ, uintptr(unsafe.Pointer(&ws))); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &ws, nil
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
||||
// cgo -godefs types_freebsd.go
|
||||
|
||||
package pty
|
||||
|
||||
const (
|
||||
_C_SPECNAMELEN = 0x3f
|
||||
)
|
||||
|
||||
type fiodgnameArg struct {
|
||||
Len int32
|
||||
Buf *byte
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
// Created by cgo -godefs - DO NOT EDIT
|
||||
// cgo -godefs types.go
|
||||
|
||||
package pty
|
||||
|
||||
type (
|
||||
_C_int int32
|
||||
_C_uint uint32
|
||||
)
|
|
@ -0,0 +1,12 @@
|
|||
//go:build sparc || sparc64
|
||||
// +build sparc sparc64
|
||||
|
||||
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
||||
// cgo -godefs types.go
|
||||
|
||||
package pty
|
||||
|
||||
type (
|
||||
_C_int int32
|
||||
_C_uint uint32
|
||||
)
|
|
@ -30,7 +30,7 @@ github.com/containerd/containerd/platforms
|
|||
# github.com/containerd/log v0.1.0
|
||||
## explicit; go 1.20
|
||||
github.com/containerd/log
|
||||
# github.com/creack/pty v1.1.18
|
||||
# github.com/creack/pty v1.1.21
|
||||
## explicit; go 1.13
|
||||
github.com/creack/pty
|
||||
# github.com/distribution/reference v0.5.0
|
||||
|
|
Loading…
Reference in New Issue