// 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 <lib/sys/cpp/file_descriptor.h>
#include <lib/sys/cpp/testing/launcher_impl.h>
#include <unistd.h>

namespace sys::testing {

void LauncherImpl::CreateComponent(
    fuchsia::sys::LaunchInfo launch_info,
    fidl::InterfaceRequest<fuchsia::sys::ComponentController> request) {
  if (!launch_info.out) {
    launch_info.out = sys::CloneFileDescriptor(STDOUT_FILENO);
  }
  if (!launch_info.err) {
    launch_info.err = sys::CloneFileDescriptor(STDERR_FILENO);
  }
  launcher_->CreateComponent(std::move(launch_info), std::move(request));
}

}  // namespace sys::testing
