diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-03-18 11:46:57 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-03-18 11:46:57 +0000 |
commit | 46504d45fd7942be0cf3372995e24d79318cd6cd (patch) | |
tree | c6f054c8d8afc51a137d9e7ead083ea1a480e398 /gcc/ada/expect.c | |
parent | 4c8db992ba2e347b1c0f1284892efde6aeb0f7f5 (diff) | |
download | gcc-46504d45fd7942be0cf3372995e24d79318cd6cd.tar.gz |
2005-03-17 Pascal Obry <obry@adacore.com>
* adaint.h, adaint.c (__gnat_waitpid): Moved to expect.c where it is
used.
* expect.c (__gnat_waitpid): Moved here from adaint.c.
Reimplement under Win32 using Win32 API.
(__gnat_kill) [Win32]: Properly close the process handle before leaving
this routine.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@96659 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/expect.c')
-rw-r--r-- | gcc/ada/expect.c | 62 |
1 files changed, 61 insertions, 1 deletions
diff --git a/gcc/ada/expect.c b/gcc/ada/expect.c index f0b4bfb9db7..dcb6776842e 100644 --- a/gcc/ada/expect.c +++ b/gcc/ada/expect.c @@ -43,6 +43,16 @@ #include "system.h" #endif +#include <sys/types.h> + +#ifdef __MINGW32__ +#if OLD_MINGW +#include <sys/wait.h> +#endif +#else +#include <sys/wait.h> +#endif + /* This file provides the low level functionalities needed to implement Expect capabilities in GNAT.Expect. Implementations for unix and windows systems is provided. @@ -72,11 +82,33 @@ __gnat_kill (int pid, int sig) { process_handle = OpenProcess (PROCESS_TERMINATE, FALSE, pid); if (process_handle != NULL) - TerminateProcess (process_handle, 0); + { + TerminateProcess (process_handle, 0); + CloseHandle (process_handle); + } } } int +__gnat_waitpid (int pid) +{ + HANDLE process_handle; + DWORD exitcode = 1; + DWORD res; + + process_handle = OpenProcess (PROCESS_QUERY_INFORMATION, FALSE, pid); + + if (process_handle != NULL) + { + res = WaitForSingleObject (process_handle, INFINITE); + GetExitCodeProcess (process_handle, &exitcode); + CloseHandle (process_handle); + } + + return (int) exitcode; +} + +int __gnat_expect_fork (void) { return 0; @@ -158,6 +190,17 @@ __gnat_expect_poll (int *fd, int num_fd, int timeout, int *is_set) #include <vms/iodef.h> int +__gnat_waitpid (int pid) +{ + int status = 0; + + waitpid (pid, &status, 0); + status = WEXITSTATUS (status); + + return status; +} + +int __gnat_pipe (int *fd) { return pipe (fd); @@ -298,6 +341,17 @@ __gnat_kill (int pid, int sig) } int +__gnat_waitpid (int pid) +{ + int status = 0; + + waitpid (pid, &status, 0); + status = WEXITSTATUS (status); + + return status; +} + +int __gnat_pipe (int *fd) { return pipe (fd); @@ -405,6 +459,12 @@ __gnat_kill (int pid, int sig) } int +__gnat_waitpid (int pid, int sig) +{ + return 0; +} + +int __gnat_pipe (int *fd) { return -1; |