Chromium Code Reviews| Index: mojo/nacl/sfi/nacl_bindings/mojo_syscall.cc |
| diff --git a/mojo/nacl/sfi/nacl_bindings/mojo_syscall.cc b/mojo/nacl/sfi/nacl_bindings/mojo_syscall.cc |
| index c08c2a0dd2489ed9755f867dd0c57e7058688545..54cd6fc98911a8b6b5c8c54b8b9a7d847f538250 100644 |
| --- a/mojo/nacl/sfi/nacl_bindings/mojo_syscall.cc |
| +++ b/mojo/nacl/sfi/nacl_bindings/mojo_syscall.cc |
| @@ -48,206 +48,268 @@ ssize_t MojoDescSendMsg(void* handle, |
| uint32_t msg_type = params[0]; |
| switch (msg_type) { |
| case 0: { |
| - if (num_params != 5) { |
| + if (num_params != 3) { |
|
viettrungluu
2016/03/09 00:51:04
This enormous diff is nearly entirely due to reord
|
| return -1; |
| } |
| - const struct MojoCreateSharedBufferOptions* options; |
| - uint64_t num_bytes_value; |
| - MojoHandle volatile* shared_buffer_handle_ptr; |
| - MojoHandle shared_buffer_handle_value; |
| + MojoHandle volatile* handle_ptr; |
| + MojoHandle handle_value; |
| MojoResult volatile* result_ptr; |
| MojoResult result_value; |
| { |
| ScopedCopyLock copy_lock(nap); |
| - if (!ConvertExtensibleStructInput(nap, params[1], true, &options)) { |
| + if (!ConvertScalarInOut(nap, params[1], false, &handle_value, |
| + &handle_ptr)) { |
| return -1; |
| } |
| - if (!ConvertScalarInput(nap, params[2], &num_bytes_value)) { |
| + if (!ConvertScalarOutput(nap, params[2], false, &result_ptr)) { |
| return -1; |
| } |
| - if (!ConvertScalarInOut(nap, params[3], false, |
| - &shared_buffer_handle_value, |
| - &shared_buffer_handle_ptr)) { |
| + } |
| + |
| + result_value = _MojoGetInitialHandle(&handle_value); |
| + |
| + { |
| + ScopedCopyLock copy_lock(nap); |
| + *handle_ptr = handle_value; |
| + *result_ptr = result_value; |
| + } |
| + |
| + return 0; |
| + } |
| + case 1: { |
| + if (num_params != 2) { |
| + return -1; |
| + } |
| + MojoTimeTicks volatile* result_ptr; |
| + MojoTimeTicks result_value; |
| + { |
| + ScopedCopyLock copy_lock(nap); |
| + if (!ConvertScalarOutput(nap, params[1], false, &result_ptr)) { |
| return -1; |
| } |
| - if (!ConvertScalarOutput(nap, params[4], false, &result_ptr)) { |
| + } |
| + |
| + result_value = MojoSystemImplGetTimeTicksNow(g_mojo_system); |
| + |
| + { |
| + ScopedCopyLock copy_lock(nap); |
| + *result_ptr = result_value; |
| + } |
| + |
| + return 0; |
| + } |
| + case 2: { |
| + if (num_params != 3) { |
| + return -1; |
| + } |
| + MojoHandle handle_value; |
| + MojoResult volatile* result_ptr; |
| + MojoResult result_value; |
| + { |
| + ScopedCopyLock copy_lock(nap); |
| + if (!ConvertScalarInput(nap, params[1], &handle_value)) { |
| + return -1; |
| + } |
| + if (!ConvertScalarOutput(nap, params[2], false, &result_ptr)) { |
| return -1; |
| } |
| } |
| - result_value = MojoSystemImplCreateSharedBuffer( |
| - g_mojo_system, options, num_bytes_value, &shared_buffer_handle_value); |
| + result_value = MojoSystemImplClose(g_mojo_system, handle_value); |
| { |
| ScopedCopyLock copy_lock(nap); |
| - *shared_buffer_handle_ptr = shared_buffer_handle_value; |
| *result_ptr = result_value; |
| } |
| return 0; |
| } |
| - case 1: { |
| - if (num_params != 5) { |
| + case 3: { |
| + if (num_params != 6) { |
| return -1; |
| } |
| - MojoHandle buffer_handle_value; |
| - const struct MojoDuplicateBufferHandleOptions* options; |
| - MojoHandle volatile* new_buffer_handle_ptr; |
| - MojoHandle new_buffer_handle_value; |
| + MojoHandle handle_value; |
| + MojoHandleSignals signals_value; |
| + MojoDeadline deadline_value; |
| + MojoHandleSignalsState volatile* signals_state_ptr; |
| + MojoHandleSignalsState signals_state_value; |
| MojoResult volatile* result_ptr; |
| MojoResult result_value; |
| { |
| ScopedCopyLock copy_lock(nap); |
| - if (!ConvertScalarInput(nap, params[1], &buffer_handle_value)) { |
| + if (!ConvertScalarInput(nap, params[1], &handle_value)) { |
| return -1; |
| } |
| - if (!ConvertExtensibleStructInput(nap, params[2], true, &options)) { |
| + if (!ConvertScalarInput(nap, params[2], &signals_value)) { |
| return -1; |
| } |
| - if (!ConvertScalarInOut(nap, params[3], false, &new_buffer_handle_value, |
| - &new_buffer_handle_ptr)) { |
| + if (!ConvertScalarInput(nap, params[3], &deadline_value)) { |
| return -1; |
| } |
| - if (!ConvertScalarOutput(nap, params[4], false, &result_ptr)) { |
| + if (!ConvertScalarOutput(nap, params[4], true, &signals_state_ptr)) { |
| + return -1; |
| + } |
| + if (!ConvertScalarOutput(nap, params[5], false, &result_ptr)) { |
| return -1; |
| } |
| } |
| - result_value = MojoSystemImplDuplicateBufferHandle( |
| - g_mojo_system, buffer_handle_value, options, |
| - &new_buffer_handle_value); |
| + result_value = MojoSystemImplWait( |
| + g_mojo_system, handle_value, signals_value, deadline_value, |
| + signals_state_ptr ? &signals_state_value : nullptr); |
| { |
| ScopedCopyLock copy_lock(nap); |
| - *new_buffer_handle_ptr = new_buffer_handle_value; |
| + if (signals_state_ptr) { |
| + memcpy_volatile_out(signals_state_ptr, &signals_state_value, |
| + sizeof(MojoHandleSignalsState)); |
| + } |
| *result_ptr = result_value; |
| } |
| return 0; |
| } |
| - case 2: |
| - fprintf(stderr, "MojoMapBuffer not implemented\n"); |
| - return -1; |
| - case 3: |
| - fprintf(stderr, "MojoUnmapBuffer not implemented\n"); |
| - return -1; |
| case 4: { |
| - if (num_params != 5) { |
| + if (num_params != 8) { |
| return -1; |
| } |
| - const struct MojoCreateDataPipeOptions* options; |
| - MojoHandle volatile* data_pipe_producer_handle_ptr; |
| - MojoHandle data_pipe_producer_handle_value; |
| - MojoHandle volatile* data_pipe_consumer_handle_ptr; |
| - MojoHandle data_pipe_consumer_handle_value; |
| + const MojoHandle* handles; |
| + const MojoHandleSignals* signals; |
| + uint32_t num_handles_value; |
| + MojoDeadline deadline_value; |
| + uint32_t volatile* result_index_ptr; |
| + uint32_t result_index_value; |
| + struct MojoHandleSignalsState* signals_states; |
| MojoResult volatile* result_ptr; |
| MojoResult result_value; |
| { |
| ScopedCopyLock copy_lock(nap); |
| - if (!ConvertExtensibleStructInput(nap, params[1], true, &options)) { |
| + if (!ConvertScalarInput(nap, params[3], &num_handles_value)) { |
| return -1; |
| } |
| - if (!ConvertScalarInOut(nap, params[2], false, |
| - &data_pipe_producer_handle_value, |
| - &data_pipe_producer_handle_ptr)) { |
| + if (!ConvertScalarInput(nap, params[4], &deadline_value)) { |
| return -1; |
| } |
| - if (!ConvertScalarInOut(nap, params[3], false, |
| - &data_pipe_consumer_handle_value, |
| - &data_pipe_consumer_handle_ptr)) { |
| + if (!ConvertScalarInOut(nap, params[5], true, &result_index_value, |
| + &result_index_ptr)) { |
| return -1; |
| } |
| - if (!ConvertScalarOutput(nap, params[4], false, &result_ptr)) { |
| + if (!ConvertScalarOutput(nap, params[7], false, &result_ptr)) { |
| + return -1; |
| + } |
| + if (!ConvertArray(nap, params[1], num_handles_value, sizeof(*handles), |
| + false, &handles)) { |
| + return -1; |
| + } |
| + if (!ConvertArray(nap, params[2], num_handles_value, sizeof(*signals), |
| + false, &signals)) { |
| + return -1; |
| + } |
| + if (!ConvertArray(nap, params[6], num_handles_value, |
| + sizeof(*signals_states), true, &signals_states)) { |
| return -1; |
| } |
| } |
| - result_value = MojoSystemImplCreateDataPipe( |
| - g_mojo_system, options, &data_pipe_producer_handle_value, |
| - &data_pipe_consumer_handle_value); |
| + result_value = MojoSystemImplWaitMany( |
| + g_mojo_system, handles, signals, num_handles_value, deadline_value, |
| + result_index_ptr ? &result_index_value : nullptr, signals_states); |
| { |
| ScopedCopyLock copy_lock(nap); |
| - *data_pipe_producer_handle_ptr = data_pipe_producer_handle_value; |
| - *data_pipe_consumer_handle_ptr = data_pipe_consumer_handle_value; |
| + if (result_index_ptr) { |
| + *result_index_ptr = result_index_value; |
| + } |
| *result_ptr = result_value; |
| } |
| return 0; |
| } |
| case 5: { |
| - if (num_params != 6) { |
| + if (num_params != 5) { |
| return -1; |
| } |
| - MojoHandle data_pipe_producer_handle_value; |
| - const void* elements; |
| - uint32_t volatile* num_bytes_ptr; |
| - uint32_t num_bytes_value; |
| - MojoWriteDataFlags flags_value; |
| + const struct MojoCreateMessagePipeOptions* options; |
| + MojoHandle volatile* message_pipe_handle0_ptr; |
| + MojoHandle message_pipe_handle0_value; |
| + MojoHandle volatile* message_pipe_handle1_ptr; |
| + MojoHandle message_pipe_handle1_value; |
| MojoResult volatile* result_ptr; |
| MojoResult result_value; |
| { |
| ScopedCopyLock copy_lock(nap); |
| - if (!ConvertScalarInput(nap, params[1], |
| - &data_pipe_producer_handle_value)) { |
| - return -1; |
| - } |
| - if (!ConvertScalarInOut(nap, params[3], false, &num_bytes_value, |
| - &num_bytes_ptr)) { |
| + if (!ConvertExtensibleStructInput(nap, params[1], true, &options)) { |
| return -1; |
| } |
| - if (!ConvertScalarInput(nap, params[4], &flags_value)) { |
| + if (!ConvertScalarInOut(nap, params[2], false, |
| + &message_pipe_handle0_value, |
| + &message_pipe_handle0_ptr)) { |
| return -1; |
| } |
| - if (!ConvertScalarOutput(nap, params[5], false, &result_ptr)) { |
| + if (!ConvertScalarInOut(nap, params[3], false, |
| + &message_pipe_handle1_value, |
| + &message_pipe_handle1_ptr)) { |
| return -1; |
| } |
| - if (!ConvertArray(nap, params[2], num_bytes_value, 1, false, |
| - &elements)) { |
| + if (!ConvertScalarOutput(nap, params[4], false, &result_ptr)) { |
| return -1; |
| } |
| } |
| - result_value = MojoSystemImplWriteData( |
| - g_mojo_system, data_pipe_producer_handle_value, elements, |
| - &num_bytes_value, flags_value); |
| + result_value = MojoSystemImplCreateMessagePipe( |
| + g_mojo_system, options, &message_pipe_handle0_value, |
| + &message_pipe_handle1_value); |
| { |
| ScopedCopyLock copy_lock(nap); |
| - *num_bytes_ptr = num_bytes_value; |
| + *message_pipe_handle0_ptr = message_pipe_handle0_value; |
| + *message_pipe_handle1_ptr = message_pipe_handle1_value; |
| *result_ptr = result_value; |
| } |
| return 0; |
| } |
| - case 6: |
| - fprintf(stderr, "MojoBeginWriteData not implemented\n"); |
| - return -1; |
| - case 7: { |
| - if (num_params != 4) { |
| + case 6: { |
| + if (num_params != 8) { |
| return -1; |
| } |
| - MojoHandle data_pipe_producer_handle_value; |
| - uint32_t num_bytes_written_value; |
| + MojoHandle message_pipe_handle_value; |
| + const void* bytes; |
| + uint32_t num_bytes_value; |
| + const MojoHandle* handles; |
| + uint32_t num_handles_value; |
| + MojoWriteMessageFlags flags_value; |
| MojoResult volatile* result_ptr; |
| MojoResult result_value; |
| { |
| ScopedCopyLock copy_lock(nap); |
| - if (!ConvertScalarInput(nap, params[1], |
| - &data_pipe_producer_handle_value)) { |
| + if (!ConvertScalarInput(nap, params[1], &message_pipe_handle_value)) { |
| return -1; |
| } |
| - if (!ConvertScalarInput(nap, params[2], &num_bytes_written_value)) { |
| + if (!ConvertScalarInput(nap, params[3], &num_bytes_value)) { |
| return -1; |
| } |
| - if (!ConvertScalarOutput(nap, params[3], false, &result_ptr)) { |
| + if (!ConvertScalarInput(nap, params[5], &num_handles_value)) { |
| + return -1; |
| + } |
| + if (!ConvertScalarInput(nap, params[6], &flags_value)) { |
| + return -1; |
| + } |
| + if (!ConvertScalarOutput(nap, params[7], false, &result_ptr)) { |
| + return -1; |
| + } |
| + if (!ConvertArray(nap, params[2], num_bytes_value, 1, true, &bytes)) { |
| + return -1; |
| + } |
| + if (!ConvertArray(nap, params[4], num_handles_value, sizeof(*handles), |
| + true, &handles)) { |
| return -1; |
| } |
| } |
| - result_value = MojoSystemImplEndWriteData(g_mojo_system, |
| - data_pipe_producer_handle_value, |
| - num_bytes_written_value); |
| + result_value = MojoSystemImplWriteMessage( |
| + g_mojo_system, message_pipe_handle_value, bytes, num_bytes_value, |
| + handles, num_handles_value, flags_value); |
| { |
| ScopedCopyLock copy_lock(nap); |
| @@ -256,126 +318,183 @@ ssize_t MojoDescSendMsg(void* handle, |
| return 0; |
| } |
| - case 8: { |
| - if (num_params != 6) { |
| + case 7: { |
| + if (num_params != 8) { |
| return -1; |
| } |
| - MojoHandle data_pipe_consumer_handle_value; |
| - void* elements; |
| + MojoHandle message_pipe_handle_value; |
| + void* bytes; |
| uint32_t volatile* num_bytes_ptr; |
| uint32_t num_bytes_value; |
| - MojoReadDataFlags flags_value; |
| + MojoHandle* handles; |
| + uint32_t volatile* num_handles_ptr; |
| + uint32_t num_handles_value; |
| + MojoReadMessageFlags flags_value; |
| MojoResult volatile* result_ptr; |
| MojoResult result_value; |
| { |
| ScopedCopyLock copy_lock(nap); |
| - if (!ConvertScalarInput(nap, params[1], |
| - &data_pipe_consumer_handle_value)) { |
| + if (!ConvertScalarInput(nap, params[1], &message_pipe_handle_value)) { |
| return -1; |
| } |
| - if (!ConvertScalarInOut(nap, params[3], false, &num_bytes_value, |
| + if (!ConvertScalarInOut(nap, params[3], true, &num_bytes_value, |
| &num_bytes_ptr)) { |
| return -1; |
| } |
| - if (!ConvertScalarInput(nap, params[4], &flags_value)) { |
| + if (!ConvertScalarInOut(nap, params[5], true, &num_handles_value, |
| + &num_handles_ptr)) { |
| return -1; |
| } |
| - if (!ConvertScalarOutput(nap, params[5], false, &result_ptr)) { |
| + if (!ConvertScalarInput(nap, params[6], &flags_value)) { |
| return -1; |
| } |
| - if (!ConvertArray(nap, params[2], num_bytes_value, 1, false, |
| - &elements)) { |
| + if (!ConvertScalarOutput(nap, params[7], false, &result_ptr)) { |
| + return -1; |
| + } |
| + if (!ConvertArray(nap, params[2], num_bytes_value, 1, true, &bytes)) { |
| + return -1; |
| + } |
| + if (!ConvertArray(nap, params[4], num_handles_value, sizeof(*handles), |
| + true, &handles)) { |
| return -1; |
| } |
| } |
| - result_value = |
| - MojoSystemImplReadData(g_mojo_system, data_pipe_consumer_handle_value, |
| - elements, &num_bytes_value, flags_value); |
| + result_value = MojoSystemImplReadMessage( |
| + g_mojo_system, message_pipe_handle_value, bytes, |
| + num_bytes_ptr ? &num_bytes_value : nullptr, handles, |
| + num_handles_ptr ? &num_handles_value : nullptr, flags_value); |
| { |
| ScopedCopyLock copy_lock(nap); |
| - *num_bytes_ptr = num_bytes_value; |
| + if (num_bytes_ptr) { |
| + *num_bytes_ptr = num_bytes_value; |
| + } |
| + if (num_handles_ptr) { |
| + *num_handles_ptr = num_handles_value; |
| + } |
| *result_ptr = result_value; |
| } |
| return 0; |
| } |
| - case 9: |
| - fprintf(stderr, "MojoBeginReadData not implemented\n"); |
| - return -1; |
| - case 10: { |
| - if (num_params != 4) { |
| + case 8: { |
| + if (num_params != 5) { |
| return -1; |
| } |
| + const struct MojoCreateDataPipeOptions* options; |
| + MojoHandle volatile* data_pipe_producer_handle_ptr; |
| + MojoHandle data_pipe_producer_handle_value; |
| + MojoHandle volatile* data_pipe_consumer_handle_ptr; |
| MojoHandle data_pipe_consumer_handle_value; |
| - uint32_t num_bytes_read_value; |
| MojoResult volatile* result_ptr; |
| MojoResult result_value; |
| { |
| ScopedCopyLock copy_lock(nap); |
| - if (!ConvertScalarInput(nap, params[1], |
| - &data_pipe_consumer_handle_value)) { |
| + if (!ConvertExtensibleStructInput(nap, params[1], true, &options)) { |
| return -1; |
| } |
| - if (!ConvertScalarInput(nap, params[2], &num_bytes_read_value)) { |
| + if (!ConvertScalarInOut(nap, params[2], false, |
| + &data_pipe_producer_handle_value, |
| + &data_pipe_producer_handle_ptr)) { |
| return -1; |
| } |
| - if (!ConvertScalarOutput(nap, params[3], false, &result_ptr)) { |
| + if (!ConvertScalarInOut(nap, params[3], false, |
| + &data_pipe_consumer_handle_value, |
| + &data_pipe_consumer_handle_ptr)) { |
| + return -1; |
| + } |
| + if (!ConvertScalarOutput(nap, params[4], false, &result_ptr)) { |
| return -1; |
| } |
| } |
| - result_value = MojoSystemImplEndReadData( |
| - g_mojo_system, data_pipe_consumer_handle_value, num_bytes_read_value); |
| + result_value = MojoSystemImplCreateDataPipe( |
| + g_mojo_system, options, &data_pipe_producer_handle_value, |
| + &data_pipe_consumer_handle_value); |
| { |
| ScopedCopyLock copy_lock(nap); |
| + *data_pipe_producer_handle_ptr = data_pipe_producer_handle_value; |
| + *data_pipe_consumer_handle_ptr = data_pipe_consumer_handle_value; |
| *result_ptr = result_value; |
| } |
| return 0; |
| } |
| - case 11: { |
| - if (num_params != 2) { |
| + case 9: { |
| + if (num_params != 6) { |
| return -1; |
| } |
| - MojoTimeTicks volatile* result_ptr; |
| - MojoTimeTicks result_value; |
| + MojoHandle data_pipe_producer_handle_value; |
| + const void* elements; |
| + uint32_t volatile* num_bytes_ptr; |
| + uint32_t num_bytes_value; |
| + MojoWriteDataFlags flags_value; |
| + MojoResult volatile* result_ptr; |
| + MojoResult result_value; |
| { |
| ScopedCopyLock copy_lock(nap); |
| - if (!ConvertScalarOutput(nap, params[1], false, &result_ptr)) { |
| + if (!ConvertScalarInput(nap, params[1], |
| + &data_pipe_producer_handle_value)) { |
| + return -1; |
| + } |
| + if (!ConvertScalarInOut(nap, params[3], false, &num_bytes_value, |
| + &num_bytes_ptr)) { |
| + return -1; |
| + } |
| + if (!ConvertScalarInput(nap, params[4], &flags_value)) { |
| + return -1; |
| + } |
| + if (!ConvertScalarOutput(nap, params[5], false, &result_ptr)) { |
| + return -1; |
| + } |
| + if (!ConvertArray(nap, params[2], num_bytes_value, 1, false, |
| + &elements)) { |
| return -1; |
| } |
| } |
| - result_value = MojoSystemImplGetTimeTicksNow(g_mojo_system); |
| + result_value = MojoSystemImplWriteData( |
| + g_mojo_system, data_pipe_producer_handle_value, elements, |
| + &num_bytes_value, flags_value); |
| { |
| ScopedCopyLock copy_lock(nap); |
| + *num_bytes_ptr = num_bytes_value; |
| *result_ptr = result_value; |
| } |
| return 0; |
| } |
| - case 12: { |
| - if (num_params != 3) { |
| + case 10: |
| + fprintf(stderr, "MojoBeginWriteData not implemented\n"); |
| + return -1; |
| + case 11: { |
| + if (num_params != 4) { |
| return -1; |
| } |
| - MojoHandle handle_value; |
| + MojoHandle data_pipe_producer_handle_value; |
| + uint32_t num_bytes_written_value; |
| MojoResult volatile* result_ptr; |
| MojoResult result_value; |
| { |
| ScopedCopyLock copy_lock(nap); |
| - if (!ConvertScalarInput(nap, params[1], &handle_value)) { |
| + if (!ConvertScalarInput(nap, params[1], |
| + &data_pipe_producer_handle_value)) { |
| return -1; |
| } |
| - if (!ConvertScalarOutput(nap, params[2], false, &result_ptr)) { |
| + if (!ConvertScalarInput(nap, params[2], &num_bytes_written_value)) { |
| + return -1; |
| + } |
| + if (!ConvertScalarOutput(nap, params[3], false, &result_ptr)) { |
| return -1; |
| } |
| } |
| - result_value = MojoSystemImplClose(g_mojo_system, handle_value); |
| + result_value = MojoSystemImplEndWriteData(g_mojo_system, |
| + data_pipe_producer_handle_value, |
| + num_bytes_written_value); |
| { |
| ScopedCopyLock copy_lock(nap); |
| @@ -384,102 +503,81 @@ ssize_t MojoDescSendMsg(void* handle, |
| return 0; |
| } |
| - case 13: { |
| + case 12: { |
| if (num_params != 6) { |
| return -1; |
| } |
| - MojoHandle handle_value; |
| - MojoHandleSignals signals_value; |
| - MojoDeadline deadline_value; |
| - MojoHandleSignalsState volatile* signals_state_ptr; |
| - MojoHandleSignalsState signals_state_value; |
| + MojoHandle data_pipe_consumer_handle_value; |
| + void* elements; |
| + uint32_t volatile* num_bytes_ptr; |
| + uint32_t num_bytes_value; |
| + MojoReadDataFlags flags_value; |
| MojoResult volatile* result_ptr; |
| MojoResult result_value; |
| { |
| ScopedCopyLock copy_lock(nap); |
| - if (!ConvertScalarInput(nap, params[1], &handle_value)) { |
| + if (!ConvertScalarInput(nap, params[1], |
| + &data_pipe_consumer_handle_value)) { |
| return -1; |
| } |
| - if (!ConvertScalarInput(nap, params[2], &signals_value)) { |
| + if (!ConvertScalarInOut(nap, params[3], false, &num_bytes_value, |
| + &num_bytes_ptr)) { |
| return -1; |
| } |
| - if (!ConvertScalarInput(nap, params[3], &deadline_value)) { |
| + if (!ConvertScalarInput(nap, params[4], &flags_value)) { |
| return -1; |
| } |
| - if (!ConvertScalarOutput(nap, params[4], true, &signals_state_ptr)) { |
| + if (!ConvertScalarOutput(nap, params[5], false, &result_ptr)) { |
| return -1; |
| } |
| - if (!ConvertScalarOutput(nap, params[5], false, &result_ptr)) { |
| + if (!ConvertArray(nap, params[2], num_bytes_value, 1, false, |
| + &elements)) { |
| return -1; |
| } |
| } |
| - result_value = MojoSystemImplWait( |
| - g_mojo_system, handle_value, signals_value, deadline_value, |
| - signals_state_ptr ? &signals_state_value : nullptr); |
| + result_value = |
| + MojoSystemImplReadData(g_mojo_system, data_pipe_consumer_handle_value, |
| + elements, &num_bytes_value, flags_value); |
| { |
| ScopedCopyLock copy_lock(nap); |
| - if (signals_state_ptr) { |
| - memcpy_volatile_out(signals_state_ptr, &signals_state_value, |
| - sizeof(MojoHandleSignalsState)); |
| - } |
| + *num_bytes_ptr = num_bytes_value; |
| *result_ptr = result_value; |
| } |
| return 0; |
| } |
| + case 13: |
| + fprintf(stderr, "MojoBeginReadData not implemented\n"); |
| + return -1; |
| case 14: { |
| - if (num_params != 8) { |
| + if (num_params != 4) { |
| return -1; |
| } |
| - const MojoHandle* handles; |
| - const MojoHandleSignals* signals; |
| - uint32_t num_handles_value; |
| - MojoDeadline deadline_value; |
| - uint32_t volatile* result_index_ptr; |
| - uint32_t result_index_value; |
| - struct MojoHandleSignalsState* signals_states; |
| + MojoHandle data_pipe_consumer_handle_value; |
| + uint32_t num_bytes_read_value; |
| MojoResult volatile* result_ptr; |
| MojoResult result_value; |
| { |
| ScopedCopyLock copy_lock(nap); |
| - if (!ConvertScalarInput(nap, params[3], &num_handles_value)) { |
| - return -1; |
| - } |
| - if (!ConvertScalarInput(nap, params[4], &deadline_value)) { |
| - return -1; |
| - } |
| - if (!ConvertScalarInOut(nap, params[5], true, &result_index_value, |
| - &result_index_ptr)) { |
| - return -1; |
| - } |
| - if (!ConvertScalarOutput(nap, params[7], false, &result_ptr)) { |
| - return -1; |
| - } |
| - if (!ConvertArray(nap, params[1], num_handles_value, sizeof(*handles), |
| - false, &handles)) { |
| + if (!ConvertScalarInput(nap, params[1], |
| + &data_pipe_consumer_handle_value)) { |
| return -1; |
| } |
| - if (!ConvertArray(nap, params[2], num_handles_value, sizeof(*signals), |
| - false, &signals)) { |
| + if (!ConvertScalarInput(nap, params[2], &num_bytes_read_value)) { |
| return -1; |
| } |
| - if (!ConvertArray(nap, params[6], num_handles_value, |
| - sizeof(*signals_states), true, &signals_states)) { |
| + if (!ConvertScalarOutput(nap, params[3], false, &result_ptr)) { |
| return -1; |
| } |
| } |
| - result_value = MojoSystemImplWaitMany( |
| - g_mojo_system, handles, signals, num_handles_value, deadline_value, |
| - result_index_ptr ? &result_index_value : nullptr, signals_states); |
| + result_value = MojoSystemImplEndReadData( |
| + g_mojo_system, data_pipe_consumer_handle_value, num_bytes_read_value); |
| { |
| ScopedCopyLock copy_lock(nap); |
| - if (result_index_ptr) { |
| - *result_index_ptr = result_index_value; |
| - } |
| *result_ptr = result_value; |
| } |
| @@ -489,11 +587,10 @@ ssize_t MojoDescSendMsg(void* handle, |
| if (num_params != 5) { |
| return -1; |
| } |
| - const struct MojoCreateMessagePipeOptions* options; |
| - MojoHandle volatile* message_pipe_handle0_ptr; |
| - MojoHandle message_pipe_handle0_value; |
| - MojoHandle volatile* message_pipe_handle1_ptr; |
| - MojoHandle message_pipe_handle1_value; |
| + const struct MojoCreateSharedBufferOptions* options; |
| + uint64_t num_bytes_value; |
| + MojoHandle volatile* shared_buffer_handle_ptr; |
| + MojoHandle shared_buffer_handle_value; |
| MojoResult volatile* result_ptr; |
| MojoResult result_value; |
| { |
| @@ -501,14 +598,12 @@ ssize_t MojoDescSendMsg(void* handle, |
| if (!ConvertExtensibleStructInput(nap, params[1], true, &options)) { |
| return -1; |
| } |
| - if (!ConvertScalarInOut(nap, params[2], false, |
| - &message_pipe_handle0_value, |
| - &message_pipe_handle0_ptr)) { |
| + if (!ConvertScalarInput(nap, params[2], &num_bytes_value)) { |
| return -1; |
| } |
| if (!ConvertScalarInOut(nap, params[3], false, |
| - &message_pipe_handle1_value, |
| - &message_pipe_handle1_ptr)) { |
| + &shared_buffer_handle_value, |
| + &shared_buffer_handle_ptr)) { |
| return -1; |
| } |
| if (!ConvertScalarOutput(nap, params[4], false, &result_ptr)) { |
| @@ -516,157 +611,98 @@ ssize_t MojoDescSendMsg(void* handle, |
| } |
| } |
| - result_value = MojoSystemImplCreateMessagePipe( |
| - g_mojo_system, options, &message_pipe_handle0_value, |
| - &message_pipe_handle1_value); |
| + result_value = MojoSystemImplCreateSharedBuffer( |
| + g_mojo_system, options, num_bytes_value, &shared_buffer_handle_value); |
| { |
| ScopedCopyLock copy_lock(nap); |
| - *message_pipe_handle0_ptr = message_pipe_handle0_value; |
| - *message_pipe_handle1_ptr = message_pipe_handle1_value; |
| + *shared_buffer_handle_ptr = shared_buffer_handle_value; |
| *result_ptr = result_value; |
| } |
| return 0; |
| } |
| case 16: { |
| - if (num_params != 8) { |
| + if (num_params != 5) { |
| return -1; |
| } |
| - MojoHandle message_pipe_handle_value; |
| - const void* bytes; |
| - uint32_t num_bytes_value; |
| - const MojoHandle* handles; |
| - uint32_t num_handles_value; |
| - MojoWriteMessageFlags flags_value; |
| + MojoHandle buffer_handle_value; |
| + const struct MojoDuplicateBufferHandleOptions* options; |
| + MojoHandle volatile* new_buffer_handle_ptr; |
| + MojoHandle new_buffer_handle_value; |
| MojoResult volatile* result_ptr; |
| MojoResult result_value; |
| { |
| ScopedCopyLock copy_lock(nap); |
| - if (!ConvertScalarInput(nap, params[1], &message_pipe_handle_value)) { |
| - return -1; |
| - } |
| - if (!ConvertScalarInput(nap, params[3], &num_bytes_value)) { |
| - return -1; |
| - } |
| - if (!ConvertScalarInput(nap, params[5], &num_handles_value)) { |
| - return -1; |
| - } |
| - if (!ConvertScalarInput(nap, params[6], &flags_value)) { |
| + if (!ConvertScalarInput(nap, params[1], &buffer_handle_value)) { |
| return -1; |
| } |
| - if (!ConvertScalarOutput(nap, params[7], false, &result_ptr)) { |
| + if (!ConvertExtensibleStructInput(nap, params[2], true, &options)) { |
| return -1; |
| } |
| - if (!ConvertArray(nap, params[2], num_bytes_value, 1, true, &bytes)) { |
| + if (!ConvertScalarInOut(nap, params[3], false, &new_buffer_handle_value, |
| + &new_buffer_handle_ptr)) { |
| return -1; |
| } |
| - if (!ConvertArray(nap, params[4], num_handles_value, sizeof(*handles), |
| - true, &handles)) { |
| + if (!ConvertScalarOutput(nap, params[4], false, &result_ptr)) { |
| return -1; |
| } |
| } |
| - result_value = MojoSystemImplWriteMessage( |
| - g_mojo_system, message_pipe_handle_value, bytes, num_bytes_value, |
| - handles, num_handles_value, flags_value); |
| + result_value = MojoSystemImplDuplicateBufferHandle( |
| + g_mojo_system, buffer_handle_value, options, |
| + &new_buffer_handle_value); |
| { |
| ScopedCopyLock copy_lock(nap); |
| + *new_buffer_handle_ptr = new_buffer_handle_value; |
| *result_ptr = result_value; |
| } |
| return 0; |
| } |
| case 17: { |
|
viettrungluu
2016/03/09 00:51:04
This case is the only new one (due to the correspo
|
| - if (num_params != 8) { |
| + if (num_params != 5) { |
| return -1; |
| } |
| - MojoHandle message_pipe_handle_value; |
| - void* bytes; |
| - uint32_t volatile* num_bytes_ptr; |
| - uint32_t num_bytes_value; |
| - MojoHandle* handles; |
| - uint32_t volatile* num_handles_ptr; |
| - uint32_t num_handles_value; |
| - MojoReadMessageFlags flags_value; |
| + MojoHandle buffer_handle_value; |
| + struct MojoBufferInformation* info; |
| + uint32_t info_num_bytes_value; |
| MojoResult volatile* result_ptr; |
| MojoResult result_value; |
| { |
| ScopedCopyLock copy_lock(nap); |
| - if (!ConvertScalarInput(nap, params[1], &message_pipe_handle_value)) { |
| - return -1; |
| - } |
| - if (!ConvertScalarInOut(nap, params[3], true, &num_bytes_value, |
| - &num_bytes_ptr)) { |
| - return -1; |
| - } |
| - if (!ConvertScalarInOut(nap, params[5], true, &num_handles_value, |
| - &num_handles_ptr)) { |
| - return -1; |
| - } |
| - if (!ConvertScalarInput(nap, params[6], &flags_value)) { |
| - return -1; |
| - } |
| - if (!ConvertScalarOutput(nap, params[7], false, &result_ptr)) { |
| - return -1; |
| - } |
| - if (!ConvertArray(nap, params[2], num_bytes_value, 1, true, &bytes)) { |
| + if (!ConvertScalarInput(nap, params[1], &buffer_handle_value)) { |
| return -1; |
| } |
| - if (!ConvertArray(nap, params[4], num_handles_value, sizeof(*handles), |
| - true, &handles)) { |
| + if (!ConvertScalarInput(nap, params[3], &info_num_bytes_value)) { |
| return -1; |
| } |
| - } |
| - |
| - result_value = MojoSystemImplReadMessage( |
| - g_mojo_system, message_pipe_handle_value, bytes, |
| - num_bytes_ptr ? &num_bytes_value : nullptr, handles, |
| - num_handles_ptr ? &num_handles_value : nullptr, flags_value); |
| - |
| - { |
| - ScopedCopyLock copy_lock(nap); |
| - if (num_bytes_ptr) { |
| - *num_bytes_ptr = num_bytes_value; |
| - } |
| - if (num_handles_ptr) { |
| - *num_handles_ptr = num_handles_value; |
| - } |
| - *result_ptr = result_value; |
| - } |
| - |
| - return 0; |
| - } |
| - case 18: { |
| - if (num_params != 3) { |
| - return -1; |
| - } |
| - MojoHandle volatile* handle_ptr; |
| - MojoHandle handle_value; |
| - MojoResult volatile* result_ptr; |
| - MojoResult result_value; |
| - { |
| - ScopedCopyLock copy_lock(nap); |
| - if (!ConvertScalarInOut(nap, params[1], false, &handle_value, |
| - &handle_ptr)) { |
| + if (!ConvertScalarOutput(nap, params[4], false, &result_ptr)) { |
| return -1; |
| } |
| - if (!ConvertScalarOutput(nap, params[2], false, &result_ptr)) { |
| + if (!ConvertArray(nap, params[2], info_num_bytes_value, 1, false, |
| + &info)) { |
| return -1; |
| } |
| } |
| - result_value = _MojoGetInitialHandle(&handle_value); |
| + result_value = MojoSystemImplGetBufferInformation( |
| + g_mojo_system, buffer_handle_value, info, info_num_bytes_value); |
| { |
| ScopedCopyLock copy_lock(nap); |
| - *handle_ptr = handle_value; |
| *result_ptr = result_value; |
| } |
| return 0; |
| } |
| + case 18: |
| + fprintf(stderr, "MojoMapBuffer not implemented\n"); |
| + return -1; |
| + case 19: |
| + fprintf(stderr, "MojoUnmapBuffer not implemented\n"); |
| + return -1; |
| } |
| return -1; |