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)
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
__gnat_os_exit (int status)
{
......
......@@ -93,7 +93,6 @@ extern int __gnat_is_symbolic_link (char *name);
extern int __gnat_portable_spawn (char *[]);
extern int __gnat_portable_no_block_spawn (char *[]);
extern int __gnat_portable_wait (int *);
extern int __gnat_waitpid (int);
extern char *__gnat_locate_exec (char *, char *);
extern char *__gnat_locate_exec_on_path (char *);
extern char *__gnat_locate_regular_file (char *, char *);
......
......@@ -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;
......
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