| // Copyright 2015 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. | 
 |  | 
 | {{generator_warning}} | 
 |  | 
 | #include <stdio.h> | 
 | #include <string.h> | 
 |  | 
 | #include "mojo/public/c/system/core.h" | 
 | #include "{{platform_dir}}/mojo_irt.h" | 
 | #include "native_client/src/public/chrome_main.h" | 
 | #include "native_client/src/public/imc_syscalls.h" | 
 | #include "native_client/src/public/imc_types.h" | 
 | #include "native_client/src/public/irt_core.h" | 
 |  | 
 | #define NACL_MOJO_DESC (NACL_CHROME_DESC_BASE + 3) | 
 |  | 
 | static void DoMojoCall(uint32_t params[], nacl_abi_size_t num_params) { | 
 |   struct NaClAbiNaClImcMsgIoVec iov[1] = { | 
 |     {params, num_params} | 
 |   }; | 
 |   struct NaClAbiNaClImcMsgHdr msgh = {iov, 1, NULL, 0}; | 
 |   // Note: return value unchecked.  We're relying on the result parameter being | 
 |   // unmodified - if the syscall fails, the Mojo function will return whatever | 
 |   // the result parameter was initialized to before this function was called. | 
 |   imc_sendmsg(NACL_MOJO_DESC, &msgh, 0); | 
 | } | 
 |  | 
 | {{body}} | 
 |  | 
 | size_t mojo_irt_query(const char* interface_ident, | 
 |                       void* table, | 
 |                       size_t tablesize) { | 
 |   static const size_t size = sizeof(kIrtMojo); | 
 |   if (0 == strcmp(interface_ident, NACL_IRT_MOJO_v0_1)) { | 
 |     if (size <= tablesize) { | 
 |       memcpy(table, &kIrtMojo, size); | 
 |       return size; | 
 |     } | 
 |   } | 
 |   return 0; | 
 | } |