| Index: mojo/nacl/sfi/nacl_bindings/mojo_irt.c
|
| diff --git a/mojo/nacl/sfi/nacl_bindings/mojo_irt.c b/mojo/nacl/sfi/nacl_bindings/mojo_irt.c
|
| index 41c8c49509ad8aa6e94fd49a5b1385db63d88467..9e653ce3140c3df4d3865f3f65d33bacc58ad6c0 100644
|
| --- a/mojo/nacl/sfi/nacl_bindings/mojo_irt.c
|
| +++ b/mojo/nacl/sfi/nacl_bindings/mojo_irt.c
|
| @@ -70,6 +70,34 @@ static MojoResult irt_MojoGetRights(
|
| return result;
|
| };
|
|
|
| +static MojoResult irt_MojoDuplicateHandleWithReducedRights(
|
| + MojoHandle handle,
|
| + MojoHandleRights rights_to_remove,
|
| + MojoHandle* new_handle) {
|
| + uint32_t params[5];
|
| + MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| + params[0] = 4;
|
| + params[1] = (uint32_t)(&handle);
|
| + params[2] = (uint32_t)(&rights_to_remove);
|
| + params[3] = (uint32_t)(new_handle);
|
| + params[4] = (uint32_t)(&result);
|
| + DoMojoCall(params, sizeof(params));
|
| + return result;
|
| +};
|
| +
|
| +static MojoResult irt_MojoDuplicateHandle(
|
| + MojoHandle handle,
|
| + MojoHandle* new_handle) {
|
| + uint32_t params[4];
|
| + MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| + params[0] = 5;
|
| + params[1] = (uint32_t)(&handle);
|
| + params[2] = (uint32_t)(new_handle);
|
| + params[3] = (uint32_t)(&result);
|
| + DoMojoCall(params, sizeof(params));
|
| + return result;
|
| +};
|
| +
|
| static MojoResult irt_MojoWait(
|
| MojoHandle handle,
|
| MojoHandleSignals signals,
|
| @@ -77,7 +105,7 @@ static MojoResult irt_MojoWait(
|
| struct MojoHandleSignalsState* signals_state) {
|
| uint32_t params[6];
|
| MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| - params[0] = 4;
|
| + params[0] = 6;
|
| params[1] = (uint32_t)(&handle);
|
| params[2] = (uint32_t)(&signals);
|
| params[3] = (uint32_t)(&deadline);
|
| @@ -96,7 +124,7 @@ static MojoResult irt_MojoWaitMany(
|
| struct MojoHandleSignalsState* signals_states) {
|
| uint32_t params[8];
|
| MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| - params[0] = 5;
|
| + params[0] = 7;
|
| params[1] = (uint32_t)(handles);
|
| params[2] = (uint32_t)(signals);
|
| params[3] = (uint32_t)(&num_handles);
|
| @@ -114,7 +142,7 @@ static MojoResult irt_MojoCreateMessagePipe(
|
| MojoHandle* message_pipe_handle1) {
|
| uint32_t params[5];
|
| MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| - params[0] = 6;
|
| + params[0] = 8;
|
| params[1] = (uint32_t)(options);
|
| params[2] = (uint32_t)(message_pipe_handle0);
|
| params[3] = (uint32_t)(message_pipe_handle1);
|
| @@ -132,7 +160,7 @@ static MojoResult irt_MojoWriteMessage(
|
| MojoWriteMessageFlags flags) {
|
| uint32_t params[8];
|
| MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| - params[0] = 7;
|
| + params[0] = 9;
|
| params[1] = (uint32_t)(&message_pipe_handle);
|
| params[2] = (uint32_t)(bytes);
|
| params[3] = (uint32_t)(&num_bytes);
|
| @@ -153,7 +181,7 @@ static MojoResult irt_MojoReadMessage(
|
| MojoReadMessageFlags flags) {
|
| uint32_t params[8];
|
| MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| - params[0] = 8;
|
| + params[0] = 10;
|
| params[1] = (uint32_t)(&message_pipe_handle);
|
| params[2] = (uint32_t)(bytes);
|
| params[3] = (uint32_t)(num_bytes);
|
| @@ -171,7 +199,7 @@ static MojoResult irt_MojoCreateDataPipe(
|
| MojoHandle* data_pipe_consumer_handle) {
|
| uint32_t params[5];
|
| MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| - params[0] = 9;
|
| + params[0] = 11;
|
| params[1] = (uint32_t)(options);
|
| params[2] = (uint32_t)(data_pipe_producer_handle);
|
| params[3] = (uint32_t)(data_pipe_consumer_handle);
|
| @@ -185,7 +213,7 @@ static MojoResult irt_MojoSetDataPipeProducerOptions(
|
| const struct MojoDataPipeProducerOptions* options) {
|
| uint32_t params[4];
|
| MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| - params[0] = 10;
|
| + params[0] = 12;
|
| params[1] = (uint32_t)(&data_pipe_producer_handle);
|
| params[2] = (uint32_t)(options);
|
| params[3] = (uint32_t)(&result);
|
| @@ -199,7 +227,7 @@ static MojoResult irt_MojoGetDataPipeProducerOptions(
|
| uint32_t options_num_bytes) {
|
| uint32_t params[5];
|
| MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| - params[0] = 11;
|
| + params[0] = 13;
|
| params[1] = (uint32_t)(&data_pipe_producer_handle);
|
| params[2] = (uint32_t)(options);
|
| params[3] = (uint32_t)(&options_num_bytes);
|
| @@ -215,7 +243,7 @@ static MojoResult irt_MojoWriteData(
|
| MojoWriteDataFlags flags) {
|
| uint32_t params[6];
|
| MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| - params[0] = 12;
|
| + params[0] = 14;
|
| params[1] = (uint32_t)(&data_pipe_producer_handle);
|
| params[2] = (uint32_t)(elements);
|
| params[3] = (uint32_t)(num_bytes);
|
| @@ -232,7 +260,7 @@ static MojoResult irt_MojoBeginWriteData(
|
| MojoWriteDataFlags flags) {
|
| uint32_t params[6];
|
| MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| - params[0] = 13;
|
| + params[0] = 15;
|
| params[1] = (uint32_t)(&data_pipe_producer_handle);
|
| params[2] = (uint32_t)(buffer);
|
| params[3] = (uint32_t)(buffer_num_bytes);
|
| @@ -247,7 +275,7 @@ static MojoResult irt_MojoEndWriteData(
|
| uint32_t num_bytes_written) {
|
| uint32_t params[4];
|
| MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| - params[0] = 14;
|
| + params[0] = 16;
|
| params[1] = (uint32_t)(&data_pipe_producer_handle);
|
| params[2] = (uint32_t)(&num_bytes_written);
|
| params[3] = (uint32_t)(&result);
|
| @@ -260,7 +288,7 @@ static MojoResult irt_MojoSetDataPipeConsumerOptions(
|
| const struct MojoDataPipeConsumerOptions* options) {
|
| uint32_t params[4];
|
| MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| - params[0] = 15;
|
| + params[0] = 17;
|
| params[1] = (uint32_t)(&data_pipe_consumer_handle);
|
| params[2] = (uint32_t)(options);
|
| params[3] = (uint32_t)(&result);
|
| @@ -274,7 +302,7 @@ static MojoResult irt_MojoGetDataPipeConsumerOptions(
|
| uint32_t options_num_bytes) {
|
| uint32_t params[5];
|
| MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| - params[0] = 16;
|
| + params[0] = 18;
|
| params[1] = (uint32_t)(&data_pipe_consumer_handle);
|
| params[2] = (uint32_t)(options);
|
| params[3] = (uint32_t)(&options_num_bytes);
|
| @@ -290,7 +318,7 @@ static MojoResult irt_MojoReadData(
|
| MojoReadDataFlags flags) {
|
| uint32_t params[6];
|
| MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| - params[0] = 17;
|
| + params[0] = 19;
|
| params[1] = (uint32_t)(&data_pipe_consumer_handle);
|
| params[2] = (uint32_t)(elements);
|
| params[3] = (uint32_t)(num_bytes);
|
| @@ -307,7 +335,7 @@ static MojoResult irt_MojoBeginReadData(
|
| MojoReadDataFlags flags) {
|
| uint32_t params[6];
|
| MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| - params[0] = 18;
|
| + params[0] = 20;
|
| params[1] = (uint32_t)(&data_pipe_consumer_handle);
|
| params[2] = (uint32_t)(buffer);
|
| params[3] = (uint32_t)(buffer_num_bytes);
|
| @@ -322,7 +350,7 @@ static MojoResult irt_MojoEndReadData(
|
| uint32_t num_bytes_read) {
|
| uint32_t params[4];
|
| MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| - params[0] = 19;
|
| + params[0] = 21;
|
| params[1] = (uint32_t)(&data_pipe_consumer_handle);
|
| params[2] = (uint32_t)(&num_bytes_read);
|
| params[3] = (uint32_t)(&result);
|
| @@ -336,7 +364,7 @@ static MojoResult irt_MojoCreateSharedBuffer(
|
| MojoHandle* shared_buffer_handle) {
|
| uint32_t params[5];
|
| MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| - params[0] = 20;
|
| + params[0] = 22;
|
| params[1] = (uint32_t)(options);
|
| params[2] = (uint32_t)(&num_bytes);
|
| params[3] = (uint32_t)(shared_buffer_handle);
|
| @@ -351,7 +379,7 @@ static MojoResult irt_MojoDuplicateBufferHandle(
|
| MojoHandle* new_buffer_handle) {
|
| uint32_t params[5];
|
| MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| - params[0] = 21;
|
| + params[0] = 23;
|
| params[1] = (uint32_t)(&buffer_handle);
|
| params[2] = (uint32_t)(options);
|
| params[3] = (uint32_t)(new_buffer_handle);
|
| @@ -366,7 +394,7 @@ static MojoResult irt_MojoGetBufferInformation(
|
| uint32_t info_num_bytes) {
|
| uint32_t params[5];
|
| MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| - params[0] = 22;
|
| + params[0] = 24;
|
| params[1] = (uint32_t)(&buffer_handle);
|
| params[2] = (uint32_t)(info);
|
| params[3] = (uint32_t)(&info_num_bytes);
|
| @@ -383,7 +411,7 @@ static MojoResult irt_MojoMapBuffer(
|
| MojoMapBufferFlags flags) {
|
| uint32_t params[7];
|
| MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| - params[0] = 23;
|
| + params[0] = 25;
|
| params[1] = (uint32_t)(&buffer_handle);
|
| params[2] = (uint32_t)(&offset);
|
| params[3] = (uint32_t)(&num_bytes);
|
| @@ -397,7 +425,7 @@ static MojoResult irt_MojoMapBuffer(
|
| static MojoResult irt_MojoUnmapBuffer(void* buffer) {
|
| uint32_t params[3];
|
| MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
|
| - params[0] = 24;
|
| + params[0] = 26;
|
| params[1] = (uint32_t)(&buffer);
|
| params[2] = (uint32_t)(&result);
|
| DoMojoCall(params, sizeof(params));
|
| @@ -409,6 +437,8 @@ struct nacl_irt_mojo kIrtMojo = {
|
| &irt_MojoGetTimeTicksNow,
|
| &irt_MojoClose,
|
| &irt_MojoGetRights,
|
| + &irt_MojoDuplicateHandleWithReducedRights,
|
| + &irt_MojoDuplicateHandle,
|
| &irt_MojoWait,
|
| &irt_MojoWaitMany,
|
| &irt_MojoCreateMessagePipe,
|
|
|