普通文本  |  53行  |  1.37 KB

// Copyright 2014 The Chromium 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 "mojo/nacl/monacl_sel_main.h"

#include <stdio.h>

#include "mojo/nacl/mojo_syscall.h"
#include "native_client/src/public/chrome_main.h"
#include "native_client/src/public/nacl_app.h"
#include "native_client/src/trusted/desc/nacl_desc_io.h"
#include "native_client/src/trusted/service_runtime/include/sys/fcntl.h"

namespace mojo {

void LaunchNaCl(const char* nexe_file, const char* irt_file,
                int app_argc, char* app_argv[]) {
  NaClChromeMainInit();

  // Open the IRT.
  struct NaClDesc* irt_desc = (struct NaClDesc*) NaClDescIoDescOpen(
      irt_file, NACL_ABI_O_RDONLY, 0);
  if (NULL == irt_desc) {
    perror(irt_file);
    exit(1);
  }

  // Open the main executable.
  struct NaClDesc* nexe_desc = (struct NaClDesc*) NaClDescIoDescOpen(
      nexe_file, NACL_ABI_O_RDONLY, 0);
  if (NULL == nexe_desc) {
    perror(nexe_file);
    exit(1);
  }

  struct NaClChromeMainArgs* args = NaClChromeMainArgsCreate();
  args->nexe_desc = nexe_desc;
  args->irt_desc = irt_desc;

  args->argc = app_argc;
  args->argv = app_argv;

  struct NaClApp* nap = NaClAppCreate();
  InjectMojo(nap);

  int exit_status = 1;
  NaClChromeMainStart(nap, args, &exit_status);
  NaClExit(exit_status);
}

} // namespace mojo