From 9799803529c57930a0e7f12e45cbcf2b2e4419eb Mon Sep 17 00:00:00 2001 From: dec05eba Date: Thu, 28 May 2020 02:08:40 +0200 Subject: Add support for mangadex --- src/Program.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/Program.c') diff --git a/src/Program.c b/src/Program.c index 3246d54..2509f6f 100644 --- a/src/Program.c +++ b/src/Program.c @@ -1,9 +1,11 @@ #include "../include/Program.h" #include #include +#include #include #include #include +#include #include #define READ_END 0 @@ -20,11 +22,22 @@ int exec_program(const char **args, ProgramOutputCallback output_callback, void return -2; } + pid_t parent_pid = getpid(); + pid_t pid = fork(); if(pid == -1) { perror("Failed to fork"); return -3; } else if(pid == 0) { /* child */ + if(prctl(PR_SET_PDEATHSIG, SIGTERM) == -1) { + perror("prctl(PR_SET_PDEATHSIG, SIGTERM) failed"); + exit(127); + } + + /* Test if the parent died before the above call to prctl */ + if(getppid() != parent_pid) + exit(127); + dup2(fd[WRITE_END], STDOUT_FILENO); close(fd[READ_END]); close(fd[WRITE_END]); @@ -105,12 +118,23 @@ int exec_program_async(const char **args, pid_t *result_process_id) { if(args[0] == NULL) return -1; + pid_t parent_pid = getpid(); + pid_t pid = fork(); if(pid == -1) { int err = errno; perror("Failed to fork"); return -err; } else if(pid == 0) { /* child */ + if(prctl(PR_SET_PDEATHSIG, SIGTERM) == -1) { + perror("prctl(PR_SET_PDEATHSIG, SIGTERM) failed"); + exit(127); + } + + /* Test if the parent died before the above call to prctl */ + if(getppid() != parent_pid) + exit(127); + execvp(args[0], args); } else { /* parent */ if(result_process_id) -- cgit v1.2.3