1645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Copyright 2016 The Chromium Authors. All rights reserved.
2645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Use of this source code is governed by a BSD-style license that can be
3645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// found in the LICENSE file.
4645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
5645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// This file contains types/functions and constants for platform handle wrapping
6645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// and unwrapping APIs.
7645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//
8645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Note: This header should be compilable as C.
9645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
10645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#ifndef MOJO_PUBLIC_C_SYSTEM_PLATFORM_HANDLE_H_
11645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#define MOJO_PUBLIC_C_SYSTEM_PLATFORM_HANDLE_H_
12645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
13645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include <stdint.h>
14645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
15645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include "mojo/public/c/system/system_export.h"
16645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include "mojo/public/c/system/types.h"
17645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
18645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#ifdef __cplusplus
19645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezextern "C" {
20645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#endif
21645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
22645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// |MojoPlatformHandleType|: A value indicating the specific type of platform
23645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//     handle encapsulated by a MojoPlatformHandle (see below.) This is stored
24645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//     in the MojoPlatformHandle's |type| field and determines how the |value|
25645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//     field is interpreted.
26645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//
27645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//   |MOJO_PLATFORM_HANDLE_TYPE_INVALID| - An invalid platform handle.
28645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//   |MOJO_PLATFORM_HANDLE_TYPE_FILE_DESCRIPTOR| - A file descriptor. Only valid
29645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//       on POSIX systems.
30645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//   |MOJO_PLATFORM_HANDLE_TYPE_MACH_PORT| - A Mach port. Only valid on OS X.
31645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//   |MOJO_PLATFORM_HANDLE_TYPE_WINDOWS_HANDLE| - A Windows HANDLE value. Only
32645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//       valid on Windows.
33645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
34645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveztypedef uint32_t MojoPlatformHandleType;
35645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
36645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#ifdef __cplusplus
37645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezconst MojoPlatformHandleType MOJO_PLATFORM_HANDLE_TYPE_INVALID = 0;
38645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezconst MojoPlatformHandleType MOJO_PLATFORM_HANDLE_TYPE_FILE_DESCRIPTOR = 1;
39645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezconst MojoPlatformHandleType MOJO_PLATFORM_HANDLE_TYPE_MACH_PORT = 2;
40645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezconst MojoPlatformHandleType MOJO_PLATFORM_HANDLE_TYPE_WINDOWS_HANDLE = 3;
41645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#else
42645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#define MOJO_PLATFORM_HANDLE_TYPE_INVALID ((MojoPlatformHandleType)0)
43645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#define MOJO_PLATFORM_HANDLE_TYPE_FILE_DESCRIPTOR ((MojoPlatformHandleType)1)
44645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#define MOJO_PLATFORM_HANDLE_TYPE_MACH_PORT ((MojoPlatformHandleType)2)
45645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#define MOJO_PLATFORM_HANDLE_TYPE_WINDOWS_HANDLE ((MojoPlatformHandleType)3)
46645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#endif
47645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
48645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// |MojoPlatformHandle|: A handle to an OS object.
49645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//     |uint32_t struct_size|: The size of this structure. Used for versioning
50645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//         to allow for future extensions.
51645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//     |MojoPlatformHandleType type|: The type of handle stored in |value|.
52645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//     |uint64_t value|: The value of this handle. Ignored if |type| is
53645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//         MOJO_PLATFORM_HANDLE_TYPE_INVALID.
54645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//
55645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
56645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezstruct MOJO_ALIGNAS(8) MojoPlatformHandle {
57645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  uint32_t struct_size;
58645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  MojoPlatformHandleType type;
59645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  uint64_t value;
60645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez};
61645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezMOJO_STATIC_ASSERT(sizeof(MojoPlatformHandle) == 16,
62645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez                   "MojoPlatformHandle has wrong size");
63645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
64645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// |MojoPlatformSharedBufferHandleFlags|: Flags relevant to wrapped platform
65645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//     shared buffers.
66645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//
67645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//   |MOJO_PLATFORM_SHARED_BUFFER_HANDLE_NONE| - No flags.
68645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//   |MOJO_PLATFORM_SHARED_BUFFER_HANDLE_READ_ONLY| - Indicates that the wrapped
69645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//       buffer handle may only be mapped for reading.
70645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
71645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveztypedef uint32_t MojoPlatformSharedBufferHandleFlags;
72645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
73645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#ifdef __cplusplus
74645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezconst MojoPlatformSharedBufferHandleFlags
75645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezMOJO_PLATFORM_SHARED_BUFFER_HANDLE_FLAG_NONE = 0;
76645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
77645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezconst MojoPlatformSharedBufferHandleFlags
78645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezMOJO_PLATFORM_SHARED_BUFFER_HANDLE_FLAG_READ_ONLY = 1 << 0;
79645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#else
80645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#define MOJO_PLATFORM_SHARED_BUFFER_HANDLE_FLAG_NONE \
81645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    ((MojoPlatformSharedBufferHandleFlags)0)
82645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
83645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#define MOJO_PLATFORM_SHARED_BUFFER_HANDLE_FLAG_READ_ONLY \
84645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    ((MojoPlatformSharedBufferHandleFlags)1 << 0)
85645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#endif
86645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
87645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Wraps a generic platform handle as a Mojo handle which can be transferred
88645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// over a message pipe. Takes ownership of the underlying platform object.
89645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//
90645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// |platform_handle|: The platform handle to wrap.
91645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//
92645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Returns:
93645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//     |MOJO_RESULT_OK| if the handle was successfully wrapped. In this case
94645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//         |*mojo_handle| contains the Mojo handle of the wrapped object.
95645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//     |MOJO_RESULT_RESOURCE_EXHAUSTED| if the system is out of handles.
96645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//     |MOJO_RESULT_INVALID_ARGUMENT| if |platform_handle| was not a valid
97645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//          platform handle.
98645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//
99645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// NOTE: It is not always possible to detect if |platform_handle| is valid,
100645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// particularly when |platform_handle->type| is valid but
101645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// |platform_handle->value| does not represent a valid platform object.
102645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezMOJO_SYSTEM_EXPORT MojoResult
103645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezMojoWrapPlatformHandle(const struct MojoPlatformHandle* platform_handle,
104645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez                       MojoHandle* mojo_handle);  // Out
105645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
106645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Unwraps a generic platform handle from a Mojo handle. If this call succeeds,
107645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// ownership of the underlying platform object is bound to the returned platform
108645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// handle and becomes the caller's responsibility. The Mojo handle is always
109645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// closed regardless of success or failure.
110645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//
111645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// |mojo_handle|: The Mojo handle from which to unwrap the platform handle.
112645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//
113645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Returns:
114645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//     |MOJO_RESULT_OK| if the handle was successfully unwrapped. In this case
115645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//         |*platform_handle| contains the unwrapped platform handle.
116645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//     |MOJO_RESULT_INVALID_ARGUMENT| if |mojo_handle| was not a valid Mojo
117645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//         handle wrapping a platform handle.
118645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezMOJO_SYSTEM_EXPORT MojoResult
119645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezMojoUnwrapPlatformHandle(MojoHandle mojo_handle,
120645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez                         struct MojoPlatformHandle* platform_handle);  // Out
121645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
122645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Wraps a platform shared buffer handle as a Mojo shared buffer handle which
123645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// can be transferred over a message pipe. Takes ownership of the platform
124645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// shared buffer handle.
125645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//
126645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// |platform_handle|: The platform handle to wrap. Must be a handle to a
127645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//     shared buffer object.
128645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// |num_bytes|: The size of the shared buffer in bytes.
129645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// |flags|: Flags which influence the treatment of the shared buffer object. See
130645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//     below.
131645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//
132645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Flags:
133645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//    |MOJO_PLATFORM_SHARED_BUFFER_HANDLE_FLAG_NONE| indicates default behavior.
134645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//        No flags set.
135645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//    |MOJO_PLATFORM_SHARED_BUFFER_HANDLE_FLAG_READ_ONLY| indicates that the
136645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//        buffer handled to be wrapped may only be mapped as read-only. This
137645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//        flag does NOT change the access control of the buffer in any way.
138645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//
139645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Returns:
140645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//     |MOJO_RESULT_OK| if the handle was successfully wrapped. In this case
141645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//         |*mojo_handle| contains a Mojo shared buffer handle.
142645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//     |MOJO_RESULT_INVALID_ARGUMENT| if |platform_handle| was not a valid
143645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//         platform shared buffer handle.
144645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezMOJO_SYSTEM_EXPORT MojoResult
145645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezMojoWrapPlatformSharedBufferHandle(
146645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    const struct MojoPlatformHandle* platform_handle,
147645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    size_t num_bytes,
148645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    MojoPlatformSharedBufferHandleFlags flags,
149645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    MojoHandle* mojo_handle);  // Out
150645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
151645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Unwraps a platform shared buffer handle from a Mojo shared buffer handle.
152645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// If this call succeeds, ownership of the underlying shared buffer object is
153645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// bound to the returned platform handle and becomes the caller's
154645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// responsibility. The Mojo handle is always closed regardless of success or
155645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// failure.
156645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//
157645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// |mojo_handle|: The Mojo shared buffer handle to unwrap.
158645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//
159645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// |platform_handle|, |num_bytes| and |flags| are used to receive output values
160645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// and MUST always be non-null.
161645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//
162645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Returns:
163645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//    |MOJO_RESULT_OK| if the handle was successfully unwrapped. In this case
164645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//        |*platform_handle| contains a platform shared buffer handle,
165645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//        |*num_bytes| contains the size of the shared buffer object, and
166645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//        |*flags| indicates flags relevant to the wrapped buffer (see below).
167645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//    |MOJO_RESULT_INVALID_ARGUMENT| if |mojo_handle| is not a valid Mojo
168645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//        shared buffer handle.
169645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//
170645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Flags which may be set in |*flags| upon success:
171645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//    |MOJO_PLATFORM_SHARED_BUFFER_FLAG_READ_ONLY| is set iff the unwrapped
172645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez//        shared buffer handle may only be mapped as read-only.
173645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezMOJO_SYSTEM_EXPORT MojoResult
174645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezMojoUnwrapPlatformSharedBufferHandle(
175645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    MojoHandle mojo_handle,
176645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    struct MojoPlatformHandle* platform_handle,
177645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    size_t* num_bytes,
178645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    MojoPlatformSharedBufferHandleFlags* flags);
179645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
180645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#ifdef __cplusplus
181645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}  // extern "C"
182645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#endif
183645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
184645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#endif  // MOJO_PUBLIC_C_SYSTEM_PLATFORM_HANDLE_H_
185