aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/expect.c
diff options
context:
space:
mode:
authorPascal Obry <obry@adacore.com>2005-03-18 12:46:57 +0100
committerArnaud Charlet <charlet@gcc.gnu.org>2005-03-18 12:46:57 +0100
commite602394c38b7ad5053769e2ff03550fd5b5d412a (patch)
treec6f054c8d8afc51a137d9e7ead083ea1a480e398 /gcc/ada/expect.c
parentbae802f98b2514a0a93a615db8dbdd957f4c7111 (diff)
downloadgcc-e602394c38b7ad5053769e2ff03550fd5b5d412a.zip
gcc-e602394c38b7ad5053769e2ff03550fd5b5d412a.tar.gz
gcc-e602394c38b7ad5053769e2ff03550fd5b5d412a.tar.bz2
adaint.h, adaint.c (__gnat_waitpid): Moved to expect.c where it is used.
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. From-SVN: r96659
Diffstat (limited to 'gcc/ada/expect.c')
-rw-r--r--gcc/ada/expect.c62
1 files changed, 61 insertions, 1 deletions
diff --git a/gcc/ada/expect.c b/gcc/ada/expect.c
index f0b4bfb..dcb6776 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;