MSYS2-packages/util-linux/2.40.2-setsid.patch
2025-02-06 12:47:39 -08:00

37 lines
1.0 KiB
Diff

--- origsrc/util-linux-2.40.2/sys-utils/setsid.c 2024-05-28 01:12:08.335258800 -0700
+++ src/util-linux-2.40.2/sys-utils/setsid.c 2024-10-24 21:01:38.745405400 -0700
@@ -15,6 +15,8 @@
* 2008-08-20 Daniel Kahn Gillmor <dkg@fifthhorseman.net>
* - if forked, wait on child process and emit its return code.
*/
+
+#include <fcntl.h>
#include <getopt.h>
#include <stdio.h>
#include <stdlib.h>
@@ -53,6 +55,7 @@ int main(int argc, char **argv)
{
int ch, forcefork = 0;
int ctty = 0;
+ int fd;
pid_t pid;
int status = 0;
@@ -120,6 +123,16 @@ int main(int argc, char **argv)
if (ctty && ioctl(STDIN_FILENO, TIOCSCTTY, 1))
err(EXIT_FAILURE, _("failed to set the controlling terminal"));
+ if ((fd = open ("/dev/null", O_RDWR, 0)) >= 0) {
+ if (isatty (STDIN_FILENO))
+ dup2 (fd, STDIN_FILENO);
+ if (isatty (STDOUT_FILENO))
+ dup2 (fd, STDOUT_FILENO);
+ if (isatty (STDERR_FILENO))
+ dup2 (fd, STDERR_FILENO);
+ if (fd > 2)
+ close (fd);
+ }
execvp(argv[optind], argv + optind);
errexec(argv[optind]);
}