Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
829e72c0
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
829e72c0
编写于
3月 20, 2011
作者:
K
ksrini
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
7026184: (launcher) Regression: class with unicode name can't be launched by java.
Reviewed-by: mchung, sherman
上级
06a16079
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
71 addition
and
67 deletion
+71
-67
src/share/bin/java.c
src/share/bin/java.c
+41
-64
src/share/classes/sun/launcher/LauncherHelper.java
src/share/classes/sun/launcher/LauncherHelper.java
+30
-3
未找到文件。
src/share/bin/java.c
浏览文件 @
829e72c0
...
@@ -61,6 +61,9 @@
...
@@ -61,6 +61,9 @@
* interfaces.
* interfaces.
*/
*/
/* we always print to stderr */
#define USE_STDERR JNI_TRUE
static
jboolean
printVersion
=
JNI_FALSE
;
/* print and exit */
static
jboolean
printVersion
=
JNI_FALSE
;
/* print and exit */
static
jboolean
showVersion
=
JNI_FALSE
;
/* print but continue */
static
jboolean
showVersion
=
JNI_FALSE
;
/* print but continue */
static
jboolean
printUsage
=
JNI_FALSE
;
/* print and exit*/
static
jboolean
printUsage
=
JNI_FALSE
;
/* print and exit*/
...
@@ -1136,36 +1139,18 @@ InitializeJVM(JavaVM **pvm, JNIEnv **penv, InvocationFunctions *ifn)
...
@@ -1136,36 +1139,18 @@ InitializeJVM(JavaVM **pvm, JNIEnv **penv, InvocationFunctions *ifn)
return; \
return; \
}
}
static
jstring
platformEncoding
=
NULL
;
static
jclass
helperClass
=
NULL
;
static
jstring
getPlatformEncoding
(
JNIEnv
*
env
)
{
if
(
platformEncoding
==
NULL
)
{
jstring
propname
=
(
*
env
)
->
NewStringUTF
(
env
,
"sun.jnu.encoding"
);
if
(
propname
)
{
jclass
cls
;
jmethodID
mid
;
NULL_CHECK0
(
cls
=
FindBootStrapClass
(
env
,
"java/lang/System"
));
NULL_CHECK0
(
mid
=
(
*
env
)
->
GetStaticMethodID
(
env
,
cls
,
"getProperty"
,
"(Ljava/lang/String;)Ljava/lang/String;"
));
platformEncoding
=
(
*
env
)
->
CallStaticObjectMethod
(
env
,
cls
,
mid
,
propname
);
}
}
return
platformEncoding
;
}
static
jboolean
isEncodingSupported
(
JNIEnv
*
env
,
jstring
enc
)
{
static
jclass
jclass
cls
;
GetLauncherHelperClass
(
JNIEnv
*
env
)
{
jmethodID
mid
;
if
(
helperClass
==
NULL
)
{
NULL_CHECK0
(
cls
=
FindBootStrapClass
(
env
,
"java/nio/charset/Charset"
));
NULL_CHECK0
(
helperClass
=
FindBootStrapClass
(
env
,
NULL_CHECK0
(
mid
=
(
*
env
)
->
GetStaticMethodID
(
"sun/launcher/LauncherHelper"
));
env
,
cls
,
}
"isSupported"
,
return
helperClass
;
"(Ljava/lang/String;)Z"
));
return
(
*
env
)
->
CallStaticBooleanMethod
(
env
,
cls
,
mid
,
enc
);
}
}
static
jmethodID
makePlatformStringMID
=
NULL
;
/*
/*
* Returns a new Java string object for the specified platform string.
* Returns a new Java string object for the specified platform string.
*/
*/
...
@@ -1173,36 +1158,23 @@ static jstring
...
@@ -1173,36 +1158,23 @@ static jstring
NewPlatformString
(
JNIEnv
*
env
,
char
*
s
)
NewPlatformString
(
JNIEnv
*
env
,
char
*
s
)
{
{
int
len
=
(
int
)
JLI_StrLen
(
s
);
int
len
=
(
int
)
JLI_StrLen
(
s
);
jclass
cls
;
jmethodID
mid
;
jbyteArray
ary
;
jbyteArray
ary
;
j
string
enc
;
j
class
cls
=
GetLauncherHelperClass
(
env
)
;
NULL_CHECK0
(
cls
);
if
(
s
==
NULL
)
if
(
s
==
NULL
)
return
0
;
return
0
;
enc
=
getPlatformEncoding
(
env
);
ary
=
(
*
env
)
->
NewByteArray
(
env
,
len
);
ary
=
(
*
env
)
->
NewByteArray
(
env
,
len
);
if
(
ary
!=
0
)
{
if
(
ary
!=
0
)
{
jstring
str
=
0
;
jstring
str
=
0
;
(
*
env
)
->
SetByteArrayRegion
(
env
,
ary
,
0
,
len
,
(
jbyte
*
)
s
);
(
*
env
)
->
SetByteArrayRegion
(
env
,
ary
,
0
,
len
,
(
jbyte
*
)
s
);
if
(
!
(
*
env
)
->
ExceptionOccurred
(
env
))
{
if
(
!
(
*
env
)
->
ExceptionOccurred
(
env
))
{
NULL_CHECK0
(
cls
=
FindBootStrapClass
(
env
,
"java/lang/String"
));
if
(
makePlatformStringMID
==
NULL
)
{
if
(
isEncodingSupported
(
env
,
enc
)
==
JNI_TRUE
)
{
NULL_CHECK0
(
makePlatformStringMID
=
(
*
env
)
->
GetStaticMethodID
(
env
,
NULL_CHECK0
(
mid
=
(
*
env
)
->
GetMethodID
(
env
,
cls
,
"<init>"
,
cls
,
"makePlatformString"
,
"(Z[B)Ljava/lang/String;"
));
"([BLjava/lang/String;)V"
));
str
=
(
*
env
)
->
NewObject
(
env
,
cls
,
mid
,
ary
,
enc
);
}
else
{
/*If the encoding specified in sun.jnu.encoding is not
endorsed by "Charset.isSupported" we have to fall back
to use String(byte[]) explicitly here without specifying
the encoding name, in which the StringCoding class will
pickup the iso-8859-1 as the fallback converter for us.
*/
NULL_CHECK0
(
mid
=
(
*
env
)
->
GetMethodID
(
env
,
cls
,
"<init>"
,
"([B)V"
));
str
=
(
*
env
)
->
NewObject
(
env
,
cls
,
mid
,
ary
);
}
}
str
=
(
*
env
)
->
CallStaticObjectMethod
(
env
,
cls
,
makePlatformStringMID
,
USE_STDERR
,
ary
);
(
*
env
)
->
DeleteLocalRef
(
env
,
ary
);
(
*
env
)
->
DeleteLocalRef
(
env
,
ary
);
return
str
;
return
str
;
}
}
...
@@ -1239,20 +1211,28 @@ NewPlatformStringArray(JNIEnv *env, char **strv, int strc)
...
@@ -1239,20 +1211,28 @@ NewPlatformStringArray(JNIEnv *env, char **strv, int strc)
static
jclass
static
jclass
LoadMainClass
(
JNIEnv
*
env
,
int
mode
,
char
*
name
)
LoadMainClass
(
JNIEnv
*
env
,
int
mode
,
char
*
name
)
{
{
jclass
cls
;
jmethodID
mid
;
jmethodID
mid
;
jstring
str
;
jstring
str
;
jobject
result
;
jobject
result
;
jlong
start
,
end
;
jlong
start
,
end
;
jclass
cls
=
GetLauncherHelperClass
(
env
);
NULL_CHECK0
(
cls
);
if
(
JLI_IsTraceLauncher
())
{
if
(
JLI_IsTraceLauncher
())
{
start
=
CounterGet
();
start
=
CounterGet
();
}
}
NULL_CHECK0
(
cls
=
FindBootStrapClass
(
env
,
"sun/launcher/LauncherHelper"
));
NULL_CHECK0
(
mid
=
(
*
env
)
->
GetStaticMethodID
(
env
,
cls
,
NULL_CHECK0
(
mid
=
(
*
env
)
->
GetStaticMethodID
(
env
,
cls
,
"checkAndLoadMain"
,
"checkAndLoadMain"
,
"(ZILjava/lang/String;)Ljava/lang/Class;"
));
"(ZILjava/lang/String;)Ljava/lang/Class;"
));
str
=
(
*
env
)
->
NewStringUTF
(
env
,
name
);
result
=
(
*
env
)
->
CallStaticObjectMethod
(
env
,
cls
,
mid
,
JNI_TRUE
,
mode
,
str
);
switch
(
mode
)
{
case
LM_CLASS
:
str
=
NewPlatformString
(
env
,
name
);
break
;
default:
str
=
(
*
env
)
->
NewStringUTF
(
env
,
name
);
break
;
}
result
=
(
*
env
)
->
CallStaticObjectMethod
(
env
,
cls
,
mid
,
USE_STDERR
,
mode
,
str
);
if
(
JLI_IsTraceLauncher
())
{
if
(
JLI_IsTraceLauncher
())
{
end
=
CounterGet
();
end
=
CounterGet
();
...
@@ -1478,15 +1458,15 @@ PrintJavaVersion(JNIEnv *env, jboolean extraLF)
...
@@ -1478,15 +1458,15 @@ PrintJavaVersion(JNIEnv *env, jboolean extraLF)
static
void
static
void
ShowSettings
(
JNIEnv
*
env
,
char
*
optString
)
ShowSettings
(
JNIEnv
*
env
,
char
*
optString
)
{
{
jclass
cls
;
jmethodID
showSettingsID
;
jmethodID
showSettingsID
;
jstring
joptString
;
jstring
joptString
;
NULL_CHECK
(
cls
=
FindBootStrapClass
(
env
,
"sun/launcher/LauncherHelper"
));
jclass
cls
=
GetLauncherHelperClass
(
env
);
NULL_CHECK
(
cls
);
NULL_CHECK
(
showSettingsID
=
(
*
env
)
->
GetStaticMethodID
(
env
,
cls
,
NULL_CHECK
(
showSettingsID
=
(
*
env
)
->
GetStaticMethodID
(
env
,
cls
,
"showSettings"
,
"(ZLjava/lang/String;JJJZ)V"
));
"showSettings"
,
"(ZLjava/lang/String;JJJZ)V"
));
joptString
=
(
*
env
)
->
NewStringUTF
(
env
,
optString
);
joptString
=
(
*
env
)
->
NewStringUTF
(
env
,
optString
);
(
*
env
)
->
CallStaticVoidMethod
(
env
,
cls
,
showSettingsID
,
(
*
env
)
->
CallStaticVoidMethod
(
env
,
cls
,
showSettingsID
,
JNI_TRUE
,
USE_STDERR
,
joptString
,
joptString
,
(
jlong
)
initialHeapSize
,
(
jlong
)
initialHeapSize
,
(
jlong
)
maxHeapSize
,
(
jlong
)
maxHeapSize
,
...
@@ -1500,18 +1480,15 @@ ShowSettings(JNIEnv *env, char *optString)
...
@@ -1500,18 +1480,15 @@ ShowSettings(JNIEnv *env, char *optString)
static
void
static
void
PrintUsage
(
JNIEnv
*
env
,
jboolean
doXUsage
)
PrintUsage
(
JNIEnv
*
env
,
jboolean
doXUsage
)
{
{
jclass
cls
;
jmethodID
initHelp
,
vmSelect
,
vmSynonym
,
vmErgo
,
printHelp
,
printXUsageMessage
;
jmethodID
initHelp
,
vmSelect
,
vmSynonym
,
vmErgo
,
printHelp
,
printXUsageMessage
;
jstring
jprogname
,
vm1
,
vm2
;
jstring
jprogname
,
vm1
,
vm2
;
int
i
;
int
i
;
jclass
cls
=
GetLauncherHelperClass
(
env
);
NULL_CHECK
(
cls
=
FindBootStrapClass
(
env
,
"sun/launcher/LauncherHelper"
));
NULL_CHECK
(
cls
);
if
(
doXUsage
)
{
if
(
doXUsage
)
{
NULL_CHECK
(
printXUsageMessage
=
(
*
env
)
->
GetStaticMethodID
(
env
,
cls
,
NULL_CHECK
(
printXUsageMessage
=
(
*
env
)
->
GetStaticMethodID
(
env
,
cls
,
"printXUsageMessage"
,
"(Z)V"
));
"printXUsageMessage"
,
"(Z)V"
));
(
*
env
)
->
CallStaticVoidMethod
(
env
,
cls
,
printXUsageMessage
,
JNI_TRUE
);
(
*
env
)
->
CallStaticVoidMethod
(
env
,
cls
,
printXUsageMessage
,
USE_STDERR
);
}
else
{
}
else
{
NULL_CHECK
(
initHelp
=
(
*
env
)
->
GetStaticMethodID
(
env
,
cls
,
NULL_CHECK
(
initHelp
=
(
*
env
)
->
GetStaticMethodID
(
env
,
cls
,
"initHelpMessage"
,
"(Ljava/lang/String;)V"
));
"initHelpMessage"
,
"(Ljava/lang/String;)V"
));
...
@@ -1570,7 +1547,7 @@ PrintUsage(JNIEnv* env, jboolean doXUsage)
...
@@ -1570,7 +1547,7 @@ PrintUsage(JNIEnv* env, jboolean doXUsage)
}
}
/* Complete the usage message and print to stderr*/
/* Complete the usage message and print to stderr*/
(
*
env
)
->
CallStaticVoidMethod
(
env
,
cls
,
printHelp
,
JNI_TRUE
);
(
*
env
)
->
CallStaticVoidMethod
(
env
,
cls
,
printHelp
,
USE_STDERR
);
}
}
return
;
return
;
}
}
...
...
src/share/classes/sun/launcher/LauncherHelper.java
浏览文件 @
829e72c0
...
@@ -42,10 +42,12 @@ package sun.launcher;
...
@@ -42,10 +42,12 @@ package sun.launcher;
import
java.io.File
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.io.PrintStream
;
import
java.io.PrintStream
;
import
java.io.UnsupportedEncodingException
;
import
java.lang.reflect.Method
;
import
java.lang.reflect.Method
;
import
java.lang.reflect.Modifier
;
import
java.lang.reflect.Modifier
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.math.RoundingMode
;
import
java.math.RoundingMode
;
import
java.nio.charset.Charset
;
import
java.util.ResourceBundle
;
import
java.util.ResourceBundle
;
import
java.text.MessageFormat
;
import
java.text.MessageFormat
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
...
@@ -471,11 +473,11 @@ public enum LauncherHelper {
...
@@ -471,11 +473,11 @@ public enum LauncherHelper {
}
catch
(
ClassNotFoundException
cnfe
)
{
}
catch
(
ClassNotFoundException
cnfe
)
{
abort
(
ostream
,
cnfe
,
"java.launcher.cls.error1"
,
cn
);
abort
(
ostream
,
cnfe
,
"java.launcher.cls.error1"
,
cn
);
}
}
signatureDiagnostic
(
ostream
,
c
);
getMainMethod
(
ostream
,
c
);
return
c
;
return
c
;
}
}
static
void
signatureDiagnostic
(
PrintStream
ostream
,
Class
<?>
clazz
)
{
static
Method
getMainMethod
(
PrintStream
ostream
,
Class
<?>
clazz
)
{
String
classname
=
clazz
.
getName
();
String
classname
=
clazz
.
getName
();
Method
method
=
null
;
Method
method
=
null
;
try
{
try
{
...
@@ -495,6 +497,31 @@ public enum LauncherHelper {
...
@@ -495,6 +497,31 @@ public enum LauncherHelper {
if
(
method
.
getReturnType
()
!=
java
.
lang
.
Void
.
TYPE
)
{
if
(
method
.
getReturnType
()
!=
java
.
lang
.
Void
.
TYPE
)
{
abort
(
ostream
,
null
,
"java.launcher.cls.error3"
,
classname
);
abort
(
ostream
,
null
,
"java.launcher.cls.error3"
,
classname
);
}
}
return
;
return
method
;
}
private
static
final
String
encprop
=
"sun.jnu.encoding"
;
private
static
String
encoding
=
null
;
private
static
boolean
isCharsetSupported
=
false
;
/*
* converts a c or a byte array to a platform specific string,
* previously implemented as a native method in the launcher.
*/
static
String
makePlatformString
(
boolean
printToStderr
,
byte
[]
inArray
)
{
final
PrintStream
ostream
=
(
printToStderr
)
?
System
.
err
:
System
.
out
;
if
(
encoding
==
null
)
{
encoding
=
System
.
getProperty
(
encprop
);
isCharsetSupported
=
Charset
.
isSupported
(
encoding
);
}
try
{
String
out
=
isCharsetSupported
?
new
String
(
inArray
,
encoding
)
:
new
String
(
inArray
);
return
out
;
}
catch
(
UnsupportedEncodingException
uee
)
{
abort
(
ostream
,
uee
,
null
);
}
return
null
;
// keep the compiler happy
}
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录