| OLD | NEW |
| (Empty) |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "mojo/public/platform/native/system_thunks.h" | |
| 6 | |
| 7 #include <assert.h> | |
| 8 #include <stddef.h> | |
| 9 #include <stdint.h> | |
| 10 | |
| 11 #include "mojo/public/platform/native/thunk_export.h" | |
| 12 | |
| 13 extern "C" { | |
| 14 | |
| 15 static MojoSystemThunks g_thunks = {0}; | |
| 16 | |
| 17 MojoTimeTicks MojoGetTimeTicksNow() { | |
| 18 assert(g_thunks.GetTimeTicksNow); | |
| 19 return g_thunks.GetTimeTicksNow(); | |
| 20 } | |
| 21 | |
| 22 MojoResult MojoClose(MojoHandle handle) { | |
| 23 assert(g_thunks.Close); | |
| 24 return g_thunks.Close(handle); | |
| 25 } | |
| 26 | |
| 27 MojoResult MojoWait(MojoHandle handle, | |
| 28 MojoHandleSignals signals, | |
| 29 MojoDeadline deadline, | |
| 30 struct MojoHandleSignalsState* signals_state) { | |
| 31 assert(g_thunks.Wait); | |
| 32 return g_thunks.Wait(handle, signals, deadline, signals_state); | |
| 33 } | |
| 34 | |
| 35 MojoResult MojoWaitMany(const MojoHandle* handles, | |
| 36 const MojoHandleSignals* signals, | |
| 37 uint32_t num_handles, | |
| 38 MojoDeadline deadline, | |
| 39 uint32_t* result_index, | |
| 40 struct MojoHandleSignalsState* signals_states) { | |
| 41 assert(g_thunks.WaitMany); | |
| 42 return g_thunks.WaitMany(handles, signals, num_handles, deadline, | |
| 43 result_index, signals_states); | |
| 44 } | |
| 45 | |
| 46 MojoResult MojoCreateMessagePipe(const MojoCreateMessagePipeOptions* options, | |
| 47 MojoHandle* message_pipe_handle0, | |
| 48 MojoHandle* message_pipe_handle1) { | |
| 49 assert(g_thunks.CreateMessagePipe); | |
| 50 return g_thunks.CreateMessagePipe(options, message_pipe_handle0, | |
| 51 message_pipe_handle1); | |
| 52 } | |
| 53 | |
| 54 MojoResult MojoWriteMessage(MojoHandle message_pipe_handle, | |
| 55 const void* bytes, | |
| 56 uint32_t num_bytes, | |
| 57 const MojoHandle* handles, | |
| 58 uint32_t num_handles, | |
| 59 MojoWriteMessageFlags flags) { | |
| 60 assert(g_thunks.WriteMessage); | |
| 61 return g_thunks.WriteMessage(message_pipe_handle, bytes, num_bytes, handles, | |
| 62 num_handles, flags); | |
| 63 } | |
| 64 | |
| 65 MojoResult MojoReadMessage(MojoHandle message_pipe_handle, | |
| 66 void* bytes, | |
| 67 uint32_t* num_bytes, | |
| 68 MojoHandle* handles, | |
| 69 uint32_t* num_handles, | |
| 70 MojoReadMessageFlags flags) { | |
| 71 assert(g_thunks.ReadMessage); | |
| 72 return g_thunks.ReadMessage(message_pipe_handle, bytes, num_bytes, handles, | |
| 73 num_handles, flags); | |
| 74 } | |
| 75 | |
| 76 MojoResult MojoCreateDataPipe(const MojoCreateDataPipeOptions* options, | |
| 77 MojoHandle* data_pipe_producer_handle, | |
| 78 MojoHandle* data_pipe_consumer_handle) { | |
| 79 assert(g_thunks.CreateDataPipe); | |
| 80 return g_thunks.CreateDataPipe(options, data_pipe_producer_handle, | |
| 81 data_pipe_consumer_handle); | |
| 82 } | |
| 83 | |
| 84 MojoResult MojoWriteData(MojoHandle data_pipe_producer_handle, | |
| 85 const void* elements, | |
| 86 uint32_t* num_elements, | |
| 87 MojoWriteDataFlags flags) { | |
| 88 assert(g_thunks.WriteData); | |
| 89 return g_thunks.WriteData(data_pipe_producer_handle, elements, num_elements, | |
| 90 flags); | |
| 91 } | |
| 92 | |
| 93 MojoResult MojoBeginWriteData(MojoHandle data_pipe_producer_handle, | |
| 94 void** buffer, | |
| 95 uint32_t* buffer_num_elements, | |
| 96 MojoWriteDataFlags flags) { | |
| 97 assert(g_thunks.BeginWriteData); | |
| 98 return g_thunks.BeginWriteData(data_pipe_producer_handle, buffer, | |
| 99 buffer_num_elements, flags); | |
| 100 } | |
| 101 | |
| 102 MojoResult MojoEndWriteData(MojoHandle data_pipe_producer_handle, | |
| 103 uint32_t num_elements_written) { | |
| 104 assert(g_thunks.EndWriteData); | |
| 105 return g_thunks.EndWriteData(data_pipe_producer_handle, num_elements_written); | |
| 106 } | |
| 107 | |
| 108 MojoResult MojoReadData(MojoHandle data_pipe_consumer_handle, | |
| 109 void* elements, | |
| 110 uint32_t* num_elements, | |
| 111 MojoReadDataFlags flags) { | |
| 112 assert(g_thunks.ReadData); | |
| 113 return g_thunks.ReadData(data_pipe_consumer_handle, elements, num_elements, | |
| 114 flags); | |
| 115 } | |
| 116 | |
| 117 MojoResult MojoBeginReadData(MojoHandle data_pipe_consumer_handle, | |
| 118 const void** buffer, | |
| 119 uint32_t* buffer_num_elements, | |
| 120 MojoReadDataFlags flags) { | |
| 121 assert(g_thunks.BeginReadData); | |
| 122 return g_thunks.BeginReadData(data_pipe_consumer_handle, buffer, | |
| 123 buffer_num_elements, flags); | |
| 124 } | |
| 125 | |
| 126 MojoResult MojoEndReadData(MojoHandle data_pipe_consumer_handle, | |
| 127 uint32_t num_elements_read) { | |
| 128 assert(g_thunks.EndReadData); | |
| 129 return g_thunks.EndReadData(data_pipe_consumer_handle, num_elements_read); | |
| 130 } | |
| 131 | |
| 132 MojoResult MojoCreateSharedBuffer( | |
| 133 const struct MojoCreateSharedBufferOptions* options, | |
| 134 uint64_t num_bytes, | |
| 135 MojoHandle* shared_buffer_handle) { | |
| 136 assert(g_thunks.CreateSharedBuffer); | |
| 137 return g_thunks.CreateSharedBuffer(options, num_bytes, shared_buffer_handle); | |
| 138 } | |
| 139 | |
| 140 MojoResult MojoDuplicateBufferHandle( | |
| 141 MojoHandle buffer_handle, | |
| 142 const struct MojoDuplicateBufferHandleOptions* options, | |
| 143 MojoHandle* new_buffer_handle) { | |
| 144 assert(g_thunks.DuplicateBufferHandle); | |
| 145 return g_thunks.DuplicateBufferHandle(buffer_handle, options, | |
| 146 new_buffer_handle); | |
| 147 } | |
| 148 | |
| 149 MojoResult MojoMapBuffer(MojoHandle buffer_handle, | |
| 150 uint64_t offset, | |
| 151 uint64_t num_bytes, | |
| 152 void** buffer, | |
| 153 MojoMapBufferFlags flags) { | |
| 154 assert(g_thunks.MapBuffer); | |
| 155 return g_thunks.MapBuffer(buffer_handle, offset, num_bytes, buffer, flags); | |
| 156 } | |
| 157 | |
| 158 MojoResult MojoUnmapBuffer(void* buffer) { | |
| 159 assert(g_thunks.UnmapBuffer); | |
| 160 return g_thunks.UnmapBuffer(buffer); | |
| 161 } | |
| 162 | |
| 163 MojoResult MojoCreateWaitSet(MojoHandle* wait_set) { | |
| 164 assert(g_thunks.CreateWaitSet); | |
| 165 return g_thunks.CreateWaitSet(wait_set); | |
| 166 } | |
| 167 | |
| 168 MojoResult MojoAddHandle(MojoHandle wait_set, | |
| 169 MojoHandle handle, | |
| 170 MojoHandleSignals signals) { | |
| 171 assert(g_thunks.AddHandle); | |
| 172 return g_thunks.AddHandle(wait_set, handle, signals); | |
| 173 } | |
| 174 | |
| 175 MojoResult MojoRemoveHandle(MojoHandle wait_set, MojoHandle handle) { | |
| 176 assert(g_thunks.RemoveHandle); | |
| 177 return g_thunks.RemoveHandle(wait_set, handle); | |
| 178 } | |
| 179 | |
| 180 MojoResult MojoGetReadyHandles(MojoHandle wait_set, | |
| 181 uint32_t* count, | |
| 182 MojoHandle* handles, | |
| 183 MojoResult* results, | |
| 184 struct MojoHandleSignalsState* signals_states) { | |
| 185 assert(g_thunks.GetReadyHandles); | |
| 186 return g_thunks.GetReadyHandles(wait_set, count, handles, results, | |
| 187 signals_states); | |
| 188 } | |
| 189 | |
| 190 MojoResult MojoWatch(MojoHandle handle, | |
| 191 MojoHandleSignals signals, | |
| 192 MojoWatchCallback callback, | |
| 193 uintptr_t context) { | |
| 194 assert(g_thunks.Watch); | |
| 195 return g_thunks.Watch(handle, signals, callback, context); | |
| 196 } | |
| 197 | |
| 198 MojoResult MojoCancelWatch(MojoHandle handle, uintptr_t context) { | |
| 199 assert(g_thunks.CancelWatch); | |
| 200 return g_thunks.CancelWatch(handle, context); | |
| 201 } | |
| 202 | |
| 203 MojoResult MojoFuseMessagePipes(MojoHandle handle0, MojoHandle handle1) { | |
| 204 assert(g_thunks.FuseMessagePipes); | |
| 205 return g_thunks.FuseMessagePipes(handle0, handle1); | |
| 206 } | |
| 207 | |
| 208 MojoResult MojoWriteMessageNew(MojoHandle message_pipe_handle, | |
| 209 MojoMessageHandle message, | |
| 210 MojoWriteMessageFlags flags) { | |
| 211 assert(g_thunks.WriteMessageNew); | |
| 212 return g_thunks.WriteMessageNew(message_pipe_handle, message, flags); | |
| 213 } | |
| 214 | |
| 215 MojoResult MojoReadMessageNew(MojoHandle message_pipe_handle, | |
| 216 MojoMessageHandle* message, | |
| 217 uint32_t* num_bytes, | |
| 218 MojoHandle* handles, | |
| 219 uint32_t* num_handles, | |
| 220 MojoReadMessageFlags flags) { | |
| 221 assert(g_thunks.ReadMessageNew); | |
| 222 return g_thunks.ReadMessageNew(message_pipe_handle, message, num_bytes, | |
| 223 handles, num_handles, flags); | |
| 224 } | |
| 225 | |
| 226 MojoResult MojoAllocMessage(uint32_t num_bytes, | |
| 227 const MojoHandle* handles, | |
| 228 uint32_t num_handles, | |
| 229 MojoAllocMessageFlags flags, | |
| 230 MojoMessageHandle* message) { | |
| 231 assert(g_thunks.AllocMessage); | |
| 232 return g_thunks.AllocMessage( | |
| 233 num_bytes, handles, num_handles, flags, message); | |
| 234 } | |
| 235 | |
| 236 MojoResult MojoFreeMessage(MojoMessageHandle message) { | |
| 237 assert(g_thunks.FreeMessage); | |
| 238 return g_thunks.FreeMessage(message); | |
| 239 } | |
| 240 | |
| 241 MojoResult MojoGetMessageBuffer(MojoMessageHandle message, void** buffer) { | |
| 242 assert(g_thunks.GetMessageBuffer); | |
| 243 return g_thunks.GetMessageBuffer(message, buffer); | |
| 244 } | |
| 245 | |
| 246 MojoResult MojoWrapPlatformHandle( | |
| 247 const struct MojoPlatformHandle* platform_handle, | |
| 248 MojoHandle* mojo_handle) { | |
| 249 assert(g_thunks.WrapPlatformHandle); | |
| 250 return g_thunks.WrapPlatformHandle(platform_handle, mojo_handle); | |
| 251 } | |
| 252 | |
| 253 MojoResult MojoUnwrapPlatformHandle( | |
| 254 MojoHandle mojo_handle, | |
| 255 struct MojoPlatformHandle* platform_handle) { | |
| 256 assert(g_thunks.UnwrapPlatformHandle); | |
| 257 return g_thunks.UnwrapPlatformHandle(mojo_handle, platform_handle); | |
| 258 } | |
| 259 | |
| 260 MojoResult MojoWrapPlatformSharedBufferHandle( | |
| 261 const struct MojoPlatformHandle* platform_handle, | |
| 262 size_t num_bytes, | |
| 263 MojoPlatformSharedBufferHandleFlags flags, | |
| 264 MojoHandle* mojo_handle) { | |
| 265 assert(g_thunks.WrapPlatformSharedBufferHandle); | |
| 266 return g_thunks.WrapPlatformSharedBufferHandle(platform_handle, num_bytes, | |
| 267 flags, mojo_handle); | |
| 268 } | |
| 269 | |
| 270 MojoResult MojoUnwrapPlatformSharedBufferHandle( | |
| 271 MojoHandle mojo_handle, | |
| 272 struct MojoPlatformHandle* platform_handle, | |
| 273 size_t* num_bytes, | |
| 274 MojoPlatformSharedBufferHandleFlags* flags) { | |
| 275 assert(g_thunks.UnwrapPlatformSharedBufferHandle); | |
| 276 return g_thunks.UnwrapPlatformSharedBufferHandle(mojo_handle, platform_handle, | |
| 277 num_bytes, flags); | |
| 278 } | |
| 279 | |
| 280 extern "C" THUNK_EXPORT size_t MojoSetSystemThunks( | |
| 281 const MojoSystemThunks* system_thunks) { | |
| 282 if (system_thunks->size >= sizeof(g_thunks)) | |
| 283 g_thunks = *system_thunks; | |
| 284 return sizeof(g_thunks); | |
| 285 } | |
| 286 | |
| 287 } // extern "C" | |
| OLD | NEW |