diff options
author | Heschi Kreinick <heschi@google.com> | 2023-03-08 16:48:06 -0500 |
---|---|---|
committer | Gopher Robot <gobot@golang.org> | 2023-03-08 22:10:20 +0000 |
commit | 20c96a7ddcd913e7fe627a30c91bcc73b655944c (patch) | |
tree | 08cf8bc318f12c7b8fb87e642c8a97a1e6c7aa71 | |
parent | 7bd22aafe41be40e2174335a3dc55431ca9548ec (diff) | |
download | go-git-20c96a7ddcd913e7fe627a30c91bcc73b655944c.tar.gz |
[release-branch.go1.19] os/signal/internal/pty: fix error handling
When calling a c library function, you discover that an error has
occurred, typically by looking at the return value of the function. Only
after that can you use errno to figure out the cause of the error.
Nothing about cgo changes that story -- you still have to look at the
result before checking the error that represents errno. If not you can
get false errors if the function happens to leak a non-zero errno.
Fix testpty to check errors correctly.
Fixes #58941
Change-Id: I4009e10b344e43fec291b941a63bcf4548937d44
Reviewed-on: https://go-review.googlesource.com/c/go/+/474619
Run-TryBot: Heschi Kreinick <heschi@google.com>
Reviewed-by: Carlos Amedee <carlos@golang.org>
Auto-Submit: Heschi Kreinick <heschi@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
-rw-r--r-- | src/os/signal/internal/pty/pty.go | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/os/signal/internal/pty/pty.go b/src/os/signal/internal/pty/pty.go index 537febba55..92f738ddb9 100644 --- a/src/os/signal/internal/pty/pty.go +++ b/src/os/signal/internal/pty/pty.go @@ -42,14 +42,14 @@ func (e *PtyError) Unwrap() error { return e.Errno } // Open returns a control pty and the name of the linked process tty. func Open() (pty *os.File, processTTY string, err error) { m, err := C.posix_openpt(C.O_RDWR) - if err != nil { + if m < 0 { return nil, "", ptyError("posix_openpt", err) } - if _, err := C.grantpt(m); err != nil { + if res, err := C.grantpt(m); res < 0 { C.close(m) return nil, "", ptyError("grantpt", err) } - if _, err := C.unlockpt(m); err != nil { + if res, err := C.unlockpt(m); res < 0 { C.close(m) return nil, "", ptyError("unlockpt", err) } |