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