Commit e602394c by Pascal Obry Committed by Arnaud Charlet

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
parent bae802f9
...@@ -1927,23 +1927,6 @@ __gnat_portable_wait (int *process_status) ...@@ -1927,23 +1927,6 @@ __gnat_portable_wait (int *process_status)
return pid; return pid;
} }
int
__gnat_waitpid (int pid)
{
int status = 0;
#if defined (_WIN32)
cwait (&status, pid, _WAIT_CHILD);
#elif defined (__EMX__) || defined (MSDOS) || defined (__vxworks)
/* Status is already zero, so nothing to do. */
#else
waitpid (pid, &status, 0);
status = WEXITSTATUS (status);
#endif
return status;
}
void void
__gnat_os_exit (int status) __gnat_os_exit (int status)
{ {
......
...@@ -93,7 +93,6 @@ extern int __gnat_is_symbolic_link (char *name); ...@@ -93,7 +93,6 @@ extern int __gnat_is_symbolic_link (char *name);
extern int __gnat_portable_spawn (char *[]); extern int __gnat_portable_spawn (char *[]);
extern int __gnat_portable_no_block_spawn (char *[]); extern int __gnat_portable_no_block_spawn (char *[]);
extern int __gnat_portable_wait (int *); extern int __gnat_portable_wait (int *);
extern int __gnat_waitpid (int);
extern char *__gnat_locate_exec (char *, char *); extern char *__gnat_locate_exec (char *, char *);
extern char *__gnat_locate_exec_on_path (char *); extern char *__gnat_locate_exec_on_path (char *);
extern char *__gnat_locate_regular_file (char *, char *); extern char *__gnat_locate_regular_file (char *, char *);
......
...@@ -43,6 +43,16 @@ ...@@ -43,6 +43,16 @@
#include "system.h" #include "system.h"
#endif #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 /* This file provides the low level functionalities needed to implement Expect
capabilities in GNAT.Expect. capabilities in GNAT.Expect.
Implementations for unix and windows systems is provided. Implementations for unix and windows systems is provided.
...@@ -72,11 +82,33 @@ __gnat_kill (int pid, int sig) ...@@ -72,11 +82,33 @@ __gnat_kill (int pid, int sig)
{ {
process_handle = OpenProcess (PROCESS_TERMINATE, FALSE, pid); process_handle = OpenProcess (PROCESS_TERMINATE, FALSE, pid);
if (process_handle != NULL) if (process_handle != NULL)
TerminateProcess (process_handle, 0); {
TerminateProcess (process_handle, 0);
CloseHandle (process_handle);
}
} }
} }
int 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) __gnat_expect_fork (void)
{ {
return 0; return 0;
...@@ -158,6 +190,17 @@ __gnat_expect_poll (int *fd, int num_fd, int timeout, int *is_set) ...@@ -158,6 +190,17 @@ __gnat_expect_poll (int *fd, int num_fd, int timeout, int *is_set)
#include <vms/iodef.h> #include <vms/iodef.h>
int int
__gnat_waitpid (int pid)
{
int status = 0;
waitpid (pid, &status, 0);
status = WEXITSTATUS (status);
return status;
}
int
__gnat_pipe (int *fd) __gnat_pipe (int *fd)
{ {
return pipe (fd); return pipe (fd);
...@@ -298,6 +341,17 @@ __gnat_kill (int pid, int sig) ...@@ -298,6 +341,17 @@ __gnat_kill (int pid, int sig)
} }
int int
__gnat_waitpid (int pid)
{
int status = 0;
waitpid (pid, &status, 0);
status = WEXITSTATUS (status);
return status;
}
int
__gnat_pipe (int *fd) __gnat_pipe (int *fd)
{ {
return pipe (fd); return pipe (fd);
...@@ -405,6 +459,12 @@ __gnat_kill (int pid, int sig) ...@@ -405,6 +459,12 @@ __gnat_kill (int pid, int sig)
} }
int int
__gnat_waitpid (int pid, int sig)
{
return 0;
}
int
__gnat_pipe (int *fd) __gnat_pipe (int *fd)
{ {
return -1; return -1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment