mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-17 14:04:52 +02:00
More work on porting ssh kitten
This commit is contained in:
@@ -263,13 +263,19 @@ func (self *Term) ReadWithTimeout(b []byte, d time.Duration) (n int, err error)
|
||||
}
|
||||
num_ready, err := pselect()
|
||||
if err != nil {
|
||||
return
|
||||
return 0, err
|
||||
}
|
||||
if num_ready == 0 {
|
||||
err = os.ErrDeadlineExceeded
|
||||
return
|
||||
return 0, err
|
||||
}
|
||||
for {
|
||||
n, err = self.Read(b)
|
||||
if errors.Is(err, unix.EINTR) {
|
||||
continue
|
||||
}
|
||||
return n, err
|
||||
}
|
||||
return self.Read(b)
|
||||
}
|
||||
|
||||
func (self *Term) Read(b []byte) (int, error) {
|
||||
@@ -280,10 +286,14 @@ func (self *Term) Write(b []byte) (int, error) {
|
||||
return self.os_file.Write(b)
|
||||
}
|
||||
|
||||
func is_temporary_error(err error) bool {
|
||||
return errors.Is(err, unix.EINTR) || errors.Is(err, unix.EAGAIN) || errors.Is(err, unix.EWOULDBLOCK) || errors.Is(err, io.ErrShortWrite)
|
||||
}
|
||||
|
||||
func (self *Term) WriteAll(b []byte) error {
|
||||
for len(b) > 0 {
|
||||
n, err := self.os_file.Write(b)
|
||||
if err != nil && !errors.Is(err, io.ErrShortWrite) {
|
||||
if err != nil && !is_temporary_error(err) {
|
||||
return err
|
||||
}
|
||||
b = b[n:]
|
||||
@@ -291,6 +301,10 @@ func (self *Term) WriteAll(b []byte) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *Term) WriteAllString(s string) error {
|
||||
return self.WriteAll(utils.UnsafeStringToBytes(s))
|
||||
}
|
||||
|
||||
func (self *Term) WriteString(b string) (int, error) {
|
||||
return self.os_file.WriteString(b)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user