CIndex: replace fork/exec with our portable ExecuteAndWait wrapper.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@84414 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/CIndex/CIndex.cpp b/tools/CIndex/CIndex.cpp
index c262f67..4ade947 100644
--- a/tools/CIndex/CIndex.cpp
+++ b/tools/CIndex/CIndex.cpp
@@ -24,10 +24,10 @@
 #include "clang/Frontend/ASTUnit.h"
 #include "llvm/Support/MemoryBuffer.h"
 #include "llvm/System/Path.h"
+#include "llvm/System/Program.h"
 #include <cstdio>
 #ifndef _MSC_VER
 #include <dlfcn.h>
-#include <sys/wait.h>
 #endif
 #include <vector>
 
@@ -356,22 +356,8 @@
   argv.push_back(NULL);
 
   // Generate the AST file in a separate process.
-  pid_t child_pid = fork();
-  if (child_pid == 0) { // Child process
-  
-    // Execute the command, passing the appropriate arguments.
-    execv(argv[0], (char *const *)&argv[0]);
-    
-    // If execv returns, it failed.
-    assert(0 && "execv() failed");
-  }  
-  // This is run by the parent.
-  int child_status;
-  pid_t tpid;
-  do { // Wait for the child to terminate.
-    tpid = wait(&child_status);
-  } while (tpid != child_pid);
-  
+  llvm::sys::Program::ExecuteAndWait(llvm::sys::Path(argv[0]), &argv[0]);
+
   // Finally, we create the translation unit from the ast file.
   ASTUnit *ATU = static_cast<ASTUnit *>(
                    clang_createTranslationUnit(CIdx, astTmpFile));