mirror of
https://github.com/restic/restic.git
synced 2025-12-11 18:47:50 +00:00
terminal: unexport tcgetpgrp, tcsetpgrp and getpgrp
This commit is contained in:
@@ -16,9 +16,9 @@ func IsProcessBackground(fd uintptr) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func isProcessBackground(fd int) (bg bool, err error) {
|
func isProcessBackground(fd int) (bg bool, err error) {
|
||||||
pgid, err := Tcgetpgrp(fd)
|
pgid, err := tcgetpgrp(fd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
return pgid != Getpgrp(), nil
|
return pgid != getpgrp(), nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,13 +28,13 @@ func startForeground(cmd *exec.Cmd) (bg func() error, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// only move child process to foreground if restic is in the foreground
|
// only move child process to foreground if restic is in the foreground
|
||||||
prev, err := Tcgetpgrp(int(tty.Fd()))
|
prev, err := tcgetpgrp(int(tty.Fd()))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = tty.Close()
|
_ = tty.Close()
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
self := Getpgrp()
|
self := getpgrp()
|
||||||
if prev != self {
|
if prev != self {
|
||||||
debug.Log("restic is not controlling the tty; err = %v", err)
|
debug.Log("restic is not controlling the tty; err = %v", err)
|
||||||
if err := tty.Close(); err != nil {
|
if err := tty.Close(); err != nil {
|
||||||
@@ -55,7 +55,7 @@ func startForeground(cmd *exec.Cmd) (bg func() error, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// move the command's process group into the foreground
|
// move the command's process group into the foreground
|
||||||
err = Tcsetpgrp(int(tty.Fd()), cmd.Process.Pid)
|
err = tcsetpgrp(int(tty.Fd()), cmd.Process.Pid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = tty.Close()
|
_ = tty.Close()
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -66,7 +66,7 @@ func startForeground(cmd *exec.Cmd) (bg func() error, err error) {
|
|||||||
signal.Reset(unix.SIGTTOU)
|
signal.Reset(unix.SIGTTOU)
|
||||||
|
|
||||||
// reset the foreground process group
|
// reset the foreground process group
|
||||||
err = Tcsetpgrp(int(tty.Fd()), prev)
|
err = tcsetpgrp(int(tty.Fd()), prev)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = tty.Close()
|
_ = tty.Close()
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package terminal
|
|||||||
|
|
||||||
import "golang.org/x/sys/unix"
|
import "golang.org/x/sys/unix"
|
||||||
|
|
||||||
func Getpgrp() int {
|
func getpgrp() int {
|
||||||
pid, _ := unix.Getpgrp()
|
pid, _ := unix.Getpgrp()
|
||||||
return pid
|
return pid
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,4 +4,4 @@ package terminal
|
|||||||
|
|
||||||
import "golang.org/x/sys/unix"
|
import "golang.org/x/sys/unix"
|
||||||
|
|
||||||
func Getpgrp() int { return unix.Getpgrp() }
|
func getpgrp() int { return unix.Getpgrp() }
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package terminal
|
|||||||
|
|
||||||
import "golang.org/x/sys/unix"
|
import "golang.org/x/sys/unix"
|
||||||
|
|
||||||
func Tcgetpgrp(ttyfd int) (int, error) {
|
func tcgetpgrp(ttyfd int) (int, error) {
|
||||||
// We need to use IoctlGetUint32 here, because pid_t is 32-bit even on
|
// We need to use IoctlGetUint32 here, because pid_t is 32-bit even on
|
||||||
// 64-bit Linux. IoctlGetInt doesn't work on big-endian platforms:
|
// 64-bit Linux. IoctlGetInt doesn't work on big-endian platforms:
|
||||||
// https://github.com/golang/go/issues/45585
|
// https://github.com/golang/go/issues/45585
|
||||||
|
|||||||
@@ -4,6 +4,6 @@ package terminal
|
|||||||
|
|
||||||
import "golang.org/x/sys/unix"
|
import "golang.org/x/sys/unix"
|
||||||
|
|
||||||
func Tcgetpgrp(ttyfd int) (int, error) {
|
func tcgetpgrp(ttyfd int) (int, error) {
|
||||||
return unix.IoctlGetInt(ttyfd, unix.TIOCGPGRP)
|
return unix.IoctlGetInt(ttyfd, unix.TIOCGPGRP)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package terminal
|
|||||||
|
|
||||||
import "golang.org/x/sys/unix"
|
import "golang.org/x/sys/unix"
|
||||||
|
|
||||||
func Tcsetpgrp(fd int, pid int) error {
|
func tcsetpgrp(fd int, pid int) error {
|
||||||
// The second argument to IoctlSetPointerInt has type int on AIX,
|
// The second argument to IoctlSetPointerInt has type int on AIX,
|
||||||
// but the constant overflows 64-bit int, hence the two-step cast.
|
// but the constant overflows 64-bit int, hence the two-step cast.
|
||||||
req := uint(unix.TIOCSPGRP)
|
req := uint(unix.TIOCSPGRP)
|
||||||
|
|||||||
@@ -4,6 +4,6 @@ package terminal
|
|||||||
|
|
||||||
import "golang.org/x/sys/unix"
|
import "golang.org/x/sys/unix"
|
||||||
|
|
||||||
func Tcsetpgrp(fd int, pid int) error {
|
func tcsetpgrp(fd int, pid int) error {
|
||||||
return unix.IoctlSetPointerInt(fd, unix.TIOCSPGRP, pid)
|
return unix.IoctlSetPointerInt(fd, unix.TIOCSPGRP, pid)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user