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

Side by Side Diff: src/trusted/validator_ragel/gen/validator_x86_32.c

Issue 11000033: Move validator_x86_XX.rl out of unreviewed. (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client/
Patch Set: Created 7 years, 9 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 | Annotate | Revision Log
OLDNEW
1 /* native_client/src/trusted/validator_ragel/gen/validator_x86_32.c 1 /* native_client/src/trusted/validator_ragel/gen/validator_x86_32.c
2 * THIS FILE IS AUTO-GENERATED. DO NOT EDIT. 2 * THIS FILE IS AUTO-GENERATED. DO NOT EDIT.
3 * Compiled for ia32 mode. 3 * Compiled for ia32 mode.
4 */ 4 */
5 5
6 /* 6 /*
7 * This is the core of ia32-mode validator. Please note that this file 7 * This is the core of ia32-mode validator. Please note that this file
8 * combines ragel machine description and C language actions. Please read 8 * combines ragel machine description and C language actions. Please read
9 * validator_internals.html first to understand how the whole thing is built: 9 * validator_internals.html first to understand how the whole thing is built:
10 * it explains how the byte sequences are constructed, what constructs like 10 * it explains how the byte sequences are constructed, what constructs like
11 * "@{}" or "REX_WRX?" mean, etc. 11 * "@{}" or "REX_WRX?" mean, etc.
12 */ 12 */
13 13
14 #include <assert.h> 14 #include <assert.h>
15 #include <errno.h> 15 #include <errno.h>
16 #include <stddef.h> 16 #include <stddef.h>
17 #include <stdio.h> 17 #include <stdio.h>
18 #include <stdlib.h> 18 #include <stdlib.h>
19 #include <string.h> 19 #include <string.h>
20 20
21 #include "native_client/src/trusted/validator_ragel/bitmap.h" 21 #include "native_client/src/trusted/validator_ragel/bitmap.h"
22 #include "native_client/src/trusted/validator_ragel/unreviewed/validator_interna l.h" 22 #include "native_client/src/trusted/validator_ragel/validator_internal.h"
23 23
24 /* Ignore this information: it's not used by security model in IA32 mode. */ 24 /* Ignore this information: it's not used by security model in IA32 mode. */
25 #undef GET_VEX_PREFIX3 25 #undef GET_VEX_PREFIX3
26 #define GET_VEX_PREFIX3 0 26 #define GET_VEX_PREFIX3 0
27 #undef SET_VEX_PREFIX3 27 #undef SET_VEX_PREFIX3
28 #define SET_VEX_PREFIX3(P) 28 #define SET_VEX_PREFIX3(P)
29 29
30 30
31 31
32 32
33 /*
34 * The "write data" statement causes Ragel to emit the constant static data
35 * needed by the ragel machine.
36 */
33 37
34 static const int x86_32_validator_start = 234; 38 static const int x86_32_validator_start = 234;
35 static const int x86_32_validator_first_final = 234; 39 static const int x86_32_validator_first_final = 234;
36 static const int x86_32_validator_error = 0; 40 static const int x86_32_validator_error = 0;
37 41
38 static const int x86_32_validator_en_main = 234; 42 static const int x86_32_validator_en_main = 234;
39 43
40 44
41 45
42
43 Bool ValidateChunkIA32(const uint8_t *data, size_t size, 46 Bool ValidateChunkIA32(const uint8_t *data, size_t size,
44 uint32_t options, 47 uint32_t options,
45 const NaClCPUFeaturesX86 *cpu_features, 48 const NaClCPUFeaturesX86 *cpu_features,
46 ValidationCallbackFunc user_callback, 49 ValidationCallbackFunc user_callback,
47 void *callback_data) { 50 void *callback_data) {
48 bitmap_word valid_targets_small; 51 bitmap_word valid_targets_small;
49 bitmap_word jump_dests_small; 52 bitmap_word jump_dests_small;
50 bitmap_word *valid_targets; 53 bitmap_word *valid_targets;
51 bitmap_word *jump_dests; 54 bitmap_word *jump_dests;
52 const uint8_t *current_position; 55 const uint8_t *current_position;
(...skipping 16 matching lines...) Expand all
69 free(jump_dests); 72 free(jump_dests);
70 free(valid_targets); 73 free(valid_targets);
71 errno = ENOMEM; 74 errno = ENOMEM;
72 return FALSE; 75 return FALSE;
73 } 76 }
74 } 77 }
75 78
76 /* 79 /*
77 * This option is usually used in tests: we will process the whole chunk 80 * This option is usually used in tests: we will process the whole chunk
78 * in one pass. Usually each bundle is processed separately which means 81 * in one pass. Usually each bundle is processed separately which means
79 * instructions (and super-instructions) can not cross borders of the bundle. 82 * instructions (and "superinstructions") can not cross borders of the bundle.
80 */ 83 */
81 if (options & PROCESS_CHUNK_AS_A_CONTIGUOUS_STREAM) 84 if (options & PROCESS_CHUNK_AS_A_CONTIGUOUS_STREAM)
82 end_of_bundle = data + size; 85 end_of_bundle = data + size;
83 else 86 else
84 end_of_bundle = data + kBundleSize; 87 end_of_bundle = data + kBundleSize;
85 88
86 /* 89 /*
87 * Main loop. Here we process the data array bundle-after-bundle. 90 * Main loop. Here we process the data array bundle-after-bundle.
88 * Ragel-produced DFA does all the checks with one exception: direct jumps. 91 * Ragel-produced DFA does all the checks with one exception: direct jumps.
89 * It collects the two arrays: valid_targets and jump_dests which are used 92 * It collects the two arrays: valid_targets and jump_dests which are used
90 * to test direct jumps later. 93 * to test direct jumps later.
91 */ 94 */
92 for (current_position = data; 95 for (current_position = data;
93 current_position < data + size; 96 current_position < data + size;
94 current_position = end_of_bundle, 97 current_position = end_of_bundle,
95 end_of_bundle = current_position + kBundleSize) { 98 end_of_bundle = current_position + kBundleSize) {
96 /* Start of the instruction being processed. */ 99 /* Start of the instruction being processed. */
97 const uint8_t *instruction_begin = current_position; 100 const uint8_t *instruction_begin = current_position;
98 /* Only used locally in the end_of_instruction_cleanup action. */ 101 /* Only used locally in the end_of_instruction_cleanup action. */
99 const uint8_t *instruction_end; 102 const uint8_t *instruction_end;
100 uint32_t instruction_info_collected = 0; 103 uint32_t instruction_info_collected = 0;
101 int current_state; 104 int current_state;
102 105
106 /*
107 * The "write init" statement causes Ragel to emit initialization code.
108 * This should be executed once before the ragel machine is started.
109 */
103 110
104 { 111 {
105 ( current_state) = x86_32_validator_start; 112 ( current_state) = x86_32_validator_start;
106 } 113 }
107 114
115 /*
116 * The "write exec" statement causes Ragel to emit the ragel machine's
117 * execution code.
118 */
108 119
109 { 120 {
110 if ( ( current_position) == ( end_of_bundle) ) 121 if ( ( current_position) == ( end_of_bundle) )
111 goto _test_eof; 122 goto _test_eof;
112 switch ( ( current_state) ) 123 switch ( ( current_state) )
113 { 124 {
114 tr0: 125 tr0:
115 { 126 {
116 /* Mark start of this instruction as a valid target for jump. */ 127 /* Mark start of this instruction as a valid target for jump. */
117 MarkValidJumpTarget(instruction_begin - data, valid_targets); 128 MarkValidJumpTarget(instruction_begin - data, valid_targets);
(...skipping 2493 matching lines...) Expand 10 before | Expand all | Expand 10 after
2611 goto tr90; 2622 goto tr90;
2612 } else if ( (*( current_position)) >= 64u ) 2623 } else if ( (*( current_position)) >= 64u )
2613 goto tr91; 2624 goto tr91;
2614 goto tr35; 2625 goto tr35;
2615 st36: 2626 st36:
2616 if ( ++( current_position) == ( end_of_bundle) ) 2627 if ( ++( current_position) == ( end_of_bundle) )
2617 goto _test_eof36; 2628 goto _test_eof36;
2618 case 36: 2629 case 36:
2619 switch( (*( current_position)) ) { 2630 switch( (*( current_position)) ) {
2620 case 4u: goto tr95; 2631 case 4u: goto tr95;
2632 case 5u: goto tr96;
2621 case 12u: goto tr95; 2633 case 12u: goto tr95;
2634 case 13u: goto tr96;
2622 case 20u: goto tr95; 2635 case 20u: goto tr95;
2636 case 21u: goto tr96;
2623 case 28u: goto tr95; 2637 case 28u: goto tr95;
2638 case 29u: goto tr96;
2624 case 36u: goto tr95; 2639 case 36u: goto tr95;
2640 case 37u: goto tr96;
2625 case 44u: goto tr95; 2641 case 44u: goto tr95;
2642 case 45u: goto tr96;
2626 case 52u: goto tr95; 2643 case 52u: goto tr95;
2644 case 53u: goto tr96;
2627 case 60u: goto tr95; 2645 case 60u: goto tr95;
2646 case 61u: goto tr96;
2628 case 68u: goto tr98; 2647 case 68u: goto tr98;
2629 case 76u: goto tr98; 2648 case 76u: goto tr98;
2630 case 84u: goto tr98; 2649 case 84u: goto tr98;
2631 case 92u: goto tr98; 2650 case 92u: goto tr98;
2632 case 100u: goto tr98; 2651 case 100u: goto tr98;
2633 case 108u: goto tr98; 2652 case 108u: goto tr98;
2634 case 116u: goto tr98; 2653 case 116u: goto tr98;
2635 case 124u: goto tr98; 2654 case 124u: goto tr98;
2636 case 132u: goto tr99; 2655 case 132u: goto tr99;
2637 case 140u: goto tr99; 2656 case 140u: goto tr99;
2638 case 148u: goto tr99; 2657 case 148u: goto tr99;
2639 case 156u: goto tr99; 2658 case 156u: goto tr99;
2640 case 164u: goto tr99; 2659 case 164u: goto tr99;
2641 case 172u: goto tr99; 2660 case 172u: goto tr99;
2642 case 180u: goto tr99; 2661 case 180u: goto tr99;
2643 case 188u: goto tr99; 2662 case 188u: goto tr99;
2644 } 2663 }
2645 » if ( (*( current_position)) < 38u ) { 2664 » if ( (*( current_position)) < 64u ) {
2646 » » if ( (*( current_position)) < 14u ) { 2665 » » if ( (*( current_position)) <= 63u )
2647 » » » if ( (*( current_position)) > 3u ) {
2648 » » » » if ( 6u <= (*( current_position)) && (*( current _position)) <= 11u )
2649 » » » » » goto tr94;
2650 » » » } else
2651 » » » » goto tr94;
2652 » » } else if ( (*( current_position)) > 19u ) {
2653 » » » if ( (*( current_position)) > 27u ) {
2654 » » » » if ( 30u <= (*( current_position)) && (*( curren t_position)) <= 35u )
2655 » » » » » goto tr94;
2656 » » » } else if ( (*( current_position)) >= 22u )
2657 » » » » goto tr94;
2658 » » } else
2659 goto tr94; 2666 goto tr94;
2660 » } else if ( (*( current_position)) > 43u ) { 2667 » } else if ( (*( current_position)) > 127u ) {
2661 » » if ( (*( current_position)) < 62u ) { 2668 » » if ( 128u <= (*( current_position)) && (*( current_position)) <= 191u )
2662 » » » if ( (*( current_position)) > 51u ) { 2669 » » » goto tr96;
2663 » » » » if ( 54u <= (*( current_position)) && (*( curren t_position)) <= 59u )
2664 » » » » » goto tr94;
2665 » » » } else if ( (*( current_position)) >= 46u )
2666 » » » » goto tr94;
2667 » » } else if ( (*( current_position)) > 63u ) {
2668 » » » if ( (*( current_position)) > 127u ) {
2669 » » » » if ( 192u <= (*( current_position)) )
2670 » » » » » goto tr16;
2671 » » » } else if ( (*( current_position)) >= 64u )
2672 » » » » goto tr97;
2673 » » } else
2674 » » » goto tr94;
2675 } else 2670 } else
2676 » » goto tr94; 2671 » » goto tr97;
2677 » goto tr96; 2672 » goto tr16;
2678 st37: 2673 st37:
2679 if ( ++( current_position) == ( end_of_bundle) ) 2674 if ( ++( current_position) == ( end_of_bundle) )
2680 goto _test_eof37; 2675 goto _test_eof37;
2681 case 37: 2676 case 37:
2682 if ( (*( current_position)) == 15u ) 2677 if ( (*( current_position)) == 15u )
2683 goto st38; 2678 goto st38;
2684 goto tr16; 2679 goto tr16;
2685 st38: 2680 st38:
2686 if ( ++( current_position) == ( end_of_bundle) ) 2681 if ( ++( current_position) == ( end_of_bundle) )
2687 goto _test_eof38; 2682 goto _test_eof38;
(...skipping 737 matching lines...) Expand 10 before | Expand all | Expand 10 after
3425 goto tr160; 3420 goto tr160;
3426 } else if ( (*( current_position)) >= 64u ) 3421 } else if ( (*( current_position)) >= 64u )
3427 goto tr161; 3422 goto tr161;
3428 goto tr146; 3423 goto tr146;
3429 st64: 3424 st64:
3430 if ( ++( current_position) == ( end_of_bundle) ) 3425 if ( ++( current_position) == ( end_of_bundle) )
3431 goto _test_eof64; 3426 goto _test_eof64;
3432 case 64: 3427 case 64:
3433 switch( (*( current_position)) ) { 3428 switch( (*( current_position)) ) {
3434 case 4u: goto tr159; 3429 case 4u: goto tr159;
3430 case 5u: goto tr160;
3435 case 12u: goto tr159; 3431 case 12u: goto tr159;
3432 case 13u: goto tr160;
3436 case 20u: goto tr159; 3433 case 20u: goto tr159;
3434 case 21u: goto tr160;
3437 case 28u: goto tr159; 3435 case 28u: goto tr159;
3436 case 29u: goto tr160;
3438 case 36u: goto tr159; 3437 case 36u: goto tr159;
3438 case 37u: goto tr160;
3439 case 44u: goto tr159; 3439 case 44u: goto tr159;
3440 case 45u: goto tr160;
3440 case 52u: goto tr159; 3441 case 52u: goto tr159;
3442 case 53u: goto tr160;
3441 case 60u: goto tr159; 3443 case 60u: goto tr159;
3444 case 61u: goto tr160;
3442 case 68u: goto tr162; 3445 case 68u: goto tr162;
3443 case 76u: goto tr162; 3446 case 76u: goto tr162;
3444 case 84u: goto tr162; 3447 case 84u: goto tr162;
3445 case 92u: goto tr162; 3448 case 92u: goto tr162;
3446 case 100u: goto tr162; 3449 case 100u: goto tr162;
3447 case 108u: goto tr162; 3450 case 108u: goto tr162;
3448 case 116u: goto tr162; 3451 case 116u: goto tr162;
3449 case 124u: goto tr162; 3452 case 124u: goto tr162;
3450 case 132u: goto tr163; 3453 case 132u: goto tr163;
3451 case 140u: goto tr163; 3454 case 140u: goto tr163;
3452 case 148u: goto tr163; 3455 case 148u: goto tr163;
3453 case 156u: goto tr163; 3456 case 156u: goto tr163;
3454 case 164u: goto tr163; 3457 case 164u: goto tr163;
3455 case 172u: goto tr163; 3458 case 172u: goto tr163;
3456 case 180u: goto tr163; 3459 case 180u: goto tr163;
3457 case 188u: goto tr163; 3460 case 188u: goto tr163;
3458 } 3461 }
3459 » if ( (*( current_position)) < 38u ) { 3462 » if ( (*( current_position)) < 64u ) {
3460 » » if ( (*( current_position)) < 14u ) { 3463 » » if ( (*( current_position)) <= 63u )
3461 » » » if ( (*( current_position)) > 3u ) {
3462 » » » » if ( 6u <= (*( current_position)) && (*( current _position)) <= 11u )
3463 » » » » » goto tr146;
3464 » » » } else
3465 » » » » goto tr146;
3466 » » } else if ( (*( current_position)) > 19u ) {
3467 » » » if ( (*( current_position)) > 27u ) {
3468 » » » » if ( 30u <= (*( current_position)) && (*( curren t_position)) <= 35u )
3469 » » » » » goto tr146;
3470 » » » } else if ( (*( current_position)) >= 22u )
3471 » » » » goto tr146;
3472 » » } else
3473 goto tr146; 3464 goto tr146;
3474 » } else if ( (*( current_position)) > 43u ) { 3465 » } else if ( (*( current_position)) > 127u ) {
3475 » » if ( (*( current_position)) < 62u ) { 3466 » » if ( 128u <= (*( current_position)) && (*( current_position)) <= 191u )
3476 » » » if ( (*( current_position)) > 51u ) { 3467 » » » goto tr160;
3477 » » » » if ( 54u <= (*( current_position)) && (*( curren t_position)) <= 59u )
3478 » » » » » goto tr146;
3479 » » » } else if ( (*( current_position)) >= 46u )
3480 » » » » goto tr146;
3481 » » } else if ( (*( current_position)) > 63u ) {
3482 » » » if ( (*( current_position)) > 127u ) {
3483 » » » » if ( 192u <= (*( current_position)) )
3484 » » » » » goto tr16;
3485 » » » } else if ( (*( current_position)) >= 64u )
3486 » » » » goto tr161;
3487 » » } else
3488 » » » goto tr146;
3489 } else 3468 } else
3490 » » goto tr146; 3469 » » goto tr161;
3491 » goto tr160; 3470 » goto tr16;
3492 st65: 3471 st65:
3493 if ( ++( current_position) == ( end_of_bundle) ) 3472 if ( ++( current_position) == ( end_of_bundle) )
3494 goto _test_eof65; 3473 goto _test_eof65;
3495 case 65: 3474 case 65:
3496 if ( 192u <= (*( current_position)) ) 3475 if ( 192u <= (*( current_position)) )
3497 goto tr164; 3476 goto tr164;
3498 goto tr16; 3477 goto tr16;
3499 st66: 3478 st66:
3500 if ( ++( current_position) == ( end_of_bundle) ) 3479 if ( ++( current_position) == ( end_of_bundle) )
3501 goto _test_eof66; 3480 goto _test_eof66;
(...skipping 1007 matching lines...) Expand 10 before | Expand all | Expand 10 after
4509 if ( ++( current_position) == ( end_of_bundle) ) 4488 if ( ++( current_position) == ( end_of_bundle) )
4510 goto _test_eof115; 4489 goto _test_eof115;
4511 case 115: 4490 case 115:
4512 goto st109; 4491 goto st109;
4513 st116: 4492 st116:
4514 if ( ++( current_position) == ( end_of_bundle) ) 4493 if ( ++( current_position) == ( end_of_bundle) )
4515 goto _test_eof116; 4494 goto _test_eof116;
4516 case 116: 4495 case 116:
4517 switch( (*( current_position)) ) { 4496 switch( (*( current_position)) ) {
4518 case 4u: goto st2; 4497 case 4u: goto st2;
4498 case 5u: goto st3;
4519 case 12u: goto st2; 4499 case 12u: goto st2;
4500 case 13u: goto st3;
4520 case 20u: goto st2; 4501 case 20u: goto st2;
4502 case 21u: goto st3;
4521 case 28u: goto st2; 4503 case 28u: goto st2;
4504 case 29u: goto st3;
4522 case 36u: goto st2; 4505 case 36u: goto st2;
4506 case 37u: goto st3;
4523 case 44u: goto st2; 4507 case 44u: goto st2;
4508 case 45u: goto st3;
4524 case 52u: goto st2; 4509 case 52u: goto st2;
4510 case 53u: goto st3;
4525 case 60u: goto st2; 4511 case 60u: goto st2;
4512 case 61u: goto st3;
4526 case 68u: goto st8; 4513 case 68u: goto st8;
4527 case 76u: goto st8; 4514 case 76u: goto st8;
4528 case 84u: goto st8; 4515 case 84u: goto st8;
4529 case 92u: goto st8; 4516 case 92u: goto st8;
4530 case 100u: goto st8; 4517 case 100u: goto st8;
4531 case 108u: goto st8; 4518 case 108u: goto st8;
4532 case 116u: goto st8; 4519 case 116u: goto st8;
4533 case 124u: goto st8; 4520 case 124u: goto st8;
4534 case 132u: goto st9; 4521 case 132u: goto st9;
4535 case 140u: goto st9; 4522 case 140u: goto st9;
4536 case 148u: goto st9; 4523 case 148u: goto st9;
4537 case 156u: goto st9; 4524 case 156u: goto st9;
4538 case 164u: goto st9; 4525 case 164u: goto st9;
4539 case 172u: goto st9; 4526 case 172u: goto st9;
4540 case 180u: goto st9; 4527 case 180u: goto st9;
4541 case 188u: goto st9; 4528 case 188u: goto st9;
4542 } 4529 }
4543 » if ( (*( current_position)) < 38u ) { 4530 » if ( (*( current_position)) < 64u ) {
4544 » » if ( (*( current_position)) < 14u ) { 4531 » » if ( (*( current_position)) <= 63u )
4545 » » » if ( (*( current_position)) > 3u ) {
4546 » » » » if ( 6u <= (*( current_position)) && (*( current _position)) <= 11u )
4547 » » » » » goto tr0;
4548 » » » } else
4549 » » » » goto tr0;
4550 » » } else if ( (*( current_position)) > 19u ) {
4551 » » » if ( (*( current_position)) > 27u ) {
4552 » » » » if ( 30u <= (*( current_position)) && (*( curren t_position)) <= 35u )
4553 » » » » » goto tr0;
4554 » » » } else if ( (*( current_position)) >= 22u )
4555 » » » » goto tr0;
4556 » » } else
4557 goto tr0; 4532 goto tr0;
4558 » } else if ( (*( current_position)) > 43u ) { 4533 » } else if ( (*( current_position)) > 127u ) {
4559 » » if ( (*( current_position)) < 62u ) { 4534 » » if ( 128u <= (*( current_position)) && (*( current_position)) <= 191u )
4560 » » » if ( (*( current_position)) > 51u ) { 4535 » » » goto st3;
4561 » » » » if ( 54u <= (*( current_position)) && (*( curren t_position)) <= 59u )
4562 » » » » » goto tr0;
4563 » » » } else if ( (*( current_position)) >= 46u )
4564 » » » » goto tr0;
4565 » » } else if ( (*( current_position)) > 63u ) {
4566 » » » if ( (*( current_position)) > 127u ) {
4567 » » » » if ( 192u <= (*( current_position)) )
4568 » » » » » goto tr16;
4569 » » » } else if ( (*( current_position)) >= 64u )
4570 » » » » goto st7;
4571 » » } else
4572 » » » goto tr0;
4573 } else 4536 } else
4574 » » goto tr0; 4537 » » goto st7;
4575 » goto st3; 4538 » goto tr16;
4576 st117: 4539 st117:
4577 if ( ++( current_position) == ( end_of_bundle) ) 4540 if ( ++( current_position) == ( end_of_bundle) )
4578 goto _test_eof117; 4541 goto _test_eof117;
4579 case 117: 4542 case 117:
4580 switch( (*( current_position)) ) { 4543 switch( (*( current_position)) ) {
4581 case 4u: goto st39; 4544 case 4u: goto st39;
4582 case 5u: goto st40; 4545 case 5u: goto st40;
4583 case 12u: goto st39; 4546 case 12u: goto st39;
4584 case 13u: goto st40; 4547 case 13u: goto st40;
4585 case 20u: goto st39; 4548 case 20u: goto st39;
(...skipping 5078 matching lines...) Expand 10 before | Expand all | Expand 10 after
9664 */ 9627 */
9665 result &= ProcessInvalidJumpTargets(data, size, valid_targets, jump_dests, 9628 result &= ProcessInvalidJumpTargets(data, size, valid_targets, jump_dests,
9666 user_callback, callback_data); 9629 user_callback, callback_data);
9667 9630
9668 /* We only use malloc for a large code sequences */ 9631 /* We only use malloc for a large code sequences */
9669 if (jump_dests != &jump_dests_small) free(jump_dests); 9632 if (jump_dests != &jump_dests_small) free(jump_dests);
9670 if (valid_targets != &valid_targets_small) free(valid_targets); 9633 if (valid_targets != &valid_targets_small) free(valid_targets);
9671 if (!result) errno = EINVAL; 9634 if (!result) errno = EINVAL;
9672 return result; 9635 return result;
9673 } 9636 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698