// Copyright 2016 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 "src/lib/fsl/io/redirection.h"

#include <zircon/processargs.h>

#include <utility>

namespace fsl {

zx_status_t CreateRedirectedSocket(int startup_fd, zx::socket* out_socket,
                                   StartupHandle* out_startup_handle) {
  zx::socket local_socket;
  zx::socket remote_socket;
  zx_status_t status = zx::socket::create(0u, &local_socket, &remote_socket);
  if (status != ZX_OK)
    return status;

  *out_socket = std::move(local_socket);
  out_startup_handle->id = PA_HND(PA_FD, startup_fd);
  out_startup_handle->handle = std::move(remote_socket);
  return ZX_OK;
}

}  // namespace fsl
