| // Copyright 2021 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. |
| |
| // A simple program that reads an exit code from a channel and exits. |
| |
| #include <lib/syslog/cpp/macros.h> |
| #include <lib/zx/channel.h> |
| #include <lib/zx/time.h> |
| #include <stdlib.h> |
| #include <zircon/process.h> |
| #include <zircon/processargs.h> |
| #include <zircon/status.h> |
| #include <zircon/types.h> |
| |
| namespace fuzzing { |
| |
| zx_status_t RunTestTarget() { |
| // Take start up handles. |
| zx::channel channel(zx_take_startup_handle(PA_HND(PA_USER0, 0))); |
| |
| // Wait to read how this process should exit. |
| auto status = |
| channel.wait_one(ZX_CHANNEL_READABLE | ZX_CHANNEL_PEER_CLOSED, zx::time::infinite(), nullptr); |
| FX_CHECK(status == ZX_OK) << zx_status_get_string(status); |
| |
| zx_status_t exitcode = 0; |
| status = channel.read(0, &exitcode, nullptr, sizeof(exitcode), 0, nullptr, nullptr); |
| FX_CHECK(status == ZX_OK) << zx_status_get_string(status); |
| return exitcode; |
| } |
| |
| } // namespace fuzzing |
| |
| int main() { return fuzzing::RunTestTarget(); } |