diff options
-rw-r--r-- | gcc/ada/adaint.c | 14 | ||||
-rw-r--r-- | gcc/ada/expect.c | 13 |
2 files changed, 13 insertions, 14 deletions
diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c index 6781728..2db3528 100644 --- a/gcc/ada/adaint.c +++ b/gcc/ada/adaint.c @@ -3562,18 +3562,8 @@ __gnat_kill (int pid, int sig, int close ATTRIBUTE_UNUSED) HANDLE h = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pid); if (h == NULL) return; - if (sig == 9) - { - TerminateProcess (h, 1); - } - else if (sig == SIGINT) - GenerateConsoleCtrlEvent (CTRL_C_EVENT, pid); - else if (sig == SIGBREAK) - GenerateConsoleCtrlEvent (CTRL_BREAK_EVENT, pid); - /* ??? The last two alternatives don't really work. SIGBREAK requires setting - up process groups at start time which we don't do; treating SIGINT is just - not possible apparently. So we really only support signal 9. Fortunately - that's all we use in GNAT.Expect */ + + TerminateProcess (h, sig); CloseHandle (h); #elif defined (__vxworks) diff --git a/gcc/ada/expect.c b/gcc/ada/expect.c index a92c465..86cbcba0 100644 --- a/gcc/ada/expect.c +++ b/gcc/ada/expect.c @@ -345,8 +345,17 @@ __gnat_waitpid (int pid) { int status = 0; - waitpid (pid, &status, 0); - status = WEXITSTATUS (status); + if (waitpid (pid, &status, 0) == -1) { + return -1; + } + + if WIFEXITED (status) { + status = WEXITSTATUS (status); + } else if WIFSIGNALED (status) { + status = WTERMSIG (status); + } else if WIFSTOPPED (status) { + status = WSTOPSIG (status); + } return status; } |