summaryrefslogtreecommitdiff
path: root/runtime/execdriver/native/term.go
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/execdriver/native/term.go')
-rw-r--r--runtime/execdriver/native/term.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/runtime/execdriver/native/term.go b/runtime/execdriver/native/term.go
new file mode 100644
index 0000000000..0d5298d388
--- /dev/null
+++ b/runtime/execdriver/native/term.go
@@ -0,0 +1,42 @@
+/*
+ These types are wrappers around the libcontainer Terminal interface so that
+ we can resuse the docker implementations where possible.
+*/
+package native
+
+import (
+ "github.com/dotcloud/docker/runtime/execdriver"
+ "io"
+ "os"
+ "os/exec"
+)
+
+type dockerStdTerm struct {
+ execdriver.StdConsole
+ pipes *execdriver.Pipes
+}
+
+func (d *dockerStdTerm) Attach(cmd *exec.Cmd) error {
+ return d.AttachPipes(cmd, d.pipes)
+}
+
+func (d *dockerStdTerm) SetMaster(master *os.File) {
+ // do nothing
+}
+
+type dockerTtyTerm struct {
+ execdriver.TtyConsole
+ pipes *execdriver.Pipes
+}
+
+func (t *dockerTtyTerm) Attach(cmd *exec.Cmd) error {
+ go io.Copy(t.pipes.Stdout, t.MasterPty)
+ if t.pipes.Stdin != nil {
+ go io.Copy(t.MasterPty, t.pipes.Stdin)
+ }
+ return nil
+}
+
+func (t *dockerTtyTerm) SetMaster(master *os.File) {
+ t.MasterPty = master
+}