Add a Kill() function to the Program class.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81246 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/System/Unix/Program.inc b/lib/System/Unix/Program.inc
index fca9292..fdd0c25 100644
--- a/lib/System/Unix/Program.inc
+++ b/lib/System/Unix/Program.inc
@@ -283,6 +283,16 @@
 
 }
 
+bool
+Program::Kill(std::string* ErrMsg) {
+  if (Pid_ == 0) {
+    MakeErrMsg(ErrMsg, "Process not started!");
+    return true;
+  }
+
+  return (kill(Pid_, SIGKILL) == 0);
+}
+
 bool Program::ChangeStdinToBinary(){
   // Do nothing, as Unix doesn't differentiate between text and binary.
   return false;
diff --git a/lib/System/Win32/Program.inc b/lib/System/Win32/Program.inc
index 804273b..4f4b6b3 100644
--- a/lib/System/Win32/Program.inc
+++ b/lib/System/Win32/Program.inc
@@ -28,11 +28,11 @@
 Program::Program() : Pid_(0), Data(0) {}
 
 Program::~Program() {
-	if (Data) {
-		HANDLE hProcess = (HANDLE) Data;
-		CloseHandle(hProcess);
-		Data = 0;
-	}
+  if (Data) {
+    HANDLE hProcess = (HANDLE) Data;
+    CloseHandle(hProcess);
+    Data = 0;
+  }
 }
 
 // This function just uses the PATH environment variable to find the program.
@@ -121,7 +121,7 @@
 
 /// ArgNeedsQuotes - Check whether argument needs to be quoted when calling
 /// CreateProcess.
-static bool ArgNeedsQuotes(const char *Str) {  
+static bool ArgNeedsQuotes(const char *Str) {
   return Str[0] == '\0' || strchr(Str, ' ') != 0;
 }
 
@@ -137,7 +137,7 @@
     CloseHandle(Data);
     Data = 0;
   }
-  
+
   if (!path.canExecute()) {
     if (ErrMsg)
       *ErrMsg = "program not executable";
@@ -266,7 +266,7 @@
   }
   Pid_ = pi.dwProcessId;
   Data = pi.hProcess;
-  
+
   // Make sure these get closed no matter what.
   AutoHandle hThread(pi.hThread);
 
@@ -307,7 +307,7 @@
   }
 
   HANDLE hProcess = (HANDLE) Data;
-  
+
   // Wait for the process to terminate.
   DWORD millisecondsToWait = INFINITE;
   if (secondsToWait > 0)
@@ -335,6 +335,17 @@
   return status;
 }
 
+bool
+Program::Kill(std::string* ErrMsg) {
+  if (Data == 0) {
+    MakeErrMsg(ErrMsg, "Process not started!");
+    return true;
+  }
+
+  HANDLE hProcess = reinterpret_cast<HANDLE>(Data);
+  return TerminateProcess(hProcess, 1);
+}
+
 bool Program::ChangeStdinToBinary(){
   int result = _setmode( _fileno(stdin), _O_BINARY );
   return result == -1;