]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.19] os/signal/internal/pty: fix error handling
authorHeschi Kreinick <heschi@google.com>
Wed, 8 Mar 2023 21:48:06 +0000 (16:48 -0500)
committerGopher Robot <gobot@golang.org>
Wed, 8 Mar 2023 22:10:20 +0000 (22:10 +0000)
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>

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

index 537febba553c6916c49314465ea66739e32d5258..92f738ddb9c8e0dc370f35da51dbbece501f4fa7 100644 (file)
@@ -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)
        }