Changes to make libSupport build on systems that don't have the wait syscall.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13806 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2004-05-27 01:20:55 +00:00
parent 9a5dc4f7e5
commit d895ffe122

View File

@ -134,6 +134,7 @@ int llvm::RunProgramWithTimeout(const std::string &ProgramPath,
const std::string &StdErrFile) {
// FIXME: install sigalarm handler here for timeout...
#ifdef HAVE_SYS_WAIT_H
int Child = fork();
switch (Child) {
case -1:
@ -179,6 +180,11 @@ int llvm::RunProgramWithTimeout(const std::string &ProgramPath,
exit(1);
}
return Status;
#else
std::cerr << "RunProgramWithTimeout not implemented on this platform!\n";
return -1;
#endif
}
@ -220,12 +226,7 @@ int llvm::RunProgramWithTimeout(const std::string &ProgramPath,
//
int llvm::ExecWait(const char * const old_argv[],
const char * const old_envp[]) {
// Child process ID
register int child;
// Status from child process when it exits
int status;
#ifdef HAVE_SYS_WAIT_H
//
// Create local versions of the parameters that can be passed into execve()
// without creating const problems.
@ -233,56 +234,37 @@ int llvm::ExecWait(const char * const old_argv[],
char ** const argv = (char ** const) old_argv;
char ** const envp = (char ** const) old_envp;
//
// Create a child process.
//
switch (child=fork())
{
//
switch (fork()) {
// An error occured: Return to the caller.
//
case -1:
return 1;
break;
//
// Child process: Execute the program.
//
case 0:
execve (argv[0], argv, envp);
//
// If the execve() failed, we should exit and let the parent pick up
// our non-zero exit status.
//
exit (1);
break;
//
// Parent process: Break out of the switch to do our processing.
//
default:
break;
}
//
// Parent process: Wait for the child process to termiante.
//
int status;
if ((wait (&status)) == -1)
{
return 1;
}
//
// If the program exited normally with a zero exit status, return success!
//
if (WIFEXITED (status) && (WEXITSTATUS(status) == 0))
{
return 0;
}
#else
std::cerr << "llvm::ExecWait not implemented on this platform!\n";
#endif
//
// Otherwise, return failure.
//
return 1;
}