blob: 4c776ae8e1795a4e21dd0526992680187bff3630 [file] [log] [blame]
// Copyright 2018 The Fuchsia 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 <launchpad/launchpad.h>
#include <zircon/syscalls.h>
#include <string.h>
int main(int argc, const char* const* argv) {
launchpad_t* lp = NULL;
launchpad_create(ZX_HANDLE_INVALID, "launcher-child", &lp);
launchpad_load_from_file(lp, argv[1]);
launchpad_set_args(lp, argc - 1, argv + 1);
launchpad_clone(lp, LP_CLONE_ALL);
zx_handle_t process = ZX_HANDLE_INVALID;
zx_status_t status = launchpad_go(lp, &process, NULL);
if (status != ZX_OK)
return 401;
status = zx_object_wait_one(process, ZX_TASK_TERMINATED, ZX_TIME_INFINITE, NULL);
if (status != ZX_OK)
return status;
zx_info_process_t proc_info;
memset(&proc_info, 0, sizeof(proc_info));
status = zx_object_get_info(process, ZX_INFO_PROCESS, &proc_info, sizeof(proc_info), NULL, NULL);
if (status != ZX_OK)
return status;
return proc_info.return_code;
}