Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/hotspot/jtreg/vmTestbase/nsk/stress/jni/libjnistress004.cpp
41155 views
1
/*
2
* Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
#include <jni.h>
25
#include <stdio.h>
26
#include <stdlib.h>
27
#include <string.h>
28
#include "jnihelper.h"
29
30
extern "C" {
31
32
#define DIGESTLENGTH 16
33
34
JNIEXPORT jcharArray JNICALL
35
Java_nsk_stress_jni_JNIter004_CheckSum (JNIEnv *env, jobject jobj, jstring jstr) {
36
37
unsigned char digest[DIGESTLENGTH];
38
jchar *tmp;
39
static jint upper = 0;
40
jcharArray jArr;
41
int i;
42
const jchar *critstr;
43
char *str;
44
jint len=env->GetStringUTFLength(jstr); CE
45
46
for (i=0;i<DIGESTLENGTH;i++) {
47
digest[i]=0;
48
}
49
str=(char *)malloc(len*sizeof(char));
50
/* const char *threadName=env->GetStringUTFChars(jstr, 0); */
51
52
env->MonitorEnter(jobj); CE
53
if (upper == 0) tmp = (jchar *) malloc(DIGESTLENGTH*sizeof(char));
54
if (env->ExceptionOccurred()) {
55
env->ExceptionDescribe();
56
env->ExceptionClear();
57
}
58
critstr=env->GetStringCritical(jstr, 0); CE
59
for (i=0;i<len;i++)
60
str[i] = (char) critstr[i];
61
env->ReleaseStringCritical(jstr,critstr); CE
62
for (i=0;i<len;i++) {
63
digest[i % DIGESTLENGTH]+=str[i];
64
}
65
free(str);
66
67
if (env->ExceptionOccurred()) {
68
env->ExceptionDescribe();
69
env->ExceptionClear();
70
}
71
memcpy(tmp,digest,DIGESTLENGTH);
72
jArr=env->NewCharArray(DIGESTLENGTH/sizeof(jchar)); CE
73
len=env->GetArrayLength(jArr); CE
74
env->SetCharArrayRegion(jArr,0,len,tmp); CE
75
/* ++upper; */
76
env->MonitorExit(jobj); CE
77
return jArr;
78
}
79
80
JNIEXPORT jboolean JNICALL
81
Java_nsk_stress_jni_JNIter004_CheckCompare (JNIEnv *env, jobject jobj, jstring jstr,
82
jcharArray cArr, jint limit) {
83
84
unsigned char digest[DIGESTLENGTH];
85
jchar *tmp;
86
/* jcharArray jArr; */
87
const jchar *critstr;
88
jint strlen;
89
char *str;
90
jboolean ret=JNI_TRUE;
91
int i;
92
static jint upper = 0;
93
jint len;
94
jchar *ch;
95
96
for (i=0;i<DIGESTLENGTH;i++) {
97
digest[i]=0;
98
}
99
strlen = env->GetStringUTFLength(jstr); CE
100
str = (char *)malloc(strlen*sizeof(char));
101
102
len =env->GetArrayLength(cArr); CE
103
104
env->MonitorEnter(jobj); CE
105
if (upper>limit) {
106
env->MonitorExit(jobj); CE
107
return JNI_FALSE;
108
}
109
tmp=(jchar *)malloc(DIGESTLENGTH*sizeof(char));
110
if (env->ExceptionOccurred()) {
111
env->ExceptionDescribe();
112
env->ExceptionClear();
113
}
114
critstr=env->GetStringCritical(jstr, 0); CE
115
for (i=0;i<strlen;i++)
116
str[i] = (char) critstr[i];
117
env->ReleaseStringCritical(jstr,critstr); CE
118
for (i=0;i<strlen; i++) {
119
digest[i % DIGESTLENGTH]+=str[i % DIGESTLENGTH];
120
}
121
122
free(str);
123
124
if (env->ExceptionOccurred()) {
125
env->ExceptionDescribe();
126
env->ExceptionClear();
127
}
128
memcpy(tmp,digest,DIGESTLENGTH);
129
130
/* jArr=env->NewCharArray(DIGESTLENGTH/sizeof(jchar)); */
131
/* len=env->GetArrayLength(jArr); */
132
/* env->SetCharArrayRegion(jArr,0,len,tmp); */
133
/* ++upper; */
134
/* env->MonitorExit(jobj); */
135
136
/* Compare */
137
/* env->MonitorEnter(jobj); */
138
139
ch=(jchar *)env->GetPrimitiveArrayCritical(cArr,0); CE
140
141
printf("Comparing: ");
142
for (i=0;i<len;i++)
143
if (ch[i] != tmp[i]) {
144
printf("Error in %d\n",i);
145
printf("ch[%d]=%02x tmp[%d]=%02x\n",i,ch[i],i,tmp[i]);
146
ret=JNI_FALSE;
147
}
148
else {
149
printf("ch[%d]=%02x tmp[%d]=%02x\n",i,ch[i],i,tmp[i]);
150
}
151
printf("\n");
152
env->ReleasePrimitiveArrayCritical(cArr,ch,0); CE
153
++upper;
154
if (!(upper % 500))
155
fprintf(stderr,"There are %d elements now.\n", upper);
156
if (upper == limit) {
157
jclass clazz;
158
jmethodID methodID;
159
char *name = (char*) "halt";
160
char *sig = (char*) "()V";
161
162
clazz=env->GetObjectClass(jobj); CE
163
methodID=env->GetStaticMethodID(clazz, name, sig); CE
164
env->CallStaticVoidMethod(clazz, methodID); CE
165
free(tmp);
166
ret=JNI_TRUE;
167
}
168
env->MonitorExit(jobj); CE
169
return ret;
170
}
171
172
}
173
174