summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeschi Kreinick <heschi@google.com>2023-03-08 16:48:06 -0500
committerGopher Robot <gobot@golang.org>2023-03-08 22:10:20 +0000
commit20c96a7ddcd913e7fe627a30c91bcc73b655944c (patch)
tree08cf8bc318f12c7b8fb87e642c8a97a1e6c7aa71
parent7bd22aafe41be40e2174335a3dc55431ca9548ec (diff)
downloadgo-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.go6
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)
}