//===- Win32/Program.cpp - Win32 Program Implementation ------- -*- C++ -*-===//
-//
+//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
-//
+//
//===----------------------------------------------------------------------===//
//
// This file provides the Win32 specific implementation of the Program class.
#include <fcntl.h>
//===----------------------------------------------------------------------===//
-//=== WARNING: Implementation here must contain only Win32 specific code
+//=== WARNING: Implementation here must contain only Win32 specific code
//=== and must not be UNIX code
//===----------------------------------------------------------------------===//
0, TRUE, DUPLICATE_SAME_ACCESS);
return h;
}
-
+
const char *fname;
if (path->isEmpty())
fname = "NUL";
LPVOID lpJobObjectInfo,
DWORD cbJobObjectInfoLength);
#endif
-
-int
-Program::ExecuteAndWait(const Path& path,
+
+int
+Program::ExecuteAndWait(const Path& path,
const char** args,
const char** envp,
const Path** redirects,
// The pointer to the environment block for the new process.
char *envblock = 0;
-
+
if (envp) {
// An environment block consists of a null-terminated block of
// null-terminated strings. Convert the array of environment variables to
if (redirects) {
si.dwFlags = STARTF_USESTDHANDLES;
-
+
si.hStdInput = RedirectIO(redirects[0], 0, ErrMsg);
if (si.hStdInput == INVALID_HANDLE_VALUE) {
MakeErrMsg(ErrMsg, "can't redirect stdin");
}
}
}
-
+
PROCESS_INFORMATION pi;
memset(&pi, 0, sizeof(pi));
if (!rc)
{
SetLastError(err);
- MakeErrMsg(ErrMsg, std::string("Couldn't execute program '") +
+ MakeErrMsg(ErrMsg, std::string("Couldn't execute program '") +
path.toString() + "'");
return -1;
}
}
WaitForSingleObject(pi.hProcess, INFINITE);
}
-
+
// Get its exit status.
DWORD status;
rc = GetExitCodeProcess(pi.hProcess, &status);
if (!rc) {
SetLastError(err);
- MakeErrMsg(ErrMsg, std::string("Failed getting status for program '") +
+ MakeErrMsg(ErrMsg, std::string("Failed getting status for program '") +
path.toString() + "'");
return -1;
}