diff options
author | Fabrice de Gans-Riberi <fdegans@chromium.org> | 2018-05-31 01:16:44 (GMT) |
---|---|---|
committer | Fabrice de Gans-Riberi <fdegans@chromium.org> | 2018-05-31 01:17:35 (GMT) |
commit | 0a6edf3ca757a742f2adeb4623f625c6118e0fd7 (patch) | |
tree | d263bd2b584f956c6eab7bb47362b8f20e0e9f06 /googletest/src/gtest-death-test.cc | |
parent | 4e4df226fc197c0dda6e37f5c8c3845ca1e73a49 (diff) | |
download | googletest-0a6edf3ca757a742f2adeb4623f625c6118e0fd7.zip googletest-0a6edf3ca757a742f2adeb4623f625c6118e0fd7.tar.gz googletest-0a6edf3ca757a742f2adeb4623f625c6118e0fd7.tar.bz2 |
Remvoe launchpad dependency from Fuchsia.
Diffstat (limited to 'googletest/src/gtest-death-test.cc')
-rw-r--r-- | googletest/src/gtest-death-test.cc | 49 |
1 files changed, 26 insertions, 23 deletions
diff --git a/googletest/src/gtest-death-test.cc b/googletest/src/gtest-death-test.cc index b397992..03adcce 100644 --- a/googletest/src/gtest-death-test.cc +++ b/googletest/src/gtest-death-test.cc @@ -64,7 +64,8 @@ # if GTEST_OS_FUCHSIA # include <fdio/io.h> -# include <launchpad/launchpad.h> +# include <fdio/spawn.h> +# include <zircon/processargs.h> # include <zircon/syscalls.h> # endif // GTEST_OS_FUCHSIA @@ -926,29 +927,31 @@ DeathTest::TestRole FuchsiaDeathTest::AssumeRole() { args.AddArgument(filter_flag.c_str()); args.AddArgument(internal_flag.c_str()); - // Build the child process launcher. - zx_status_t status; - launchpad_t* lp; - status = launchpad_create(ZX_HANDLE_INVALID, args.Argv()[0], &lp); - GTEST_DEATH_TEST_CHECK_(status == ZX_OK); - // Build the pipe for communication with the child. - int read_fd; - status = launchpad_add_pipe(lp, &read_fd, kFuchsiaReadPipeFd); - GTEST_DEATH_TEST_CHECK_(status == ZX_OK); - set_read_fd(read_fd); - - // Set the command line arguments. - status = launchpad_load_from_file(lp, args.Argv()[0]); - GTEST_DEATH_TEST_CHECK_(status == ZX_OK); - status = launchpad_set_args(lp, args.size(), args.Argv()); - GTEST_DEATH_TEST_CHECK_(status == ZX_OK); - - // Clone all the things (environment, stdio, namespace, ...). - launchpad_clone(lp, LP_CLONE_ALL); - - // Launch the child process. - status = launchpad_go(lp, &child_process_, nullptr); + zx_status_t status; + zx_handle_t child_pipe_handle; + uint32_t type; + status = fdio_pipe_half(&child_pipe_handle, &type); + GTEST_DEATH_TEST_CHECK_(status >= 0); + set_read_fd(status); + + // Set the pipe handle for the child. + fdio_spawn_action_t add_handle_action = { + .action = FDIO_SPAWN_ACTION_ADD_HANDLE, + .h = { + .id = PA_HND(type, kFuchsiaReadPipeFd), + .handle = child_pipe_handle + } + }; + + // Spawn the child process. + char err_msg[255]; + status = fdio_spawn_etc(ZX_HANDLE_INVALID, FDIO_SPAWN_CLONE_ALL, + args.Argv()[0], args.Argv(), nullptr, 1, + &add_handle_action, &child_process_, err_msg); + if (status != ZX_OK) { + GTEST_LOG_(ERROR) << err_msg; + } GTEST_DEATH_TEST_CHECK_(status == ZX_OK); set_spawned(true); |