OLD | NEW |
| (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/sfi/nacl_bindings/mojo_syscall.h" | |
9 | |
10 #include <stdio.h> | |
11 | |
12 #include "mojo/nacl/sfi/nacl_bindings/mojo_syscall_internal.h" | |
13 #include "mojo/public/c/system/buffer.h" | |
14 #include "mojo/public/c/system/data_pipe.h" | |
15 #include "mojo/public/c/system/handle.h" | |
16 #include "mojo/public/c/system/message_pipe.h" | |
17 #include "mojo/public/c/system/result.h" | |
18 #include "mojo/public/c/system/time.h" | |
19 #include "mojo/public/platform/native/system_impl_private.h" | |
20 #include "native_client/src/public/chrome_main.h" | |
21 #include "native_client/src/public/nacl_app.h" | |
22 #include "native_client/src/trusted/desc/nacl_desc_custom.h" | |
23 | |
24 MojoHandle g_mojo_handle = MOJO_HANDLE_INVALID; | |
25 MojoSystemImpl g_mojo_system = nullptr; | |
26 | |
27 namespace { | |
28 | |
29 MojoResult _MojoGetInitialHandle(MojoHandle* handle) { | |
30 *handle = g_mojo_handle; | |
31 return MOJO_RESULT_OK; | |
32 } | |
33 | |
34 void MojoDescDestroy(void* handle) { | |
35 } | |
36 | |
37 ssize_t MojoDescSendMsg(void* handle, | |
38 const struct NaClImcTypedMsgHdr* msg, | |
39 int flags) { | |
40 struct NaClApp* nap = static_cast<struct NaClApp*>(handle); | |
41 | |
42 if (msg->iov_length != 1 || msg->ndesc_length != 0) { | |
43 return -1; | |
44 } | |
45 | |
46 uint32_t volatile* params = static_cast<uint32_t volatile*>(msg->iov[0].base); | |
47 size_t num_params = msg->iov[0].length / sizeof(*params); | |
48 | |
49 if (num_params < 1) { | |
50 return -1; | |
51 } | |
52 | |
53 uint32_t msg_type = params[0]; | |
54 switch (msg_type) { | |
55 case 0: { | |
56 if (num_params != 3) { | |
57 return -1; | |
58 } | |
59 MojoHandle volatile* handle_ptr; | |
60 MojoHandle handle_value; | |
61 MojoResult volatile* result_ptr; | |
62 MojoResult result_value; | |
63 { | |
64 ScopedCopyLock copy_lock(nap); | |
65 if (!ConvertScalarInOut(nap, params[1], false, &handle_value, | |
66 &handle_ptr)) { | |
67 return -1; | |
68 } | |
69 if (!ConvertScalarOutput(nap, params[2], false, &result_ptr)) { | |
70 return -1; | |
71 } | |
72 } | |
73 | |
74 result_value = _MojoGetInitialHandle(&handle_value); | |
75 | |
76 { | |
77 ScopedCopyLock copy_lock(nap); | |
78 *handle_ptr = handle_value; | |
79 *result_ptr = result_value; | |
80 } | |
81 | |
82 return 0; | |
83 } | |
84 case 1: { | |
85 if (num_params != 2) { | |
86 return -1; | |
87 } | |
88 MojoTimeTicks volatile* result_ptr; | |
89 MojoTimeTicks result_value; | |
90 { | |
91 ScopedCopyLock copy_lock(nap); | |
92 if (!ConvertScalarOutput(nap, params[1], false, &result_ptr)) { | |
93 return -1; | |
94 } | |
95 } | |
96 | |
97 result_value = MojoSystemImplGetTimeTicksNow(g_mojo_system); | |
98 | |
99 { | |
100 ScopedCopyLock copy_lock(nap); | |
101 *result_ptr = result_value; | |
102 } | |
103 | |
104 return 0; | |
105 } | |
106 case 2: { | |
107 if (num_params != 3) { | |
108 return -1; | |
109 } | |
110 MojoHandle handle_value; | |
111 MojoResult volatile* result_ptr; | |
112 MojoResult result_value; | |
113 { | |
114 ScopedCopyLock copy_lock(nap); | |
115 if (!ConvertScalarInput(nap, params[1], &handle_value)) { | |
116 return -1; | |
117 } | |
118 if (!ConvertScalarOutput(nap, params[2], false, &result_ptr)) { | |
119 return -1; | |
120 } | |
121 } | |
122 | |
123 result_value = MojoSystemImplClose(g_mojo_system, handle_value); | |
124 | |
125 { | |
126 ScopedCopyLock copy_lock(nap); | |
127 *result_ptr = result_value; | |
128 } | |
129 | |
130 return 0; | |
131 } | |
132 case 3: { | |
133 if (num_params != 4) { | |
134 return -1; | |
135 } | |
136 MojoHandle handle_value; | |
137 MojoHandleRights volatile* rights_ptr; | |
138 MojoHandleRights rights_value; | |
139 MojoResult volatile* result_ptr; | |
140 MojoResult result_value; | |
141 { | |
142 ScopedCopyLock copy_lock(nap); | |
143 if (!ConvertScalarInput(nap, params[1], &handle_value)) { | |
144 return -1; | |
145 } | |
146 if (!ConvertScalarInOut(nap, params[2], false, &rights_value, | |
147 &rights_ptr)) { | |
148 return -1; | |
149 } | |
150 if (!ConvertScalarOutput(nap, params[3], false, &result_ptr)) { | |
151 return -1; | |
152 } | |
153 } | |
154 | |
155 result_value = | |
156 MojoSystemImplGetRights(g_mojo_system, handle_value, &rights_value); | |
157 | |
158 { | |
159 ScopedCopyLock copy_lock(nap); | |
160 *rights_ptr = rights_value; | |
161 *result_ptr = result_value; | |
162 } | |
163 | |
164 return 0; | |
165 } | |
166 case 4: { | |
167 if (num_params != 5) { | |
168 return -1; | |
169 } | |
170 MojoHandle handle_value; | |
171 MojoHandleRights rights_to_remove_value; | |
172 MojoHandle volatile* new_handle_ptr; | |
173 MojoHandle new_handle_value; | |
174 MojoResult volatile* result_ptr; | |
175 MojoResult result_value; | |
176 { | |
177 ScopedCopyLock copy_lock(nap); | |
178 if (!ConvertScalarInput(nap, params[1], &handle_value)) { | |
179 return -1; | |
180 } | |
181 if (!ConvertScalarInput(nap, params[2], &rights_to_remove_value)) { | |
182 return -1; | |
183 } | |
184 if (!ConvertScalarInOut(nap, params[3], false, &new_handle_value, | |
185 &new_handle_ptr)) { | |
186 return -1; | |
187 } | |
188 if (!ConvertScalarOutput(nap, params[4], false, &result_ptr)) { | |
189 return -1; | |
190 } | |
191 } | |
192 | |
193 result_value = MojoSystemImplDuplicateHandleWithReducedRights( | |
194 g_mojo_system, handle_value, rights_to_remove_value, | |
195 &new_handle_value); | |
196 | |
197 { | |
198 ScopedCopyLock copy_lock(nap); | |
199 *new_handle_ptr = new_handle_value; | |
200 *result_ptr = result_value; | |
201 } | |
202 | |
203 return 0; | |
204 } | |
205 case 5: { | |
206 if (num_params != 4) { | |
207 return -1; | |
208 } | |
209 MojoHandle handle_value; | |
210 MojoHandle volatile* new_handle_ptr; | |
211 MojoHandle new_handle_value; | |
212 MojoResult volatile* result_ptr; | |
213 MojoResult result_value; | |
214 { | |
215 ScopedCopyLock copy_lock(nap); | |
216 if (!ConvertScalarInput(nap, params[1], &handle_value)) { | |
217 return -1; | |
218 } | |
219 if (!ConvertScalarInOut(nap, params[2], false, &new_handle_value, | |
220 &new_handle_ptr)) { | |
221 return -1; | |
222 } | |
223 if (!ConvertScalarOutput(nap, params[3], false, &result_ptr)) { | |
224 return -1; | |
225 } | |
226 } | |
227 | |
228 result_value = MojoSystemImplDuplicateHandle(g_mojo_system, handle_value, | |
229 &new_handle_value); | |
230 | |
231 { | |
232 ScopedCopyLock copy_lock(nap); | |
233 *new_handle_ptr = new_handle_value; | |
234 *result_ptr = result_value; | |
235 } | |
236 | |
237 return 0; | |
238 } | |
239 case 6: { | |
240 if (num_params != 6) { | |
241 return -1; | |
242 } | |
243 MojoHandle handle_value; | |
244 MojoHandleSignals signals_value; | |
245 MojoDeadline deadline_value; | |
246 MojoHandleSignalsState volatile* signals_state_ptr; | |
247 MojoHandleSignalsState signals_state_value; | |
248 MojoResult volatile* result_ptr; | |
249 MojoResult result_value; | |
250 { | |
251 ScopedCopyLock copy_lock(nap); | |
252 if (!ConvertScalarInput(nap, params[1], &handle_value)) { | |
253 return -1; | |
254 } | |
255 if (!ConvertScalarInput(nap, params[2], &signals_value)) { | |
256 return -1; | |
257 } | |
258 if (!ConvertScalarInput(nap, params[3], &deadline_value)) { | |
259 return -1; | |
260 } | |
261 if (!ConvertScalarOutput(nap, params[4], true, &signals_state_ptr)) { | |
262 return -1; | |
263 } | |
264 if (!ConvertScalarOutput(nap, params[5], false, &result_ptr)) { | |
265 return -1; | |
266 } | |
267 } | |
268 | |
269 result_value = MojoSystemImplWait( | |
270 g_mojo_system, handle_value, signals_value, deadline_value, | |
271 signals_state_ptr ? &signals_state_value : nullptr); | |
272 | |
273 { | |
274 ScopedCopyLock copy_lock(nap); | |
275 if (signals_state_ptr) { | |
276 memcpy_volatile_out(signals_state_ptr, &signals_state_value, | |
277 sizeof(MojoHandleSignalsState)); | |
278 } | |
279 *result_ptr = result_value; | |
280 } | |
281 | |
282 return 0; | |
283 } | |
284 case 7: { | |
285 if (num_params != 8) { | |
286 return -1; | |
287 } | |
288 const MojoHandle* handles; | |
289 const MojoHandleSignals* signals; | |
290 uint32_t num_handles_value; | |
291 MojoDeadline deadline_value; | |
292 uint32_t volatile* result_index_ptr; | |
293 uint32_t result_index_value; | |
294 struct MojoHandleSignalsState* signals_states; | |
295 MojoResult volatile* result_ptr; | |
296 MojoResult result_value; | |
297 { | |
298 ScopedCopyLock copy_lock(nap); | |
299 if (!ConvertScalarInput(nap, params[3], &num_handles_value)) { | |
300 return -1; | |
301 } | |
302 if (!ConvertScalarInput(nap, params[4], &deadline_value)) { | |
303 return -1; | |
304 } | |
305 if (!ConvertScalarInOut(nap, params[5], true, &result_index_value, | |
306 &result_index_ptr)) { | |
307 return -1; | |
308 } | |
309 if (!ConvertScalarOutput(nap, params[7], false, &result_ptr)) { | |
310 return -1; | |
311 } | |
312 if (!ConvertArray(nap, params[1], num_handles_value, sizeof(*handles), | |
313 false, &handles)) { | |
314 return -1; | |
315 } | |
316 if (!ConvertArray(nap, params[2], num_handles_value, sizeof(*signals), | |
317 false, &signals)) { | |
318 return -1; | |
319 } | |
320 if (!ConvertArray(nap, params[6], num_handles_value, | |
321 sizeof(*signals_states), true, &signals_states)) { | |
322 return -1; | |
323 } | |
324 } | |
325 | |
326 result_value = MojoSystemImplWaitMany( | |
327 g_mojo_system, handles, signals, num_handles_value, deadline_value, | |
328 result_index_ptr ? &result_index_value : nullptr, signals_states); | |
329 | |
330 { | |
331 ScopedCopyLock copy_lock(nap); | |
332 if (result_index_ptr) { | |
333 *result_index_ptr = result_index_value; | |
334 } | |
335 *result_ptr = result_value; | |
336 } | |
337 | |
338 return 0; | |
339 } | |
340 case 8: { | |
341 if (num_params != 5) { | |
342 return -1; | |
343 } | |
344 const struct MojoCreateMessagePipeOptions* options; | |
345 MojoHandle volatile* message_pipe_handle0_ptr; | |
346 MojoHandle message_pipe_handle0_value; | |
347 MojoHandle volatile* message_pipe_handle1_ptr; | |
348 MojoHandle message_pipe_handle1_value; | |
349 MojoResult volatile* result_ptr; | |
350 MojoResult result_value; | |
351 { | |
352 ScopedCopyLock copy_lock(nap); | |
353 if (!ConvertExtensibleStructInput(nap, params[1], true, &options)) { | |
354 return -1; | |
355 } | |
356 if (!ConvertScalarInOut(nap, params[2], false, | |
357 &message_pipe_handle0_value, | |
358 &message_pipe_handle0_ptr)) { | |
359 return -1; | |
360 } | |
361 if (!ConvertScalarInOut(nap, params[3], false, | |
362 &message_pipe_handle1_value, | |
363 &message_pipe_handle1_ptr)) { | |
364 return -1; | |
365 } | |
366 if (!ConvertScalarOutput(nap, params[4], false, &result_ptr)) { | |
367 return -1; | |
368 } | |
369 } | |
370 | |
371 result_value = MojoSystemImplCreateMessagePipe( | |
372 g_mojo_system, options, &message_pipe_handle0_value, | |
373 &message_pipe_handle1_value); | |
374 | |
375 { | |
376 ScopedCopyLock copy_lock(nap); | |
377 *message_pipe_handle0_ptr = message_pipe_handle0_value; | |
378 *message_pipe_handle1_ptr = message_pipe_handle1_value; | |
379 *result_ptr = result_value; | |
380 } | |
381 | |
382 return 0; | |
383 } | |
384 case 9: { | |
385 if (num_params != 8) { | |
386 return -1; | |
387 } | |
388 MojoHandle message_pipe_handle_value; | |
389 const void* bytes; | |
390 uint32_t num_bytes_value; | |
391 const MojoHandle* handles; | |
392 uint32_t num_handles_value; | |
393 MojoWriteMessageFlags flags_value; | |
394 MojoResult volatile* result_ptr; | |
395 MojoResult result_value; | |
396 { | |
397 ScopedCopyLock copy_lock(nap); | |
398 if (!ConvertScalarInput(nap, params[1], &message_pipe_handle_value)) { | |
399 return -1; | |
400 } | |
401 if (!ConvertScalarInput(nap, params[3], &num_bytes_value)) { | |
402 return -1; | |
403 } | |
404 if (!ConvertScalarInput(nap, params[5], &num_handles_value)) { | |
405 return -1; | |
406 } | |
407 if (!ConvertScalarInput(nap, params[6], &flags_value)) { | |
408 return -1; | |
409 } | |
410 if (!ConvertScalarOutput(nap, params[7], false, &result_ptr)) { | |
411 return -1; | |
412 } | |
413 if (!ConvertArray(nap, params[2], num_bytes_value, 1, true, &bytes)) { | |
414 return -1; | |
415 } | |
416 if (!ConvertArray(nap, params[4], num_handles_value, sizeof(*handles), | |
417 true, &handles)) { | |
418 return -1; | |
419 } | |
420 } | |
421 | |
422 result_value = MojoSystemImplWriteMessage( | |
423 g_mojo_system, message_pipe_handle_value, bytes, num_bytes_value, | |
424 handles, num_handles_value, flags_value); | |
425 | |
426 { | |
427 ScopedCopyLock copy_lock(nap); | |
428 *result_ptr = result_value; | |
429 } | |
430 | |
431 return 0; | |
432 } | |
433 case 10: { | |
434 if (num_params != 8) { | |
435 return -1; | |
436 } | |
437 MojoHandle message_pipe_handle_value; | |
438 void* bytes; | |
439 uint32_t volatile* num_bytes_ptr; | |
440 uint32_t num_bytes_value; | |
441 MojoHandle* handles; | |
442 uint32_t volatile* num_handles_ptr; | |
443 uint32_t num_handles_value; | |
444 MojoReadMessageFlags flags_value; | |
445 MojoResult volatile* result_ptr; | |
446 MojoResult result_value; | |
447 { | |
448 ScopedCopyLock copy_lock(nap); | |
449 if (!ConvertScalarInput(nap, params[1], &message_pipe_handle_value)) { | |
450 return -1; | |
451 } | |
452 if (!ConvertScalarInOut(nap, params[3], true, &num_bytes_value, | |
453 &num_bytes_ptr)) { | |
454 return -1; | |
455 } | |
456 if (!ConvertScalarInOut(nap, params[5], true, &num_handles_value, | |
457 &num_handles_ptr)) { | |
458 return -1; | |
459 } | |
460 if (!ConvertScalarInput(nap, params[6], &flags_value)) { | |
461 return -1; | |
462 } | |
463 if (!ConvertScalarOutput(nap, params[7], false, &result_ptr)) { | |
464 return -1; | |
465 } | |
466 if (!ConvertArray(nap, params[2], num_bytes_value, 1, true, &bytes)) { | |
467 return -1; | |
468 } | |
469 if (!ConvertArray(nap, params[4], num_handles_value, sizeof(*handles), | |
470 true, &handles)) { | |
471 return -1; | |
472 } | |
473 } | |
474 | |
475 result_value = MojoSystemImplReadMessage( | |
476 g_mojo_system, message_pipe_handle_value, bytes, | |
477 num_bytes_ptr ? &num_bytes_value : nullptr, handles, | |
478 num_handles_ptr ? &num_handles_value : nullptr, flags_value); | |
479 | |
480 { | |
481 ScopedCopyLock copy_lock(nap); | |
482 if (num_bytes_ptr) { | |
483 *num_bytes_ptr = num_bytes_value; | |
484 } | |
485 if (num_handles_ptr) { | |
486 *num_handles_ptr = num_handles_value; | |
487 } | |
488 *result_ptr = result_value; | |
489 } | |
490 | |
491 return 0; | |
492 } | |
493 case 11: { | |
494 if (num_params != 5) { | |
495 return -1; | |
496 } | |
497 const struct MojoCreateDataPipeOptions* options; | |
498 MojoHandle volatile* data_pipe_producer_handle_ptr; | |
499 MojoHandle data_pipe_producer_handle_value; | |
500 MojoHandle volatile* data_pipe_consumer_handle_ptr; | |
501 MojoHandle data_pipe_consumer_handle_value; | |
502 MojoResult volatile* result_ptr; | |
503 MojoResult result_value; | |
504 { | |
505 ScopedCopyLock copy_lock(nap); | |
506 if (!ConvertExtensibleStructInput(nap, params[1], true, &options)) { | |
507 return -1; | |
508 } | |
509 if (!ConvertScalarInOut(nap, params[2], false, | |
510 &data_pipe_producer_handle_value, | |
511 &data_pipe_producer_handle_ptr)) { | |
512 return -1; | |
513 } | |
514 if (!ConvertScalarInOut(nap, params[3], false, | |
515 &data_pipe_consumer_handle_value, | |
516 &data_pipe_consumer_handle_ptr)) { | |
517 return -1; | |
518 } | |
519 if (!ConvertScalarOutput(nap, params[4], false, &result_ptr)) { | |
520 return -1; | |
521 } | |
522 } | |
523 | |
524 result_value = MojoSystemImplCreateDataPipe( | |
525 g_mojo_system, options, &data_pipe_producer_handle_value, | |
526 &data_pipe_consumer_handle_value); | |
527 | |
528 { | |
529 ScopedCopyLock copy_lock(nap); | |
530 *data_pipe_producer_handle_ptr = data_pipe_producer_handle_value; | |
531 *data_pipe_consumer_handle_ptr = data_pipe_consumer_handle_value; | |
532 *result_ptr = result_value; | |
533 } | |
534 | |
535 return 0; | |
536 } | |
537 case 12: { | |
538 if (num_params != 4) { | |
539 return -1; | |
540 } | |
541 MojoHandle data_pipe_producer_handle_value; | |
542 const struct MojoDataPipeProducerOptions* options; | |
543 MojoResult volatile* result_ptr; | |
544 MojoResult result_value; | |
545 { | |
546 ScopedCopyLock copy_lock(nap); | |
547 if (!ConvertScalarInput(nap, params[1], | |
548 &data_pipe_producer_handle_value)) { | |
549 return -1; | |
550 } | |
551 if (!ConvertExtensibleStructInput(nap, params[2], true, &options)) { | |
552 return -1; | |
553 } | |
554 if (!ConvertScalarOutput(nap, params[3], false, &result_ptr)) { | |
555 return -1; | |
556 } | |
557 } | |
558 | |
559 result_value = MojoSystemImplSetDataPipeProducerOptions( | |
560 g_mojo_system, data_pipe_producer_handle_value, options); | |
561 | |
562 { | |
563 ScopedCopyLock copy_lock(nap); | |
564 *result_ptr = result_value; | |
565 } | |
566 | |
567 return 0; | |
568 } | |
569 case 13: { | |
570 if (num_params != 5) { | |
571 return -1; | |
572 } | |
573 MojoHandle data_pipe_producer_handle_value; | |
574 struct MojoDataPipeProducerOptions* options; | |
575 uint32_t options_num_bytes_value; | |
576 MojoResult volatile* result_ptr; | |
577 MojoResult result_value; | |
578 { | |
579 ScopedCopyLock copy_lock(nap); | |
580 if (!ConvertScalarInput(nap, params[1], | |
581 &data_pipe_producer_handle_value)) { | |
582 return -1; | |
583 } | |
584 if (!ConvertScalarInput(nap, params[3], &options_num_bytes_value)) { | |
585 return -1; | |
586 } | |
587 if (!ConvertScalarOutput(nap, params[4], false, &result_ptr)) { | |
588 return -1; | |
589 } | |
590 if (!ConvertArray(nap, params[2], options_num_bytes_value, 1, false, | |
591 &options)) { | |
592 return -1; | |
593 } | |
594 } | |
595 | |
596 result_value = MojoSystemImplGetDataPipeProducerOptions( | |
597 g_mojo_system, data_pipe_producer_handle_value, options, | |
598 options_num_bytes_value); | |
599 | |
600 { | |
601 ScopedCopyLock copy_lock(nap); | |
602 *result_ptr = result_value; | |
603 } | |
604 | |
605 return 0; | |
606 } | |
607 case 14: { | |
608 if (num_params != 6) { | |
609 return -1; | |
610 } | |
611 MojoHandle data_pipe_producer_handle_value; | |
612 const void* elements; | |
613 uint32_t volatile* num_bytes_ptr; | |
614 uint32_t num_bytes_value; | |
615 MojoWriteDataFlags flags_value; | |
616 MojoResult volatile* result_ptr; | |
617 MojoResult result_value; | |
618 { | |
619 ScopedCopyLock copy_lock(nap); | |
620 if (!ConvertScalarInput(nap, params[1], | |
621 &data_pipe_producer_handle_value)) { | |
622 return -1; | |
623 } | |
624 if (!ConvertScalarInOut(nap, params[3], false, &num_bytes_value, | |
625 &num_bytes_ptr)) { | |
626 return -1; | |
627 } | |
628 if (!ConvertScalarInput(nap, params[4], &flags_value)) { | |
629 return -1; | |
630 } | |
631 if (!ConvertScalarOutput(nap, params[5], false, &result_ptr)) { | |
632 return -1; | |
633 } | |
634 if (!ConvertArray(nap, params[2], num_bytes_value, 1, false, | |
635 &elements)) { | |
636 return -1; | |
637 } | |
638 } | |
639 | |
640 result_value = MojoSystemImplWriteData( | |
641 g_mojo_system, data_pipe_producer_handle_value, elements, | |
642 &num_bytes_value, flags_value); | |
643 | |
644 { | |
645 ScopedCopyLock copy_lock(nap); | |
646 *num_bytes_ptr = num_bytes_value; | |
647 *result_ptr = result_value; | |
648 } | |
649 | |
650 return 0; | |
651 } | |
652 case 15: | |
653 fprintf(stderr, "MojoBeginWriteData not implemented\n"); | |
654 return -1; | |
655 case 16: { | |
656 if (num_params != 4) { | |
657 return -1; | |
658 } | |
659 MojoHandle data_pipe_producer_handle_value; | |
660 uint32_t num_bytes_written_value; | |
661 MojoResult volatile* result_ptr; | |
662 MojoResult result_value; | |
663 { | |
664 ScopedCopyLock copy_lock(nap); | |
665 if (!ConvertScalarInput(nap, params[1], | |
666 &data_pipe_producer_handle_value)) { | |
667 return -1; | |
668 } | |
669 if (!ConvertScalarInput(nap, params[2], &num_bytes_written_value)) { | |
670 return -1; | |
671 } | |
672 if (!ConvertScalarOutput(nap, params[3], false, &result_ptr)) { | |
673 return -1; | |
674 } | |
675 } | |
676 | |
677 result_value = MojoSystemImplEndWriteData(g_mojo_system, | |
678 data_pipe_producer_handle_value, | |
679 num_bytes_written_value); | |
680 | |
681 { | |
682 ScopedCopyLock copy_lock(nap); | |
683 *result_ptr = result_value; | |
684 } | |
685 | |
686 return 0; | |
687 } | |
688 case 17: { | |
689 if (num_params != 4) { | |
690 return -1; | |
691 } | |
692 MojoHandle data_pipe_consumer_handle_value; | |
693 const struct MojoDataPipeConsumerOptions* options; | |
694 MojoResult volatile* result_ptr; | |
695 MojoResult result_value; | |
696 { | |
697 ScopedCopyLock copy_lock(nap); | |
698 if (!ConvertScalarInput(nap, params[1], | |
699 &data_pipe_consumer_handle_value)) { | |
700 return -1; | |
701 } | |
702 if (!ConvertExtensibleStructInput(nap, params[2], true, &options)) { | |
703 return -1; | |
704 } | |
705 if (!ConvertScalarOutput(nap, params[3], false, &result_ptr)) { | |
706 return -1; | |
707 } | |
708 } | |
709 | |
710 result_value = MojoSystemImplSetDataPipeConsumerOptions( | |
711 g_mojo_system, data_pipe_consumer_handle_value, options); | |
712 | |
713 { | |
714 ScopedCopyLock copy_lock(nap); | |
715 *result_ptr = result_value; | |
716 } | |
717 | |
718 return 0; | |
719 } | |
720 case 18: { | |
721 if (num_params != 5) { | |
722 return -1; | |
723 } | |
724 MojoHandle data_pipe_consumer_handle_value; | |
725 struct MojoDataPipeConsumerOptions* options; | |
726 uint32_t options_num_bytes_value; | |
727 MojoResult volatile* result_ptr; | |
728 MojoResult result_value; | |
729 { | |
730 ScopedCopyLock copy_lock(nap); | |
731 if (!ConvertScalarInput(nap, params[1], | |
732 &data_pipe_consumer_handle_value)) { | |
733 return -1; | |
734 } | |
735 if (!ConvertScalarInput(nap, params[3], &options_num_bytes_value)) { | |
736 return -1; | |
737 } | |
738 if (!ConvertScalarOutput(nap, params[4], false, &result_ptr)) { | |
739 return -1; | |
740 } | |
741 if (!ConvertArray(nap, params[2], options_num_bytes_value, 1, false, | |
742 &options)) { | |
743 return -1; | |
744 } | |
745 } | |
746 | |
747 result_value = MojoSystemImplGetDataPipeConsumerOptions( | |
748 g_mojo_system, data_pipe_consumer_handle_value, options, | |
749 options_num_bytes_value); | |
750 | |
751 { | |
752 ScopedCopyLock copy_lock(nap); | |
753 *result_ptr = result_value; | |
754 } | |
755 | |
756 return 0; | |
757 } | |
758 case 19: { | |
759 if (num_params != 6) { | |
760 return -1; | |
761 } | |
762 MojoHandle data_pipe_consumer_handle_value; | |
763 void* elements; | |
764 uint32_t volatile* num_bytes_ptr; | |
765 uint32_t num_bytes_value; | |
766 MojoReadDataFlags flags_value; | |
767 MojoResult volatile* result_ptr; | |
768 MojoResult result_value; | |
769 { | |
770 ScopedCopyLock copy_lock(nap); | |
771 if (!ConvertScalarInput(nap, params[1], | |
772 &data_pipe_consumer_handle_value)) { | |
773 return -1; | |
774 } | |
775 if (!ConvertScalarInOut(nap, params[3], false, &num_bytes_value, | |
776 &num_bytes_ptr)) { | |
777 return -1; | |
778 } | |
779 if (!ConvertScalarInput(nap, params[4], &flags_value)) { | |
780 return -1; | |
781 } | |
782 if (!ConvertScalarOutput(nap, params[5], false, &result_ptr)) { | |
783 return -1; | |
784 } | |
785 if (!ConvertArray(nap, params[2], num_bytes_value, 1, false, | |
786 &elements)) { | |
787 return -1; | |
788 } | |
789 } | |
790 | |
791 result_value = | |
792 MojoSystemImplReadData(g_mojo_system, data_pipe_consumer_handle_value, | |
793 elements, &num_bytes_value, flags_value); | |
794 | |
795 { | |
796 ScopedCopyLock copy_lock(nap); | |
797 *num_bytes_ptr = num_bytes_value; | |
798 *result_ptr = result_value; | |
799 } | |
800 | |
801 return 0; | |
802 } | |
803 case 20: | |
804 fprintf(stderr, "MojoBeginReadData not implemented\n"); | |
805 return -1; | |
806 case 21: { | |
807 if (num_params != 4) { | |
808 return -1; | |
809 } | |
810 MojoHandle data_pipe_consumer_handle_value; | |
811 uint32_t num_bytes_read_value; | |
812 MojoResult volatile* result_ptr; | |
813 MojoResult result_value; | |
814 { | |
815 ScopedCopyLock copy_lock(nap); | |
816 if (!ConvertScalarInput(nap, params[1], | |
817 &data_pipe_consumer_handle_value)) { | |
818 return -1; | |
819 } | |
820 if (!ConvertScalarInput(nap, params[2], &num_bytes_read_value)) { | |
821 return -1; | |
822 } | |
823 if (!ConvertScalarOutput(nap, params[3], false, &result_ptr)) { | |
824 return -1; | |
825 } | |
826 } | |
827 | |
828 result_value = MojoSystemImplEndReadData( | |
829 g_mojo_system, data_pipe_consumer_handle_value, num_bytes_read_value); | |
830 | |
831 { | |
832 ScopedCopyLock copy_lock(nap); | |
833 *result_ptr = result_value; | |
834 } | |
835 | |
836 return 0; | |
837 } | |
838 case 22: { | |
839 if (num_params != 5) { | |
840 return -1; | |
841 } | |
842 const struct MojoCreateSharedBufferOptions* options; | |
843 uint64_t num_bytes_value; | |
844 MojoHandle volatile* shared_buffer_handle_ptr; | |
845 MojoHandle shared_buffer_handle_value; | |
846 MojoResult volatile* result_ptr; | |
847 MojoResult result_value; | |
848 { | |
849 ScopedCopyLock copy_lock(nap); | |
850 if (!ConvertExtensibleStructInput(nap, params[1], true, &options)) { | |
851 return -1; | |
852 } | |
853 if (!ConvertScalarInput(nap, params[2], &num_bytes_value)) { | |
854 return -1; | |
855 } | |
856 if (!ConvertScalarInOut(nap, params[3], false, | |
857 &shared_buffer_handle_value, | |
858 &shared_buffer_handle_ptr)) { | |
859 return -1; | |
860 } | |
861 if (!ConvertScalarOutput(nap, params[4], false, &result_ptr)) { | |
862 return -1; | |
863 } | |
864 } | |
865 | |
866 result_value = MojoSystemImplCreateSharedBuffer( | |
867 g_mojo_system, options, num_bytes_value, &shared_buffer_handle_value); | |
868 | |
869 { | |
870 ScopedCopyLock copy_lock(nap); | |
871 *shared_buffer_handle_ptr = shared_buffer_handle_value; | |
872 *result_ptr = result_value; | |
873 } | |
874 | |
875 return 0; | |
876 } | |
877 case 23: { | |
878 if (num_params != 5) { | |
879 return -1; | |
880 } | |
881 MojoHandle buffer_handle_value; | |
882 const struct MojoDuplicateBufferHandleOptions* options; | |
883 MojoHandle volatile* new_buffer_handle_ptr; | |
884 MojoHandle new_buffer_handle_value; | |
885 MojoResult volatile* result_ptr; | |
886 MojoResult result_value; | |
887 { | |
888 ScopedCopyLock copy_lock(nap); | |
889 if (!ConvertScalarInput(nap, params[1], &buffer_handle_value)) { | |
890 return -1; | |
891 } | |
892 if (!ConvertExtensibleStructInput(nap, params[2], true, &options)) { | |
893 return -1; | |
894 } | |
895 if (!ConvertScalarInOut(nap, params[3], false, &new_buffer_handle_value, | |
896 &new_buffer_handle_ptr)) { | |
897 return -1; | |
898 } | |
899 if (!ConvertScalarOutput(nap, params[4], false, &result_ptr)) { | |
900 return -1; | |
901 } | |
902 } | |
903 | |
904 result_value = MojoSystemImplDuplicateBufferHandle( | |
905 g_mojo_system, buffer_handle_value, options, | |
906 &new_buffer_handle_value); | |
907 | |
908 { | |
909 ScopedCopyLock copy_lock(nap); | |
910 *new_buffer_handle_ptr = new_buffer_handle_value; | |
911 *result_ptr = result_value; | |
912 } | |
913 | |
914 return 0; | |
915 } | |
916 case 24: { | |
917 if (num_params != 5) { | |
918 return -1; | |
919 } | |
920 MojoHandle buffer_handle_value; | |
921 struct MojoBufferInformation* info; | |
922 uint32_t info_num_bytes_value; | |
923 MojoResult volatile* result_ptr; | |
924 MojoResult result_value; | |
925 { | |
926 ScopedCopyLock copy_lock(nap); | |
927 if (!ConvertScalarInput(nap, params[1], &buffer_handle_value)) { | |
928 return -1; | |
929 } | |
930 if (!ConvertScalarInput(nap, params[3], &info_num_bytes_value)) { | |
931 return -1; | |
932 } | |
933 if (!ConvertScalarOutput(nap, params[4], false, &result_ptr)) { | |
934 return -1; | |
935 } | |
936 if (!ConvertArray(nap, params[2], info_num_bytes_value, 1, false, | |
937 &info)) { | |
938 return -1; | |
939 } | |
940 } | |
941 | |
942 result_value = MojoSystemImplGetBufferInformation( | |
943 g_mojo_system, buffer_handle_value, info, info_num_bytes_value); | |
944 | |
945 { | |
946 ScopedCopyLock copy_lock(nap); | |
947 *result_ptr = result_value; | |
948 } | |
949 | |
950 return 0; | |
951 } | |
952 case 25: | |
953 fprintf(stderr, "MojoMapBuffer not implemented\n"); | |
954 return -1; | |
955 case 26: | |
956 fprintf(stderr, "MojoUnmapBuffer not implemented\n"); | |
957 return -1; | |
958 } | |
959 | |
960 return -1; | |
961 } | |
962 | |
963 ssize_t MojoDescRecvMsg(void* handle, | |
964 struct NaClImcTypedMsgHdr* msg, | |
965 int flags) { | |
966 return -1; | |
967 } | |
968 | |
969 struct NaClDesc* MakeMojoDesc(struct NaClApp* nap) { | |
970 struct NaClDescCustomFuncs funcs = NACL_DESC_CUSTOM_FUNCS_INITIALIZER; | |
971 funcs.Destroy = MojoDescDestroy; | |
972 funcs.SendMsg = MojoDescSendMsg; | |
973 funcs.RecvMsg = MojoDescRecvMsg; | |
974 return NaClDescMakeCustomDesc(nap, &funcs); | |
975 } | |
976 | |
977 void MojoDisabledDescDestroy(void* handle) { | |
978 } | |
979 | |
980 ssize_t MojoDisabledDescSendMsg(void* handle, | |
981 const struct NaClImcTypedMsgHdr* msg, | |
982 int flags) { | |
983 fprintf(stderr, "Mojo is not currently supported."); | |
984 abort(); | |
985 } | |
986 | |
987 ssize_t MojoDisabledDescRecvMsg(void* handle, | |
988 struct NaClImcTypedMsgHdr* msg, | |
989 int flags) { | |
990 fprintf(stderr, "Mojo is not currently supported."); | |
991 abort(); | |
992 } | |
993 | |
994 struct NaClDesc* MakeDisabledMojoDesc(struct NaClApp* nap) { | |
995 struct NaClDescCustomFuncs funcs = NACL_DESC_CUSTOM_FUNCS_INITIALIZER; | |
996 funcs.Destroy = MojoDisabledDescDestroy; | |
997 funcs.SendMsg = MojoDisabledDescSendMsg; | |
998 funcs.RecvMsg = MojoDisabledDescRecvMsg; | |
999 return NaClDescMakeCustomDesc(nap, &funcs); | |
1000 } | |
1001 | |
1002 } // namespace | |
1003 | |
1004 // The value for this FD must not conflict with uses inside Chromium. However, | |
1005 // mojo/nacl doesn't depend on any Chromium headers, so we can't use a #define | |
1006 // from there. | |
1007 #define NACL_MOJO_DESC (NACL_CHROME_DESC_BASE + 3) | |
1008 | |
1009 MojoResult InjectMojo(struct NaClApp* nap, MojoHandle handle) { | |
1010 NaClAppSetDesc(nap, NACL_MOJO_DESC, MakeMojoDesc(nap)); | |
1011 g_mojo_system = MojoSystemImplCreateImpl(); | |
1012 return MojoSystemImplTransferHandle(MojoSystemImplGetDefaultImpl(), handle, | |
1013 g_mojo_system, &g_mojo_handle); | |
1014 } | |
1015 | |
1016 void InjectDisabledMojo(struct NaClApp* nap) { | |
1017 NaClAppSetDesc(nap, NACL_MOJO_DESC, MakeDisabledMojoDesc(nap)); | |
1018 } | |
OLD | NEW |