Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(226)

Side by Side Diff: mojo/nacl/NOT_FOR_COMMIT/mojo_syscall.cc

Issue 776643004: Update NaCl's generator to support new wait APIs. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: The Change Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 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 // WARNING this file was generated by generate_nacl_bindings.py
6 // Do not edit by hand.
7
8 #include "mojo/nacl/mojo_syscall.h"
9
10 #include <stdio.h>
11
12 #include "mojo/nacl/mojo_syscall_internal.h"
13 #include "mojo/public/c/system/core.h"
14 #include "native_client/src/public/chrome_main.h"
15 #include "native_client/src/public/nacl_app.h"
16 #include "native_client/src/trusted/desc/nacl_desc_custom.h"
17
18 namespace {
19
20 void MojoDescDestroy(void* handle) {
21 }
22
23 ssize_t MojoDescSendMsg(void* handle,
24 const struct NaClImcTypedMsgHdr* msg,
25 int flags) {
26 struct NaClApp* nap = static_cast<struct NaClApp*>(handle);
27
28 if (msg->iov_length != 1 || msg->ndesc_length != 0) {
29 return -1;
30 }
31
32 uint32_t volatile* params = static_cast<uint32_t volatile*>(msg->iov[0].base);
33 size_t num_params = msg->iov[0].length / sizeof(*params);
34
35 if (num_params < 1) {
36 return -1;
37 }
38
39 uint32_t msg_type = params[0];
40 switch (msg_type) {
41 case 0:
42 {
43 if (num_params != 5) {
44 return -1;
45 }
46 const struct MojoCreateSharedBufferOptions* options;
47 uint64_t num_bytes_value;
48 MojoHandle volatile* shared_buffer_handle_ptr;
49 MojoHandle shared_buffer_handle_value;
50 MojoResult volatile* result_ptr;
51 MojoResult result_value;
52 {
53 ScopedCopyLock copy_lock(nap);
54 if (!ConvertExtensibleStructInput(nap, params[1], true, &options)) {
55 return -1;
56 }
57 if (!ConvertScalarInput(nap, params[2], &num_bytes_value)) {
58 return -1;
59 }
60 if (!ConvertScalarOutput(nap, params[3], false, &shared_buffer_handle_pt r)) {
61 return -1;
62 }
63 if (!ConvertScalarOutput(nap, params[4], false, &result_ptr)) {
64 return -1;
65 }
66 }
67
68 result_value = MojoCreateSharedBuffer(options, num_bytes_value, &shared_bu ffer_handle_value);
69
70 {
71 ScopedCopyLock copy_lock(nap);
72 *shared_buffer_handle_ptr = shared_buffer_handle_value;
73 *result_ptr = result_value;
74 }
75
76 return 0;
77 }
78 case 1:
79 {
80 if (num_params != 5) {
81 return -1;
82 }
83 MojoHandle buffer_handle_value;
84 const struct MojoDuplicateBufferHandleOptions* options;
85 MojoHandle volatile* new_buffer_handle_ptr;
86 MojoHandle new_buffer_handle_value;
87 MojoResult volatile* result_ptr;
88 MojoResult result_value;
89 {
90 ScopedCopyLock copy_lock(nap);
91 if (!ConvertScalarInput(nap, params[1], &buffer_handle_value)) {
92 return -1;
93 }
94 if (!ConvertExtensibleStructInput(nap, params[2], true, &options)) {
95 return -1;
96 }
97 if (!ConvertScalarOutput(nap, params[3], false, &new_buffer_handle_ptr)) {
98 return -1;
99 }
100 if (!ConvertScalarOutput(nap, params[4], false, &result_ptr)) {
101 return -1;
102 }
103 }
104
105 result_value = MojoDuplicateBufferHandle(buffer_handle_value, options, &ne w_buffer_handle_value);
106
107 {
108 ScopedCopyLock copy_lock(nap);
109 *new_buffer_handle_ptr = new_buffer_handle_value;
110 *result_ptr = result_value;
111 }
112
113 return 0;
114 }
115 case 2:
116 {
117 if (num_params != 7) {
118 return -1;
119 }
120 MojoHandle buffer_handle_value;
121 uint64_t offset_value;
122 uint64_t num_bytes_value;
123 void* volatile* buffer_ptr;
124 void* buffer_value;
125 MojoMapBufferFlags flags_value;
126 MojoResult volatile* result_ptr;
127 MojoResult result_value;
128 {
129 ScopedCopyLock copy_lock(nap);
130 if (!ConvertScalarInput(nap, params[1], &buffer_handle_value)) {
131 return -1;
132 }
133 if (!ConvertScalarInput(nap, params[2], &offset_value)) {
134 return -1;
135 }
136 if (!ConvertScalarInput(nap, params[3], &num_bytes_value)) {
137 return -1;
138 }
139 if (!ConvertScalarOutput(nap, params[4], false, &buffer_ptr)) {
140 return -1;
141 }
142 if (!ConvertScalarInput(nap, params[5], &flags_value)) {
143 return -1;
144 }
145 if (!ConvertScalarOutput(nap, params[6], false, &result_ptr)) {
146 return -1;
147 }
148 }
149
150 result_value = MojoMapBuffer(buffer_handle_value, offset_value, num_bytes_ value, &buffer_value, flags_value);
151
152 {
153 ScopedCopyLock copy_lock(nap);
154 *buffer_ptr = buffer_value;
155 *result_ptr = result_value;
156 }
157
158 return 0;
159 }
160 case 3:
161 {
162 if (num_params != 3) {
163 return -1;
164 }
165 void* buffer_value;
166 MojoResult volatile* result_ptr;
167 MojoResult result_value;
168 {
169 ScopedCopyLock copy_lock(nap);
170 if (!ConvertScalarInput(nap, params[1], &buffer_value)) {
171 return -1;
172 }
173 if (!ConvertScalarOutput(nap, params[2], false, &result_ptr)) {
174 return -1;
175 }
176 }
177
178 result_value = MojoUnmapBuffer(buffer_value);
179
180 {
181 ScopedCopyLock copy_lock(nap);
182 *result_ptr = result_value;
183 }
184
185 return 0;
186 }
187 case 4:
188 {
189 if (num_params != 5) {
190 return -1;
191 }
192 const struct MojoCreateDataPipeOptions* options;
193 MojoHandle volatile* data_pipe_producer_handle_ptr;
194 MojoHandle data_pipe_producer_handle_value;
195 MojoHandle volatile* data_pipe_consumer_handle_ptr;
196 MojoHandle data_pipe_consumer_handle_value;
197 MojoResult volatile* result_ptr;
198 MojoResult result_value;
199 {
200 ScopedCopyLock copy_lock(nap);
201 if (!ConvertExtensibleStructInput(nap, params[1], true, &options)) {
202 return -1;
203 }
204 if (!ConvertScalarOutput(nap, params[2], false, &data_pipe_producer_hand le_ptr)) {
205 return -1;
206 }
207 if (!ConvertScalarOutput(nap, params[3], false, &data_pipe_consumer_hand le_ptr)) {
208 return -1;
209 }
210 if (!ConvertScalarOutput(nap, params[4], false, &result_ptr)) {
211 return -1;
212 }
213 }
214
215 result_value = MojoCreateDataPipe(options, &data_pipe_producer_handle_valu e, &data_pipe_consumer_handle_value);
216
217 {
218 ScopedCopyLock copy_lock(nap);
219 *data_pipe_producer_handle_ptr = data_pipe_producer_handle_value;
220 *data_pipe_consumer_handle_ptr = data_pipe_consumer_handle_value;
221 *result_ptr = result_value;
222 }
223
224 return 0;
225 }
226 case 5:
227 {
228 if (num_params != 6) {
229 return -1;
230 }
231 MojoHandle data_pipe_producer_handle_value;
232 const void* elements;
233 uint32_t volatile* num_bytes_ptr;
234 uint32_t num_bytes_value;
235 MojoWriteDataFlags flags_value;
236 MojoResult volatile* result_ptr;
237 MojoResult result_value;
238 {
239 ScopedCopyLock copy_lock(nap);
240 if (!ConvertScalarInput(nap, params[1], &data_pipe_producer_handle_value )) {
241 return -1;
242 }
243 if (!ConvertScalarInOut(nap, params[3], false, &num_bytes_value, &num_by tes_ptr)) {
244 return -1;
245 }
246 if (!ConvertScalarInput(nap, params[4], &flags_value)) {
247 return -1;
248 }
249 if (!ConvertScalarOutput(nap, params[5], false, &result_ptr)) {
250 return -1;
251 }
252 if (!ConvertArray(nap, params[2], num_bytes_value, 1, false, &elements)) {
253 return -1;
254 }
255 }
256
257 result_value = MojoWriteData(data_pipe_producer_handle_value, elements, &n um_bytes_value, flags_value);
258
259 {
260 ScopedCopyLock copy_lock(nap);
261 *num_bytes_ptr = num_bytes_value;
262 *result_ptr = result_value;
263 }
264
265 return 0;
266 }
267 case 6:
268 {
269 if (num_params != 6) {
270 return -1;
271 }
272 MojoHandle data_pipe_producer_handle_value;
273 void* volatile* buffer_ptr;
274 void* buffer_value;
275 uint32_t volatile* buffer_num_bytes_ptr;
276 uint32_t buffer_num_bytes_value;
277 MojoWriteDataFlags flags_value;
278 MojoResult volatile* result_ptr;
279 MojoResult result_value;
280 {
281 ScopedCopyLock copy_lock(nap);
282 if (!ConvertScalarInput(nap, params[1], &data_pipe_producer_handle_value )) {
283 return -1;
284 }
285 if (!ConvertScalarOutput(nap, params[2], false, &buffer_ptr)) {
286 return -1;
287 }
288 if (!ConvertScalarInOut(nap, params[3], false, &buffer_num_bytes_value, &buffer_num_bytes_ptr)) {
289 return -1;
290 }
291 if (!ConvertScalarInput(nap, params[4], &flags_value)) {
292 return -1;
293 }
294 if (!ConvertScalarOutput(nap, params[5], false, &result_ptr)) {
295 return -1;
296 }
297 }
298
299 result_value = MojoBeginWriteData(data_pipe_producer_handle_value, &buffer _value, &buffer_num_bytes_value, flags_value);
300
301 {
302 ScopedCopyLock copy_lock(nap);
303 *buffer_ptr = buffer_value;
304 *buffer_num_bytes_ptr = buffer_num_bytes_value;
305 *result_ptr = result_value;
306 }
307
308 return 0;
309 }
310 case 7:
311 {
312 if (num_params != 4) {
313 return -1;
314 }
315 MojoHandle data_pipe_producer_handle_value;
316 uint32_t num_bytes_written_value;
317 MojoResult volatile* result_ptr;
318 MojoResult result_value;
319 {
320 ScopedCopyLock copy_lock(nap);
321 if (!ConvertScalarInput(nap, params[1], &data_pipe_producer_handle_value )) {
322 return -1;
323 }
324 if (!ConvertScalarInput(nap, params[2], &num_bytes_written_value)) {
325 return -1;
326 }
327 if (!ConvertScalarOutput(nap, params[3], false, &result_ptr)) {
328 return -1;
329 }
330 }
331
332 result_value = MojoEndWriteData(data_pipe_producer_handle_value, num_bytes _written_value);
333
334 {
335 ScopedCopyLock copy_lock(nap);
336 *result_ptr = result_value;
337 }
338
339 return 0;
340 }
341 case 8:
342 {
343 if (num_params != 6) {
344 return -1;
345 }
346 MojoHandle data_pipe_consumer_handle_value;
347 void* elements;
348 uint32_t volatile* num_bytes_ptr;
349 uint32_t num_bytes_value;
350 MojoReadDataFlags flags_value;
351 MojoResult volatile* result_ptr;
352 MojoResult result_value;
353 {
354 ScopedCopyLock copy_lock(nap);
355 if (!ConvertScalarInput(nap, params[1], &data_pipe_consumer_handle_value )) {
356 return -1;
357 }
358 if (!ConvertScalarInOut(nap, params[3], false, &num_bytes_value, &num_by tes_ptr)) {
359 return -1;
360 }
361 if (!ConvertScalarInput(nap, params[4], &flags_value)) {
362 return -1;
363 }
364 if (!ConvertScalarOutput(nap, params[5], false, &result_ptr)) {
365 return -1;
366 }
367 if (!ConvertArray(nap, params[2], num_bytes_value, 1, false, &elements)) {
368 return -1;
369 }
370 }
371
372 result_value = MojoReadData(data_pipe_consumer_handle_value, elements, &nu m_bytes_value, flags_value);
373
374 {
375 ScopedCopyLock copy_lock(nap);
376 *num_bytes_ptr = num_bytes_value;
377 *result_ptr = result_value;
378 }
379
380 return 0;
381 }
382 case 9:
383 {
384 if (num_params != 6) {
385 return -1;
386 }
387 MojoHandle data_pipe_consumer_handle_value;
388 const void* volatile* buffer_ptr;
389 const void* buffer_value;
390 uint32_t volatile* buffer_num_bytes_ptr;
391 uint32_t buffer_num_bytes_value;
392 MojoReadDataFlags flags_value;
393 MojoResult volatile* result_ptr;
394 MojoResult result_value;
395 {
396 ScopedCopyLock copy_lock(nap);
397 if (!ConvertScalarInput(nap, params[1], &data_pipe_consumer_handle_value )) {
398 return -1;
399 }
400 if (!ConvertScalarOutput(nap, params[2], false, &buffer_ptr)) {
401 return -1;
402 }
403 if (!ConvertScalarInOut(nap, params[3], false, &buffer_num_bytes_value, &buffer_num_bytes_ptr)) {
404 return -1;
405 }
406 if (!ConvertScalarInput(nap, params[4], &flags_value)) {
407 return -1;
408 }
409 if (!ConvertScalarOutput(nap, params[5], false, &result_ptr)) {
410 return -1;
411 }
412 }
413
414 result_value = MojoBeginReadData(data_pipe_consumer_handle_value, &buffer_ value, &buffer_num_bytes_value, flags_value);
415
416 {
417 ScopedCopyLock copy_lock(nap);
418 *buffer_ptr = buffer_value;
419 *buffer_num_bytes_ptr = buffer_num_bytes_value;
420 *result_ptr = result_value;
421 }
422
423 return 0;
424 }
425 case 10:
426 {
427 if (num_params != 4) {
428 return -1;
429 }
430 MojoHandle data_pipe_consumer_handle_value;
431 uint32_t num_bytes_read_value;
432 MojoResult volatile* result_ptr;
433 MojoResult result_value;
434 {
435 ScopedCopyLock copy_lock(nap);
436 if (!ConvertScalarInput(nap, params[1], &data_pipe_consumer_handle_value )) {
437 return -1;
438 }
439 if (!ConvertScalarInput(nap, params[2], &num_bytes_read_value)) {
440 return -1;
441 }
442 if (!ConvertScalarOutput(nap, params[3], false, &result_ptr)) {
443 return -1;
444 }
445 }
446
447 result_value = MojoEndReadData(data_pipe_consumer_handle_value, num_bytes_ read_value);
448
449 {
450 ScopedCopyLock copy_lock(nap);
451 *result_ptr = result_value;
452 }
453
454 return 0;
455 }
456 case 11:
457 {
458 if (num_params != 2) {
459 return -1;
460 }
461 MojoTimeTicks volatile* result_ptr;
462 MojoTimeTicks result_value;
463 {
464 ScopedCopyLock copy_lock(nap);
465 if (!ConvertScalarOutput(nap, params[1], false, &result_ptr)) {
466 return -1;
467 }
468 }
469
470 result_value = MojoGetTimeTicksNow();
471
472 {
473 ScopedCopyLock copy_lock(nap);
474 *result_ptr = result_value;
475 }
476
477 return 0;
478 }
479 case 12:
480 {
481 if (num_params != 3) {
482 return -1;
483 }
484 MojoHandle handle_value;
485 MojoResult volatile* result_ptr;
486 MojoResult result_value;
487 {
488 ScopedCopyLock copy_lock(nap);
489 if (!ConvertScalarInput(nap, params[1], &handle_value)) {
490 return -1;
491 }
492 if (!ConvertScalarOutput(nap, params[2], false, &result_ptr)) {
493 return -1;
494 }
495 }
496
497 result_value = MojoClose(handle_value);
498
499 {
500 ScopedCopyLock copy_lock(nap);
501 *result_ptr = result_value;
502 }
503
504 return 0;
505 }
506 case 13:
507 {
508 if (num_params != 5) {
509 return -1;
510 }
511 MojoHandle handle_value;
512 MojoHandleSignals signals_value;
513 MojoDeadline deadline_value;
514 MojoResult volatile* result_ptr;
515 MojoResult result_value;
516 {
517 ScopedCopyLock copy_lock(nap);
518 if (!ConvertScalarInput(nap, params[1], &handle_value)) {
519 return -1;
520 }
521 if (!ConvertScalarInput(nap, params[2], &signals_value)) {
522 return -1;
523 }
524 if (!ConvertScalarInput(nap, params[3], &deadline_value)) {
525 return -1;
526 }
527 if (!ConvertScalarOutput(nap, params[4], false, &result_ptr)) {
528 return -1;
529 }
530 }
531
532 result_value = MojoWait(handle_value, signals_value, deadline_value);
533
534 {
535 ScopedCopyLock copy_lock(nap);
536 *result_ptr = result_value;
537 }
538
539 return 0;
540 }
541 case 14:
542 {
543 if (num_params != 6) {
544 return -1;
545 }
546 const MojoHandle* handles;
547 const MojoHandleSignals* signals;
548 uint32_t num_handles_value;
549 MojoDeadline deadline_value;
550 MojoResult volatile* result_ptr;
551 MojoResult result_value;
552 {
553 ScopedCopyLock copy_lock(nap);
554 if (!ConvertScalarInput(nap, params[3], &num_handles_value)) {
555 return -1;
556 }
557 if (!ConvertScalarInput(nap, params[4], &deadline_value)) {
558 return -1;
559 }
560 if (!ConvertScalarOutput(nap, params[5], false, &result_ptr)) {
561 return -1;
562 }
563 if (!ConvertArray(nap, params[1], num_handles_value, sizeof(*handles), f alse, &handles)) {
564 return -1;
565 }
566 if (!ConvertArray(nap, params[2], num_handles_value, sizeof(*signals), f alse, &signals)) {
567 return -1;
568 }
569 }
570
571 result_value = MojoWaitMany(handles, signals, num_handles_value, deadline_ value);
572
573 {
574 ScopedCopyLock copy_lock(nap);
575 *result_ptr = result_value;
576 }
577
578 return 0;
579 }
580 case 15:
581 {
582 if (num_params != 6) {
583 return -1;
584 }
585 MojoHandle handle_value;
586 MojoHandleSignals signals_value;
587 MojoDeadline deadline_value;
588 MojoHandleSignalsState volatile* signals_state_ptr;
589 MojoHandleSignalsState signals_state_value;
590 MojoResult volatile* result_ptr;
591 MojoResult result_value;
592 {
593 ScopedCopyLock copy_lock(nap);
594 if (!ConvertScalarInput(nap, params[1], &handle_value)) {
595 return -1;
596 }
597 if (!ConvertScalarInput(nap, params[2], &signals_value)) {
598 return -1;
599 }
600 if (!ConvertScalarInput(nap, params[3], &deadline_value)) {
601 return -1;
602 }
603 if (!ConvertScalarOutput(nap, params[4], true, &signals_state_ptr)) {
604 return -1;
605 }
606 if (!ConvertScalarOutput(nap, params[5], false, &result_ptr)) {
607 return -1;
608 }
609 }
610
611 result_value = MojoNewWait(handle_value, signals_value, deadline_value, si gnals_state_ptr ? &signals_state_value : NULL);
612
613 {
614 ScopedCopyLock copy_lock(nap);
615 if (signals_state_ptr != NULL) {
616 memcpy_volatile_out(signals_state_ptr, &signals_state_value, sizeof(Mo joHandleSignalsState));
617 }
618 *result_ptr = result_value;
619 }
620
621 return 0;
622 }
623 case 16:
624 {
625 if (num_params != 8) {
626 return -1;
627 }
628 const MojoHandle* handles;
629 const MojoHandleSignals* signals;
630 uint32_t num_handles_value;
631 MojoDeadline deadline_value;
632 uint32_t volatile* result_index_ptr;
633 uint32_t result_index_value;
634 MojoHandleSignalsState* signals_states;
635 MojoResult volatile* result_ptr;
636 MojoResult result_value;
637 {
638 ScopedCopyLock copy_lock(nap);
639 if (!ConvertScalarInput(nap, params[3], &num_handles_value)) {
640 return -1;
641 }
642 if (!ConvertScalarInput(nap, params[4], &deadline_value)) {
643 return -1;
644 }
645 if (!ConvertScalarOutput(nap, params[5], true, &result_index_ptr)) {
646 return -1;
647 }
648 if (!ConvertScalarOutput(nap, params[7], false, &result_ptr)) {
649 return -1;
650 }
651 if (!ConvertArray(nap, params[1], num_handles_value, sizeof(*handles), f alse, &handles)) {
652 return -1;
653 }
654 if (!ConvertArray(nap, params[2], num_handles_value, sizeof(*signals), f alse, &signals)) {
655 return -1;
656 }
657 if (!ConvertArray(nap, params[6], num_handles_value, sizeof(*signals_sta tes), true, &signals_states)) {
658 return -1;
659 }
660 }
661
662 result_value = MojoNewWaitMany(handles, signals, num_handles_value, deadli ne_value, result_index_ptr ? &result_index_value : NULL, signals_states);
663
664 {
665 ScopedCopyLock copy_lock(nap);
666 if (result_index_ptr != NULL) {
667 *result_index_ptr = result_index_value;
668 }
669 *result_ptr = result_value;
670 }
671
672 return 0;
673 }
674 case 17:
675 {
676 if (num_params != 5) {
677 return -1;
678 }
679 const struct MojoCreateMessagePipeOptions* options;
680 MojoHandle volatile* message_pipe_handle0_ptr;
681 MojoHandle message_pipe_handle0_value;
682 MojoHandle volatile* message_pipe_handle1_ptr;
683 MojoHandle message_pipe_handle1_value;
684 MojoResult volatile* result_ptr;
685 MojoResult result_value;
686 {
687 ScopedCopyLock copy_lock(nap);
688 if (!ConvertExtensibleStructInput(nap, params[1], true, &options)) {
689 return -1;
690 }
691 if (!ConvertScalarOutput(nap, params[2], false, &message_pipe_handle0_pt r)) {
692 return -1;
693 }
694 if (!ConvertScalarOutput(nap, params[3], false, &message_pipe_handle1_pt r)) {
695 return -1;
696 }
697 if (!ConvertScalarOutput(nap, params[4], false, &result_ptr)) {
698 return -1;
699 }
700 }
701
702 result_value = MojoCreateMessagePipe(options, &message_pipe_handle0_value, &message_pipe_handle1_value);
703
704 {
705 ScopedCopyLock copy_lock(nap);
706 *message_pipe_handle0_ptr = message_pipe_handle0_value;
707 *message_pipe_handle1_ptr = message_pipe_handle1_value;
708 *result_ptr = result_value;
709 }
710
711 return 0;
712 }
713 case 18:
714 {
715 if (num_params != 8) {
716 return -1;
717 }
718 MojoHandle message_pipe_handle_value;
719 const void* bytes;
720 uint32_t num_bytes_value;
721 const MojoHandle* handles;
722 uint32_t num_handles_value;
723 MojoWriteMessageFlags flags_value;
724 MojoResult volatile* result_ptr;
725 MojoResult result_value;
726 {
727 ScopedCopyLock copy_lock(nap);
728 if (!ConvertScalarInput(nap, params[1], &message_pipe_handle_value)) {
729 return -1;
730 }
731 if (!ConvertScalarInput(nap, params[3], &num_bytes_value)) {
732 return -1;
733 }
734 if (!ConvertScalarInput(nap, params[5], &num_handles_value)) {
735 return -1;
736 }
737 if (!ConvertScalarInput(nap, params[6], &flags_value)) {
738 return -1;
739 }
740 if (!ConvertScalarOutput(nap, params[7], false, &result_ptr)) {
741 return -1;
742 }
743 if (!ConvertArray(nap, params[2], num_bytes_value, 1, true, &bytes)) {
744 return -1;
745 }
746 if (!ConvertArray(nap, params[4], num_handles_value, sizeof(*handles), t rue, &handles)) {
747 return -1;
748 }
749 }
750
751 result_value = MojoWriteMessage(message_pipe_handle_value, bytes, num_byte s_value, handles, num_handles_value, flags_value);
752
753 {
754 ScopedCopyLock copy_lock(nap);
755 *result_ptr = result_value;
756 }
757
758 return 0;
759 }
760 case 19:
761 {
762 if (num_params != 8) {
763 return -1;
764 }
765 MojoHandle message_pipe_handle_value;
766 void* bytes;
767 uint32_t volatile* num_bytes_ptr;
768 uint32_t num_bytes_value;
769 MojoHandle* handles;
770 uint32_t volatile* num_handles_ptr;
771 uint32_t num_handles_value;
772 MojoReadMessageFlags flags_value;
773 MojoResult volatile* result_ptr;
774 MojoResult result_value;
775 {
776 ScopedCopyLock copy_lock(nap);
777 if (!ConvertScalarInput(nap, params[1], &message_pipe_handle_value)) {
778 return -1;
779 }
780 if (!ConvertScalarInOut(nap, params[3], true, &num_bytes_value, &num_byt es_ptr)) {
781 return -1;
782 }
783 if (!ConvertScalarInOut(nap, params[5], true, &num_handles_value, &num_h andles_ptr)) {
784 return -1;
785 }
786 if (!ConvertScalarInput(nap, params[6], &flags_value)) {
787 return -1;
788 }
789 if (!ConvertScalarOutput(nap, params[7], false, &result_ptr)) {
790 return -1;
791 }
792 if (!ConvertArray(nap, params[2], num_bytes_value, 1, true, &bytes)) {
793 return -1;
794 }
795 if (!ConvertArray(nap, params[4], num_handles_value, sizeof(*handles), t rue, &handles)) {
796 return -1;
797 }
798 }
799
800 result_value = MojoReadMessage(message_pipe_handle_value, bytes, num_bytes _ptr ? &num_bytes_value : NULL, handles, num_handles_ptr ? &num_handles_value : NULL, flags_value);
801
802 {
803 ScopedCopyLock copy_lock(nap);
804 if (num_bytes_ptr != NULL) {
805 *num_bytes_ptr = num_bytes_value;
806 }
807 if (num_handles_ptr != NULL) {
808 *num_handles_ptr = num_handles_value;
809 }
810 *result_ptr = result_value;
811 }
812
813 return 0;
814 }
815
816 }
817
818 return -1;
819 }
820
821 ssize_t MojoDescRecvMsg(void* handle,
822 struct NaClImcTypedMsgHdr* msg,
823 int flags) {
824 return -1;
825 }
826
827 struct NaClDesc* MakeMojoDesc(struct NaClApp* nap) {
828 struct NaClDescCustomFuncs funcs = NACL_DESC_CUSTOM_FUNCS_INITIALIZER;
829 funcs.Destroy = MojoDescDestroy;
830 funcs.SendMsg = MojoDescSendMsg;
831 funcs.RecvMsg = MojoDescRecvMsg;
832 return NaClDescMakeCustomDesc(nap, &funcs);
833 }
834
835 void MojoDisabledDescDestroy(void* handle) {
836 }
837
838 ssize_t MojoDisabledDescSendMsg(void* handle,
839 const struct NaClImcTypedMsgHdr* msg,
840 int flags) {
841 fprintf(stderr, "Mojo is not currently supported.");
842 abort();
843 }
844
845 ssize_t MojoDisabledDescRecvMsg(void* handle,
846 struct NaClImcTypedMsgHdr* msg,
847 int flags) {
848 fprintf(stderr, "Mojo is not currently supported.");
849 abort();
850 }
851
852 struct NaClDesc* MakeDisabledMojoDesc(struct NaClApp* nap) {
853 struct NaClDescCustomFuncs funcs = NACL_DESC_CUSTOM_FUNCS_INITIALIZER;
854 funcs.Destroy = MojoDisabledDescDestroy;
855 funcs.SendMsg = MojoDisabledDescSendMsg;
856 funcs.RecvMsg = MojoDisabledDescRecvMsg;
857 return NaClDescMakeCustomDesc(nap, &funcs);
858 }
859
860 } // namespace
861
862 // The value for this FD must not conflict with uses inside Chromium. However,
863 // mojo/nacl doesn't depend on any Chromium headers, so we can't use a #define
864 // from there.
865 #define NACL_MOJO_DESC (NACL_CHROME_DESC_BASE + 3)
866
867 void InjectMojo(struct NaClApp* nap) {
868 NaClAppSetDesc(nap, NACL_MOJO_DESC, MakeMojoDesc(nap));
869 }
870
871 void InjectDisabledMojo(struct NaClApp* nap) {
872 NaClAppSetDesc(nap, NACL_MOJO_DESC, MakeDisabledMojoDesc(nap));
873 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698