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

Side by Side Diff: mojo/monacl/gen/NOT_FOR_COMMIT/mojo_syscall.cc

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

Powered by Google App Engine
This is Rietveld 408576698