Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/native/sun/misc/Version.c
38829 views
1
/*
2
* Copyright (c) 2005, 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. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
#include "jni.h"
27
#include "jni_util.h"
28
#include "jvm.h"
29
#include "jdk_util.h"
30
31
#include "sun_misc_Version.h"
32
33
char jvm_special_version = '\0';
34
char jdk_special_version = '\0';
35
static void setStaticIntField(JNIEnv* env, jclass cls, const char* name, jint value)
36
{
37
char errmsg[100];
38
jfieldID fid;
39
fid = (*env)->GetStaticFieldID(env, cls, name, "I");
40
if (fid != 0) {
41
(*env)->SetStaticIntField(env, cls, fid, value);
42
} else {
43
sprintf(errmsg, "Static int field %s not found", name);
44
JNU_ThrowInternalError(env, errmsg);
45
}
46
}
47
48
static void setStaticBooleanField(JNIEnv* env, jclass cls, const char* name, jboolean value)
49
{
50
char errmsg[100];
51
jfieldID fid;
52
fid = (*env)->GetStaticFieldID(env, cls, name, "Z");
53
if (fid != 0) {
54
(*env)->SetStaticBooleanField(env, cls, fid, value);
55
} else {
56
sprintf(errmsg, "Static boolean field %s not found", name);
57
JNU_ThrowInternalError(env, errmsg);
58
}
59
}
60
61
static void setStaticStringField(JNIEnv* env, jclass cls, const char* name, jstring value)
62
{
63
char errmsg[100];
64
jfieldID fid;
65
fid = (*env)->GetStaticFieldID(env, cls, name, "Ljava/lang/String");
66
if (fid != 0) {
67
(*env)->SetStaticObjectField(env, cls, fid, value);
68
} else {
69
sprintf(errmsg, "Static String field %s not found", name);
70
JNU_ThrowInternalError(env, errmsg);
71
}
72
}
73
74
75
typedef void (JNICALL *GetJvmVersionInfo_fp)(JNIEnv*, jvm_version_info*, size_t);
76
77
JNIEXPORT jboolean JNICALL
78
Java_sun_misc_Version_getJvmVersionInfo(JNIEnv *env, jclass cls)
79
{
80
jvm_version_info info;
81
GetJvmVersionInfo_fp func_p;
82
83
if (!JDK_InitJvmHandle()) {
84
JNU_ThrowInternalError(env, "Handle for JVM not found for symbol lookup");
85
}
86
func_p = (GetJvmVersionInfo_fp) JDK_FindJvmEntry("JVM_GetVersionInfo");
87
if (func_p == NULL) {
88
return JNI_FALSE;
89
}
90
91
(*func_p)(env, &info, sizeof(info));
92
setStaticIntField(env, cls, "jvm_major_version", JVM_VERSION_MAJOR(info.jvm_version));
93
JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE);
94
setStaticIntField(env, cls, "jvm_minor_version", JVM_VERSION_MINOR(info.jvm_version));
95
JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE);
96
setStaticIntField(env, cls, "jvm_micro_version", JVM_VERSION_MICRO(info.jvm_version));
97
JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE);
98
setStaticIntField(env, cls, "jvm_build_number", JVM_VERSION_BUILD(info.jvm_version));
99
JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE);
100
setStaticIntField(env, cls, "jvm_update_version", info.update_version);
101
JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE);
102
jvm_special_version = info.special_update_version;
103
104
return JNI_TRUE;
105
}
106
107
JNIEXPORT jstring JNICALL
108
Java_sun_misc_Version_getJvmSpecialVersion(JNIEnv *env, jclass cls) {
109
char s[2];
110
jstring special;
111
s[0] = jvm_special_version;
112
s[1] = '\0';
113
special = (*env)->NewStringUTF(env, s);
114
return special;
115
}
116
117
JNIEXPORT void JNICALL
118
Java_sun_misc_Version_getJdkVersionInfo(JNIEnv *env, jclass cls)
119
{
120
jdk_version_info info;
121
122
JDK_GetVersionInfo0(&info, sizeof(info));
123
setStaticIntField(env, cls, "jdk_major_version", JDK_VERSION_MAJOR(info.jdk_version));
124
JNU_CHECK_EXCEPTION(env);
125
setStaticIntField(env, cls, "jdk_minor_version", JDK_VERSION_MINOR(info.jdk_version));
126
JNU_CHECK_EXCEPTION(env);
127
setStaticIntField(env, cls, "jdk_micro_version", JDK_VERSION_MICRO(info.jdk_version));
128
JNU_CHECK_EXCEPTION(env);
129
setStaticIntField(env, cls, "jdk_build_number", JDK_VERSION_BUILD(info.jdk_version));
130
JNU_CHECK_EXCEPTION(env);
131
setStaticIntField(env, cls, "jdk_update_version", info.update_version);
132
JNU_CHECK_EXCEPTION(env);
133
jdk_special_version = info.special_update_version;
134
}
135
136
JNIEXPORT jstring JNICALL
137
Java_sun_misc_Version_getJdkSpecialVersion(JNIEnv *env, jclass cls) {
138
char s[2];
139
jstring special;
140
s[0] = jdk_special_version;
141
s[1] = '\0';
142
special = (*env)->NewStringUTF(env, s);
143
return special;
144
}
145
146