From 246277e7af137913bb3e88a3f36b169535e85f5c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 22 Aug 2022 21:20:54 +0530 Subject: [PATCH] Refactor tty code into its own package --- tools/cmd/at/main.go | 5 +++-- tools/{utils => tty}/tty.go | 21 ++++++--------------- tools/{utils => tty}/tty_bsd.go | 2 +- tools/{utils => tty}/tty_linux.go | 2 +- tools/utils/io.go | 13 +++++++++++++ 5 files changed, 24 insertions(+), 19 deletions(-) rename tools/{utils => tty}/tty.go (92%) rename tools/{utils => tty}/tty_bsd.go (97%) rename tools/{utils => tty}/tty_linux.go (97%) diff --git a/tools/cmd/at/main.go b/tools/cmd/at/main.go index 4fd6f039b..66efc1db7 100644 --- a/tools/cmd/at/main.go +++ b/tools/cmd/at/main.go @@ -19,6 +19,7 @@ import ( "kitty/tools/base85" "kitty/tools/cli" "kitty/tools/crypto" + "kitty/tools/tty" "kitty/tools/utils" ) @@ -183,8 +184,8 @@ func get_response(rc *utils.RemoteControlCmd, timeout float64) (ans *Response, e } var device IOAbstraction if global_options.to_network == "" { - var term *utils.Term - term, err = utils.OpenControllingTerm(utils.SetRaw) + var term *tty.Term + term, err = tty.OpenControllingTerm(tty.SetRaw) if err != nil { return } diff --git a/tools/utils/tty.go b/tools/tty/tty.go similarity index 92% rename from tools/utils/tty.go rename to tools/tty/tty.go index 05877b608..959a01a04 100644 --- a/tools/utils/tty.go +++ b/tools/tty/tty.go @@ -1,4 +1,4 @@ -package utils +package tty import ( "encoding/base64" @@ -6,10 +6,11 @@ import ( "fmt" "io" "os" - "syscall" "time" "golang.org/x/sys/unix" + + "kitty/tools/utils" ) const ( @@ -188,7 +189,7 @@ func (self *Term) ReadWithTimeout(b []byte, d time.Duration) (n int, err error) write.Zero() in_err.Zero() read.Set(self.fd) - return Select(self.fd+1, &read, &write, &in_err, d) + return utils.Select(self.fd+1, &read, &write, &in_err, d) } num_ready, err := pselect() if err != nil { @@ -229,16 +230,6 @@ func (self *Term) Write(b []byte) (int, error) { return n, nil } -func NsecToTimespec(d time.Duration) unix.Timespec { - nv := syscall.NsecToTimespec(int64(d)) - return unix.Timespec{Sec: nv.Sec, Nsec: nv.Nsec} -} - -func NsecToTimeval(d time.Duration) unix.Timeval { - nv := syscall.NsecToTimeval(int64(d)) - return unix.Timeval{Sec: nv.Sec, Usec: nv.Usec} -} - func (self *Term) DebugPrintln(a ...interface{}) { msg := []byte(fmt.Sprintln(a...)) for i := 0; i < len(msg); i += 256 { @@ -264,7 +255,7 @@ func (self *Term) WriteAllWithTimeout(b []byte, d time.Duration) (n int, err err read.Zero() in_err.Zero() write.Set(self.fd) - return Select(self.fd+1, &read, &write, &in_err, d) + return utils.Select(self.fd+1, &read, &write, &in_err, d) } for { if len(b) == 0 { @@ -297,7 +288,7 @@ func (self *Term) WriteAllWithTimeout(b []byte, d time.Duration) (n int, err err } } -func (self *Term) WriteFromReader(r Reader, read_timeout time.Duration, write_timeout time.Duration) (n int, err error) { +func (self *Term) WriteFromReader(r utils.Reader, read_timeout time.Duration, write_timeout time.Duration) (n int, err error) { buf := r.GetBuf() var rn, wn int var rerr error diff --git a/tools/utils/tty_bsd.go b/tools/tty/tty_bsd.go similarity index 97% rename from tools/utils/tty_bsd.go rename to tools/tty/tty_bsd.go index 3ec560cfd..09bf867b8 100644 --- a/tools/utils/tty_bsd.go +++ b/tools/tty/tty_bsd.go @@ -1,7 +1,7 @@ //go:build darwin || freebsd || openbsd || netbsd || dragonfly // +build darwin freebsd openbsd netbsd dragonfly -package utils +package tty import ( "golang.org/x/sys/unix" diff --git a/tools/utils/tty_linux.go b/tools/tty/tty_linux.go similarity index 97% rename from tools/utils/tty_linux.go rename to tools/tty/tty_linux.go index 4a5483e0b..e733e2982 100644 --- a/tools/utils/tty_linux.go +++ b/tools/tty/tty_linux.go @@ -1,4 +1,4 @@ -package utils +package tty import "golang.org/x/sys/unix" diff --git a/tools/utils/io.go b/tools/utils/io.go index 02454fabf..ae740a632 100644 --- a/tools/utils/io.go +++ b/tools/utils/io.go @@ -2,13 +2,26 @@ package utils import ( "io" + "syscall" "time" + + "golang.org/x/sys/unix" ) const ( DEFAULT_IO_BUFFER_SIZE = 8192 ) +func NsecToTimespec(d time.Duration) unix.Timespec { + nv := syscall.NsecToTimespec(int64(d)) + return unix.Timespec{Sec: nv.Sec, Nsec: nv.Nsec} +} + +func NsecToTimeval(d time.Duration) unix.Timeval { + nv := syscall.NsecToTimeval(int64(d)) + return unix.Timeval{Sec: nv.Sec, Usec: nv.Usec} +} + type BytesReader struct { Data []byte }