Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
6b5f4a3d
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看板
提交
6b5f4a3d
编写于
11月 22, 2010
作者:
M
mullan
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
0c110a1e
c6705e61
变更
70
展开全部
隐藏空白更改
内联
并排
Showing
70 changed file
with
2686 addition
and
1153 deletion
+2686
-1153
make/mkdemo/nio/zipfs/Makefile
make/mkdemo/nio/zipfs/Makefile
+7
-0
make/sun/nio/cs/FILES_java.gmk
make/sun/nio/cs/FILES_java.gmk
+3
-0
make/tools/CharsetMapping/IBM833.c2b
make/tools/CharsetMapping/IBM833.c2b
+94
-0
make/tools/CharsetMapping/IBM833.map
make/tools/CharsetMapping/IBM833.map
+217
-0
make/tools/CharsetMapping/extsbcs
make/tools/CharsetMapping/extsbcs
+1
-0
src/share/classes/com/sun/net/httpserver/HttpsConfigurator.java
...are/classes/com/sun/net/httpserver/HttpsConfigurator.java
+2
-0
src/share/classes/com/sun/net/httpserver/HttpsParameters.java
...share/classes/com/sun/net/httpserver/HttpsParameters.java
+4
-0
src/share/classes/com/sun/rowset/RowSetResourceBundle.properties
...re/classes/com/sun/rowset/RowSetResourceBundle.properties
+4
-4
src/share/classes/com/sun/rowset/internal/XmlReaderContentHandler.java
...sses/com/sun/rowset/internal/XmlReaderContentHandler.java
+1
-1
src/share/classes/java/io/BufferedInputStream.java
src/share/classes/java/io/BufferedInputStream.java
+5
-1
src/share/classes/java/io/PushbackInputStream.java
src/share/classes/java/io/PushbackInputStream.java
+5
-1
src/share/classes/java/lang/Readable.java
src/share/classes/java/lang/Readable.java
+2
-2
src/share/classes/java/nio/StringCharBuffer.java
src/share/classes/java/nio/StringCharBuffer.java
+1
-1
src/share/classes/java/sql/SQLPermission.java
src/share/classes/java/sql/SQLPermission.java
+1
-1
src/share/classes/java/util/Formatter.java
src/share/classes/java/util/Formatter.java
+1
-0
src/share/classes/java/util/jar/JarInputStream.java
src/share/classes/java/util/jar/JarInputStream.java
+23
-10
src/share/classes/sun/io/ByteToCharCp833.java
src/share/classes/sun/io/ByteToCharCp833.java
+42
-0
src/share/classes/sun/io/CharToByteCp833.java
src/share/classes/sun/io/CharToByteCp833.java
+46
-0
src/share/classes/sun/io/CharacterEncoding.java
src/share/classes/sun/io/CharacterEncoding.java
+6
-1
src/share/classes/sun/net/httpserver/ChunkedInputStream.java
src/share/classes/sun/net/httpserver/ChunkedInputStream.java
+1
-0
src/share/classes/sun/net/httpserver/Event.java
src/share/classes/sun/net/httpserver/Event.java
+2
-0
src/share/classes/sun/net/httpserver/ExchangeImpl.java
src/share/classes/sun/net/httpserver/ExchangeImpl.java
+1
-0
src/share/classes/sun/net/httpserver/FixedLengthInputStream.java
...re/classes/sun/net/httpserver/FixedLengthInputStream.java
+3
-0
src/share/classes/sun/net/httpserver/HttpConnection.java
src/share/classes/sun/net/httpserver/HttpConnection.java
+13
-0
src/share/classes/sun/net/httpserver/Request.java
src/share/classes/sun/net/httpserver/Request.java
+27
-81
src/share/classes/sun/net/httpserver/SSLStreams.java
src/share/classes/sun/net/httpserver/SSLStreams.java
+9
-32
src/share/classes/sun/net/httpserver/SelectorCache.java
src/share/classes/sun/net/httpserver/SelectorCache.java
+0
-134
src/share/classes/sun/net/httpserver/ServerConfig.java
src/share/classes/sun/net/httpserver/ServerConfig.java
+77
-34
src/share/classes/sun/net/httpserver/ServerImpl.java
src/share/classes/sun/net/httpserver/ServerImpl.java
+230
-52
src/share/classes/sun/nio/cs/UTF_8.java
src/share/classes/sun/nio/cs/UTF_8.java
+1
-1
src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java
src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java
+7
-0
src/share/classes/sun/security/krb5/internal/ccache/CCacheInputStream.java
.../sun/security/krb5/internal/ccache/CCacheInputStream.java
+27
-16
src/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java
...n/security/krb5/internal/ccache/FileCredentialsCache.java
+5
-2
src/share/classes/sun/security/pkcs11/P11Cipher.java
src/share/classes/sun/security/pkcs11/P11Cipher.java
+5
-4
src/share/classes/sun/security/ssl/Krb5Helper.java
src/share/classes/sun/security/ssl/Krb5Helper.java
+1
-1
src/share/classes/sun/security/ssl/Krb5Proxy.java
src/share/classes/sun/security/ssl/Krb5Proxy.java
+1
-1
src/share/classes/sun/security/ssl/krb5/Krb5ProxyImpl.java
src/share/classes/sun/security/ssl/krb5/Krb5ProxyImpl.java
+1
-1
src/share/demo/nio/zipfs/Demo.java
src/share/demo/nio/zipfs/Demo.java
+59
-6
src/share/demo/nio/zipfs/README.txt
src/share/demo/nio/zipfs/README.txt
+3
-3
src/share/demo/nio/zipfs/com/sun/nio/zipfs/JarFileSystemProvider.java
...mo/nio/zipfs/com/sun/nio/zipfs/JarFileSystemProvider.java
+17
-0
src/share/demo/nio/zipfs/com/sun/nio/zipfs/ZipConstants.java
src/share/demo/nio/zipfs/com/sun/nio/zipfs/ZipConstants.java
+20
-30
src/share/demo/nio/zipfs/com/sun/nio/zipfs/ZipDirectoryStream.java
.../demo/nio/zipfs/com/sun/nio/zipfs/ZipDirectoryStream.java
+1
-2
src/share/demo/nio/zipfs/com/sun/nio/zipfs/ZipFileAttributeView.java
...emo/nio/zipfs/com/sun/nio/zipfs/ZipFileAttributeView.java
+4
-1
src/share/demo/nio/zipfs/com/sun/nio/zipfs/ZipFileAttributes.java
...e/demo/nio/zipfs/com/sun/nio/zipfs/ZipFileAttributes.java
+9
-10
src/share/demo/nio/zipfs/com/sun/nio/zipfs/ZipFileSystem.java
...share/demo/nio/zipfs/com/sun/nio/zipfs/ZipFileSystem.java
+694
-584
src/share/demo/nio/zipfs/com/sun/nio/zipfs/ZipFileSystemProvider.java
...mo/nio/zipfs/com/sun/nio/zipfs/ZipFileSystemProvider.java
+19
-6
src/share/demo/nio/zipfs/com/sun/nio/zipfs/ZipInfo.java
src/share/demo/nio/zipfs/com/sun/nio/zipfs/ZipInfo.java
+156
-65
src/share/demo/nio/zipfs/com/sun/nio/zipfs/ZipPath.java
src/share/demo/nio/zipfs/com/sun/nio/zipfs/ZipPath.java
+8
-11
src/share/demo/nio/zipfs/com/sun/nio/zipfs/ZipUtils.java
src/share/demo/nio/zipfs/com/sun/nio/zipfs/ZipUtils.java
+25
-3
src/share/lib/security/sunpkcs11-solaris.cfg
src/share/lib/security/sunpkcs11-solaris.cfg
+4
-0
src/share/native/java/util/zip/zip_util.c
src/share/native/java/util/zip/zip_util.c
+17
-8
src/share/native/java/util/zip/zlib-1.2.3/compress.c
src/share/native/java/util/zip/zlib-1.2.3/compress.c
+1
-1
src/share/native/java/util/zip/zlib-1.2.3/uncompr.c
src/share/native/java/util/zip/zlib-1.2.3/uncompr.c
+1
-1
test/ProblemList.txt
test/ProblemList.txt
+0
-4
test/com/sun/net/httpserver/Test.java
test/com/sun/net/httpserver/Test.java
+12
-0
test/com/sun/net/httpserver/Test1.java
test/com/sun/net/httpserver/Test1.java
+1
-0
test/com/sun/net/httpserver/Test13.java
test/com/sun/net/httpserver/Test13.java
+13
-3
test/com/sun/net/httpserver/bugs/6725892/Test.java
test/com/sun/net/httpserver/bugs/6725892/Test.java
+266
-0
test/com/sun/net/httpserver/bugs/B6401598.java
test/com/sun/net/httpserver/bugs/B6401598.java
+1
-1
test/demo/zipfs/ZipFSTester.java
test/demo/zipfs/ZipFSTester.java
+2
-9
test/java/nio/Buffer/StringCharBufferSliceTest.java
test/java/nio/Buffer/StringCharBufferSliceTest.java
+18
-2
test/java/security/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh
...urity/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh
+11
-5
test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh
test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh
+5
-3
test/java/util/concurrent/Executors/AutoShutdown.java
test/java/util/concurrent/Executors/AutoShutdown.java
+27
-8
test/java/util/jar/JarInputStream/BadSignedJar.jar
test/java/util/jar/JarInputStream/BadSignedJar.jar
+0
-0
test/java/util/jar/JarInputStream/TestIndexedJarWithBadSignature.java
...il/jar/JarInputStream/TestIndexedJarWithBadSignature.java
+57
-0
test/sun/nio/cs/CheckHistoricalNames.java
test/sun/nio/cs/CheckHistoricalNames.java
+3
-1
test/sun/security/krb5/UnknownCCEntry.java
test/sun/security/krb5/UnknownCCEntry.java
+219
-0
test/sun/security/pkcs11/Cipher/TestPKCS5PaddingError.java
test/sun/security/pkcs11/Cipher/TestPKCS5PaddingError.java
+132
-0
test/sun/security/pkcs11/KeyGenerator/TestKeyGenerator.java
test/sun/security/pkcs11/KeyGenerator/TestKeyGenerator.java
+5
-5
未找到文件。
make/mkdemo/nio/zipfs/Makefile
浏览文件 @
6b5f4a3d
...
...
@@ -42,3 +42,10 @@ DEMO_DESTDIR = $(DEMODIR)/nio/$(DEMONAME)
#
include
$(BUILDDIR)/common/Demo.gmk
#EXTJAR = $(EXTDIR)/$(DEMONAME).jar
#
#all : build $(EXTJAR)
#
#$(EXTJAR) : $(DEMO_JAR)
# $(prep-target)
# $(CP) $(DEMO_JAR) $(EXTJAR)
make/sun/nio/cs/FILES_java.gmk
浏览文件 @
6b5f4a3d
...
...
@@ -85,6 +85,7 @@ FILES_src = \
sun/io/ByteToCharCp500.java \
sun/io/ByteToCharCp737.java \
sun/io/ByteToCharCp775.java \
sun/io/ByteToCharCp833.java \
sun/io/ByteToCharCp834.java \
sun/io/ByteToCharCp838.java \
sun/io/ByteToCharCp850.java \
...
...
@@ -214,6 +215,7 @@ FILES_src = \
sun/io/CharToByteCp500.java \
sun/io/CharToByteCp737.java \
sun/io/CharToByteCp775.java \
sun/io/CharToByteCp833.java \
sun/io/CharToByteCp834.java \
sun/io/CharToByteCp838.java \
sun/io/CharToByteCp850.java \
...
...
@@ -331,6 +333,7 @@ FILES_gen_extcs = \
sun/nio/cs/ext/IBM420.java \
sun/nio/cs/ext/IBM424.java \
sun/nio/cs/ext/IBM500.java \
sun/nio/cs/ext/IBM833.java \
sun/nio/cs/ext/IBM838.java \
sun/nio/cs/ext/IBM856.java \
sun/nio/cs/ext/IBM860.java \
...
...
make/tools/CharsetMapping/IBM833.c2b
0 → 100644
浏览文件 @
6b5f4a3d
0x5A U+FF01
0x7F U+FF02
0x7B U+FF03
0x5B U+FF04
0x6C U+FF05
0x50 U+FF06
0x7D U+FF07
0x4D U+FF08
0x5D U+FF09
0x5C U+FF0A
0x4E U+FF0B
0x6B U+FF0C
0x60 U+FF0D
0x4B U+FF0E
0x61 U+FF0F
0xF0 U+FF10
0xF1 U+FF11
0xF2 U+FF12
0xF3 U+FF13
0xF4 U+FF14
0xF5 U+FF15
0xF6 U+FF16
0xF7 U+FF17
0xF8 U+FF18
0xF9 U+FF19
0x7A U+FF1A
0x5E U+FF1B
0x4C U+FF1C
0x7E U+FF1D
0x6E U+FF1E
0x6F U+FF1F
0x7C U+FF20
0xC1 U+FF21
0xC2 U+FF22
0xC3 U+FF23
0xC4 U+FF24
0xC5 U+FF25
0xC6 U+FF26
0xC7 U+FF27
0xC8 U+FF28
0xC9 U+FF29
0xD1 U+FF2A
0xD2 U+FF2B
0xD3 U+FF2C
0xD4 U+FF2D
0xD5 U+FF2E
0xD6 U+FF2F
0xD7 U+FF30
0xD8 U+FF31
0xD9 U+FF32
0xE2 U+FF33
0xE3 U+FF34
0xE4 U+FF35
0xE5 U+FF36
0xE6 U+FF37
0xE7 U+FF38
0xE8 U+FF39
0xE9 U+FF3A
0x70 U+FF3B
0xB2 U+FF3C
0x80 U+FF3D
0xB0 U+FF3E
0x6D U+FF3F
0x79 U+FF40
0x81 U+FF41
0x82 U+FF42
0x83 U+FF43
0x84 U+FF44
0x85 U+FF45
0x86 U+FF46
0x87 U+FF47
0x88 U+FF48
0x89 U+FF49
0x91 U+FF4A
0x92 U+FF4B
0x93 U+FF4C
0x94 U+FF4D
0x95 U+FF4E
0x96 U+FF4F
0x97 U+FF50
0x98 U+FF51
0x99 U+FF52
0xA2 U+FF53
0xA3 U+FF54
0xA4 U+FF55
0xA5 U+FF56
0xA6 U+FF57
0xA7 U+FF58
0xA8 U+FF59
0xA9 U+FF5A
0xC0 U+FF5B
0x4F U+FF5C
0xD0 U+FF5D
0xA1 U+FF5E
make/tools/CharsetMapping/IBM833.map
0 → 100644
浏览文件 @
6b5f4a3d
0x00 U+0000
0x01 U+0001
0x02 U+0002
0x03 U+0003
0x37 U+0004
0x2D U+0005
0x2E U+0006
0x2F U+0007
0x16 U+0008
0x05 U+0009
0x25 U+000A
0x0B U+000B
0x0C U+000C
0x0D U+000D
0x0E U+000E
0x0F U+000F
0x10 U+0010
0x11 U+0011
0x12 U+0012
0x13 U+0013
0x3C U+0014
0x3D U+0015
0x32 U+0016
0x26 U+0017
0x18 U+0018
0x19 U+0019
0x3F U+001A
0x27 U+001B
0x1C U+001C
0x1D U+001D
0x1E U+001E
0x1F U+001F
0x40 U+0020
0x5A U+0021
0x7F U+0022
0x7B U+0023
0x5B U+0024
0x6C U+0025
0x50 U+0026
0x7D U+0027
0x4D U+0028
0x5D U+0029
0x5C U+002A
0x4E U+002B
0x6B U+002C
0x60 U+002D
0x4B U+002E
0x61 U+002F
0xF0 U+0030
0xF1 U+0031
0xF2 U+0032
0xF3 U+0033
0xF4 U+0034
0xF5 U+0035
0xF6 U+0036
0xF7 U+0037
0xF8 U+0038
0xF9 U+0039
0x7A U+003A
0x5E U+003B
0x4C U+003C
0x7E U+003D
0x6E U+003E
0x6F U+003F
0x7C U+0040
0xC1 U+0041
0xC2 U+0042
0xC3 U+0043
0xC4 U+0044
0xC5 U+0045
0xC6 U+0046
0xC7 U+0047
0xC8 U+0048
0xC9 U+0049
0xD1 U+004A
0xD2 U+004B
0xD3 U+004C
0xD4 U+004D
0xD5 U+004E
0xD6 U+004F
0xD7 U+0050
0xD8 U+0051
0xD9 U+0052
0xE2 U+0053
0xE3 U+0054
0xE4 U+0055
0xE5 U+0056
0xE6 U+0057
0xE7 U+0058
0xE8 U+0059
0xE9 U+005A
0x70 U+005B
0xB2 U+005C
0x80 U+005D
0xB0 U+005E
0x6D U+005F
0x79 U+0060
0x81 U+0061
0x82 U+0062
0x83 U+0063
0x84 U+0064
0x85 U+0065
0x86 U+0066
0x87 U+0067
0x88 U+0068
0x89 U+0069
0x91 U+006A
0x92 U+006B
0x93 U+006C
0x94 U+006D
0x95 U+006E
0x96 U+006F
0x97 U+0070
0x98 U+0071
0x99 U+0072
0xA2 U+0073
0xA3 U+0074
0xA4 U+0075
0xA5 U+0076
0xA6 U+0077
0xA7 U+0078
0xA8 U+0079
0xA9 U+007A
0xC0 U+007B
0x4F U+007C
0xD0 U+007D
0xA1 U+007E
0x07 U+007F
0x20 U+0080
0x21 U+0081
0x22 U+0082
0x23 U+0083
0x24 U+0084
0x15 U+0085
0x06 U+0086
0x17 U+0087
0x28 U+0088
0x29 U+0089
0x2A U+008A
0x2B U+008B
0x2C U+008C
0x09 U+008D
0x0A U+008E
0x1B U+008F
0x30 U+0090
0x31 U+0091
0x1A U+0092
0x33 U+0093
0x34 U+0094
0x35 U+0095
0x36 U+0096
0x08 U+0097
0x38 U+0098
0x39 U+0099
0x3A U+009A
0x3B U+009B
0x04 U+009C
0x14 U+009D
0x3E U+009E
0xFF U+009F
0x4A U+00A2
0x6A U+00A6
0x5F U+00AC
0xA0 U+203E
0xE0 U+20A9
0x42 U+FFA0
0x43 U+FFA1
0x44 U+FFA2
0x45 U+FFA3
0x46 U+FFA4
0x47 U+FFA5
0x48 U+FFA6
0x49 U+FFA7
0x52 U+FFA8
0x53 U+FFA9
0x54 U+FFAA
0x55 U+FFAB
0x56 U+FFAC
0x57 U+FFAD
0x58 U+FFAE
0x59 U+FFAF
0x62 U+FFB0
0x63 U+FFB1
0x64 U+FFB2
0x65 U+FFB3
0x66 U+FFB4
0x67 U+FFB5
0x68 U+FFB6
0x69 U+FFB7
0x72 U+FFB8
0x73 U+FFB9
0x74 U+FFBA
0x75 U+FFBB
0x76 U+FFBC
0x77 U+FFBD
0x78 U+FFBE
0x8A U+FFC2
0x8B U+FFC3
0x8C U+FFC4
0x8D U+FFC5
0x8E U+FFC6
0x8F U+FFC7
0x9A U+FFCA
0x9B U+FFCB
0x9C U+FFCC
0x9D U+FFCD
0x9E U+FFCE
0x9F U+FFCF
0xAA U+FFD2
0xAB U+FFD3
0xAC U+FFD4
0xAD U+FFD5
0xAE U+FFD6
0xAF U+FFD7
0xBA U+FFDA
0xBB U+FFDB
0xBC U+FFDC
make/tools/CharsetMapping/extsbcs
浏览文件 @
6b5f4a3d
...
...
@@ -32,6 +32,7 @@ IBM297 IBM297 Cp297 false sun.nio.cs.ext
IBM420 IBM420 Cp420 false sun.nio.cs.ext
IBM424 IBM424 Cp424 false sun.nio.cs.ext
IBM500 IBM500 Cp500 false sun.nio.cs.ext
IBM833 IBM833 Cp833 false sun.nio.cs.ext
IBM838 IBM-Thai Cp838 false sun.nio.cs.ext
IBM856 x-IBM856 Cp856 false sun.nio.cs.ext
IBM860 IBM860 Cp860 false sun.nio.cs.ext
...
...
src/share/classes/com/sun/net/httpserver/HttpsConfigurator.java
浏览文件 @
6b5f4a3d
...
...
@@ -91,6 +91,7 @@ public class HttpsConfigurator {
return
context
;
}
//BEGIN_TIGER_EXCLUDE
/**
* Called by the HttpsServer to configure the parameters
* for a https connection currently being established.
...
...
@@ -111,4 +112,5 @@ public class HttpsConfigurator {
public
void
configure
(
HttpsParameters
params
)
{
params
.
setSSLParameters
(
getSSLContext
().
getDefaultSSLParameters
());
}
//END_TIGER_EXCLUDE
}
src/share/classes/com/sun/net/httpserver/HttpsParameters.java
浏览文件 @
6b5f4a3d
...
...
@@ -25,7 +25,9 @@
package
com.sun.net.httpserver
;
import
java.net.InetSocketAddress
;
//BEGIN_TIGER_EXCLUDE
import
javax.net.ssl.SSLParameters
;
//END_TIGER_EXCLUDE
/**
* Represents the set of parameters for each https
...
...
@@ -67,6 +69,7 @@ public abstract class HttpsParameters {
*/
public
abstract
InetSocketAddress
getClientAddress
();
//BEGIN_TIGER_EXCLUDE
/**
* Sets the SSLParameters to use for this HttpsParameters.
* The parameters must be supported by the SSLContext contained
...
...
@@ -79,6 +82,7 @@ public abstract class HttpsParameters {
* invalid or unsupported.
*/
public
abstract
void
setSSLParameters
(
SSLParameters
params
);
//END_TIGER_EXCLUDE
/**
* Returns a copy of the array of ciphersuites or null if none
...
...
src/share/classes/com/sun/rowset/RowSetResourceBundle.properties
浏览文件 @
6b5f4a3d
#
# Copyright (c) 2005, 20
06
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2005, 20
10
, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
...
...
@@ -140,7 +140,7 @@ syncrsimpl.valtores = Value to be resolved can either be in the database or in c
#WebRowSetXmlReader exception
wrsxmlreader.invalidcp
=
End of RowSet reached. Invalid cursor position
wrsxmlreader.readxml
=
readXML : {0}
wrsxmlreader.parseerr
=
** Parsing Error : {0} , line : {
0} , uri : {0
}
wrsxmlreader.parseerr
=
** Parsing Error : {0} , line : {
1} , uri : {2
}
#WebRowSetXmlWriter exceptions
wrsxmlwriter.ioex
=
IOException : {0}
...
...
@@ -151,7 +151,7 @@ wsrxmlwriter.notproper = Not a proper type
#XmlReaderContentHandler exceptions
xmlrch.errmap
=
Error setting Map : {0}
xmlrch.errmetadata
=
Error setting metadata : {0}
xmlrch.errinsert
=
Error inserting values : {0}
xmlrch.errinsert
val
=
Error inserting values : {0}
xmlrch.errconstr
=
Error constructing row : {0}
xmlrch.errdel
=
Error deleting row : {0}
xmlrch.errinsert
=
Error constructing insert row : {0}
...
...
@@ -161,7 +161,7 @@ xmlrch.errupdrow = Error updating row : {0}
xmlrch.chars
=
characters :
xmlrch.badvalue
=
Bad value ; non-nullable property
xmlrch.badvalue1
=
Bad value ; non-nullable metadata
xmlrch.warning
=
** Warning : {0} , line : {
0} , uri : {0
}
xmlrch.warning
=
** Warning : {0} , line : {
1} , uri : {2
}
#RIOptimisticProvider Exceptions
riop.locking
=
Locking classification is not supported
...
...
src/share/classes/com/sun/rowset/internal/XmlReaderContentHandler.java
浏览文件 @
6b5f4a3d
...
...
@@ -738,7 +738,7 @@ public class XmlReaderContentHandler extends DefaultHandler {
// columnValue now need to be reset to the empty string
columnValue
=
""
;
}
catch
(
SQLException
ex
)
{
throw
new
SAXException
(
MessageFormat
.
format
(
resBundle
.
handleGetObject
(
"xmlrch.errinsert"
).
toString
(),
ex
.
getMessage
()));
throw
new
SAXException
(
MessageFormat
.
format
(
resBundle
.
handleGetObject
(
"xmlrch.errinsert
val
"
).
toString
(),
ex
.
getMessage
()));
}
break
;
case
RowTag:
...
...
src/share/classes/java/io/BufferedInputStream.java
浏览文件 @
6b5f4a3d
...
...
@@ -395,7 +395,11 @@ class BufferedInputStream extends FilterInputStream {
* or an I/O error occurs.
*/
public
synchronized
int
available
()
throws
IOException
{
return
getInIfOpen
().
available
()
+
(
count
-
pos
);
int
n
=
count
-
pos
;
int
avail
=
getInIfOpen
().
available
();
return
n
>
(
Integer
.
MAX_VALUE
-
avail
)
?
Integer
.
MAX_VALUE
:
n
+
avail
;
}
/**
...
...
src/share/classes/java/io/PushbackInputStream.java
浏览文件 @
6b5f4a3d
...
...
@@ -273,7 +273,11 @@ class PushbackInputStream extends FilterInputStream {
*/
public
int
available
()
throws
IOException
{
ensureOpen
();
return
(
buf
.
length
-
pos
)
+
super
.
available
();
int
n
=
buf
.
length
-
pos
;
int
avail
=
super
.
available
();
return
n
>
(
Integer
.
MAX_VALUE
-
avail
)
?
Integer
.
MAX_VALUE
:
n
+
avail
;
}
/**
...
...
src/share/classes/java/lang/Readable.java
浏览文件 @
6b5f4a3d
...
...
@@ -44,11 +44,11 @@ public interface Readable {
* rewinding of the buffer is performed.
*
* @param cb the buffer to read characters into
* @return
@return The number of <tt>char</tt>
values added to the buffer,
* @return
The number of {@code char}
values added to the buffer,
* or -1 if this source of characters is at its end
* @throws IOException if an I/O error occurs
* @throws NullPointerException if cb is null
* @throws ReadOnlyBufferException if cb is a read only buffer
* @throws
java.nio.
ReadOnlyBufferException if cb is a read only buffer
*/
public
int
read
(
java
.
nio
.
CharBuffer
cb
)
throws
IOException
;
...
...
src/share/classes/java/nio/StringCharBuffer.java
浏览文件 @
6b5f4a3d
...
...
@@ -47,7 +47,7 @@ class StringCharBuffer // package-private
0
,
this
.
remaining
(),
this
.
remaining
(),
this
.
position
());
offset
+
this
.
position
());
}
private
StringCharBuffer
(
CharSequence
s
,
...
...
src/share/classes/java/sql/SQLPermission.java
浏览文件 @
6b5f4a3d
...
...
@@ -84,7 +84,7 @@ import java.security.*;
* {@code setJNDIContext} and {@code setLogger}</td>
* <td>Permits an application to specify the JNDI context from which the
* {@code SyncProvider} implementations can be retrieved from and the logging
* object to be used by the
{@code
SyncProvider} implementation.</td>
* object to be used by the
{@code
SyncProvider} implementation.</td>
* </tr>
*
* <tr>
...
...
src/share/classes/java/util/Formatter.java
浏览文件 @
6b5f4a3d
...
...
@@ -1581,6 +1581,7 @@ import sun.misc.FormattedFloatingDecimal;
* instance of the Java virtual machine.
*
* <tr><td valign="top">{@code 'Z'}
* <td valign="top"> <tt>'\u005a'</tt>
* <td> A string representing the abbreviation for the time zone. This
* value will be adjusted as necessary for Daylight Saving Time. For
* {@code long}, {@link Long}, and {@link Date} the time zone used is
...
...
src/share/classes/java/util/jar/JarInputStream.java
浏览文件 @
6b5f4a3d
...
...
@@ -28,6 +28,7 @@ package java.util.jar;
import
java.util.zip.*
;
import
java.io.*
;
import
sun.security.util.ManifestEntryVerifier
;
import
sun.misc.JarIndex
;
/**
* The <code>JarInputStream</code> class is used to read the contents of
...
...
@@ -47,7 +48,8 @@ class JarInputStream extends ZipInputStream {
private
JarEntry
first
;
private
JarVerifier
jv
;
private
ManifestEntryVerifier
mev
;
private
final
boolean
doVerify
;
private
boolean
tryManifest
;
/**
* Creates a new <code>JarInputStream</code> and reads the optional
...
...
@@ -72,25 +74,33 @@ class JarInputStream extends ZipInputStream {
*/
public
JarInputStream
(
InputStream
in
,
boolean
verify
)
throws
IOException
{
super
(
in
);
JarEntry
e
=
(
JarEntry
)
super
.
getNextEntry
()
;
this
.
doVerify
=
verify
;
// This implementation assumes the META-INF/MANIFEST.MF entry
// should be either the first or the second entry (when preceded
// by the dir META-INF/). It skips the META-INF/ and then
// "consumes" the MANIFEST.MF to initialize the Manifest object.
JarEntry
e
=
(
JarEntry
)
super
.
getNextEntry
();
if
(
e
!=
null
&&
e
.
getName
().
equalsIgnoreCase
(
"META-INF/"
))
e
=
(
JarEntry
)
super
.
getNextEntry
();
first
=
checkManifest
(
e
);
}
private
JarEntry
checkManifest
(
JarEntry
e
)
throws
IOException
{
if
(
e
!=
null
&&
JarFile
.
MANIFEST_NAME
.
equalsIgnoreCase
(
e
.
getName
()))
{
man
=
new
Manifest
();
byte
bytes
[]
=
getBytes
(
new
BufferedInputStream
(
this
));
man
.
read
(
new
ByteArrayInputStream
(
bytes
));
//man.read(new BufferedInputStream(this));
closeEntry
();
if
(
v
erify
)
{
if
(
doV
erify
)
{
jv
=
new
JarVerifier
(
bytes
);
mev
=
new
ManifestEntryVerifier
(
man
);
}
first
=
getNextJarEntry
();
}
else
{
first
=
e
;
return
(
JarEntry
)
super
.
getNextEntry
();
}
return
e
;
}
private
byte
[]
getBytes
(
InputStream
is
)
...
...
@@ -98,10 +108,7 @@ class JarInputStream extends ZipInputStream {
{
byte
[]
buffer
=
new
byte
[
8192
];
ByteArrayOutputStream
baos
=
new
ByteArrayOutputStream
(
2048
);
int
n
;
baos
.
reset
();
while
((
n
=
is
.
read
(
buffer
,
0
,
buffer
.
length
))
!=
-
1
)
{
baos
.
write
(
buffer
,
0
,
n
);
}
...
...
@@ -133,8 +140,14 @@ class JarInputStream extends ZipInputStream {
JarEntry
e
;
if
(
first
==
null
)
{
e
=
(
JarEntry
)
super
.
getNextEntry
();
if
(
tryManifest
)
{
e
=
checkManifest
(
e
);
tryManifest
=
false
;
}
}
else
{
e
=
first
;
if
(
first
.
getName
().
equalsIgnoreCase
(
JarIndex
.
INDEX_NAME
))
tryManifest
=
true
;
first
=
null
;
}
if
(
jv
!=
null
&&
e
!=
null
)
{
...
...
src/share/classes/sun/io/ByteToCharCp833.java
0 → 100644
浏览文件 @
6b5f4a3d
/*
* Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package
sun.io
;
import
sun.nio.cs.ext.IBM833
;
public
class
ByteToCharCp833
extends
ByteToCharSingleByte
{
private
final
static
IBM833
nioCoder
=
new
IBM833
();
public
String
getCharacterEncoding
()
{
return
"Cp833"
;
}
public
ByteToCharCp833
()
{
super
.
byteToCharTable
=
nioCoder
.
getDecoderSingleByteMappings
();
}
}
src/share/classes/sun/io/CharToByteCp833.java
0 → 100644
浏览文件 @
6b5f4a3d
/*
* Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package
sun.io
;
import
sun.nio.cs.ext.IBM833
;
public
class
CharToByteCp833
extends
CharToByteSingleByte
{
private
final
static
IBM833
nioCoder
=
new
IBM833
();
public
String
getCharacterEncoding
()
{
return
"Cp833"
;
}
public
CharToByteCp833
()
{
super
.
mask1
=
0xFF00
;
super
.
mask2
=
0x00FF
;
super
.
shift
=
8
;
super
.
index1
=
nioCoder
.
getEncoderIndex1
();
super
.
index2
=
nioCoder
.
getEncoderIndex2
();
}
}
src/share/classes/sun/io/CharacterEncoding.java
浏览文件 @
6b5f4a3d
/*
* Copyright (c) 1996, 20
06
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1996, 20
10
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -406,6 +406,11 @@ public class CharacterEncoding {
aliasTable
.
put
(
"cp775"
,
"Cp775"
);
aliasTable
.
put
(
"775"
,
"Cp775"
);
aliasTable
.
put
(
"ibm833"
,
"Cp833"
);
aliasTable
.
put
(
"ibm-833"
,
"Cp833"
);
aliasTable
.
put
(
"cp833"
,
"Cp833"
);
aliasTable
.
put
(
"833"
,
"Cp833"
);
aliasTable
.
put
(
"ibm834"
,
"Cp834"
);
aliasTable
.
put
(
"ibm-834"
,
"Cp834"
);
aliasTable
.
put
(
"cp834"
,
"Cp834"
);
...
...
src/share/classes/sun/net/httpserver/ChunkedInputStream.java
浏览文件 @
6b5f4a3d
...
...
@@ -110,6 +110,7 @@ class ChunkedInputStream extends LeftOverInputStream {
if
(
remaining
==
0
)
{
eof
=
true
;
consumeCRLF
();
t
.
getServerImpl
().
requestCompleted
(
t
.
getConnection
());
return
-
1
;
}
needToReadHeader
=
false
;
...
...
src/share/classes/sun/net/httpserver/Event.java
浏览文件 @
6b5f4a3d
...
...
@@ -40,5 +40,7 @@ class Event {
class
WriteFinishedEvent
extends
Event
{
WriteFinishedEvent
(
ExchangeImpl
t
)
{
super
(
t
);
assert
!
t
.
writefinished
;
t
.
writefinished
=
true
;
}
}
src/share/classes/sun/net/httpserver/ExchangeImpl.java
浏览文件 @
6b5f4a3d
...
...
@@ -38,6 +38,7 @@ class ExchangeImpl {
Headers
reqHdrs
,
rspHdrs
;
Request
req
;
String
method
;
boolean
writefinished
;
URI
uri
;
HttpConnection
connection
;
long
reqContentLen
;
...
...
src/share/classes/sun/net/httpserver/FixedLengthInputStream.java
浏览文件 @
6b5f4a3d
...
...
@@ -56,6 +56,9 @@ class FixedLengthInputStream extends LeftOverInputStream {
int
n
=
in
.
read
(
b
,
off
,
len
);
if
(
n
>
-
1
)
{
remaining
-=
n
;
if
(
remaining
==
0
)
{
t
.
getServerImpl
().
requestCompleted
(
t
.
getConnection
());
}
}
return
n
;
}
...
...
src/share/classes/sun/net/httpserver/HttpConnection.java
浏览文件 @
6b5f4a3d
...
...
@@ -55,10 +55,15 @@ class HttpConnection {
SelectionKey
selectionKey
;
String
protocol
;
long
time
;
volatile
long
creationTime
;
// time this connection was created
volatile
long
rspStartedTime
;
// time we started writing the response
int
remaining
;
boolean
closed
=
false
;
Logger
logger
;
public
enum
State
{
IDLE
,
REQUEST
,
RESPONSE
};
volatile
State
state
;
public
String
toString
()
{
String
s
=
null
;
if
(
chan
!=
null
)
{
...
...
@@ -78,6 +83,14 @@ class HttpConnection {
context
=
ctx
;
}
State
getState
()
{
return
state
;
}
void
setState
(
State
s
)
{
state
=
s
;
}
void
setParameters
(
InputStream
in
,
OutputStream
rawout
,
SocketChannel
chan
,
SSLEngine
engine
,
SSLStreams
sslStreams
,
SSLContext
sslContext
,
String
protocol
,
...
...
src/share/classes/sun/net/httpserver/Request.java
浏览文件 @
6b5f4a3d
...
...
@@ -201,32 +201,22 @@ class Request {
static
class
ReadStream
extends
InputStream
{
SocketChannel
channel
;
SelectorCache
sc
;
Selector
selector
;
ByteBuffer
chanbuf
;
SelectionKey
key
;
int
available
;
byte
[]
one
;
boolean
closed
=
false
,
eof
=
false
;
private
boolean
closed
=
false
,
eof
=
false
;
ByteBuffer
markBuf
;
/* reads may be satisifed from this buffer */
boolean
marked
;
boolean
reset
;
int
readlimit
;
static
long
readTimeout
;
ServerImpl
server
;
static
{
readTimeout
=
ServerConfig
.
getReadTimeout
();
}
final
static
int
BUFSIZE
=
8
*
1024
;
public
ReadStream
(
ServerImpl
server
,
SocketChannel
chan
)
throws
IOException
{
this
.
channel
=
chan
;
this
.
server
=
server
;
sc
=
SelectorCache
.
getSelectorCache
();
selector
=
sc
.
getSelector
();
chanbuf
=
ByteBuffer
.
allocate
(
8
*
1024
);
key
=
chan
.
register
(
selector
,
SelectionKey
.
OP_READ
);
available
=
0
;
chanbuf
=
ByteBuffer
.
allocate
(
BUFSIZE
);
chanbuf
.
clear
();
one
=
new
byte
[
1
];
closed
=
marked
=
reset
=
false
;
}
...
...
@@ -255,6 +245,12 @@ class Request {
return
-
1
;
}
assert
channel
.
isBlocking
();
if
(
off
<
0
||
srclen
<
0
||
srclen
>
(
b
.
length
-
off
))
{
throw
new
IndexOutOfBoundsException
();
}
if
(
reset
)
{
/* satisfy from markBuf */
canreturn
=
markBuf
.
remaining
();
willreturn
=
canreturn
>
srclen
?
srclen
:
canreturn
;
...
...
@@ -263,17 +259,19 @@ class Request {
reset
=
false
;
}
}
else
{
/* satisfy from channel */
canreturn
=
available
();
while
(
canreturn
==
0
&&
!
eof
)
{
block
();
canreturn
=
available
();
chanbuf
.
clear
();
if
(
srclen
<
BUFSIZE
)
{
chanbuf
.
limit
(
srclen
);
}
if
(
eof
)
{
do
{
willreturn
=
channel
.
read
(
chanbuf
);
}
while
(
willreturn
==
0
);
if
(
willreturn
==
-
1
)
{
eof
=
true
;
return
-
1
;
}
willreturn
=
canreturn
>
srclen
?
srclen
:
canreturn
;
chanbuf
.
flip
()
;
chanbuf
.
get
(
b
,
off
,
willreturn
);
available
-=
willreturn
;
if
(
marked
)
{
/* copy into markBuf */
try
{
...
...
@@ -286,6 +284,11 @@ class Request {
return
willreturn
;
}
public
boolean
markSupported
()
{
return
true
;
}
/* Does not query the OS socket */
public
synchronized
int
available
()
throws
IOException
{
if
(
closed
)
throw
new
IOException
(
"Stream is closed"
);
...
...
@@ -296,36 +299,7 @@ class Request {
if
(
reset
)
return
markBuf
.
remaining
();
if
(
available
>
0
)
return
available
;
chanbuf
.
clear
();
available
=
channel
.
read
(
chanbuf
);
if
(
available
>
0
)
{
chanbuf
.
flip
();
}
else
if
(
available
==
-
1
)
{
eof
=
true
;
available
=
0
;
}
return
available
;
}
/**
* block() only called when available==0 and buf is empty
*/
private
synchronized
void
block
()
throws
IOException
{
long
currtime
=
server
.
getTime
();
long
maxtime
=
currtime
+
readTimeout
;
while
(
currtime
<
maxtime
)
{
if
(
selector
.
select
(
readTimeout
)
==
1
)
{
selector
.
selectedKeys
().
clear
();
available
();
return
;
}
currtime
=
server
.
getTime
();
}
throw
new
SocketTimeoutException
(
"no data received"
);
return
chanbuf
.
remaining
();
}
public
void
close
()
throws
IOException
{
...
...
@@ -333,8 +307,6 @@ class Request {
return
;
}
channel
.
close
();
selector
.
selectNow
();
sc
.
freeSelector
(
selector
);
closed
=
true
;
}
...
...
@@ -362,23 +334,14 @@ class Request {
SocketChannel
channel
;
ByteBuffer
buf
;
SelectionKey
key
;
SelectorCache
sc
;
Selector
selector
;
boolean
closed
;
byte
[]
one
;
ServerImpl
server
;
static
long
writeTimeout
;
static
{
writeTimeout
=
ServerConfig
.
getWriteTimeout
();
}
public
WriteStream
(
ServerImpl
server
,
SocketChannel
channel
)
throws
IOException
{
this
.
channel
=
channel
;
this
.
server
=
server
;
sc
=
SelectorCache
.
getSelectorCache
();
selector
=
sc
.
getSelector
();
key
=
channel
.
register
(
selector
,
SelectionKey
.
OP_WRITE
);
assert
channel
.
isBlocking
();
closed
=
false
;
one
=
new
byte
[
1
];
buf
=
ByteBuffer
.
allocate
(
4096
);
...
...
@@ -411,31 +374,14 @@ class Request {
l
-=
n
;
if
(
l
==
0
)
return
;
block
();
}
}
void
block
()
throws
IOException
{
long
currtime
=
server
.
getTime
();
long
maxtime
=
currtime
+
writeTimeout
;
while
(
currtime
<
maxtime
)
{
if
(
selector
.
select
(
writeTimeout
)
==
1
)
{
selector
.
selectedKeys
().
clear
();
return
;
}
currtime
=
server
.
getTime
();
}
throw
new
SocketTimeoutException
(
"write blocked too long"
);
}
public
void
close
()
throws
IOException
{
if
(
closed
)
return
;
//server.logStackTrace ("Request.OS.close: isOpen="+channel.isOpen());
channel
.
close
();
selector
.
selectNow
();
sc
.
freeSelector
(
selector
);
closed
=
true
;
}
}
...
...
src/share/classes/sun/net/httpserver/SSLStreams.java
浏览文件 @
6b5f4a3d
...
...
@@ -53,8 +53,6 @@ class SSLStreams {
EngineWrapper
wrapper
;
OutputStream
os
;
InputStream
is
;
static
long
readTimeout
=
ServerConfig
.
getReadTimeout
();
static
long
writeTimeout
=
ServerConfig
.
getWriteTimeout
();
/* held by thread doing the hand-shake on this connection */
Lock
handshaking
=
new
ReentrantLock
();
...
...
@@ -77,10 +75,13 @@ class SSLStreams {
if
(
cfg
!=
null
)
{
Parameters
params
=
new
Parameters
(
cfg
,
addr
);
cfg
.
configure
(
params
);
//BEGIN_TIGER_EXCLUDE
SSLParameters
sslParams
=
params
.
getSSLParameters
();
if
(
sslParams
!=
null
)
{
engine
.
setSSLParameters
(
sslParams
);
}
else
{
}
else
//END_TIGER_EXCLUDE
{
/* tiger compatibility */
if
(
params
.
getCipherSuites
()
!=
null
)
{
try
{
...
...
@@ -104,7 +105,6 @@ class SSLStreams {
class
Parameters
extends
HttpsParameters
{
InetSocketAddress
addr
;
SSLParameters
params
;
HttpsConfigurator
cfg
;
Parameters
(
HttpsConfigurator
cfg
,
InetSocketAddress
addr
)
{
...
...
@@ -117,12 +117,15 @@ class SSLStreams {
public
HttpsConfigurator
getHttpsConfigurator
()
{
return
cfg
;
}
//BEGIN_TIGER_EXCLUDE
SSLParameters
params
;
public
void
setSSLParameters
(
SSLParameters
p
)
{
params
=
p
;
}
SSLParameters
getSSLParameters
()
{
return
params
;
}
//END_TIGER_EXCLUDE
}
/**
...
...
@@ -245,9 +248,6 @@ class SSLStreams {
SocketChannel
chan
;
SSLEngine
engine
;
SelectorCache
sc
;
Selector
write_selector
,
read_selector
;
SelectionKey
wkey
,
rkey
;
Object
wrapLock
,
unwrapLock
;
ByteBuffer
unwrap_src
,
wrap_dst
;
boolean
closed
=
false
;
...
...
@@ -260,16 +260,9 @@ class SSLStreams {
unwrapLock
=
new
Object
();
unwrap_src
=
allocate
(
BufType
.
PACKET
);
wrap_dst
=
allocate
(
BufType
.
PACKET
);
sc
=
SelectorCache
.
getSelectorCache
();
write_selector
=
sc
.
getSelector
();
wkey
=
chan
.
register
(
write_selector
,
SelectionKey
.
OP_WRITE
);
read_selector
=
sc
.
getSelector
();
wkey
=
chan
.
register
(
read_selector
,
SelectionKey
.
OP_READ
);
}
void
close
()
throws
IOException
{
sc
.
freeSelector
(
write_selector
);
sc
.
freeSelector
(
read_selector
);
}
/* try to wrap and send the data in src. Handles OVERFLOW.
...
...
@@ -304,15 +297,7 @@ class SSLStreams {
wrap_dst
.
flip
();
int
l
=
wrap_dst
.
remaining
();
assert
l
==
r
.
result
.
bytesProduced
();
long
currtime
=
time
.
getTime
();
long
maxtime
=
currtime
+
writeTimeout
;
while
(
l
>
0
)
{
write_selector
.
select
(
writeTimeout
);
// timeout
currtime
=
time
.
getTime
();
if
(
currtime
>
maxtime
)
{
throw
new
SocketTimeoutException
(
"write timed out"
);
}
write_selector
.
selectedKeys
().
clear
();
l
-=
chan
.
write
(
wrap_dst
);
}
}
...
...
@@ -342,20 +327,12 @@ class SSLStreams {
needData
=
true
;
}
synchronized
(
unwrapLock
)
{
int
x
,
y
;
int
x
;
do
{
if
(
needData
)
{
long
currTime
=
time
.
getTime
();
long
maxtime
=
currTime
+
readTimeout
;
do
{
if
(
currTime
>
maxtime
)
{
throw
new
SocketTimeoutException
(
"read timedout"
);
}
y
=
read_selector
.
select
(
readTimeout
);
currTime
=
time
.
getTime
();
}
while
(
y
!=
1
);
read_selector
.
selectedKeys
().
clear
();
x
=
chan
.
read
(
unwrap_src
);
}
while
(
x
==
0
);
if
(
x
==
-
1
)
{
throw
new
IOException
(
"connection closed for reading"
);
}
...
...
src/share/classes/sun/net/httpserver/SelectorCache.java
已删除
100644 → 0
浏览文件 @
0c110a1e
/*
* Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package
sun.net.httpserver
;
import
java.util.*
;
import
java.nio.*
;
import
java.net.*
;
import
java.io.*
;
import
java.security.*
;
import
java.nio.channels.*
;
/*
* Implements a cache of java.nio.channels.Selector
* where Selectors are allocated on demand and placed
* in a temporary cache for a period of time, so they
* can be reused. If a period of between 2 and 4 minutes
* elapses without being used, then they are closed.
*/
public
class
SelectorCache
{
static
SelectorCache
cache
=
null
;
private
SelectorCache
()
{
freeSelectors
=
new
LinkedList
<
SelectorWrapper
>();
CacheCleaner
c
=
AccessController
.
doPrivileged
(
new
PrivilegedAction
<
CacheCleaner
>()
{
public
CacheCleaner
run
()
{
CacheCleaner
cleaner
=
new
CacheCleaner
();
cleaner
.
setDaemon
(
true
);
return
cleaner
;
}
});
c
.
start
();
}
/**
* factory method for creating single instance
*/
public
static
SelectorCache
getSelectorCache
()
{
synchronized
(
SelectorCache
.
class
)
{
if
(
cache
==
null
)
{
cache
=
new
SelectorCache
();
}
}
return
cache
;
}
private
static
class
SelectorWrapper
{
private
Selector
sel
;
private
boolean
deleteFlag
;
private
SelectorWrapper
(
Selector
sel
)
{
this
.
sel
=
sel
;
this
.
deleteFlag
=
false
;
}
public
Selector
getSelector
()
{
return
sel
;}
public
boolean
getDeleteFlag
()
{
return
deleteFlag
;}
public
void
setDeleteFlag
(
boolean
b
)
{
deleteFlag
=
b
;}
}
/* list of free selectors. Can be re-allocated for a period
* of time, after which if not allocated will be closed
* and removed from the list (by CacheCleaner thread)
*/
LinkedList
<
SelectorWrapper
>
freeSelectors
;
synchronized
Selector
getSelector
()
throws
IOException
{
SelectorWrapper
wrapper
=
null
;
Selector
selector
;
if
(
freeSelectors
.
size
()
>
0
)
{
wrapper
=
freeSelectors
.
remove
();
selector
=
wrapper
.
getSelector
();
}
else
{
selector
=
Selector
.
open
();
}
return
selector
;
}
synchronized
void
freeSelector
(
Selector
selector
)
{
freeSelectors
.
add
(
new
SelectorWrapper
(
selector
));
}
/* Thread ensures that entries on freeSelector list
* remain there for at least 2 minutes and no longer
* than 4 minutes.
*/
class
CacheCleaner
extends
Thread
{
public
void
run
()
{
long
timeout
=
ServerConfig
.
getSelCacheTimeout
()
*
1000
;
while
(
true
)
{
try
{
Thread
.
sleep
(
timeout
);
}
catch
(
Exception
e
)
{}
synchronized
(
freeSelectors
)
{
ListIterator
<
SelectorWrapper
>
l
=
freeSelectors
.
listIterator
();
while
(
l
.
hasNext
())
{
SelectorWrapper
w
=
l
.
next
();
if
(
w
.
getDeleteFlag
())
{
/* 2nd pass. Close the selector */
try
{
w
.
getSelector
().
close
();
}
catch
(
IOException
e
)
{}
l
.
remove
();
}
else
{
/* 1st pass. Set the flag */
w
.
setDeleteFlag
(
true
);
}
}
}
}
}
}
}
src/share/classes/sun/net/httpserver/ServerConfig.java
浏览文件 @
6b5f4a3d
...
...
@@ -27,6 +27,8 @@ package sun.net.httpserver;
import
com.sun.net.httpserver.*
;
import
com.sun.net.httpserver.spi.*
;
import
java.util.logging.Logger
;
import
java.security.PrivilegedAction
;
/**
* Parameters that users will not likely need to set
...
...
@@ -37,23 +39,26 @@ class ServerConfig {
static
int
clockTick
;
static
int
defaultClockTick
=
10000
;
// 10 sec.
static
final
int
DEFAULT_CLOCK_TICK
=
10000
;
// 10 sec.
/* These values must be a reasonable multiple of clockTick */
static
long
defaultReadTimeout
=
20
;
// 20 sec.
static
long
defaultWriteTimeout
=
60
;
// 60 sec.
static
long
defaultIdleInterval
=
300
;
// 5 min
static
long
defaultSelCacheTimeout
=
120
;
// seconds
static
int
defaultMaxIdleConnections
=
200
;
static
final
long
DEFAULT_IDLE_INTERVAL
=
300
;
// 5 min
static
final
int
DEFAULT_MAX_IDLE_CONNECTIONS
=
200
;
static
long
defaultDrainAmount
=
64
*
1024
;
static
final
long
DEFAULT_MAX_REQ_TIME
=
-
1
;
// default: forever
static
final
long
DEFAULT_MAX_RSP_TIME
=
-
1
;
// default: forever
static
final
long
DEFAULT_TIMER_MILLIS
=
1000
;
static
final
long
DEFAULT_DRAIN_AMOUNT
=
64
*
1024
;
static
long
readTimeout
;
static
long
writeTimeout
;
static
long
idleInterval
;
static
long
selCacheTimeout
;
static
long
drainAmount
;
// max # of bytes to drain from an inputstream
static
int
maxIdleConnections
;
// max time a request or response is allowed to take
static
long
maxReqTime
;
static
long
maxRspTime
;
static
long
timerMillis
;
static
boolean
debug
=
false
;
static
{
...
...
@@ -61,49 +66,79 @@ class ServerConfig {
idleInterval
=
((
Long
)
java
.
security
.
AccessController
.
doPrivileged
(
new
sun
.
security
.
action
.
GetLongAction
(
"sun.net.httpserver.idleInterval"
,
defaultIdleInterval
))).
longValue
()
*
1000
;
DEFAULT_IDLE_INTERVAL
))).
longValue
()
*
1000
;
clockTick
=
((
Integer
)
java
.
security
.
AccessController
.
doPrivileged
(
new
sun
.
security
.
action
.
GetIntegerAction
(
"sun.net.httpserver.clockTick"
,
defaultClockTick
))).
intValue
();
DEFAULT_CLOCK_TICK
))).
intValue
();
maxIdleConnections
=
((
Integer
)
java
.
security
.
AccessController
.
doPrivileged
(
new
sun
.
security
.
action
.
GetIntegerAction
(
"sun.net.httpserver.maxIdleConnections"
,
defaultMaxIdleConnections
))).
intValue
();
DEFAULT_MAX_IDLE_CONNECTIONS
))).
intValue
();
readTimeou
t
=
((
Long
)
java
.
security
.
AccessController
.
doPrivileged
(
drainAmoun
t
=
((
Long
)
java
.
security
.
AccessController
.
doPrivileged
(
new
sun
.
security
.
action
.
GetLongAction
(
"sun.net.httpserver.
readTimeou
t"
,
defaultReadTimeout
))).
longValue
()*
1000
;
"sun.net.httpserver.
drainAmoun
t"
,
DEFAULT_DRAIN_AMOUNT
))).
longValue
()
;
selCacheTimeout
=
((
Long
)
java
.
security
.
AccessController
.
doPrivileged
(
maxReqTime
=
((
Long
)
java
.
security
.
AccessController
.
doPrivileged
(
new
sun
.
security
.
action
.
GetLongAction
(
"sun.net.httpserver.
selCacheTimeout
"
,
defaultSelCacheTimeout
))).
longValue
()*
1000
;
"sun.net.httpserver.
maxReqTime
"
,
DEFAULT_MAX_REQ_TIME
))).
longValue
()
;
writeTimeout
=
((
Long
)
java
.
security
.
AccessController
.
doPrivileged
(
maxRspTime
=
((
Long
)
java
.
security
.
AccessController
.
doPrivileged
(
new
sun
.
security
.
action
.
GetLongAction
(
"sun.net.httpserver.
writeTimeout
"
,
defaultWriteTimeout
))).
longValue
()*
1000
;
"sun.net.httpserver.
maxRspTime
"
,
DEFAULT_MAX_RSP_TIME
))).
longValue
()
;
drainAmount
=
((
Long
)
java
.
security
.
AccessController
.
doPrivileged
(
timerMillis
=
((
Long
)
java
.
security
.
AccessController
.
doPrivileged
(
new
sun
.
security
.
action
.
GetLongAction
(
"sun.net.httpserver.
drainAmount
"
,
defaultDrainAmount
))).
longValue
();
"sun.net.httpserver.
timerMillis
"
,
DEFAULT_TIMER_MILLIS
))).
longValue
();
debug
=
((
Boolean
)
java
.
security
.
AccessController
.
doPrivileged
(
new
sun
.
security
.
action
.
GetBooleanAction
(
"sun.net.httpserver.debug"
))).
booleanValue
();
}
static
long
getReadTimeout
()
{
return
readTimeout
;
}
static
long
getSelCacheTimeout
()
{
return
selCacheTimeout
;
static
void
checkLegacyProperties
(
final
Logger
logger
)
{
// legacy properties that are no longer used
// print a warning to logger if they are set.
java
.
security
.
AccessController
.
doPrivileged
(
new
PrivilegedAction
<
Void
>()
{
public
Void
run
()
{
if
(
System
.
getProperty
(
"sun.net.httpserver.readTimeout"
)
!=
null
)
{
logger
.
warning
(
"sun.net.httpserver.readTimeout "
+
"property is no longer used. "
+
"Use sun.net.httpserver.maxReqTime instead."
);
}
if
(
System
.
getProperty
(
"sun.net.httpserver.writeTimeout"
)
!=
null
)
{
logger
.
warning
(
"sun.net.httpserver.writeTimeout "
+
"property is no longer used. Use "
+
"sun.net.httpserver.maxRspTime instead."
);
}
if
(
System
.
getProperty
(
"sun.net.httpserver.selCacheTimeout"
)
!=
null
)
{
logger
.
warning
(
"sun.net.httpserver.selCacheTimeout "
+
"property is no longer used."
);
}
return
null
;
}
}
);
}
static
boolean
debugEnabled
()
{
...
...
@@ -122,11 +157,19 @@ class ServerConfig {
return
maxIdleConnections
;
}
static
long
getWriteTimeout
()
{
return
writeTimeout
;
}
static
long
getDrainAmount
()
{
return
drainAmount
;
}
static
long
getMaxReqTime
()
{
return
maxReqTime
;
}
static
long
getMaxRspTime
()
{
return
maxRspTime
;
}
static
long
getTimerMillis
()
{
return
timerMillis
;
}
}
src/share/classes/sun/net/httpserver/ServerImpl.java
浏览文件 @
6b5f4a3d
...
...
@@ -37,6 +37,7 @@ import java.util.logging.Level;
import
javax.net.ssl.*
;
import
com.sun.net.httpserver.*
;
import
com.sun.net.httpserver.spi.*
;
import
sun.net.httpserver.HttpConnection.State
;
/**
* Provides implementation for both HTTP and HTTPS
...
...
@@ -55,6 +56,12 @@ class ServerImpl implements TimeSource {
private
SelectionKey
listenerKey
;
private
Set
<
HttpConnection
>
idleConnections
;
private
Set
<
HttpConnection
>
allConnections
;
/* following two are used to keep track of the times
* when a connection/request is first received
* and when we start to send the response
*/
private
Set
<
HttpConnection
>
reqConnections
;
private
Set
<
HttpConnection
>
rspConnections
;
private
List
<
Event
>
events
;
private
Object
lolock
=
new
Object
();
private
volatile
boolean
finished
=
false
;
...
...
@@ -62,14 +69,19 @@ class ServerImpl implements TimeSource {
private
boolean
bound
=
false
;
private
boolean
started
=
false
;
private
volatile
long
time
;
/* current time */
private
volatile
long
subticks
=
0
;
private
volatile
long
ticks
;
/* number of clock ticks since server started */
private
HttpServer
wrapper
;
final
static
int
CLOCK_TICK
=
ServerConfig
.
getClockTick
();
final
static
long
IDLE_INTERVAL
=
ServerConfig
.
getIdleInterval
();
final
static
int
MAX_IDLE_CONNECTIONS
=
ServerConfig
.
getMaxIdleConnections
();
final
static
long
TIMER_MILLIS
=
ServerConfig
.
getTimerMillis
();
final
static
long
MAX_REQ_TIME
=
getTimeMillis
(
ServerConfig
.
getMaxReqTime
());
final
static
long
MAX_RSP_TIME
=
getTimeMillis
(
ServerConfig
.
getMaxRspTime
());
final
static
boolean
timer1Enabled
=
MAX_REQ_TIME
!=
-
1
||
MAX_RSP_TIME
!=
-
1
;
private
Timer
timer
;
private
Timer
timer
,
timer1
;
private
Logger
logger
;
ServerImpl
(
...
...
@@ -79,6 +91,7 @@ class ServerImpl implements TimeSource {
this
.
protocol
=
protocol
;
this
.
wrapper
=
wrapper
;
this
.
logger
=
Logger
.
getLogger
(
"com.sun.net.httpserver"
);
ServerConfig
.
checkLegacyProperties
(
logger
);
https
=
protocol
.
equalsIgnoreCase
(
"https"
);
this
.
address
=
addr
;
contexts
=
new
ContextList
();
...
...
@@ -94,9 +107,18 @@ class ServerImpl implements TimeSource {
dispatcher
=
new
Dispatcher
();
idleConnections
=
Collections
.
synchronizedSet
(
new
HashSet
<
HttpConnection
>());
allConnections
=
Collections
.
synchronizedSet
(
new
HashSet
<
HttpConnection
>());
reqConnections
=
Collections
.
synchronizedSet
(
new
HashSet
<
HttpConnection
>());
rspConnections
=
Collections
.
synchronizedSet
(
new
HashSet
<
HttpConnection
>());
time
=
System
.
currentTimeMillis
();
timer
=
new
Timer
(
"server-timer"
,
true
);
timer
.
schedule
(
new
ServerTimerTask
(),
CLOCK_TICK
,
CLOCK_TICK
);
if
(
timer1Enabled
)
{
timer1
=
new
Timer
(
"server-timer1"
,
true
);
timer1
.
schedule
(
new
ServerTimerTask1
(),
TIMER_MILLIS
,
TIMER_MILLIS
);
logger
.
config
(
"HttpServer timer1 enabled period in ms: "
+
TIMER_MILLIS
);
logger
.
config
(
"MAX_REQ_TIME: "
+
MAX_REQ_TIME
);
logger
.
config
(
"MAX_RSP_TIME: "
+
MAX_RSP_TIME
);
}
events
=
new
LinkedList
<
Event
>();
logger
.
config
(
"HttpServer created "
+
protocol
+
" "
+
addr
);
}
...
...
@@ -181,6 +203,9 @@ class ServerImpl implements TimeSource {
allConnections
.
clear
();
idleConnections
.
clear
();
timer
.
cancel
();
if
(
timer1Enabled
)
{
timer1
.
cancel
();
}
}
Dispatcher
dispatcher
;
...
...
@@ -236,13 +261,6 @@ class ServerImpl implements TimeSource {
}
}
int
resultSize
()
{
synchronized
(
lolock
)
{
return
events
.
size
();
}
}
/* main server listener task */
class
Dispatcher
implements
Runnable
{
...
...
@@ -257,7 +275,7 @@ class ServerImpl implements TimeSource {
if
(
terminating
&&
exchanges
==
0
)
{
finished
=
true
;
}
SocketChannel
chan
=
c
.
getChannel
(
);
responseCompleted
(
c
);
LeftOverInputStream
is
=
t
.
getOriginalInputStream
();
if
(!
is
.
isEOF
())
{
t
.
close
=
true
;
...
...
@@ -268,17 +286,10 @@ class ServerImpl implements TimeSource {
}
else
{
if
(
is
.
isDataBuffered
())
{
/* don't re-enable the interestops, just handle it */
requestStarted
(
c
);
handle
(
c
.
getChannel
(),
c
);
}
else
{
/* re-enable interestops */
SelectionKey
key
=
c
.
getSelectionKey
();
if
(
key
.
isValid
())
{
key
.
interestOps
(
key
.
interestOps
()|
SelectionKey
.
OP_READ
);
}
c
.
time
=
getTime
()
+
IDLE_INTERVAL
;
idleConnections
.
add
(
c
);
connsToRegister
.
add
(
c
);
}
}
}
...
...
@@ -290,22 +301,51 @@ class ServerImpl implements TimeSource {
}
}
final
LinkedList
<
HttpConnection
>
connsToRegister
=
new
LinkedList
<
HttpConnection
>();
void
reRegister
(
HttpConnection
c
)
{
/* re-register with selector */
try
{
SocketChannel
chan
=
c
.
getChannel
();
chan
.
configureBlocking
(
false
);
SelectionKey
key
=
chan
.
register
(
selector
,
SelectionKey
.
OP_READ
);
key
.
attach
(
c
);
c
.
selectionKey
=
key
;
c
.
time
=
getTime
()
+
IDLE_INTERVAL
;
idleConnections
.
add
(
c
);
}
catch
(
IOException
e
)
{
dprint
(
e
);
logger
.
log
(
Level
.
FINER
,
"Dispatcher(8)"
,
e
);
c
.
close
();
}
}
public
void
run
()
{
while
(!
finished
)
{
try
{
ListIterator
<
HttpConnection
>
li
=
connsToRegister
.
listIterator
();
for
(
HttpConnection
c
:
connsToRegister
)
{
reRegister
(
c
);
}
connsToRegister
.
clear
();
/* process the events list first */
List
<
Event
>
list
=
null
;
selector
.
select
(
1000
);
synchronized
(
lolock
)
{
if
(
events
.
size
()
>
0
)
{
list
=
events
;
events
=
new
LinkedList
<
Event
>();
}
}
while
(
resultSize
()
>
0
)
{
Event
r
;
synchronized
(
lolock
)
{
r
=
events
.
remove
(
0
);
if
(
list
!=
null
)
{
for
(
Event
r:
list
)
{
handleEvent
(
r
);
}
}
selector
.
select
(
1000
);
/* process the selected list now */
Set
<
SelectionKey
>
selected
=
selector
.
selectedKeys
();
...
...
@@ -327,6 +367,7 @@ class ServerImpl implements TimeSource {
c
.
selectionKey
=
newkey
;
c
.
setChannel
(
chan
);
newkey
.
attach
(
c
);
requestStarted
(
c
);
allConnections
.
add
(
c
);
}
else
{
try
{
...
...
@@ -334,27 +375,44 @@ class ServerImpl implements TimeSource {
boolean
closed
;
SocketChannel
chan
=
(
SocketChannel
)
key
.
channel
();
HttpConnection
conn
=
(
HttpConnection
)
key
.
attachment
();
// interestOps will be restored at end of read
key
.
interestOps
(
0
);
key
.
cancel
();
chan
.
configureBlocking
(
true
);
if
(
idleConnections
.
remove
(
conn
))
{
// was an idle connection so add it
// to reqConnections set.
requestStarted
(
conn
);
}
handle
(
chan
,
conn
);
}
else
{
assert
false
;
}
}
catch
(
CancelledKeyException
e
)
{
handleException
(
key
,
null
);
}
catch
(
IOException
e
)
{
HttpConnection
conn
=
(
HttpConnection
)
key
.
attachment
();
logger
.
log
(
Level
.
FINER
,
"Dispatcher (2)"
,
e
);
conn
.
close
();
handleException
(
key
,
e
);
}
}
}
// call the selector just to process the cancelled keys
selector
.
selectNow
();
}
catch
(
IOException
e
)
{
logger
.
log
(
Level
.
FINER
,
"Dispatcher (4)"
,
e
);
}
catch
(
Exception
e
)
{
logger
.
log
(
Level
.
FINER
,
"Dispatcher (3)"
,
e
);
e
.
printStackTrace
();
logger
.
log
(
Level
.
FINER
,
"Dispatcher (7)"
,
e
);
}
}
}
private
void
handleException
(
SelectionKey
key
,
Exception
e
)
{
HttpConnection
conn
=
(
HttpConnection
)
key
.
attachment
();
if
(
e
!=
null
)
{
logger
.
log
(
Level
.
FINER
,
"Dispatcher (2)"
,
e
);
}
closeConnection
(
conn
);
}
public
void
handle
(
SocketChannel
chan
,
HttpConnection
conn
)
throws
IOException
{
...
...
@@ -363,10 +421,10 @@ class ServerImpl implements TimeSource {
executor
.
execute
(
t
);
}
catch
(
HttpError
e1
)
{
logger
.
log
(
Level
.
FINER
,
"Dispatcher (4)"
,
e1
);
c
onn
.
close
(
);
c
loseConnection
(
conn
);
}
catch
(
IOException
e
)
{
logger
.
log
(
Level
.
FINER
,
"Dispatcher (5)"
,
e
);
c
onn
.
close
(
);
c
loseConnection
(
conn
);
}
}
}
...
...
@@ -390,7 +448,26 @@ class ServerImpl implements TimeSource {
return
logger
;
}
/* per exchange task */
private
void
closeConnection
(
HttpConnection
conn
)
{
conn
.
close
();
allConnections
.
remove
(
conn
);
switch
(
conn
.
getState
())
{
case
REQUEST:
reqConnections
.
remove
(
conn
);
break
;
case
RESPONSE:
rspConnections
.
remove
(
conn
);
break
;
case
IDLE:
idleConnections
.
remove
(
conn
);
break
;
}
assert
!
reqConnections
.
remove
(
conn
);
assert
!
rspConnections
.
remove
(
conn
);
assert
!
idleConnections
.
remove
(
conn
);
}
/* per exchange task */
class
Exchange
implements
Runnable
{
SocketChannel
chan
;
...
...
@@ -450,8 +527,7 @@ class ServerImpl implements TimeSource {
requestLine
=
req
.
requestLine
();
if
(
requestLine
==
null
)
{
/* connection closed */
connection
.
close
();
allConnections
.
remove
(
connection
);
closeConnection
(
connection
);
return
;
}
int
space
=
requestLine
.
indexOf
(
' '
);
...
...
@@ -482,6 +558,9 @@ class ServerImpl implements TimeSource {
if
(
s
!=
null
)
{
clen
=
Long
.
parseLong
(
s
);
}
if
(
clen
==
0
)
{
requestCompleted
(
connection
);
}
}
ctx
=
contexts
.
findContext
(
protocol
,
uri
.
getPath
());
if
(
ctx
==
null
)
{
...
...
@@ -560,7 +639,7 @@ class ServerImpl implements TimeSource {
}
catch
(
IOException
e1
)
{
logger
.
log
(
Level
.
FINER
,
"ServerImpl.Exchange (1)"
,
e1
);
c
onnection
.
close
(
);
c
loseConnection
(
connection
);
}
catch
(
NumberFormatException
e3
)
{
reject
(
Code
.
HTTP_BAD_REQUEST
,
requestLine
,
"NumberFormatException thrown"
);
...
...
@@ -569,7 +648,7 @@ class ServerImpl implements TimeSource {
requestLine
,
"URISyntaxException thrown"
);
}
catch
(
Exception
e4
)
{
logger
.
log
(
Level
.
FINER
,
"ServerImpl.Exchange (2)"
,
e4
);
c
onnection
.
close
(
);
c
loseConnection
(
connection
);
}
}
...
...
@@ -591,47 +670,60 @@ class ServerImpl implements TimeSource {
rejected
=
true
;
logReply
(
code
,
requestStr
,
message
);
sendReply
(
code
,
tru
e
,
"<h1>"
+
code
+
Code
.
msg
(
code
)+
"</h1>"
+
message
code
,
fals
e
,
"<h1>"
+
code
+
Code
.
msg
(
code
)+
"</h1>"
+
message
);
/* connection is already closed by sendReply, now remove it */
allConnections
.
remove
(
connection
);
closeConnection
(
connection
);
}
void
sendReply
(
int
code
,
boolean
closeNow
,
String
text
)
{
try
{
String
s
=
"HTTP/1.1 "
+
code
+
Code
.
msg
(
code
)
+
"\r\n"
;
StringBuilder
builder
=
new
StringBuilder
(
512
);
builder
.
append
(
"HTTP/1.1 "
)
.
append
(
code
).
append
(
Code
.
msg
(
code
)).
append
(
"\r\n"
);
if
(
text
!=
null
&&
text
.
length
()
!=
0
)
{
s
=
s
+
"Content-Length: "
+
text
.
length
()+
"\r\n"
;
s
=
s
+
"Content-Type: text/html\r\n"
;
builder
.
append
(
"Content-Length: "
)
.
append
(
text
.
length
()).
append
(
"\r\n"
)
.
append
(
"Content-Type: text/html\r\n"
);
}
else
{
s
=
s
+
"Content-Length: 0\r\n"
;
builder
.
append
(
"Content-Length: 0\r\n"
)
;
text
=
""
;
}
if
(
closeNow
)
{
s
=
s
+
"Connection: close\r\n"
;
builder
.
append
(
"Connection: close\r\n"
)
;
}
s
=
s
+
"\r\n"
+
text
;
builder
.
append
(
"\r\n"
).
append
(
text
);
String
s
=
builder
.
toString
();
byte
[]
b
=
s
.
getBytes
(
"ISO8859_1"
);
rawout
.
write
(
b
);
rawout
.
flush
();
if
(
closeNow
)
{
c
onnection
.
close
(
);
c
loseConnection
(
connection
);
}
}
catch
(
IOException
e
)
{
logger
.
log
(
Level
.
FINER
,
"ServerImpl.sendReply"
,
e
);
c
onnection
.
close
(
);
c
loseConnection
(
connection
);
}
}
}
void
logReply
(
int
code
,
String
requestStr
,
String
text
)
{
if
(!
logger
.
isLoggable
(
Level
.
FINE
))
{
return
;
}
if
(
text
==
null
)
{
text
=
""
;
}
String
message
=
requestStr
+
" ["
+
code
+
" "
+
String
r
;
if
(
requestStr
.
length
()
>
80
)
{
r
=
requestStr
.
substring
(
0
,
80
)
+
"<TRUNCATED>"
;
}
else
{
r
=
requestStr
;
}
String
message
=
r
+
" ["
+
code
+
" "
+
Code
.
msg
(
code
)
+
"] ("
+
text
+
")"
;
logger
.
fine
(
message
);
}
...
...
@@ -667,6 +759,34 @@ class ServerImpl implements TimeSource {
return
wrapper
;
}
void
requestStarted
(
HttpConnection
c
)
{
c
.
creationTime
=
getTime
();
c
.
setState
(
State
.
REQUEST
);
reqConnections
.
add
(
c
);
}
// called after a request has been completely read
// by the server. This stops the timer which would
// close the connection if the request doesn't arrive
// quickly enough. It then starts the timer
// that ensures the client reads the response in a timely
// fashion.
void
requestCompleted
(
HttpConnection
c
)
{
assert
c
.
getState
()
==
State
.
REQUEST
;
reqConnections
.
remove
(
c
);
c
.
rspStartedTime
=
getTime
();
rspConnections
.
add
(
c
);
c
.
setState
(
State
.
RESPONSE
);
}
// called after response has been sent
void
responseCompleted
(
HttpConnection
c
)
{
assert
c
.
getState
()
==
State
.
RESPONSE
;
rspConnections
.
remove
(
c
);
c
.
setState
(
State
.
IDLE
);
}
/**
* TimerTask run every CLOCK_TICK ms
*/
...
...
@@ -689,4 +809,62 @@ class ServerImpl implements TimeSource {
}
}
}
class
ServerTimerTask1
extends
TimerTask
{
// runs every TIMER_MILLIS
public
void
run
()
{
LinkedList
<
HttpConnection
>
toClose
=
new
LinkedList
<
HttpConnection
>();
time
=
System
.
currentTimeMillis
();
synchronized
(
reqConnections
)
{
if
(
MAX_REQ_TIME
!=
-
1
)
{
for
(
HttpConnection
c
:
reqConnections
)
{
if
(
c
.
creationTime
+
TIMER_MILLIS
+
MAX_REQ_TIME
<=
time
)
{
toClose
.
add
(
c
);
}
}
for
(
HttpConnection
c
:
toClose
)
{
logger
.
log
(
Level
.
FINE
,
"closing: no request: "
+
c
);
reqConnections
.
remove
(
c
);
allConnections
.
remove
(
c
);
c
.
close
();
}
}
}
toClose
=
new
LinkedList
<
HttpConnection
>();
synchronized
(
rspConnections
)
{
if
(
MAX_RSP_TIME
!=
-
1
)
{
for
(
HttpConnection
c
:
rspConnections
)
{
if
(
c
.
rspStartedTime
+
TIMER_MILLIS
+
MAX_RSP_TIME
<=
time
)
{
toClose
.
add
(
c
);
}
}
for
(
HttpConnection
c
:
toClose
)
{
logger
.
log
(
Level
.
FINE
,
"closing: no response: "
+
c
);
rspConnections
.
remove
(
c
);
allConnections
.
remove
(
c
);
c
.
close
();
}
}
}
}
}
void
logStackTrace
(
String
s
)
{
logger
.
finest
(
s
);
StringBuilder
b
=
new
StringBuilder
();
StackTraceElement
[]
e
=
Thread
.
currentThread
().
getStackTrace
();
for
(
int
i
=
0
;
i
<
e
.
length
;
i
++)
{
b
.
append
(
e
[
i
].
toString
()).
append
(
"\n"
);
}
logger
.
finest
(
b
.
toString
());
}
static
long
getTimeMillis
(
long
secs
)
{
if
(
secs
==
-
1
)
{
return
-
1
;
}
else
{
return
secs
*
1000
;
}
}
}
src/share/classes/sun/nio/cs/UTF_8.java
浏览文件 @
6b5f4a3d
...
...
@@ -358,7 +358,7 @@ class UTF_8 extends Unicode
private
static
class
Encoder
extends
CharsetEncoder
{
private
Encoder
(
Charset
cs
)
{
super
(
cs
,
1.1f
,
4
.0f
);
super
(
cs
,
1.1f
,
3
.0f
);
}
public
boolean
canEncode
(
char
c
)
{
...
...
src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java
浏览文件 @
6b5f4a3d
...
...
@@ -778,6 +778,13 @@ public class ExtendedCharsets
"csIBM500"
});
charset
(
"x-IBM833"
,
"IBM833"
,
new
String
[]
{
"cp833"
,
"ibm833"
,
"ibm-833"
});
//EBCDIC DBCS-only Korean
charset
(
"x-IBM834"
,
"IBM834"
,
new
String
[]
{
...
...
src/share/classes/sun/security/krb5/internal/ccache/CCacheInputStream.java
浏览文件 @
6b5f4a3d
...
...
@@ -250,16 +250,16 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC
else
return
null
;
}
Ticket
readData
()
throws
IOException
,
RealmException
,
KrbApErrException
,
Asn1
Exception
{
byte
[]
readData
()
throws
IO
Exception
{
int
length
;
length
=
read
(
4
);
if
(
length
>
0
)
{
if
(
length
==
0
)
{
return
null
;
}
else
{
byte
[]
bytes
=
new
byte
[
length
];
read
(
bytes
,
0
,
length
);
Ticket
ticket
=
new
Ticket
(
bytes
);
return
ticket
;
return
bytes
;
}
else
return
null
;
}
boolean
[]
readFlags
()
throws
IOException
{
...
...
@@ -328,6 +328,17 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC
}
return
flags
;
}
/**
* Reads the next cred in stream.
* @return the next cred, null if ticket or second_ticket unparseable.
*
* Note: MIT krb5 1.8.1 might generate a config entry with server principal
* X-CACHECONF:/krb5_ccache_conf_data/fast_avail/krbtgt/REALM@REALM. The
* entry is used by KDC to inform the client that it support certain
* features. Its ticket is not a valid krb5 ticket and thus this method
* returns null.
*/
Credentials
readCred
(
int
version
)
throws
IOException
,
RealmException
,
KrbApErrException
,
Asn1Exception
{
PrincipalName
cpname
=
readPrincipal
(
version
);
if
(
DEBUG
)
...
...
@@ -367,17 +378,17 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC
if
(
auData
!=
null
)
{
auData
=
new
AuthorizationData
(
auDataEntry
);
}
Ticket
ticket
=
readData
();
if
(
DEBUG
)
{
System
.
out
.
println
(
">>>DEBUG <CCacheInputStream>"
);
if
(
ticket
==
null
)
{
System
.
out
.
println
(
"///ticket is null"
);
}
byte
[]
ticketData
=
readData
();
byte
[]
ticketData2
=
readData
();
try
{
return
new
Credentials
(
cpname
,
spname
,
key
,
authtime
,
starttime
,
endtime
,
renewTill
,
skey
,
tFlags
,
addrs
,
auData
,
ticketData
!=
null
?
new
Ticket
(
ticketData
)
:
null
,
ticketData2
!=
null
?
new
Ticket
(
ticketData2
)
:
null
);
}
catch
(
Exception
e
)
{
// If any of new Ticket(*) fails.
return
null
;
}
Ticket
secTicket
=
readData
();
Credentials
cred
=
new
Credentials
(
cpname
,
spname
,
key
,
authtime
,
starttime
,
endtime
,
renewTill
,
skey
,
tFlags
,
addrs
,
auData
,
ticket
,
secTicket
);
return
cred
;
}
}
src/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java
浏览文件 @
6b5f4a3d
/*
* Copyright (c) 2000, 20
09
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 20
10
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -186,7 +186,10 @@ public class FileCredentialsCache extends CredentialsCache
primaryRealm
=
primaryPrincipal
.
getRealm
();
credentialsList
=
new
Vector
<
Credentials
>
();
while
(
cis
.
available
()
>
0
)
{
credentialsList
.
addElement
(
cis
.
readCred
(
version
));
Credentials
cred
=
cis
.
readCred
(
version
);
if
(
cred
!=
null
)
{
credentialsList
.
addElement
(
cred
);
}
}
cis
.
close
();
}
...
...
src/share/classes/sun/security/pkcs11/P11Cipher.java
浏览文件 @
6b5f4a3d
...
...
@@ -74,7 +74,7 @@ final class P11Cipher extends CipherSpi {
// DEC: return the length of trailing padding bytes given the specified
// padded data
int
unpad
(
byte
[]
paddedData
,
int
len
)
throws
BadPaddingException
;
throws
BadPaddingException
,
IllegalBlockSizeException
;
}
private
static
class
PKCS5Padding
implements
Padding
{
...
...
@@ -96,9 +96,10 @@ final class P11Cipher extends CipherSpi {
}
public
int
unpad
(
byte
[]
paddedData
,
int
len
)
throws
BadPaddingException
{
if
(
len
<
1
||
len
>
paddedData
.
length
)
{
throw
new
BadPaddingException
(
"Invalid pad array length!"
);
throws
BadPaddingException
,
IllegalBlockSizeException
{
if
((
len
<
1
)
||
(
len
%
blockSize
!=
0
))
{
throw
new
IllegalBlockSizeException
(
"Input length must be multiples of "
+
blockSize
);
}
byte
padValue
=
paddedData
[
len
-
1
];
if
(
padValue
<
1
||
padValue
>
blockSize
)
{
...
...
src/share/classes/sun/security/ssl/Krb5Helper.java
浏览文件 @
6b5f4a3d
...
...
@@ -10,7 +10,7 @@
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
...
...
src/share/classes/sun/security/ssl/Krb5Proxy.java
浏览文件 @
6b5f4a3d
...
...
@@ -10,7 +10,7 @@
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
...
...
src/share/classes/sun/security/ssl/krb5/Krb5ProxyImpl.java
浏览文件 @
6b5f4a3d
...
...
@@ -10,7 +10,7 @@
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
...
...
src/share/demo/nio/zipfs/Demo.java
浏览文件 @
6b5f4a3d
...
...
@@ -75,9 +75,15 @@ public class Demo {
// copy an external src file into zipfile
// as entry dst
copyin_attrs
,
// <java Demo copyin_attrs zipfile src dst>
// copy an external src file into zipfile
// as entry dst, with attributes (timestamp)
copyout
,
// <java Demo copyout zipfile src dst>
// copy zipfile entry src" out to file dst
copyout_attrs
,
// <java Demo copyout_attrs zipfile src dst>
zzmove
,
// <java Demo zzmove zfsrc zfdst path>
// move entry path/dir from zfsrc to zfdst
...
...
@@ -94,6 +100,9 @@ public class Demo {
setmtime
,
// <java Demo setmtime zipfile "MM/dd/yy-HH:mm:ss" path...>
// set the lastModifiedTime of entry path
setatime
,
// <java Demo setatime zipfile "MM/dd/yy-HH:mm:ss" path...>
setctime
,
// <java Demo setctime zipfile "MM/dd/yy-HH:mm:ss" path...>
lsdir
,
// <java Demo lsdir zipfile dir>
// list dir's direct child files/dirs
...
...
@@ -135,12 +144,14 @@ public class Demo {
attrs2
,
// <java Demo attrs2 zipfile file [...]>
// test different ways to print attrs
prof
,
}
public
static
void
main
(
String
[]
args
)
throws
Throwable
{
Action
action
=
Action
.
valueOf
(
args
[
0
]);
;
Map
<
String
,
Object
>
env
=
env
=
new
HashMap
<
String
,
Object
>();
Action
action
=
Action
.
valueOf
(
args
[
0
]);
Map
<
String
,
Object
>
env
=
env
=
new
HashMap
<>();
if
(
action
==
Action
.
create
)
env
.
put
(
"createNew"
,
true
);
if
(
action
==
Action
.
tlist
||
action
==
Action
.
twalk
)
...
...
@@ -185,6 +196,16 @@ public class Demo {
dst
=
fs
.
getPath
(
args
[
3
]);
src
.
copyTo
(
dst
);
break
;
case
copyin_attrs:
src
=
Paths
.
get
(
args
[
2
]);
dst
=
fs
.
getPath
(
args
[
3
]);
src
.
copyTo
(
dst
,
COPY_ATTRIBUTES
);
break
;
case
copyout_attrs:
src
=
fs
.
getPath
(
args
[
2
]);
dst
=
Paths
.
get
(
args
[
3
]);
src
.
copyTo
(
dst
,
COPY_ATTRIBUTES
);
break
;
case
zzmove:
fs2
=
FileSystems
.
newFileSystem
(
URI
.
create
(
"zip"
+
Paths
.
get
(
args
[
2
]).
toUri
().
toString
().
substring
(
4
)),
...
...
@@ -206,6 +227,7 @@ public class Demo {
case
attrs:
for
(
int
i
=
2
;
i
<
args
.
length
;
i
++)
{
path
=
fs
.
getPath
(
args
[
i
]);
System
.
out
.
println
(
path
);
System
.
out
.
println
(
Attributes
.
readBasicFileAttributes
(
path
).
toString
());
}
...
...
@@ -221,6 +243,28 @@ public class Demo {
Attributes
.
readBasicFileAttributes
(
path
).
toString
());
}
break
;
case
setctime:
df
=
new
SimpleDateFormat
(
"MM/dd/yyyy-HH:mm:ss"
);
newDatetime
=
df
.
parse
(
args
[
2
]);
for
(
int
i
=
3
;
i
<
args
.
length
;
i
++)
{
path
=
fs
.
getPath
(
args
[
i
]);
path
.
setAttribute
(
"creationTime"
,
FileTime
.
fromMillis
(
newDatetime
.
getTime
()));
System
.
out
.
println
(
Attributes
.
readBasicFileAttributes
(
path
).
toString
());
}
break
;
case
setatime:
df
=
new
SimpleDateFormat
(
"MM/dd/yyyy-HH:mm:ss"
);
newDatetime
=
df
.
parse
(
args
[
2
]);
for
(
int
i
=
3
;
i
<
args
.
length
;
i
++)
{
path
=
fs
.
getPath
(
args
[
i
]);
path
.
setAttribute
(
"lastAccessTime"
,
FileTime
.
fromMillis
(
newDatetime
.
getTime
()));
System
.
out
.
println
(
Attributes
.
readBasicFileAttributes
(
path
).
toString
());
}
break
;
case
attrsspace:
path
=
fs
.
getPath
(
"/"
);
FileStore
fstore
=
path
.
getFileStore
();
...
...
@@ -293,6 +337,7 @@ public class Demo {
case
attrs2:
for
(
int
i
=
2
;
i
<
args
.
length
;
i
++)
{
path
=
fs
.
getPath
(
args
[
i
]);
System
.
out
.
printf
(
"%n%s%n"
,
path
);
System
.
out
.
println
(
"-------(1)---------"
);
System
.
out
.
println
(
Attributes
.
readBasicFileAttributes
(
path
).
toString
());
...
...
@@ -308,6 +353,13 @@ public class Demo {
}
}
break
;
case
prof:
list
(
fs
.
getPath
(
"/"
),
false
);
while
(
true
)
{
Thread
.
sleep
(
10000
);
//list(fs.getPath("/"), true);
System
.
out
.
println
(
"sleeping..."
);
}
}
}
catch
(
Exception
x
)
{
x
.
printStackTrace
();
...
...
@@ -501,10 +553,11 @@ public class Demo {
}
private
static
void
list
(
Path
path
,
boolean
verbose
)
throws
IOException
{
if
(
verbose
)
System
.
out
.
println
(
Attributes
.
readBasicFileAttributes
(
path
).
toString
());
else
System
.
out
.
printf
(
" %s%n"
,
path
.
toString
());
if
(!
"/"
.
equals
(
path
.
toString
()))
{
System
.
out
.
printf
(
" %s%n"
,
path
.
toString
());
if
(
verbose
)
System
.
out
.
println
(
Attributes
.
readBasicFileAttributes
(
path
).
toString
());
}
if
(
path
.
notExists
())
return
;
if
(
Attributes
.
readBasicFileAttributes
(
path
).
isDirectory
())
{
...
...
src/share/demo/nio/zipfs/README.txt
浏览文件 @
6b5f4a3d
...
...
@@ -2,7 +2,7 @@ ZipFileSystem is a file system provider that treats the contents of a zip or
JAR file as a java.nio.file.FileSystem.
To deploy the provider you must copy zipfs.jar into your extensions
directory or else add <JDK_HOME>/demo/nio/
ZipFileSystem
/zipfs.jar
directory or else add <JDK_HOME>/demo/nio/
zipfs
/zipfs.jar
to your class path.
The factory methods defined by the java.nio.file.FileSystems class can be
...
...
@@ -10,8 +10,8 @@ used to create a FileSystem, eg:
// use file type detection
Map<String,?> env = Collections.emptyMap();
Path jarfile = Path.get("foo.jar");
FileSystem fs = FileSystems.newFileSystem(jarfile, env);
Path jarfile = Path
s
.get("foo.jar");
FileSystem fs = FileSystems.newFileSystem(jarfile, env
, null
);
-or
...
...
src/share/demo/nio/zipfs/com/sun/nio/zipfs/JarFileSystemProvider.java
浏览文件 @
6b5f4a3d
...
...
@@ -68,4 +68,21 @@ public class JarFileSystemProvider extends ZipFileSystemProvider
throw
new
AssertionError
(
e
);
//never thrown
}
}
@Override
public
Path
getPath
(
URI
uri
)
{
FileSystem
fs
=
getFileSystem
(
uri
);
String
path
=
uri
.
getFragment
();
if
(
path
==
null
)
{
String
uristr
=
uri
.
toString
();
int
off
=
uristr
.
indexOf
(
"!/"
);
if
(
off
!=
-
1
)
path
=
uristr
.
substring
(
off
+
2
);
}
if
(
path
!=
null
)
return
fs
.
getPath
(
path
);
throw
new
IllegalArgumentException
(
"URI: "
+
uri
+
" does not contain path fragment ex. jar:///c:/foo.zip!/BAR"
);
}
}
src/share/demo/nio/zipfs/com/sun/nio/zipfs/ZipConstants.java
浏览文件 @
6b5f4a3d
...
...
@@ -31,7 +31,6 @@
package
com.sun.nio.zipfs
;
import
java.nio.ByteBuffer
;
/**
*
...
...
@@ -48,6 +47,7 @@ class ZipConstants {
static
final
int
METHOD_BZIP2
=
12
;
static
final
int
METHOD_LZMA
=
14
;
static
final
int
METHOD_LZ77
=
19
;
static
final
int
METHOD_AES
=
99
;
/*
* General purpose big flag
...
...
@@ -168,7 +168,8 @@ class ZipConstants {
static
final
int
EXTID_ZIP64
=
0x0001
;
// ZIP64
static
final
int
EXTID_NTFS
=
0x000a
;
// NTFS
static
final
int
EXTID_UNIX
=
0x000d
;
// UNIX
static
final
int
EXTID_EFS
=
0x0017
;
// Strong Encryption
static
final
int
EXTID_EXTT
=
0x5455
;
// Info-ZIP Extended Timestamp
/*
* fields access methods
...
...
@@ -226,34 +227,23 @@ class ZipConstants {
static
final
long
ZIP64_ENDOFF
(
byte
[]
b
)
{
return
LL
(
b
,
48
);}
// central directory offset
static
final
long
ZIP64_LOCOFF
(
byte
[]
b
)
{
return
LL
(
b
,
8
);}
// zip64 end offset
//////////////////////////////////////////
static
final
int
CH
(
ByteBuffer
b
,
int
pos
)
{
return
b
.
get
(
pos
)
&
0xff
;
}
static
final
int
SH
(
ByteBuffer
b
,
int
pos
)
{
return
b
.
getShort
(
pos
)
&
0xffff
;
}
static
final
long
LG
(
ByteBuffer
b
,
int
pos
)
{
return
b
.
getInt
(
pos
)
&
0xffffffff
L
;
}
// central directory header (END) fields
static
final
long
CENSIG
(
ByteBuffer
b
,
int
pos
)
{
return
LG
(
b
,
pos
+
0
);
}
static
final
int
CENVEM
(
ByteBuffer
b
,
int
pos
)
{
return
SH
(
b
,
pos
+
4
);
}
static
final
int
CENVER
(
ByteBuffer
b
,
int
pos
)
{
return
SH
(
b
,
pos
+
6
);
}
static
final
int
CENFLG
(
ByteBuffer
b
,
int
pos
)
{
return
SH
(
b
,
pos
+
8
);
}
static
final
int
CENHOW
(
ByteBuffer
b
,
int
pos
)
{
return
SH
(
b
,
pos
+
10
);}
static
final
long
CENTIM
(
ByteBuffer
b
,
int
pos
)
{
return
LG
(
b
,
pos
+
12
);}
static
final
long
CENCRC
(
ByteBuffer
b
,
int
pos
)
{
return
LG
(
b
,
pos
+
16
);}
static
final
long
CENSIZ
(
ByteBuffer
b
,
int
pos
)
{
return
LG
(
b
,
pos
+
20
);}
static
final
long
CENLEN
(
ByteBuffer
b
,
int
pos
)
{
return
LG
(
b
,
pos
+
24
);}
static
final
int
CENNAM
(
ByteBuffer
b
,
int
pos
)
{
return
SH
(
b
,
pos
+
28
);}
static
final
int
CENEXT
(
ByteBuffer
b
,
int
pos
)
{
return
SH
(
b
,
pos
+
30
);}
static
final
int
CENCOM
(
ByteBuffer
b
,
int
pos
)
{
return
SH
(
b
,
pos
+
32
);}
static
final
int
CENDSK
(
ByteBuffer
b
,
int
pos
)
{
return
SH
(
b
,
pos
+
34
);}
static
final
int
CENATT
(
ByteBuffer
b
,
int
pos
)
{
return
SH
(
b
,
pos
+
36
);}
static
final
long
CENATX
(
ByteBuffer
b
,
int
pos
)
{
return
LG
(
b
,
pos
+
38
);}
static
final
long
CENOFF
(
ByteBuffer
b
,
int
pos
)
{
return
LG
(
b
,
pos
+
42
);}
// central directory header (CEN) fields
static
final
long
CENSIG
(
byte
[]
b
,
int
pos
)
{
return
LG
(
b
,
pos
+
0
);
}
static
final
int
CENVEM
(
byte
[]
b
,
int
pos
)
{
return
SH
(
b
,
pos
+
4
);
}
static
final
int
CENVER
(
byte
[]
b
,
int
pos
)
{
return
SH
(
b
,
pos
+
6
);
}
static
final
int
CENFLG
(
byte
[]
b
,
int
pos
)
{
return
SH
(
b
,
pos
+
8
);
}
static
final
int
CENHOW
(
byte
[]
b
,
int
pos
)
{
return
SH
(
b
,
pos
+
10
);}
static
final
long
CENTIM
(
byte
[]
b
,
int
pos
)
{
return
LG
(
b
,
pos
+
12
);}
static
final
long
CENCRC
(
byte
[]
b
,
int
pos
)
{
return
LG
(
b
,
pos
+
16
);}
static
final
long
CENSIZ
(
byte
[]
b
,
int
pos
)
{
return
LG
(
b
,
pos
+
20
);}
static
final
long
CENLEN
(
byte
[]
b
,
int
pos
)
{
return
LG
(
b
,
pos
+
24
);}
static
final
int
CENNAM
(
byte
[]
b
,
int
pos
)
{
return
SH
(
b
,
pos
+
28
);}
static
final
int
CENEXT
(
byte
[]
b
,
int
pos
)
{
return
SH
(
b
,
pos
+
30
);}
static
final
int
CENCOM
(
byte
[]
b
,
int
pos
)
{
return
SH
(
b
,
pos
+
32
);}
static
final
int
CENDSK
(
byte
[]
b
,
int
pos
)
{
return
SH
(
b
,
pos
+
34
);}
static
final
int
CENATT
(
byte
[]
b
,
int
pos
)
{
return
SH
(
b
,
pos
+
36
);}
static
final
long
CENATX
(
byte
[]
b
,
int
pos
)
{
return
LG
(
b
,
pos
+
38
);}
static
final
long
CENOFF
(
byte
[]
b
,
int
pos
)
{
return
LG
(
b
,
pos
+
42
);}
/* The END header is followed by a variable length comment of size < 64k. */
static
final
long
END_MAXLEN
=
0xFFFF
+
ENDHDR
;
...
...
src/share/demo/nio/zipfs/com/sun/nio/zipfs/ZipDirectoryStream.java
浏览文件 @
6b5f4a3d
...
...
@@ -38,7 +38,6 @@ import java.nio.file.Path;
import
java.util.Iterator
;
import
java.util.NoSuchElementException
;
import
java.io.IOException
;
import
static
com
.
sun
.
nio
.
zipfs
.
ZipUtils
.*;
/**
*
...
...
@@ -77,7 +76,7 @@ public class ZipDirectoryStream implements DirectoryStream<Path> {
}
catch
(
IOException
e
)
{
throw
new
IllegalStateException
(
e
);
}
return
new
Iterator
<
Path
>()
{
return
new
Iterator
<>()
{
private
Path
next
;
@Override
public
boolean
hasNext
()
{
...
...
src/share/demo/nio/zipfs/com/sun/nio/zipfs/ZipFileAttributeView.java
浏览文件 @
6b5f4a3d
...
...
@@ -32,7 +32,6 @@
package
com.sun.nio.zipfs
;
import
java.nio.file.ReadOnlyFileSystemException
;
import
java.nio.file.attribute.BasicFileAttributeView
;
import
java.nio.file.attribute.FileAttributeView
;
import
java.nio.file.attribute.FileTime
;
...
...
@@ -113,6 +112,10 @@ public class ZipFileAttributeView implements BasicFileAttributeView
try
{
if
(
AttrID
.
valueOf
(
attribute
)
==
AttrID
.
lastModifiedTime
)
setTimes
((
FileTime
)
value
,
null
,
null
);
if
(
AttrID
.
valueOf
(
attribute
)
==
AttrID
.
lastAccessTime
)
setTimes
(
null
,
(
FileTime
)
value
,
null
);
if
(
AttrID
.
valueOf
(
attribute
)
==
AttrID
.
creationTime
)
setTimes
(
null
,
null
,
(
FileTime
)
value
);
return
;
}
catch
(
IllegalArgumentException
x
)
{}
throw
new
UnsupportedOperationException
(
"'"
+
attribute
+
...
...
src/share/demo/nio/zipfs/com/sun/nio/zipfs/ZipFileAttributes.java
浏览文件 @
6b5f4a3d
...
...
@@ -56,7 +56,7 @@ public class ZipFileAttributes implements BasicFileAttributes
@Override
public
FileTime
creationTime
()
{
if
(
e
.
ctime
!=
-
1
)
return
FileTime
.
fromMillis
(
dosToJavaTime
(
e
.
ctime
)
);
return
FileTime
.
fromMillis
(
e
.
ctime
);
return
null
;
}
...
...
@@ -78,13 +78,13 @@ public class ZipFileAttributes implements BasicFileAttributes
@Override
public
FileTime
lastAccessTime
()
{
if
(
e
.
atime
!=
-
1
)
return
FileTime
.
fromMillis
(
dosToJavaTime
(
e
.
atime
)
);
return
FileTime
.
fromMillis
(
e
.
atime
);
return
null
;
}
@Override
public
FileTime
lastModifiedTime
()
{
return
FileTime
.
fromMillis
(
dosToJavaTime
(
e
.
mtime
)
);
return
FileTime
.
fromMillis
(
e
.
mtime
);
}
@Override
...
...
@@ -103,10 +103,6 @@ public class ZipFileAttributes implements BasicFileAttributes
}
///////// zip entry attributes ///////////
public
byte
[]
name
()
{
return
Arrays
.
copyOf
(
e
.
name
,
e
.
name
.
length
);
}
public
long
compressedSize
()
{
return
e
.
csize
;
}
...
...
@@ -132,10 +128,13 @@ public class ZipFileAttributes implements BasicFileAttributes
}
public
String
toString
()
{
StringBuilder
sb
=
new
StringBuilder
();
StringBuilder
sb
=
new
StringBuilder
(
1024
);
Formatter
fm
=
new
Formatter
(
sb
);
fm
.
format
(
"[/%s]%n"
,
new
String
(
e
.
name
));
// TBD encoding
fm
.
format
(
" creationTime : %s%n"
,
creationTime
());
if
(
creationTime
()
!=
null
)
fm
.
format
(
" creationTime : %tc%n"
,
creationTime
().
toMillis
());
else
fm
.
format
(
" creationTime : null%n"
);
if
(
lastAccessTime
()
!=
null
)
fm
.
format
(
" lastAccessTime : %tc%n"
,
lastAccessTime
().
toMillis
());
else
...
...
src/share/demo/nio/zipfs/com/sun/nio/zipfs/ZipFileSystem.java
浏览文件 @
6b5f4a3d
此差异已折叠。
点击以展开。
src/share/demo/nio/zipfs/com/sun/nio/zipfs/ZipFileSystemProvider.java
浏览文件 @
6b5f4a3d
...
...
@@ -55,6 +55,8 @@ import java.util.Set;
*/
public
class
ZipFileSystemProvider
extends
FileSystemProvider
{
private
final
Map
<
Path
,
ZipFileSystem
>
filesystems
=
new
HashMap
<>();
public
ZipFileSystemProvider
()
{}
...
...
@@ -101,10 +103,16 @@ public class ZipFileSystemProvider extends FileSystemProvider {
throws
IOException
{
synchronized
(
filesystems
)
{
if
(
filesystems
.
containsKey
(
path
))
throw
new
FileSystemAlreadyExistsException
();
Path
realPath
=
null
;
if
(
path
.
exists
())
{
realPath
=
path
.
toRealPath
(
true
);
if
(
filesystems
.
containsKey
(
realPath
))
throw
new
FileSystemAlreadyExistsException
();
}
ZipFileSystem
zipfs
=
new
ZipFileSystem
(
this
,
path
,
env
);
filesystems
.
put
(
path
,
zipfs
);
if
(
realPath
==
null
)
realPath
=
path
.
toRealPath
(
true
);
filesystems
.
put
(
realPath
,
zipfs
);
return
zipfs
;
}
}
...
...
@@ -137,16 +145,21 @@ public class ZipFileSystemProvider extends FileSystemProvider {
@Override
public
FileSystem
getFileSystem
(
URI
uri
)
{
synchronized
(
filesystems
)
{
ZipFileSystem
zipfs
=
filesystems
.
get
(
uriToPath
(
uri
));
ZipFileSystem
zipfs
=
null
;
try
{
zipfs
=
filesystems
.
get
(
uriToPath
(
uri
).
toRealPath
(
true
));
}
catch
(
IOException
x
)
{
// ignore the ioe from toRealPath(), return FSNFE
}
if
(
zipfs
==
null
)
throw
new
FileSystemNotFoundException
();
return
zipfs
;
}
}
void
removeFileSystem
(
Path
zfpath
)
{
void
removeFileSystem
(
Path
zfpath
)
throws
IOException
{
synchronized
(
filesystems
)
{
filesystems
.
remove
(
zfpath
);
filesystems
.
remove
(
zfpath
.
toRealPath
(
true
)
);
}
}
}
src/share/demo/nio/zipfs/com/sun/nio/zipfs/ZipInfo.java
浏览文件 @
6b5f4a3d
...
...
@@ -31,7 +31,6 @@
package
com.sun.nio.zipfs
;
import
java.io.PrintStream
;
import
java.nio.file.Paths
;
import
java.util.Collections
;
import
java.util.Iterator
;
...
...
@@ -41,7 +40,7 @@ import static com.sun.nio.zipfs.ZipConstants.*;
import
static
com
.
sun
.
nio
.
zipfs
.
ZipUtils
.*;
/**
* Print
the loc and cen table
s of the ZIP file
* Print
all loc and cen header
s of the ZIP file
*
* @author Xueming Shen
*/
...
...
@@ -49,34 +48,38 @@ import static com.sun.nio.zipfs.ZipUtils.*;
public
class
ZipInfo
{
public
static
void
main
(
String
[]
args
)
throws
Throwable
{
if
(
args
.
length
<
2
)
{
print
(
"Usage: java ZipInfo
[cen|loc]
zfname"
);
if
(
args
.
length
<
1
)
{
print
(
"Usage: java ZipInfo zfname"
);
}
else
{
Map
<
String
,
?>
env
=
Collections
.
emptyMap
();
ZipFileSystem
zfs
=
(
ZipFileSystem
)(
new
ZipFileSystemProvider
()
.
newFileSystem
(
Paths
.
get
(
args
[
1
]),
env
));
long
pos
=
0
;
.
newFileSystem
(
Paths
.
get
(
args
[
0
]),
env
));
byte
[]
cen
=
zfs
.
cen
;
if
(
cen
==
null
)
{
print
(
"zip file is empty%n"
);
return
;
}
int
pos
=
0
;
byte
[]
buf
=
new
byte
[
1024
];
int
no
=
1
;
while
(
pos
+
CENHDR
<
cen
.
length
)
{
print
(
"----------------#%d--------------------%n"
,
no
++);
printCEN
(
cen
,
pos
);
if
(
"loc"
.
equals
(
args
[
0
]))
{
print
(
"[Local File Header]%n"
);
byte
[]
buf
=
new
byte
[
1024
];
for
(
int
i
=
0
;
i
<
zfs
.
getEntryNames
().
length
;
i
++)
{
Entry
loc
=
Entry
.
readLOC
(
zfs
,
pos
,
buf
);
print
(
"--------loc[%x]--------%n"
,
pos
);
printLOC
(
loc
);
pos
=
loc
.
endPos
;
}
}
if
(
"cen"
.
equals
(
args
[
0
]))
{
int
i
=
0
;
Iterator
<
ZipFileSystem
.
IndexNode
>
itr
=
zfs
.
inodes
.
values
().
iterator
();
print
(
"[Central Directory Header]%n"
);
while
(
itr
.
hasNext
())
{
Entry
cen
=
Entry
.
readCEN
(
zfs
.
cen
,
itr
.
next
().
pos
);
print
(
"--------cen[%d]--------%n"
,
i
);
printCEN
(
cen
);
i
++;
// use size CENHDR as the extra bytes to read, just in case the
// loc.extra is bigger than the cen.extra, try to avoid to read
// twice
long
len
=
LOCHDR
+
CENNAM
(
cen
,
pos
)
+
CENEXT
(
cen
,
pos
)
+
CENHDR
;
if
(
zfs
.
readFullyAt
(
buf
,
0
,
len
,
locoff
(
cen
,
pos
))
!=
len
)
zfs
.
zerror
(
"read loc header failed"
);
if
(
LOCEXT
(
buf
)
>
CENEXT
(
cen
,
pos
)
+
CENHDR
)
{
// have to read the second time;
len
=
LOCHDR
+
LOCNAM
(
buf
)
+
LOCEXT
(
buf
);
if
(
zfs
.
readFullyAt
(
buf
,
0
,
len
,
locoff
(
cen
,
pos
))
!=
len
)
zfs
.
zerror
(
"read loc header failed"
);
}
printLOC
(
buf
);
pos
+=
CENHDR
+
CENNAM
(
cen
,
pos
)
+
CENEXT
(
cen
,
pos
)
+
CENCOM
(
cen
,
pos
);
}
zfs
.
close
();
}
...
...
@@ -86,47 +89,135 @@ public class ZipInfo {
System
.
out
.
printf
(
fmt
,
objs
);
}
static
void
printLOC
(
Entry
loc
)
{
print
(
" [%x, %x]%n"
,
loc
.
startPos
,
loc
.
endPos
);
print
(
" Signature : %8x%n"
,
LOCSIG
);
print
(
" Version : %4x [%d.%d]%n"
,
loc
.
version
,
loc
.
version
/
10
,
loc
.
version
%
10
);
print
(
" Flag : %4x%n"
,
loc
.
flag
);
print
(
" Method : %4x%n"
,
loc
.
method
);
print
(
" LastMTime : %8x [%tc]%n"
,
loc
.
mtime
,
dosToJavaTime
(
loc
.
mtime
));
print
(
" CRC : %8x%n"
,
loc
.
crc
);
print
(
" CSize : %8x%n"
,
loc
.
csize
);
print
(
" Size : %8x%n"
,
loc
.
size
);
print
(
" NameLength : %4x [%s]%n"
,
loc
.
nlen
,
new
String
(
loc
.
name
));
print
(
" ExtraLength : %4x%n"
,
loc
.
elen
);
if
(
loc
.
hasZip64
)
print
(
" *ZIP64*%n"
);
static
void
printLOC
(
byte
[]
loc
)
{
print
(
"%n"
);
print
(
"[Local File Header]%n"
);
print
(
" Signature : %#010x%n"
,
LOCSIG
(
loc
));
if
(
LOCSIG
(
loc
)
!=
LOCSIG
)
{
print
(
" Wrong signature!"
);
return
;
}
print
(
" Version : %#6x [%d.%d]%n"
,
LOCVER
(
loc
),
LOCVER
(
loc
)
/
10
,
LOCVER
(
loc
)
%
10
);
print
(
" Flag : %#6x%n"
,
LOCFLG
(
loc
));
print
(
" Method : %#6x%n"
,
LOCHOW
(
loc
));
print
(
" LastMTime : %#10x [%tc]%n"
,
LOCTIM
(
loc
),
dosToJavaTime
(
LOCTIM
(
loc
)));
print
(
" CRC : %#10x%n"
,
LOCCRC
(
loc
));
print
(
" CSize : %#10x%n"
,
LOCSIZ
(
loc
));
print
(
" Size : %#10x%n"
,
LOCLEN
(
loc
));
print
(
" NameLength : %#6x [%s]%n"
,
LOCNAM
(
loc
),
new
String
(
loc
,
LOCHDR
,
LOCNAM
(
loc
)));
print
(
" ExtraLength : %#6x%n"
,
LOCEXT
(
loc
));
if
(
LOCEXT
(
loc
)
!=
0
)
printExtra
(
loc
,
LOCHDR
+
LOCNAM
(
loc
),
LOCEXT
(
loc
));
}
static
void
printCEN
(
byte
[]
cen
,
int
off
)
{
print
(
"[Central Directory Header]%n"
);
print
(
" Signature : %#010x%n"
,
CENSIG
(
cen
,
off
));
if
(
CENSIG
(
cen
,
off
)
!=
CENSIG
)
{
print
(
" Wrong signature!"
);
return
;
}
print
(
" VerMadeby : %#6x [%d, %d.%d]%n"
,
CENVEM
(
cen
,
off
),
(
CENVEM
(
cen
,
off
)
>>
8
),
(
CENVEM
(
cen
,
off
)
&
0xff
)
/
10
,
(
CENVEM
(
cen
,
off
)
&
0xff
)
%
10
);
print
(
" VerExtract : %#6x [%d.%d]%n"
,
CENVER
(
cen
,
off
),
CENVER
(
cen
,
off
)
/
10
,
CENVER
(
cen
,
off
)
%
10
);
print
(
" Flag : %#6x%n"
,
CENFLG
(
cen
,
off
));
print
(
" Method : %#6x%n"
,
CENHOW
(
cen
,
off
));
print
(
" LastMTime : %#10x [%tc]%n"
,
CENTIM
(
cen
,
off
),
dosToJavaTime
(
CENTIM
(
cen
,
off
)));
print
(
" CRC : %#10x%n"
,
CENCRC
(
cen
,
off
));
print
(
" CSize : %#10x%n"
,
CENSIZ
(
cen
,
off
));
print
(
" Size : %#10x%n"
,
CENLEN
(
cen
,
off
));
print
(
" NameLen : %#6x [%s]%n"
,
CENNAM
(
cen
,
off
),
new
String
(
cen
,
off
+
CENHDR
,
CENNAM
(
cen
,
off
)));
print
(
" ExtraLen : %#6x%n"
,
CENEXT
(
cen
,
off
));
if
(
CENEXT
(
cen
,
off
)
!=
0
)
printExtra
(
cen
,
off
+
CENHDR
+
CENNAM
(
cen
,
off
),
CENEXT
(
cen
,
off
));
print
(
" CommentLen : %#6x%n"
,
CENCOM
(
cen
,
off
));
print
(
" DiskStart : %#6x%n"
,
CENDSK
(
cen
,
off
));
print
(
" Attrs : %#6x%n"
,
CENATT
(
cen
,
off
));
print
(
" AttrsEx : %#10x%n"
,
CENATX
(
cen
,
off
));
print
(
" LocOff : %#10x%n"
,
CENOFF
(
cen
,
off
));
}
static
long
locoff
(
byte
[]
cen
,
int
pos
)
{
long
locoff
=
CENOFF
(
cen
,
pos
);
if
(
locoff
==
ZIP64_MINVAL
)
{
//ZIP64
int
off
=
pos
+
CENHDR
+
CENNAM
(
cen
,
pos
);
int
end
=
off
+
CENEXT
(
cen
,
pos
);
while
(
off
+
4
<
end
)
{
int
tag
=
SH
(
cen
,
off
);
int
sz
=
SH
(
cen
,
off
+
2
);
if
(
tag
!=
EXTID_ZIP64
)
{
off
+=
4
+
sz
;
continue
;
}
off
+=
4
;
if
(
CENLEN
(
cen
,
pos
)
==
ZIP64_MINVAL
)
off
+=
8
;
if
(
CENSIZ
(
cen
,
pos
)
==
ZIP64_MINVAL
)
off
+=
8
;
return
LL
(
cen
,
off
);
}
// should never be here
}
return
locoff
;
}
static
void
printCEN
(
Entry
cen
)
{
print
(
" Signature : %08x%n"
,
CENSIG
);
print
(
" VerMadeby : %4x [%d.%d]%n"
,
cen
.
versionMade
,
cen
.
versionMade
/
10
,
cen
.
versionMade
%
10
);
print
(
" VerExtract : %4x [%d.%d]%n"
,
cen
.
version
,
cen
.
version
/
10
,
cen
.
version
%
10
);
print
(
" Flag : %4x%n"
,
cen
.
flag
);
print
(
" Method : %4x%n"
,
cen
.
method
);
print
(
" LastMTime : %8x [%tc]%n"
,
cen
.
mtime
,
dosToJavaTime
(
cen
.
mtime
));
print
(
" CRC : %8x%n"
,
cen
.
crc
);
print
(
" CSize : %8x%n"
,
cen
.
csize
);
print
(
" Size : %8x%n"
,
cen
.
size
);
print
(
" NameLen : %4x [%s]%n"
,
cen
.
nlen
,
new
String
(
cen
.
name
));
print
(
" ExtraLen : %4x%n"
,
cen
.
elen
);
print
(
" CommentLen : %4x%n"
,
cen
.
clen
);
print
(
" DiskStart : %4x%n"
,
cen
.
disk
);
print
(
" Attrs : %4x%n"
,
cen
.
attrs
);
print
(
" AttrsEx : %8x%n"
,
cen
.
attrsEx
);
print
(
" LocOff : %8x%n"
,
cen
.
locoff
);
if
(
cen
.
hasZip64
)
print
(
" *ZIP64*%n"
);
static
void
printExtra
(
byte
[]
extra
,
int
off
,
int
len
)
{
int
end
=
off
+
len
;
while
(
off
+
4
<
end
)
{
int
tag
=
SH
(
extra
,
off
);
int
sz
=
SH
(
extra
,
off
+
2
);
print
(
" [tag=0x%04x, sz=%d, data= "
,
tag
,
sz
);
if
(
off
+
sz
>
end
)
{
print
(
" Error: Invalid extra data, beyond extra length"
);
break
;
}
off
+=
4
;
for
(
int
i
=
0
;
i
<
sz
;
i
++)
print
(
"%02x "
,
extra
[
off
+
i
]);
print
(
"]%n"
);
switch
(
tag
)
{
case
EXTID_ZIP64
:
print
(
" ->ZIP64: "
);
int
pos
=
off
;
while
(
pos
+
8
<=
off
+
sz
)
{
print
(
" *0x%x "
,
LL
(
extra
,
pos
));
pos
+=
8
;
}
print
(
"%n"
);
break
;
case
EXTID_NTFS:
print
(
" ->PKWare NTFS%n"
);
// 4 bytes reserved
if
(
SH
(
extra
,
off
+
4
)
!=
0x0001
||
SH
(
extra
,
off
+
6
)
!=
24
)
print
(
" Error: Invalid NTFS sub-tag or subsz"
);
print
(
" mtime:%tc%n"
,
winToJavaTime
(
LL
(
extra
,
off
+
8
)));
print
(
" atime:%tc%n"
,
winToJavaTime
(
LL
(
extra
,
off
+
16
)));
print
(
" ctime:%tc%n"
,
winToJavaTime
(
LL
(
extra
,
off
+
24
)));
break
;
case
EXTID_EXTT:
print
(
" ->Inof-ZIP Extended Timestamp: flag=%x%n"
,
extra
[
off
]);
pos
=
off
+
1
;
while
(
pos
+
4
<=
off
+
sz
)
{
print
(
" *%tc%n"
,
unixToJavaTime
(
LG
(
extra
,
pos
)));
pos
+=
4
;
}
break
;
default
:
}
off
+=
sz
;
}
}
}
src/share/demo/nio/zipfs/com/sun/nio/zipfs/ZipPath.java
浏览文件 @
6b5f4a3d
...
...
@@ -32,24 +32,19 @@
package
com.sun.nio.zipfs
;
import
java.io.File
;
import
java.io.FilterInputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.OutputStream
;
import
java.net.URI
;
import
java.nio.ByteBuffer
;
import
java.nio.channels.FileChannel
;
import
java.nio.channels.SeekableByteChannel
;
import
java.nio.file.*
;
import
java.nio.file.DirectoryStream.Filter
;
import
java.nio.file.spi.FileSystemProvider
;
import
java.nio.file.attribute.BasicFileAttributeView
;
import
java.nio.file.attribute.FileAttribute
;
import
java.nio.file.attribute.FileAttributeView
;
import
java.nio.file.attribute.FileTime
;
import
java.util.*
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
import
static
java
.
nio
.
file
.
StandardOpenOption
.*;
import
static
java
.
nio
.
file
.
StandardCopyOption
.*;
...
...
@@ -599,7 +594,7 @@ public class ZipPath extends Path {
}
private
static
final
DirectoryStream
.
Filter
<
Path
>
acceptAllFilter
=
new
DirectoryStream
.
Filter
<
Path
>()
{
new
DirectoryStream
.
Filter
<>()
{
@Override
public
boolean
accept
(
Path
entry
)
{
return
true
;
}
};
...
...
@@ -625,7 +620,7 @@ public class ZipPath extends Path {
// create a matcher and return a filter that uses it.
final
PathMatcher
matcher
=
getFileSystem
().
getPathMatcher
(
"glob:"
+
glob
);
DirectoryStream
.
Filter
<
Path
>
filter
=
new
DirectoryStream
.
Filter
<
Path
>()
{
DirectoryStream
.
Filter
<
Path
>
filter
=
new
DirectoryStream
.
Filter
<>()
{
@Override
public
boolean
accept
(
Path
entry
)
{
return
matcher
.
matches
(
entry
.
getName
());
...
...
@@ -758,7 +753,7 @@ public class ZipPath extends Path {
@Override
public
Iterator
<
Path
>
iterator
()
{
return
new
Iterator
<
Path
>()
{
return
new
Iterator
<>()
{
private
int
i
=
0
;
@Override
...
...
@@ -803,7 +798,7 @@ public class ZipPath extends Path {
@Override
public
SeekableByteChannel
newByteChannel
(
OpenOption
...
options
)
throws
IOException
{
Set
<
OpenOption
>
set
=
new
HashSet
<
OpenOption
>(
options
.
length
);
Set
<
OpenOption
>
set
=
new
HashSet
<>(
options
.
length
);
Collections
.
addAll
(
set
,
options
);
return
newByteChannel
(
set
);
}
...
...
@@ -908,7 +903,7 @@ public class ZipPath extends Path {
if
(
opt
==
REPLACE_EXISTING
)
replaceExisting
=
true
;
else
if
(
opt
==
COPY_ATTRIBUTES
)
copyAttrs
=
fals
e
;
copyAttrs
=
tru
e
;
}
// attributes of source file
ZipFileAttributes
zfas
=
getAttributes
();
...
...
@@ -951,7 +946,9 @@ public class ZipPath extends Path {
BasicFileAttributeView
view
=
target
.
getFileAttributeView
(
BasicFileAttributeView
.
class
);
try
{
view
.
setTimes
(
zfas
.
lastModifiedTime
(),
null
,
null
);
view
.
setTimes
(
zfas
.
lastModifiedTime
(),
zfas
.
lastAccessTime
(),
zfas
.
creationTime
());
}
catch
(
IOException
x
)
{
// rollback?
try
{
...
...
src/share/demo/nio/zipfs/com/sun/nio/zipfs/ZipUtils.java
浏览文件 @
6b5f4a3d
...
...
@@ -36,6 +36,7 @@ import java.io.OutputStream;
import
java.util.Arrays
;
import
java.util.Date
;
import
java.util.regex.PatternSyntaxException
;
import
java.util.concurrent.TimeUnit
;
/**
*
...
...
@@ -48,7 +49,7 @@ class ZipUtils {
* Writes a 16-bit short to the output stream in little-endian byte order.
*/
public
static
void
writeShort
(
OutputStream
os
,
int
v
)
throws
IOException
{
os
.
write
(
(
v
>>>
0
)
&
0xff
);
os
.
write
(
v
&
0xff
);
os
.
write
((
v
>>>
8
)
&
0xff
);
}
...
...
@@ -56,7 +57,7 @@ class ZipUtils {
* Writes a 32-bit int to the output stream in little-endian byte order.
*/
public
static
void
writeInt
(
OutputStream
os
,
long
v
)
throws
IOException
{
os
.
write
((
int
)(
(
v
>>>
0
)
&
0xff
));
os
.
write
((
int
)(
v
&
0xff
));
os
.
write
((
int
)((
v
>>>
8
)
&
0xff
));
os
.
write
((
int
)((
v
>>>
16
)
&
0xff
));
os
.
write
((
int
)((
v
>>>
24
)
&
0xff
));
...
...
@@ -66,7 +67,7 @@ class ZipUtils {
* Writes a 64-bit int to the output stream in little-endian byte order.
*/
public
static
void
writeLong
(
OutputStream
os
,
long
v
)
throws
IOException
{
os
.
write
((
int
)(
(
v
>>>
0
)
&
0xff
));
os
.
write
((
int
)(
v
&
0xff
));
os
.
write
((
int
)((
v
>>>
8
)
&
0xff
));
os
.
write
((
int
)((
v
>>>
16
)
&
0xff
));
os
.
write
((
int
)((
v
>>>
24
)
&
0xff
));
...
...
@@ -132,6 +133,27 @@ class ZipUtils {
d
.
getSeconds
()
>>
1
;
}
// used to adjust values between Windows and java epoch
private
static
final
long
WINDOWS_EPOCH_IN_MICROSECONDS
=
-
11644473600000000L
;
public
static
final
long
winToJavaTime
(
long
wtime
)
{
return
TimeUnit
.
MILLISECONDS
.
convert
(
wtime
/
10
+
WINDOWS_EPOCH_IN_MICROSECONDS
,
TimeUnit
.
MICROSECONDS
);
}
public
static
final
long
javaToWinTime
(
long
time
)
{
return
(
TimeUnit
.
MICROSECONDS
.
convert
(
time
,
TimeUnit
.
MILLISECONDS
)
-
WINDOWS_EPOCH_IN_MICROSECONDS
)
*
10
;
}
public
static
final
long
unixToJavaTime
(
long
utime
)
{
return
TimeUnit
.
MILLISECONDS
.
convert
(
utime
,
TimeUnit
.
SECONDS
);
}
public
static
final
long
javaToUnixTime
(
long
time
)
{
return
TimeUnit
.
SECONDS
.
convert
(
time
,
TimeUnit
.
MILLISECONDS
);
}
private
static
final
String
regexMetaChars
=
".^$+{[]|()"
;
private
static
final
String
globMetaChars
=
"\\*?[{"
;
private
static
boolean
isRegexMeta
(
char
c
)
{
...
...
src/share/lib/security/sunpkcs11-solaris.cfg
浏览文件 @
6b5f4a3d
...
...
@@ -31,5 +31,9 @@ disabledMechanisms = {
CKM_SHA256_RSA_PKCS
CKM_SHA384_RSA_PKCS
CKM_SHA512_RSA_PKCS
# the following mechanisms are disabled to ensure backward compatibility (Solaris bug 6545046)
CKM_DES_CBC_PAD
CKM_DES3_CBC_PAD
CKM_AES_CBC_PAD
}
src/share/native/java/util/zip/zip_util.c
浏览文件 @
6b5f4a3d
...
...
@@ -314,7 +314,7 @@ findEND(jzfile *zip, void *endbuf)
if
(
pos
<
0
)
{
/* Pretend there are some NUL bytes before start of file */
off
=
-
pos
;
memset
(
buf
,
'\0'
,
off
);
memset
(
buf
,
'\0'
,
(
size_t
)
off
);
}
if
(
readFullyAt
(
zfd
,
buf
+
off
,
sizeof
(
buf
)
-
off
,
...
...
@@ -426,7 +426,7 @@ static int
isMetaName
(
const
char
*
name
,
int
length
)
{
const
char
*
s
;
if
(
length
<
sizeof
(
"META-INF/"
)
-
1
)
if
(
length
<
(
int
)
sizeof
(
"META-INF/"
)
-
1
)
return
0
;
for
(
s
=
"META-INF/"
;
*
s
!=
'\0'
;
s
++
)
{
char
c
=
*
name
++
;
...
...
@@ -912,7 +912,7 @@ readCENHeader(jzfile *zip, jlong cenpos, jint bufsize)
ZFILE
zfd
=
zip
->
zfd
;
char
*
cen
;
if
(
bufsize
>
zip
->
len
-
cenpos
)
bufsize
=
zip
->
len
-
cenpos
;
bufsize
=
(
jint
)(
zip
->
len
-
cenpos
)
;
if
((
cen
=
malloc
(
bufsize
))
==
NULL
)
goto
Catch
;
if
(
readFullyAt
(
zfd
,
cen
,
bufsize
,
cenpos
)
==
-
1
)
goto
Catch
;
censize
=
CENSIZE
(
cen
);
...
...
@@ -1256,6 +1256,9 @@ ZIP_GetEntryDataOffset(jzfile *zip, jzentry *entry)
* file had been previously locked with ZIP_Lock(). Returns the
* number of bytes read, or -1 if an error occurred. If zip->msg != 0
* then a zip error occurred and zip->msg contains the error text.
*
* The current implementation does not support reading an entry that
* has the size bigger than 2**32 bytes in ONE invocation.
*/
jint
ZIP_Read
(
jzfile
*
zip
,
jzentry
*
entry
,
jlong
pos
,
void
*
buf
,
jint
len
)
...
...
@@ -1276,7 +1279,7 @@ ZIP_Read(jzfile *zip, jzentry *entry, jlong pos, void *buf, jint len)
if
(
len
<=
0
)
return
0
;
if
(
len
>
entry_size
-
pos
)
len
=
entry_size
-
pos
;
len
=
(
jint
)(
entry_size
-
pos
)
;
/* Get file offset to start reading data */
start
=
ZIP_GetEntryDataOffset
(
zip
,
entry
);
...
...
@@ -1306,6 +1309,9 @@ ZIP_Read(jzfile *zip, jzentry *entry, jlong pos, void *buf, jint len)
* from ZIP/JAR files specified in the class path. It is defined here
* so that it can be dynamically loaded by the runtime if the zip library
* is found.
*
* The current implementation does not support reading an entry that
* has the size bigger than 2**32 bytes in ONE invocation.
*/
jboolean
InflateFully
(
jzfile
*
zip
,
jzentry
*
entry
,
void
*
buf
,
char
**
msg
)
...
...
@@ -1314,7 +1320,6 @@ InflateFully(jzfile *zip, jzentry *entry, void *buf, char **msg)
char
tmp
[
BUF_SIZE
];
jlong
pos
=
0
;
jlong
count
=
entry
->
csize
;
jboolean
status
;
*
msg
=
0
;
/* Reset error message */
...
...
@@ -1330,10 +1335,10 @@ InflateFully(jzfile *zip, jzentry *entry, void *buf, char **msg)
}
strm
.
next_out
=
buf
;
strm
.
avail_out
=
entry
->
size
;
strm
.
avail_out
=
(
uInt
)
entry
->
size
;
while
(
count
>
0
)
{
jint
n
=
count
>
(
jlong
)
sizeof
(
tmp
)
?
(
jint
)
sizeof
(
tmp
)
:
count
;
jint
n
=
count
>
(
jlong
)
sizeof
(
tmp
)
?
(
jint
)
sizeof
(
tmp
)
:
(
jint
)
count
;
ZIP_Lock
(
zip
);
n
=
ZIP_Read
(
zip
,
entry
,
pos
,
tmp
,
n
);
ZIP_Unlock
(
zip
);
...
...
@@ -1368,12 +1373,16 @@ InflateFully(jzfile *zip, jzentry *entry, void *buf, char **msg)
return
JNI_TRUE
;
}
/*
* The current implementation does not support reading an entry that
* has the size bigger than 2**32 bytes in ONE invocation.
*/
jzentry
*
JNICALL
ZIP_FindEntry
(
jzfile
*
zip
,
char
*
name
,
jint
*
sizeP
,
jint
*
nameLenP
)
{
jzentry
*
entry
=
ZIP_GetEntry
(
zip
,
name
,
0
);
if
(
entry
)
{
*
sizeP
=
entry
->
size
;
*
sizeP
=
(
jint
)
entry
->
size
;
*
nameLenP
=
strlen
(
entry
->
name
);
}
return
entry
;
...
...
src/share/native/java/util/zip/zlib-1.2.3/compress.c
浏览文件 @
6b5f4a3d
...
...
@@ -75,7 +75,7 @@ int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
deflateEnd
(
&
stream
);
return
err
==
Z_OK
?
Z_BUF_ERROR
:
err
;
}
*
destLen
=
stream
.
total_out
;
*
destLen
=
(
uLong
)
stream
.
total_out
;
err
=
deflateEnd
(
&
stream
);
return
err
;
...
...
src/share/native/java/util/zip/zlib-1.2.3/uncompr.c
浏览文件 @
6b5f4a3d
...
...
@@ -78,7 +78,7 @@ int ZEXPORT uncompress (dest, destLen, source, sourceLen)
return
Z_DATA_ERROR
;
return
err
;
}
*
destLen
=
stream
.
total_out
;
*
destLen
=
(
uLong
)
stream
.
total_out
;
err
=
inflateEnd
(
&
stream
);
return
err
;
...
...
test/ProblemList.txt
浏览文件 @
6b5f4a3d
...
...
@@ -734,10 +734,6 @@ java/util/concurrent/FutureTask/BlockingTaskExecutor.java generic-all
# Problems on windows, jmap.exe hangs? (these run jmap), fails on Solaris 10 x86
java/util/concurrent/locks/Lock/TimedAcquireLeak.java generic-all
# Solaris sparc client, some failures, "1 not equal to 3"?
# also Linux problems with samevm mode, -server linux i586? 1 not equal to 3?
java/util/concurrent/Executors/AutoShutdown.java generic-all
# Fails on solaris-sparc -server (Set not equal to copy. 1)
java/util/EnumSet/EnumSetBash.java solaris-sparc
...
...
test/com/sun/net/httpserver/Test.java
浏览文件 @
6b5f4a3d
...
...
@@ -22,8 +22,20 @@
*/
import
com.sun.net.httpserver.*
;
import
java.util.logging.*
;
public
class
Test
{
static
Logger
logger
;
static
void
enableLogging
()
{
logger
=
Logger
.
getLogger
(
"com.sun.net.httpserver"
);
Handler
h
=
new
ConsoleHandler
();
h
.
setLevel
(
Level
.
ALL
);
logger
.
setLevel
(
Level
.
ALL
);
logger
.
addHandler
(
h
);
}
static
void
delay
()
{
try
{
Thread
.
sleep
(
1000
);
...
...
test/com/sun/net/httpserver/Test1.java
浏览文件 @
6b5f4a3d
...
...
@@ -25,6 +25,7 @@
* @test
* @bug 6270015
* @run main/othervm Test1
* @run main/othervm -Dsun.net.httpserver.maxReqTime=10 Test1
* @summary Light weight HTTP server
*/
...
...
test/com/sun/net/httpserver/Test13.java
浏览文件 @
6b5f4a3d
...
...
@@ -31,6 +31,7 @@
import
com.sun.net.httpserver.*
;
import
java.util.concurrent.*
;
import
java.util.logging.*
;
import
java.io.*
;
import
java.net.*
;
...
...
@@ -45,12 +46,19 @@ public class Test13 extends Test {
static
SSLContext
ctx
;
final
static
int
NUM
=
32
;
// was 32
static
boolean
fail
=
false
;
public
static
void
main
(
String
[]
args
)
throws
Exception
{
HttpServer
s1
=
null
;
HttpsServer
s2
=
null
;
ExecutorService
executor
=
null
;
Logger
l
=
Logger
.
getLogger
(
"com.sun.net.httpserver"
);
Handler
ha
=
new
ConsoleHandler
();
ha
.
setLevel
(
Level
.
ALL
);
l
.
setLevel
(
Level
.
ALL
);
l
.
addHandler
(
ha
);
try
{
String
root
=
System
.
getProperty
(
"test.src"
)+
"/docs"
;
System
.
out
.
print
(
"Test13: "
);
...
...
@@ -70,10 +78,10 @@ public class Test13 extends Test {
int
port
=
s1
.
getAddress
().
getPort
();
int
httpsport
=
s2
.
getAddress
().
getPort
();
Runner
r
[]
=
new
Runner
[
64
];
for
(
int
i
=
0
;
i
<
32
;
i
++)
{
Runner
r
[]
=
new
Runner
[
NUM
*
2
];
for
(
int
i
=
0
;
i
<
NUM
;
i
++)
{
r
[
i
]
=
new
Runner
(
true
,
"http"
,
root
+
"/test1"
,
port
,
"smallfile.txt"
,
23
);
r
[
i
+
32
]
=
new
Runner
(
true
,
"https"
,
root
+
"/test1"
,
port
,
"smallfile.txt"
,
23
);
r
[
i
+
NUM
]
=
new
Runner
(
true
,
"https"
,
root
+
"/test1"
,
https
port
,
"smallfile.txt"
,
23
);
}
start
(
r
);
join
(
r
);
...
...
@@ -91,6 +99,7 @@ public class Test13 extends Test {
static
void
start
(
Runner
[]
x
)
{
for
(
int
i
=
0
;
i
<
x
.
length
;
i
++)
{
if
(
x
[
i
]
!=
null
)
x
[
i
].
start
();
}
}
...
...
@@ -98,6 +107,7 @@ public class Test13 extends Test {
static
void
join
(
Runner
[]
x
)
{
for
(
int
i
=
0
;
i
<
x
.
length
;
i
++)
{
try
{
if
(
x
[
i
]
!=
null
)
x
[
i
].
join
();
}
catch
(
InterruptedException
e
)
{}
}
...
...
test/com/sun/net/httpserver/bugs/6725892/Test.java
0 → 100644
浏览文件 @
6b5f4a3d
此差异已折叠。
点击以展开。
test/com/sun/net/httpserver/bugs/B6401598.java
浏览文件 @
6b5f4a3d
...
...
@@ -83,7 +83,7 @@ public class B6401598 {
server
=
HttpServer
.
create
(
new
InetSocketAddress
(
0
),
400
);
server
.
createContext
(
"/server/"
,
new
MyHandler
());
exec
=
Executors
.
newFixedThreadPool
(
3
);
server
.
setExecutor
(
null
);
server
.
setExecutor
(
exec
);
port
=
server
.
getAddress
().
getPort
();
server
.
start
();
...
...
test/demo/zipfs/ZipFSTester.java
浏览文件 @
6b5f4a3d
...
...
@@ -64,7 +64,6 @@ public class ZipFSTester {
fs0
.
close
();
// sync to file
fs
=
newZipFileSystem
(
tmpfsPath
,
new
HashMap
<
String
,
Object
>());
try
{
// prepare a src
Path
src
=
getTempPath
();
...
...
@@ -146,13 +145,6 @@ public class ZipFSTester {
Path
fs2Path
=
getTempPath
();
Path
fs3Path
=
getTempPath
();
if
(
fs1Path
.
exists
())
fs1Path
.
delete
();
if
(
fs2Path
.
exists
())
fs2Path
.
delete
();
if
(
fs3Path
.
exists
())
fs3Path
.
delete
();
// create a new filesystem, copy everything from fs
Map
<
String
,
Object
>
env
=
new
HashMap
<
String
,
Object
>();
env
.
put
(
"createNew"
,
true
);
...
...
@@ -280,7 +272,6 @@ public class ZipFSTester {
walk
(
fs4
.
getPath
(
"/"
));
System
.
out
.
println
(
"closing: fs4"
);
fs4
.
close
();
System
.
out
.
printf
(
"failed=%d%n"
,
failed
);
fs1Path
.
delete
();
...
...
@@ -426,6 +417,8 @@ public class ZipFSTester {
}
private
static
void
mkdirs
(
Path
path
)
throws
IOException
{
if
(
path
.
exists
())
return
;
path
=
path
.
toAbsolutePath
();
Path
parent
=
path
.
getParent
();
if
(
parent
!=
null
)
{
...
...
test/java/nio/Buffer/StringCharBufferSliceTest.java
浏览文件 @
6b5f4a3d
...
...
@@ -22,7 +22,7 @@
*/
/* @test
* @bug 4997655
* @bug 4997655
7000913
* @summary (bf) CharBuffer.slice() on wrapped CharSequence results in wrong position
*/
...
...
@@ -75,12 +75,27 @@ public class StringCharBufferSliceTest {
}
}
System
.
out
.
println
(
">>> StringCharBufferSliceTest-main: testing slice with result of slice"
);
buff
.
position
(
0
);
buff
.
limit
(
buff
.
capacity
());
slice
=
buff
.
slice
();
for
(
int
i
=
0
;
i
<
4
;
i
++)
{
slice
.
position
(
i
);
CharBuffer
nextSlice
=
slice
.
slice
();
if
(
nextSlice
.
position
()
!=
0
)
throw
new
RuntimeException
(
"New buffer's position should be zero"
);
if
(!
nextSlice
.
equals
(
slice
))
throw
new
RuntimeException
(
"New buffer should be equal"
);
slice
=
nextSlice
;
}
System
.
out
.
println
(
">>> StringCharBufferSliceTest-main: testing toString."
);
buff
.
position
(
4
);
buff
.
limit
(
7
);
slice
=
buff
.
slice
();
if
(!
slice
.
toString
().
equals
(
"tes"
))
{
if
(!
slice
.
toString
().
equals
(
"tes"
))
{
throw
new
RuntimeException
(
"bad toString() after slice(): "
+
slice
.
toString
());
}
...
...
@@ -104,6 +119,7 @@ public class StringCharBufferSliceTest {
||
dupe
.
charAt
(
2
)
!=
's'
||
dupe
.
charAt
(
3
)
!=
't'
)
{
throw
new
RuntimeException
(
"bad duplicate() after slice(): '"
+
dupe
+
"'"
);
}
System
.
out
.
println
(
">>> StringCharBufferSliceTest-main: done!"
);
}
...
...
test/java/security/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh
浏览文件 @
6b5f4a3d
...
...
@@ -68,11 +68,10 @@ case "$OS" in
;;
esac
# remove old class files
cd
${
TESTCLASSES
}${
FILESEP
}
rm
-f
ClassLoaderDeadlock.class
rm
-rf
provider
mkdir
provider
if
[
!
-d
provider
]
;
then
mkdir
provider
fi
# compile the test program
${
TESTJAVA
}${
FILESEP
}
bin
${
FILESEP
}
javac
\
...
...
@@ -88,4 +87,11 @@ ${TESTJAVA}${FILESEP}bin${FILESEP}java \
-classpath
"
${
TESTCLASSES
}${
PATHSEP
}${
TESTSRC
}${
FILESEP
}
Deadlock.jar"
\
ClassLoaderDeadlock
exit
$?
STATUS
=
$?
# clean up
rm
-f
'ClassLoaderDeadlock.class'
'ClassLoaderDeadlock$1.class'
\
'ClassLoaderDeadlock$DelayClassLoader.class'
\
provider
${
FILESEP
}
HashProvider.class
exit
$STATUS
test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh
浏览文件 @
6b5f4a3d
...
...
@@ -26,7 +26,6 @@
# @test
# @bug 6440846
# @ignore until 6203816 is dealt with.
# @summary make sure we do not deadlock between ExtClassLoader and AppClassLoader
# @author Valerie Peng
# @run shell/timeout=20 Deadlock2.sh
...
...
@@ -71,11 +70,14 @@ esac
# remove old class files
cd
${
TESTCLASSES
}
rm
-f
Deadlock2
*
.class
if
[
-d
testlib
]
;
then
rm
-rf
testlib
fi
cp
-r
${
TESTJAVA
}${
FILESEP
}
lib
${
FILESEP
}
ext testlib
if
[
-d
${
TESTJAVA
}${
FILESEP
}
lib
${
FILESEP
}
ext
]
;
then
cp
-r
${
TESTJAVA
}${
FILESEP
}
lib
${
FILESEP
}
ext testlib
else
cp
-r
${
TESTJAVA
}${
FILESEP
}
jre
${
FILESEP
}
lib
${
FILESEP
}
ext testlib
fi
# compile and package the test program
${
TESTJAVA
}${
FILESEP
}
bin
${
FILESEP
}
javac
\
...
...
test/java/util/concurrent/Executors/AutoShutdown.java
浏览文件 @
6b5f4a3d
此差异已折叠。
点击以展开。
test/java/util/jar/JarInputStream/BadSignedJar.jar
0 → 100644
浏览文件 @
6b5f4a3d
文件已添加
test/java/util/jar/JarInputStream/TestIndexedJarWithBadSignature.java
0 → 100644
浏览文件 @
6b5f4a3d
此差异已折叠。
点击以展开。
test/sun/nio/cs/CheckHistoricalNames.java
浏览文件 @
6b5f4a3d
此差异已折叠。
点击以展开。
test/sun/security/krb5/UnknownCCEntry.java
0 → 100644
浏览文件 @
6b5f4a3d
此差异已折叠。
点击以展开。
test/sun/security/pkcs11/Cipher/TestPKCS5PaddingError.java
0 → 100644
浏览文件 @
6b5f4a3d
此差异已折叠。
点击以展开。
test/sun/security/pkcs11/KeyGenerator/TestKeyGenerator.java
浏览文件 @
6b5f4a3d
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录