syscall: introduce IoctlPtr for exec_unix tests

Avoid passing Go pointers as uintptr in exec_unix_test.go by introducing
syscall.IoctlPtr() which accepts arg as unsafe.Pointer.

For #44834
Fixes #58609

Change-Id: I6d0ded023e5f3c9989783aee7075bb88100d9ec2
Reviewed-on: https://go-review.googlesource.com/c/go/+/469675
Run-TryBot: Dmitri Goutnik <dgoutnik@gmail.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Run-TryBot: Ian Lance Taylor <iant@google.com>
Auto-Submit: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
Dmitri Goutnik 2023-02-20 06:55:42 -05:00 committed by Gopher Robot
parent ed33ae10a0
commit feb355c427
6 changed files with 18 additions and 10 deletions

View File

@ -34,4 +34,4 @@ func Getpgrp() (pgrp int) {
return
}
var Ioctl = ioctl
var IoctlPtr = ioctlPtr

View File

@ -305,3 +305,7 @@ childerror:
exit(253)
}
}
func ioctlPtr(fd, req uintptr, arg unsafe.Pointer) (err Errno) {
return ioctl(fd, req, uintptr(arg))
}

View File

@ -34,4 +34,4 @@ func Getpgrp() (pgrp int) {
return
}
var Ioctl = ioctl
var IoctlPtr = ioctlPtr

View File

@ -177,7 +177,7 @@ func TestForeground(t *testing.T) {
// equivalent.
fpgrp := int32(0)
errno := syscall.Ioctl(tty.Fd(), syscall.TIOCGPGRP, uintptr(unsafe.Pointer(&fpgrp)))
errno := syscall.IoctlPtr(tty.Fd(), syscall.TIOCGPGRP, unsafe.Pointer(&fpgrp))
if errno != 0 {
t.Fatalf("TIOCGPGRP failed with error code: %s", errno)
}
@ -214,7 +214,7 @@ func TestForeground(t *testing.T) {
// This call fails on darwin/arm64. The failure doesn't matter, though.
// This is just best effort.
syscall.Ioctl(tty.Fd(), syscall.TIOCSPGRP, uintptr(unsafe.Pointer(&fpgrp)))
syscall.IoctlPtr(tty.Fd(), syscall.TIOCSPGRP, unsafe.Pointer(&fpgrp))
}
func TestForegroundSignal(t *testing.T) {
@ -228,7 +228,7 @@ func TestForegroundSignal(t *testing.T) {
// equivalent.
fpgrp := int32(0)
errno := syscall.Ioctl(tty.Fd(), syscall.TIOCGPGRP, uintptr(unsafe.Pointer(&fpgrp)))
errno := syscall.IoctlPtr(tty.Fd(), syscall.TIOCGPGRP, unsafe.Pointer(&fpgrp))
if errno != 0 {
t.Fatalf("TIOCGPGRP failed with error code: %s", errno)
}
@ -239,7 +239,7 @@ func TestForegroundSignal(t *testing.T) {
defer func() {
signal.Ignore(syscall.SIGTTIN, syscall.SIGTTOU)
syscall.Ioctl(tty.Fd(), syscall.TIOCSPGRP, uintptr(unsafe.Pointer(&fpgrp)))
syscall.IoctlPtr(tty.Fd(), syscall.TIOCSPGRP, unsafe.Pointer(&fpgrp))
signal.Reset()
}()

View File

@ -4,8 +4,10 @@
package syscall
func Ioctl(fd, req, arg uintptr) Errno {
err := ioctl(int(fd), int(req), int(arg))
import "unsafe"
func IoctlPtr(fd, req uintptr, arg unsafe.Pointer) Errno {
err := ioctlPtr(int(fd), uint(req), arg)
if err != nil {
return err.(Errno)
}

View File

@ -6,7 +6,9 @@
package syscall
func Ioctl(fd, req, arg uintptr) (err Errno) {
_, _, err = Syscall(SYS_IOCTL, fd, req, arg)
import "unsafe"
func IoctlPtr(fd, req uintptr, arg unsafe.Pointer) (err Errno) {
_, _, err = Syscall(SYS_IOCTL, fd, req, uintptr(arg))
return err
}