Skip to content

Commit

Permalink
[release-branch.go1.19] os/signal/internal/pty: fix error handling
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
heschi authored and gopherbot committed Mar 8, 2023
1 parent 7bd22aa commit 20c96a7
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions src/os/signal/internal/pty/pty.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down

0 comments on commit 20c96a7

Please sign in to comment.