mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-19 04:32:19 +00:00
62d124a1fa
Execute's Data parameter is now optional, so we won't allocate memory for it on Windows and we'll close the process handle. The Unix code should probably do something similar to avoid accumulation of zombie children that haven't been waited on. Tested on Linux and Windows. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@183906 91177308-0d34-0410-b5e6-96231b3b80d8
58 lines
2.2 KiB
C++
58 lines
2.2 KiB
C++
//===-- Program.cpp - Implement OS Program Concept --------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This header file implements the operating system Program concept.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/Support/Program.h"
|
|
#include "llvm/Config/config.h"
|
|
#include "llvm/Support/system_error.h"
|
|
using namespace llvm;
|
|
using namespace sys;
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//=== WARNING: Implementation here must contain only TRULY operating system
|
|
//=== independent code.
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
static bool Execute(void **Data, const Path &path, const char **args,
|
|
const char **env, const sys::Path **redirects,
|
|
unsigned memoryLimit, std::string *ErrMsg);
|
|
|
|
static int Wait(void *&Data, const Path &path, unsigned secondsToWait,
|
|
std::string *ErrMsg);
|
|
|
|
int sys::ExecuteAndWait(const Path &path, const char **args, const char **envp,
|
|
const Path **redirects, unsigned secondsToWait,
|
|
unsigned memoryLimit, std::string *ErrMsg,
|
|
bool *ExecutionFailed) {
|
|
void *Data = 0;
|
|
if (Execute(&Data, path, args, envp, redirects, memoryLimit, ErrMsg)) {
|
|
if (ExecutionFailed) *ExecutionFailed = false;
|
|
return Wait(Data, path, secondsToWait, ErrMsg);
|
|
}
|
|
if (ExecutionFailed) *ExecutionFailed = true;
|
|
return -1;
|
|
}
|
|
|
|
void sys::ExecuteNoWait(const Path &path, const char **args, const char **envp,
|
|
const Path **redirects, unsigned memoryLimit,
|
|
std::string *ErrMsg) {
|
|
Execute(/*Data*/ 0, path, args, envp, redirects, memoryLimit, ErrMsg);
|
|
}
|
|
|
|
// Include the platform-specific parts of this class.
|
|
#ifdef LLVM_ON_UNIX
|
|
#include "Unix/Program.inc"
|
|
#endif
|
|
#ifdef LLVM_ON_WIN32
|
|
#include "Windows/Program.inc"
|
|
#endif
|