aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com
diff options
context:
space:
mode:
authorPaul Holzinger <pholzing@redhat.com>2022-07-06 14:26:11 +0200
committerPaul Holzinger <pholzing@redhat.com>2022-07-06 16:57:07 +0200
commitcc6faddfaaa7dad7e07e3113e14328d625636ace (patch)
tree9fff638b7cbad8a65d7321be32fcc480a5a7bdc4 /vendor/github.com
parent49df3cc5cb7e6a1d9e28cacfa86562abbdf48fd9 (diff)
downloadpodman-cc6faddfaaa7dad7e07e3113e14328d625636ace.tar.gz
podman-cc6faddfaaa7dad7e07e3113e14328d625636ace.tar.bz2
podman-cc6faddfaaa7dad7e07e3113e14328d625636ace.zip
use c/common code for resize and CopyDetachable
Since conmon-rs also uses this code we moved it to c/common. Now podman should has this also to prevent duplication. [NO NEW TESTS NEEDED] Signed-off-by: Paul Holzinger <pholzing@redhat.com>
Diffstat (limited to 'vendor/github.com')
-rw-r--r--vendor/github.com/containers/common/pkg/resize/resize.go45
-rw-r--r--vendor/github.com/containers/common/pkg/util/copy.go57
2 files changed, 102 insertions, 0 deletions
diff --git a/vendor/github.com/containers/common/pkg/resize/resize.go b/vendor/github.com/containers/common/pkg/resize/resize.go
new file mode 100644
index 000000000..9a2afcf73
--- /dev/null
+++ b/vendor/github.com/containers/common/pkg/resize/resize.go
@@ -0,0 +1,45 @@
+/*
+Copyright 2015 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package resize
+
+// TerminalSize represents the width and height of a terminal.
+type TerminalSize struct {
+ Width uint16
+ Height uint16
+}
+
+// HandleResizing spawns a goroutine that processes the resize channel, calling resizeFunc for each
+// TerminalSize received from the channel. The resize channel must be closed elsewhere to stop the
+// goroutine.
+func HandleResizing(resize <-chan TerminalSize, resizeFunc func(size TerminalSize)) {
+ if resize == nil {
+ return
+ }
+
+ go func() {
+ for {
+ size, ok := <-resize
+ if !ok {
+ return
+ }
+ if size.Height < 1 || size.Width < 1 {
+ continue
+ }
+ resizeFunc(size)
+ }
+ }()
+}
diff --git a/vendor/github.com/containers/common/pkg/util/copy.go b/vendor/github.com/containers/common/pkg/util/copy.go
new file mode 100644
index 000000000..a45b82fc9
--- /dev/null
+++ b/vendor/github.com/containers/common/pkg/util/copy.go
@@ -0,0 +1,57 @@
+package util
+
+import (
+ "errors"
+ "io"
+)
+
+// ErrDetach indicates that an attach session was manually detached by
+// the user.
+var ErrDetach = errors.New("detached from container")
+
+// CopyDetachable is similar to io.Copy but support a detach key sequence to break out.
+func CopyDetachable(dst io.Writer, src io.Reader, keys []byte) (written int64, err error) {
+ buf := make([]byte, 32*1024)
+ for {
+ nr, er := src.Read(buf)
+ if nr > 0 {
+ preservBuf := []byte{}
+ for i, key := range keys {
+ preservBuf = append(preservBuf, buf[0:nr]...)
+ if nr != 1 || buf[0] != key {
+ break
+ }
+ if i == len(keys)-1 {
+ return 0, ErrDetach
+ }
+ nr, er = src.Read(buf)
+ }
+ var nw int
+ var ew error
+ if len(preservBuf) > 0 {
+ nw, ew = dst.Write(preservBuf)
+ nr = len(preservBuf)
+ } else {
+ nw, ew = dst.Write(buf[0:nr])
+ }
+ if nw > 0 {
+ written += int64(nw)
+ }
+ if ew != nil {
+ err = ew
+ break
+ }
+ if nr != nw {
+ err = io.ErrShortWrite
+ break
+ }
+ }
+ if er != nil {
+ if er != io.EOF {
+ err = er
+ }
+ break
+ }
+ }
+ return written, err
+}