1 /*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 /*
18 * Native implementation for the StaticNonce class. See the test code
19 * in JniStaticTest for more info.
20 */
21
22 #include <jni.h>
23
24 #include <stdbool.h>
25 #include <string.h>
26
27 #include "helper.h"
28
29 // public static native void nop();
StaticNonce_nop(JNIEnv * env,jclass clazz)30 static void StaticNonce_nop(JNIEnv *env, jclass clazz) {
31 // This space intentionally left blank.
32 }
33
34 // public static native void nopDlsym();
Java_android_jni_cts_StaticNonce_nopDlsym(JNIEnv * env,jclass clazz)35 JNIEXPORT void Java_android_jni_cts_StaticNonce_nopDlsym(JNIEnv *env,
36 jclass clazz) {
37 // This space intentionally left blank.
38 }
39
40 // @FastNative
41 // public static native void nopFast();
StaticNonce_nopFast(JNIEnv * env,jclass clazz)42 static void StaticNonce_nopFast(JNIEnv *env, jclass clazz) {
43 // This space intentionally left blank.
44 }
45
46 // @FastNative
47 // public static native void nopFastDlsym();
Java_android_jni_cts_StaticNonce_nopFastDlsym(JNIEnv * env,jclass clazz)48 JNIEXPORT void Java_android_jni_cts_StaticNonce_nopFastDlsym(JNIEnv *env,
49 jclass clazz) {
50 // This space intentionally left blank.
51 }
52
53 // @CriticalNative
54 // public static native void nopCritical();
StaticNonce_nopCritical()55 static void StaticNonce_nopCritical() {
56 // This space intentionally left blank.
57 }
58
59 // @CriticalNative
60 // public static native void nopCriticalDlsym();
Java_android_jni_cts_StaticNonce_nopCriticalDlsym()61 JNIEXPORT void Java_android_jni_cts_StaticNonce_nopCriticalDlsym() {
62 // This space intentionally left blank.
63 }
64
65 // public static native boolean returnBoolean();
StaticNonce_returnBoolean(JNIEnv * env,jclass clazz)66 static jboolean StaticNonce_returnBoolean(JNIEnv *env, jclass clazz) {
67 return (jboolean) true;
68 }
69
70 // @FastNative
71 // public static native boolean returnBooleanFast();
StaticNonce_returnBooleanFast(JNIEnv * env,jclass clazz)72 static jboolean StaticNonce_returnBooleanFast(JNIEnv *env, jclass clazz) {
73 return (jboolean) true;
74 }
75
76 // @CriticalNative
77 // public static native boolean returnBooleanCritical();
StaticNonce_returnBooleanCritical()78 static jboolean StaticNonce_returnBooleanCritical() {
79 return (jboolean) true;
80 }
81
82 // public static native byte returnByte();
StaticNonce_returnByte(JNIEnv * env,jclass clazz)83 static jbyte StaticNonce_returnByte(JNIEnv *env, jclass clazz) {
84 return (jbyte) 123;
85 }
86
87 // @FastNative
88 // public static native byte returnByteFast();
StaticNonce_returnByteFast(JNIEnv * env,jclass clazz)89 static jbyte StaticNonce_returnByteFast(JNIEnv *env, jclass clazz) {
90 return (jbyte) 123;
91 }
92
93 // @CriticalNative
94 // public static native byte returnByteCritical();
StaticNonce_returnByteCritical()95 static jbyte StaticNonce_returnByteCritical() {
96 return (jbyte) 123;
97 }
98
99 // public static native short returnShort();
StaticNonce_returnShort(JNIEnv * env,jclass clazz)100 static jshort StaticNonce_returnShort(JNIEnv *env, jclass clazz) {
101 return (jshort) -12345;
102 }
103
104 // @FastNative
105 // public static native short returnShortFast();
StaticNonce_returnShortFast(JNIEnv * env,jclass clazz)106 static jshort StaticNonce_returnShortFast(JNIEnv *env, jclass clazz) {
107 return (jshort) -12345;
108 }
109
110 // @CriticalNative
111 // public static native short returnShortCritical();
StaticNonce_returnShortCritical()112 static jshort StaticNonce_returnShortCritical() {
113 return (jshort) -12345;
114 }
115
116 // public static native char returnChar();
StaticNonce_returnChar(JNIEnv * env,jclass clazz)117 static jchar StaticNonce_returnChar(JNIEnv *env, jclass clazz) {
118 return (jchar) 34567;
119 }
120
121 // @FastNative
122 // public static native char returnCharFast();
StaticNonce_returnCharFast(JNIEnv * env,jclass clazz)123 static jchar StaticNonce_returnCharFast(JNIEnv *env, jclass clazz) {
124 return (jchar) 34567;
125 }
126
127 // @CriticalNative
128 // public static native char returnCharCritical();
StaticNonce_returnCharCritical()129 static jchar StaticNonce_returnCharCritical() {
130 return (jchar) 34567;
131 }
132
133 // public static native int returnInt();
StaticNonce_returnInt(JNIEnv * env,jclass clazz)134 static jint StaticNonce_returnInt(JNIEnv *env, jclass clazz) {
135 return 12345678;
136 }
137
138 // @FastNative
139 // public static native int returnIntFast();
StaticNonce_returnIntFast(JNIEnv * env,jclass clazz)140 static jint StaticNonce_returnIntFast(JNIEnv *env, jclass clazz) {
141 return 12345678;
142 }
143
144 // @CriticalNative
145 // public static native int returnIntCritical();
StaticNonce_returnIntCritical()146 static jint StaticNonce_returnIntCritical() {
147 return 12345678;
148 }
149
150 // public static native long returnLong();
StaticNonce_returnLong(JNIEnv * env,jclass clazz)151 static jlong StaticNonce_returnLong(JNIEnv *env, jclass clazz) {
152 return (jlong) -1098765432109876543LL;
153 }
154
155 // @FastNative
156 // public static native long returnLongFast();
StaticNonce_returnLongFast(JNIEnv * env,jclass clazz)157 static jlong StaticNonce_returnLongFast(JNIEnv *env, jclass clazz) {
158 return (jlong) -1098765432109876543LL;
159 }
160
161 // @CriticalNative
162 // public static native long returnLongCritical();
StaticNonce_returnLongCritical()163 static jlong StaticNonce_returnLongCritical() {
164 return (jlong) -1098765432109876543LL;
165 }
166
167 // public static native float returnFloat();
StaticNonce_returnFloat(JNIEnv * env,jclass clazz)168 static jfloat StaticNonce_returnFloat(JNIEnv *env, jclass clazz) {
169 return (jfloat) -98765.4321F;
170 }
171
172 // @FastNative
173 // public static native float returnFloatFast();
StaticNonce_returnFloatFast(JNIEnv * env,jclass clazz)174 static jfloat StaticNonce_returnFloatFast(JNIEnv *env, jclass clazz) {
175 return (jfloat) -98765.4321F;
176 }
177
178 // @CriticalNative
179 // public static native float returnFloatCritical();
StaticNonce_returnFloatCritical()180 static jfloat StaticNonce_returnFloatCritical() {
181 return (jfloat) -98765.4321F;
182 }
183
184 // public static native double returnDouble();
StaticNonce_returnDouble(JNIEnv * env,jclass clazz)185 static jdouble StaticNonce_returnDouble(JNIEnv *env, jclass clazz) {
186 return 12345678.9;
187 }
188
189 // @FastNative
190 // public static native double returnDoubleFast();
StaticNonce_returnDoubleFast(JNIEnv * env,jclass clazz)191 static jdouble StaticNonce_returnDoubleFast(JNIEnv *env, jclass clazz) {
192 return 12345678.9;
193 }
194
195 // @CriticalNative
196 // public static native double returnDoubleCritical();
StaticNonce_returnDoubleCritical()197 static jdouble StaticNonce_returnDoubleCritical() {
198 return 12345678.9;
199 }
200
201 // public static native Object returnNull();
StaticNonce_returnNull(JNIEnv * env,jclass clazz)202 static jobject StaticNonce_returnNull(JNIEnv *env, jclass clazz) {
203 return NULL;
204 }
205
206 // @FastNative
207 // public static native Object returnNullFast();
StaticNonce_returnNullFast(JNIEnv * env,jclass clazz)208 static jobject StaticNonce_returnNullFast(JNIEnv *env, jclass clazz) {
209 return NULL;
210 }
211
212 // public static native String returnString();
StaticNonce_returnString(JNIEnv * env,jclass clazz)213 static jstring StaticNonce_returnString(JNIEnv *env, jclass clazz) {
214 return (*env)->NewStringUTF(env, "blort");
215 }
216
217 // @FastNative
218 // public static native String returnStringFast();
StaticNonce_returnStringFast(JNIEnv * env,jclass clazz)219 static jstring StaticNonce_returnStringFast(JNIEnv *env, jclass clazz) {
220 return (*env)->NewStringUTF(env, "blort");
221 }
222
223 // public static native short[] returnShortArray();
StaticNonce_returnShortArray(JNIEnv * env,jclass clazz)224 static jshortArray StaticNonce_returnShortArray(JNIEnv *env, jclass clazz) {
225 static jshort contents[] = { 10, 20, 30 };
226
227 jshortArray result = (*env)->NewShortArray(env, 3);
228
229 if (result == NULL) {
230 return NULL;
231 }
232
233 (*env)->SetShortArrayRegion(env, result, 0, 3, contents);
234 return result;
235 }
236
237 // @FastNative
238 // public static native short[] returnShortArrayFast();
StaticNonce_returnShortArrayFast(JNIEnv * env,jclass clazz)239 static jshortArray StaticNonce_returnShortArrayFast(JNIEnv *env,
240 jclass clazz) {
241 return StaticNonce_returnShortArray(env, clazz);
242 }
243
244 // public static native String[] returnStringArray();
StaticNonce_returnStringArray(JNIEnv * env,jclass clazz)245 static jobjectArray StaticNonce_returnStringArray(JNIEnv *env, jclass clazz) {
246 static int indices[] = { 0, 50, 99 };
247 static const char *contents[] = { "blort", "zorch", "fizmo" };
248
249 jclass stringClass = (*env)->FindClass(env, "java/lang/String");
250
251 if ((*env)->ExceptionOccurred(env) != NULL) {
252 return NULL;
253 }
254
255 if (stringClass == NULL) {
256 throwException(env, "java/lang/AssertionError",
257 "class String not found");
258 return NULL;
259 }
260
261 jobjectArray result = (*env)->NewObjectArray(env, 100, stringClass, NULL);
262
263 if (result == NULL) {
264 return NULL;
265 }
266
267 jsize i;
268 for (i = 0; i < 3; i++) {
269 jstring s = (*env)->NewStringUTF(env, contents[i]);
270
271 if (s == NULL) {
272 return NULL;
273 }
274
275 (*env)->SetObjectArrayElement(env, result, indices[i], s);
276
277 if ((*env)->ExceptionOccurred(env) != NULL) {
278 return NULL;
279 }
280 }
281
282 return result;
283 }
284
285 // @FastNative
286 // public static native String[] returnStringArrayFast();
StaticNonce_returnStringArrayFast(JNIEnv * env,jclass clazz)287 static jobjectArray StaticNonce_returnStringArrayFast(JNIEnv *env,
288 jclass clazz) {
289 return StaticNonce_returnStringArray(env, clazz);
290 }
291
292 // public static native Class returnThisClass();
StaticNonce_returnThisClass(JNIEnv * env,jclass clazz)293 static jclass StaticNonce_returnThisClass(JNIEnv *env, jclass clazz) {
294 return clazz;
295 }
296
297 // @FastNative
298 // public static native Class returnThisClassFast();
StaticNonce_returnThisClassFast(JNIEnv * env,jclass clazz)299 static jclass StaticNonce_returnThisClassFast(JNIEnv *env, jclass clazz) {
300 return clazz;
301 }
302
303 // public static native StaticNonce returnInstance();
StaticNonce_returnInstance(JNIEnv * env,jclass clazz)304 static jobject StaticNonce_returnInstance(JNIEnv *env, jclass clazz) {
305 jmethodID id = (*env)->GetMethodID(env, clazz, "<init>", "()V");
306
307 if ((*env)->ExceptionOccurred(env) != NULL) {
308 return NULL;
309 }
310
311 if (id == NULL) {
312 throwException(env, "java/lang/AssertionError",
313 "constructor not found");
314 return NULL;
315 }
316
317 return (*env)->NewObjectA(env, clazz, id, NULL);
318 }
319
320 // @FastNative
321 // public static native StaticNonce returnInstanceFast();
StaticNonce_returnInstanceFast(JNIEnv * env,jclass clazz)322 static jobject StaticNonce_returnInstanceFast(JNIEnv *env, jclass clazz) {
323 return StaticNonce_returnInstance(env, clazz);
324 }
325
326 // public static native boolean takeBoolean(boolean v);
StaticNonce_takeBoolean(JNIEnv * env,jclass clazz,jboolean v)327 static jboolean StaticNonce_takeBoolean(JNIEnv *env, jclass clazz,
328 jboolean v) {
329 return v == true;
330 }
331
332 // @FastNative
333 // public static native boolean takeBooleanFast(boolean v);
StaticNonce_takeBooleanFast(JNIEnv * env,jclass clazz,jboolean v)334 static jboolean StaticNonce_takeBooleanFast(JNIEnv *env, jclass clazz,
335 jboolean v) {
336 return v == true;
337 }
338
339 // @CriticalNative
340 // public static native boolean takeBooleanCritical(boolean v);
StaticNonce_takeBooleanCritical(jboolean v)341 static jboolean StaticNonce_takeBooleanCritical(jboolean v) {
342 return v == true;
343 }
344
345 // public static native boolean takeByte(byte v);
StaticNonce_takeByte(JNIEnv * env,jclass clazz,jbyte v)346 static jboolean StaticNonce_takeByte(JNIEnv *env, jclass clazz, jbyte v) {
347 return v == -99;
348 }
349
350 // @FastNative
351 // public static native boolean takeByteFast(byte v);
StaticNonce_takeByteFast(JNIEnv * env,jclass clazz,jbyte v)352 static jboolean StaticNonce_takeByteFast(JNIEnv *env, jclass clazz, jbyte v) {
353 return v == -99;
354 }
355
356 // @CriticalNative
357 // public static native boolean takeByteCritical(byte v);
StaticNonce_takeByteCritical(jbyte v)358 static jboolean StaticNonce_takeByteCritical(jbyte v) {
359 return v == -99;
360 }
361
362 // public static native boolean takeShort(short v);
StaticNonce_takeShort(JNIEnv * env,jclass clazz,jshort v)363 static jboolean StaticNonce_takeShort(JNIEnv *env, jclass clazz, jshort v) {
364 return v == 19991;
365 }
366
367 // @FastNative
368 // public static native boolean takeShortFast(short v);
StaticNonce_takeShortFast(JNIEnv * env,jclass clazz,jshort v)369 static jboolean StaticNonce_takeShortFast(JNIEnv *env, jclass clazz,
370 jshort v) {
371 return v == 19991;
372 }
373
374 // @CriticalNative
375 // public static native boolean takeShortCritical(short v);
StaticNonce_takeShortCritical(jshort v)376 static jboolean StaticNonce_takeShortCritical(jshort v) {
377 return v == 19991;
378 }
379
380 // public static native boolean takeChar(char v);
StaticNonce_takeChar(JNIEnv * env,jclass clazz,jchar v)381 static jboolean StaticNonce_takeChar(JNIEnv *env, jclass clazz, jchar v) {
382 return v == 999;
383 }
384
385 // @FastNative
386 // public static native boolean takeCharFast(char v);
StaticNonce_takeCharFast(JNIEnv * env,jclass clazz,jchar v)387 static jboolean StaticNonce_takeCharFast(JNIEnv *env, jclass clazz, jchar v) {
388 return v == 999;
389 }
390
391 // @CriticalNative
392 // public static native boolean takeCharCritical(char v);
StaticNonce_takeCharCritical(jchar v)393 static jboolean StaticNonce_takeCharCritical(jchar v) {
394 return v == 999;
395 }
396
397 // public static native boolean takeInt(int v);
StaticNonce_takeInt(JNIEnv * env,jclass clazz,jint v)398 static jboolean StaticNonce_takeInt(JNIEnv *env, jclass clazz, jint v) {
399 return v == -999888777;
400 }
401
402 // @FastNative
403 // public static native boolean takeIntFast(int v);
StaticNonce_takeIntFast(JNIEnv * env,jclass clazz,jint v)404 static jboolean StaticNonce_takeIntFast(JNIEnv *env, jclass clazz, jint v) {
405 return v == -999888777;
406 }
407
408 // @CriticalNative
409 // public static native boolean takeIntCritical(int v);
StaticNonce_takeIntCritical(jint v)410 static jboolean StaticNonce_takeIntCritical(jint v) {
411 return v == -999888777;
412 }
413
414 // public static native boolean takeLong(long v);
StaticNonce_takeLong(JNIEnv * env,jclass clazz,jlong v)415 static jboolean StaticNonce_takeLong(JNIEnv *env, jclass clazz, jlong v) {
416 return v == 999888777666555444LL;
417 }
418
419 // @FastNative
420 // public static native boolean takeLongFast(long v);
StaticNonce_takeLongFast(JNIEnv * env,jclass clazz,jlong v)421 static jboolean StaticNonce_takeLongFast(JNIEnv *env, jclass clazz, jlong v) {
422 return v == 999888777666555444LL;
423 }
424
425 // @CriticalNative
426 // public static native boolean takeLongCritical(long v);
StaticNonce_takeLongCritical(jlong v)427 static jboolean StaticNonce_takeLongCritical(jlong v) {
428 return v == 999888777666555444LL;
429 }
430
431 // public static native boolean takeFloat(float v);
StaticNonce_takeFloat(JNIEnv * env,jclass clazz,jfloat v)432 static jboolean StaticNonce_takeFloat(JNIEnv *env, jclass clazz, jfloat v) {
433 return v == -9988.7766F;
434 }
435
436 // @FastNative
437 // public static native boolean takeFloatFast(float v);
StaticNonce_takeFloatFast(JNIEnv * env,jclass clazz,jfloat v)438 static jboolean StaticNonce_takeFloatFast(JNIEnv *env, jclass clazz,
439 jfloat v) {
440 return v == -9988.7766F;
441 }
442
443 // @CriticalNative
444 // public static native boolean takeFloatCritical(float v);
StaticNonce_takeFloatCritical(jfloat v)445 static jboolean StaticNonce_takeFloatCritical(jfloat v) {
446 return v == -9988.7766F;
447 }
448
449 // public static native boolean takeDouble(double v);
StaticNonce_takeDouble(JNIEnv * env,jclass clazz,jdouble v)450 static jboolean StaticNonce_takeDouble(JNIEnv *env, jclass clazz, jdouble v) {
451 return v == 999888777.666555;
452 }
453
454 // @FastNative
455 // public static native boolean takeDoubleFast(double v);
StaticNonce_takeDoubleFast(JNIEnv * env,jclass clazz,jdouble v)456 static jboolean StaticNonce_takeDoubleFast(JNIEnv *env, jclass clazz,
457 jdouble v) {
458 return v == 999888777.666555;
459 }
460
461 // @CriticalNative
462 // public static native boolean takeDoubleCritical(double v);
StaticNonce_takeDoubleCritical(jdouble v)463 static jboolean StaticNonce_takeDoubleCritical(jdouble v) {
464 return v == 999888777.666555;
465 }
466
467 // public static native boolean takeNull(Object v);
StaticNonce_takeNull(JNIEnv * env,jclass clazz,jobject v)468 static jboolean StaticNonce_takeNull(JNIEnv *env, jclass clazz, jobject v) {
469 return v == NULL;
470 }
471
472 // @FastNative
473 // public static native boolean takeNullFast(Object v);
StaticNonce_takeNullFast(JNIEnv * env,jclass clazz,jobject v)474 static jboolean StaticNonce_takeNullFast(JNIEnv *env, jclass clazz,
475 jobject v) {
476 return v == NULL;
477 }
478
479 // public static native boolean takeString(String v);
StaticNonce_takeString(JNIEnv * env,jclass clazz,jstring v)480 static jboolean StaticNonce_takeString(JNIEnv *env, jclass clazz, jstring v) {
481 if (v == NULL) {
482 return false;
483 }
484
485 const char *utf = (*env)->GetStringUTFChars(env, v, NULL);
486 jboolean result = (strcmp("fuzzbot", utf) == 0);
487
488 (*env)->ReleaseStringUTFChars(env, v, utf);
489 return result;
490 }
491
492 // @FastNative
493 // public static native boolean takeStringFast(String v);
StaticNonce_takeStringFast(JNIEnv * env,jclass clazz,jstring v)494 static jboolean StaticNonce_takeStringFast(JNIEnv *env, jclass clazz,
495 jstring v) {
496 return StaticNonce_takeString(env, clazz, v);
497 }
498
499 // public static native boolean takeThisClass(Class v);
StaticNonce_takeThisClass(JNIEnv * env,jclass clazz,jclass v)500 static jboolean StaticNonce_takeThisClass(JNIEnv *env, jclass clazz,
501 jclass v) {
502 return (*env)->IsSameObject(env, clazz, v);
503 }
504
505 // @FastNative
506 // public static native boolean takeThisClassFast(Class v);
StaticNonce_takeThisClassFast(JNIEnv * env,jclass clazz,jclass v)507 static jboolean StaticNonce_takeThisClassFast(JNIEnv *env, jclass clazz,
508 jclass v) {
509 return (*env)->IsSameObject(env, clazz, v);
510 }
511
512 // public static native boolean takeIntLong(int v1, long v2);
StaticNonce_takeIntLong(JNIEnv * env,jclass clazz,jint v1,jlong v2)513 static jboolean StaticNonce_takeIntLong(JNIEnv *env, jclass clazz,
514 jint v1, jlong v2) {
515 return (v1 == 914) && (v2 == 9140914091409140914LL);
516 }
517
518 // @FastNative
519 // public static native boolean takeIntLongFast(int v1, long v2);
StaticNonce_takeIntLongFast(JNIEnv * env,jclass clazz,jint v1,jlong v2)520 static jboolean StaticNonce_takeIntLongFast(JNIEnv *env, jclass clazz,
521 jint v1, jlong v2) {
522 return (v1 == 914) && (v2 == 9140914091409140914LL);
523 }
524
525 // @CriticalNative
526 // public static native boolean takeIntLongCritical(int v1, long v2);
StaticNonce_takeIntLongCritical(jint v1,jlong v2)527 static jboolean StaticNonce_takeIntLongCritical(jint v1, jlong v2) {
528 return (v1 == 914) && (v2 == 9140914091409140914LL);
529 }
530
531 // public static native boolean takeLongInt(long v1, int v2);
StaticNonce_takeLongInt(JNIEnv * env,jclass clazz,jlong v1,jint v2)532 static jboolean StaticNonce_takeLongInt(JNIEnv *env, jclass clazz,
533 jlong v1, jint v2) {
534 return (v1 == -4321LL) && (v2 == 12341234);
535 }
536
537 // @FastNative
538 // public static native boolean takeLongIntFast(long v1, int v2);
StaticNonce_takeLongIntFast(JNIEnv * env,jclass clazz,jlong v1,jint v2)539 static jboolean StaticNonce_takeLongIntFast(JNIEnv *env, jclass clazz,
540 jlong v1, jint v2) {
541 return (v1 == -4321LL) && (v2 == 12341234);
542 }
543
544 // @CriticalNative
545 // public static native boolean takeLongIntCritical(long v1, int v2);
StaticNonce_takeLongIntCritical(jlong v1,jint v2)546 static jboolean StaticNonce_takeLongIntCritical(jlong v1, jint v2) {
547 return (v1 == -4321LL) && (v2 == 12341234);
548 }
549
550 // public static native boolean takeOneOfEach(boolean v0, byte v1, short v2,
551 // char v3, int v4, long v5, String v6, float v7, double v8,
552 // int[] v9);
StaticNonce_takeOneOfEach(JNIEnv * env,jclass clazz,jboolean v0,jbyte v1,jshort v2,jchar v3,jint v4,jlong v5,jstring v6,jfloat v7,jdouble v8,jintArray v9)553 static jboolean StaticNonce_takeOneOfEach(JNIEnv *env, jclass clazz,
554 jboolean v0, jbyte v1, jshort v2, jchar v3, jint v4, jlong v5,
555 jstring v6, jfloat v7, jdouble v8, jintArray v9) {
556 jsize length;
557 jboolean result;
558
559 if ((v0 != false) || (v1 != 1) || (v2 != 2) || (v3 != 3) ||
560 (v4 != 4) || (v5 != 5) || (v7 != 7.0f) || (v8 != 8.0)) {
561 return false;
562 }
563
564 length = (*env)->GetStringUTFLength(env, v6);
565
566 if (length != 3) {
567 throwException(env, "java/lang/AssertionError",
568 "bad string length");
569 return false;
570 }
571
572 const char *utf = (*env)->GetStringUTFChars(env, v6, NULL);
573 result = (strncmp("six", utf, 3) == 0);
574
575 (*env)->ReleaseStringUTFChars(env, v6, utf);
576
577 if (! result) {
578 return false;
579 }
580
581 length = (*env)->GetArrayLength(env, v9);
582 if (length != 2) {
583 throwException(env, "java/lang/AssertionError",
584 "bad array length");
585 return false;
586 }
587
588 jint *elements = (*env)->GetIntArrayElements(env, v9, NULL);
589 result = (elements[0] == 9) && (elements[1] == 10);
590 (*env)->ReleaseIntArrayElements(env, v9, elements, JNI_ABORT);
591
592 return result;
593 }
594
595 // public static native boolean takeOneOfEachDlsym(boolean v0, byte v1,
596 // short v2, char v3, int v4, long v5, String v6, float v7, double v8,
597 // int[] v9);
Java_android_jni_cts_StaticNonce_takeOneOfEachDlsym(JNIEnv * env,jclass clazz,jboolean v0,jbyte v1,jshort v2,jchar v3,jint v4,jlong v5,jstring v6,jfloat v7,jdouble v8,jintArray v9)598 JNIEXPORT jboolean Java_android_jni_cts_StaticNonce_takeOneOfEachDlsym(
599 JNIEnv *env, jclass clazz, jboolean v0, jbyte v1, jshort v2, jchar v3,
600 jint v4, jlong v5, jstring v6, jfloat v7, jdouble v8, jintArray v9) {
601 return StaticNonce_takeOneOfEach(
602 env, clazz, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
603 }
604
605 // @FastNative
606 // public static native boolean takeOneOfEachFast(boolean v0, byte v1,
607 // short v2, char v3, int v4, long v5, String v6, float v7, double v8,
608 // int[] v9);
StaticNonce_takeOneOfEachFast(JNIEnv * env,jclass clazz,jboolean v0,jbyte v1,jshort v2,jchar v3,jint v4,jlong v5,jstring v6,jfloat v7,jdouble v8,jintArray v9)609 static jboolean StaticNonce_takeOneOfEachFast(JNIEnv *env, jclass clazz,
610 jboolean v0, jbyte v1, jshort v2, jchar v3, jint v4, jlong v5,
611 jstring v6, jfloat v7, jdouble v8, jintArray v9) {
612 return StaticNonce_takeOneOfEach(
613 env, clazz, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
614 }
615
616 // @FastNative
617 // public static native boolean takeOneOfEachFastDlsym(boolean v0, byte v1,
618 // short v2, char v3, int v4, long v5, String v6, float v7, double v8,
619 // int[] v9);
Java_android_jni_cts_StaticNonce_takeOneOfEachFastDlsym(JNIEnv * env,jclass clazz,jboolean v0,jbyte v1,jshort v2,jchar v3,jint v4,jlong v5,jstring v6,jfloat v7,jdouble v8,jintArray v9)620 JNIEXPORT jboolean Java_android_jni_cts_StaticNonce_takeOneOfEachFastDlsym(
621 JNIEnv *env, jclass clazz, jboolean v0, jbyte v1, jshort v2, jchar v3,
622 jint v4, jlong v5, jstring v6, jfloat v7, jdouble v8, jintArray v9) {
623 return StaticNonce_takeOneOfEach(
624 env, clazz, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
625 }
626
627 // @CriticalNative
628 // public static native boolean takeOneOfEachCritical(boolean v0, byte v1,
629 // short v2, char v3, int v4, long v5, float v6, double v7);
StaticNonce_takeOneOfEachCritical(jboolean v0,jbyte v1,jshort v2,jchar v3,jint v4,jlong v5,jfloat v6,jdouble v7)630 static jboolean StaticNonce_takeOneOfEachCritical(
631 jboolean v0, jbyte v1, jshort v2, jchar v3, jint v4, jlong v5,
632 jfloat v6, jdouble v7) {
633 return (v0 == false) && (v1 == 1) && (v2 == 2) && (v3 == 3) &&
634 (v4 == 4) && (v5 == 5) && (v6 == 6.0f) && (v7 == 7.0);
635 }
636
637 // @CriticalNative
638 // public static native boolean takeOneOfEachCriticalDlsym(boolean v0, byte v1,
639 // short v2, char v3, int v4, long v5, float v6, double v7);
Java_android_jni_cts_StaticNonce_takeOneOfEachCriticalDlsym(jboolean v0,jbyte v1,jshort v2,jchar v3,jint v4,jlong v5,jfloat v6,jdouble v7)640 JNIEXPORT jboolean Java_android_jni_cts_StaticNonce_takeOneOfEachCriticalDlsym(
641 jboolean v0, jbyte v1, jshort v2, jchar v3, jint v4, jlong v5,
642 jfloat v6, jdouble v7) {
643 return StaticNonce_takeOneOfEachCritical(v0, v1, v2, v3, v4, v5, v6, v7);
644 }
645
646 // public static native boolean takeCoolHandLuke(
647 // int v1, int v2, int v3, int v4,
648 // int v5, int v6, int v7, int v8, int v9,
649 // int v10, int v11, int v12, int v13, int v14,
650 // int v15, int v16, int v17, int v18, int v19,
651 // int v20, int v21, int v22, int v23, int v24,
652 // int v25, int v26, int v27, int v28, int v29,
653 // int v30, int v31, int v32, int v33, int v34,
654 // int v35, int v36, int v37, int v38, int v39,
655 // int v40, int v41, int v42, int v43, int v44,
656 // int v45, int v46, int v47, int v48, int v49,
657 // int v50);
StaticNonce_takeCoolHandLuke(JNIEnv * env,jclass clazz,jint v1,jint v2,jint v3,jint v4,jint v5,jint v6,jint v7,jint v8,jint v9,jint v10,jint v11,jint v12,jint v13,jint v14,jint v15,jint v16,jint v17,jint v18,jint v19,jint v20,jint v21,jint v22,jint v23,jint v24,jint v25,jint v26,jint v27,jint v28,jint v29,jint v30,jint v31,jint v32,jint v33,jint v34,jint v35,jint v36,jint v37,jint v38,jint v39,jint v40,jint v41,jint v42,jint v43,jint v44,jint v45,jint v46,jint v47,jint v48,jint v49,jint v50)658 static jboolean StaticNonce_takeCoolHandLuke(JNIEnv *env, jclass clazz,
659 jint v1, jint v2, jint v3, jint v4,
660 jint v5, jint v6, jint v7, jint v8, jint v9,
661 jint v10, jint v11, jint v12, jint v13, jint v14,
662 jint v15, jint v16, jint v17, jint v18, jint v19,
663 jint v20, jint v21, jint v22, jint v23, jint v24,
664 jint v25, jint v26, jint v27, jint v28, jint v29,
665 jint v30, jint v31, jint v32, jint v33, jint v34,
666 jint v35, jint v36, jint v37, jint v38, jint v39,
667 jint v40, jint v41, jint v42, jint v43, jint v44,
668 jint v45, jint v46, jint v47, jint v48, jint v49,
669 jint v50) {
670 return (v1 == 1) && (v2 == 2) && (v3 == 3) &&
671 (v4 == 4) && (v5 == 5) && (v6 == 6) && (v7 == 7) &&
672 (v8 == 8) && (v9 == 9) &&
673 (v10 == 10) && (v11 == 11) && (v12 == 12) && (v13 == 13) &&
674 (v14 == 14) && (v15 == 15) && (v16 == 16) && (v17 == 17) &&
675 (v18 == 18) && (v19 == 19) &&
676 (v20 == 20) && (v21 == 21) && (v22 == 22) && (v23 == 23) &&
677 (v24 == 24) && (v25 == 25) && (v26 == 26) && (v27 == 27) &&
678 (v28 == 28) && (v29 == 29) &&
679 (v30 == 30) && (v31 == 31) && (v32 == 32) && (v33 == 33) &&
680 (v34 == 34) && (v35 == 35) && (v36 == 36) && (v37 == 37) &&
681 (v38 == 38) && (v39 == 39) &&
682 (v40 == 40) && (v41 == 41) && (v42 == 42) && (v43 == 43) &&
683 (v44 == 44) && (v45 == 45) && (v46 == 46) && (v47 == 47) &&
684 (v48 == 48) && (v49 == 49) &&
685 (v50 == 50);
686 }
687
688 // @FastNative
689 // public static native boolean takeCoolHandLukeFast(
690 // int v1, int v2, int v3, int v4,
691 // int v5, int v6, int v7, int v8, int v9,
692 // int v10, int v11, int v12, int v13, int v14,
693 // int v15, int v16, int v17, int v18, int v19,
694 // int v20, int v21, int v22, int v23, int v24,
695 // int v25, int v26, int v27, int v28, int v29,
696 // int v30, int v31, int v32, int v33, int v34,
697 // int v35, int v36, int v37, int v38, int v39,
698 // int v40, int v41, int v42, int v43, int v44,
699 // int v45, int v46, int v47, int v48, int v49,
700 // int v50);
StaticNonce_takeCoolHandLukeFast(JNIEnv * env,jclass clazz,jint v1,jint v2,jint v3,jint v4,jint v5,jint v6,jint v7,jint v8,jint v9,jint v10,jint v11,jint v12,jint v13,jint v14,jint v15,jint v16,jint v17,jint v18,jint v19,jint v20,jint v21,jint v22,jint v23,jint v24,jint v25,jint v26,jint v27,jint v28,jint v29,jint v30,jint v31,jint v32,jint v33,jint v34,jint v35,jint v36,jint v37,jint v38,jint v39,jint v40,jint v41,jint v42,jint v43,jint v44,jint v45,jint v46,jint v47,jint v48,jint v49,jint v50)701 static jboolean StaticNonce_takeCoolHandLukeFast(JNIEnv *env, jclass clazz,
702 jint v1, jint v2, jint v3, jint v4,
703 jint v5, jint v6, jint v7, jint v8, jint v9,
704 jint v10, jint v11, jint v12, jint v13, jint v14,
705 jint v15, jint v16, jint v17, jint v18, jint v19,
706 jint v20, jint v21, jint v22, jint v23, jint v24,
707 jint v25, jint v26, jint v27, jint v28, jint v29,
708 jint v30, jint v31, jint v32, jint v33, jint v34,
709 jint v35, jint v36, jint v37, jint v38, jint v39,
710 jint v40, jint v41, jint v42, jint v43, jint v44,
711 jint v45, jint v46, jint v47, jint v48, jint v49,
712 jint v50) {
713 return StaticNonce_takeCoolHandLuke(
714 env, clazz, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
715 v11, v12, v13, v14, v15, v16, v17, v18, v19, v20,
716 v21, v22, v23, v24, v25, v26, v27, v28, v29, v30,
717 v31, v32, v33, v34, v35, v36, v37, v38, v39, v40,
718 v41, v42, v43, v44, v45, v46, v47, v48, v49, v50);
719 }
720
721 // @CriticalNative
722 // public static native boolean takeCoolHandLukeCritical(
723 // int v1, int v2, int v3, int v4,
724 // int v5, int v6, int v7, int v8, int v9,
725 // int v10, int v11, int v12, int v13, int v14,
726 // int v15, int v16, int v17, int v18, int v19,
727 // int v20, int v21, int v22, int v23, int v24,
728 // int v25, int v26, int v27, int v28, int v29,
729 // int v30, int v31, int v32, int v33, int v34,
730 // int v35, int v36, int v37, int v38, int v39,
731 // int v40, int v41, int v42, int v43, int v44,
732 // int v45, int v46, int v47, int v48, int v49,
733 // int v50);
StaticNonce_takeCoolHandLukeCritical(jint v1,jint v2,jint v3,jint v4,jint v5,jint v6,jint v7,jint v8,jint v9,jint v10,jint v11,jint v12,jint v13,jint v14,jint v15,jint v16,jint v17,jint v18,jint v19,jint v20,jint v21,jint v22,jint v23,jint v24,jint v25,jint v26,jint v27,jint v28,jint v29,jint v30,jint v31,jint v32,jint v33,jint v34,jint v35,jint v36,jint v37,jint v38,jint v39,jint v40,jint v41,jint v42,jint v43,jint v44,jint v45,jint v46,jint v47,jint v48,jint v49,jint v50)734 static jboolean StaticNonce_takeCoolHandLukeCritical(
735 jint v1, jint v2, jint v3, jint v4,
736 jint v5, jint v6, jint v7, jint v8, jint v9,
737 jint v10, jint v11, jint v12, jint v13, jint v14,
738 jint v15, jint v16, jint v17, jint v18, jint v19,
739 jint v20, jint v21, jint v22, jint v23, jint v24,
740 jint v25, jint v26, jint v27, jint v28, jint v29,
741 jint v30, jint v31, jint v32, jint v33, jint v34,
742 jint v35, jint v36, jint v37, jint v38, jint v39,
743 jint v40, jint v41, jint v42, jint v43, jint v44,
744 jint v45, jint v46, jint v47, jint v48, jint v49,
745 jint v50) {
746 return StaticNonce_takeCoolHandLuke(
747 NULL, NULL, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
748 v11, v12, v13, v14, v15, v16, v17, v18, v19, v20,
749 v21, v22, v23, v24, v25, v26, v27, v28, v29, v30,
750 v31, v32, v33, v34, v35, v36, v37, v38, v39, v40,
751 v41, v42, v43, v44, v45, v46, v47, v48, v49, v50);
752 }
753
754 // @CriticalNative
755 // public static native boolean takeCoolHandLukeWithFloatsCritical(
756 // int v1, int v2, int v3, int v4, int v5,
757 // double v6, double v7, double v8, double v9, double v10,
758 // double v11, double v12, double v13, double v14);
StaticNonce_takeCoolHandLukeWithFloatsCritical(jint v1,jint v2,jint v3,jint v4,jint v5,jdouble v6,jdouble v7,jdouble v8,jdouble v9,jdouble v10,jdouble v11,jdouble v12,jdouble v13,jdouble v14)759 static jboolean StaticNonce_takeCoolHandLukeWithFloatsCritical(
760 jint v1, jint v2, jint v3, jint v4, jint v5,
761 jdouble v6, jdouble v7, jdouble v8, jdouble v9,
762 jdouble v10, jdouble v11, jdouble v12, jdouble v13,
763 jdouble v14) {
764 return (v1 == 1) && (v2 == 2) && (v3 == 3) && (v4 == 4) && (v5 == 5) &&
765 (v6 == 6.0) && (v7 == 7.0) && (v8 == 8.0) && (v9 == 9.0) &&
766 (v10 == 10.0) && (v11 == 11.0) && (v12 == 12.0) && (v13 == 13.0) &&
767 (v14 == 14.0);
768 }
769
770 static JNINativeMethod methods[] = {
771 // name, signature, function
772 { "nop", "()V", StaticNonce_nop },
773 { "nopFast", "()V", StaticNonce_nopFast },
774 { "nopCritical", "()V", StaticNonce_nopCritical },
775 { "returnBoolean", "()Z", StaticNonce_returnBoolean },
776 { "returnBooleanFast", "()Z", StaticNonce_returnBooleanFast },
777 { "returnBooleanCritical", "()Z", StaticNonce_returnBooleanCritical },
778 { "returnByte", "()B", StaticNonce_returnByte },
779 { "returnByteFast", "()B", StaticNonce_returnByteFast },
780 { "returnByteCritical", "()B", StaticNonce_returnByteCritical },
781 { "returnShort", "()S", StaticNonce_returnShort },
782 { "returnShortFast", "()S", StaticNonce_returnShortFast },
783 { "returnShortCritical", "()S", StaticNonce_returnShortCritical },
784 { "returnChar", "()C", StaticNonce_returnChar },
785 { "returnCharFast", "()C", StaticNonce_returnCharFast },
786 { "returnCharCritical", "()C", StaticNonce_returnCharCritical },
787 { "returnInt", "()I", StaticNonce_returnInt },
788 { "returnIntFast", "()I", StaticNonce_returnIntFast },
789 { "returnIntCritical", "()I", StaticNonce_returnIntCritical },
790 { "returnLong", "()J", StaticNonce_returnLong },
791 { "returnLongFast", "()J", StaticNonce_returnLongFast },
792 { "returnLongCritical", "()J", StaticNonce_returnLongCritical },
793 { "returnFloat", "()F", StaticNonce_returnFloat },
794 { "returnFloatFast", "()F", StaticNonce_returnFloatFast },
795 { "returnFloatCritical", "()F", StaticNonce_returnFloatCritical },
796 { "returnDouble", "()D", StaticNonce_returnDouble },
797 { "returnDoubleFast", "()D", StaticNonce_returnDoubleFast },
798 { "returnDoubleCritical", "()D", StaticNonce_returnDoubleCritical },
799 { "returnNull", "()Ljava/lang/Object;", StaticNonce_returnNull },
800 { "returnNullFast", "()Ljava/lang/Object;",
801 StaticNonce_returnNullFast },
802 { "returnString", "()Ljava/lang/String;", StaticNonce_returnString },
803 { "returnStringFast", "()Ljava/lang/String;",
804 StaticNonce_returnStringFast },
805 { "returnShortArray", "()[S", StaticNonce_returnShortArray },
806 { "returnShortArrayFast", "()[S", StaticNonce_returnShortArrayFast },
807 { "returnStringArray", "()[Ljava/lang/String;",
808 StaticNonce_returnStringArray },
809 { "returnStringArrayFast", "()[Ljava/lang/String;",
810 StaticNonce_returnStringArrayFast },
811 { "returnThisClass", "()Ljava/lang/Class;",
812 StaticNonce_returnThisClass },
813 { "returnThisClassFast", "()Ljava/lang/Class;",
814 StaticNonce_returnThisClassFast },
815 { "returnInstance", "()Landroid/jni/cts/StaticNonce;",
816 StaticNonce_returnInstance },
817 { "returnInstanceFast", "()Landroid/jni/cts/StaticNonce;",
818 StaticNonce_returnInstanceFast },
819 { "takeBoolean", "(Z)Z", StaticNonce_takeBoolean },
820 { "takeBooleanFast", "(Z)Z", StaticNonce_takeBooleanFast },
821 { "takeBooleanCritical", "(Z)Z", StaticNonce_takeBooleanCritical },
822 { "takeByte", "(B)Z", StaticNonce_takeByte },
823 { "takeByteFast", "(B)Z", StaticNonce_takeByteFast },
824 { "takeByteCritical", "(B)Z", StaticNonce_takeByteCritical },
825 { "takeShort", "(S)Z", StaticNonce_takeShort },
826 { "takeShortFast", "(S)Z", StaticNonce_takeShortFast },
827 { "takeShortCritical", "(S)Z", StaticNonce_takeShortCritical },
828 { "takeChar", "(C)Z", StaticNonce_takeChar },
829 { "takeCharFast", "(C)Z", StaticNonce_takeCharFast },
830 { "takeCharCritical", "(C)Z", StaticNonce_takeCharCritical },
831 { "takeInt", "(I)Z", StaticNonce_takeInt },
832 { "takeIntFast", "(I)Z", StaticNonce_takeIntFast },
833 { "takeIntCritical", "(I)Z", StaticNonce_takeIntCritical },
834 { "takeLong", "(J)Z", StaticNonce_takeLong },
835 { "takeLongFast", "(J)Z", StaticNonce_takeLongFast },
836 { "takeLongCritical", "(J)Z", StaticNonce_takeLongCritical },
837 { "takeFloat", "(F)Z", StaticNonce_takeFloat },
838 { "takeFloatFast", "(F)Z", StaticNonce_takeFloatFast },
839 { "takeFloatCritical", "(F)Z", StaticNonce_takeFloatCritical },
840 { "takeDouble", "(D)Z", StaticNonce_takeDouble },
841 { "takeDoubleFast", "(D)Z", StaticNonce_takeDoubleFast },
842 { "takeDoubleCritical", "(D)Z", StaticNonce_takeDoubleCritical },
843 { "takeNull", "(Ljava/lang/Object;)Z", StaticNonce_takeNull },
844 { "takeNullFast", "(Ljava/lang/Object;)Z", StaticNonce_takeNullFast },
845 { "takeString", "(Ljava/lang/String;)Z", StaticNonce_takeString },
846 { "takeStringFast", "(Ljava/lang/String;)Z",
847 StaticNonce_takeStringFast },
848 { "takeThisClass", "(Ljava/lang/Class;)Z", StaticNonce_takeThisClass },
849 { "takeThisClassFast", "(Ljava/lang/Class;)Z",
850 StaticNonce_takeThisClassFast },
851 { "takeIntLong", "(IJ)Z", StaticNonce_takeIntLong },
852 { "takeIntLongFast", "(IJ)Z", StaticNonce_takeIntLongFast },
853 { "takeIntLongCritical", "(IJ)Z", StaticNonce_takeIntLongCritical },
854 { "takeLongInt", "(JI)Z", StaticNonce_takeLongInt },
855 { "takeLongIntFast", "(JI)Z", StaticNonce_takeLongIntFast },
856 { "takeLongIntCritical", "(JI)Z", StaticNonce_takeLongIntCritical },
857 { "takeOneOfEach", "(ZBSCIJLjava/lang/String;FD[I)Z",
858 StaticNonce_takeOneOfEach },
859 { "takeOneOfEachFast", "(ZBSCIJLjava/lang/String;FD[I)Z",
860 StaticNonce_takeOneOfEachFast },
861 { "takeOneOfEachCritical", "(ZBSCIJFD)Z",
862 StaticNonce_takeOneOfEachCritical },
863 { "takeCoolHandLuke",
864 "(IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII)Z",
865 StaticNonce_takeCoolHandLuke },
866 { "takeCoolHandLukeFast",
867 "(IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII)Z",
868 StaticNonce_takeCoolHandLukeFast },
869 { "takeCoolHandLukeCritical",
870 "(IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII)Z",
871 StaticNonce_takeCoolHandLukeCritical },
872 { "takeCoolHandLukeWithFloatsCritical",
873 "(IIIIIDDDDDDDDD)Z",
874 StaticNonce_takeCoolHandLukeWithFloatsCritical },
875 };
876
register_StaticNonce(JNIEnv * env)877 int register_StaticNonce(JNIEnv *env) {
878 return registerJniMethods(
879 env, "android/jni/cts/StaticNonce",
880 methods, sizeof(methods) / sizeof(JNINativeMethod));
881 }
882