mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
8198697: Simplify initialization of platform encoding
Reviewed-by: redestad, sherman
This commit is contained in:
parent
b64d0ef66d
commit
c43cebb5cf
3 changed files with 61 additions and 77 deletions
|
@ -260,7 +260,6 @@ Java_java_lang_System_initProperties(JNIEnv *env, jclass cla, jobject props)
|
||||||
PUTPROP(props, "user.variant", sprops->variant);
|
PUTPROP(props, "user.variant", sprops->variant);
|
||||||
}
|
}
|
||||||
PUTPROP(props, "file.encoding", sprops->encoding);
|
PUTPROP(props, "file.encoding", sprops->encoding);
|
||||||
PUTPROP(props, "sun.jnu.encoding", sprops->sun_jnu_encoding);
|
|
||||||
if (sprops->sun_stdout_encoding != NULL) {
|
if (sprops->sun_stdout_encoding != NULL) {
|
||||||
PUTPROP(props, "sun.stdout.encoding", sprops->sun_stdout_encoding);
|
PUTPROP(props, "sun.stdout.encoding", sprops->sun_stdout_encoding);
|
||||||
}
|
}
|
||||||
|
@ -319,6 +318,7 @@ Java_java_lang_System_initProperties(JNIEnv *env, jclass cla, jobject props)
|
||||||
/* !!! DO NOT call PUTPROP_ForPlatformNString before this line !!!
|
/* !!! DO NOT call PUTPROP_ForPlatformNString before this line !!!
|
||||||
* !!! I18n properties have not been set up yet !!!
|
* !!! I18n properties have not been set up yet !!!
|
||||||
*/
|
*/
|
||||||
|
InitializeEncoding(env, sprops->sun_jnu_encoding);
|
||||||
|
|
||||||
/* Printing properties */
|
/* Printing properties */
|
||||||
/* Note: java.awt.printerjob is an implementation private property which
|
/* Note: java.awt.printerjob is an implementation private property which
|
||||||
|
@ -418,6 +418,9 @@ Java_java_lang_System_initProperties(JNIEnv *env, jclass cla, jobject props)
|
||||||
(*env)->DeleteLocalRef(env, jVMVal);
|
(*env)->DeleteLocalRef(env, jVMVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Platform defined encoding properties override any on the command line
|
||||||
|
PUTPROP(props, "sun.jnu.encoding", sprops->sun_jnu_encoding);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -774,14 +774,10 @@ newStringUTF8(JNIEnv *env, const char *str)
|
||||||
return newSizedStringJava(env, str, len);
|
return newSizedStringJava(env, str, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize the fast encoding. If the "sun.jnu.encoding" property
|
/* Initialize the fast encoding from the encoding name. */
|
||||||
* has not yet been set, we leave fastEncoding == NO_ENCODING_YET.
|
|
||||||
*/
|
|
||||||
void
|
void
|
||||||
initializeEncoding(JNIEnv *env)
|
InitializeEncoding(JNIEnv *env, const char *encname)
|
||||||
{
|
{
|
||||||
jstring propname = 0;
|
|
||||||
jstring enc = 0;
|
|
||||||
jclass strClazz = NULL;
|
jclass strClazz = NULL;
|
||||||
|
|
||||||
if ((*env)->EnsureLocalCapacity(env, 3) < 0)
|
if ((*env)->EnsureLocalCapacity(env, 3) < 0)
|
||||||
|
@ -790,19 +786,6 @@ initializeEncoding(JNIEnv *env)
|
||||||
strClazz = JNU_ClassString(env);
|
strClazz = JNU_ClassString(env);
|
||||||
CHECK_NULL(strClazz);
|
CHECK_NULL(strClazz);
|
||||||
|
|
||||||
propname = (*env)->NewStringUTF(env, "sun.jnu.encoding");
|
|
||||||
if (propname) {
|
|
||||||
jboolean exc;
|
|
||||||
enc = JNU_CallStaticMethodByName
|
|
||||||
(env,
|
|
||||||
&exc,
|
|
||||||
"java/lang/System",
|
|
||||||
"getProperty",
|
|
||||||
"(Ljava/lang/String;)Ljava/lang/String;",
|
|
||||||
propname).l;
|
|
||||||
if (!exc) {
|
|
||||||
if (enc) {
|
|
||||||
const char* encname = (*env)->GetStringUTFChars(env, enc, 0);
|
|
||||||
if (encname) {
|
if (encname) {
|
||||||
/*
|
/*
|
||||||
* On Solaris with nl_langinfo() called in GetJavaProperties():
|
* On Solaris with nl_langinfo() called in GetJavaProperties():
|
||||||
|
@ -821,7 +804,11 @@ initializeEncoding(JNIEnv *env)
|
||||||
fastEncoding = FAST_8859_1;
|
fastEncoding = FAST_8859_1;
|
||||||
} else if (strcmp(encname, "UTF-8") == 0) {
|
} else if (strcmp(encname, "UTF-8") == 0) {
|
||||||
fastEncoding = FAST_UTF_8;
|
fastEncoding = FAST_UTF_8;
|
||||||
|
jstring enc = (*env)->NewStringUTF(env, encname);
|
||||||
|
if (enc == NULL)
|
||||||
|
return;
|
||||||
jnuEncoding = (jstring)(*env)->NewGlobalRef(env, enc);
|
jnuEncoding = (jstring)(*env)->NewGlobalRef(env, enc);
|
||||||
|
(*env)->DeleteLocalRef(env, enc);
|
||||||
} else if (strcmp(encname, "ISO646-US") == 0) {
|
} else if (strcmp(encname, "ISO646-US") == 0) {
|
||||||
fastEncoding = FAST_646_US;
|
fastEncoding = FAST_646_US;
|
||||||
} else if (strcmp(encname, "Cp1252") == 0 ||
|
} else if (strcmp(encname, "Cp1252") == 0 ||
|
||||||
|
@ -832,19 +819,16 @@ initializeEncoding(JNIEnv *env)
|
||||||
fastEncoding = FAST_CP1252;
|
fastEncoding = FAST_CP1252;
|
||||||
} else {
|
} else {
|
||||||
fastEncoding = NO_FAST_ENCODING;
|
fastEncoding = NO_FAST_ENCODING;
|
||||||
|
jstring enc = (*env)->NewStringUTF(env, encname);
|
||||||
|
if (enc == NULL)
|
||||||
|
return;
|
||||||
jnuEncoding = (jstring)(*env)->NewGlobalRef(env, enc);
|
jnuEncoding = (jstring)(*env)->NewGlobalRef(env, enc);
|
||||||
}
|
|
||||||
(*env)->ReleaseStringUTFChars(env, enc, encname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
(*env)->ExceptionClear(env);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
(*env)->ExceptionClear(env);
|
|
||||||
}
|
|
||||||
(*env)->DeleteLocalRef(env, propname);
|
|
||||||
(*env)->DeleteLocalRef(env, enc);
|
(*env)->DeleteLocalRef(env, enc);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
JNU_ThrowInternalError(env, "platform encoding undefined");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Initialize method-id cache */
|
/* Initialize method-id cache */
|
||||||
String_getBytes_ID = (*env)->GetMethodID(env, strClazz,
|
String_getBytes_ID = (*env)->GetMethodID(env, strClazz,
|
||||||
|
@ -865,19 +849,18 @@ NewStringPlatform(JNIEnv *env, const char *str)
|
||||||
JNIEXPORT jstring JNICALL
|
JNIEXPORT jstring JNICALL
|
||||||
JNU_NewStringPlatform(JNIEnv *env, const char *str)
|
JNU_NewStringPlatform(JNIEnv *env, const char *str)
|
||||||
{
|
{
|
||||||
if (fastEncoding == NO_ENCODING_YET) {
|
if (fastEncoding == FAST_UTF_8)
|
||||||
initializeEncoding(env);
|
return newStringUTF8(env, str);
|
||||||
JNU_CHECK_EXCEPTION_RETURN(env, NULL);
|
if (fastEncoding == FAST_8859_1)
|
||||||
}
|
|
||||||
|
|
||||||
if ((fastEncoding == FAST_8859_1) || (fastEncoding == NO_ENCODING_YET))
|
|
||||||
return newString8859_1(env, str);
|
return newString8859_1(env, str);
|
||||||
if (fastEncoding == FAST_646_US)
|
if (fastEncoding == FAST_646_US)
|
||||||
return newString646_US(env, str);
|
return newString646_US(env, str);
|
||||||
if (fastEncoding == FAST_CP1252)
|
if (fastEncoding == FAST_CP1252)
|
||||||
return newStringCp1252(env, str);
|
return newStringCp1252(env, str);
|
||||||
if (fastEncoding == FAST_UTF_8)
|
if (fastEncoding == NO_ENCODING_YET) {
|
||||||
return newStringUTF8(env, str);
|
JNU_ThrowInternalError(env, "platform encoding not initialized");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
return newStringJava(env, str);
|
return newStringJava(env, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -985,20 +968,18 @@ JNU_GetStringPlatformChars(JNIEnv *env, jstring jstr, jboolean *isCopy)
|
||||||
if (isCopy)
|
if (isCopy)
|
||||||
*isCopy = JNI_TRUE;
|
*isCopy = JNI_TRUE;
|
||||||
|
|
||||||
if (fastEncoding == NO_ENCODING_YET) {
|
if (fastEncoding == FAST_UTF_8)
|
||||||
initializeEncoding(env);
|
return getStringUTF8(env, jstr);
|
||||||
JNU_CHECK_EXCEPTION_RETURN(env, 0);
|
if (fastEncoding == FAST_8859_1)
|
||||||
}
|
|
||||||
|
|
||||||
if ((fastEncoding == FAST_8859_1) || (fastEncoding == NO_ENCODING_YET))
|
|
||||||
return getString8859_1Chars(env, jstr);
|
return getString8859_1Chars(env, jstr);
|
||||||
if (fastEncoding == FAST_646_US)
|
if (fastEncoding == FAST_646_US)
|
||||||
return getString646_USChars(env, jstr);
|
return getString646_USChars(env, jstr);
|
||||||
if (fastEncoding == FAST_CP1252)
|
if (fastEncoding == FAST_CP1252)
|
||||||
return getStringCp1252Chars(env, jstr);
|
return getStringCp1252Chars(env, jstr);
|
||||||
if (fastEncoding == FAST_UTF_8)
|
if (fastEncoding == NO_ENCODING_YET) {
|
||||||
return getStringUTF8(env, jstr);
|
JNU_ThrowInternalError(env, "platform encoding not initialized");
|
||||||
else
|
return 0;
|
||||||
|
} else
|
||||||
return getStringBytes(env, jstr);
|
return getStringBytes(env, jstr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -388,7 +388,7 @@ enum {
|
||||||
|
|
||||||
int getFastEncoding();
|
int getFastEncoding();
|
||||||
|
|
||||||
void initializeEncoding();
|
void InitializeEncoding(JNIEnv *env, const char *name);
|
||||||
|
|
||||||
void* getProcessHandle();
|
void* getProcessHandle();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue