Skip to content

Commit 20c96a7

Browse files
heschigopherbot
authored andcommitted
[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>
1 parent 7bd22aa commit 20c96a7

File tree

1 file changed

+3
-3
lines changed
  • src/os/signal/internal/pty

1 file changed

+3
-3
lines changed

src/os/signal/internal/pty/pty.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,14 @@ func (e *PtyError) Unwrap() error { return e.Errno }
4242
// Open returns a control pty and the name of the linked process tty.
4343
func Open() (pty *os.File, processTTY string, err error) {
4444
m, err := C.posix_openpt(C.O_RDWR)
45-
if err != nil {
45+
if m < 0 {
4646
return nil, "", ptyError("posix_openpt", err)
4747
}
48-
if _, err := C.grantpt(m); err != nil {
48+
if res, err := C.grantpt(m); res < 0 {
4949
C.close(m)
5050
return nil, "", ptyError("grantpt", err)
5151
}
52-
if _, err := C.unlockpt(m); err != nil {
52+
if res, err := C.unlockpt(m); res < 0 {
5353
C.close(m)
5454
return nil, "", ptyError("unlockpt", err)
5555
}

0 commit comments

Comments
 (0)