// 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 <cstdio>
#include <string>

#include <zircon/status.h>
#include <zircon/syscalls.h>
#include <zircon/types.h>
#include "garnet/lib/chrealm/chrealm.h"
#include "lib/fxl/command_line.h"

static void PrintUsage() {
  fprintf(stderr,
          "Usage: chrealm <realm> [-- cmd arg1 ... argn]\n"
          "Starts a process with the services of the given realm, as a path "
          "under /hub.\n"
          "The process has the same namespace as the calling process, but "
          "with /svc replaced with the /svc of <realm>.\n"
          "The process will run [cmd arg1 ... argn] if specified, otherwise "
          "it defaults to /boot/bin/sh.\n"
          "Examples:\n"
          "chrealm /hub/r/myrealm/<koid> (assume services of myrealm)\n"
          "chrealm /hub/r/myrealm/<koid> -- /system/bin/ls /svc "
          "(list services of myrealm from inside myrealm)\n");
}

int main(int argc, const char** argv) {
  auto command_line = fxl::CommandLineFromArgcArgv(argc, argv);
  const auto& positional_args = command_line.positional_args();
  if (positional_args.size() < 1 || positional_args.size() == 2) {
    PrintUsage();
    return 1;
  }
  if (positional_args.size() >= 2 && positional_args[1] != "--") {
    PrintUsage();
    return 1;
  }

  const char* kDefaultArgv[] = {"/boot/bin/sh", nullptr};
  const char** child_argv = kDefaultArgv;
  if (argc > 2) {
    child_argv = &argv[3];
  }

  int64_t code;
  std::string error;
  zx_status_t status =
      chrealm::RunBinaryInRealm(positional_args[0], child_argv, &code, &error);
  if (status != ZX_OK) {
    fprintf(stderr, "chrealm returned %s: %s\n", zx_status_get_string(status),
            error.c_str());
    return 1;
  }
  zx_process_exit(code);
  return 0;
}
