Index: base/process_util_mac.mm |
=================================================================== |
--- base/process_util_mac.mm (revision 0) |
+++ base/process_util_mac.mm (revision 0) |
@@ -0,0 +1,65 @@ |
+// Copyright (c) 2008 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+ |
+#include "base/process_util.h" |
+ |
+#import <Cocoa/Cocoa.h> |
+#include <spawn.h> |
+#include <string> |
+#include <sys/types.h> |
+#include <sys/wait.h> |
+ |
+namespace process_util { |
+ |
+bool LaunchApp(const std::vector<std::string>& argv, |
+ bool wait, ProcessHandle* process_handle) { |
+ bool retval = true; |
+ |
+ char* argv_copy[argv.size() + 1]; |
+ for (size_t i = 0; i < argv.size(); i++) { |
+ argv_copy[i] = new char[argv[i].size() + 1]; |
Amanda Walker
2008/10/27 18:50:52
You should be able to remove this copy by using ar
|
+ strcpy(argv_copy[i], argv[i].c_str()); |
+ } |
+ argv_copy[argv.size()] = NULL; |
+ |
+ int pid = 0; |
+ int spawn_succeeded = (posix_spawn(&pid, |
+ argv_copy[0], |
+ NULL, |
+ NULL, |
+ argv_copy, |
+ NULL) == 0); |
+ |
+ bool process_handle_valid = pid > 0; |
+ if (!spawn_succeeded || !process_handle_valid) { |
+ retval = false; |
+ } else { |
+ if (wait) |
+ waitpid(pid, 0, 0); |
+ |
+ if(process_handle) |
+ *process_handle = pid; |
+ } |
+ |
+ for (size_t i = 0; i < argv.size(); i++) |
+ delete[] argv_copy[i]; |
+ |
+ return retval; |
+} |
+ |
+bool LaunchApp(const CommandLine& cl, |
+ bool wait, bool start_hidden, ProcessHandle* process_handle) { |
+ // TODO(playmobil): Do we need to respect the start_hidden flag? |
+ return LaunchApp(cl.argv(), wait, process_handle); |
+} |
+ |
+bool WaitForSingleProcess(ProcessHandle handle, int wait_milliseconds) { |
+ // TODO(playmobil): Do we need to support wait_milliseconds? |
+ int status; |
+ waitpid(handle, &status, 0); |
+ return WIFEXITED(status); |
+} |
+ |
+} // namespace process_util |