mirror of
https://git.freebsd.org/ports.git
synced 2025-06-09 14:50:31 -04:00
. Adopt a patchset strategy similar to the openjdk8 port, which keeps the patch files smaller and makes the BSD differences clearer.
42160 lines
1.7 MiB
42160 lines
1.7 MiB
--- ./.hgtags Mon Sep 08 12:14:23 2014 -0700
|
||
+++ ./.hgtags Mon Jan 05 11:48:37 2015 -0800
|
||
@@ -470,11 +470,19 @@
|
||
fa242615607fa5f6cdd1ae93bc2fb9cc2100c179 jdk7u65-b18
|
||
64dbd70735c775bef1faf873e4bec65d73d597cb jdk7u65-b19
|
||
90f56be6f9d90f66e558c4e08084e2b169738fba jdk7u65-b32
|
||
+d4397128f8b65eb96287128575dd1a3da6a7825b jdk7u80-b00
|
||
+90564f0970e92b844122be27f051655aef6dc423 jdk7u80-b01
|
||
+36e8397bf04d972519b80ca9e24e68a2ed1e4dbd jdk7u80-b02
|
||
b6da128e8a7957f139933a48580e201e938c4684 jdk7u65-b20
|
||
d6a1d32534d188e73f7962d40d21584c44e65acd jdk7u67-b01
|
||
64dbd70735c775bef1faf873e4bec65d73d597cb jdk7u65-b40
|
||
9dfdf107c6971cd30c7e1f656cddc6b8d495c290 jdk7u65-b31
|
||
fe700de0735dc4e8ce5a50971ad3ea3dc052d21d jdk7u65-b33
|
||
+d6a1d32534d188e73f7962d40d21584c44e65acd jdk7u67-b01
|
||
+d3b934344cb17238ea27cd1e0b824f856addc815 jdk7u67-b31
|
||
+79c6f8d257776b93485f4c1014dfcf61cc75a667 jdk7u67-b32
|
||
+5aef2a187827f1e7f48a619af4bee118ca99efea jdk7u67-b33
|
||
+b86df0257fad12e8802fe43d53e932b7b0253112 jdk7u67-b34
|
||
48eb3345e05fe904d2e92067da0abd04a9b375e4 jdk7u66-b00
|
||
4fb9423d086d86d212257afd6fc79957f737af5b jdk7u66-b01
|
||
964663d4303723fbcb16cf05e857576c08c237ae jdk7u66-b09
|
||
@@ -500,3 +508,51 @@
|
||
e9663e434024cb6e011013e774445a056417bb3b jdk7u71-b11
|
||
78aa78b55b843697a630ed886962ab07d1b76358 jdk7u71-b12
|
||
9fc5aeb0e0a8c97b1cd263a55f3aeb030cbcdf89 jdk7u71-b13
|
||
+ade1a91dba7391ef319a2fc646138387e6416436 jdk7u71-b14
|
||
+423ddccf39073af15eb78623f89f1080612b5b3d jdk7u72-b01
|
||
+5f985e54beec37de3ad2261d82665d378143a8dc jdk7u72-b02
|
||
+e6e679e8dc418d9174668f445af10e2a6d71ce39 jdk7u72-b03
|
||
+32b4ccb2a7ada38639a4869a5628bda061d8563e jdk7u72-b04
|
||
+15e7f04f32510469be2ab44b4547cb8acb19d04a jdk7u72-b05
|
||
+9c732ba56ec06696e218f7b70ddc432295638d79 jdk7u72-b06
|
||
+a7679adac6cc7ff6a2893e4df447c39937f59eda jdk7u72-b07
|
||
+44a9b66255b9b8a200c0e53338145bac86381576 jdk7u72-b08
|
||
+66c1df24154b1c8c67fd9bed0b6d366452a46fb0 jdk7u72-b09
|
||
+a8993ba5a86938e6bd9ab7c41401610b0e36afce jdk7u72-b10
|
||
+8d695cc7268f902f235506ac8d3849a4dd118bee jdk7u72-b11
|
||
+965b19722fce7a8303b89fc9288f7b6a9cf70922 jdk7u72-b12
|
||
+9c6095c8748ba80aa1ffd14f978b24e50abcfdc1 jdk7u72-b13
|
||
+fa606411d8fd650334b6f90d626399e13e77740f jdk7u72-b14
|
||
+f42462b4dfd81539eacf90955d2d26e1dc1686c0 jdk7u72-b30
|
||
+891bb800d7b2abff392669276f9e55ff30ba9962 jdk7u72-b31
|
||
+569e053e97b4fecaf1371f7cf2645394edb8a11a jdk7u75-b00
|
||
+618b221a71a962f1d62a5b02db1b4256bad9441a jdk7u75-b01
|
||
+eb36016211cb5d412c779836bd8efbf133cbf6f5 jdk7u75-b02
|
||
+134f5183bd712b940056508bcd0988cce7a60ec7 jdk7u75-b03
|
||
+dcc07fe8d380a63c22086abeb62a5a9780b3639c jdk7u75-b04
|
||
+5acf5e095d7b3a9364b278911047a4fad15a1ae7 jdk7u75-b05
|
||
+709239275717263b600f6c8816b023de3442eb0f jdk7u75-b06
|
||
+79414f9ef336b48c3766a7e994ac3efce3877b61 jdk7u75-b07
|
||
+0fa6cf059c5c262a410220bfb9ec7d83d44a8030 jdk7u75-b08
|
||
+109dfa012fb50a65c9dcb5eb36c530a2001d139b jdk7u75-b09
|
||
+a90c928524da634a18ea5a9ca2d6aba839c9bf8a jdk7u75-b10
|
||
+ae1470a6681851d99608269ac902383ce44c9f10 jdk7u75-b11
|
||
+cca6b8a583cef75117297d9522adc33f7ab516c2 jdk7u75-b12
|
||
+669bd350d550600a3f0c4556da9bc4bb6006dc5c jdk7u75-b13
|
||
+7d45f621855a37b70a239edc6f8ac3b75ca7862b jdk7u75-b30
|
||
+37b5893cb60f897f28b1999be7f88335409beda5 jdk7u75-b31
|
||
+b39439fb5dcdef664c7a6cd638642b22c79f2393 jdk7u76-b00
|
||
+dc25c29542f743722854fe37336630b23ebccfff jdk7u76-b01
|
||
+7402e2fd4c2865f4605fe4d84fa43883029e221d jdk7u76-b02
|
||
+d0967df4a33229cf4e297a4892972bc30f23daad jdk7u76-b03
|
||
+e840541117dcf21601adb496a8ba2a54b019f3db jdk7u76-b04
|
||
+369a28aac29d6cfadfd4ef6930e5b1c2c622b826 jdk7u76-b05
|
||
+9304abb58c14bfe3314141ea4176db757e5b5d4f jdk7u76-b06
|
||
+6065e7008ae5fa5ae730f8d2318fedac821c50c1 jdk7u76-b07
|
||
+c891034902a4d6d2db813bd128dca273c7640baf jdk7u76-b08
|
||
+a85cb73f4f32c7faad49b77c307adbd11d481dd1 jdk7u76-b09
|
||
+fc18a1bf57b62578466a4de68314bba79721c8fd jdk7u76-b10
|
||
+4f5b251f1daa41a9143636a9b8aaf0cf4ce00f26 jdk7u76-b11
|
||
+01d1d34f82f30de97a61f8b0048c61aa17d0dd12 jdk7u76-b12
|
||
+a9728fbea214dbf6f58567e729fdc5276f3c704f jdk7u76-b13
|
||
+a788e9c5671436bb711f0e185cd74b17220d6e35 jdk7u76-b30
|
||
--- ./corba/.hgtags Mon Sep 08 12:14:31 2014 -0700
|
||
+++ ./corba/.hgtags Mon Jan 05 11:49:17 2015 -0800
|
||
@@ -472,11 +472,19 @@
|
||
b7f66b9f9e8e099428ed7640a184f6135b77e40d jdk7u65-b18
|
||
50ddba8882e7e95150418a30bfc3ee62e3c28c6c jdk7u65-b19
|
||
dae3f20d2306622e39606d0dc967147de174afce jdk7u65-b32
|
||
+1a3aa4637b80fabbd069ae88c241efcb3520fc49 jdk7u80-b00
|
||
+df1decc820934ad8bf91c853e81c88d4f7590e25 jdk7u80-b01
|
||
+2444fa7df7e3e07f2533f6c875c3a8e408048f6c jdk7u80-b02
|
||
ac05dfedf008e83c2044666a70635cf82e932e41 jdk7u65-b20
|
||
244756837ab4b214decd0e6f26b0071a483f143f jdk7u67-b01
|
||
50ddba8882e7e95150418a30bfc3ee62e3c28c6c jdk7u65-b40
|
||
d2f7358b01d3d8b877b2ec2ca2989bd1daf17472 jdk7u65-b31
|
||
2067d7202adcedb80fa676dacb22a0b73d5e8548 jdk7u65-b33
|
||
+244756837ab4b214decd0e6f26b0071a483f143f jdk7u67-b01
|
||
+507cb7e62dfed67b467a1767d9c56d276551d6f3 jdk7u67-b31
|
||
+aef9e24b79543a3b58bb4575266b9b87ca84e4e1 jdk7u67-b32
|
||
+7c1d15d36a6c40b4a4f75bc03729136a104d2434 jdk7u67-b33
|
||
+f026080f4fcc9eca5589d8747c66bfa123c5a87d jdk7u67-b34
|
||
5b8210c41bc41135687028bcb000ca116e2090f6 jdk7u66-b00
|
||
9f0f0bdd4cfb01a5d64f9528b7ffda3974171120 jdk7u66-b01
|
||
596d979a5d4deb9d10b068479276cd4b2a12432e jdk7u66-b09
|
||
@@ -502,3 +510,51 @@
|
||
3e804dc3cea9ff145f375a50a161f3e173e8d3f6 jdk7u71-b11
|
||
cc3072067ae8ac685d400ced4c0f144d6a1d9f1e jdk7u71-b12
|
||
1616089899e25679d6cf70c77023f2a37ff85ad1 jdk7u71-b13
|
||
+701e1d5cea2e8065d2282eb3ebe31b6829a72a95 jdk7u71-b14
|
||
+287c772d7245396a7a6c7fc409ca8d21ba1ae2c5 jdk7u72-b01
|
||
+92552d17915bdf467fe758293eded9e6290f4ce2 jdk7u72-b02
|
||
+ae522462810fd74a92b4408b12b036bed5ea3efe jdk7u72-b03
|
||
+42a799212f4a287be3d2fd272b9faa3c65326b05 jdk7u72-b04
|
||
+a2d4167edbf96cdfda04e829d2baa361ade14bf5 jdk7u72-b05
|
||
+01922ce7611b852c7fdc4c0f88c9500c55eccd50 jdk7u72-b06
|
||
+b5a2d85c7fce5461d8e1be7e89a891a3ce40f805 jdk7u72-b07
|
||
+2b6d8a79df83bc5732ef7c65c51cfe9feac52559 jdk7u72-b08
|
||
+c62534f0e97dc7100da18b0b9c034d846f7067dc jdk7u72-b09
|
||
+62668c37376f462cfe7bfdfa001f902f52d450ef jdk7u72-b10
|
||
+39828d500dfef8045eb5b531182a09ea6ecdfb71 jdk7u72-b11
|
||
+990f51c3edeb4f25d0be95d51b23e5a4e8e02f06 jdk7u72-b12
|
||
+9e0c893977bba3ed7820f173d386e197f3c06e7b jdk7u72-b13
|
||
+bd80d0c18ccd97669dd8392dbde5cd91f647ee1d jdk7u72-b14
|
||
+66da7f46eff05df2aa3bb9b5c1f7ee47a75828a5 jdk7u72-b30
|
||
+4fefe5c11ddb650e681e2dd5e8ac8dfeb15e6afd jdk7u72-b31
|
||
+88772da384953fed254492c3ea9da498381081f2 jdk7u75-b00
|
||
+0466441d71122c9af252ec17f597f228dbf64578 jdk7u75-b01
|
||
+9aa7fe309fa584ff782ab9d557632321747ba11e jdk7u75-b02
|
||
+c734b5009fc92667af13c36b1f23e153a3e2dfca jdk7u75-b03
|
||
+f55967c261230a4fcc8d71ecfe58f2f47ea50393 jdk7u75-b04
|
||
+86369ed6e77c65496f2c167c00ed48d1e488845c jdk7u75-b05
|
||
+6831d2ff20362464a754f53bf8eb3ec1aacd6271 jdk7u75-b06
|
||
+33cf9bbc4ff36cb9e65e9fc22eabd606b98b6b8c jdk7u75-b07
|
||
+160cce8c24c4af6481426c931e400dfec29fe0d1 jdk7u75-b08
|
||
+ac5f25a05f13d81e4e18f5447e60dddee77d8d17 jdk7u75-b09
|
||
+c762a8187b1fe223b92aca3aaf7ee2dfe03e2ae6 jdk7u75-b10
|
||
+e05b02f8d5c988e55e985d767420e0b7e35d996e jdk7u75-b11
|
||
+45136140d2bcf28009271a047eea9a89c95378d7 jdk7u75-b12
|
||
+fb49daa5d7f89cbe60ff4b598c6b3e976ad04e4d jdk7u75-b13
|
||
+f3d39b94209598ba90e221d60ff3325dbe37fe2e jdk7u75-b30
|
||
+94386a790f9469f9da1328a7d0c2a2d63f03404b jdk7u75-b31
|
||
+2d6f594ce6c5dafc1ad9a9368186817212120d84 jdk7u76-b00
|
||
+b4d4ec688a281a362524291f2cff15c59b85dbb5 jdk7u76-b01
|
||
+c24e65a16f334611f95a8ae46769375b20818b74 jdk7u76-b02
|
||
+a1de50d45daa0728ea269a9e19e7d83208eec894 jdk7u76-b03
|
||
+806fb93eff9b30b3b36b46e04ef25fd62b28e674 jdk7u76-b04
|
||
+62f9b33fc90163c4d6b0953405c29f6328d9cd40 jdk7u76-b05
|
||
+89194b328cd0e4ef0d672d97e818e58ebf52a23b jdk7u76-b06
|
||
+9e17d3cd8fd256417dbecf751d6ac3f8195411b1 jdk7u76-b07
|
||
+f224787154b09e211cbb78f99889f6f6c394e60b jdk7u76-b08
|
||
+220b87dd1f9b26d3167582c699b6f41ac3516696 jdk7u76-b09
|
||
+b10583d82c01a621beb89a4a8e0f4830cdda703b jdk7u76-b10
|
||
+c947bf709139b13476a1df4ca8a92583fb1de5a4 jdk7u76-b11
|
||
+14f0846f4d1b8373e3e3cce10901f37341bf6980 jdk7u76-b12
|
||
+0db41b697138ce89f15c49eef1dc670f94a27d89 jdk7u76-b13
|
||
+71a8665159f2f014b1869f3d723d3b6fbe878a16 jdk7u76-b30
|
||
--- ./corba/src/share/classes/com/sun/corba/se/impl/corba/AnyImpl.java Mon Sep 08 12:14:31 2014 -0700
|
||
+++ ./corba/src/share/classes/com/sun/corba/se/impl/corba/AnyImpl.java Mon Jan 05 11:49:17 2015 -0800
|
||
@@ -587,7 +587,7 @@
|
||
java.lang.Object[] objholder = new java.lang.Object[1];
|
||
objholder[0] = object;
|
||
long[] longholder = new long[1];
|
||
- TCUtility.unmarshalIn(in, typeCode, longholder, objholder);
|
||
+ TCUtility.unmarshalIn(in, realType(), longholder, objholder);
|
||
value = longholder[0];
|
||
object = objholder[0];
|
||
stream = null;
|
||
--- ./corba/src/share/classes/com/sun/corba/se/impl/io/OutputStreamHook.java Mon Sep 08 12:14:31 2014 -0700
|
||
+++ ./corba/src/share/classes/com/sun/corba/se/impl/io/OutputStreamHook.java Mon Jan 05 11:49:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1999, 2014, 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
|
||
@@ -35,7 +35,8 @@
|
||
import java.io.OutputStream;
|
||
import java.io.ObjectOutputStream;
|
||
import java.io.ObjectOutput;
|
||
-import java.util.Hashtable;
|
||
+import java.util.Map;
|
||
+import java.util.HashMap;
|
||
|
||
import org.omg.CORBA.INTERNAL;
|
||
|
||
@@ -49,7 +50,7 @@
|
||
*/
|
||
private class HookPutFields extends ObjectOutputStream.PutField
|
||
{
|
||
- private Hashtable fields = new Hashtable();
|
||
+ private Map<String,Object> fields = new HashMap<>();
|
||
|
||
/**
|
||
* Put the value of the named boolean field into the persistent field.
|
||
@@ -140,7 +141,6 @@
|
||
public OutputStreamHook()
|
||
throws java.io.IOException {
|
||
super();
|
||
-
|
||
}
|
||
|
||
public void defaultWriteObject() throws IOException {
|
||
--- ./corba/src/share/classes/com/sun/corba/se/impl/transport/SocketOrChannelAcceptorImpl.java Mon Sep 08 12:14:31 2014 -0700
|
||
+++ ./corba/src/share/classes/com/sun/corba/se/impl/transport/SocketOrChannelAcceptorImpl.java Mon Jan 05 11:49:17 2015 -0800
|
||
@@ -253,6 +253,13 @@
|
||
// registered with the selector. Otherwise if the bytes
|
||
// are read on the connection it will attempt a time stamp
|
||
// but the cache will be null, resulting in NPE.
|
||
+
|
||
+ // A connection needs to be timestamped before putting to the cache.
|
||
+ // Otherwise the newly created connection (with 0 timestamp) could be
|
||
+ // incorrectly reclaimed by concurrent reclaim() call OR if there
|
||
+ // will be no events on this connection then it could be reclaimed
|
||
+ // by upcoming reclaim() call.
|
||
+ getConnectionCache().stampTime(connection);
|
||
getConnectionCache().put(this, connection);
|
||
|
||
if (connection.shouldRegisterServerReadEvent()) {
|
||
--- ./hotspot/.hgtags Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/.hgtags Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -690,11 +690,26 @@
|
||
d006213be74730453cf5c3ce31f1d1d505334419 jdk7u65-b18
|
||
1d8226b3e9896656451801393eb3ae394faeb638 jdk7u65-b19
|
||
c43b0b843f897a4d8cf0a3566b017b87230dd3b4 jdk7u65-b32
|
||
+b92f390febd01615af4a736b4f830f6052aa1d09 hs24.80-b00
|
||
+1448ebfef4f1aae0174eca983ad05507730ca6fd hs24.80-b01
|
||
+b1d29549dca7e36a4d050af5a54f8f56963a5c7d hs24.80-b02
|
||
+ff18bcebe2943527cdbc094375c38c27ec7f2442 hs24.80-b03
|
||
+1b9722b5134a8e565d8b8fe851849e034beff057 hs24.80-b04
|
||
+04d6919c44db8c9d811ef0ac4775a579f854cdfc hs24.80-b05
|
||
+ee18e60e7e8da9f1912895af353564de0330a2b1 hs24.80-b06
|
||
+05fe7a87d14908eb3f21a0d29fc72cee2f996b7f jdk7u80-b00
|
||
+e2533d62ca887078e4b952a75a75680cfb7894b9 jdk7u80-b01
|
||
+bad107a5d096b070355c5a2d80aa50bc5576144b jdk7u80-b02
|
||
d3c9265e12fa115052f18d1e3d379143b56bbf63 jdk7u65-b20
|
||
39776d90970221dd260187acb4c37631e41a66a9 jdk7u67-b01
|
||
1d8226b3e9896656451801393eb3ae394faeb638 jdk7u65-b40
|
||
cf8b3a090e597e59177c5f67d44cdec12309777f jdk7u65-b31
|
||
df855c3f4d31dd7db081d68e3054518380127893 jdk7u65-b33
|
||
+39776d90970221dd260187acb4c37631e41a66a9 jdk7u67-b01
|
||
+7152f5f6395c66c8d6389100d880882d5cfe9af3 jdk7u67-b31
|
||
+4fb7952ebba8ba45be16bdc64184259e8076ffcf jdk7u67-b32
|
||
+a20f1b6311e10b755d949a088e7aeca2ba088a59 jdk7u67-b33
|
||
+39c07d2fb4d3d97bf3bb53c1c1e199709c5c49fe jdk7u67-b34
|
||
6b37a189944aaa09e81d97d394496464d16bee42 jdk7u66-b00
|
||
121dc94194d9234e2b13c867d875e23e1bdd6abd jdk7u66-b01
|
||
f28ea516eb0b9e99f1e342954ab4642456af4da1 jdk7u66-b09
|
||
@@ -720,3 +735,51 @@
|
||
d6cb97651f0bd8d61f4d22aa7550145bbe6fb051 jdk7u71-b11
|
||
959b4e5d2e3111920c198187f3bc66eba3e457f1 jdk7u71-b12
|
||
608f470d22689bab17bab0ea1dbee3e1a0802d5b jdk7u71-b13
|
||
+ad909197a1ce2df483a20ff9ac380382f779a9d3 jdk7u71-b14
|
||
+1bd3adac3aac3c29c81303812b35f484ff90cb2b jdk7u72-b01
|
||
+0caed46767e35c00eff69b22acf984d98eb66b3d jdk7u72-b02
|
||
+3a2934191de4bb8ca9d2faca93f3381e521e8cac jdk7u72-b03
|
||
+e4708cde2898df4c936595aacb57bc5b4e15869a jdk7u72-b04
|
||
+137e0859cd296cb8d9f9e327112ddc793ed59318 jdk7u72-b05
|
||
+4d9d227d70f33b70461230172386217317954312 jdk7u72-b06
|
||
+ece56f93f37b41b9c8875e54fbd8010277f6b460 jdk7u72-b07
|
||
+439c695a7aa03652ab92681120434b9ce8cdd2b7 jdk7u72-b08
|
||
+a27f16d45457a68a723acca621cb11bc173a0eb6 jdk7u72-b09
|
||
+e6508ab77271d1d3ce7b5f60d91a7334fdacb03a jdk7u72-b10
|
||
+c17a8487086433e14cd22373039a8b6b48e7cbb8 jdk7u72-b11
|
||
+a9e695f0d831f115720a4dcad3d33e0003b0acad jdk7u72-b12
|
||
+ac701f87d1ea46033c69f3e1cb84fc0a971da70c jdk7u72-b13
|
||
+d9b56c6bdddb6f9d8242230f5fdd58f9c7d30ea5 jdk7u72-b14
|
||
+a6ae698522bfab3c595a4f8c2c3ee7e8939eb1bb jdk7u72-b30
|
||
+492a2abed4ca015459e24f7348233531b7e929d2 jdk7u72-b31
|
||
+e6b6d91b3934c281086f8efacb0926e7451cc18b jdk7u75-b00
|
||
+9096ac248b379a0f3012f18c7289ec47cdef8459 jdk7u75-b01
|
||
+a6964b2822d906eab9c923cdd723cf3dd4facfcd jdk7u75-b02
|
||
+6c1a8b7ed616311a932715428620e262076bb68a jdk7u75-b03
|
||
+2480d9d778301a3f88b0ab8ee35a585df82528e5 jdk7u75-b04
|
||
+d81faf9016ce5c9f98264b1f724b3d6d85b12c07 jdk7u75-b05
|
||
+2ec4b796b1de3cfe58f051111dfd70ab367e553e jdk7u75-b06
|
||
+1d3906064cae18fdb0ff9a2045f2d8d48067bcd1 jdk7u75-b07
|
||
+dfcf951330b6f7c1a3cb88c819e94f680054a970 jdk7u75-b08
|
||
+ca20e7886db63792593f048f7308aed383775829 jdk7u75-b09
|
||
+5a0321dcf89383c31f3c6e4827b3275f9ef09a5e jdk7u75-b10
|
||
+82dcfb646bd5bc9f3674cb02ea9ba2598cff6bbe jdk7u75-b11
|
||
+18b74ded3ffc2e6fc5a3853f923c8dd49849dee1 jdk7u75-b12
|
||
+384fba17a49738baddeb55a4bfcf00b01af199ef jdk7u75-b13
|
||
+0c7d7c067c46fa0ddcb9170bed1d52f52a9ec831 jdk7u75-b30
|
||
+db9672d640ffd4e81348bdb718afab76032d8858 jdk7u75-b31
|
||
+3c01618f40c059bf192c0b16176b144113965ea7 jdk7u76-b00
|
||
+7b5d132c3a70f3c0667fe9df4cae045b46673267 jdk7u76-b01
|
||
+10c2cb5743cac7d6fedc9307af8450283367e5e2 jdk7u76-b02
|
||
+99a8d8e3f1c6311853bfc0a86de503830cd3db1a jdk7u76-b03
|
||
+15079dd9fd20f252d4c6dc6972508d3375cf5af2 jdk7u76-b04
|
||
+0ac38b5b642738fb27b446b0c1bc6108f31f197c jdk7u76-b05
|
||
+8580db8e38a232978f69fe627f3373e12c467803 jdk7u76-b06
|
||
+475a5cf6fc80c085c1be11b502ef44e7206c73d3 jdk7u76-b07
|
||
+64a7fa638019deebae59be4a4a262cfa1d7947ad jdk7u76-b08
|
||
+103eec0b084f7dfa0afce1ed9adebd6a9fab1aa8 jdk7u76-b09
|
||
+82b681cadc354b08b0aa2858d9b7f78576a8c1a4 jdk7u76-b10
|
||
+fd16bf65cfed7208af5740977a6699d18ac103b2 jdk7u76-b11
|
||
+e375023d196199ffb263cb15739f7218e1621be6 jdk7u76-b12
|
||
+a395c29532e5322657c542d54dd957940cf2f523 jdk7u76-b13
|
||
+98f0c5279ba76eb1b5741dc67f7b5f10e7508449 jdk7u76-b30
|
||
--- ./hotspot/agent/src/os/linux/libproc.h Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/agent/src/os/linux/libproc.h Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -34,19 +34,7 @@
|
||
#include "libproc_md.h"
|
||
#endif
|
||
|
||
-#if defined(sparc) || defined(sparcv9)
|
||
-/*
|
||
- If _LP64 is defined ptrace.h should be taken from /usr/include/asm-sparc64
|
||
- otherwise it should be from /usr/include/asm-sparc
|
||
- These two files define pt_regs structure differently
|
||
-*/
|
||
-#ifdef _LP64
|
||
-#include "asm-sparc64/ptrace.h"
|
||
-#else
|
||
-#include "asm-sparc/ptrace.h"
|
||
-#endif
|
||
-
|
||
-#endif //sparc or sparcv9
|
||
+#include <linux/ptrace.h>
|
||
|
||
/************************************************************************************
|
||
|
||
--- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2003, 2014, 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
|
||
@@ -61,8 +61,9 @@
|
||
long h = 0;
|
||
int s = 0;
|
||
int len = buf.length;
|
||
+ // Emulate the unsigned int in java_lang_String::hash_code
|
||
while (len-- > 0) {
|
||
- h = 31*h + (0xFFL & buf[s]);
|
||
+ h = 31*h + (0xFFFFFFFFL & buf[s]);
|
||
s++;
|
||
}
|
||
return h & 0xFFFFFFFFL;
|
||
--- ./hotspot/make/bsd/makefiles/mapfile-vers-debug Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/make/bsd/makefiles/mapfile-vers-debug Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -158,6 +158,7 @@
|
||
_JVM_GetStackTraceElement
|
||
_JVM_GetSystemPackage
|
||
_JVM_GetSystemPackages
|
||
+ _JVM_GetTemporaryDirectory
|
||
_JVM_GetThreadStateNames
|
||
_JVM_GetThreadStateValues
|
||
_JVM_GetVersionInfo
|
||
--- ./hotspot/make/bsd/makefiles/mapfile-vers-product Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/make/bsd/makefiles/mapfile-vers-product Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -158,6 +158,7 @@
|
||
_JVM_GetStackTraceElement
|
||
_JVM_GetSystemPackage
|
||
_JVM_GetSystemPackages
|
||
+ _JVM_GetTemporaryDirectory
|
||
_JVM_GetThreadStateNames
|
||
_JVM_GetThreadStateValues
|
||
_JVM_GetVersionInfo
|
||
--- ./hotspot/make/hotspot_version Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/make/hotspot_version Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
#
|
||
-# Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved.
|
||
+# Copyright (c) 2006, 2015, 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
|
||
@@ -31,11 +31,11 @@
|
||
#
|
||
|
||
# Don't put quotes (fail windows build).
|
||
-HOTSPOT_VM_COPYRIGHT=Copyright 2014
|
||
+HOTSPOT_VM_COPYRIGHT=Copyright 2015
|
||
|
||
HS_MAJOR_VER=24
|
||
-HS_MINOR_VER=71
|
||
-HS_BUILD_NUMBER=01
|
||
+HS_MINOR_VER=76
|
||
+HS_BUILD_NUMBER=04
|
||
|
||
JDK_MAJOR_VER=1
|
||
JDK_MINOR_VER=7
|
||
--- ./hotspot/make/jprt.properties Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/make/jprt.properties Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -38,7 +38,7 @@
|
||
|
||
# This tells jprt what default release we want to build
|
||
|
||
-jprt.hotspot.default.release=jdk7u40
|
||
+jprt.hotspot.default.release=jdk7u60
|
||
|
||
jprt.tools.default.release=${jprt.submit.option.release?${jprt.submit.option.release}:${jprt.hotspot.default.release}}
|
||
|
||
@@ -54,97 +54,92 @@
|
||
# Define the Solaris platforms we want for the various releases
|
||
jprt.my.solaris.sparc.jdk8=solaris_sparc_5.10
|
||
jprt.my.solaris.sparc.jdk7=solaris_sparc_5.10
|
||
-jprt.my.solaris.sparc.jdk7u40=${jprt.my.solaris.sparc.jdk7}
|
||
+jprt.my.solaris.sparc.jdk7u60=${jprt.my.solaris.sparc.jdk7}
|
||
jprt.my.solaris.sparc=${jprt.my.solaris.sparc.${jprt.tools.default.release}}
|
||
|
||
jprt.my.solaris.sparcv9.jdk8=solaris_sparcv9_5.10
|
||
jprt.my.solaris.sparcv9.jdk7=solaris_sparcv9_5.10
|
||
-jprt.my.solaris.sparcv9.jdk7u40=${jprt.my.solaris.sparcv9.jdk7}
|
||
+jprt.my.solaris.sparcv9.jdk7u60=${jprt.my.solaris.sparcv9.jdk7}
|
||
jprt.my.solaris.sparcv9=${jprt.my.solaris.sparcv9.${jprt.tools.default.release}}
|
||
|
||
jprt.my.solaris.i586.jdk8=solaris_i586_5.10
|
||
jprt.my.solaris.i586.jdk7=solaris_i586_5.10
|
||
-jprt.my.solaris.i586.jdk7u40=${jprt.my.solaris.i586.jdk7}
|
||
+jprt.my.solaris.i586.jdk7u60=${jprt.my.solaris.i586.jdk7}
|
||
jprt.my.solaris.i586=${jprt.my.solaris.i586.${jprt.tools.default.release}}
|
||
|
||
jprt.my.solaris.x64.jdk8=solaris_x64_5.10
|
||
jprt.my.solaris.x64.jdk7=solaris_x64_5.10
|
||
-jprt.my.solaris.x64.jdk7u40=${jprt.my.solaris.x64.jdk7}
|
||
+jprt.my.solaris.x64.jdk7u60=${jprt.my.solaris.x64.jdk7}
|
||
jprt.my.solaris.x64=${jprt.my.solaris.x64.${jprt.tools.default.release}}
|
||
|
||
jprt.my.linux.i586.jdk8=linux_i586_2.6
|
||
jprt.my.linux.i586.jdk7=linux_i586_2.6
|
||
-jprt.my.linux.i586.jdk7u40=${jprt.my.linux.i586.jdk7}
|
||
+jprt.my.linux.i586.jdk7u60=${jprt.my.linux.i586.jdk7}
|
||
jprt.my.linux.i586=${jprt.my.linux.i586.${jprt.tools.default.release}}
|
||
|
||
jprt.my.linux.x64.jdk8=linux_x64_2.6
|
||
jprt.my.linux.x64.jdk7=linux_x64_2.6
|
||
-jprt.my.linux.x64.jdk7u40=${jprt.my.linux.x64.jdk7}
|
||
+jprt.my.linux.x64.jdk7u60=${jprt.my.linux.x64.jdk7}
|
||
jprt.my.linux.x64=${jprt.my.linux.x64.${jprt.tools.default.release}}
|
||
|
||
jprt.my.linux.ppc.jdk8=linux_ppc_2.6
|
||
jprt.my.linux.ppc.jdk7=linux_ppc_2.6
|
||
-jprt.my.linux.ppc.jdk7u40=${jprt.my.linux.ppc.jdk7}
|
||
+jprt.my.linux.ppc.jdk7u60=${jprt.my.linux.ppc.jdk7}
|
||
jprt.my.linux.ppc=${jprt.my.linux.ppc.${jprt.tools.default.release}}
|
||
|
||
jprt.my.linux.ppcv2.jdk8=linux_ppcv2_2.6
|
||
jprt.my.linux.ppcv2.jdk7=linux_ppcv2_2.6
|
||
-jprt.my.linux.ppcv2.jdk7u40=${jprt.my.linux.ppcv2.jdk7}
|
||
+jprt.my.linux.ppcv2.jdk7u60=${jprt.my.linux.ppcv2.jdk7}
|
||
jprt.my.linux.ppcv2=${jprt.my.linux.ppcv2.${jprt.tools.default.release}}
|
||
|
||
-jprt.my.linux.ppcsflt.jdk8=linux_ppcsflt_2.6
|
||
-jprt.my.linux.ppcsflt.jdk7=linux_ppcsflt_2.6
|
||
-jprt.my.linux.ppcsflt.jdk7u40=${jprt.my.linux.ppcsflt.jdk7}
|
||
-jprt.my.linux.ppcsflt=${jprt.my.linux.ppcsflt.${jprt.tools.default.release}}
|
||
-
|
||
jprt.my.linux.armvfp.jdk8=linux_armvfp_2.6
|
||
jprt.my.linux.armvfp.jdk7=linux_armvfp_2.6
|
||
-jprt.my.linux.armvfp.jdk7u40=${jprt.my.linux.armvfp.jdk7}
|
||
+jprt.my.linux.armvfp.jdk7u60=${jprt.my.linux.armvfp.jdk7}
|
||
jprt.my.linux.armvfp=${jprt.my.linux.armvfp.${jprt.tools.default.release}}
|
||
|
||
jprt.my.linux.armvfpsflt.jdk8=linux_armvfpsflt_2.6
|
||
jprt.my.linux.armvfpsflt.jdk7=linux_armvfpsflt_2.6
|
||
-jprt.my.linux.armvfpsflt.jdk7u40=${jprt.my.linux.armvfpsflt.jdk7}
|
||
+jprt.my.linux.armvfpsflt.jdk7u60=${jprt.my.linux.armvfpsflt.jdk7}
|
||
jprt.my.linux.armvfpsflt=${jprt.my.linux.armvfpsflt.${jprt.tools.default.release}}
|
||
|
||
jprt.my.linux.armvfphflt.jdk8=linux_armvfphflt_2.6
|
||
jprt.my.linux.armvfphflt.jdk7=linux_armvfphflt_2.6
|
||
-jprt.my.linux.armvfphflt.jdk7u40=${jprt.my.linux.armvfphflt.jdk7}
|
||
+jprt.my.linux.armvfphflt.jdk7u60=${jprt.my.linux.armvfphflt.jdk7}
|
||
jprt.my.linux.armvfphflt=${jprt.my.linux.armvfphflt.${jprt.tools.default.release}}
|
||
|
||
jprt.my.linux.armv6.jdk8=linux_armv6_2.6
|
||
jprt.my.linux.armv6.jdk7=linux_armv6_2.6
|
||
-jprt.my.linux.armv6.jdk7u40=${jprt.my.linux.armv6.jdk7}
|
||
+jprt.my.linux.armv6.jdk7u60=${jprt.my.linux.armv6.jdk7}
|
||
jprt.my.linux.armv6=${jprt.my.linux.armv6.${jprt.tools.default.release}}
|
||
|
||
jprt.my.linux.armvs.jdk8=linux_armvs_2.6
|
||
jprt.my.linux.armvs.jdk7=linux_armvs_2.6
|
||
-jprt.my.linux.armvs.jdk7u40=${jprt.my.linux.armvs.jdk7}
|
||
+jprt.my.linux.armvs.jdk7u60=${jprt.my.linux.armvs.jdk7}
|
||
jprt.my.linux.armvs=${jprt.my.linux.armvs.${jprt.tools.default.release}}
|
||
|
||
jprt.my.linux.armvh.jdk8=linux_armvh_2.6
|
||
jprt.my.linux.armvh.jdk7=linux_armvh_2.6
|
||
-jprt.my.linux.armvh.jdk7u40=${jprt.my.linux.armvh.jdk7}
|
||
+jprt.my.linux.armvh.jdk7u60=${jprt.my.linux.armvh.jdk7}
|
||
jprt.my.linux.armvh=${jprt.my.linux.armvh.${jprt.tools.default.release}}
|
||
|
||
jprt.my.linux.armsflt.jdk8=linux_armsflt_2.6
|
||
jprt.my.linux.armsflt.jdk7=linux_armsflt_2.6
|
||
-jprt.my.linux.armsflt.jdk7u40=${jprt.my.linux.armsflt.jdk7}
|
||
+jprt.my.linux.armsflt.jdk7u60=${jprt.my.linux.armsflt.jdk7}
|
||
jprt.my.linux.armsflt=${jprt.my.linux.armsflt.${jprt.tools.default.release}}
|
||
|
||
jprt.my.macosx.x64.jdk8=macosx_x64_10.7
|
||
jprt.my.macosx.x64.jdk7=macosx_x64_10.7
|
||
-jprt.my.macosx.x64.jdk7u40=${jprt.my.macosx.x64.jdk7}
|
||
+jprt.my.macosx.x64.jdk7u60=${jprt.my.macosx.x64.jdk7}
|
||
jprt.my.macosx.x64=${jprt.my.macosx.x64.${jprt.tools.default.release}}
|
||
|
||
jprt.my.windows.i586.jdk8=windows_i586_5.1
|
||
jprt.my.windows.i586.jdk7=windows_i586_5.1
|
||
-jprt.my.windows.i586.jdk7u40=${jprt.my.windows.i586.jdk7}
|
||
+jprt.my.windows.i586.jdk7u60=${jprt.my.windows.i586.jdk7}
|
||
jprt.my.windows.i586=${jprt.my.windows.i586.${jprt.tools.default.release}}
|
||
|
||
jprt.my.windows.x64.jdk8=windows_x64_5.2
|
||
jprt.my.windows.x64.jdk7=windows_x64_5.2
|
||
-jprt.my.windows.x64.jdk7u40=${jprt.my.windows.x64.jdk7}
|
||
+jprt.my.windows.x64.jdk7u60=${jprt.my.windows.x64.jdk7}
|
||
jprt.my.windows.x64=${jprt.my.windows.x64.${jprt.tools.default.release}}
|
||
|
||
# Standard list of jprt build targets for this source tree
|
||
@@ -172,7 +167,6 @@
|
||
${jprt.my.linux.i586}-{productEmb|fastdebugEmb|debugEmb}, \
|
||
${jprt.my.linux.ppc}-{productEmb|fastdebugEmb}, \
|
||
${jprt.my.linux.ppcv2}-{productEmb|fastdebugEmb}, \
|
||
- ${jprt.my.linux.ppcsflt}-{productEmb|fastdebugEmb}, \
|
||
${jprt.my.linux.armvfp}-{productEmb|fastdebugEmb}, \
|
||
${jprt.my.linux.armsflt}-{productEmb|fastdebugEmb}, \
|
||
${jprt.my.linux.armvfpsflt}-{productEmb|fastdebugEmb}, \
|
||
@@ -183,7 +177,7 @@
|
||
|
||
jprt.build.targets.jdk8=${jprt.build.targets.all}
|
||
jprt.build.targets.jdk7=${jprt.build.targets.all}
|
||
-jprt.build.targets.jdk7u40=${jprt.build.targets.all}
|
||
+jprt.build.targets.jdk7u60=${jprt.build.targets.all}
|
||
jprt.build.targets=${jprt.build.targets.${jprt.tools.default.release}}
|
||
|
||
# Subset lists of test targets for this source tree
|
||
@@ -476,7 +470,7 @@
|
||
|
||
jprt.test.targets.jdk8=${jprt.test.targets.standard}
|
||
jprt.test.targets.jdk7=${jprt.test.targets.standard}
|
||
-jprt.test.targets.jdk7u40=${jprt.test.targets.jdk7}
|
||
+jprt.test.targets.jdk7u60=${jprt.test.targets.jdk7}
|
||
jprt.test.targets=${jprt.test.targets.${jprt.tools.default.release}}
|
||
|
||
# The default test/Makefile targets that should be run
|
||
@@ -536,7 +530,7 @@
|
||
|
||
jprt.make.rule.test.targets.jdk8=${jprt.make.rule.test.targets.standard}
|
||
jprt.make.rule.test.targets.jdk7=${jprt.make.rule.test.targets.standard}
|
||
-jprt.make.rule.test.targets.jdk7u40=${jprt.make.rule.test.targets.jdk7}
|
||
+jprt.make.rule.test.targets.jdk7u60=${jprt.make.rule.test.targets.jdk7}
|
||
jprt.make.rule.test.targets=${jprt.make.rule.test.targets.${jprt.tools.default.release}}
|
||
|
||
# 7155453: Work-around to prevent popups on OSX from blocking test completion
|
||
--- ./hotspot/make/linux/makefiles/mapfile-vers-debug Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/make/linux/makefiles/mapfile-vers-debug Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -123,7 +123,7 @@
|
||
JVM_GetClassModifiers;
|
||
JVM_GetClassName;
|
||
JVM_GetClassNameUTF;
|
||
- JVM_GetClassSignature;
|
||
+ JVM_GetClassSignature;
|
||
JVM_GetClassSigners;
|
||
JVM_GetComponentType;
|
||
JVM_GetDeclaredClasses;
|
||
@@ -160,6 +160,7 @@
|
||
JVM_GetStackTraceElement;
|
||
JVM_GetSystemPackage;
|
||
JVM_GetSystemPackages;
|
||
+ JVM_GetTemporaryDirectory;
|
||
JVM_GetThreadStateNames;
|
||
JVM_GetThreadStateValues;
|
||
JVM_GetVersionInfo;
|
||
--- ./hotspot/make/linux/makefiles/mapfile-vers-product Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/make/linux/makefiles/mapfile-vers-product Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -160,6 +160,7 @@
|
||
JVM_GetStackTraceElement;
|
||
JVM_GetSystemPackage;
|
||
JVM_GetSystemPackages;
|
||
+ JVM_GetTemporaryDirectory;
|
||
JVM_GetThreadStateNames;
|
||
JVM_GetThreadStateValues;
|
||
JVM_GetVersionInfo;
|
||
--- ./hotspot/make/solaris/makefiles/mapfile-vers Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/make/solaris/makefiles/mapfile-vers Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -160,6 +160,7 @@
|
||
JVM_GetStackTraceElement;
|
||
JVM_GetSystemPackage;
|
||
JVM_GetSystemPackages;
|
||
+ JVM_GetTemporaryDirectory;
|
||
JVM_GetThreadStateNames;
|
||
JVM_GetThreadStateValues;
|
||
JVM_GetVersionInfo;
|
||
--- ./hotspot/src/cpu/sparc/vm/assembler_sparc.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/cpu/sparc/vm/assembler_sparc.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1745,7 +1745,7 @@
|
||
|
||
inline void swap( Register s1, Register s2, Register d );
|
||
inline void swap( Register s1, int simm13a, Register d);
|
||
- inline void swap( Address& a, Register d, int offset = 0 );
|
||
+ inline void swap( const Address& a, Register d, int offset = 0 );
|
||
|
||
// pp 232
|
||
|
||
--- ./hotspot/src/cpu/sparc/vm/assembler_sparc.inline.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/cpu/sparc/vm/assembler_sparc.inline.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -347,7 +347,7 @@
|
||
inline void Assembler::swap( Register s1, Register s2, Register d) { v9_dep(); emit_long( op(ldst_op) | rd(d) | op3(swap_op3) | rs1(s1) | rs2(s2) ); }
|
||
inline void Assembler::swap( Register s1, int simm13a, Register d) { v9_dep(); emit_data( op(ldst_op) | rd(d) | op3(swap_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||
|
||
-inline void Assembler::swap( Address& a, Register d, int offset ) {
|
||
+inline void Assembler::swap( const Address& a, Register d, int offset ) {
|
||
relocate(a.rspec(offset));
|
||
if (a.has_index()) { assert(offset == 0, ""); swap( a.base(), a.index(), d ); }
|
||
else { swap( a.base(), a.disp() + offset, d ); }
|
||
--- ./hotspot/src/cpu/sparc/vm/copy_sparc.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/cpu/sparc/vm/copy_sparc.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -184,7 +184,7 @@
|
||
assert(MinObjAlignmentInBytes >= BytesPerLong, "need alternate implementation");
|
||
|
||
if (value == 0 && UseBlockZeroing &&
|
||
- (count > (BlockZeroingLowLimit >> LogHeapWordSize))) {
|
||
+ (count > (size_t)(BlockZeroingLowLimit >> LogHeapWordSize))) {
|
||
// Call it only when block zeroing is used
|
||
((_zero_Fn)StubRoutines::zero_aligned_words())(tohw, count);
|
||
} else {
|
||
--- ./hotspot/src/cpu/sparc/vm/frame_sparc.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/cpu/sparc/vm/frame_sparc.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -282,8 +282,8 @@
|
||
|
||
// next two fns read and write Lmonitors value,
|
||
private:
|
||
- BasicObjectLock* interpreter_frame_monitors() const { return *interpreter_frame_monitors_addr(); }
|
||
- void interpreter_frame_set_monitors(BasicObjectLock* monitors) { *interpreter_frame_monitors_addr() = monitors; }
|
||
+ BasicObjectLock* interpreter_frame_monitors() const;
|
||
+ void interpreter_frame_set_monitors(BasicObjectLock* monitors);
|
||
#else
|
||
public:
|
||
inline interpreterState get_interpreterState() const {
|
||
--- ./hotspot/src/cpu/sparc/vm/frame_sparc.inline.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/cpu/sparc/vm/frame_sparc.inline.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -217,6 +217,13 @@
|
||
return (methodOop*)sp_addr_at( Lmethod->sp_offset_in_saved_window());
|
||
}
|
||
|
||
+inline BasicObjectLock* frame::interpreter_frame_monitors() const {
|
||
+ return *interpreter_frame_monitors_addr();
|
||
+}
|
||
+
|
||
+inline void frame::interpreter_frame_set_monitors(BasicObjectLock* monitors) {
|
||
+ *interpreter_frame_monitors_addr() = monitors;
|
||
+}
|
||
|
||
// Constant pool cache
|
||
|
||
--- ./hotspot/src/cpu/sparc/vm/sharedRuntime_sparc.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/cpu/sparc/vm/sharedRuntime_sparc.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1142,50 +1142,81 @@
|
||
// Hoist any int/ptr/long's in the first 6 to int regs.
|
||
// Hoist any flt/dbl's in the first 16 dbl regs.
|
||
int j = 0; // Count of actual args, not HALVES
|
||
- for( int i=0; i<total_args_passed; i++, j++ ) {
|
||
- switch( sig_bt[i] ) {
|
||
+ VMRegPair param_array_reg; // location of the argument in the parameter array
|
||
+ for (int i = 0; i < total_args_passed; i++, j++) {
|
||
+ param_array_reg.set_bad();
|
||
+ switch (sig_bt[i]) {
|
||
case T_BOOLEAN:
|
||
case T_BYTE:
|
||
case T_CHAR:
|
||
case T_INT:
|
||
case T_SHORT:
|
||
- regs[i].set1( int_stk_helper( j ) ); break;
|
||
+ regs[i].set1(int_stk_helper(j));
|
||
+ break;
|
||
case T_LONG:
|
||
- assert( sig_bt[i+1] == T_VOID, "expecting half" );
|
||
+ assert(sig_bt[i+1] == T_VOID, "expecting half");
|
||
case T_ADDRESS: // raw pointers, like current thread, for VM calls
|
||
case T_ARRAY:
|
||
case T_OBJECT:
|
||
- regs[i].set2( int_stk_helper( j ) );
|
||
+ regs[i].set2(int_stk_helper(j));
|
||
break;
|
||
case T_FLOAT:
|
||
- if ( j < 16 ) {
|
||
- // V9ism: floats go in ODD registers
|
||
- regs[i].set1(as_FloatRegister(1 + (j<<1))->as_VMReg());
|
||
- } else {
|
||
- // V9ism: floats go in ODD stack slot
|
||
- regs[i].set1(VMRegImpl::stack2reg(1 + (j<<1)));
|
||
+ // Per SPARC Compliance Definition 2.4.1, page 3P-12 available here
|
||
+ // http://www.sparc.org/wp-content/uploads/2014/01/SCD.2.4.1.pdf.gz
|
||
+ //
|
||
+ // "When a callee prototype exists, and does not indicate variable arguments,
|
||
+ // floating-point values assigned to locations %sp+BIAS+128 through %sp+BIAS+248
|
||
+ // will be promoted to floating-point registers"
|
||
+ //
|
||
+ // By "promoted" it means that the argument is located in two places, an unused
|
||
+ // spill slot in the "parameter array" (starts at %sp+BIAS+128), and a live
|
||
+ // float register. In most cases, there are 6 or fewer arguments of any type,
|
||
+ // and the standard parameter array slots (%sp+BIAS+128 to %sp+BIAS+176 exclusive)
|
||
+ // serve as shadow slots. Per the spec floating point registers %d6 to %d16
|
||
+ // require slots beyond that (up to %sp+BIAS+248).
|
||
+ //
|
||
+ {
|
||
+ // V9ism: floats go in ODD registers and stack slots
|
||
+ int float_index = 1 + (j << 1);
|
||
+ param_array_reg.set1(VMRegImpl::stack2reg(float_index));
|
||
+ if (j < 16) {
|
||
+ regs[i].set1(as_FloatRegister(float_index)->as_VMReg());
|
||
+ } else {
|
||
+ regs[i] = param_array_reg;
|
||
+ }
|
||
}
|
||
break;
|
||
case T_DOUBLE:
|
||
- assert( sig_bt[i+1] == T_VOID, "expecting half" );
|
||
- if ( j < 16 ) {
|
||
- // V9ism: doubles go in EVEN/ODD regs
|
||
- regs[i].set2(as_FloatRegister(j<<1)->as_VMReg());
|
||
- } else {
|
||
- // V9ism: doubles go in EVEN/ODD stack slots
|
||
- regs[i].set2(VMRegImpl::stack2reg(j<<1));
|
||
+ {
|
||
+ assert(sig_bt[i + 1] == T_VOID, "expecting half");
|
||
+ // V9ism: doubles go in EVEN/ODD regs and stack slots
|
||
+ int double_index = (j << 1);
|
||
+ param_array_reg.set2(VMRegImpl::stack2reg(double_index));
|
||
+ if (j < 16) {
|
||
+ regs[i].set2(as_FloatRegister(double_index)->as_VMReg());
|
||
+ } else {
|
||
+ // V9ism: doubles go in EVEN/ODD stack slots
|
||
+ regs[i] = param_array_reg;
|
||
+ }
|
||
}
|
||
break;
|
||
- case T_VOID: regs[i].set_bad(); j--; break; // Do not count HALVES
|
||
+ case T_VOID:
|
||
+ regs[i].set_bad();
|
||
+ j--;
|
||
+ break; // Do not count HALVES
|
||
default:
|
||
ShouldNotReachHere();
|
||
}
|
||
- if (regs[i].first()->is_stack()) {
|
||
- int off = regs[i].first()->reg2stack();
|
||
+ // Keep track of the deepest parameter array slot.
|
||
+ if (!param_array_reg.first()->is_valid()) {
|
||
+ param_array_reg = regs[i];
|
||
+ }
|
||
+ if (param_array_reg.first()->is_stack()) {
|
||
+ int off = param_array_reg.first()->reg2stack();
|
||
if (off > max_stack_slots) max_stack_slots = off;
|
||
}
|
||
- if (regs[i].second()->is_stack()) {
|
||
- int off = regs[i].second()->reg2stack();
|
||
+ if (param_array_reg.second()->is_stack()) {
|
||
+ int off = param_array_reg.second()->reg2stack();
|
||
if (off > max_stack_slots) max_stack_slots = off;
|
||
}
|
||
}
|
||
@@ -1193,8 +1224,8 @@
|
||
#else // _LP64
|
||
// V8 convention: first 6 things in O-regs, rest on stack.
|
||
// Alignment is willy-nilly.
|
||
- for( int i=0; i<total_args_passed; i++ ) {
|
||
- switch( sig_bt[i] ) {
|
||
+ for (int i = 0; i < total_args_passed; i++) {
|
||
+ switch (sig_bt[i]) {
|
||
case T_ADDRESS: // raw pointers, like current thread, for VM calls
|
||
case T_ARRAY:
|
||
case T_BOOLEAN:
|
||
@@ -1204,23 +1235,23 @@
|
||
case T_INT:
|
||
case T_OBJECT:
|
||
case T_SHORT:
|
||
- regs[i].set1( int_stk_helper( i ) );
|
||
+ regs[i].set1(int_stk_helper(i));
|
||
break;
|
||
case T_DOUBLE:
|
||
case T_LONG:
|
||
- assert( sig_bt[i+1] == T_VOID, "expecting half" );
|
||
- regs[i].set_pair( int_stk_helper( i+1 ), int_stk_helper( i ) );
|
||
+ assert(sig_bt[i + 1] == T_VOID, "expecting half");
|
||
+ regs[i].set_pair(int_stk_helper(i + 1), int_stk_helper(i));
|
||
break;
|
||
case T_VOID: regs[i].set_bad(); break;
|
||
default:
|
||
ShouldNotReachHere();
|
||
}
|
||
if (regs[i].first()->is_stack()) {
|
||
- int off = regs[i].first()->reg2stack();
|
||
+ int off = regs[i].first()->reg2stack();
|
||
if (off > max_stack_slots) max_stack_slots = off;
|
||
}
|
||
if (regs[i].second()->is_stack()) {
|
||
- int off = regs[i].second()->reg2stack();
|
||
+ int off = regs[i].second()->reg2stack();
|
||
if (off > max_stack_slots) max_stack_slots = off;
|
||
}
|
||
}
|
||
@@ -1369,11 +1400,10 @@
|
||
const Register rOop = src.first()->as_Register();
|
||
const Register rHandle = L5;
|
||
int oop_slot = rOop->input_number() * VMRegImpl::slots_per_word + oop_handle_offset;
|
||
- int offset = oop_slot*VMRegImpl::stack_slot_size;
|
||
- Label skip;
|
||
+ int offset = oop_slot * VMRegImpl::stack_slot_size;
|
||
__ st_ptr(rOop, SP, offset + STACK_BIAS);
|
||
if (is_receiver) {
|
||
- *receiver_offset = oop_slot * VMRegImpl::stack_slot_size;
|
||
+ *receiver_offset = offset;
|
||
}
|
||
map->set_oop(VMRegImpl::stack2reg(oop_slot));
|
||
__ add(SP, offset + STACK_BIAS, rHandle);
|
||
--- ./hotspot/src/cpu/sparc/vm/sparc.ad Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/cpu/sparc/vm/sparc.ad Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1978,7 +1978,7 @@
|
||
// to implement the UseStrictFP mode.
|
||
const bool Matcher::strict_fp_requires_explicit_rounding = false;
|
||
|
||
-// Are floats conerted to double when stored to stack during deoptimization?
|
||
+// Are floats converted to double when stored to stack during deoptimization?
|
||
// Sparc does not handle callee-save floats.
|
||
bool Matcher::float_in_double() { return false; }
|
||
|
||
@@ -3216,7 +3216,7 @@
|
||
// are owned by the CALLEE. Holes should not be nessecary in the
|
||
// incoming area, as the Java calling convention is completely under
|
||
// the control of the AD file. Doubles can be sorted and packed to
|
||
-// avoid holes. Holes in the outgoing arguments may be nessecary for
|
||
+// avoid holes. Holes in the outgoing arguments may be necessary for
|
||
// varargs C calling conventions.
|
||
// Note 3: Region 0-3 is even aligned, with pad2 as needed. Region 3-5 is
|
||
// even aligned with pad0 as needed.
|
||
@@ -3282,7 +3282,7 @@
|
||
%}
|
||
|
||
// Body of function which returns an OptoRegs array locating
|
||
- // arguments either in registers or in stack slots for callin
|
||
+ // arguments either in registers or in stack slots for calling
|
||
// C.
|
||
c_calling_convention %{
|
||
// This is obviously always outgoing
|
||
--- ./hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -89,7 +89,7 @@
|
||
private:
|
||
|
||
#ifdef PRODUCT
|
||
-#define inc_counter_np(a,b,c) (0)
|
||
+#define inc_counter_np(a,b,c)
|
||
#else
|
||
#define inc_counter_np(counter, t1, t2) \
|
||
BLOCK_COMMENT("inc_counter " #counter); \
|
||
@@ -1126,7 +1126,7 @@
|
||
Label& L_loop, bool use_prefetch, bool use_bis);
|
||
|
||
void disjoint_copy_core(Register from, Register to, Register count, int log2_elem_size,
|
||
- int iter_size, CopyLoopFunc copy_loop_func) {
|
||
+ int iter_size, StubGenerator::CopyLoopFunc copy_loop_func) {
|
||
Label L_copy;
|
||
|
||
assert(log2_elem_size <= 3, "the following code should be changed");
|
||
@@ -1277,7 +1277,7 @@
|
||
__ inc(from, 8);
|
||
__ sllx(O3, left_shift, O3);
|
||
|
||
- disjoint_copy_core(from, to, count, log2_elem_size, 16, copy_16_bytes_shift_loop);
|
||
+ disjoint_copy_core(from, to, count, log2_elem_size, 16, &StubGenerator::copy_16_bytes_shift_loop);
|
||
|
||
__ inccc(count, count_dec>>1 ); // + 8 bytes
|
||
__ brx(Assembler::negative, true, Assembler::pn, L_copy_last_bytes);
|
||
@@ -2156,7 +2156,7 @@
|
||
__ dec(count, 4); // The cmp at the beginning guaranty count >= 4
|
||
__ sllx(O3, 32, O3);
|
||
|
||
- disjoint_copy_core(from, to, count, 2, 16, copy_16_bytes_loop);
|
||
+ disjoint_copy_core(from, to, count, 2, 16, &StubGenerator::copy_16_bytes_loop);
|
||
|
||
__ br(Assembler::always, false, Assembler::pt, L_copy_4_bytes);
|
||
__ delayed()->inc(count, 4); // restore 'count'
|
||
@@ -2437,7 +2437,7 @@
|
||
// count >= 0 (original count - 8)
|
||
__ mov(from, from64);
|
||
|
||
- disjoint_copy_core(from64, to64, count, 3, 64, copy_64_bytes_loop);
|
||
+ disjoint_copy_core(from64, to64, count, 3, 64, &StubGenerator::copy_64_bytes_loop);
|
||
|
||
// Restore O4(offset0), O5(offset8)
|
||
__ sub(from64, from, offset0);
|
||
--- ./hotspot/src/cpu/sparc/vm/vm_version_sparc.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/cpu/sparc/vm/vm_version_sparc.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -48,7 +48,8 @@
|
||
sparc64_family = 14,
|
||
M_family = 15,
|
||
T_family = 16,
|
||
- T1_model = 17
|
||
+ T1_model = 17,
|
||
+ sparc5_instructions = 18
|
||
};
|
||
|
||
enum Feature_Flag_Set {
|
||
@@ -73,6 +74,7 @@
|
||
M_family_m = 1 << M_family,
|
||
T_family_m = 1 << T_family,
|
||
T1_model_m = 1 << T1_model,
|
||
+ sparc5_instructions_m = 1 << sparc5_instructions,
|
||
|
||
generic_v8_m = v8_instructions_m | hardware_mul32_m | hardware_div32_m | hardware_fsmuld_m,
|
||
generic_v9_m = generic_v8_m | v9_instructions_m,
|
||
@@ -117,6 +119,7 @@
|
||
static bool has_vis3() { return (_features & vis3_instructions_m) != 0; }
|
||
static bool has_blk_init() { return (_features & blk_init_instructions_m) != 0; }
|
||
static bool has_cbcond() { return (_features & cbcond_instructions_m) != 0; }
|
||
+ static bool has_sparc5_instr() { return (_features & sparc5_instructions_m) != 0; }
|
||
|
||
static bool supports_compare_and_exchange()
|
||
{ return has_v9(); }
|
||
@@ -127,6 +130,7 @@
|
||
|
||
static bool is_M_series() { return is_M_family(_features); }
|
||
static bool is_T4() { return is_T_family(_features) && has_cbcond(); }
|
||
+ static bool is_T7() { return is_T_family(_features) && has_sparc5_instr(); }
|
||
|
||
// Fujitsu SPARC64
|
||
static bool is_sparc64() { return (_features & sparc64_family_m) != 0; }
|
||
@@ -146,7 +150,7 @@
|
||
static const char* cpu_features() { return _features_str; }
|
||
|
||
static intx prefetch_data_size() {
|
||
- return is_T4() ? 32 : 64; // default prefetch block size on sparc
|
||
+ return is_T4() && !is_T7() ? 32 : 64; // default prefetch block size on sparc
|
||
}
|
||
|
||
// Prefetch
|
||
--- ./hotspot/src/os/bsd/vm/os_bsd.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/os/bsd/vm/os_bsd.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1297,9 +1297,20 @@
|
||
//////////////////////////////////////////////////////////////////////////////
|
||
// thread local storage
|
||
|
||
+// Restore the thread pointer if the destructor is called. This is in case
|
||
+// someone from JNI code sets up a destructor with pthread_key_create to run
|
||
+// detachCurrentThread on thread death. Unless we restore the thread pointer we
|
||
+// will hang or crash. When detachCurrentThread is called the key will be set
|
||
+// to null and we will not be called again. If detachCurrentThread is never
|
||
+// called we could loop forever depending on the pthread implementation.
|
||
+static void restore_thread_pointer(void* p) {
|
||
+ Thread* thread = (Thread*) p;
|
||
+ os::thread_local_storage_at_put(ThreadLocalStorage::thread_index(), thread);
|
||
+}
|
||
+
|
||
int os::allocate_thread_local_storage() {
|
||
pthread_key_t key;
|
||
- int rslt = pthread_key_create(&key, NULL);
|
||
+ int rslt = pthread_key_create(&key, restore_thread_pointer);
|
||
assert(rslt == 0, "cannot allocate thread local storage");
|
||
return (int)key;
|
||
}
|
||
@@ -4422,11 +4433,15 @@
|
||
// and if UserSignalHandler is installed all bets are off
|
||
if (CheckJNICalls) {
|
||
if (libjsig_is_loaded) {
|
||
- tty->print_cr("Info: libjsig is activated, all active signal checking is disabled");
|
||
+ if (PrintJNIResolving) {
|
||
+ tty->print_cr("Info: libjsig is activated, all active signal checking is disabled");
|
||
+ }
|
||
check_signals = false;
|
||
}
|
||
if (AllowUserSignalHandlers) {
|
||
- tty->print_cr("Info: AllowUserSignalHandlers is activated, all active signal checking is disabled");
|
||
+ if (PrintJNIResolving) {
|
||
+ tty->print_cr("Info: AllowUserSignalHandlers is activated, all active signal checking is disabled");
|
||
+ }
|
||
check_signals = false;
|
||
}
|
||
}
|
||
--- ./hotspot/src/os/bsd/vm/perfMemory_bsd.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/os/bsd/vm/perfMemory_bsd.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -197,7 +197,38 @@
|
||
}
|
||
|
||
|
||
-// check if the given path is considered a secure directory for
|
||
+// Check if the given statbuf is considered a secure directory for
|
||
+// the backing store files. Returns true if the directory is considered
|
||
+// a secure location. Returns false if the statbuf is a symbolic link or
|
||
+// if an error occurred.
|
||
+//
|
||
+static bool is_statbuf_secure(struct stat *statp) {
|
||
+ if (S_ISLNK(statp->st_mode) || !S_ISDIR(statp->st_mode)) {
|
||
+ // The path represents a link or some non-directory file type,
|
||
+ // which is not what we expected. Declare it insecure.
|
||
+ //
|
||
+ return false;
|
||
+ }
|
||
+ // We have an existing directory, check if the permissions are safe.
|
||
+ //
|
||
+ if ((statp->st_mode & (S_IWGRP|S_IWOTH)) != 0) {
|
||
+ // The directory is open for writing and could be subjected
|
||
+ // to a symlink or a hard link attack. Declare it insecure.
|
||
+ //
|
||
+ return false;
|
||
+ }
|
||
+ // See if the uid of the directory matches the effective uid of the process.
|
||
+ //
|
||
+ if (statp->st_uid != geteuid()) {
|
||
+ // The directory was not created by this user, declare it insecure.
|
||
+ //
|
||
+ return false;
|
||
+ }
|
||
+ return true;
|
||
+}
|
||
+
|
||
+
|
||
+// Check if the given path is considered a secure directory for
|
||
// the backing store files. Returns true if the directory exists
|
||
// and is considered a secure location. Returns false if the path
|
||
// is a symbolic link or if an error occurred.
|
||
@@ -211,27 +242,185 @@
|
||
return false;
|
||
}
|
||
|
||
- // the path exists, now check it's mode
|
||
- if (S_ISLNK(statbuf.st_mode) || !S_ISDIR(statbuf.st_mode)) {
|
||
- // the path represents a link or some non-directory file type,
|
||
- // which is not what we expected. declare it insecure.
|
||
- //
|
||
+ // The path exists, see if it is secure.
|
||
+ return is_statbuf_secure(&statbuf);
|
||
+}
|
||
+
|
||
+
|
||
+// Check if the given directory file descriptor is considered a secure
|
||
+// directory for the backing store files. Returns true if the directory
|
||
+// exists and is considered a secure location. Returns false if the path
|
||
+// is a symbolic link or if an error occurred.
|
||
+//
|
||
+static bool is_dirfd_secure(int dir_fd) {
|
||
+ struct stat statbuf;
|
||
+ int result = 0;
|
||
+
|
||
+ RESTARTABLE(::fstat(dir_fd, &statbuf), result);
|
||
+ if (result == OS_ERR) {
|
||
return false;
|
||
}
|
||
- else {
|
||
- // we have an existing directory, check if the permissions are safe.
|
||
- //
|
||
- if ((statbuf.st_mode & (S_IWGRP|S_IWOTH)) != 0) {
|
||
- // the directory is open for writing and could be subjected
|
||
- // to a symlnk attack. declare it insecure.
|
||
- //
|
||
- return false;
|
||
+
|
||
+ // The path exists, now check its mode.
|
||
+ return is_statbuf_secure(&statbuf);
|
||
+}
|
||
+
|
||
+
|
||
+// Check to make sure fd1 and fd2 are referencing the same file system object.
|
||
+//
|
||
+static bool is_same_fsobject(int fd1, int fd2) {
|
||
+ struct stat statbuf1;
|
||
+ struct stat statbuf2;
|
||
+ int result = 0;
|
||
+
|
||
+ RESTARTABLE(::fstat(fd1, &statbuf1), result);
|
||
+ if (result == OS_ERR) {
|
||
+ return false;
|
||
+ }
|
||
+ RESTARTABLE(::fstat(fd2, &statbuf2), result);
|
||
+ if (result == OS_ERR) {
|
||
+ return false;
|
||
+ }
|
||
+
|
||
+ if ((statbuf1.st_ino == statbuf2.st_ino) &&
|
||
+ (statbuf1.st_dev == statbuf2.st_dev)) {
|
||
+ return true;
|
||
+ } else {
|
||
+ return false;
|
||
+ }
|
||
+}
|
||
+
|
||
+
|
||
+// Open the directory of the given path and validate it.
|
||
+// Return a DIR * of the open directory.
|
||
+//
|
||
+static DIR *open_directory_secure(const char* dirname) {
|
||
+ // Open the directory using open() so that it can be verified
|
||
+ // to be secure by calling is_dirfd_secure(), opendir() and then check
|
||
+ // to see if they are the same file system object. This method does not
|
||
+ // introduce a window of opportunity for the directory to be attacked that
|
||
+ // calling opendir() and is_directory_secure() does.
|
||
+ int result;
|
||
+ DIR *dirp = NULL;
|
||
+ RESTARTABLE(::open(dirname, O_RDONLY|O_NOFOLLOW), result);
|
||
+ if (result == OS_ERR) {
|
||
+ // Directory doesn't exist or is a symlink, so there is nothing to cleanup.
|
||
+ if (PrintMiscellaneous && Verbose) {
|
||
+ if (errno == ELOOP) {
|
||
+ warning("directory %s is a symlink and is not secure\n", dirname);
|
||
+ } else {
|
||
+ warning("could not open directory %s: %s\n", dirname, strerror(errno));
|
||
+ }
|
||
}
|
||
+ return dirp;
|
||
+ }
|
||
+ int fd = result;
|
||
+
|
||
+ // Determine if the open directory is secure.
|
||
+ if (!is_dirfd_secure(fd)) {
|
||
+ // The directory is not a secure directory.
|
||
+ os::close(fd);
|
||
+ return dirp;
|
||
+ }
|
||
+
|
||
+ // Open the directory.
|
||
+ dirp = ::opendir(dirname);
|
||
+ if (dirp == NULL) {
|
||
+ // The directory doesn't exist, close fd and return.
|
||
+ os::close(fd);
|
||
+ return dirp;
|
||
+ }
|
||
+
|
||
+ // Check to make sure fd and dirp are referencing the same file system object.
|
||
+ if (!is_same_fsobject(fd, dirfd(dirp))) {
|
||
+ // The directory is not secure.
|
||
+ os::close(fd);
|
||
+ os::closedir(dirp);
|
||
+ dirp = NULL;
|
||
+ return dirp;
|
||
+ }
|
||
+
|
||
+ // Close initial open now that we know directory is secure
|
||
+ os::close(fd);
|
||
+
|
||
+ return dirp;
|
||
+}
|
||
+
|
||
+// NOTE: The code below uses fchdir(), open() and unlink() because
|
||
+// fdopendir(), openat() and unlinkat() are not supported on all
|
||
+// versions. Once the support for fdopendir(), openat() and unlinkat()
|
||
+// is available on all supported versions the code can be changed
|
||
+// to use these functions.
|
||
+
|
||
+// Open the directory of the given path, validate it and set the
|
||
+// current working directory to it.
|
||
+// Return a DIR * of the open directory and the saved cwd fd.
|
||
+//
|
||
+static DIR *open_directory_secure_cwd(const char* dirname, int *saved_cwd_fd) {
|
||
+
|
||
+ // Open the directory.
|
||
+ DIR* dirp = open_directory_secure(dirname);
|
||
+ if (dirp == NULL) {
|
||
+ // Directory doesn't exist or is insecure, so there is nothing to cleanup.
|
||
+ return dirp;
|
||
+ }
|
||
+ int fd = dirfd(dirp);
|
||
+
|
||
+ // Open a fd to the cwd and save it off.
|
||
+ int result;
|
||
+ RESTARTABLE(::open(".", O_RDONLY), result);
|
||
+ if (result == OS_ERR) {
|
||
+ *saved_cwd_fd = -1;
|
||
+ } else {
|
||
+ *saved_cwd_fd = result;
|
||
+ }
|
||
+
|
||
+ // Set the current directory to dirname by using the fd of the directory.
|
||
+ result = fchdir(fd);
|
||
+
|
||
+ return dirp;
|
||
+}
|
||
+
|
||
+// Close the directory and restore the current working directory.
|
||
+//
|
||
+static void close_directory_secure_cwd(DIR* dirp, int saved_cwd_fd) {
|
||
+
|
||
+ int result;
|
||
+ // If we have a saved cwd change back to it and close the fd.
|
||
+ if (saved_cwd_fd != -1) {
|
||
+ result = fchdir(saved_cwd_fd);
|
||
+ ::close(saved_cwd_fd);
|
||
+ }
|
||
+
|
||
+ // Close the directory.
|
||
+ os::closedir(dirp);
|
||
+}
|
||
+
|
||
+// Check if the given file descriptor is considered a secure.
|
||
+//
|
||
+static bool is_file_secure(int fd, const char *filename) {
|
||
+
|
||
+ int result;
|
||
+ struct stat statbuf;
|
||
+
|
||
+ // Determine if the file is secure.
|
||
+ RESTARTABLE(::fstat(fd, &statbuf), result);
|
||
+ if (result == OS_ERR) {
|
||
+ if (PrintMiscellaneous && Verbose) {
|
||
+ warning("fstat failed on %s: %s\n", filename, strerror(errno));
|
||
+ }
|
||
+ return false;
|
||
+ }
|
||
+ if (statbuf.st_nlink > 1) {
|
||
+ // A file with multiple links is not expected.
|
||
+ if (PrintMiscellaneous && Verbose) {
|
||
+ warning("file %s has multiple links\n", filename);
|
||
+ }
|
||
+ return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
-
|
||
// return the user name for the given user id
|
||
//
|
||
// the caller is expected to free the allocated memory.
|
||
@@ -317,9 +506,11 @@
|
||
|
||
const char* tmpdirname = os::get_temp_directory();
|
||
|
||
+ // open the temp directory
|
||
DIR* tmpdirp = os::opendir(tmpdirname);
|
||
|
||
if (tmpdirp == NULL) {
|
||
+ // Cannot open the directory to get the user name, return.
|
||
return NULL;
|
||
}
|
||
|
||
@@ -344,25 +535,14 @@
|
||
strcat(usrdir_name, "/");
|
||
strcat(usrdir_name, dentry->d_name);
|
||
|
||
- DIR* subdirp = os::opendir(usrdir_name);
|
||
+ // open the user directory
|
||
+ DIR* subdirp = open_directory_secure(usrdir_name);
|
||
|
||
if (subdirp == NULL) {
|
||
FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal);
|
||
continue;
|
||
}
|
||
|
||
- // Since we don't create the backing store files in directories
|
||
- // pointed to by symbolic links, we also don't follow them when
|
||
- // looking for the files. We check for a symbolic link after the
|
||
- // call to opendir in order to eliminate a small window where the
|
||
- // symlink can be exploited.
|
||
- //
|
||
- if (!is_directory_secure(usrdir_name)) {
|
||
- FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal);
|
||
- os::closedir(subdirp);
|
||
- continue;
|
||
- }
|
||
-
|
||
struct dirent* udentry;
|
||
char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name), mtInternal);
|
||
errno = 0;
|
||
@@ -465,26 +645,6 @@
|
||
}
|
||
|
||
|
||
-// remove file
|
||
-//
|
||
-// this method removes the file with the given file name in the
|
||
-// named directory.
|
||
-//
|
||
-static void remove_file(const char* dirname, const char* filename) {
|
||
-
|
||
- size_t nbytes = strlen(dirname) + strlen(filename) + 2;
|
||
- char* path = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal);
|
||
-
|
||
- strcpy(path, dirname);
|
||
- strcat(path, "/");
|
||
- strcat(path, filename);
|
||
-
|
||
- remove_file(path);
|
||
-
|
||
- FREE_C_HEAP_ARRAY(char, path, mtInternal);
|
||
-}
|
||
-
|
||
-
|
||
// cleanup stale shared memory resources
|
||
//
|
||
// This method attempts to remove all stale shared memory files in
|
||
@@ -496,16 +656,11 @@
|
||
//
|
||
static void cleanup_sharedmem_resources(const char* dirname) {
|
||
|
||
- // open the user temp directory
|
||
- DIR* dirp = os::opendir(dirname);
|
||
-
|
||
+ int saved_cwd_fd;
|
||
+ // open the directory and set the current working directory to it
|
||
+ DIR* dirp = open_directory_secure_cwd(dirname, &saved_cwd_fd);
|
||
if (dirp == NULL) {
|
||
- // directory doesn't exist, so there is nothing to cleanup
|
||
- return;
|
||
- }
|
||
-
|
||
- if (!is_directory_secure(dirname)) {
|
||
- // the directory is not a secure directory
|
||
+ // directory doesn't exist or is insecure, so there is nothing to cleanup
|
||
return;
|
||
}
|
||
|
||
@@ -519,6 +674,7 @@
|
||
//
|
||
struct dirent* entry;
|
||
char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal);
|
||
+
|
||
errno = 0;
|
||
while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) {
|
||
|
||
@@ -529,7 +685,7 @@
|
||
if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) {
|
||
|
||
// attempt to remove all unexpected files, except "." and ".."
|
||
- remove_file(dirname, entry->d_name);
|
||
+ unlink(entry->d_name);
|
||
}
|
||
|
||
errno = 0;
|
||
@@ -552,11 +708,14 @@
|
||
if ((pid == os::current_process_id()) ||
|
||
(kill(pid, 0) == OS_ERR && (errno == ESRCH || errno == EPERM))) {
|
||
|
||
- remove_file(dirname, entry->d_name);
|
||
+ unlink(entry->d_name);
|
||
}
|
||
errno = 0;
|
||
}
|
||
- os::closedir(dirp);
|
||
+
|
||
+ // close the directory and reset the current working directory
|
||
+ close_directory_secure_cwd(dirp, saved_cwd_fd);
|
||
+
|
||
FREE_C_HEAP_ARRAY(char, dbuf, mtInternal);
|
||
}
|
||
|
||
@@ -613,19 +772,54 @@
|
||
return -1;
|
||
}
|
||
|
||
+ int saved_cwd_fd;
|
||
+ // open the directory and set the current working directory to it
|
||
+ DIR* dirp = open_directory_secure_cwd(dirname, &saved_cwd_fd);
|
||
+ if (dirp == NULL) {
|
||
+ // Directory doesn't exist or is insecure, so cannot create shared
|
||
+ // memory file.
|
||
+ return -1;
|
||
+ }
|
||
+
|
||
+ // Open the filename in the current directory.
|
||
+ // Cannot use O_TRUNC here; truncation of an existing file has to happen
|
||
+ // after the is_file_secure() check below.
|
||
int result;
|
||
-
|
||
- RESTARTABLE(::open(filename, O_RDWR|O_CREAT|O_TRUNC, S_IREAD|S_IWRITE), result);
|
||
+ RESTARTABLE(::open(filename, O_RDWR|O_CREAT|O_NOFOLLOW, S_IREAD|S_IWRITE), result);
|
||
if (result == OS_ERR) {
|
||
if (PrintMiscellaneous && Verbose) {
|
||
- warning("could not create file %s: %s\n", filename, strerror(errno));
|
||
+ if (errno == ELOOP) {
|
||
+ warning("file %s is a symlink and is not secure\n", filename);
|
||
+ } else {
|
||
+ warning("could not create file %s: %s\n", filename, strerror(errno));
|
||
+ }
|
||
}
|
||
+ // close the directory and reset the current working directory
|
||
+ close_directory_secure_cwd(dirp, saved_cwd_fd);
|
||
+
|
||
return -1;
|
||
}
|
||
+ // close the directory and reset the current working directory
|
||
+ close_directory_secure_cwd(dirp, saved_cwd_fd);
|
||
|
||
// save the file descriptor
|
||
int fd = result;
|
||
|
||
+ // check to see if the file is secure
|
||
+ if (!is_file_secure(fd, filename)) {
|
||
+ ::close(fd);
|
||
+ return -1;
|
||
+ }
|
||
+
|
||
+ // truncate the file to get rid of any existing data
|
||
+ RESTARTABLE(::ftruncate(fd, (off_t)0), result);
|
||
+ if (result == OS_ERR) {
|
||
+ if (PrintMiscellaneous && Verbose) {
|
||
+ warning("could not truncate shared memory file: %s\n", strerror(errno));
|
||
+ }
|
||
+ ::close(fd);
|
||
+ return -1;
|
||
+ }
|
||
// set the file size
|
||
RESTARTABLE(::ftruncate(fd, (off_t)size), result);
|
||
if (result == OS_ERR) {
|
||
@@ -683,8 +877,15 @@
|
||
THROW_MSG_0(vmSymbols::java_io_IOException(), strerror(errno));
|
||
}
|
||
}
|
||
+ int fd = result;
|
||
|
||
- return result;
|
||
+ // check to see if the file is secure
|
||
+ if (!is_file_secure(fd, filename)) {
|
||
+ ::close(fd);
|
||
+ return -1;
|
||
+ }
|
||
+
|
||
+ return fd;
|
||
}
|
||
|
||
// create a named shared memory region. returns the address of the
|
||
@@ -716,13 +917,21 @@
|
||
char* dirname = get_user_tmp_dir(user_name);
|
||
char* filename = get_sharedmem_filename(dirname, vmid);
|
||
|
||
+ // get the short filename
|
||
+ char* short_filename = strrchr(filename, '/');
|
||
+ if (short_filename == NULL) {
|
||
+ short_filename = filename;
|
||
+ } else {
|
||
+ short_filename++;
|
||
+ }
|
||
+
|
||
// cleanup any stale shared memory files
|
||
cleanup_sharedmem_resources(dirname);
|
||
|
||
assert(((size > 0) && (size % os::vm_page_size() == 0)),
|
||
"unexpected PerfMemory region size");
|
||
|
||
- fd = create_sharedmem_resources(dirname, filename, size);
|
||
+ fd = create_sharedmem_resources(dirname, short_filename, size);
|
||
|
||
FREE_C_HEAP_ARRAY(char, user_name, mtInternal);
|
||
FREE_C_HEAP_ARRAY(char, dirname, mtInternal);
|
||
@@ -839,12 +1048,12 @@
|
||
// constructs for the file and the shared memory mapping.
|
||
if (mode == PerfMemory::PERF_MODE_RO) {
|
||
mmap_prot = PROT_READ;
|
||
- file_flags = O_RDONLY;
|
||
+ file_flags = O_RDONLY | O_NOFOLLOW;
|
||
}
|
||
else if (mode == PerfMemory::PERF_MODE_RW) {
|
||
#ifdef LATER
|
||
mmap_prot = PROT_READ | PROT_WRITE;
|
||
- file_flags = O_RDWR;
|
||
+ file_flags = O_RDWR | O_NOFOLLOW;
|
||
#else
|
||
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
|
||
"Unsupported access mode");
|
||
--- ./hotspot/src/os/linux/vm/os_linux.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/os/linux/vm/os_linux.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1103,9 +1103,20 @@
|
||
//////////////////////////////////////////////////////////////////////////////
|
||
// thread local storage
|
||
|
||
+// Restore the thread pointer if the destructor is called. This is in case
|
||
+// someone from JNI code sets up a destructor with pthread_key_create to run
|
||
+// detachCurrentThread on thread death. Unless we restore the thread pointer we
|
||
+// will hang or crash. When detachCurrentThread is called the key will be set
|
||
+// to null and we will not be called again. If detachCurrentThread is never
|
||
+// called we could loop forever depending on the pthread implementation.
|
||
+static void restore_thread_pointer(void* p) {
|
||
+ Thread* thread = (Thread*) p;
|
||
+ os::thread_local_storage_at_put(ThreadLocalStorage::thread_index(), thread);
|
||
+}
|
||
+
|
||
int os::allocate_thread_local_storage() {
|
||
pthread_key_t key;
|
||
- int rslt = pthread_key_create(&key, NULL);
|
||
+ int rslt = pthread_key_create(&key, restore_thread_pointer);
|
||
assert(rslt == 0, "cannot allocate thread local storage");
|
||
return (int)key;
|
||
}
|
||
--- ./hotspot/src/os/linux/vm/perfMemory_linux.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/os/linux/vm/perfMemory_linux.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -197,7 +197,38 @@
|
||
}
|
||
|
||
|
||
-// check if the given path is considered a secure directory for
|
||
+// Check if the given statbuf is considered a secure directory for
|
||
+// the backing store files. Returns true if the directory is considered
|
||
+// a secure location. Returns false if the statbuf is a symbolic link or
|
||
+// if an error occurred.
|
||
+//
|
||
+static bool is_statbuf_secure(struct stat *statp) {
|
||
+ if (S_ISLNK(statp->st_mode) || !S_ISDIR(statp->st_mode)) {
|
||
+ // The path represents a link or some non-directory file type,
|
||
+ // which is not what we expected. Declare it insecure.
|
||
+ //
|
||
+ return false;
|
||
+ }
|
||
+ // We have an existing directory, check if the permissions are safe.
|
||
+ //
|
||
+ if ((statp->st_mode & (S_IWGRP|S_IWOTH)) != 0) {
|
||
+ // The directory is open for writing and could be subjected
|
||
+ // to a symlink or a hard link attack. Declare it insecure.
|
||
+ //
|
||
+ return false;
|
||
+ }
|
||
+ // See if the uid of the directory matches the effective uid of the process.
|
||
+ //
|
||
+ if (statp->st_uid != geteuid()) {
|
||
+ // The directory was not created by this user, declare it insecure.
|
||
+ //
|
||
+ return false;
|
||
+ }
|
||
+ return true;
|
||
+}
|
||
+
|
||
+
|
||
+// Check if the given path is considered a secure directory for
|
||
// the backing store files. Returns true if the directory exists
|
||
// and is considered a secure location. Returns false if the path
|
||
// is a symbolic link or if an error occurred.
|
||
@@ -211,22 +242,180 @@
|
||
return false;
|
||
}
|
||
|
||
- // the path exists, now check it's mode
|
||
- if (S_ISLNK(statbuf.st_mode) || !S_ISDIR(statbuf.st_mode)) {
|
||
- // the path represents a link or some non-directory file type,
|
||
- // which is not what we expected. declare it insecure.
|
||
- //
|
||
+ // The path exists, see if it is secure.
|
||
+ return is_statbuf_secure(&statbuf);
|
||
+}
|
||
+
|
||
+
|
||
+// Check if the given directory file descriptor is considered a secure
|
||
+// directory for the backing store files. Returns true if the directory
|
||
+// exists and is considered a secure location. Returns false if the path
|
||
+// is a symbolic link or if an error occurred.
|
||
+//
|
||
+static bool is_dirfd_secure(int dir_fd) {
|
||
+ struct stat statbuf;
|
||
+ int result = 0;
|
||
+
|
||
+ RESTARTABLE(::fstat(dir_fd, &statbuf), result);
|
||
+ if (result == OS_ERR) {
|
||
return false;
|
||
}
|
||
- else {
|
||
- // we have an existing directory, check if the permissions are safe.
|
||
- //
|
||
- if ((statbuf.st_mode & (S_IWGRP|S_IWOTH)) != 0) {
|
||
- // the directory is open for writing and could be subjected
|
||
- // to a symlnk attack. declare it insecure.
|
||
- //
|
||
- return false;
|
||
+
|
||
+ // The path exists, now check its mode.
|
||
+ return is_statbuf_secure(&statbuf);
|
||
+}
|
||
+
|
||
+
|
||
+// Check to make sure fd1 and fd2 are referencing the same file system object.
|
||
+//
|
||
+static bool is_same_fsobject(int fd1, int fd2) {
|
||
+ struct stat statbuf1;
|
||
+ struct stat statbuf2;
|
||
+ int result = 0;
|
||
+
|
||
+ RESTARTABLE(::fstat(fd1, &statbuf1), result);
|
||
+ if (result == OS_ERR) {
|
||
+ return false;
|
||
+ }
|
||
+ RESTARTABLE(::fstat(fd2, &statbuf2), result);
|
||
+ if (result == OS_ERR) {
|
||
+ return false;
|
||
+ }
|
||
+
|
||
+ if ((statbuf1.st_ino == statbuf2.st_ino) &&
|
||
+ (statbuf1.st_dev == statbuf2.st_dev)) {
|
||
+ return true;
|
||
+ } else {
|
||
+ return false;
|
||
+ }
|
||
+}
|
||
+
|
||
+
|
||
+// Open the directory of the given path and validate it.
|
||
+// Return a DIR * of the open directory.
|
||
+//
|
||
+static DIR *open_directory_secure(const char* dirname) {
|
||
+ // Open the directory using open() so that it can be verified
|
||
+ // to be secure by calling is_dirfd_secure(), opendir() and then check
|
||
+ // to see if they are the same file system object. This method does not
|
||
+ // introduce a window of opportunity for the directory to be attacked that
|
||
+ // calling opendir() and is_directory_secure() does.
|
||
+ int result;
|
||
+ DIR *dirp = NULL;
|
||
+ RESTARTABLE(::open(dirname, O_RDONLY|O_NOFOLLOW), result);
|
||
+ if (result == OS_ERR) {
|
||
+ if (PrintMiscellaneous && Verbose) {
|
||
+ if (errno == ELOOP) {
|
||
+ warning("directory %s is a symlink and is not secure\n", dirname);
|
||
+ } else {
|
||
+ warning("could not open directory %s: %s\n", dirname, strerror(errno));
|
||
+ }
|
||
}
|
||
+ return dirp;
|
||
+ }
|
||
+ int fd = result;
|
||
+
|
||
+ // Determine if the open directory is secure.
|
||
+ if (!is_dirfd_secure(fd)) {
|
||
+ // The directory is not a secure directory.
|
||
+ os::close(fd);
|
||
+ return dirp;
|
||
+ }
|
||
+
|
||
+ // Open the directory.
|
||
+ dirp = ::opendir(dirname);
|
||
+ if (dirp == NULL) {
|
||
+ // The directory doesn't exist, close fd and return.
|
||
+ os::close(fd);
|
||
+ return dirp;
|
||
+ }
|
||
+
|
||
+ // Check to make sure fd and dirp are referencing the same file system object.
|
||
+ if (!is_same_fsobject(fd, dirfd(dirp))) {
|
||
+ // The directory is not secure.
|
||
+ os::close(fd);
|
||
+ os::closedir(dirp);
|
||
+ dirp = NULL;
|
||
+ return dirp;
|
||
+ }
|
||
+
|
||
+ // Close initial open now that we know directory is secure
|
||
+ os::close(fd);
|
||
+
|
||
+ return dirp;
|
||
+}
|
||
+
|
||
+// NOTE: The code below uses fchdir(), open() and unlink() because
|
||
+// fdopendir(), openat() and unlinkat() are not supported on all
|
||
+// versions. Once the support for fdopendir(), openat() and unlinkat()
|
||
+// is available on all supported versions the code can be changed
|
||
+// to use these functions.
|
||
+
|
||
+// Open the directory of the given path, validate it and set the
|
||
+// current working directory to it.
|
||
+// Return a DIR * of the open directory and the saved cwd fd.
|
||
+//
|
||
+static DIR *open_directory_secure_cwd(const char* dirname, int *saved_cwd_fd) {
|
||
+
|
||
+ // Open the directory.
|
||
+ DIR* dirp = open_directory_secure(dirname);
|
||
+ if (dirp == NULL) {
|
||
+ // Directory doesn't exist or is insecure, so there is nothing to cleanup.
|
||
+ return dirp;
|
||
+ }
|
||
+ int fd = dirfd(dirp);
|
||
+
|
||
+ // Open a fd to the cwd and save it off.
|
||
+ int result;
|
||
+ RESTARTABLE(::open(".", O_RDONLY), result);
|
||
+ if (result == OS_ERR) {
|
||
+ *saved_cwd_fd = -1;
|
||
+ } else {
|
||
+ *saved_cwd_fd = result;
|
||
+ }
|
||
+
|
||
+ // Set the current directory to dirname by using the fd of the directory.
|
||
+ result = fchdir(fd);
|
||
+
|
||
+ return dirp;
|
||
+}
|
||
+
|
||
+// Close the directory and restore the current working directory.
|
||
+//
|
||
+static void close_directory_secure_cwd(DIR* dirp, int saved_cwd_fd) {
|
||
+
|
||
+ int result;
|
||
+ // If we have a saved cwd change back to it and close the fd.
|
||
+ if (saved_cwd_fd != -1) {
|
||
+ result = fchdir(saved_cwd_fd);
|
||
+ ::close(saved_cwd_fd);
|
||
+ }
|
||
+
|
||
+ // Close the directory.
|
||
+ os::closedir(dirp);
|
||
+}
|
||
+
|
||
+// Check if the given file descriptor is considered a secure.
|
||
+//
|
||
+static bool is_file_secure(int fd, const char *filename) {
|
||
+
|
||
+ int result;
|
||
+ struct stat statbuf;
|
||
+
|
||
+ // Determine if the file is secure.
|
||
+ RESTARTABLE(::fstat(fd, &statbuf), result);
|
||
+ if (result == OS_ERR) {
|
||
+ if (PrintMiscellaneous && Verbose) {
|
||
+ warning("fstat failed on %s: %s\n", filename, strerror(errno));
|
||
+ }
|
||
+ return false;
|
||
+ }
|
||
+ if (statbuf.st_nlink > 1) {
|
||
+ // A file with multiple links is not expected.
|
||
+ if (PrintMiscellaneous && Verbose) {
|
||
+ warning("file %s has multiple links\n", filename);
|
||
+ }
|
||
+ return false;
|
||
}
|
||
return true;
|
||
}
|
||
@@ -317,9 +506,11 @@
|
||
|
||
const char* tmpdirname = os::get_temp_directory();
|
||
|
||
+ // open the temp directory
|
||
DIR* tmpdirp = os::opendir(tmpdirname);
|
||
|
||
if (tmpdirp == NULL) {
|
||
+ // Cannot open the directory to get the user name, return.
|
||
return NULL;
|
||
}
|
||
|
||
@@ -344,7 +535,8 @@
|
||
strcat(usrdir_name, "/");
|
||
strcat(usrdir_name, dentry->d_name);
|
||
|
||
- DIR* subdirp = os::opendir(usrdir_name);
|
||
+ // open the user directory
|
||
+ DIR* subdirp = open_directory_secure(usrdir_name);
|
||
|
||
if (subdirp == NULL) {
|
||
FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal);
|
||
@@ -465,26 +657,6 @@
|
||
}
|
||
|
||
|
||
-// remove file
|
||
-//
|
||
-// this method removes the file with the given file name in the
|
||
-// named directory.
|
||
-//
|
||
-static void remove_file(const char* dirname, const char* filename) {
|
||
-
|
||
- size_t nbytes = strlen(dirname) + strlen(filename) + 2;
|
||
- char* path = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal);
|
||
-
|
||
- strcpy(path, dirname);
|
||
- strcat(path, "/");
|
||
- strcat(path, filename);
|
||
-
|
||
- remove_file(path);
|
||
-
|
||
- FREE_C_HEAP_ARRAY(char, path, mtInternal);
|
||
-}
|
||
-
|
||
-
|
||
// cleanup stale shared memory resources
|
||
//
|
||
// This method attempts to remove all stale shared memory files in
|
||
@@ -496,16 +668,11 @@
|
||
//
|
||
static void cleanup_sharedmem_resources(const char* dirname) {
|
||
|
||
- // open the user temp directory
|
||
- DIR* dirp = os::opendir(dirname);
|
||
-
|
||
+ int saved_cwd_fd;
|
||
+ // open the directory
|
||
+ DIR* dirp = open_directory_secure_cwd(dirname, &saved_cwd_fd);
|
||
if (dirp == NULL) {
|
||
- // directory doesn't exist, so there is nothing to cleanup
|
||
- return;
|
||
- }
|
||
-
|
||
- if (!is_directory_secure(dirname)) {
|
||
- // the directory is not a secure directory
|
||
+ // directory doesn't exist or is insecure, so there is nothing to cleanup
|
||
return;
|
||
}
|
||
|
||
@@ -519,6 +686,7 @@
|
||
//
|
||
struct dirent* entry;
|
||
char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal);
|
||
+
|
||
errno = 0;
|
||
while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) {
|
||
|
||
@@ -527,9 +695,8 @@
|
||
if (pid == 0) {
|
||
|
||
if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) {
|
||
-
|
||
// attempt to remove all unexpected files, except "." and ".."
|
||
- remove_file(dirname, entry->d_name);
|
||
+ unlink(entry->d_name);
|
||
}
|
||
|
||
errno = 0;
|
||
@@ -551,12 +718,14 @@
|
||
//
|
||
if ((pid == os::current_process_id()) ||
|
||
(kill(pid, 0) == OS_ERR && (errno == ESRCH || errno == EPERM))) {
|
||
-
|
||
- remove_file(dirname, entry->d_name);
|
||
+ unlink(entry->d_name);
|
||
}
|
||
errno = 0;
|
||
}
|
||
- os::closedir(dirp);
|
||
+
|
||
+ // close the directory and reset the current working directory
|
||
+ close_directory_secure_cwd(dirp, saved_cwd_fd);
|
||
+
|
||
FREE_C_HEAP_ARRAY(char, dbuf, mtInternal);
|
||
}
|
||
|
||
@@ -613,19 +782,54 @@
|
||
return -1;
|
||
}
|
||
|
||
+ int saved_cwd_fd;
|
||
+ // open the directory and set the current working directory to it
|
||
+ DIR* dirp = open_directory_secure_cwd(dirname, &saved_cwd_fd);
|
||
+ if (dirp == NULL) {
|
||
+ // Directory doesn't exist or is insecure, so cannot create shared
|
||
+ // memory file.
|
||
+ return -1;
|
||
+ }
|
||
+
|
||
+ // Open the filename in the current directory.
|
||
+ // Cannot use O_TRUNC here; truncation of an existing file has to happen
|
||
+ // after the is_file_secure() check below.
|
||
int result;
|
||
-
|
||
- RESTARTABLE(::open(filename, O_RDWR|O_CREAT|O_TRUNC, S_IREAD|S_IWRITE), result);
|
||
+ RESTARTABLE(::open(filename, O_RDWR|O_CREAT|O_NOFOLLOW, S_IREAD|S_IWRITE), result);
|
||
if (result == OS_ERR) {
|
||
if (PrintMiscellaneous && Verbose) {
|
||
- warning("could not create file %s: %s\n", filename, strerror(errno));
|
||
+ if (errno == ELOOP) {
|
||
+ warning("file %s is a symlink and is not secure\n", filename);
|
||
+ } else {
|
||
+ warning("could not create file %s: %s\n", filename, strerror(errno));
|
||
+ }
|
||
}
|
||
+ // close the directory and reset the current working directory
|
||
+ close_directory_secure_cwd(dirp, saved_cwd_fd);
|
||
+
|
||
return -1;
|
||
}
|
||
+ // close the directory and reset the current working directory
|
||
+ close_directory_secure_cwd(dirp, saved_cwd_fd);
|
||
|
||
// save the file descriptor
|
||
int fd = result;
|
||
|
||
+ // check to see if the file is secure
|
||
+ if (!is_file_secure(fd, filename)) {
|
||
+ ::close(fd);
|
||
+ return -1;
|
||
+ }
|
||
+
|
||
+ // truncate the file to get rid of any existing data
|
||
+ RESTARTABLE(::ftruncate(fd, (off_t)0), result);
|
||
+ if (result == OS_ERR) {
|
||
+ if (PrintMiscellaneous && Verbose) {
|
||
+ warning("could not truncate shared memory file: %s\n", strerror(errno));
|
||
+ }
|
||
+ ::close(fd);
|
||
+ return -1;
|
||
+ }
|
||
// set the file size
|
||
RESTARTABLE(::ftruncate(fd, (off_t)size), result);
|
||
if (result == OS_ERR) {
|
||
@@ -683,8 +887,15 @@
|
||
THROW_MSG_0(vmSymbols::java_io_IOException(), strerror(errno));
|
||
}
|
||
}
|
||
+ int fd = result;
|
||
|
||
- return result;
|
||
+ // check to see if the file is secure
|
||
+ if (!is_file_secure(fd, filename)) {
|
||
+ ::close(fd);
|
||
+ return -1;
|
||
+ }
|
||
+
|
||
+ return fd;
|
||
}
|
||
|
||
// create a named shared memory region. returns the address of the
|
||
@@ -715,6 +926,13 @@
|
||
|
||
char* dirname = get_user_tmp_dir(user_name);
|
||
char* filename = get_sharedmem_filename(dirname, vmid);
|
||
+ // get the short filename
|
||
+ char* short_filename = strrchr(filename, '/');
|
||
+ if (short_filename == NULL) {
|
||
+ short_filename = filename;
|
||
+ } else {
|
||
+ short_filename++;
|
||
+ }
|
||
|
||
// cleanup any stale shared memory files
|
||
cleanup_sharedmem_resources(dirname);
|
||
@@ -722,7 +940,7 @@
|
||
assert(((size > 0) && (size % os::vm_page_size() == 0)),
|
||
"unexpected PerfMemory region size");
|
||
|
||
- fd = create_sharedmem_resources(dirname, filename, size);
|
||
+ fd = create_sharedmem_resources(dirname, short_filename, size);
|
||
|
||
FREE_C_HEAP_ARRAY(char, user_name, mtInternal);
|
||
FREE_C_HEAP_ARRAY(char, dirname, mtInternal);
|
||
@@ -839,12 +1057,12 @@
|
||
// constructs for the file and the shared memory mapping.
|
||
if (mode == PerfMemory::PERF_MODE_RO) {
|
||
mmap_prot = PROT_READ;
|
||
- file_flags = O_RDONLY;
|
||
+ file_flags = O_RDONLY | O_NOFOLLOW;
|
||
}
|
||
else if (mode == PerfMemory::PERF_MODE_RW) {
|
||
#ifdef LATER
|
||
mmap_prot = PROT_READ | PROT_WRITE;
|
||
- file_flags = O_RDWR;
|
||
+ file_flags = O_RDWR | O_NOFOLLOW;
|
||
#else
|
||
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
|
||
"Unsupported access mode");
|
||
--- ./hotspot/src/os/solaris/vm/perfMemory_solaris.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/os/solaris/vm/perfMemory_solaris.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -199,7 +199,38 @@
|
||
}
|
||
|
||
|
||
-// check if the given path is considered a secure directory for
|
||
+// Check if the given statbuf is considered a secure directory for
|
||
+// the backing store files. Returns true if the directory is considered
|
||
+// a secure location. Returns false if the statbuf is a symbolic link or
|
||
+// if an error occurred.
|
||
+//
|
||
+static bool is_statbuf_secure(struct stat *statp) {
|
||
+ if (S_ISLNK(statp->st_mode) || !S_ISDIR(statp->st_mode)) {
|
||
+ // The path represents a link or some non-directory file type,
|
||
+ // which is not what we expected. Declare it insecure.
|
||
+ //
|
||
+ return false;
|
||
+ }
|
||
+ // We have an existing directory, check if the permissions are safe.
|
||
+ //
|
||
+ if ((statp->st_mode & (S_IWGRP|S_IWOTH)) != 0) {
|
||
+ // The directory is open for writing and could be subjected
|
||
+ // to a symlink or a hard link attack. Declare it insecure.
|
||
+ //
|
||
+ return false;
|
||
+ }
|
||
+ // See if the uid of the directory matches the effective uid of the process.
|
||
+ //
|
||
+ if (statp->st_uid != geteuid()) {
|
||
+ // The directory was not created by this user, declare it insecure.
|
||
+ //
|
||
+ return false;
|
||
+ }
|
||
+ return true;
|
||
+}
|
||
+
|
||
+
|
||
+// Check if the given path is considered a secure directory for
|
||
// the backing store files. Returns true if the directory exists
|
||
// and is considered a secure location. Returns false if the path
|
||
// is a symbolic link or if an error occurred.
|
||
@@ -213,27 +244,185 @@
|
||
return false;
|
||
}
|
||
|
||
- // the path exists, now check it's mode
|
||
- if (S_ISLNK(statbuf.st_mode) || !S_ISDIR(statbuf.st_mode)) {
|
||
- // the path represents a link or some non-directory file type,
|
||
- // which is not what we expected. declare it insecure.
|
||
- //
|
||
+ // The path exists, see if it is secure.
|
||
+ return is_statbuf_secure(&statbuf);
|
||
+}
|
||
+
|
||
+
|
||
+// Check if the given directory file descriptor is considered a secure
|
||
+// directory for the backing store files. Returns true if the directory
|
||
+// exists and is considered a secure location. Returns false if the path
|
||
+// is a symbolic link or if an error occurred.
|
||
+//
|
||
+static bool is_dirfd_secure(int dir_fd) {
|
||
+ struct stat statbuf;
|
||
+ int result = 0;
|
||
+
|
||
+ RESTARTABLE(::fstat(dir_fd, &statbuf), result);
|
||
+ if (result == OS_ERR) {
|
||
return false;
|
||
}
|
||
- else {
|
||
- // we have an existing directory, check if the permissions are safe.
|
||
- //
|
||
- if ((statbuf.st_mode & (S_IWGRP|S_IWOTH)) != 0) {
|
||
- // the directory is open for writing and could be subjected
|
||
- // to a symlnk attack. declare it insecure.
|
||
- //
|
||
- return false;
|
||
+
|
||
+ // The path exists, now check its mode.
|
||
+ return is_statbuf_secure(&statbuf);
|
||
+}
|
||
+
|
||
+
|
||
+// Check to make sure fd1 and fd2 are referencing the same file system object.
|
||
+//
|
||
+static bool is_same_fsobject(int fd1, int fd2) {
|
||
+ struct stat statbuf1;
|
||
+ struct stat statbuf2;
|
||
+ int result = 0;
|
||
+
|
||
+ RESTARTABLE(::fstat(fd1, &statbuf1), result);
|
||
+ if (result == OS_ERR) {
|
||
+ return false;
|
||
+ }
|
||
+ RESTARTABLE(::fstat(fd2, &statbuf2), result);
|
||
+ if (result == OS_ERR) {
|
||
+ return false;
|
||
+ }
|
||
+
|
||
+ if ((statbuf1.st_ino == statbuf2.st_ino) &&
|
||
+ (statbuf1.st_dev == statbuf2.st_dev)) {
|
||
+ return true;
|
||
+ } else {
|
||
+ return false;
|
||
+ }
|
||
+}
|
||
+
|
||
+
|
||
+// Open the directory of the given path and validate it.
|
||
+// Return a DIR * of the open directory.
|
||
+//
|
||
+static DIR *open_directory_secure(const char* dirname) {
|
||
+ // Open the directory using open() so that it can be verified
|
||
+ // to be secure by calling is_dirfd_secure(), opendir() and then check
|
||
+ // to see if they are the same file system object. This method does not
|
||
+ // introduce a window of opportunity for the directory to be attacked that
|
||
+ // calling opendir() and is_directory_secure() does.
|
||
+ int result;
|
||
+ DIR *dirp = NULL;
|
||
+ RESTARTABLE(::open(dirname, O_RDONLY|O_NOFOLLOW), result);
|
||
+ if (result == OS_ERR) {
|
||
+ // Directory doesn't exist or is a symlink, so there is nothing to cleanup.
|
||
+ if (PrintMiscellaneous && Verbose) {
|
||
+ if (errno == ELOOP) {
|
||
+ warning("directory %s is a symlink and is not secure\n", dirname);
|
||
+ } else {
|
||
+ warning("could not open directory %s: %s\n", dirname, strerror(errno));
|
||
+ }
|
||
}
|
||
+ return dirp;
|
||
+ }
|
||
+ int fd = result;
|
||
+
|
||
+ // Determine if the open directory is secure.
|
||
+ if (!is_dirfd_secure(fd)) {
|
||
+ // The directory is not a secure directory.
|
||
+ os::close(fd);
|
||
+ return dirp;
|
||
+ }
|
||
+
|
||
+ // Open the directory.
|
||
+ dirp = ::opendir(dirname);
|
||
+ if (dirp == NULL) {
|
||
+ // The directory doesn't exist, close fd and return.
|
||
+ os::close(fd);
|
||
+ return dirp;
|
||
+ }
|
||
+
|
||
+ // Check to make sure fd and dirp are referencing the same file system object.
|
||
+ if (!is_same_fsobject(fd, dirp->dd_fd)) {
|
||
+ // The directory is not secure.
|
||
+ os::close(fd);
|
||
+ os::closedir(dirp);
|
||
+ dirp = NULL;
|
||
+ return dirp;
|
||
+ }
|
||
+
|
||
+ // Close initial open now that we know directory is secure
|
||
+ os::close(fd);
|
||
+
|
||
+ return dirp;
|
||
+}
|
||
+
|
||
+// NOTE: The code below uses fchdir(), open() and unlink() because
|
||
+// fdopendir(), openat() and unlinkat() are not supported on all
|
||
+// versions. Once the support for fdopendir(), openat() and unlinkat()
|
||
+// is available on all supported versions the code can be changed
|
||
+// to use these functions.
|
||
+
|
||
+// Open the directory of the given path, validate it and set the
|
||
+// current working directory to it.
|
||
+// Return a DIR * of the open directory and the saved cwd fd.
|
||
+//
|
||
+static DIR *open_directory_secure_cwd(const char* dirname, int *saved_cwd_fd) {
|
||
+
|
||
+ // Open the directory.
|
||
+ DIR* dirp = open_directory_secure(dirname);
|
||
+ if (dirp == NULL) {
|
||
+ // Directory doesn't exist or is insecure, so there is nothing to cleanup.
|
||
+ return dirp;
|
||
+ }
|
||
+ int fd = dirp->dd_fd;
|
||
+
|
||
+ // Open a fd to the cwd and save it off.
|
||
+ int result;
|
||
+ RESTARTABLE(::open(".", O_RDONLY), result);
|
||
+ if (result == OS_ERR) {
|
||
+ *saved_cwd_fd = -1;
|
||
+ } else {
|
||
+ *saved_cwd_fd = result;
|
||
+ }
|
||
+
|
||
+ // Set the current directory to dirname by using the fd of the directory.
|
||
+ result = fchdir(fd);
|
||
+
|
||
+ return dirp;
|
||
+}
|
||
+
|
||
+// Close the directory and restore the current working directory.
|
||
+//
|
||
+static void close_directory_secure_cwd(DIR* dirp, int saved_cwd_fd) {
|
||
+
|
||
+ int result;
|
||
+ // If we have a saved cwd change back to it and close the fd.
|
||
+ if (saved_cwd_fd != -1) {
|
||
+ result = fchdir(saved_cwd_fd);
|
||
+ ::close(saved_cwd_fd);
|
||
+ }
|
||
+
|
||
+ // Close the directory.
|
||
+ os::closedir(dirp);
|
||
+}
|
||
+
|
||
+// Check if the given file descriptor is considered a secure.
|
||
+//
|
||
+static bool is_file_secure(int fd, const char *filename) {
|
||
+
|
||
+ int result;
|
||
+ struct stat statbuf;
|
||
+
|
||
+ // Determine if the file is secure.
|
||
+ RESTARTABLE(::fstat(fd, &statbuf), result);
|
||
+ if (result == OS_ERR) {
|
||
+ if (PrintMiscellaneous && Verbose) {
|
||
+ warning("fstat failed on %s: %s\n", filename, strerror(errno));
|
||
+ }
|
||
+ return false;
|
||
+ }
|
||
+ if (statbuf.st_nlink > 1) {
|
||
+ // A file with multiple links is not expected.
|
||
+ if (PrintMiscellaneous && Verbose) {
|
||
+ warning("file %s has multiple links\n", filename);
|
||
+ }
|
||
+ return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
-
|
||
// return the user name for the given user id
|
||
//
|
||
// the caller is expected to free the allocated memory.
|
||
@@ -308,9 +497,11 @@
|
||
|
||
const char* tmpdirname = os::get_temp_directory();
|
||
|
||
+ // open the temp directory
|
||
DIR* tmpdirp = os::opendir(tmpdirname);
|
||
|
||
if (tmpdirp == NULL) {
|
||
+ // Cannot open the directory to get the user name, return.
|
||
return NULL;
|
||
}
|
||
|
||
@@ -335,7 +526,8 @@
|
||
strcat(usrdir_name, "/");
|
||
strcat(usrdir_name, dentry->d_name);
|
||
|
||
- DIR* subdirp = os::opendir(usrdir_name);
|
||
+ // open the user directory
|
||
+ DIR* subdirp = open_directory_secure(usrdir_name);
|
||
|
||
if (subdirp == NULL) {
|
||
FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal);
|
||
@@ -502,26 +694,6 @@
|
||
}
|
||
|
||
|
||
-// remove file
|
||
-//
|
||
-// this method removes the file with the given file name in the
|
||
-// named directory.
|
||
-//
|
||
-static void remove_file(const char* dirname, const char* filename) {
|
||
-
|
||
- size_t nbytes = strlen(dirname) + strlen(filename) + 2;
|
||
- char* path = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal);
|
||
-
|
||
- strcpy(path, dirname);
|
||
- strcat(path, "/");
|
||
- strcat(path, filename);
|
||
-
|
||
- remove_file(path);
|
||
-
|
||
- FREE_C_HEAP_ARRAY(char, path, mtInternal);
|
||
-}
|
||
-
|
||
-
|
||
// cleanup stale shared memory resources
|
||
//
|
||
// This method attempts to remove all stale shared memory files in
|
||
@@ -533,16 +705,11 @@
|
||
//
|
||
static void cleanup_sharedmem_resources(const char* dirname) {
|
||
|
||
- // open the user temp directory
|
||
- DIR* dirp = os::opendir(dirname);
|
||
-
|
||
+ int saved_cwd_fd;
|
||
+ // open the directory
|
||
+ DIR* dirp = open_directory_secure_cwd(dirname, &saved_cwd_fd);
|
||
if (dirp == NULL) {
|
||
- // directory doesn't exist, so there is nothing to cleanup
|
||
- return;
|
||
- }
|
||
-
|
||
- if (!is_directory_secure(dirname)) {
|
||
- // the directory is not a secure directory
|
||
+ // directory doesn't exist or is insecure, so there is nothing to cleanup
|
||
return;
|
||
}
|
||
|
||
@@ -556,6 +723,7 @@
|
||
//
|
||
struct dirent* entry;
|
||
char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal);
|
||
+
|
||
errno = 0;
|
||
while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) {
|
||
|
||
@@ -566,7 +734,7 @@
|
||
if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) {
|
||
|
||
// attempt to remove all unexpected files, except "." and ".."
|
||
- remove_file(dirname, entry->d_name);
|
||
+ unlink(entry->d_name);
|
||
}
|
||
|
||
errno = 0;
|
||
@@ -589,11 +757,14 @@
|
||
if ((pid == os::current_process_id()) ||
|
||
(kill(pid, 0) == OS_ERR && (errno == ESRCH || errno == EPERM))) {
|
||
|
||
- remove_file(dirname, entry->d_name);
|
||
+ unlink(entry->d_name);
|
||
}
|
||
errno = 0;
|
||
}
|
||
- os::closedir(dirp);
|
||
+
|
||
+ // close the directory and reset the current working directory
|
||
+ close_directory_secure_cwd(dirp, saved_cwd_fd);
|
||
+
|
||
FREE_C_HEAP_ARRAY(char, dbuf, mtInternal);
|
||
}
|
||
|
||
@@ -650,19 +821,54 @@
|
||
return -1;
|
||
}
|
||
|
||
+ int saved_cwd_fd;
|
||
+ // open the directory and set the current working directory to it
|
||
+ DIR* dirp = open_directory_secure_cwd(dirname, &saved_cwd_fd);
|
||
+ if (dirp == NULL) {
|
||
+ // Directory doesn't exist or is insecure, so cannot create shared
|
||
+ // memory file.
|
||
+ return -1;
|
||
+ }
|
||
+
|
||
+ // Open the filename in the current directory.
|
||
+ // Cannot use O_TRUNC here; truncation of an existing file has to happen
|
||
+ // after the is_file_secure() check below.
|
||
int result;
|
||
-
|
||
- RESTARTABLE(::open(filename, O_RDWR|O_CREAT|O_TRUNC, S_IREAD|S_IWRITE), result);
|
||
+ RESTARTABLE(::open(filename, O_RDWR|O_CREAT|O_NOFOLLOW, S_IREAD|S_IWRITE), result);
|
||
if (result == OS_ERR) {
|
||
if (PrintMiscellaneous && Verbose) {
|
||
- warning("could not create file %s: %s\n", filename, strerror(errno));
|
||
+ if (errno == ELOOP) {
|
||
+ warning("file %s is a symlink and is not secure\n", filename);
|
||
+ } else {
|
||
+ warning("could not create file %s: %s\n", filename, strerror(errno));
|
||
+ }
|
||
}
|
||
+ // close the directory and reset the current working directory
|
||
+ close_directory_secure_cwd(dirp, saved_cwd_fd);
|
||
+
|
||
return -1;
|
||
}
|
||
+ // close the directory and reset the current working directory
|
||
+ close_directory_secure_cwd(dirp, saved_cwd_fd);
|
||
|
||
// save the file descriptor
|
||
int fd = result;
|
||
|
||
+ // check to see if the file is secure
|
||
+ if (!is_file_secure(fd, filename)) {
|
||
+ ::close(fd);
|
||
+ return -1;
|
||
+ }
|
||
+
|
||
+ // truncate the file to get rid of any existing data
|
||
+ RESTARTABLE(::ftruncate(fd, (off_t)0), result);
|
||
+ if (result == OS_ERR) {
|
||
+ if (PrintMiscellaneous && Verbose) {
|
||
+ warning("could not truncate shared memory file: %s\n", strerror(errno));
|
||
+ }
|
||
+ ::close(fd);
|
||
+ return -1;
|
||
+ }
|
||
// set the file size
|
||
RESTARTABLE(::ftruncate(fd, (off_t)size), result);
|
||
if (result == OS_ERR) {
|
||
@@ -698,8 +904,15 @@
|
||
THROW_MSG_0(vmSymbols::java_io_IOException(), strerror(errno));
|
||
}
|
||
}
|
||
+ int fd = result;
|
||
|
||
- return result;
|
||
+ // check to see if the file is secure
|
||
+ if (!is_file_secure(fd, filename)) {
|
||
+ ::close(fd);
|
||
+ return -1;
|
||
+ }
|
||
+
|
||
+ return fd;
|
||
}
|
||
|
||
// create a named shared memory region. returns the address of the
|
||
@@ -731,13 +944,21 @@
|
||
char* dirname = get_user_tmp_dir(user_name);
|
||
char* filename = get_sharedmem_filename(dirname, vmid);
|
||
|
||
+ // get the short filename
|
||
+ char* short_filename = strrchr(filename, '/');
|
||
+ if (short_filename == NULL) {
|
||
+ short_filename = filename;
|
||
+ } else {
|
||
+ short_filename++;
|
||
+ }
|
||
+
|
||
// cleanup any stale shared memory files
|
||
cleanup_sharedmem_resources(dirname);
|
||
|
||
assert(((size > 0) && (size % os::vm_page_size() == 0)),
|
||
"unexpected PerfMemory region size");
|
||
|
||
- fd = create_sharedmem_resources(dirname, filename, size);
|
||
+ fd = create_sharedmem_resources(dirname, short_filename, size);
|
||
|
||
FREE_C_HEAP_ARRAY(char, user_name, mtInternal);
|
||
FREE_C_HEAP_ARRAY(char, dirname, mtInternal);
|
||
@@ -854,12 +1075,12 @@
|
||
// constructs for the file and the shared memory mapping.
|
||
if (mode == PerfMemory::PERF_MODE_RO) {
|
||
mmap_prot = PROT_READ;
|
||
- file_flags = O_RDONLY;
|
||
+ file_flags = O_RDONLY | O_NOFOLLOW;
|
||
}
|
||
else if (mode == PerfMemory::PERF_MODE_RW) {
|
||
#ifdef LATER
|
||
mmap_prot = PROT_READ | PROT_WRITE;
|
||
- file_flags = O_RDWR;
|
||
+ file_flags = O_RDWR | O_NOFOLLOW;
|
||
#else
|
||
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
|
||
"Unsupported access mode");
|
||
--- ./hotspot/src/os_cpu/linux_sparc/vm/assembler_linux_sparc.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/os_cpu/linux_sparc/vm/assembler_linux_sparc.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -28,7 +28,7 @@
|
||
#include "runtime/os.hpp"
|
||
#include "runtime/threadLocalStorage.hpp"
|
||
|
||
-#include <asm-sparc/traps.h>
|
||
+#include <asm/traps.h>
|
||
|
||
void MacroAssembler::read_ccr_trap(Register ccr_save) {
|
||
// No implementation
|
||
--- ./hotspot/src/os_cpu/linux_sparc/vm/atomic_linux_sparc.inline.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/os_cpu/linux_sparc/vm/atomic_linux_sparc.inline.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -79,12 +79,12 @@
|
||
__asm__ volatile(
|
||
"1: \n\t"
|
||
" ldx [%2], %%o2\n\t"
|
||
- " add %0, %%o2, %%o3\n\t"
|
||
+ " add %1, %%o2, %%o3\n\t"
|
||
" casx [%2], %%o2, %%o3\n\t"
|
||
" cmp %%o2, %%o3\n\t"
|
||
" bne %%xcc, 1b\n\t"
|
||
" nop\n\t"
|
||
- " add %0, %%o2, %0\n\t"
|
||
+ " add %1, %%o2, %0\n\t"
|
||
: "=r" (rv)
|
||
: "r" (add_value), "r" (dest)
|
||
: "memory", "o2", "o3");
|
||
--- ./hotspot/src/os_cpu/linux_sparc/vm/os_linux_sparc.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/os_cpu/linux_sparc/vm/os_linux_sparc.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -118,7 +118,7 @@
|
||
*ret_sp = os::Linux::ucontext_get_sp(uc);
|
||
}
|
||
if (ret_fp) {
|
||
- *ret_fp = os::Linux::ucontext_get_fp(uc);
|
||
+ *ret_fp = (intptr_t*)NULL;
|
||
}
|
||
} else {
|
||
// construct empty ExtendedPC for return value checking
|
||
@@ -136,18 +136,15 @@
|
||
|
||
frame os::fetch_frame_from_context(void* ucVoid) {
|
||
intptr_t* sp;
|
||
- intptr_t* fp;
|
||
- ExtendedPC epc = fetch_frame_from_context(ucVoid, &sp, &fp);
|
||
- return frame(sp, fp, epc.pc());
|
||
+ ExtendedPC epc = fetch_frame_from_context(ucVoid, &sp, NULL);
|
||
+ return frame(sp, frame::unpatchable, epc.pc());
|
||
}
|
||
|
||
frame os::get_sender_for_C_frame(frame* fr) {
|
||
- return frame(fr->sender_sp(), fr->link(), fr->sender_pc());
|
||
+ return frame(fr->sender_sp(), frame::unpatchable, fr->sender_pc());
|
||
}
|
||
|
||
frame os::current_frame() {
|
||
- fprintf(stderr, "current_frame()");
|
||
-
|
||
intptr_t* sp = StubRoutines::Sparc::flush_callers_register_windows_func()();
|
||
frame myframe(sp, frame::unpatchable,
|
||
CAST_FROM_FN_PTR(address, os::current_frame));
|
||
@@ -302,29 +299,30 @@
|
||
if (context == NULL) return;
|
||
|
||
ucontext_t *uc = (ucontext_t*)context;
|
||
+ sigcontext* sc = (sigcontext*)context;
|
||
intptr_t *sp = (intptr_t *)os::Linux::ucontext_get_sp(uc);
|
||
|
||
st->print_cr("Register to memory mapping:");
|
||
st->cr();
|
||
|
||
// this is only for the "general purpose" registers
|
||
- st->print("G1="); print_location(st, SIG_REGS(sc).u_regs[CON__G1]);
|
||
- st->print("G2="); print_location(st, SIG_REGS(sc).u_regs[CON__G2]);
|
||
- st->print("G3="); print_location(st, SIG_REGS(sc).u_regs[CON__G3]);
|
||
- st->print("G4="); print_location(st, SIG_REGS(sc).u_regs[CON__G4]);
|
||
- st->print("G5="); print_location(st, SIG_REGS(sc).u_regs[CON__G5]);
|
||
- st->print("G6="); print_location(st, SIG_REGS(sc).u_regs[CON__G6]);
|
||
- st->print("G7="); print_location(st, SIG_REGS(sc).u_regs[CON__G7]);
|
||
+ st->print("G1="); print_location(st, SIG_REGS(sc).u_regs[CON_G1]);
|
||
+ st->print("G2="); print_location(st, SIG_REGS(sc).u_regs[CON_G2]);
|
||
+ st->print("G3="); print_location(st, SIG_REGS(sc).u_regs[CON_G3]);
|
||
+ st->print("G4="); print_location(st, SIG_REGS(sc).u_regs[CON_G4]);
|
||
+ st->print("G5="); print_location(st, SIG_REGS(sc).u_regs[CON_G5]);
|
||
+ st->print("G6="); print_location(st, SIG_REGS(sc).u_regs[CON_G6]);
|
||
+ st->print("G7="); print_location(st, SIG_REGS(sc).u_regs[CON_G7]);
|
||
st->cr();
|
||
|
||
- st->print("O0="); print_location(st, SIG_REGS(sc).u_regs[CON__O0]);
|
||
- st->print("O1="); print_location(st, SIG_REGS(sc).u_regs[CON__O1]);
|
||
- st->print("O2="); print_location(st, SIG_REGS(sc).u_regs[CON__O2]);
|
||
- st->print("O3="); print_location(st, SIG_REGS(sc).u_regs[CON__O3]);
|
||
- st->print("O4="); print_location(st, SIG_REGS(sc).u_regs[CON__O4]);
|
||
- st->print("O5="); print_location(st, SIG_REGS(sc).u_regs[CON__O5]);
|
||
- st->print("O6="); print_location(st, SIG_REGS(sc).u_regs[CON__O6]);
|
||
- st->print("O7="); print_location(st, SIG_REGS(sc).u_regs[CON__O7]);
|
||
+ st->print("O0="); print_location(st, SIG_REGS(sc).u_regs[CON_O0]);
|
||
+ st->print("O1="); print_location(st, SIG_REGS(sc).u_regs[CON_O1]);
|
||
+ st->print("O2="); print_location(st, SIG_REGS(sc).u_regs[CON_O2]);
|
||
+ st->print("O3="); print_location(st, SIG_REGS(sc).u_regs[CON_O3]);
|
||
+ st->print("O4="); print_location(st, SIG_REGS(sc).u_regs[CON_O4]);
|
||
+ st->print("O5="); print_location(st, SIG_REGS(sc).u_regs[CON_O5]);
|
||
+ st->print("O6="); print_location(st, SIG_REGS(sc).u_regs[CON_O6]);
|
||
+ st->print("O7="); print_location(st, SIG_REGS(sc).u_regs[CON_O7]);
|
||
st->cr();
|
||
|
||
st->print("L0="); print_location(st, sp[L0->sp_offset_in_saved_window()]);
|
||
@@ -525,7 +523,7 @@
|
||
if (nativeInstruction_at(*pc)->is_ic_miss_trap()) {
|
||
#ifdef ASSERT
|
||
#ifdef TIERED
|
||
- CodeBlob* cb = CodeCache::find_blob_unsafe(pc);
|
||
+ CodeBlob* cb = CodeCache::find_blob_unsafe(*pc);
|
||
assert(cb->is_compiled_by_c2(), "Wrong compiler");
|
||
#endif // TIERED
|
||
#endif // ASSERT
|
||
--- ./hotspot/src/os_cpu/linux_sparc/vm/vm_version_linux_sparc.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/os_cpu/linux_sparc/vm/vm_version_linux_sparc.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -55,7 +55,7 @@
|
||
|
||
if (detect_niagara()) {
|
||
NOT_PRODUCT(if (PrintMiscellaneous && Verbose) tty->print_cr("Detected Linux on Niagara");)
|
||
- features = niagara1_m;
|
||
+ features = niagara1_m | T_family_m;
|
||
}
|
||
|
||
return features;
|
||
--- ./hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1999, 2014, 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
|
||
@@ -899,7 +899,7 @@
|
||
*/
|
||
char* hint = (char*) (Linux::initial_thread_stack_bottom() -
|
||
((StackYellowPages + StackRedPages + 1) * page_size));
|
||
- char* codebuf = os::reserve_memory(page_size, hint);
|
||
+ char* codebuf = os::pd_attempt_reserve_memory_at(page_size, hint);
|
||
if ( (codebuf == NULL) || (!os::commit_memory(codebuf, page_size, true)) ) {
|
||
return; // No matter, we tried, best effort.
|
||
}
|
||
--- ./hotspot/src/os_cpu/solaris_sparc/vm/vm_version_solaris_sparc.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/os_cpu/solaris_sparc/vm/vm_version_solaris_sparc.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -75,13 +75,19 @@
|
||
do_sysinfo(SI_ARCHITECTURE_64, "sparcv9", &features, generic_v9_m);
|
||
|
||
// Extract valid instruction set extensions.
|
||
- uint_t av;
|
||
- uint_t avn = os::Solaris::getisax(&av, 1);
|
||
- assert(avn == 1, "should only return one av");
|
||
+ uint_t avs[2];
|
||
+ uint_t avn = os::Solaris::getisax(avs, 2);
|
||
+ assert(avn <= 2, "should return two or less av's");
|
||
+ uint_t av = avs[0];
|
||
|
||
#ifndef PRODUCT
|
||
- if (PrintMiscellaneous && Verbose)
|
||
- tty->print_cr("getisax(2) returned: " PTR32_FORMAT, av);
|
||
+ if (PrintMiscellaneous && Verbose) {
|
||
+ tty->print("getisax(2) returned: " PTR32_FORMAT, av);
|
||
+ if (avn > 1) {
|
||
+ tty->print(", " PTR32_FORMAT, avs[1]);
|
||
+ }
|
||
+ tty->cr();
|
||
+ }
|
||
#endif
|
||
|
||
if (av & AV_SPARC_MUL32) features |= hardware_mul32_m;
|
||
@@ -91,6 +97,13 @@
|
||
if (av & AV_SPARC_POPC) features |= hardware_popc_m;
|
||
if (av & AV_SPARC_VIS) features |= vis1_instructions_m;
|
||
if (av & AV_SPARC_VIS2) features |= vis2_instructions_m;
|
||
+ if (avn > 1) {
|
||
+ uint_t av2 = avs[1];
|
||
+#ifndef AV2_SPARC_SPARC5
|
||
+#define AV2_SPARC_SPARC5 0x00000008 /* The 29 new fp and sub instructions */
|
||
+#endif
|
||
+ if (av2 & AV2_SPARC_SPARC5) features |= sparc5_instructions_m;
|
||
+ }
|
||
|
||
// Next values are not defined before Solaris 10
|
||
// but Solaris 8 is used for jdk6 update builds.
|
||
--- ./hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -89,8 +89,8 @@
|
||
public:
|
||
ArgumentMap *_vars;
|
||
ArgumentMap *_stack;
|
||
- short _stack_height;
|
||
- short _max_stack;
|
||
+ int _stack_height;
|
||
+ int _max_stack;
|
||
bool _initialized;
|
||
ArgumentMap empty_map;
|
||
|
||
@@ -158,6 +158,9 @@
|
||
|
||
void BCEscapeAnalyzer::set_method_escape(ArgumentMap vars) {
|
||
clear_bits(vars, _arg_local);
|
||
+ if (vars.contains_allocated()) {
|
||
+ _allocated_escapes = true;
|
||
+ }
|
||
}
|
||
|
||
void BCEscapeAnalyzer::set_global_escape(ArgumentMap vars, bool merge) {
|
||
--- ./hotspot/src/share/vm/classfile/classFileParser.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/classfile/classFileParser.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -2676,7 +2676,7 @@
|
||
ClassFileStream* cfs = stream();
|
||
u1* current_start = cfs->current();
|
||
|
||
- guarantee_property(attribute_byte_length > sizeof(u2),
|
||
+ guarantee_property(attribute_byte_length >= sizeof(u2),
|
||
"Invalid BootstrapMethods attribute length %u in class file %s",
|
||
attribute_byte_length,
|
||
CHECK);
|
||
--- ./hotspot/src/share/vm/classfile/stackMapFrame.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/classfile/stackMapFrame.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2003, 2014, 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
|
||
@@ -54,15 +54,19 @@
|
||
return frame;
|
||
}
|
||
|
||
-bool StackMapFrame::has_new_object() const {
|
||
+// Return true if frame has an uninitialized (new) object that differs
|
||
+// from the target frame's object.
|
||
+bool StackMapFrame::has_nonmatching_new_object(const StackMapFrame *target_frame) const {
|
||
int32_t i;
|
||
for (i = 0; i < _max_locals; i++) {
|
||
- if (_locals[i].is_uninitialized()) {
|
||
+ if (_locals[i].is_uninitialized() &&
|
||
+ !_locals[i].equals(target_frame->_locals[i])) {
|
||
return true;
|
||
}
|
||
}
|
||
for (i = 0; i < _stack_size; i++) {
|
||
- if (_stack[i].is_uninitialized()) {
|
||
+ if (_stack[i].is_uninitialized() &&
|
||
+ !_stack[i].equals(target_frame->_stack[i])) {
|
||
return true;
|
||
}
|
||
}
|
||
--- ./hotspot/src/share/vm/classfile/stackMapFrame.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/classfile/stackMapFrame.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2003, 2014, 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
|
||
@@ -155,8 +155,9 @@
|
||
const methodHandle m, VerificationType thisKlass, TRAPS);
|
||
|
||
// Search local variable type array and stack type array.
|
||
- // Return true if an uninitialized object is found.
|
||
- bool has_new_object() const;
|
||
+ // Return true if an uninitialized object is found that is
|
||
+ // not equal to the corresponding object on the target frame.
|
||
+ bool has_nonmatching_new_object(const StackMapFrame *target_frame) const;
|
||
|
||
// Search local variable type array and stack type array.
|
||
// Set every element with type of old_object to new_object.
|
||
--- ./hotspot/src/share/vm/classfile/stackMapTable.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/classfile/stackMapTable.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -70,24 +70,26 @@
|
||
|
||
bool StackMapTable::match_stackmap(
|
||
StackMapFrame* frame, int32_t target,
|
||
- bool match, bool update, ErrorContext* ctx, TRAPS) const {
|
||
+ bool match, bool update, bool handler, ErrorContext* ctx, TRAPS) const {
|
||
int index = get_index_from_offset(target);
|
||
- return match_stackmap(frame, target, index, match, update, ctx, THREAD);
|
||
+ return match_stackmap(frame, target, index, match, update, handler, ctx, THREAD);
|
||
}
|
||
|
||
// Match and/or update current_frame to the frame in stackmap table with
|
||
// specified offset and frame index. Return true if the two frames match.
|
||
+// handler is true if the frame in stackmap_table is for an exception handler.
|
||
//
|
||
-// The values of match and update are: _match__update_
|
||
+// The values of match and update are: _match__update__handler
|
||
//
|
||
-// checking a branch target/exception handler: true false
|
||
+// checking a branch target: true false false
|
||
+// checking an exception handler: true false true
|
||
// linear bytecode verification following an
|
||
-// unconditional branch: false true
|
||
+// unconditional branch: false true false
|
||
// linear bytecode verification not following an
|
||
-// unconditional branch: true true
|
||
+// unconditional branch: true true false
|
||
bool StackMapTable::match_stackmap(
|
||
StackMapFrame* frame, int32_t target, int32_t frame_index,
|
||
- bool match, bool update, ErrorContext* ctx, TRAPS) const {
|
||
+ bool match, bool update, bool handler, ErrorContext* ctx, TRAPS) const {
|
||
if (frame_index < 0 || frame_index >= _frame_count) {
|
||
*ctx = ErrorContext::missing_stackmap(frame->offset());
|
||
frame->verifier()->verify_error(
|
||
@@ -98,11 +100,9 @@
|
||
StackMapFrame *stackmap_frame = _frame_array[frame_index];
|
||
bool result = true;
|
||
if (match) {
|
||
- // when checking handler target, match == true && update == false
|
||
- bool is_exception_handler = !update;
|
||
// Has direct control flow from last instruction, need to match the two
|
||
// frames.
|
||
- result = frame->is_assignable_to(stackmap_frame, is_exception_handler,
|
||
+ result = frame->is_assignable_to(stackmap_frame, handler,
|
||
ctx, CHECK_VERIFY_(frame->verifier(), result));
|
||
}
|
||
if (update) {
|
||
@@ -126,7 +126,7 @@
|
||
StackMapFrame* frame, int32_t target, TRAPS) const {
|
||
ErrorContext ctx;
|
||
bool match = match_stackmap(
|
||
- frame, target, true, false, &ctx, CHECK_VERIFY(frame->verifier()));
|
||
+ frame, target, true, false, false, &ctx, CHECK_VERIFY(frame->verifier()));
|
||
if (!match || (target < 0 || target >= _code_length)) {
|
||
frame->verifier()->verify_error(ctx,
|
||
"Inconsistent stackmap frames at branch target %d", target);
|
||
@@ -134,12 +134,14 @@
|
||
}
|
||
// check if uninitialized objects exist on backward branches
|
||
check_new_object(frame, target, CHECK_VERIFY(frame->verifier()));
|
||
- frame->verifier()->update_furthest_jump(target);
|
||
}
|
||
|
||
void StackMapTable::check_new_object(
|
||
const StackMapFrame* frame, int32_t target, TRAPS) const {
|
||
- if (frame->offset() > target && frame->has_new_object()) {
|
||
+ int frame_index = get_index_from_offset(target);
|
||
+ assert(frame_index >= 0 && frame_index < _frame_count, "bad frame index");
|
||
+ if (frame->offset() > target &&
|
||
+ frame->has_nonmatching_new_object(_frame_array[frame_index])) {
|
||
frame->verifier()->verify_error(
|
||
ErrorContext::bad_code(frame->offset()),
|
||
"Uninitialized object exists on backward branch %d", target);
|
||
--- ./hotspot/src/share/vm/classfile/stackMapTable.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/classfile/stackMapTable.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2003, 2014, 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
|
||
@@ -74,12 +74,12 @@
|
||
// specified offset. Return true if the two frames match.
|
||
bool match_stackmap(
|
||
StackMapFrame* current_frame, int32_t offset,
|
||
- bool match, bool update, ErrorContext* ctx, TRAPS) const;
|
||
+ bool match, bool update, bool handler, ErrorContext* ctx, TRAPS) const;
|
||
// Match and/or update current_frame to the frame in stackmap table with
|
||
// specified offset and frame index. Return true if the two frames match.
|
||
bool match_stackmap(
|
||
StackMapFrame* current_frame, int32_t offset, int32_t frame_index,
|
||
- bool match, bool update, ErrorContext* ctx, TRAPS) const;
|
||
+ bool match, bool update, bool handler, ErrorContext* ctx, TRAPS) const;
|
||
|
||
// Check jump instructions. Make sure there are no uninitialized
|
||
// instances on backward branch.
|
||
--- ./hotspot/src/share/vm/classfile/systemDictionary.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/classfile/systemDictionary.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1872,11 +1872,12 @@
|
||
instanceKlass::cast(WK_KLASS(Reference_klass))->set_reference_type(REF_OTHER);
|
||
instanceRefKlass::update_nonstatic_oop_maps(WK_KLASS(Reference_klass));
|
||
|
||
- initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(PhantomReference_klass), scan, CHECK);
|
||
+ initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(Cleaner_klass), scan, CHECK);
|
||
instanceKlass::cast(WK_KLASS(SoftReference_klass))->set_reference_type(REF_SOFT);
|
||
instanceKlass::cast(WK_KLASS(WeakReference_klass))->set_reference_type(REF_WEAK);
|
||
instanceKlass::cast(WK_KLASS(FinalReference_klass))->set_reference_type(REF_FINAL);
|
||
instanceKlass::cast(WK_KLASS(PhantomReference_klass))->set_reference_type(REF_PHANTOM);
|
||
+ instanceKlass::cast(WK_KLASS(Cleaner_klass))->set_reference_type(REF_CLEANER);
|
||
|
||
// JSR 292 classes
|
||
WKID jsr292_group_start = WK_KLASS_ENUM_NAME(MethodHandle_klass);
|
||
--- ./hotspot/src/share/vm/classfile/systemDictionary.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/classfile/systemDictionary.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -126,6 +126,7 @@
|
||
do_klass(WeakReference_klass, java_lang_ref_WeakReference, Pre ) \
|
||
do_klass(FinalReference_klass, java_lang_ref_FinalReference, Pre ) \
|
||
do_klass(PhantomReference_klass, java_lang_ref_PhantomReference, Pre ) \
|
||
+ do_klass(Cleaner_klass, sun_misc_Cleaner, Pre ) \
|
||
do_klass(Finalizer_klass, java_lang_ref_Finalizer, Pre ) \
|
||
\
|
||
do_klass(Thread_klass, java_lang_Thread, Pre ) \
|
||
--- ./hotspot/src/share/vm/classfile/verifier.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/classfile/verifier.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -630,8 +630,6 @@
|
||
// flow from current instruction to the next
|
||
// instruction in sequence
|
||
|
||
- set_furthest_jump(0);
|
||
-
|
||
Bytecodes::Code opcode;
|
||
while (!bcs.is_last_bytecode()) {
|
||
// Check for recursive re-verification before each bytecode.
|
||
@@ -1551,14 +1549,14 @@
|
||
case Bytecodes::_invokespecial :
|
||
case Bytecodes::_invokestatic :
|
||
verify_invoke_instructions(
|
||
- &bcs, code_length, ¤t_frame,
|
||
- &this_uninit, return_type, cp, CHECK_VERIFY(this));
|
||
+ &bcs, code_length, ¤t_frame, (bci >= ex_min && bci < ex_max),
|
||
+ &this_uninit, return_type, cp, &stackmap_table, CHECK_VERIFY(this));
|
||
no_control_flow = false; break;
|
||
case Bytecodes::_invokeinterface :
|
||
case Bytecodes::_invokedynamic :
|
||
verify_invoke_instructions(
|
||
- &bcs, code_length, ¤t_frame,
|
||
- &this_uninit, return_type, cp, CHECK_VERIFY(this));
|
||
+ &bcs, code_length, ¤t_frame, (bci >= ex_min && bci < ex_max),
|
||
+ &this_uninit, return_type, cp, &stackmap_table, CHECK_VERIFY(this));
|
||
no_control_flow = false; break;
|
||
case Bytecodes::_new :
|
||
{
|
||
@@ -1788,7 +1786,7 @@
|
||
// If matched, current_frame will be updated by this method.
|
||
bool matches = stackmap_table->match_stackmap(
|
||
current_frame, this_offset, stackmap_index,
|
||
- !no_control_flow, true, &ctx, CHECK_VERIFY_(this, 0));
|
||
+ !no_control_flow, true, false, &ctx, CHECK_VERIFY_(this, 0));
|
||
if (!matches) {
|
||
// report type error
|
||
verify_error(ctx, "Instruction type does not match stack map");
|
||
@@ -1835,7 +1833,7 @@
|
||
}
|
||
ErrorContext ctx;
|
||
bool matches = stackmap_table->match_stackmap(
|
||
- new_frame, handler_pc, true, false, &ctx, CHECK_VERIFY(this));
|
||
+ new_frame, handler_pc, true, false, true, &ctx, CHECK_VERIFY(this));
|
||
if (!matches) {
|
||
verify_error(ctx, "Stack map does not match the one at "
|
||
"exception handler %d", handler_pc);
|
||
@@ -2401,8 +2399,9 @@
|
||
|
||
void ClassVerifier::verify_invoke_init(
|
||
RawBytecodeStream* bcs, u2 ref_class_index, VerificationType ref_class_type,
|
||
- StackMapFrame* current_frame, u4 code_length, bool *this_uninit,
|
||
- constantPoolHandle cp, TRAPS) {
|
||
+ StackMapFrame* current_frame, u4 code_length, bool in_try_block,
|
||
+ bool *this_uninit, constantPoolHandle cp, StackMapTable* stackmap_table,
|
||
+ TRAPS) {
|
||
u2 bci = bcs->bci();
|
||
VerificationType type = current_frame->pop_stack(
|
||
VerificationType::reference_check(), CHECK_VERIFY(this));
|
||
@@ -2418,35 +2417,38 @@
|
||
return;
|
||
}
|
||
|
||
- // Make sure that this call is not jumped over.
|
||
- if (bci < furthest_jump()) {
|
||
- verify_error(ErrorContext::bad_code(bci),
|
||
- "Bad <init> method call from inside of a branch");
|
||
- return;
|
||
- }
|
||
+ // If this invokespecial call is done from inside of a TRY block then make
|
||
+ // sure that all catch clause paths end in a throw. Otherwise, this can
|
||
+ // result in returning an incomplete object.
|
||
+ if (in_try_block) {
|
||
+ ExceptionTable exhandlers(_method());
|
||
+ int exlength = exhandlers.length();
|
||
+ for(int i = 0; i < exlength; i++) {
|
||
+ // Reacquire the table in case a GC happened
|
||
+ ExceptionTable exhandlers(_method());
|
||
+ u2 start_pc = exhandlers.start_pc(i);
|
||
+ u2 end_pc = exhandlers.end_pc(i);
|
||
|
||
- // Check if this call is done from inside of a TRY block. If so, make
|
||
- // sure that all catch clause paths end in a throw. Otherwise, this
|
||
- // can result in returning an incomplete object.
|
||
- ExceptionTable exhandlers(_method());
|
||
- int exlength = exhandlers.length();
|
||
- for(int i = 0; i < exlength; i++) {
|
||
- u2 start_pc = exhandlers.start_pc(i);
|
||
- u2 end_pc = exhandlers.end_pc(i);
|
||
-
|
||
- if (bci >= start_pc && bci < end_pc) {
|
||
- if (!ends_in_athrow(exhandlers.handler_pc(i))) {
|
||
- verify_error(ErrorContext::bad_code(bci),
|
||
- "Bad <init> method call from after the start of a try block");
|
||
- return;
|
||
- } else if (VerboseVerification) {
|
||
- ResourceMark rm;
|
||
- tty->print_cr(
|
||
- "Survived call to ends_in_athrow(): %s",
|
||
- current_class()->name()->as_C_string());
|
||
+ if (bci >= start_pc && bci < end_pc) {
|
||
+ if (!ends_in_athrow(exhandlers.handler_pc(i))) {
|
||
+ verify_error(ErrorContext::bad_code(bci),
|
||
+ "Bad <init> method call from after the start of a try block");
|
||
+ return;
|
||
+ } else if (VerboseVerification) {
|
||
+ ResourceMark rm;
|
||
+ tty->print_cr(
|
||
+ "Survived call to ends_in_athrow(): %s",
|
||
+ current_class()->name()->as_C_string());
|
||
+ }
|
||
}
|
||
}
|
||
- }
|
||
+
|
||
+ // Check the exception handler target stackmaps with the locals from the
|
||
+ // incoming stackmap (before initialize_object() changes them to outgoing
|
||
+ // state).
|
||
+ verify_exception_handler_targets(bci, true, current_frame,
|
||
+ stackmap_table, CHECK_VERIFY(this));
|
||
+ } // in_try_block
|
||
|
||
current_frame->initialize_object(type, current_type());
|
||
*this_uninit = true;
|
||
@@ -2502,6 +2504,13 @@
|
||
}
|
||
}
|
||
}
|
||
+ // Check the exception handler target stackmaps with the locals from the
|
||
+ // incoming stackmap (before initialize_object() changes them to outgoing
|
||
+ // state).
|
||
+ if (in_try_block) {
|
||
+ verify_exception_handler_targets(bci, *this_uninit, current_frame,
|
||
+ stackmap_table, CHECK_VERIFY(this));
|
||
+ }
|
||
current_frame->initialize_object(type, new_class_type);
|
||
} else {
|
||
verify_error(ErrorContext::bad_type(bci, current_frame->stack_top_ctx()),
|
||
@@ -2512,8 +2521,8 @@
|
||
|
||
void ClassVerifier::verify_invoke_instructions(
|
||
RawBytecodeStream* bcs, u4 code_length, StackMapFrame* current_frame,
|
||
- bool *this_uninit, VerificationType return_type,
|
||
- constantPoolHandle cp, TRAPS) {
|
||
+ bool in_try_block, bool *this_uninit, VerificationType return_type,
|
||
+ constantPoolHandle cp, StackMapTable* stackmap_table, TRAPS) {
|
||
// Make sure the constant pool item is the right type
|
||
u2 index = bcs->get_index_u2();
|
||
Bytecodes::Code opcode = bcs->raw_code();
|
||
@@ -2649,7 +2658,8 @@
|
||
opcode != Bytecodes::_invokedynamic) {
|
||
if (method_name == vmSymbols::object_initializer_name()) { // <init> method
|
||
verify_invoke_init(bcs, index, ref_class_type, current_frame,
|
||
- code_length, this_uninit, cp, CHECK_VERIFY(this));
|
||
+ code_length, in_try_block, this_uninit, cp, stackmap_table,
|
||
+ CHECK_VERIFY(this));
|
||
} else { // other methods
|
||
// Ensures that target class is assignable to method class.
|
||
if (opcode == Bytecodes::_invokespecial) {
|
||
--- ./hotspot/src/share/vm/classfile/verifier.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/classfile/verifier.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -257,9 +257,6 @@
|
||
|
||
ErrorContext _error_context; // contains information about an error
|
||
|
||
- // Used to detect illegal jumps over calls to super() and this() in ctors.
|
||
- int32_t _furthest_jump;
|
||
-
|
||
void verify_method(methodHandle method, TRAPS);
|
||
char* generate_code_data(methodHandle m, u4 code_length, TRAPS);
|
||
void verify_exception_handler_table(u4 code_length, char* code_data,
|
||
@@ -302,8 +299,9 @@
|
||
|
||
void verify_invoke_init(
|
||
RawBytecodeStream* bcs, u2 ref_index, VerificationType ref_class_type,
|
||
- StackMapFrame* current_frame, u4 code_length, bool* this_uninit,
|
||
- constantPoolHandle cp, TRAPS);
|
||
+ StackMapFrame* current_frame, u4 code_length, bool in_try_block,
|
||
+ bool* this_uninit, constantPoolHandle cp, StackMapTable* stackmap_table,
|
||
+ TRAPS);
|
||
|
||
// Used by ends_in_athrow() to push all handlers that contain bci onto
|
||
// the handler_stack, if the handler is not already on the stack.
|
||
@@ -317,8 +315,8 @@
|
||
|
||
void verify_invoke_instructions(
|
||
RawBytecodeStream* bcs, u4 code_length, StackMapFrame* current_frame,
|
||
- bool* this_uninit, VerificationType return_type,
|
||
- constantPoolHandle cp, TRAPS);
|
||
+ bool in_try_block, bool* this_uninit, VerificationType return_type,
|
||
+ constantPoolHandle cp, StackMapTable* stackmap_table, TRAPS);
|
||
|
||
VerificationType get_newarray_type(u2 index, u2 bci, TRAPS);
|
||
void verify_anewarray(u2 bci, u2 index, constantPoolHandle cp,
|
||
@@ -413,19 +411,6 @@
|
||
|
||
TypeOrigin ref_ctx(const char* str, TRAPS);
|
||
|
||
- // Keep track of the furthest branch done in a method to make sure that
|
||
- // there are no branches over calls to super() or this() from inside of
|
||
- // a constructor.
|
||
- int32_t furthest_jump() { return _furthest_jump; }
|
||
-
|
||
- void set_furthest_jump(int32_t target) {
|
||
- _furthest_jump = target;
|
||
- }
|
||
-
|
||
- void update_furthest_jump(int32_t target) {
|
||
- if (target > _furthest_jump) _furthest_jump = target;
|
||
- }
|
||
-
|
||
};
|
||
|
||
inline int ClassVerifier::change_sig_to_verificationType(
|
||
--- ./hotspot/src/share/vm/classfile/vmSymbols.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/classfile/vmSymbols.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -81,6 +81,7 @@
|
||
template(java_lang_ref_WeakReference, "java/lang/ref/WeakReference") \
|
||
template(java_lang_ref_FinalReference, "java/lang/ref/FinalReference") \
|
||
template(java_lang_ref_PhantomReference, "java/lang/ref/PhantomReference") \
|
||
+ template(sun_misc_Cleaner, "sun/misc/Cleaner") \
|
||
template(java_lang_ref_Finalizer, "java/lang/ref/Finalizer") \
|
||
template(java_lang_reflect_AccessibleObject, "java/lang/reflect/AccessibleObject") \
|
||
template(java_lang_reflect_Method, "java/lang/reflect/Method") \
|
||
--- ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -2752,10 +2752,12 @@
|
||
}
|
||
}
|
||
|
||
-void CompactibleFreeListSpace:: par_get_chunk_of_blocks(size_t word_sz, size_t n, FreeList<FreeChunk>* fl) {
|
||
- assert(fl->count() == 0, "Precondition.");
|
||
- assert(word_sz < CompactibleFreeListSpace::IndexSetSize,
|
||
- "Precondition");
|
||
+// Used by par_get_chunk_of_blocks() for the chunks from the
|
||
+// indexed_free_lists. Looks for a chunk with size that is a multiple
|
||
+// of "word_sz" and if found, splits it into "word_sz" chunks and add
|
||
+// to the free list "fl". "n" is the maximum number of chunks to
|
||
+// be added to "fl".
|
||
+bool CompactibleFreeListSpace:: par_get_chunk_of_blocks_IFL(size_t word_sz, size_t n, FreeList<FreeChunk>* fl) {
|
||
|
||
// We'll try all multiples of word_sz in the indexed set, starting with
|
||
// word_sz itself and, if CMSSplitIndexedFreeListBlocks, try larger multiples,
|
||
@@ -2836,11 +2838,15 @@
|
||
Mutex::_no_safepoint_check_flag);
|
||
ssize_t births = _indexedFreeList[word_sz].split_births() + num;
|
||
_indexedFreeList[word_sz].set_split_births(births);
|
||
- return;
|
||
+ return true;
|
||
}
|
||
}
|
||
+ return found;
|
||
}
|
||
- // Otherwise, we'll split a block from the dictionary.
|
||
+}
|
||
+
|
||
+FreeChunk* CompactibleFreeListSpace::get_n_way_chunk_to_split(size_t word_sz, size_t n) {
|
||
+
|
||
FreeChunk* fc = NULL;
|
||
FreeChunk* rem_fc = NULL;
|
||
size_t rem;
|
||
@@ -2852,16 +2858,12 @@
|
||
_dictionary->min_size()),
|
||
FreeBlockDictionary<FreeChunk>::atLeast);
|
||
if (fc != NULL) {
|
||
- _bt.allocated((HeapWord*)fc, fc->size(), true /* reducing */); // update _unallocated_blk
|
||
- dictionary()->dict_census_udpate(fc->size(),
|
||
- true /*split*/,
|
||
- false /*birth*/);
|
||
break;
|
||
} else {
|
||
n--;
|
||
}
|
||
}
|
||
- if (fc == NULL) return;
|
||
+ if (fc == NULL) return NULL;
|
||
// Otherwise, split up that block.
|
||
assert((ssize_t)n >= 1, "Control point invariant");
|
||
assert(fc->is_free(), "Error: should be a free block");
|
||
@@ -2883,10 +2885,14 @@
|
||
// dictionary and return, leaving "fl" empty.
|
||
if (n == 0) {
|
||
returnChunkToDictionary(fc);
|
||
- assert(fl->count() == 0, "We never allocated any blocks");
|
||
- return;
|
||
+ return NULL;
|
||
}
|
||
|
||
+ _bt.allocated((HeapWord*)fc, fc->size(), true /* reducing */); // update _unallocated_blk
|
||
+ dictionary()->dict_census_udpate(fc->size(),
|
||
+ true /*split*/,
|
||
+ false /*birth*/);
|
||
+
|
||
// First return the remainder, if any.
|
||
// Note that we hold the lock until we decide if we're going to give
|
||
// back the remainder to the dictionary, since a concurrent allocation
|
||
@@ -2919,7 +2925,24 @@
|
||
_indexedFreeList[rem].return_chunk_at_head(rem_fc);
|
||
smallSplitBirth(rem);
|
||
}
|
||
- assert((ssize_t)n > 0 && fc != NULL, "Consistency");
|
||
+ assert(n * word_sz == fc->size(),
|
||
+ err_msg("Chunk size " SIZE_FORMAT " is not exactly splittable by "
|
||
+ SIZE_FORMAT " sized chunks of size " SIZE_FORMAT,
|
||
+ fc->size(), n, word_sz));
|
||
+ return fc;
|
||
+}
|
||
+
|
||
+void CompactibleFreeListSpace:: par_get_chunk_of_blocks_dictionary(size_t word_sz, size_t targetted_number_of_chunks, FreeList<FreeChunk>* fl) {
|
||
+
|
||
+ FreeChunk* fc = get_n_way_chunk_to_split(word_sz, targetted_number_of_chunks);
|
||
+
|
||
+ if (fc == NULL) {
|
||
+ return;
|
||
+ }
|
||
+
|
||
+ size_t n = fc->size() / word_sz;
|
||
+
|
||
+ assert((ssize_t)n > 0, "Consistency");
|
||
// Now do the splitting up.
|
||
// Must do this in reverse order, so that anybody attempting to
|
||
// access the main chunk sees it as a single free block until we
|
||
@@ -2967,6 +2990,20 @@
|
||
assert(fl->tail()->next() == NULL, "List invariant.");
|
||
}
|
||
|
||
+void CompactibleFreeListSpace:: par_get_chunk_of_blocks(size_t word_sz, size_t n, FreeList<FreeChunk>* fl) {
|
||
+ assert(fl->count() == 0, "Precondition.");
|
||
+ assert(word_sz < CompactibleFreeListSpace::IndexSetSize,
|
||
+ "Precondition");
|
||
+
|
||
+ if (par_get_chunk_of_blocks_IFL(word_sz, n, fl)) {
|
||
+ // Got it
|
||
+ return;
|
||
+ }
|
||
+
|
||
+ // Otherwise, we'll split a block from the dictionary.
|
||
+ par_get_chunk_of_blocks_dictionary(word_sz, n, fl);
|
||
+}
|
||
+
|
||
// Set up the space's par_seq_tasks structure for work claiming
|
||
// for parallel rescan. See CMSParRemarkTask where this is currently used.
|
||
// XXX Need to suitably abstract and generalize this and the next
|
||
--- ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -171,6 +171,20 @@
|
||
// list of size "word_sz", and must now be decremented.
|
||
void par_get_chunk_of_blocks(size_t word_sz, size_t n, FreeList<FreeChunk>* fl);
|
||
|
||
+ // Used by par_get_chunk_of_blocks() for the chunks from the
|
||
+ // indexed_free_lists.
|
||
+ bool par_get_chunk_of_blocks_IFL(size_t word_sz, size_t n, FreeList<FreeChunk>* fl);
|
||
+
|
||
+ // Used by par_get_chunk_of_blocks_dictionary() to get a chunk
|
||
+ // evenly splittable into "n" "word_sz" chunks. Returns that
|
||
+ // evenly splittable chunk. May split a larger chunk to get the
|
||
+ // evenly splittable chunk.
|
||
+ FreeChunk* get_n_way_chunk_to_split(size_t word_sz, size_t n);
|
||
+
|
||
+ // Used by par_get_chunk_of_blocks() for the chunks from the
|
||
+ // dictionary.
|
||
+ void par_get_chunk_of_blocks_dictionary(size_t word_sz, size_t n, FreeList<FreeChunk>* fl);
|
||
+
|
||
// Allocation helper functions
|
||
// Allocate using a strategy that takes from the indexed free lists
|
||
// first. This allocation strategy assumes a companion sweeping
|
||
--- ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -757,7 +757,7 @@
|
||
// Support for parallelizing survivor space rescan
|
||
if ((CMSParallelRemarkEnabled && CMSParallelSurvivorRemarkEnabled) || CMSParallelInitialMarkEnabled) {
|
||
const size_t max_plab_samples =
|
||
- ((DefNewGeneration*)_young_gen)->max_survivor_size()/MinTLABSize;
|
||
+ ((DefNewGeneration*)_young_gen)->max_survivor_size() / plab_sample_minimum_size();
|
||
|
||
_survivor_plab_array = NEW_C_HEAP_ARRAY(ChunkArray, ParallelGCThreads, mtGC);
|
||
_survivor_chunk_array = NEW_C_HEAP_ARRAY(HeapWord*, 2*max_plab_samples, mtGC);
|
||
@@ -824,6 +824,12 @@
|
||
_inter_sweep_timer.start(); // start of time
|
||
}
|
||
|
||
+size_t CMSCollector::plab_sample_minimum_size() {
|
||
+ // The default value of MinTLABSize is 2k, but there is
|
||
+ // no way to get the default value if the flag has been overridden.
|
||
+ return MAX2(ThreadLocalAllocBuffer::min_size() * HeapWordSize, 2 * K);
|
||
+}
|
||
+
|
||
const char* ConcurrentMarkSweepGeneration::name() const {
|
||
return "concurrent mark-sweep generation";
|
||
}
|
||
--- ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -766,6 +766,10 @@
|
||
size_t* _cursor;
|
||
ChunkArray* _survivor_plab_array;
|
||
|
||
+ // A bounded minimum size of PLABs, should not return too small values since
|
||
+ // this will affect the size of the data structures used for parallel young gen rescan
|
||
+ size_t plab_sample_minimum_size();
|
||
+
|
||
// Support for marking stack overflow handling
|
||
bool take_from_overflow_list(size_t num, CMSMarkStack* to_stack);
|
||
bool par_take_from_overflow_list(size_t num,
|
||
--- ./hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -172,7 +172,7 @@
|
||
|
||
// Should be called when we want to release the active region which
|
||
// is returned after it's been retired.
|
||
- HeapRegion* release();
|
||
+ virtual HeapRegion* release();
|
||
|
||
#if G1_ALLOC_REGION_TRACING
|
||
void trace(const char* str, size_t word_size = 0, HeapWord* result = NULL);
|
||
--- ./hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2001, 2014, 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
|
||
@@ -1519,7 +1519,7 @@
|
||
}
|
||
|
||
if (G1Log::finer()) {
|
||
- g1_policy()->print_detailed_heap_transition();
|
||
+ g1_policy()->print_detailed_heap_transition(true /* full */);
|
||
}
|
||
|
||
print_heap_after_gc();
|
||
@@ -6628,6 +6628,35 @@
|
||
_g1h->retire_gc_alloc_region(alloc_region, allocated_bytes,
|
||
GCAllocForTenured);
|
||
}
|
||
+
|
||
+HeapRegion* OldGCAllocRegion::release() {
|
||
+ HeapRegion* cur = get();
|
||
+ if (cur != NULL) {
|
||
+ // Determine how far we are from the next card boundary. If it is smaller than
|
||
+ // the minimum object size we can allocate into, expand into the next card.
|
||
+ HeapWord* top = cur->top();
|
||
+ HeapWord* aligned_top = (HeapWord*)align_ptr_up(top, G1BlockOffsetSharedArray::N_bytes);
|
||
+
|
||
+ size_t to_allocate_words = pointer_delta(aligned_top, top, HeapWordSize);
|
||
+
|
||
+ if (to_allocate_words != 0) {
|
||
+ // We are not at a card boundary. Fill up, possibly into the next, taking the
|
||
+ // end of the region and the minimum object size into account.
|
||
+ to_allocate_words = MIN2(pointer_delta(cur->end(), cur->top(), HeapWordSize),
|
||
+ MAX2(to_allocate_words, G1CollectedHeap::min_fill_size()));
|
||
+
|
||
+ // Skip allocation if there is not enough space to allocate even the smallest
|
||
+ // possible object. In this case this region will not be retained, so the
|
||
+ // original problem cannot occur.
|
||
+ if (to_allocate_words >= G1CollectedHeap::min_fill_size()) {
|
||
+ HeapWord* dummy = attempt_allocation(to_allocate_words, true /* bot_updates */);
|
||
+ CollectedHeap::fill_with_object(dummy, to_allocate_words);
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+ return G1AllocRegion::release();
|
||
+}
|
||
+
|
||
// Heap region set verification
|
||
|
||
class VerifyRegionListsClosure : public HeapRegionClosure {
|
||
--- ./hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -183,6 +183,13 @@
|
||
public:
|
||
OldGCAllocRegion()
|
||
: G1AllocRegion("Old GC Alloc Region", true /* bot_updates */) { }
|
||
+
|
||
+ // This specialization of release() makes sure that the last card that has been
|
||
+ // allocated into has been completely filled by a dummy object.
|
||
+ // This avoids races when remembered set scanning wants to update the BOT of the
|
||
+ // last card in the retained old gc alloc region, and allocation threads
|
||
+ // allocating into that card at the same time.
|
||
+ virtual HeapRegion* release();
|
||
};
|
||
|
||
// The G1 STW is alive closure.
|
||
--- ./hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2001, 2014, 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
|
||
@@ -124,9 +124,12 @@
|
||
_last_young_gc(false),
|
||
_last_gc_was_young(false),
|
||
|
||
- _eden_bytes_before_gc(0),
|
||
- _survivor_bytes_before_gc(0),
|
||
- _capacity_before_gc(0),
|
||
+ _eden_used_bytes_before_gc(0),
|
||
+ _survivor_used_bytes_before_gc(0),
|
||
+ _heap_used_bytes_before_gc(0),
|
||
+ _permgen_used_bytes_before_gc(0),
|
||
+ _eden_capacity_bytes_before_gc(0),
|
||
+ _heap_capacity_bytes_before_gc(0),
|
||
|
||
_eden_cset_region_length(0),
|
||
_survivor_cset_region_length(0),
|
||
@@ -747,7 +750,7 @@
|
||
|
||
void G1CollectorPolicy::record_full_collection_start() {
|
||
_full_collection_start_sec = os::elapsedTime();
|
||
- record_heap_size_info_at_start();
|
||
+ record_heap_size_info_at_start(true /* full */);
|
||
// Release the future to-space so that it is available for compaction into.
|
||
_g1->set_full_collection();
|
||
}
|
||
@@ -804,7 +807,7 @@
|
||
_trace_gen0_time_data.record_start_collection(s_w_t_ms);
|
||
_stop_world_start = 0.0;
|
||
|
||
- record_heap_size_info_at_start();
|
||
+ record_heap_size_info_at_start(false /* full */);
|
||
|
||
phase_times()->record_cur_collection_start_sec(start_time_sec);
|
||
_pending_cards = _g1->pending_card_num();
|
||
@@ -939,14 +942,6 @@
|
||
_mmu_tracker->add_pause(end_time_sec - pause_time_ms/1000.0,
|
||
end_time_sec, false);
|
||
|
||
- size_t freed_bytes =
|
||
- _cur_collection_pause_used_at_start_bytes - cur_used_bytes;
|
||
- size_t surviving_bytes = _collection_set_bytes_used_before - freed_bytes;
|
||
-
|
||
- double survival_fraction =
|
||
- (double)surviving_bytes/
|
||
- (double)_collection_set_bytes_used_before;
|
||
-
|
||
evacuation_info.set_collectionset_used_before(_collection_set_bytes_used_before);
|
||
evacuation_info.set_bytes_copied(_bytes_copied_during_gc);
|
||
|
||
@@ -1002,6 +997,7 @@
|
||
}
|
||
}
|
||
}
|
||
+
|
||
bool new_in_marking_window = _in_marking_window;
|
||
bool new_in_marking_window_im = false;
|
||
if (during_initial_mark_pause()) {
|
||
@@ -1087,8 +1083,10 @@
|
||
}
|
||
_rs_length_diff_seq->add((double) rs_length_diff);
|
||
|
||
- size_t copied_bytes = surviving_bytes;
|
||
+ size_t freed_bytes = _heap_used_bytes_before_gc - cur_used_bytes;
|
||
+ size_t copied_bytes = _collection_set_bytes_used_before - freed_bytes;
|
||
double cost_per_byte_ms = 0.0;
|
||
+
|
||
if (copied_bytes > 0) {
|
||
cost_per_byte_ms = phase_times()->average_last_obj_copy_time() / (double) copied_bytes;
|
||
if (_in_marking_window) {
|
||
@@ -1152,51 +1150,66 @@
|
||
byte_size_in_proper_unit((double)(bytes)), \
|
||
proper_unit_for_byte_size((bytes))
|
||
|
||
-void G1CollectorPolicy::record_heap_size_info_at_start() {
|
||
+void G1CollectorPolicy::record_heap_size_info_at_start(bool full) {
|
||
YoungList* young_list = _g1->young_list();
|
||
- _eden_bytes_before_gc = young_list->eden_used_bytes();
|
||
- _survivor_bytes_before_gc = young_list->survivor_used_bytes();
|
||
- _capacity_before_gc = _g1->capacity();
|
||
-
|
||
- _cur_collection_pause_used_at_start_bytes = _g1->used();
|
||
+ _eden_used_bytes_before_gc = young_list->eden_used_bytes();
|
||
+ _survivor_used_bytes_before_gc = young_list->survivor_used_bytes();
|
||
+ _heap_capacity_bytes_before_gc = _g1->capacity();
|
||
+ _heap_used_bytes_before_gc = _g1->used();
|
||
_cur_collection_pause_used_regions_at_start = _g1->used_regions();
|
||
|
||
- size_t eden_capacity_before_gc =
|
||
- (_young_list_target_length * HeapRegion::GrainBytes) - _survivor_bytes_before_gc;
|
||
+ _eden_capacity_bytes_before_gc =
|
||
+ (_young_list_target_length * HeapRegion::GrainBytes) - _survivor_used_bytes_before_gc;
|
||
|
||
- _prev_eden_capacity = eden_capacity_before_gc;
|
||
+ if (full) {
|
||
+ _permgen_used_bytes_before_gc = _g1->perm_gen()->used();
|
||
+ }
|
||
+}
|
||
+void G1CollectorPolicy::print_perm_heap_change(size_t perm_prev_used) const {
|
||
+ gclog_or_tty->print(", [%s:", _g1->perm_gen()->short_name());
|
||
+ _g1->perm_gen()->print_heap_change(perm_prev_used);
|
||
+ gclog_or_tty->print("]");
|
||
}
|
||
|
||
void G1CollectorPolicy::print_heap_transition() {
|
||
_g1->print_size_transition(gclog_or_tty,
|
||
- _cur_collection_pause_used_at_start_bytes, _g1->used(), _g1->capacity());
|
||
+ _heap_used_bytes_before_gc,
|
||
+ _g1->used(),
|
||
+ _g1->capacity());
|
||
}
|
||
|
||
-void G1CollectorPolicy::print_detailed_heap_transition() {
|
||
- YoungList* young_list = _g1->young_list();
|
||
- size_t eden_bytes = young_list->eden_used_bytes();
|
||
- size_t survivor_bytes = young_list->survivor_used_bytes();
|
||
- size_t used_before_gc = _cur_collection_pause_used_at_start_bytes;
|
||
- size_t used = _g1->used();
|
||
- size_t capacity = _g1->capacity();
|
||
- size_t eden_capacity =
|
||
- (_young_list_target_length * HeapRegion::GrainBytes) - survivor_bytes;
|
||
+void G1CollectorPolicy::print_detailed_heap_transition(bool full) {
|
||
+ YoungList* young_list = _g1->young_list();
|
||
|
||
- gclog_or_tty->print_cr(
|
||
- " [Eden: "EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT")->"EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT") "
|
||
- "Survivors: "EXT_SIZE_FORMAT"->"EXT_SIZE_FORMAT" "
|
||
- "Heap: "EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT")->"
|
||
- EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT")]",
|
||
- EXT_SIZE_PARAMS(_eden_bytes_before_gc),
|
||
- EXT_SIZE_PARAMS(_prev_eden_capacity),
|
||
- EXT_SIZE_PARAMS(eden_bytes),
|
||
- EXT_SIZE_PARAMS(eden_capacity),
|
||
- EXT_SIZE_PARAMS(_survivor_bytes_before_gc),
|
||
- EXT_SIZE_PARAMS(survivor_bytes),
|
||
- EXT_SIZE_PARAMS(used_before_gc),
|
||
- EXT_SIZE_PARAMS(_capacity_before_gc),
|
||
- EXT_SIZE_PARAMS(used),
|
||
- EXT_SIZE_PARAMS(capacity));
|
||
+ size_t eden_used_bytes_after_gc = young_list->eden_used_bytes();
|
||
+ size_t survivor_used_bytes_after_gc = young_list->survivor_used_bytes();
|
||
+ size_t heap_used_bytes_after_gc = _g1->used();
|
||
+
|
||
+ size_t heap_capacity_bytes_after_gc = _g1->capacity();
|
||
+ size_t eden_capacity_bytes_after_gc =
|
||
+ (_young_list_target_length * HeapRegion::GrainBytes) - survivor_used_bytes_after_gc;
|
||
+
|
||
+ gclog_or_tty->print(
|
||
+ " [Eden: "EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT")->"EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT") "
|
||
+ "Survivors: "EXT_SIZE_FORMAT"->"EXT_SIZE_FORMAT" "
|
||
+ "Heap: "EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT")->"
|
||
+ EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT")]",
|
||
+ EXT_SIZE_PARAMS(_eden_used_bytes_before_gc),
|
||
+ EXT_SIZE_PARAMS(_eden_capacity_bytes_before_gc),
|
||
+ EXT_SIZE_PARAMS(eden_used_bytes_after_gc),
|
||
+ EXT_SIZE_PARAMS(eden_capacity_bytes_after_gc),
|
||
+ EXT_SIZE_PARAMS(_survivor_used_bytes_before_gc),
|
||
+ EXT_SIZE_PARAMS(survivor_used_bytes_after_gc),
|
||
+ EXT_SIZE_PARAMS(_heap_used_bytes_before_gc),
|
||
+ EXT_SIZE_PARAMS(_heap_capacity_bytes_before_gc),
|
||
+ EXT_SIZE_PARAMS(heap_used_bytes_after_gc),
|
||
+ EXT_SIZE_PARAMS(heap_capacity_bytes_after_gc));
|
||
+
|
||
+ if (full) {
|
||
+ print_perm_heap_change(_permgen_used_bytes_before_gc);
|
||
+ }
|
||
+
|
||
+ gclog_or_tty->cr();
|
||
}
|
||
|
||
void G1CollectorPolicy::adjust_concurrent_refinement(double update_rs_time,
|
||
--- ./hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2001, 2014, 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
|
||
@@ -176,7 +176,6 @@
|
||
CollectionSetChooser* _collectionSetChooser;
|
||
|
||
double _full_collection_start_sec;
|
||
- size_t _cur_collection_pause_used_at_start_bytes;
|
||
uint _cur_collection_pause_used_regions_at_start;
|
||
|
||
// These exclude marking times.
|
||
@@ -195,7 +194,6 @@
|
||
|
||
uint _young_list_target_length;
|
||
uint _young_list_fixed_length;
|
||
- size_t _prev_eden_capacity; // used for logging
|
||
|
||
// The max number of regions we can extend the eden by while the GC
|
||
// locker is active. This should be >= _young_list_target_length;
|
||
@@ -694,11 +692,12 @@
|
||
|
||
// Records the information about the heap size for reporting in
|
||
// print_detailed_heap_transition
|
||
- void record_heap_size_info_at_start();
|
||
+ void record_heap_size_info_at_start(bool full);
|
||
|
||
// Print heap sizing transition (with less and more detail).
|
||
void print_heap_transition();
|
||
- void print_detailed_heap_transition();
|
||
+ void print_detailed_heap_transition(bool full = false);
|
||
+ void print_perm_heap_change(size_t perm_prev_used) const;
|
||
|
||
void record_stop_world_start();
|
||
void record_concurrent_pause();
|
||
@@ -862,9 +861,16 @@
|
||
uint _max_survivor_regions;
|
||
|
||
// For reporting purposes.
|
||
- size_t _eden_bytes_before_gc;
|
||
- size_t _survivor_bytes_before_gc;
|
||
- size_t _capacity_before_gc;
|
||
+ // The value of _heap_bytes_before_gc is also used to calculate
|
||
+ // the cost of copying.
|
||
+
|
||
+ size_t _eden_used_bytes_before_gc; // Eden occupancy before GC
|
||
+ size_t _survivor_used_bytes_before_gc; // Survivor occupancy before GC
|
||
+ size_t _heap_used_bytes_before_gc; // Heap occupancy before GC
|
||
+ size_t _permgen_used_bytes_before_gc; // PermGen occupancy before GC
|
||
+
|
||
+ size_t _eden_capacity_bytes_before_gc; // Eden capacity before GC
|
||
+ size_t _heap_capacity_bytes_before_gc; // Heap capacity before GC
|
||
|
||
// The amount of survor regions after a collection.
|
||
uint _recorded_survivor_regions;
|
||
--- ./hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -107,7 +107,15 @@
|
||
jbyte *const first = byte_for(mr.start());
|
||
jbyte *const last = byte_after(mr.last());
|
||
|
||
- memset(first, g1_young_gen, last - first);
|
||
+ // Below we may use an explicit loop instead of memset() because on
|
||
+ // certain platforms memset() can give concurrent readers phantom zeros.
|
||
+ if (UseMemSetInBOT) {
|
||
+ memset(first, g1_young_gen, last - first);
|
||
+ } else {
|
||
+ for (jbyte* i = first; i < last; i++) {
|
||
+ *i = g1_young_gen;
|
||
+ }
|
||
+ }
|
||
}
|
||
|
||
#ifndef PRODUCT
|
||
--- ./hotspot/src/share/vm/gc_implementation/shared/parGCAllocBuffer.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/gc_implementation/shared/parGCAllocBuffer.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -62,7 +62,8 @@
|
||
ParGCAllocBuffer(size_t word_sz);
|
||
|
||
static const size_t min_size() {
|
||
- return ThreadLocalAllocBuffer::min_size();
|
||
+ // Make sure that we return something that is larger than AlignmentReserve
|
||
+ return align_object_size(MAX2(MinTLABSize / HeapWordSize, (uintx)oopDesc::header_size())) + AlignmentReserve;
|
||
}
|
||
|
||
static const size_t max_size() {
|
||
--- ./hotspot/src/share/vm/memory/referenceProcessor.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/memory/referenceProcessor.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -119,6 +119,7 @@
|
||
_discoveredWeakRefs = &_discoveredSoftRefs[_max_num_q];
|
||
_discoveredFinalRefs = &_discoveredWeakRefs[_max_num_q];
|
||
_discoveredPhantomRefs = &_discoveredFinalRefs[_max_num_q];
|
||
+ _discoveredCleanerRefs = &_discoveredPhantomRefs[_max_num_q];
|
||
|
||
// Initialize all entries to NULL
|
||
for (uint i = 0; i < _max_num_q * number_of_subclasses_of_ref(); i++) {
|
||
@@ -250,6 +251,13 @@
|
||
phantom_count =
|
||
process_discovered_reflist(_discoveredPhantomRefs, NULL, false,
|
||
is_alive, keep_alive, complete_gc, task_executor);
|
||
+
|
||
+ // Process cleaners, but include them in phantom statistics. We expect
|
||
+ // Cleaner references to be temporary, and don't want to deal with
|
||
+ // possible incompatibilities arising from making it more visible.
|
||
+ phantom_count +=
|
||
+ process_discovered_reflist(_discoveredCleanerRefs, NULL, false,
|
||
+ is_alive, keep_alive, complete_gc, task_executor);
|
||
}
|
||
|
||
// Weak global JNI references. It would make more sense (semantically) to
|
||
@@ -899,6 +907,7 @@
|
||
balance_queues(_discoveredWeakRefs);
|
||
balance_queues(_discoveredFinalRefs);
|
||
balance_queues(_discoveredPhantomRefs);
|
||
+ balance_queues(_discoveredCleanerRefs);
|
||
}
|
||
|
||
size_t
|
||
@@ -1058,6 +1067,9 @@
|
||
case REF_PHANTOM:
|
||
list = &_discoveredPhantomRefs[id];
|
||
break;
|
||
+ case REF_CLEANER:
|
||
+ list = &_discoveredCleanerRefs[id];
|
||
+ break;
|
||
case REF_NONE:
|
||
// we should not reach here if we are an instanceRefKlass
|
||
default:
|
||
@@ -1353,6 +1365,17 @@
|
||
preclean_discovered_reflist(_discoveredPhantomRefs[i], is_alive,
|
||
keep_alive, complete_gc, yield);
|
||
}
|
||
+
|
||
+ // Cleaner references. Included in timing for phantom references. We
|
||
+ // expect Cleaner references to be temporary, and don't want to deal with
|
||
+ // possible incompatibilities arising from making it more visible.
|
||
+ for (uint i = 0; i < _max_num_q; i++) {
|
||
+ if (yield->should_return()) {
|
||
+ return;
|
||
+ }
|
||
+ preclean_discovered_reflist(_discoveredCleanerRefs[i], is_alive,
|
||
+ keep_alive, complete_gc, yield);
|
||
+ }
|
||
}
|
||
}
|
||
|
||
@@ -1421,6 +1444,7 @@
|
||
case 1: return "WeakRef";
|
||
case 2: return "FinalRef";
|
||
case 3: return "PhantomRef";
|
||
+ case 4: return "CleanerRef";
|
||
}
|
||
ShouldNotReachHere();
|
||
return NULL;
|
||
--- ./hotspot/src/share/vm/memory/referenceProcessor.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/memory/referenceProcessor.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -272,9 +272,10 @@
|
||
DiscoveredList* _discoveredWeakRefs;
|
||
DiscoveredList* _discoveredFinalRefs;
|
||
DiscoveredList* _discoveredPhantomRefs;
|
||
+ DiscoveredList* _discoveredCleanerRefs;
|
||
|
||
public:
|
||
- static int number_of_subclasses_of_ref() { return (REF_PHANTOM - REF_OTHER); }
|
||
+ static int number_of_subclasses_of_ref() { return (REF_CLEANER - REF_OTHER); }
|
||
|
||
uint num_q() { return _num_q; }
|
||
uint max_num_q() { return _max_num_q; }
|
||
--- ./hotspot/src/share/vm/memory/referenceType.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/memory/referenceType.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -35,7 +35,8 @@
|
||
REF_SOFT, // Subclass of java/lang/ref/SoftReference
|
||
REF_WEAK, // Subclass of java/lang/ref/WeakReference
|
||
REF_FINAL, // Subclass of java/lang/ref/FinalReference
|
||
- REF_PHANTOM // Subclass of java/lang/ref/PhantomReference
|
||
+ REF_PHANTOM, // Subclass of java/lang/ref/PhantomReference
|
||
+ REF_CLEANER // Subclass of sun/misc/Cleaner
|
||
};
|
||
|
||
#endif // SHARE_VM_MEMORY_REFRERENCETYPE_HPP
|
||
--- ./hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -240,22 +240,19 @@
|
||
}
|
||
|
||
size_t ThreadLocalAllocBuffer::initial_desired_size() {
|
||
- size_t init_sz;
|
||
+ size_t init_sz = 0;
|
||
|
||
if (TLABSize > 0) {
|
||
- init_sz = MIN2(TLABSize / HeapWordSize, max_size());
|
||
- } else if (global_stats() == NULL) {
|
||
- // Startup issue - main thread initialized before heap initialized.
|
||
- init_sz = min_size();
|
||
- } else {
|
||
+ init_sz = TLABSize / HeapWordSize;
|
||
+ } else if (global_stats() != NULL) {
|
||
// Initial size is a function of the average number of allocating threads.
|
||
unsigned nof_threads = global_stats()->allocating_threads_avg();
|
||
|
||
init_sz = (Universe::heap()->tlab_capacity(myThread()) / HeapWordSize) /
|
||
(nof_threads * target_refills());
|
||
init_sz = align_object_size(init_sz);
|
||
- init_sz = MIN2(MAX2(init_sz, min_size()), max_size());
|
||
}
|
||
+ init_sz = MIN2(MAX2(init_sz, min_size()), max_size());
|
||
return init_sz;
|
||
}
|
||
|
||
--- ./hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -103,7 +103,7 @@
|
||
// do nothing. tlabs must be inited by initialize() calls
|
||
}
|
||
|
||
- static const size_t min_size() { return align_object_size(MinTLABSize / HeapWordSize); }
|
||
+ static const size_t min_size() { return align_object_size(MinTLABSize / HeapWordSize) + alignment_reserve(); }
|
||
static const size_t max_size();
|
||
|
||
HeapWord* start() const { return _start; }
|
||
--- ./hotspot/src/share/vm/oops/cpCacheOop.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/oops/cpCacheOop.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -140,8 +140,15 @@
|
||
oop_store(&_f1, f1);
|
||
}
|
||
void release_set_f1(oop f1);
|
||
- void set_f2(intx f2) { assert(_f2 == 0 || _f2 == f2, "illegal field change"); _f2 = f2; }
|
||
- void set_f2_as_vfinal_method(methodOop f2) { assert(_f2 == 0 || _f2 == (intptr_t) f2, "illegal field change"); assert(is_vfinal(), "flags must be set"); _f2 = (intptr_t) f2; }
|
||
+ void set_f2(intx f2) {
|
||
+ intx existing_f2 = _f2; // read once
|
||
+ assert(existing_f2 == 0 || existing_f2 == f2, "illegal field change");
|
||
+ _f2 = f2;
|
||
+ }
|
||
+ void set_f2_as_vfinal_method(methodOop f2) {
|
||
+ assert(is_vfinal(), "flags must be set");
|
||
+ set_f2((intx)f2);
|
||
+ }
|
||
int make_flags(TosState state, int option_bits, int field_index_or_method_params);
|
||
void set_flags(intx flags) { _flags = flags; }
|
||
bool init_flags_atomic(intx flags);
|
||
--- ./hotspot/src/share/vm/oops/objArrayOop.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/oops/objArrayOop.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -45,9 +45,10 @@
|
||
private:
|
||
// Give size of objArrayOop in HeapWords minus the header
|
||
static int array_size(int length) {
|
||
- const int OopsPerHeapWord = HeapWordSize/heapOopSize;
|
||
+ const uint OopsPerHeapWord = HeapWordSize/heapOopSize;
|
||
assert(OopsPerHeapWord >= 1 && (HeapWordSize % heapOopSize == 0),
|
||
"Else the following (new) computation would be in error");
|
||
+ uint res = ((uint)length + OopsPerHeapWord - 1)/OopsPerHeapWord;
|
||
#ifdef ASSERT
|
||
// The old code is left in for sanity-checking; it'll
|
||
// go away pretty soon. XXX
|
||
@@ -55,16 +56,15 @@
|
||
// oop->length() * HeapWordsPerOop;
|
||
// With narrowOops, HeapWordsPerOop is 1/2 or equal 0 as an integer.
|
||
// The oop elements are aligned up to wordSize
|
||
- const int HeapWordsPerOop = heapOopSize/HeapWordSize;
|
||
- int old_res;
|
||
+ const uint HeapWordsPerOop = heapOopSize/HeapWordSize;
|
||
+ uint old_res;
|
||
if (HeapWordsPerOop > 0) {
|
||
old_res = length * HeapWordsPerOop;
|
||
} else {
|
||
- old_res = align_size_up(length, OopsPerHeapWord)/OopsPerHeapWord;
|
||
+ old_res = align_size_up((uint)length, OopsPerHeapWord)/OopsPerHeapWord;
|
||
}
|
||
+ assert(res == old_res, "Inconsistency between old and new.");
|
||
#endif // ASSERT
|
||
- int res = ((uint)length + OopsPerHeapWord - 1)/OopsPerHeapWord;
|
||
- assert(res == old_res, "Inconsistency between old and new.");
|
||
return res;
|
||
}
|
||
|
||
--- ./hotspot/src/share/vm/oops/typeArrayOop.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/oops/typeArrayOop.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -162,7 +162,7 @@
|
||
DEBUG_ONLY(BasicType etype = Klass::layout_helper_element_type(lh));
|
||
assert(length <= arrayOopDesc::max_array_length(etype), "no overflow");
|
||
|
||
- julong size_in_bytes = length;
|
||
+ julong size_in_bytes = (juint)length;
|
||
size_in_bytes <<= element_shift;
|
||
size_in_bytes += instance_header_size;
|
||
julong size_in_words = ((size_in_bytes + (HeapWordSize-1)) >> LogHeapWordSize);
|
||
--- ./hotspot/src/share/vm/opto/compile.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/opto/compile.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -669,6 +669,7 @@
|
||
#endif
|
||
set_print_inlining(PrintInlining || method()->has_option("PrintInlining") NOT_PRODUCT( || PrintOptoInlining));
|
||
set_print_intrinsics(PrintIntrinsics || method()->has_option("PrintIntrinsics"));
|
||
+ set_has_irreducible_loop(true); // conservative until build_loop_tree() reset it
|
||
|
||
if (ProfileTraps) {
|
||
// Make sure the method being compiled gets its own MDO,
|
||
@@ -936,6 +937,8 @@
|
||
set_print_assembly(PrintFrameConverterAssembly);
|
||
set_parsed_irreducible_loop(false);
|
||
#endif
|
||
+ set_has_irreducible_loop(false); // no loops
|
||
+
|
||
CompileWrapper cw(this);
|
||
Init(/*AliasLevel=*/ 0);
|
||
init_tf((*generator)());
|
||
@@ -1100,7 +1103,7 @@
|
||
if( start->is_Start() )
|
||
return start->as_Start();
|
||
}
|
||
- ShouldNotReachHere();
|
||
+ fatal("Did not find Start node!");
|
||
return NULL;
|
||
}
|
||
|
||
--- ./hotspot/src/share/vm/opto/compile.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/opto/compile.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -291,6 +291,7 @@
|
||
bool _trace_opto_output;
|
||
bool _parsed_irreducible_loop; // True if ciTypeFlow detected irreducible loops during parsing
|
||
#endif
|
||
+ bool _has_irreducible_loop; // Found irreducible loops
|
||
|
||
// JSR 292
|
||
bool _has_method_handle_invokes; // True if this method has MethodHandle invokes.
|
||
@@ -552,6 +553,8 @@
|
||
bool parsed_irreducible_loop() const { return _parsed_irreducible_loop; }
|
||
void set_parsed_irreducible_loop(bool z) { _parsed_irreducible_loop = z; }
|
||
#endif
|
||
+ bool has_irreducible_loop() const { return _has_irreducible_loop; }
|
||
+ void set_has_irreducible_loop(bool z) { _has_irreducible_loop = z; }
|
||
|
||
// JSR 292
|
||
bool has_method_handle_invokes() const { return _has_method_handle_invokes; }
|
||
--- ./hotspot/src/share/vm/opto/ifnode.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/opto/ifnode.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2000, 2014, 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
|
||
@@ -503,7 +503,7 @@
|
||
jint off = 0;
|
||
if (l->is_top()) {
|
||
return 0;
|
||
- } else if (l->is_Add()) {
|
||
+ } else if (l->Opcode() == Op_AddI) {
|
||
if ((off = l->in(1)->find_int_con(0)) != 0) {
|
||
ind = l->in(2);
|
||
} else if ((off = l->in(2)->find_int_con(0)) != 0) {
|
||
--- ./hotspot/src/share/vm/opto/library_call.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/opto/library_call.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1999, 2014, 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
|
||
@@ -3699,8 +3699,11 @@
|
||
}
|
||
|
||
|
||
-//------------------------------inline_native_hashcode--------------------
|
||
-// Build special case code for calls to hashCode on an object.
|
||
+/**
|
||
+ * Build special case code for calls to hashCode on an object. This call may
|
||
+ * be virtual (invokevirtual) or bound (invokespecial). For each case we generate
|
||
+ * slightly different code.
|
||
+ */
|
||
bool LibraryCallKit::inline_native_hashcode(bool is_virtual, bool is_static) {
|
||
assert(is_static == callee()->is_static(), "correct intrinsic selection");
|
||
assert(!(is_virtual && is_static), "either virtual, special, or static");
|
||
@@ -3708,11 +3711,9 @@
|
||
enum { _slow_path = 1, _fast_path, _null_path, PATH_LIMIT };
|
||
|
||
RegionNode* result_reg = new(C) RegionNode(PATH_LIMIT);
|
||
- PhiNode* result_val = new(C) PhiNode(result_reg,
|
||
- TypeInt::INT);
|
||
+ PhiNode* result_val = new(C) PhiNode(result_reg, TypeInt::INT);
|
||
PhiNode* result_io = new(C) PhiNode(result_reg, Type::ABIO);
|
||
- PhiNode* result_mem = new(C) PhiNode(result_reg, Type::MEMORY,
|
||
- TypePtr::BOTTOM);
|
||
+ PhiNode* result_mem = new(C) PhiNode(result_reg, Type::MEMORY, TypePtr::BOTTOM);
|
||
Node* obj = NULL;
|
||
if (!is_static) {
|
||
// Check for hashing null object
|
||
@@ -3738,12 +3739,6 @@
|
||
return true;
|
||
}
|
||
|
||
- // After null check, get the object's klass.
|
||
- Node* obj_klass = load_object_klass(obj);
|
||
-
|
||
- // This call may be virtual (invokevirtual) or bound (invokespecial).
|
||
- // For each case we generate slightly different code.
|
||
-
|
||
// We only go to the fast case code if we pass a number of guards. The
|
||
// paths which do not pass are accumulated in the slow_region.
|
||
RegionNode* slow_region = new (C) RegionNode(1);
|
||
@@ -3756,19 +3751,24 @@
|
||
// guard for non-virtual calls -- the caller is known to be the native
|
||
// Object hashCode().
|
||
if (is_virtual) {
|
||
+ // After null check, get the object's klass.
|
||
+ Node* obj_klass = load_object_klass(obj);
|
||
generate_virtual_guard(obj_klass, slow_region);
|
||
}
|
||
|
||
// Get the header out of the object, use LoadMarkNode when available
|
||
Node* header_addr = basic_plus_adr(obj, oopDesc::mark_offset_in_bytes());
|
||
- Node* header = make_load(control(), header_addr, TypeX_X, TypeX_X->basic_type());
|
||
+ // The control of the load must be NULL. Otherwise, the load can move before
|
||
+ // the null check after castPP removal.
|
||
+ Node* no_ctrl = NULL;
|
||
+ Node* header = make_load(no_ctrl, header_addr, TypeX_X, TypeX_X->basic_type());
|
||
|
||
// Test the header to see if it is unlocked.
|
||
- Node *lock_mask = _gvn.MakeConX(markOopDesc::biased_lock_mask_in_place);
|
||
- Node *lmasked_header = _gvn.transform( new (C) AndXNode(header, lock_mask) );
|
||
- Node *unlocked_val = _gvn.MakeConX(markOopDesc::unlocked_value);
|
||
- Node *chk_unlocked = _gvn.transform( new (C) CmpXNode( lmasked_header, unlocked_val));
|
||
- Node *test_unlocked = _gvn.transform( new (C) BoolNode( chk_unlocked, BoolTest::ne) );
|
||
+ Node* lock_mask = _gvn.MakeConX(markOopDesc::biased_lock_mask_in_place);
|
||
+ Node* lmasked_header = _gvn.transform(new (C) AndXNode(header, lock_mask));
|
||
+ Node* unlocked_val = _gvn.MakeConX(markOopDesc::unlocked_value);
|
||
+ Node* chk_unlocked = _gvn.transform(new (C) CmpXNode( lmasked_header, unlocked_val));
|
||
+ Node* test_unlocked = _gvn.transform(new (C) BoolNode( chk_unlocked, BoolTest::ne));
|
||
|
||
generate_slow_guard(test_unlocked, slow_region);
|
||
|
||
@@ -3776,19 +3776,19 @@
|
||
// We depend on hash_mask being at most 32 bits and avoid the use of
|
||
// hash_mask_in_place because it could be larger than 32 bits in a 64-bit
|
||
// vm: see markOop.hpp.
|
||
- Node *hash_mask = _gvn.intcon(markOopDesc::hash_mask);
|
||
- Node *hash_shift = _gvn.intcon(markOopDesc::hash_shift);
|
||
- Node *hshifted_header= _gvn.transform( new (C) URShiftXNode(header, hash_shift) );
|
||
+ Node* hash_mask = _gvn.intcon(markOopDesc::hash_mask);
|
||
+ Node* hash_shift = _gvn.intcon(markOopDesc::hash_shift);
|
||
+ Node* hshifted_header= _gvn.transform(new (C) URShiftXNode(header, hash_shift));
|
||
// This hack lets the hash bits live anywhere in the mark object now, as long
|
||
// as the shift drops the relevant bits into the low 32 bits. Note that
|
||
// Java spec says that HashCode is an int so there's no point in capturing
|
||
// an 'X'-sized hashcode (32 in 32-bit build or 64 in 64-bit build).
|
||
hshifted_header = ConvX2I(hshifted_header);
|
||
- Node *hash_val = _gvn.transform( new (C) AndINode(hshifted_header, hash_mask) );
|
||
-
|
||
- Node *no_hash_val = _gvn.intcon(markOopDesc::no_hash);
|
||
- Node *chk_assigned = _gvn.transform( new (C) CmpINode( hash_val, no_hash_val));
|
||
- Node *test_assigned = _gvn.transform( new (C) BoolNode( chk_assigned, BoolTest::eq) );
|
||
+ Node* hash_val = _gvn.transform(new (C) AndINode(hshifted_header, hash_mask));
|
||
+
|
||
+ Node* no_hash_val = _gvn.intcon(markOopDesc::no_hash);
|
||
+ Node* chk_assigned = _gvn.transform(new (C) CmpINode( hash_val, no_hash_val));
|
||
+ Node* test_assigned = _gvn.transform(new (C) BoolNode( chk_assigned, BoolTest::eq));
|
||
|
||
generate_slow_guard(test_assigned, slow_region);
|
||
|
||
--- ./hotspot/src/share/vm/opto/loopTransform.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/opto/loopTransform.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1127,6 +1127,7 @@
|
||
// Now force out all loop-invariant dominating tests. The optimizer
|
||
// finds some, but we _know_ they are all useless.
|
||
peeled_dom_test_elim(loop,old_new);
|
||
+ loop->record_for_igvn();
|
||
}
|
||
|
||
//------------------------------is_invariant-----------------------------
|
||
--- ./hotspot/src/share/vm/opto/loopnode.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/opto/loopnode.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1998, 2014, 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
|
||
@@ -266,9 +266,9 @@
|
||
|
||
// Counted loop head must be a good RegionNode with only 3 not NULL
|
||
// control input edges: Self, Entry, LoopBack.
|
||
- if (x->in(LoopNode::Self) == NULL || x->req() != 3)
|
||
+ if (x->in(LoopNode::Self) == NULL || x->req() != 3 || loop->_irreducible) {
|
||
return false;
|
||
-
|
||
+ }
|
||
Node *init_control = x->in(LoopNode::EntryControl);
|
||
Node *back_control = x->in(LoopNode::LoopBackControl);
|
||
if (init_control == NULL || back_control == NULL) // Partially dead
|
||
@@ -1522,11 +1522,11 @@
|
||
|
||
// If I have one hot backedge, peel off myself loop.
|
||
// I better be the outermost loop.
|
||
- if( _head->req() > 3 ) {
|
||
+ if (_head->req() > 3 && !_irreducible) {
|
||
split_outer_loop( phase );
|
||
result = true;
|
||
|
||
- } else if( !_head->is_Loop() && !_irreducible ) {
|
||
+ } else if (!_head->is_Loop() && !_irreducible) {
|
||
// Make a new LoopNode to replace the old loop head
|
||
Node *l = new (phase->C) LoopNode( _head->in(1), _head->in(2) );
|
||
l = igvn.register_new_node_with_optimizer(l, _head);
|
||
@@ -2938,6 +2938,7 @@
|
||
return pre_order;
|
||
}
|
||
}
|
||
+ C->set_has_irreducible_loop(_has_irreducible_loops);
|
||
}
|
||
|
||
// This Node might be a decision point for loops. It is only if
|
||
@@ -3171,17 +3172,16 @@
|
||
bool had_error = false;
|
||
#ifdef ASSERT
|
||
if (early != C->root()) {
|
||
- // Make sure that there's a dominance path from use to LCA
|
||
- Node* d = use;
|
||
- while (d != LCA) {
|
||
- d = idom(d);
|
||
+ // Make sure that there's a dominance path from LCA to early
|
||
+ Node* d = LCA;
|
||
+ while (d != early) {
|
||
if (d == C->root()) {
|
||
- tty->print_cr("*** Use %d isn't dominated by def %s", use->_idx, n->_idx);
|
||
- n->dump();
|
||
- use->dump();
|
||
+ dump_bad_graph("Bad graph detected in compute_lca_of_uses", n, early, LCA);
|
||
+ tty->print_cr("*** Use %d isn't dominated by def %d ***", use->_idx, n->_idx);
|
||
had_error = true;
|
||
break;
|
||
}
|
||
+ d = idom(d);
|
||
}
|
||
}
|
||
#endif
|
||
@@ -3434,6 +3434,13 @@
|
||
_igvn._worklist.push(n); // Maybe we'll normalize it, if no more loops.
|
||
}
|
||
|
||
+#ifdef ASSERT
|
||
+ if (_verify_only && !n->is_CFG()) {
|
||
+ // Check def-use domination.
|
||
+ compute_lca_of_uses(n, get_ctrl(n), true /* verify */);
|
||
+ }
|
||
+#endif
|
||
+
|
||
// CFG and pinned nodes already handled
|
||
if( n->in(0) ) {
|
||
if( n->in(0)->is_top() ) return; // Dead?
|
||
--- ./hotspot/src/share/vm/opto/loopopts.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/opto/loopopts.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -2684,6 +2684,7 @@
|
||
// Inhibit more partial peeling on this loop
|
||
new_head_clone->set_partial_peel_loop();
|
||
C->set_major_progress();
|
||
+ loop->record_for_igvn();
|
||
|
||
#if !defined(PRODUCT)
|
||
if (TracePartialPeeling) {
|
||
--- ./hotspot/src/share/vm/opto/memnode.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/opto/memnode.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -292,33 +292,16 @@
|
||
int alias_idx = phase->C->get_alias_index(t_adr->is_ptr());
|
||
}
|
||
|
||
-#ifdef ASSERT
|
||
Node* base = NULL;
|
||
- if (address->is_AddP())
|
||
+ if (address->is_AddP()) {
|
||
base = address->in(AddPNode::Base);
|
||
+ }
|
||
if (base != NULL && phase->type(base)->higher_equal(TypePtr::NULL_PTR) &&
|
||
!t_adr->isa_rawptr()) {
|
||
// Note: raw address has TOP base and top->higher_equal(TypePtr::NULL_PTR) is true.
|
||
- Compile* C = phase->C;
|
||
- tty->cr();
|
||
- tty->print_cr("===== NULL+offs not RAW address =====");
|
||
- if (C->is_dead_node(this->_idx)) tty->print_cr("'this' is dead");
|
||
- if ((ctl != NULL) && C->is_dead_node(ctl->_idx)) tty->print_cr("'ctl' is dead");
|
||
- if (C->is_dead_node(mem->_idx)) tty->print_cr("'mem' is dead");
|
||
- if (C->is_dead_node(address->_idx)) tty->print_cr("'address' is dead");
|
||
- if (C->is_dead_node(base->_idx)) tty->print_cr("'base' is dead");
|
||
- tty->cr();
|
||
- base->dump(1);
|
||
- tty->cr();
|
||
- this->dump(2);
|
||
- tty->print("this->adr_type(): "); adr_type()->dump(); tty->cr();
|
||
- tty->print("phase->type(address): "); t_adr->dump(); tty->cr();
|
||
- tty->print("phase->type(base): "); phase->type(address)->dump(); tty->cr();
|
||
- tty->cr();
|
||
+ // Skip this node optimization if its address has TOP base.
|
||
+ return NodeSentinel; // caller will return NULL
|
||
}
|
||
- assert(base == NULL || t_adr->isa_rawptr() ||
|
||
- !phase->type(base)->higher_equal(TypePtr::NULL_PTR), "NULL+offs not RAW address?");
|
||
-#endif
|
||
|
||
// Avoid independent memory operations
|
||
Node* old_mem = mem;
|
||
--- ./hotspot/src/share/vm/opto/node.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/opto/node.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -27,6 +27,7 @@
|
||
#include "memory/allocation.inline.hpp"
|
||
#include "opto/cfgnode.hpp"
|
||
#include "opto/connode.hpp"
|
||
+#include "opto/loopnode.hpp"
|
||
#include "opto/machnode.hpp"
|
||
#include "opto/matcher.hpp"
|
||
#include "opto/node.hpp"
|
||
@@ -1225,6 +1226,7 @@
|
||
|
||
Node *top = igvn->C->top();
|
||
nstack.push(dead);
|
||
+ bool has_irreducible_loop = igvn->C->has_irreducible_loop();
|
||
|
||
while (nstack.size() > 0) {
|
||
dead = nstack.pop();
|
||
@@ -1239,13 +1241,31 @@
|
||
assert (!use->is_Con(), "Control for Con node should be Root node.");
|
||
use->set_req(0, top); // Cut dead edge to prevent processing
|
||
nstack.push(use); // the dead node again.
|
||
+ } else if (!has_irreducible_loop && // Backedge could be alive in irreducible loop
|
||
+ use->is_Loop() && !use->is_Root() && // Don't kill Root (RootNode extends LoopNode)
|
||
+ use->in(LoopNode::EntryControl) == dead) { // Dead loop if its entry is dead
|
||
+ use->set_req(LoopNode::EntryControl, top); // Cut dead edge to prevent processing
|
||
+ use->set_req(0, top); // Cut self edge
|
||
+ nstack.push(use);
|
||
} else { // Else found a not-dead user
|
||
+ // Dead if all inputs are top or null
|
||
+ bool dead_use = !use->is_Root(); // Keep empty graph alive
|
||
for (uint j = 1; j < use->req(); j++) {
|
||
- if (use->in(j) == dead) { // Turn all dead inputs into TOP
|
||
+ Node* in = use->in(j);
|
||
+ if (in == dead) { // Turn all dead inputs into TOP
|
||
use->set_req(j, top);
|
||
+ } else if (in != NULL && !in->is_top()) {
|
||
+ dead_use = false;
|
||
}
|
||
}
|
||
- igvn->_worklist.push(use);
|
||
+ if (dead_use) {
|
||
+ if (use->is_Region()) {
|
||
+ use->set_req(0, top); // Cut self edge
|
||
+ }
|
||
+ nstack.push(use);
|
||
+ } else {
|
||
+ igvn->_worklist.push(use);
|
||
+ }
|
||
}
|
||
// Refresh the iterator, since any number of kills might have happened.
|
||
k = dead->last_outs(kmin);
|
||
--- ./hotspot/src/share/vm/opto/runtime.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/opto/runtime.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1307,6 +1307,7 @@
|
||
// add counters so this is safe.
|
||
NamedCounter* head;
|
||
do {
|
||
+ c->set_next(NULL);
|
||
head = _named_counters;
|
||
c->set_next(head);
|
||
} while (Atomic::cmpxchg_ptr(c, &_named_counters, head) != head);
|
||
--- ./hotspot/src/share/vm/opto/runtime.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/opto/runtime.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -85,7 +85,7 @@
|
||
|
||
NamedCounter* next() const { return _next; }
|
||
void set_next(NamedCounter* next) {
|
||
- assert(_next == NULL, "already set");
|
||
+ assert(_next == NULL || next == NULL, "already set");
|
||
_next = next;
|
||
}
|
||
|
||
--- ./hotspot/src/share/vm/opto/superword.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/opto/superword.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1262,8 +1262,9 @@
|
||
memops.clear();
|
||
for (DUIterator i = upper_insert_pt->outs(); upper_insert_pt->has_out(i); i++) {
|
||
Node* use = upper_insert_pt->out(i);
|
||
- if (!use->is_Store())
|
||
+ if (use->is_Mem() && !use->is_Store()) {
|
||
memops.push(use);
|
||
+ }
|
||
}
|
||
|
||
MemNode* lower_insert_pt = last;
|
||
--- ./hotspot/src/share/vm/prims/jni.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/prims/jni.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
|
||
* Copyright (c) 2012 Red Hat, Inc.
|
||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||
*
|
||
@@ -5037,6 +5037,7 @@
|
||
#include "gc_implementation/shared/gcTimer.hpp"
|
||
#include "gc_interface/collectedHeap.hpp"
|
||
#include "utilities/quickSort.hpp"
|
||
+#include "utilities/ostream.hpp"
|
||
|
||
#define run_unit_test(unit_test_function_call) \
|
||
tty->print_cr("Running test: " #unit_test_function_call); \
|
||
@@ -5058,6 +5059,7 @@
|
||
run_unit_test(QuickSort::test_quick_sort());
|
||
run_unit_test(AltHashing::test_alt_hash());
|
||
run_unit_test(TestOldFreeSpaceCalculation_test());
|
||
+ run_unit_test(test_loggc_filename());
|
||
tty->print_cr("All internal VM tests passed");
|
||
}
|
||
}
|
||
--- ./hotspot/src/share/vm/prims/jvm.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/prims/jvm.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -388,6 +388,23 @@
|
||
JVM_END
|
||
|
||
|
||
+/*
|
||
+ * Return the temporary directory that the VM uses for the attach
|
||
+ * and perf data files.
|
||
+ *
|
||
+ * It is important that this directory is well-known and the
|
||
+ * same for all VM instances. It cannot be affected by configuration
|
||
+ * variables such as java.io.tmpdir.
|
||
+ */
|
||
+JVM_ENTRY(jstring, JVM_GetTemporaryDirectory(JNIEnv *env))
|
||
+ JVMWrapper("JVM_GetTemporaryDirectory");
|
||
+ HandleMark hm(THREAD);
|
||
+ const char* temp_dir = os::get_temp_directory();
|
||
+ Handle h = java_lang_String::create_from_platform_dependent_str(temp_dir, CHECK_NULL);
|
||
+ return (jstring) JNIHandles::make_local(env, h());
|
||
+JVM_END
|
||
+
|
||
+
|
||
// java.lang.Runtime /////////////////////////////////////////////////////////////////////////
|
||
|
||
extern volatile jint vm_created;
|
||
@@ -527,6 +544,12 @@
|
||
JavaThreadInObjectWaitState jtiows(thread, ms != 0);
|
||
if (JvmtiExport::should_post_monitor_wait()) {
|
||
JvmtiExport::post_monitor_wait((JavaThread *)THREAD, (oop)obj(), ms);
|
||
+
|
||
+ // The current thread already owns the monitor and it has not yet
|
||
+ // been added to the wait queue so the current thread cannot be
|
||
+ // made the successor. This means that the JVMTI_EVENT_MONITOR_WAIT
|
||
+ // event handler cannot accidentally consume an unpark() meant for
|
||
+ // the ParkEvent associated with this ObjectMonitor.
|
||
}
|
||
ObjectSynchronizer::wait(obj, ms, THREAD);
|
||
JVM_END
|
||
--- ./hotspot/src/share/vm/prims/jvm.h Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/prims/jvm.h Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1477,6 +1477,9 @@
|
||
JNIEXPORT jobject JNICALL
|
||
JVM_InitAgentProperties(JNIEnv *env, jobject agent_props);
|
||
|
||
+JNIEXPORT jstring JNICALL
|
||
+JVM_GetTemporaryDirectory(JNIEnv *env);
|
||
+
|
||
/* Generics reflection support.
|
||
*
|
||
* Returns information about the given class's EnclosingMethod
|
||
--- ./hotspot/src/share/vm/prims/jvmtiEnvBase.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/prims/jvmtiEnvBase.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -400,7 +400,11 @@
|
||
VMOp_Type type() const { return VMOp_GetCurrentContendedMonitor; }
|
||
jvmtiError result() { return _result; }
|
||
void doit() {
|
||
- _result = ((JvmtiEnvBase *)_env)->get_current_contended_monitor(_calling_thread,_java_thread,_owned_monitor_ptr);
|
||
+ _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
|
||
+ if (Threads::includes(_java_thread) && !_java_thread->is_exiting() &&
|
||
+ _java_thread->threadObj() != NULL) {
|
||
+ _result = ((JvmtiEnvBase *)_env)->get_current_contended_monitor(_calling_thread,_java_thread,_owned_monitor_ptr);
|
||
+ }
|
||
}
|
||
};
|
||
|
||
--- ./hotspot/src/share/vm/runtime/arguments.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/runtime/arguments.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -55,7 +55,7 @@
|
||
#endif
|
||
|
||
// Note: This is a special bug reporting site for the JVM
|
||
-#define DEFAULT_VENDOR_URL_BUG "http://bugreport.sun.com/bugreport/crash.jsp"
|
||
+#define DEFAULT_VENDOR_URL_BUG "http://bugreport.java.com/bugreport/crash.jsp"
|
||
#define DEFAULT_JAVA_LAUNCHER "generic"
|
||
|
||
char** Arguments::_jvm_flags_array = NULL;
|
||
@@ -1758,24 +1758,22 @@
|
||
// check if do gclog rotation
|
||
// +UseGCLogFileRotation is a must,
|
||
// no gc log rotation when log file not supplied or
|
||
-// NumberOfGCLogFiles is 0, or GCLogFileSize is 0
|
||
+// NumberOfGCLogFiles is 0
|
||
void check_gclog_consistency() {
|
||
if (UseGCLogFileRotation) {
|
||
- if ((Arguments::gc_log_filename() == NULL) ||
|
||
- (NumberOfGCLogFiles == 0) ||
|
||
- (GCLogFileSize == 0)) {
|
||
+ if ((Arguments::gc_log_filename() == NULL) || (NumberOfGCLogFiles == 0)) {
|
||
jio_fprintf(defaultStream::output_stream(),
|
||
- "To enable GC log rotation, use -Xloggc:<filename> -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=<num_of_files> -XX:GCLogFileSize=<num_of_size>\n"
|
||
- "where num_of_file > 0 and num_of_size > 0\n"
|
||
+ "To enable GC log rotation, use -Xloggc:<filename> -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=<num_of_files>\n"
|
||
+ "where num_of_file > 0\n"
|
||
"GC log rotation is turned off\n");
|
||
UseGCLogFileRotation = false;
|
||
}
|
||
}
|
||
|
||
- if (UseGCLogFileRotation && GCLogFileSize < 8*K) {
|
||
- FLAG_SET_CMDLINE(uintx, GCLogFileSize, 8*K);
|
||
- jio_fprintf(defaultStream::output_stream(),
|
||
- "GCLogFileSize changed to minimum 8K\n");
|
||
+ if (UseGCLogFileRotation && (GCLogFileSize != 0) && (GCLogFileSize < 8*K)) {
|
||
+ FLAG_SET_CMDLINE(uintx, GCLogFileSize, 8*K);
|
||
+ jio_fprintf(defaultStream::output_stream(),
|
||
+ "GCLogFileSize changed to minimum 8K\n");
|
||
}
|
||
}
|
||
|
||
@@ -1807,6 +1805,51 @@
|
||
return true;
|
||
}
|
||
|
||
+// This function is called for -Xloggc:<filename>, it can be used
|
||
+// to check if a given file name(or string) conforms to the following
|
||
+// specification:
|
||
+// A valid string only contains "[A-Z][a-z][0-9].-_%[p|t]"
|
||
+// %p and %t only allowed once. We only limit usage of filename not path
|
||
+bool is_filename_valid(const char *file_name) {
|
||
+ const char* p = file_name;
|
||
+ char file_sep = os::file_separator()[0];
|
||
+ const char* cp;
|
||
+ // skip prefix path
|
||
+ for (cp = file_name; *cp != '\0'; cp++) {
|
||
+ if (*cp == '/' || *cp == file_sep) {
|
||
+ p = cp + 1;
|
||
+ }
|
||
+ }
|
||
+
|
||
+ int count_p = 0;
|
||
+ int count_t = 0;
|
||
+ while (*p != '\0') {
|
||
+ if ((*p >= '0' && *p <= '9') ||
|
||
+ (*p >= 'A' && *p <= 'Z') ||
|
||
+ (*p >= 'a' && *p <= 'z') ||
|
||
+ *p == '-' ||
|
||
+ *p == '_' ||
|
||
+ *p == '.') {
|
||
+ p++;
|
||
+ continue;
|
||
+ }
|
||
+ if (*p == '%') {
|
||
+ if(*(p + 1) == 'p') {
|
||
+ p += 2;
|
||
+ count_p ++;
|
||
+ continue;
|
||
+ }
|
||
+ if (*(p + 1) == 't') {
|
||
+ p += 2;
|
||
+ count_t ++;
|
||
+ continue;
|
||
+ }
|
||
+ }
|
||
+ return false;
|
||
+ }
|
||
+ return count_p < 2 && count_t < 2;
|
||
+}
|
||
+
|
||
// Check consistency of GC selection
|
||
bool Arguments::check_gc_consistency() {
|
||
check_gclog_consistency();
|
||
@@ -2398,7 +2441,7 @@
|
||
(size_t)InitialCodeCacheSize);
|
||
if (errcode != arg_in_range) {
|
||
jio_fprintf(defaultStream::error_stream(),
|
||
- "Invalid maximum code cache size: %s. Should be greater than InitialCodeCacheSize=%dK\n",
|
||
+ "Invalid maximum code cache size: %s. Should be greater than or equal to InitialCodeCacheSize=%dK\n",
|
||
option->optionString, InitialCodeCacheSize/K);
|
||
describe_range_error(errcode);
|
||
return JNI_EINVAL;
|
||
@@ -2524,6 +2567,13 @@
|
||
// ostream_init_log(), when called will use this filename
|
||
// to initialize a fileStream.
|
||
_gc_log_filename = strdup(tail);
|
||
+ if (!is_filename_valid(_gc_log_filename)) {
|
||
+ jio_fprintf(defaultStream::output_stream(),
|
||
+ "Invalid file name for use with -Xloggc: Filename can only contain the "
|
||
+ "characters [A-Z][a-z][0-9]-_.%%[p|t] but it has been %s\n"
|
||
+ "Note %%p or %%t can only be used once\n", _gc_log_filename);
|
||
+ return JNI_EINVAL;
|
||
+ }
|
||
FLAG_SET_CMDLINE(bool, PrintGC, true);
|
||
FLAG_SET_CMDLINE(bool, PrintGCTimeStamps, true);
|
||
|
||
@@ -3288,9 +3338,6 @@
|
||
#endif // CC_INTERP
|
||
|
||
#ifdef COMPILER2
|
||
- if (!UseBiasedLocking || EmitSync != 0) {
|
||
- UseOptoBiasInlining = false;
|
||
- }
|
||
if (!EliminateLocks) {
|
||
EliminateNestedLocks = false;
|
||
}
|
||
@@ -3334,6 +3381,12 @@
|
||
}
|
||
}
|
||
|
||
+#ifdef COMPILER2
|
||
+ if (!UseBiasedLocking || EmitSync != 0) {
|
||
+ UseOptoBiasInlining = false;
|
||
+ }
|
||
+#endif
|
||
+
|
||
// set PauseAtExit if the gamma launcher was used and a debugger is attached
|
||
// but only if not already set on the commandline
|
||
if (Arguments::created_by_gamma_launcher() && os::is_debugger_attached()) {
|
||
--- ./hotspot/src/share/vm/runtime/globals.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/runtime/globals.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -1204,7 +1204,7 @@
|
||
"Decay time (in milliseconds) to re-enable bulk rebiasing of a " \
|
||
"type after previous bulk rebias") \
|
||
\
|
||
- develop(bool, JavaObjectsInPerm, false, \
|
||
+ diagnostic(bool, JavaObjectsInPerm, false, \
|
||
"controls whether Classes and interned Strings are allocated" \
|
||
"in perm. This purely intended to allow debugging issues" \
|
||
"in production.") \
|
||
@@ -2339,9 +2339,9 @@
|
||
"Number of gclog files in rotation, " \
|
||
"Default: 0, no rotation") \
|
||
\
|
||
- product(uintx, GCLogFileSize, 0, \
|
||
- "GC log file size, Default: 0 bytes, no rotation " \
|
||
- "Only valid with UseGCLogFileRotation") \
|
||
+ product(uintx, GCLogFileSize, 8*K, \
|
||
+ "GC log file size, requires UseGCLogFileRotation. " \
|
||
+ "Set to 0 to only trigger rotation via jcmd") \
|
||
\
|
||
/* JVMTI heap profiling */ \
|
||
\
|
||
--- ./hotspot/src/share/vm/runtime/objectMonitor.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/runtime/objectMonitor.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1998, 2014, 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
|
||
@@ -385,6 +385,12 @@
|
||
DTRACE_MONITOR_PROBE(contended__enter, this, object(), jt);
|
||
if (JvmtiExport::should_post_monitor_contended_enter()) {
|
||
JvmtiExport::post_monitor_contended_enter(jt, this);
|
||
+
|
||
+ // The current thread does not yet own the monitor and does not
|
||
+ // yet appear on any queues that would get it made the successor.
|
||
+ // This means that the JVMTI_EVENT_MONITOR_CONTENDED_ENTER event
|
||
+ // handler cannot accidentally consume an unpark() meant for the
|
||
+ // ParkEvent associated with this ObjectMonitor.
|
||
}
|
||
|
||
OSThreadContendState osts(Self->osthread());
|
||
@@ -442,6 +448,12 @@
|
||
DTRACE_MONITOR_PROBE(contended__entered, this, object(), jt);
|
||
if (JvmtiExport::should_post_monitor_contended_entered()) {
|
||
JvmtiExport::post_monitor_contended_entered(jt, this);
|
||
+
|
||
+ // The current thread already owns the monitor and is not going to
|
||
+ // call park() for the remainder of the monitor enter protocol. So
|
||
+ // it doesn't matter if the JVMTI_EVENT_MONITOR_CONTENDED_ENTERED
|
||
+ // event handler consumed an unpark() issued by the thread that
|
||
+ // just exited the monitor.
|
||
}
|
||
|
||
if (event.should_commit()) {
|
||
@@ -1459,6 +1471,14 @@
|
||
// Note: 'false' parameter is passed here because the
|
||
// wait was not timed out due to thread interrupt.
|
||
JvmtiExport::post_monitor_waited(jt, this, false);
|
||
+
|
||
+ // In this short circuit of the monitor wait protocol, the
|
||
+ // current thread never drops ownership of the monitor and
|
||
+ // never gets added to the wait queue so the current thread
|
||
+ // cannot be made the successor. This means that the
|
||
+ // JVMTI_EVENT_MONITOR_WAITED event handler cannot accidentally
|
||
+ // consume an unpark() meant for the ParkEvent associated with
|
||
+ // this ObjectMonitor.
|
||
}
|
||
if (event.should_commit()) {
|
||
post_monitor_wait_event(&event, 0, millis, false);
|
||
@@ -1502,21 +1522,6 @@
|
||
exit (true, Self) ; // exit the monitor
|
||
guarantee (_owner != Self, "invariant") ;
|
||
|
||
- // As soon as the ObjectMonitor's ownership is dropped in the exit()
|
||
- // call above, another thread can enter() the ObjectMonitor, do the
|
||
- // notify(), and exit() the ObjectMonitor. If the other thread's
|
||
- // exit() call chooses this thread as the successor and the unpark()
|
||
- // call happens to occur while this thread is posting a
|
||
- // MONITOR_CONTENDED_EXIT event, then we run the risk of the event
|
||
- // handler using RawMonitors and consuming the unpark().
|
||
- //
|
||
- // To avoid the problem, we re-post the event. This does no harm
|
||
- // even if the original unpark() was not consumed because we are the
|
||
- // chosen successor for this monitor.
|
||
- if (node._notified != 0 && _succ == Self) {
|
||
- node._event->unpark();
|
||
- }
|
||
-
|
||
// The thread is on the WaitSet list - now park() it.
|
||
// On MP systems it's conceivable that a brief spin before we park
|
||
// could be profitable.
|
||
@@ -1600,6 +1605,33 @@
|
||
JvmtiExport::post_monitor_waited(jt, this, ret == OS_TIMEOUT);
|
||
}
|
||
|
||
+ // Without the fix for 8028280, it is possible for the above call:
|
||
+ //
|
||
+ // Thread::SpinAcquire (&_WaitSetLock, "WaitSet - unlink") ;
|
||
+ //
|
||
+ // to consume the unpark() that was done when the successor was set.
|
||
+ // The solution for this very rare possibility is to redo the unpark()
|
||
+ // outside of the JvmtiExport::should_post_monitor_waited() check.
|
||
+ //
|
||
+ if (node._notified != 0 && _succ == Self) {
|
||
+ // In this part of the monitor wait-notify-reenter protocol it
|
||
+ // is possible (and normal) for another thread to do a fastpath
|
||
+ // monitor enter-exit while this thread is still trying to get
|
||
+ // to the reenter portion of the protocol.
|
||
+ //
|
||
+ // The ObjectMonitor was notified and the current thread is
|
||
+ // the successor which also means that an unpark() has already
|
||
+ // been done. The JVMTI_EVENT_MONITOR_WAITED event handler can
|
||
+ // consume the unpark() that was done when the successor was
|
||
+ // set because the same ParkEvent is shared between Java
|
||
+ // monitors and JVM/TI RawMonitors (for now).
|
||
+ //
|
||
+ // We redo the unpark() to ensure forward progress, i.e., we
|
||
+ // don't want all pending threads hanging (parked) with none
|
||
+ // entering the unlocked monitor.
|
||
+ node._event->unpark();
|
||
+ }
|
||
+
|
||
if (event.should_commit()) {
|
||
post_monitor_wait_event(&event, node._notifier_tid, millis, ret == OS_TIMEOUT);
|
||
}
|
||
--- ./hotspot/src/share/vm/runtime/safepoint.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/runtime/safepoint.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -545,7 +545,7 @@
|
||
|
||
// rotate log files?
|
||
if (UseGCLogFileRotation) {
|
||
- gclog_or_tty->rotate_log();
|
||
+ gclog_or_tty->rotate_log(false);
|
||
}
|
||
|
||
if (MemTracker::is_on()) {
|
||
--- ./hotspot/src/share/vm/runtime/vmStructs.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/runtime/vmStructs.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -706,6 +706,7 @@
|
||
static_field(SystemDictionary, WK_KLASS(WeakReference_klass), klassOop) \
|
||
static_field(SystemDictionary, WK_KLASS(FinalReference_klass), klassOop) \
|
||
static_field(SystemDictionary, WK_KLASS(PhantomReference_klass), klassOop) \
|
||
+ static_field(SystemDictionary, WK_KLASS(Cleaner_klass), klassOop) \
|
||
static_field(SystemDictionary, WK_KLASS(Finalizer_klass), klassOop) \
|
||
static_field(SystemDictionary, WK_KLASS(Thread_klass), klassOop) \
|
||
static_field(SystemDictionary, WK_KLASS(ThreadGroup_klass), klassOop) \
|
||
--- ./hotspot/src/share/vm/runtime/vmThread.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/runtime/vmThread.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -327,6 +327,9 @@
|
||
_terminate_lock->notify();
|
||
}
|
||
|
||
+ // Thread destructor usually does this.
|
||
+ ThreadLocalStorage::set_thread(NULL);
|
||
+
|
||
// Deletion must be done synchronously by the JNI DestroyJavaVM thread
|
||
// so that the VMThread deletion completes before the main thread frees
|
||
// up the CodeHeap.
|
||
--- ./hotspot/src/share/vm/runtime/vm_operations.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/runtime/vm_operations.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -96,6 +96,7 @@
|
||
template(JFRCheckpoint) \
|
||
template(Exit) \
|
||
template(LinuxDllLoad) \
|
||
+ template(RotateGCLog) \
|
||
|
||
class VM_Operation: public CHeapObj<mtInternal> {
|
||
public:
|
||
@@ -409,4 +410,15 @@
|
||
void doit();
|
||
};
|
||
|
||
+
|
||
+class VM_RotateGCLog: public VM_Operation {
|
||
+ private:
|
||
+ outputStream* _out;
|
||
+
|
||
+ public:
|
||
+ VM_RotateGCLog(outputStream* st) : _out(st) {}
|
||
+ VMOp_Type type() const { return VMOp_RotateGCLog; }
|
||
+ void doit() { gclog_or_tty->rotate_log(true, _out); }
|
||
+};
|
||
+
|
||
#endif // SHARE_VM_RUNTIME_VM_OPERATIONS_HPP
|
||
--- ./hotspot/src/share/vm/services/diagnosticCommand.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/services/diagnosticCommand.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -51,7 +51,7 @@
|
||
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JMXStartRemoteDCmd>(true,false));
|
||
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JMXStartLocalDCmd>(true,false));
|
||
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JMXStopRemoteDCmd>(true,false));
|
||
-
|
||
+ DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<RotateGCLogDCmd>(true, false));
|
||
}
|
||
|
||
#ifndef HAVE_EXTRA_DCMD
|
||
@@ -565,3 +565,11 @@
|
||
JavaCalls::call_static(&result, ik, vmSymbols::stopRemoteAgent_name(), vmSymbols::void_method_signature(), CHECK);
|
||
}
|
||
|
||
+void RotateGCLogDCmd::execute(TRAPS) {
|
||
+ if (UseGCLogFileRotation) {
|
||
+ VM_RotateGCLog rotateop(output());
|
||
+ VMThread::execute(&rotateop);
|
||
+ } else {
|
||
+ output()->print_cr("Target VM does not support GC log file rotation.");
|
||
+ }
|
||
+}
|
||
--- ./hotspot/src/share/vm/services/diagnosticCommand.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/services/diagnosticCommand.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2011, 2014, 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
|
||
@@ -302,4 +302,14 @@
|
||
virtual void execute(TRAPS);
|
||
};
|
||
|
||
+class RotateGCLogDCmd : public DCmd {
|
||
+public:
|
||
+ RotateGCLogDCmd(outputStream* output, bool heap) : DCmd(output, heap) {}
|
||
+ static const char* name() { return "GC.rotate_log"; }
|
||
+ static const char* description() {
|
||
+ return "Force the GC log file to be rotated.";
|
||
+ }
|
||
+ virtual void execute(TRAPS);
|
||
+};
|
||
+
|
||
#endif // SHARE_VM_SERVICES_DIAGNOSTICCOMMAND_HPP
|
||
--- ./hotspot/src/share/vm/services/heapDumper.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/services/heapDumper.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -720,7 +720,7 @@
|
||
|
||
// reflection and sun.misc.Unsafe classes may have a reference to a
|
||
// klassOop so filter it out.
|
||
- if (o != NULL && o->is_klass()) {
|
||
+ if (o != NULL && o->is_perm() && o->is_klass()) {
|
||
o = NULL;
|
||
}
|
||
|
||
--- ./hotspot/src/share/vm/utilities/defaultStream.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/utilities/defaultStream.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -41,6 +41,8 @@
|
||
|
||
void init();
|
||
void init_log();
|
||
+ fileStream* open_file(const char* log_name);
|
||
+ void start_log();
|
||
void finish_log();
|
||
void finish_log_on_error(char *buf, int buflen);
|
||
public:
|
||
--- ./hotspot/src/share/vm/utilities/ostream.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/utilities/ostream.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -341,7 +341,7 @@
|
||
}
|
||
|
||
char* stringStream::as_string() {
|
||
- char* copy = NEW_RESOURCE_ARRAY(char, buffer_pos+1);
|
||
+ char* copy = NEW_RESOURCE_ARRAY(char, buffer_pos + 1);
|
||
strncpy(copy, buffer, buffer_pos);
|
||
copy[buffer_pos] = 0; // terminating null
|
||
return copy;
|
||
@@ -354,14 +354,148 @@
|
||
outputStream* gclog_or_tty;
|
||
extern Mutex* tty_lock;
|
||
|
||
+#define EXTRACHARLEN 32
|
||
+#define CURRENTAPPX ".current"
|
||
+#define FILENAMEBUFLEN 1024
|
||
+// convert YYYY-MM-DD HH:MM:SS to YYYY-MM-DD_HH-MM-SS
|
||
+char* get_datetime_string(char *buf, size_t len) {
|
||
+ os::local_time_string(buf, len);
|
||
+ int i = (int)strlen(buf);
|
||
+ while (i-- >= 0) {
|
||
+ if (buf[i] == ' ') buf[i] = '_';
|
||
+ else if (buf[i] == ':') buf[i] = '-';
|
||
+ }
|
||
+ return buf;
|
||
+}
|
||
+
|
||
+static const char* make_log_name_internal(const char* log_name, const char* force_directory,
|
||
+ int pid, const char* tms) {
|
||
+ const char* basename = log_name;
|
||
+ char file_sep = os::file_separator()[0];
|
||
+ const char* cp;
|
||
+ char pid_text[32];
|
||
+
|
||
+ for (cp = log_name; *cp != '\0'; cp++) {
|
||
+ if (*cp == '/' || *cp == file_sep) {
|
||
+ basename = cp + 1;
|
||
+ }
|
||
+ }
|
||
+ const char* nametail = log_name;
|
||
+ // Compute buffer length
|
||
+ size_t buffer_length;
|
||
+ if (force_directory != NULL) {
|
||
+ buffer_length = strlen(force_directory) + strlen(os::file_separator()) +
|
||
+ strlen(basename) + 1;
|
||
+ } else {
|
||
+ buffer_length = strlen(log_name) + 1;
|
||
+ }
|
||
+
|
||
+ // const char* star = strchr(basename, '*');
|
||
+ const char* pts = strstr(basename, "%p");
|
||
+ int pid_pos = (pts == NULL) ? -1 : (pts - nametail);
|
||
+
|
||
+ if (pid_pos >= 0) {
|
||
+ jio_snprintf(pid_text, sizeof(pid_text), "pid%u", pid);
|
||
+ buffer_length += strlen(pid_text);
|
||
+ }
|
||
+
|
||
+ pts = strstr(basename, "%t");
|
||
+ int tms_pos = (pts == NULL) ? -1 : (pts - nametail);
|
||
+ if (tms_pos >= 0) {
|
||
+ buffer_length += strlen(tms);
|
||
+ }
|
||
+
|
||
+ // File name is too long.
|
||
+ if (buffer_length > JVM_MAXPATHLEN) {
|
||
+ return NULL;
|
||
+ }
|
||
+
|
||
+ // Create big enough buffer.
|
||
+ char *buf = NEW_C_HEAP_ARRAY(char, buffer_length, mtInternal);
|
||
+
|
||
+ strcpy(buf, "");
|
||
+ if (force_directory != NULL) {
|
||
+ strcat(buf, force_directory);
|
||
+ strcat(buf, os::file_separator());
|
||
+ nametail = basename; // completely skip directory prefix
|
||
+ }
|
||
+
|
||
+ // who is first, %p or %t?
|
||
+ int first = -1, second = -1;
|
||
+ const char *p1st = NULL;
|
||
+ const char *p2nd = NULL;
|
||
+
|
||
+ if (pid_pos >= 0 && tms_pos >= 0) {
|
||
+ // contains both %p and %t
|
||
+ if (pid_pos < tms_pos) {
|
||
+ // case foo%pbar%tmonkey.log
|
||
+ first = pid_pos;
|
||
+ p1st = pid_text;
|
||
+ second = tms_pos;
|
||
+ p2nd = tms;
|
||
+ } else {
|
||
+ // case foo%tbar%pmonkey.log
|
||
+ first = tms_pos;
|
||
+ p1st = tms;
|
||
+ second = pid_pos;
|
||
+ p2nd = pid_text;
|
||
+ }
|
||
+ } else if (pid_pos >= 0) {
|
||
+ // contains %p only
|
||
+ first = pid_pos;
|
||
+ p1st = pid_text;
|
||
+ } else if (tms_pos >= 0) {
|
||
+ // contains %t only
|
||
+ first = tms_pos;
|
||
+ p1st = tms;
|
||
+ }
|
||
+
|
||
+ int buf_pos = (int)strlen(buf);
|
||
+ const char* tail = nametail;
|
||
+
|
||
+ if (first >= 0) {
|
||
+ tail = nametail + first + 2;
|
||
+ strncpy(&buf[buf_pos], nametail, first);
|
||
+ strcpy(&buf[buf_pos + first], p1st);
|
||
+ buf_pos = (int)strlen(buf);
|
||
+ if (second >= 0) {
|
||
+ strncpy(&buf[buf_pos], tail, second - first - 2);
|
||
+ strcpy(&buf[buf_pos + second - first - 2], p2nd);
|
||
+ tail = nametail + second + 2;
|
||
+ }
|
||
+ }
|
||
+ strcat(buf, tail); // append rest of name, or all of name
|
||
+ return buf;
|
||
+}
|
||
+
|
||
+// log_name comes from -XX:LogFile=log_name or -Xloggc:log_name
|
||
+// in log_name, %p => pipd1234 and
|
||
+// %t => YYYY-MM-DD_HH-MM-SS
|
||
+static const char* make_log_name(const char* log_name, const char* force_directory) {
|
||
+ char timestr[32];
|
||
+ get_datetime_string(timestr, sizeof(timestr));
|
||
+ return make_log_name_internal(log_name, force_directory, os::current_process_id(),
|
||
+ timestr);
|
||
+}
|
||
+
|
||
fileStream::fileStream(const char* file_name) {
|
||
_file = fopen(file_name, "w");
|
||
- _need_close = true;
|
||
+ if (_file != NULL) {
|
||
+ _need_close = true;
|
||
+ } else {
|
||
+ warning("Cannot open file %s due to %s\n", file_name, strerror(errno));
|
||
+ _need_close = false;
|
||
+ }
|
||
}
|
||
|
||
fileStream::fileStream(const char* file_name, const char* opentype) {
|
||
_file = fopen(file_name, opentype);
|
||
- _need_close = true;
|
||
+ if (_file != NULL) {
|
||
+ _need_close = true;
|
||
+ } else {
|
||
+ warning("Cannot open file %s due to %s\n", file_name, strerror(errno));
|
||
+ _need_close = false;
|
||
+ }
|
||
}
|
||
|
||
void fileStream::write(const char* s, size_t len) {
|
||
@@ -422,34 +556,51 @@
|
||
update_position(s, len);
|
||
}
|
||
|
||
-rotatingFileStream::~rotatingFileStream() {
|
||
+// dump vm version, os version, platform info, build id,
|
||
+// memory usage and command line flags into header
|
||
+void gcLogFileStream::dump_loggc_header() {
|
||
+ if (is_open()) {
|
||
+ print_cr(Abstract_VM_Version::internal_vm_info_string());
|
||
+ os::print_memory_info(this);
|
||
+ print("CommandLine flags: ");
|
||
+ CommandLineFlags::printSetFlags(this);
|
||
+ }
|
||
+}
|
||
+
|
||
+gcLogFileStream::~gcLogFileStream() {
|
||
if (_file != NULL) {
|
||
if (_need_close) fclose(_file);
|
||
- _file = NULL;
|
||
+ _file = NULL;
|
||
+ }
|
||
+ if (_file_name != NULL) {
|
||
FREE_C_HEAP_ARRAY(char, _file_name, mtInternal);
|
||
_file_name = NULL;
|
||
}
|
||
}
|
||
|
||
-rotatingFileStream::rotatingFileStream(const char* file_name) {
|
||
+gcLogFileStream::gcLogFileStream(const char* file_name) {
|
||
_cur_file_num = 0;
|
||
_bytes_written = 0L;
|
||
- _file_name = NEW_C_HEAP_ARRAY(char, strlen(file_name)+10, mtInternal);
|
||
- jio_snprintf(_file_name, strlen(file_name)+10, "%s.%d", file_name, _cur_file_num);
|
||
- _file = fopen(_file_name, "w");
|
||
- _need_close = true;
|
||
+ _file_name = make_log_name(file_name, NULL);
|
||
+
|
||
+ // gc log file rotation
|
||
+ if (UseGCLogFileRotation && NumberOfGCLogFiles > 1) {
|
||
+ char tempbuf[FILENAMEBUFLEN];
|
||
+ jio_snprintf(tempbuf, sizeof(tempbuf), "%s.%d" CURRENTAPPX, _file_name, _cur_file_num);
|
||
+ _file = fopen(tempbuf, "w");
|
||
+ } else {
|
||
+ _file = fopen(_file_name, "w");
|
||
+ }
|
||
+ if (_file != NULL) {
|
||
+ _need_close = true;
|
||
+ dump_loggc_header();
|
||
+ } else {
|
||
+ warning("Cannot open file %s due to %s\n", _file_name, strerror(errno));
|
||
+ _need_close = false;
|
||
+ }
|
||
}
|
||
|
||
-rotatingFileStream::rotatingFileStream(const char* file_name, const char* opentype) {
|
||
- _cur_file_num = 0;
|
||
- _bytes_written = 0L;
|
||
- _file_name = NEW_C_HEAP_ARRAY(char, strlen(file_name)+10, mtInternal);
|
||
- jio_snprintf(_file_name, strlen(file_name)+10, "%s.%d", file_name, _cur_file_num);
|
||
- _file = fopen(_file_name, opentype);
|
||
- _need_close = true;
|
||
-}
|
||
-
|
||
-void rotatingFileStream::write(const char* s, size_t len) {
|
||
+void gcLogFileStream::write(const char* s, size_t len) {
|
||
if (_file != NULL) {
|
||
size_t count = fwrite(s, 1, len, _file);
|
||
_bytes_written += count;
|
||
@@ -465,8 +616,13 @@
|
||
// write to gc log file at safepoint. If in future, changes made for mutator threads or
|
||
// concurrent GC threads to run parallel with VMThread at safepoint, write and rotate_log
|
||
// must be synchronized.
|
||
-void rotatingFileStream::rotate_log() {
|
||
- if (_bytes_written < (jlong)GCLogFileSize) {
|
||
+void gcLogFileStream::rotate_log(bool force, outputStream* out) {
|
||
+ char time_msg[FILENAMEBUFLEN];
|
||
+ char time_str[EXTRACHARLEN];
|
||
+ char current_file_name[FILENAMEBUFLEN];
|
||
+ char renamed_file_name[FILENAMEBUFLEN];
|
||
+
|
||
+ if (!should_rotate(force)) {
|
||
return;
|
||
}
|
||
|
||
@@ -480,27 +636,105 @@
|
||
// rotate in same file
|
||
rewind();
|
||
_bytes_written = 0L;
|
||
+ jio_snprintf(time_msg, sizeof(time_msg), "File %s rotated at %s\n",
|
||
+ _file_name, os::local_time_string((char *)time_str, sizeof(time_str)));
|
||
+ write(time_msg, strlen(time_msg));
|
||
+
|
||
+ if (out != NULL) {
|
||
+ out->print(time_msg);
|
||
+ }
|
||
+
|
||
+ dump_loggc_header();
|
||
return;
|
||
}
|
||
|
||
- // rotate file in names file.0, file.1, file.2, ..., file.<MaxGCLogFileNumbers-1>
|
||
- // close current file, rotate to next file
|
||
+#if defined(_WINDOWS)
|
||
+#ifndef F_OK
|
||
+#define F_OK 0
|
||
+#endif
|
||
+#endif // _WINDOWS
|
||
+
|
||
+ // rotate file in names extended_filename.0, extended_filename.1, ...,
|
||
+ // extended_filename.<NumberOfGCLogFiles - 1>. Current rotation file name will
|
||
+ // have a form of extended_filename.<i>.current where i is the current rotation
|
||
+ // file number. After it reaches max file size, the file will be saved and renamed
|
||
+ // with .current removed from its tail.
|
||
+ size_t filename_len = strlen(_file_name);
|
||
if (_file != NULL) {
|
||
- _cur_file_num ++;
|
||
- if (_cur_file_num >= NumberOfGCLogFiles) _cur_file_num = 0;
|
||
- jio_snprintf(_file_name, strlen(Arguments::gc_log_filename()) + 10, "%s.%d",
|
||
- Arguments::gc_log_filename(), _cur_file_num);
|
||
+ jio_snprintf(renamed_file_name, filename_len + EXTRACHARLEN, "%s.%d",
|
||
+ _file_name, _cur_file_num);
|
||
+ jio_snprintf(current_file_name, filename_len + EXTRACHARLEN, "%s.%d" CURRENTAPPX,
|
||
+ _file_name, _cur_file_num);
|
||
+
|
||
+ const char* msg = force ? "GC log rotation request has been received."
|
||
+ : "GC log file has reached the maximum size.";
|
||
+ jio_snprintf(time_msg, sizeof(time_msg), "%s %s Saved as %s\n",
|
||
+ os::local_time_string((char *)time_str, sizeof(time_str)),
|
||
+ msg, renamed_file_name);
|
||
+ write(time_msg, strlen(time_msg));
|
||
+
|
||
+ if (out != NULL) {
|
||
+ out->print(time_msg);
|
||
+ }
|
||
+
|
||
fclose(_file);
|
||
_file = NULL;
|
||
+
|
||
+ bool can_rename = true;
|
||
+ if (access(current_file_name, F_OK) != 0) {
|
||
+ // current file does not exist?
|
||
+ warning("No source file exists, cannot rename\n");
|
||
+ can_rename = false;
|
||
+ }
|
||
+ if (can_rename) {
|
||
+ if (access(renamed_file_name, F_OK) == 0) {
|
||
+ if (remove(renamed_file_name) != 0) {
|
||
+ warning("Could not delete existing file %s\n", renamed_file_name);
|
||
+ can_rename = false;
|
||
+ }
|
||
+ } else {
|
||
+ // file does not exist, ok to rename
|
||
+ }
|
||
+ }
|
||
+ if (can_rename && rename(current_file_name, renamed_file_name) != 0) {
|
||
+ warning("Could not rename %s to %s\n", _file_name, renamed_file_name);
|
||
+ }
|
||
}
|
||
- _file = fopen(_file_name, "w");
|
||
+
|
||
+ _cur_file_num++;
|
||
+ if (_cur_file_num > NumberOfGCLogFiles - 1) _cur_file_num = 0;
|
||
+ jio_snprintf(current_file_name, filename_len + EXTRACHARLEN, "%s.%d" CURRENTAPPX,
|
||
+ _file_name, _cur_file_num);
|
||
+ _file = fopen(current_file_name, "w");
|
||
+
|
||
if (_file != NULL) {
|
||
_bytes_written = 0L;
|
||
_need_close = true;
|
||
+ // reuse current_file_name for time_msg
|
||
+ jio_snprintf(current_file_name, filename_len + EXTRACHARLEN,
|
||
+ "%s.%d", _file_name, _cur_file_num);
|
||
+ jio_snprintf(time_msg, sizeof(time_msg), "%s GC log file created %s\n",
|
||
+ os::local_time_string((char *)time_str, sizeof(time_str)),
|
||
+ current_file_name);
|
||
+ write(time_msg, strlen(time_msg));
|
||
+
|
||
+ if (out != NULL) {
|
||
+ out->print(time_msg);
|
||
+ }
|
||
+
|
||
+ dump_loggc_header();
|
||
+ // remove the existing file
|
||
+ if (access(current_file_name, F_OK) == 0) {
|
||
+ if (remove(current_file_name) != 0) {
|
||
+ warning("Could not delete existing file %s\n", current_file_name);
|
||
+ }
|
||
+ }
|
||
} else {
|
||
- tty->print_cr("failed to open rotation log file %s due to %s\n",
|
||
+ warning("failed to open rotation log file %s due to %s\n"
|
||
+ "Turned off GC log file rotation\n",
|
||
_file_name, strerror(errno));
|
||
_need_close = false;
|
||
+ FLAG_SET_DEFAULT(UseGCLogFileRotation, false);
|
||
}
|
||
}
|
||
|
||
@@ -529,147 +763,55 @@
|
||
return _log_file != NULL;
|
||
}
|
||
|
||
-static const char* make_log_name(const char* log_name, const char* force_directory) {
|
||
- const char* basename = log_name;
|
||
- char file_sep = os::file_separator()[0];
|
||
- const char* cp;
|
||
- for (cp = log_name; *cp != '\0'; cp++) {
|
||
- if (*cp == '/' || *cp == file_sep) {
|
||
- basename = cp+1;
|
||
- }
|
||
- }
|
||
- const char* nametail = log_name;
|
||
-
|
||
- // Compute buffer length
|
||
- size_t buffer_length;
|
||
- if (force_directory != NULL) {
|
||
- buffer_length = strlen(force_directory) + strlen(os::file_separator()) +
|
||
- strlen(basename) + 1;
|
||
- } else {
|
||
- buffer_length = strlen(log_name) + 1;
|
||
+fileStream* defaultStream::open_file(const char* log_name) {
|
||
+ const char* try_name = make_log_name(log_name, NULL);
|
||
+ if (try_name == NULL) {
|
||
+ warning("Cannot open file %s: file name is too long.\n", log_name);
|
||
+ return NULL;
|
||
}
|
||
|
||
- const char* star = strchr(basename, '*');
|
||
- int star_pos = (star == NULL) ? -1 : (star - nametail);
|
||
- int skip = 1;
|
||
- if (star == NULL) {
|
||
- // Try %p
|
||
- star = strstr(basename, "%p");
|
||
- if (star != NULL) {
|
||
- skip = 2;
|
||
- }
|
||
- }
|
||
- star_pos = (star == NULL) ? -1 : (star - nametail);
|
||
-
|
||
- char pid[32];
|
||
- if (star_pos >= 0) {
|
||
- jio_snprintf(pid, sizeof(pid), "%u", os::current_process_id());
|
||
- buffer_length += strlen(pid);
|
||
+ fileStream* file = new(ResourceObj::C_HEAP, mtInternal) fileStream(try_name);
|
||
+ FREE_C_HEAP_ARRAY(char, try_name, mtInternal);
|
||
+ if (file->is_open()) {
|
||
+ return file;
|
||
}
|
||
|
||
- // Create big enough buffer.
|
||
- char *buf = NEW_C_HEAP_ARRAY(char, buffer_length, mtInternal);
|
||
-
|
||
- strcpy(buf, "");
|
||
- if (force_directory != NULL) {
|
||
- strcat(buf, force_directory);
|
||
- strcat(buf, os::file_separator());
|
||
- nametail = basename; // completely skip directory prefix
|
||
+ // Try again to open the file in the temp directory.
|
||
+ delete file;
|
||
+ char warnbuf[O_BUFLEN*2];
|
||
+ jio_snprintf(warnbuf, sizeof(warnbuf), "Warning: Cannot open log file: %s\n", log_name);
|
||
+ // Note: This feature is for maintainer use only. No need for L10N.
|
||
+ jio_print(warnbuf);
|
||
+ try_name = make_log_name(log_name, os::get_temp_directory());
|
||
+ if (try_name == NULL) {
|
||
+ warning("Cannot open file %s: file name is too long for directory %s.\n", log_name, os::get_temp_directory());
|
||
+ return NULL;
|
||
}
|
||
|
||
- if (star_pos >= 0) {
|
||
- // convert foo*bar.log or foo%pbar.log to foo123bar.log
|
||
- int buf_pos = (int) strlen(buf);
|
||
- strncpy(&buf[buf_pos], nametail, star_pos);
|
||
- strcpy(&buf[buf_pos + star_pos], pid);
|
||
- nametail += star_pos + skip; // skip prefix and pid format
|
||
+ jio_snprintf(warnbuf, sizeof(warnbuf),
|
||
+ "Warning: Forcing option -XX:LogFile=%s\n", try_name);
|
||
+ jio_print(warnbuf);
|
||
+
|
||
+ file = new(ResourceObj::C_HEAP, mtInternal) fileStream(try_name);
|
||
+ FREE_C_HEAP_ARRAY(char, try_name, mtInternal);
|
||
+ if (file->is_open()) {
|
||
+ return file;
|
||
}
|
||
|
||
- strcat(buf, nametail); // append rest of name, or all of name
|
||
- return buf;
|
||
+ delete file;
|
||
+ return NULL;
|
||
}
|
||
|
||
void defaultStream::init_log() {
|
||
// %%% Need a MutexLocker?
|
||
const char* log_name = LogFile != NULL ? LogFile : "hotspot.log";
|
||
- const char* try_name = make_log_name(log_name, NULL);
|
||
- fileStream* file = new(ResourceObj::C_HEAP, mtInternal) fileStream(try_name);
|
||
- if (!file->is_open()) {
|
||
- // Try again to open the file.
|
||
- char warnbuf[O_BUFLEN*2];
|
||
- jio_snprintf(warnbuf, sizeof(warnbuf),
|
||
- "Warning: Cannot open log file: %s\n", try_name);
|
||
- // Note: This feature is for maintainer use only. No need for L10N.
|
||
- jio_print(warnbuf);
|
||
- FREE_C_HEAP_ARRAY(char, try_name, mtInternal);
|
||
- try_name = make_log_name("hs_pid%p.log", os::get_temp_directory());
|
||
- jio_snprintf(warnbuf, sizeof(warnbuf),
|
||
- "Warning: Forcing option -XX:LogFile=%s\n", try_name);
|
||
- jio_print(warnbuf);
|
||
- delete file;
|
||
- file = new(ResourceObj::C_HEAP, mtInternal) fileStream(try_name);
|
||
- FREE_C_HEAP_ARRAY(char, try_name, mtInternal);
|
||
- }
|
||
- if (file->is_open()) {
|
||
+ fileStream* file = open_file(log_name);
|
||
+
|
||
+ if (file != NULL) {
|
||
_log_file = file;
|
||
- xmlStream* xs = new(ResourceObj::C_HEAP, mtInternal) xmlStream(file);
|
||
- _outer_xmlStream = xs;
|
||
- if (this == tty) xtty = xs;
|
||
- // Write XML header.
|
||
- xs->print_cr("<?xml version='1.0' encoding='UTF-8'?>");
|
||
- // (For now, don't bother to issue a DTD for this private format.)
|
||
- jlong time_ms = os::javaTimeMillis() - tty->time_stamp().milliseconds();
|
||
- // %%% Should be: jlong time_ms = os::start_time_milliseconds(), if
|
||
- // we ever get round to introduce that method on the os class
|
||
- xs->head("hotspot_log version='%d %d'"
|
||
- " process='%d' time_ms='"INT64_FORMAT"'",
|
||
- LOG_MAJOR_VERSION, LOG_MINOR_VERSION,
|
||
- os::current_process_id(), time_ms);
|
||
- // Write VM version header immediately.
|
||
- xs->head("vm_version");
|
||
- xs->head("name"); xs->text("%s", VM_Version::vm_name()); xs->cr();
|
||
- xs->tail("name");
|
||
- xs->head("release"); xs->text("%s", VM_Version::vm_release()); xs->cr();
|
||
- xs->tail("release");
|
||
- xs->head("info"); xs->text("%s", VM_Version::internal_vm_info_string()); xs->cr();
|
||
- xs->tail("info");
|
||
- xs->tail("vm_version");
|
||
- // Record information about the command-line invocation.
|
||
- xs->head("vm_arguments"); // Cf. Arguments::print_on()
|
||
- if (Arguments::num_jvm_flags() > 0) {
|
||
- xs->head("flags");
|
||
- Arguments::print_jvm_flags_on(xs->text());
|
||
- xs->tail("flags");
|
||
- }
|
||
- if (Arguments::num_jvm_args() > 0) {
|
||
- xs->head("args");
|
||
- Arguments::print_jvm_args_on(xs->text());
|
||
- xs->tail("args");
|
||
- }
|
||
- if (Arguments::java_command() != NULL) {
|
||
- xs->head("command"); xs->text()->print_cr("%s", Arguments::java_command());
|
||
- xs->tail("command");
|
||
- }
|
||
- if (Arguments::sun_java_launcher() != NULL) {
|
||
- xs->head("launcher"); xs->text()->print_cr("%s", Arguments::sun_java_launcher());
|
||
- xs->tail("launcher");
|
||
- }
|
||
- if (Arguments::system_properties() != NULL) {
|
||
- xs->head("properties");
|
||
- // Print it as a java-style property list.
|
||
- // System properties don't generally contain newlines, so don't bother with unparsing.
|
||
- for (SystemProperty* p = Arguments::system_properties(); p != NULL; p = p->next()) {
|
||
- xs->text()->print_cr("%s=%s", p->key(), p->value());
|
||
- }
|
||
- xs->tail("properties");
|
||
- }
|
||
- xs->tail("vm_arguments");
|
||
- // tty output per se is grouped under the <tty>...</tty> element.
|
||
- xs->head("tty");
|
||
- // All further non-markup text gets copied to the tty:
|
||
- xs->_text = this; // requires friend declaration!
|
||
+ _outer_xmlStream = new(ResourceObj::C_HEAP, mtInternal) xmlStream(file);
|
||
+ start_log();
|
||
} else {
|
||
- delete(file);
|
||
// and leave xtty as NULL
|
||
LogVMOutput = false;
|
||
DisplayVMOutput = true;
|
||
@@ -677,6 +819,64 @@
|
||
}
|
||
}
|
||
|
||
+void defaultStream::start_log() {
|
||
+ xmlStream* xs = _outer_xmlStream;
|
||
+ if (this == tty) xtty = xs;
|
||
+ // Write XML header.
|
||
+ xs->print_cr("<?xml version='1.0' encoding='UTF-8'?>");
|
||
+ // (For now, don't bother to issue a DTD for this private format.)
|
||
+ jlong time_ms = os::javaTimeMillis() - tty->time_stamp().milliseconds();
|
||
+ // %%% Should be: jlong time_ms = os::start_time_milliseconds(), if
|
||
+ // we ever get round to introduce that method on the os class
|
||
+ xs->head("hotspot_log version='%d %d'"
|
||
+ " process='%d' time_ms='"INT64_FORMAT"'",
|
||
+ LOG_MAJOR_VERSION, LOG_MINOR_VERSION,
|
||
+ os::current_process_id(), time_ms);
|
||
+ // Write VM version header immediately.
|
||
+ xs->head("vm_version");
|
||
+ xs->head("name"); xs->text("%s", VM_Version::vm_name()); xs->cr();
|
||
+ xs->tail("name");
|
||
+ xs->head("release"); xs->text("%s", VM_Version::vm_release()); xs->cr();
|
||
+ xs->tail("release");
|
||
+ xs->head("info"); xs->text("%s", VM_Version::internal_vm_info_string()); xs->cr();
|
||
+ xs->tail("info");
|
||
+ xs->tail("vm_version");
|
||
+ // Record information about the command-line invocation.
|
||
+ xs->head("vm_arguments"); // Cf. Arguments::print_on()
|
||
+ if (Arguments::num_jvm_flags() > 0) {
|
||
+ xs->head("flags");
|
||
+ Arguments::print_jvm_flags_on(xs->text());
|
||
+ xs->tail("flags");
|
||
+ }
|
||
+ if (Arguments::num_jvm_args() > 0) {
|
||
+ xs->head("args");
|
||
+ Arguments::print_jvm_args_on(xs->text());
|
||
+ xs->tail("args");
|
||
+ }
|
||
+ if (Arguments::java_command() != NULL) {
|
||
+ xs->head("command"); xs->text()->print_cr("%s", Arguments::java_command());
|
||
+ xs->tail("command");
|
||
+ }
|
||
+ if (Arguments::sun_java_launcher() != NULL) {
|
||
+ xs->head("launcher"); xs->text()->print_cr("%s", Arguments::sun_java_launcher());
|
||
+ xs->tail("launcher");
|
||
+ }
|
||
+ if (Arguments::system_properties() != NULL) {
|
||
+ xs->head("properties");
|
||
+ // Print it as a java-style property list.
|
||
+ // System properties don't generally contain newlines, so don't bother with unparsing.
|
||
+ for (SystemProperty* p = Arguments::system_properties(); p != NULL; p = p->next()) {
|
||
+ xs->text()->print_cr("%s=%s", p->key(), p->value());
|
||
+ }
|
||
+ xs->tail("properties");
|
||
+ }
|
||
+ xs->tail("vm_arguments");
|
||
+ // tty output per se is grouped under the <tty>...</tty> element.
|
||
+ xs->head("tty");
|
||
+ // All further non-markup text gets copied to the tty:
|
||
+ xs->_text = this; // requires friend declaration!
|
||
+}
|
||
+
|
||
// finish_log() is called during normal VM shutdown. finish_log_on_error() is
|
||
// called by ostream_abort() after a fatal error.
|
||
//
|
||
@@ -876,11 +1076,8 @@
|
||
|
||
gclog_or_tty = tty; // default to tty
|
||
if (Arguments::gc_log_filename() != NULL) {
|
||
- fileStream * gclog = UseGCLogFileRotation ?
|
||
- new(ResourceObj::C_HEAP, mtInternal)
|
||
- rotatingFileStream(Arguments::gc_log_filename()) :
|
||
- new(ResourceObj::C_HEAP, mtInternal)
|
||
- fileStream(Arguments::gc_log_filename());
|
||
+ fileStream * gclog = new(ResourceObj::C_HEAP, mtInternal)
|
||
+ gcLogFileStream(Arguments::gc_log_filename());
|
||
if (gclog->is_open()) {
|
||
// now we update the time stamp of the GC log to be synced up
|
||
// with tty.
|
||
@@ -1038,6 +1235,50 @@
|
||
}
|
||
|
||
#ifndef PRODUCT
|
||
+void test_loggc_filename() {
|
||
+ const char* o_result;
|
||
+
|
||
+ {
|
||
+ // longest filename
|
||
+ char longest_name[JVM_MAXPATHLEN];
|
||
+ memset(longest_name, 'a', sizeof(longest_name));
|
||
+ longest_name[JVM_MAXPATHLEN - 1] = '\0';
|
||
+ o_result = make_log_name((const char*)&longest_name, NULL);
|
||
+ assert(strcmp(longest_name, o_result) == 0, err_msg("longest name does not match. expected '%s' but got '%s'", longest_name, o_result));
|
||
+ FREE_C_HEAP_ARRAY(char, o_result, mtInternal);
|
||
+ }
|
||
+
|
||
+ {
|
||
+ // too long file name
|
||
+ char too_long_name[JVM_MAXPATHLEN + 100];
|
||
+ int too_long_length = sizeof(too_long_name);
|
||
+ memset(too_long_name, 'a', too_long_length);
|
||
+ too_long_name[too_long_length - 1] = '\0';
|
||
+ o_result = make_log_name((const char*)&too_long_name, NULL);
|
||
+ assert(o_result == NULL, err_msg("Too long file name should return NULL, but got '%s'", o_result));
|
||
+ }
|
||
+
|
||
+ {
|
||
+ // too long with pid
|
||
+ char longest_name[JVM_MAXPATHLEN];
|
||
+ memset(longest_name, 'a', JVM_MAXPATHLEN);
|
||
+ longest_name[JVM_MAXPATHLEN - 3] = '%';
|
||
+ longest_name[JVM_MAXPATHLEN - 2] = 'p';
|
||
+ longest_name[JVM_MAXPATHLEN - 1] = '\0';
|
||
+ o_result = make_log_name((const char*)&longest_name, NULL);
|
||
+ assert(o_result == NULL, err_msg("Too long file name after %%p pid expansion should return NULL, but got '%s'", o_result));
|
||
+ }
|
||
+
|
||
+ {
|
||
+ // too long with pid (star)
|
||
+ char longest_name[JVM_MAXPATHLEN];
|
||
+ memset(longest_name, 'a', JVM_MAXPATHLEN);
|
||
+ longest_name[JVM_MAXPATHLEN - 2] = '*';
|
||
+ longest_name[JVM_MAXPATHLEN - 1] = '\0';
|
||
+ o_result = make_log_name((const char*)&longest_name, NULL);
|
||
+ assert(o_result == NULL, err_msg("Too long file name after star (pid) expansion should return NULL, but got '%s'", o_result));
|
||
+ }
|
||
+}
|
||
|
||
#if defined(SOLARIS) || defined(LINUX) || defined(_ALLBSD_SOURCE)
|
||
#include <sys/types.h>
|
||
--- ./hotspot/src/share/vm/utilities/ostream.hpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/utilities/ostream.hpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -113,7 +113,7 @@
|
||
// flushing
|
||
virtual void flush() {}
|
||
virtual void write(const char* str, size_t len) = 0;
|
||
- virtual void rotate_log() {} // GC log rotation
|
||
+ virtual void rotate_log(bool force, outputStream* out = NULL) {} // GC log rotation
|
||
virtual ~outputStream() {} // close properly on deletion
|
||
|
||
void dec_cr() { dec(); cr(); }
|
||
@@ -228,20 +228,31 @@
|
||
void flush() {};
|
||
};
|
||
|
||
-class rotatingFileStream : public fileStream {
|
||
+class gcLogFileStream : public fileStream {
|
||
protected:
|
||
- char* _file_name;
|
||
+ const char* _file_name;
|
||
jlong _bytes_written;
|
||
- uintx _cur_file_num; // current logfile rotation number, from 0 to MaxGCLogFileNumbers-1
|
||
+ uintx _cur_file_num; // current logfile rotation number, from 0 to NumberOfGCLogFiles-1
|
||
public:
|
||
- rotatingFileStream(const char* file_name);
|
||
- rotatingFileStream(const char* file_name, const char* opentype);
|
||
- rotatingFileStream(FILE* file) : fileStream(file) {}
|
||
- ~rotatingFileStream();
|
||
+ gcLogFileStream(const char* file_name);
|
||
+ ~gcLogFileStream();
|
||
virtual void write(const char* c, size_t len);
|
||
- virtual void rotate_log();
|
||
+ virtual void rotate_log(bool force, outputStream* out = NULL);
|
||
+ void dump_loggc_header();
|
||
+
|
||
+ /* If "force" sets true, force log file rotation from outside JVM */
|
||
+ bool should_rotate(bool force) {
|
||
+ return force ||
|
||
+ ((GCLogFileSize != 0) && ((uintx)_bytes_written >= GCLogFileSize));
|
||
+ }
|
||
+
|
||
};
|
||
|
||
+#ifndef PRODUCT
|
||
+// unit test for checking -Xloggc:<filename> parsing result
|
||
+void test_loggc_filename();
|
||
+#endif
|
||
+
|
||
void ostream_init();
|
||
void ostream_init_log();
|
||
void ostream_exit();
|
||
--- ./hotspot/src/share/vm/utilities/vmError.cpp Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/src/share/vm/utilities/vmError.cpp Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -22,6 +22,7 @@
|
||
*
|
||
*/
|
||
|
||
+#include <fcntl.h>
|
||
#include "precompiled.hpp"
|
||
#include "compiler/compileBroker.hpp"
|
||
#include "gc_interface/collectedHeap.hpp"
|
||
@@ -924,7 +925,7 @@
|
||
bool copy_ok =
|
||
Arguments::copy_expand_pid(ErrorFile, strlen(ErrorFile), buffer, sizeof(buffer));
|
||
if (copy_ok) {
|
||
- fd = open(buffer, O_RDWR | O_CREAT | O_TRUNC, 0666);
|
||
+ fd = open(buffer, O_RDWR | O_CREAT | O_EXCL, 0666);
|
||
}
|
||
}
|
||
|
||
@@ -935,7 +936,7 @@
|
||
// so use the default name in the current directory
|
||
jio_snprintf(&buffer[len], sizeof(buffer)-len, "%shs_err_pid%u.log",
|
||
os::file_separator(), os::current_process_id());
|
||
- fd = open(buffer, O_RDWR | O_CREAT | O_TRUNC, 0666);
|
||
+ fd = open(buffer, O_RDWR | O_CREAT | O_EXCL, 0666);
|
||
}
|
||
|
||
if (fd == -1) {
|
||
@@ -944,7 +945,7 @@
|
||
if (tmpdir != NULL && tmpdir[0] != '\0') {
|
||
jio_snprintf(buffer, sizeof(buffer), "%s%shs_err_pid%u.log",
|
||
tmpdir, os::file_separator(), os::current_process_id());
|
||
- fd = open(buffer, O_RDWR | O_CREAT | O_TRUNC, 0666);
|
||
+ fd = open(buffer, O_RDWR | O_CREAT | O_EXCL, 0666);
|
||
}
|
||
}
|
||
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./hotspot/test/compiler/EscapeAnalysis/TestAllocatedEscapesPtrComparison.java Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -0,0 +1,107 @@
|
||
+/*
|
||
+ * Copyright 2014 Google, Inc. 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 8043354
|
||
+ * @summary bcEscapeAnalyzer allocated_escapes not conservative enough
|
||
+ * @run main/othervm -XX:CompileOnly=.visitAndPop TestAllocatedEscapesPtrComparison
|
||
+ * @author Chuck Rasbold rasbold@google.com
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * Test always passes with -XX:-OptmimizePtrCompare
|
||
+ */
|
||
+
|
||
+import java.util.ArrayList;
|
||
+import java.util.List;
|
||
+
|
||
+public class TestAllocatedEscapesPtrComparison {
|
||
+
|
||
+ static TestAllocatedEscapesPtrComparison dummy;
|
||
+
|
||
+ class Marker {
|
||
+ }
|
||
+
|
||
+ List<Marker> markerList = new ArrayList<>();
|
||
+
|
||
+ // Suppress compilation of this method, it must be processed
|
||
+ // by the bytecode escape analyzer.
|
||
+
|
||
+ // Make a new marker and put it on the List
|
||
+ Marker getMarker() {
|
||
+ // result escapes through markerList
|
||
+ final Marker result = new Marker();
|
||
+ markerList.add(result);
|
||
+ return result;
|
||
+ }
|
||
+
|
||
+ void visit(int depth) {
|
||
+ // Make a new marker
|
||
+ getMarker();
|
||
+
|
||
+ // Call visitAndPop every once in a while
|
||
+ // Cap the depth of our recursive visits
|
||
+ if (depth % 10 == 2) {
|
||
+ visitAndPop(depth + 1);
|
||
+ } else if (depth < 15) {
|
||
+ visit(depth + 1);
|
||
+ }
|
||
+ }
|
||
+
|
||
+ void visitAndPop(int depth) {
|
||
+ // Random dummy allocation to force EscapeAnalysis to process this method
|
||
+ dummy = new TestAllocatedEscapesPtrComparison();
|
||
+
|
||
+ // Make a new marker
|
||
+ Marker marker = getMarker();
|
||
+
|
||
+ visit(depth + 1);
|
||
+
|
||
+ // Walk and pop the marker list up to the current marker
|
||
+ boolean found = false;
|
||
+ for (int i = markerList.size() - 1; i >= 0; i--) {
|
||
+ Marker removed = markerList.remove(i);
|
||
+
|
||
+ // In the failure, EA mistakenly converts this comparison to false
|
||
+ if (removed == marker) {
|
||
+ found = true;
|
||
+ break;
|
||
+ }
|
||
+ }
|
||
+
|
||
+ if (!found) {
|
||
+ throw new RuntimeException("test fails");
|
||
+ }
|
||
+ }
|
||
+
|
||
+
|
||
+ public static void main(String args[]) {
|
||
+ TestAllocatedEscapesPtrComparison tc = new TestAllocatedEscapesPtrComparison();
|
||
+
|
||
+ // Warmup and run enough times
|
||
+ for (int i = 0; i < 20000; i++) {
|
||
+ tc.visit(0);
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./hotspot/test/compiler/intrinsics/hashcode/TestHashCode.java Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -0,0 +1,73 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 8011646
|
||
+ * @summary SEGV in compiled code with loop predication
|
||
+ * @run main/othervm -XX:-TieredCompilation -XX:CompileOnly=TestHashCode.m1,Object.hashCode TestHashCode
|
||
+ *
|
||
+ */
|
||
+
|
||
+public class TestHashCode {
|
||
+ static class A {
|
||
+ int i;
|
||
+ }
|
||
+
|
||
+ static class B extends A {
|
||
+ }
|
||
+
|
||
+ static boolean crash = false;
|
||
+
|
||
+ static A m2() {
|
||
+ if (crash) {
|
||
+ return null;
|
||
+ }
|
||
+ return new A();
|
||
+ }
|
||
+
|
||
+ static int m1(A aa) {
|
||
+ int res = 0;
|
||
+ for (int i = 0; i < 10; i++) {
|
||
+ A a = m2();
|
||
+ int j = a.i;
|
||
+ if (aa instanceof B) {
|
||
+ }
|
||
+ res += a.hashCode();
|
||
+ }
|
||
+ return res;
|
||
+ }
|
||
+
|
||
+ public static void main(String[] args) {
|
||
+ A a = new A();
|
||
+ for (int i = 0; i < 20000; i++) {
|
||
+ m1(a);
|
||
+ }
|
||
+ crash = true;
|
||
+ try {
|
||
+ m1(a);
|
||
+ } catch (NullPointerException e) {
|
||
+ System.out.println("Test passed");
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./hotspot/test/gc/g1/TestPrintGCDetails.java Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -0,0 +1,57 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test TestPrintGCDetails
|
||
+ * @bug 8010738
|
||
+ * @summary Ensure that the PrintGCDetails for a full GC with G1 includes PermGen size info.
|
||
+ * @key gc
|
||
+ * @key regression
|
||
+ * @library /testlibrary
|
||
+ */
|
||
+
|
||
+import com.oracle.java.testlibrary.ProcessTools;
|
||
+import com.oracle.java.testlibrary.OutputAnalyzer;
|
||
+
|
||
+public class TestPrintGCDetails {
|
||
+ public static void main(String[] args) throws Exception {
|
||
+
|
||
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC",
|
||
+ "-XX:+PrintGCDetails",
|
||
+ SystemGCTest.class.getName());
|
||
+
|
||
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||
+
|
||
+ System.out.println("Output:\n" + output.getOutput());
|
||
+
|
||
+ output.shouldContain("Perm");
|
||
+ output.shouldHaveExitValue(0);
|
||
+ }
|
||
+
|
||
+ static class SystemGCTest {
|
||
+ public static void main(String [] args) {
|
||
+ System.out.println("Calling System.gc()");
|
||
+ System.gc();
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./hotspot/test/gc/heap_inspection/TestG1ConcurrentGCHeapDump.java Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -0,0 +1,108 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test TestG1ConcurrentGCHeapDump
|
||
+ * @bug 8038925
|
||
+ * @summary Checks that a heap dump can be made with G1 when no fullgc
|
||
+ * has been made
|
||
+ * @run main/othervm -Xms512m -Xmx1024m -XX:+ExplicitGCInvokesConcurrent TestG1ConcurrentGCHeapDump
|
||
+ */
|
||
+import java.util.List;
|
||
+import java.util.ArrayList;
|
||
+import java.util.LinkedList;
|
||
+
|
||
+import javax.management.MBeanServer;
|
||
+import java.lang.management.ManagementFactory;
|
||
+import java.lang.management.GarbageCollectorMXBean;
|
||
+
|
||
+import sun.management.ManagementFactoryHelper;
|
||
+import com.sun.management.HotSpotDiagnosticMXBean;
|
||
+import com.sun.management.VMOption;
|
||
+
|
||
+import java.io.IOException;
|
||
+
|
||
+import java.io.File;
|
||
+import java.nio.file.Path;
|
||
+import java.nio.file.Paths;
|
||
+import java.nio.file.Files;
|
||
+
|
||
+public class TestG1ConcurrentGCHeapDump {
|
||
+
|
||
+ private static final String HOTSPOT_BEAN_NAME =
|
||
+ "com.sun.management:type=HotSpotDiagnostic";
|
||
+
|
||
+ private static final String G1_OLD_BEAN_NAME =
|
||
+ "java.lang:type=GarbageCollector,name=G1 Old Generation";
|
||
+
|
||
+ private static MBeanServer server = ManagementFactory.getPlatformMBeanServer();
|
||
+
|
||
+ private static void dumpHeap() throws IOException {
|
||
+ HotSpotDiagnosticMXBean hotspot_bean =
|
||
+ ManagementFactory.newPlatformMXBeanProxy(server,
|
||
+ HOTSPOT_BEAN_NAME, HotSpotDiagnosticMXBean.class);
|
||
+
|
||
+ Path dir = Files.createTempDirectory("JDK-8038925_");
|
||
+ String file = dir + File.separator + "heapdump";
|
||
+ hotspot_bean.dumpHeap(file, false);
|
||
+ Files.delete(Paths.get(file));
|
||
+ Files.delete(dir);
|
||
+ }
|
||
+
|
||
+ private static void verifyNoFullGC() throws IOException {
|
||
+ GarbageCollectorMXBean g1_old_bean =
|
||
+ ManagementFactory.newPlatformMXBeanProxy(server,
|
||
+ G1_OLD_BEAN_NAME, GarbageCollectorMXBean.class);
|
||
+
|
||
+ if (g1_old_bean.getCollectionCount() != 0) {
|
||
+ throw new RuntimeException("A full GC has occured, this test will not work.");
|
||
+ }
|
||
+ }
|
||
+
|
||
+ public static void main(String[] args) throws IOException {
|
||
+ HotSpotDiagnosticMXBean diagnostic = ManagementFactoryHelper.getDiagnosticMXBean();
|
||
+ VMOption option = diagnostic.getVMOption("UseG1GC");
|
||
+ if (option.getValue().equals("false")) {
|
||
+ System.out.println("Skipping this test. It is only a G1 test.");
|
||
+ return;
|
||
+ }
|
||
+
|
||
+ // Create some dead objects
|
||
+ ArrayList<List<Integer>> arraylist = new ArrayList<List<Integer>>();
|
||
+ for (int i = 0; i < 2; i++) {
|
||
+ for (int j = 0; j < 100; j++) {
|
||
+ LinkedList<Integer> li = new LinkedList<Integer>();
|
||
+ arraylist.add(li);
|
||
+ for (int k = 0; k < 10000; k++) {
|
||
+ li.add(k);
|
||
+ }
|
||
+ }
|
||
+ arraylist = new ArrayList<List<Integer>>();
|
||
+ System.gc();
|
||
+ }
|
||
+ // Try to dump heap
|
||
+ dumpHeap();
|
||
+ // Make sure no full GC has happened, since test won't work if that is the case
|
||
+ verifyNoFullGC();
|
||
+ }
|
||
+}
|
||
--- ./hotspot/test/runtime/7051189/Xchecksig.sh Mon Sep 08 12:15:04 2014 -0700
|
||
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
@@ -1,126 +0,0 @@
|
||
-#
|
||
-# Copyright (c) 2011, 2012, 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.
|
||
-#
|
||
-# 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.
|
||
-#
|
||
-
|
||
-
|
||
-# @test Xchecksig.sh
|
||
-# @bug 7051189
|
||
-# @summary Need to suppress info message if -xcheck:jni used with libjsig.so
|
||
-# @run shell Xchecksig.sh
|
||
-#
|
||
-
|
||
-if [ "${TESTSRC}" = "" ]
|
||
-then
|
||
- TESTSRC=${PWD}
|
||
- echo "TESTSRC not set. Using "${TESTSRC}" as default"
|
||
-fi
|
||
-echo "TESTSRC=${TESTSRC}"
|
||
-## Adding common setup Variables for running shell tests.
|
||
-. ${TESTSRC}/../../test_env.sh
|
||
-
|
||
-OS=`uname -s`
|
||
-case "$OS" in
|
||
- Windows_* | CYGWIN_* )
|
||
- printf "Not testing libjsig.so on Windows. PASSED.\n "
|
||
- exit 0
|
||
- ;;
|
||
-esac
|
||
-
|
||
-JAVA=${TESTJAVA}${FS}bin${FS}java
|
||
-
|
||
-# LD_PRELOAD arch needs to match the binary we run, so run the java
|
||
-# 64-bit binary directly if we are testing 64-bit (bin/ARCH/java).
|
||
-# Check if TESTVMOPS contains -d64, but cannot use
|
||
-# java ${TESTVMOPS} to run "java -d64" with LD_PRELOAD.
|
||
-
|
||
-if [ ${OS} -eq "SunOS" ]
|
||
-then
|
||
- printf "SunOS test TESTVMOPTS = ${TESTVMOPTS}"
|
||
- printf ${TESTVMOPTS} | grep d64 > /dev/null
|
||
- if [ $? -eq 0 ]
|
||
- then
|
||
- printf "SunOS 64-bit test\n"
|
||
- BIT_FLAG=-d64
|
||
- fi
|
||
-fi
|
||
-
|
||
-ARCH=`uname -p`
|
||
-case $ARCH in
|
||
- i386)
|
||
- if [ X${BIT_FLAG} != "X" ]
|
||
- then
|
||
- ARCH=amd64
|
||
- JAVA=${TESTJAVA}${FS}bin${FS}${ARCH}${FS}java
|
||
- fi
|
||
- ;;
|
||
- sparc)
|
||
- if [ X${BIT_FLAG} != "X" ]
|
||
- then
|
||
- ARCH=sparcv9
|
||
- JAVA=${TESTJAVA}${FS}bin${FS}${ARCH}${FS}java
|
||
- fi
|
||
- ;;
|
||
- * )
|
||
- printf "Not testing architecture $ARCH, skipping test.\n"
|
||
- exit 0
|
||
- ;;
|
||
-esac
|
||
-
|
||
-LIBJSIG=${COMPILEJAVA}${FS}jre${FS}lib${FS}${ARCH}${FS}libjsig.so
|
||
-
|
||
-# If libjsig and binary do not match, skip test.
|
||
-
|
||
-A=`file ${LIBJSIG} | awk '{ print $3 }'`
|
||
-B=`file ${JAVA} | awk '{ print $3 }'`
|
||
-
|
||
-if [ $A -ne $B ]
|
||
-then
|
||
- printf "Mismatching binary and library to preload, skipping test.\n"
|
||
- exit 0
|
||
-fi
|
||
-
|
||
-if [ ! -f ${LIBJSIG} ]
|
||
-then
|
||
- printf "Skipping test: libjsig missing for given architecture: ${LIBJSIG}\n"
|
||
- exit 0
|
||
-fi
|
||
-# Use java -version to test, java version info appears on stderr,
|
||
-# the libjsig message we are removing appears on stdout.
|
||
-
|
||
-# grep returns zero meaning found, non-zero means not found:
|
||
-
|
||
-LD_PRELOAD=${LIBJSIG} ${JAVA} ${TESTVMOPTS} -Xcheck:jni -version 2>&1 | grep "libjsig is activated"
|
||
-if [ $? -eq 0 ]; then
|
||
- printf "Failed: -Xcheck:jni prints message when libjsig.so is loaded.\n"
|
||
- exit 1
|
||
-fi
|
||
-
|
||
-
|
||
-LD_PRELOAD=${LIBJSIG} ${JAVA} ${TESTVMOPTS} -Xcheck:jni -verbose:jni -version 2>&1 | grep "libjsig is activated"
|
||
-if [ $? != 0 ]; then
|
||
- printf "Failed: -Xcheck:jni does not print message when libjsig.so is loaded and -verbose:jni is set.\n"
|
||
- exit 1
|
||
-fi
|
||
-
|
||
-printf "PASSED\n"
|
||
-exit 0
|
||
-
|
||
--- ./hotspot/test/runtime/7196045/Test7196045.java Mon Sep 08 12:15:04 2014 -0700
|
||
+++ ./hotspot/test/runtime/7196045/Test7196045.java Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -26,7 +26,7 @@
|
||
* @test
|
||
* @bug 7196045
|
||
* @summary Possible JVM deadlock in ThreadTimesClosure when using HotspotInternal non-public API.
|
||
- * @run main/othervm Test7196045
|
||
+ * @run main/othervm -XX:+UsePerfData Test7196045
|
||
*/
|
||
|
||
import java.lang.management.ManagementFactory;
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./hotspot/test/runtime/XCheckJniJsig/XCheckJSig.java Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -0,0 +1,82 @@
|
||
+/*
|
||
+ * Copyright (c) 2013, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 7051189 8023393
|
||
+ * @summary Need to suppress info message if -Xcheck:jni is used with libjsig.so
|
||
+ * @library /testlibrary
|
||
+ * @run main XCheckJSig
|
||
+ */
|
||
+
|
||
+import java.util.*;
|
||
+import com.oracle.java.testlibrary.*;
|
||
+
|
||
+public class XCheckJSig {
|
||
+ public static void main(String args[]) throws Throwable {
|
||
+
|
||
+ System.out.println("Regression test for bugs 7051189 and 8023393");
|
||
+ if (!Platform.isSolaris() && !Platform.isLinux() && !Platform.isOSX()) {
|
||
+ System.out.println("Test only applicable on Solaris, Linux, and Mac OSX, skipping");
|
||
+ return;
|
||
+ }
|
||
+
|
||
+ String jdk_path = System.getProperty("test.jdk");
|
||
+ String os_arch = Platform.getOsArch();
|
||
+ String libjsig;
|
||
+ String env_var;
|
||
+ if (Platform.isOSX()) {
|
||
+ libjsig = jdk_path + "/jre/lib/server/libjsig.dylib";
|
||
+ env_var = "DYLD_INSERT_LIBRARIES";
|
||
+ } else {
|
||
+ libjsig = jdk_path + "/jre/lib/" + os_arch + "/libjsig.so";
|
||
+ env_var = "LD_PRELOAD";
|
||
+ }
|
||
+ String java_program;
|
||
+ if (Platform.isSolaris()) {
|
||
+ // On Solaris, need to call the 64-bit Java directly in order for
|
||
+ // LD_PRELOAD to work because libjsig.so is 64-bit.
|
||
+ java_program = jdk_path + "/jre/bin/" + os_arch + "/java";
|
||
+ } else {
|
||
+ java_program = JDKToolFinder.getJDKTool("java");
|
||
+ }
|
||
+ // If this test fails, these might be useful to know.
|
||
+ System.out.println("libjsig: " + libjsig);
|
||
+ System.out.println("osArch: " + os_arch);
|
||
+ System.out.println("java_program: " + java_program);
|
||
+
|
||
+ ProcessBuilder pb = new ProcessBuilder(java_program, "-Xcheck:jni", "-version");
|
||
+ Map<String, String> env = pb.environment();
|
||
+ env.put(env_var, libjsig);
|
||
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||
+ output.shouldNotContain("libjsig is activated");
|
||
+ output.shouldHaveExitValue(0);
|
||
+
|
||
+ pb = new ProcessBuilder(java_program, "-Xcheck:jni", "-verbose:jni", "-version");
|
||
+ env = pb.environment();
|
||
+ env.put(env_var, libjsig);
|
||
+ output = new OutputAnalyzer(pb.start());
|
||
+ output.shouldContain("libjsig is activated");
|
||
+ output.shouldHaveExitValue(0);
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./hotspot/test/runtime/classFileParserBug/TestEmptyBootstrapMethodsAttr.java Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -0,0 +1,75 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test TestEmptyBootstrapMethodsAttr
|
||
+ * @bug 8041918
|
||
+ * @library /testlibrary
|
||
+ * @summary Test empty bootstrap_methods table within BootstrapMethods attribute
|
||
+ * @compile TestEmptyBootstrapMethodsAttr.java
|
||
+ * @run main TestEmptyBootstrapMethodsAttr
|
||
+ */
|
||
+
|
||
+import java.io.File;
|
||
+import com.oracle.java.testlibrary.*;
|
||
+
|
||
+public class TestEmptyBootstrapMethodsAttr {
|
||
+
|
||
+ public static void main(String args[]) throws Throwable {
|
||
+ System.out.println("Regression test for bug 8041918");
|
||
+ String jarFile = System.getProperty("test.src") + File.separator + "emptynumbootstrapmethods.jar";
|
||
+
|
||
+ // ====== extract the test case
|
||
+ ProcessBuilder pb = new ProcessBuilder(new String[] { JDKToolFinder.getJDKTool("jar"), "xvf", jarFile } );
|
||
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||
+ output.shouldHaveExitValue(0);
|
||
+
|
||
+ // Test case #1:
|
||
+ // Try loading class with empty bootstrap_methods table where no
|
||
+ // other attributes are following BootstrapMethods in attribute table.
|
||
+ String className = "emptynumbootstrapmethods1";
|
||
+
|
||
+ // ======= execute test case #1
|
||
+ // Expect a lack of main method, this implies that the class loaded correctly
|
||
+ // with an empty bootstrap_methods and did not generate a ClassFormatError.
|
||
+ pb = ProcessTools.createJavaProcessBuilder("-cp", ".", className);
|
||
+ output = new OutputAnalyzer(pb.start());
|
||
+ output.shouldNotContain("java.lang.ClassFormatError");
|
||
+ output.shouldContain("Main method not found in class " + className);
|
||
+ output.shouldHaveExitValue(1);
|
||
+
|
||
+ // Test case #2:
|
||
+ // Try loading class with empty bootstrap_methods table where an
|
||
+ // AnnotationDefault attribute follows the BootstrapMethods in the attribute table.
|
||
+ className = "emptynumbootstrapmethods2";
|
||
+
|
||
+ // ======= execute test case #2
|
||
+ // Expect a lack of main method, this implies that the class loaded correctly
|
||
+ // with an empty bootstrap_methods and did not generate ClassFormatError.
|
||
+ pb = ProcessTools.createJavaProcessBuilder("-cp", ".", className);
|
||
+ output = new OutputAnalyzer(pb.start());
|
||
+ output.shouldNotContain("java.lang.ClassFormatError");
|
||
+ output.shouldContain("Main method not found in class " + className);
|
||
+ output.shouldHaveExitValue(1);
|
||
+ }
|
||
+}
|
||
Binary file test/runtime/classFileParserBug/emptynumbootstrapmethods.jar has changed
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./hotspot/test/runtime/classFileParserBug/emptynumbootstrapmethods1.jcod Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -0,0 +1,68 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * This test contains a BootstrapMethods attribute with an empty
|
||
+ * bootstrap_methods table. This yields a BootstrapMethods
|
||
+ * attribute length of 2 and should not cause a
|
||
+ * java.lang.ClassFormatError to be thrown.
|
||
+ */
|
||
+class emptynumbootstrapmethods1 {
|
||
+ 0xCAFEBABE;
|
||
+ 0; // minor version
|
||
+ 51; // version
|
||
+ [12] { // Constant Pool
|
||
+ ; // first element is empty
|
||
+ class #2; // #1 at 0x0A
|
||
+ Utf8 "emptynumbootstrapmethods1"; // #2 at 0x0D
|
||
+ class #4; // #3 at 0x1F
|
||
+ Utf8 "java/lang/Object"; // #4 at 0x22
|
||
+ MethodHandle 5b #9; // #5 at 0x35
|
||
+ NameAndType #7 #8; // #6 at 0x39
|
||
+ Utf8 "equals"; // #7 at 0x3E
|
||
+ Utf8 "(Ljava/lang/Object;)Z"; // #8 at 0x47
|
||
+ Method #3 #6; // #9 at 0x5F
|
||
+ Utf8 "equalsx"; // #10 at 0x3E
|
||
+ Utf8 "BootstrapMethods"; // #11 at 0x69
|
||
+ } // Constant Pool
|
||
+
|
||
+ 0x0001; // access
|
||
+ #1;// this_cpx
|
||
+ #3;// super_cpx
|
||
+
|
||
+ [0] { // Interfaces
|
||
+ } // Interfaces
|
||
+
|
||
+ [0] { // fields
|
||
+ } // fields
|
||
+
|
||
+ [0] { // methods
|
||
+ } // methods
|
||
+
|
||
+ [1] { // Attributes
|
||
+ Attr(#11, 2) { // BootstrapMethods at 0x8A
|
||
+ [0] { // bootstrap_methods
|
||
+ }
|
||
+ } // end BootstrapMethods
|
||
+ } // Attributes
|
||
+} // end class atrbsm00101m10p
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./hotspot/test/runtime/classFileParserBug/emptynumbootstrapmethods2.jcod Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -0,0 +1,89 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * This test contains a BootstrapMethods attribute with an empty
|
||
+ * bootstrap_methods table. This yields a BootstrapMethods
|
||
+ * attribute length of 2 and should not cause a
|
||
+ * java.lang.ClassFormatError to be thrown. To ensure that an empty
|
||
+ * bootstrap_methods table is parsed correctly, another attribute,
|
||
+ * AnnotationDefault, follows the BootstrapMethods attribute in
|
||
+ * the attribute table.
|
||
+ */
|
||
+
|
||
+class emptynumbootstrapmethods2 {
|
||
+ 0xCAFEBABE;
|
||
+ 0; // minor version
|
||
+ 51; // version
|
||
+ [14] { // Constant Pool
|
||
+ ; // first element is empty
|
||
+ class #2; // #1 at 0x0A
|
||
+ Utf8 "emptynumbootstrapmethods2"; // #2 at 0x0D
|
||
+ class #4; // #3 at 0x1F
|
||
+ Utf8 "java/lang/Object"; // #4 at 0x22
|
||
+ MethodHandle 5b #9; // #5 at 0x35
|
||
+ NameAndType #7 #8; // #6 at 0x39
|
||
+ Utf8 "equals"; // #7 at 0x3E
|
||
+ Utf8 "(Ljava/lang/Object;)Z"; // #8 at 0x47
|
||
+ Method #3 #6; // #9 at 0x5F
|
||
+ Utf8 "equalsx"; // #10 at 0x3E
|
||
+ Utf8 "BootstrapMethods"; // #11 at 0x69
|
||
+ Utf8 "AnnotationDefault"; // #12
|
||
+ Utf8 "LAnnotationDefaultI;"; // #13
|
||
+ } // Constant Pool
|
||
+
|
||
+ 0x0001; // access
|
||
+ #1;// this_cpx
|
||
+ #3;// super_cpx
|
||
+
|
||
+ [0] { // Interfaces
|
||
+ } // Interfaces
|
||
+
|
||
+ [0] { // fields
|
||
+ } // fields
|
||
+
|
||
+ [0] { // methods
|
||
+ } // methods
|
||
+
|
||
+ [2] { // Attributes
|
||
+ Attr(#11, 2) { // BootstrapMethods at 0x8A
|
||
+ [0] { // bootstrap_methods
|
||
+ }
|
||
+ } // end BootstrapMethods
|
||
+ ;
|
||
+ Attr(#12) { // AnnotationDefault
|
||
+ [] { // type annotations
|
||
+ { // type annotation
|
||
+ 0x00; // target_type
|
||
+ 0x00; // type_parameter_index
|
||
+ []b { // type_path
|
||
+ }
|
||
+
|
||
+ #13; // type_index
|
||
+ [] { // element_value_pairs
|
||
+ } // element_value_pairs
|
||
+ } // type annotation
|
||
+ } // type annotations
|
||
+ } // end AnnotationDefault
|
||
+ } // Attributes
|
||
+} // end class atrbsm00101m10p
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./hotspot/test/serviceability/sa/jmap-hashcode/Test8028623.java Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -0,0 +1,74 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 8028623
|
||
+ * @summary Test hashing of extended characters in Serviceability Agent.
|
||
+ * @library /testlibrary
|
||
+ * @compile -encoding utf8 Test8028623.java
|
||
+ * @run main Test8028623
|
||
+ */
|
||
+
|
||
+import com.oracle.java.testlibrary.JDKToolLauncher;
|
||
+import com.oracle.java.testlibrary.OutputBuffer;
|
||
+import com.oracle.java.testlibrary.ProcessTools;
|
||
+
|
||
+import java.io.File;
|
||
+
|
||
+public class Test8028623 {
|
||
+
|
||
+ public static int \u00CB = 1;
|
||
+ public static String dumpFile = "heap.out";
|
||
+
|
||
+ public static void main (String[] args) {
|
||
+
|
||
+ System.out.println(\u00CB);
|
||
+
|
||
+ try {
|
||
+ int pid = ProcessTools.getProcessId();
|
||
+ JDKToolLauncher jmap = JDKToolLauncher.create("jmap")
|
||
+ .addToolArg("-F")
|
||
+ .addToolArg("-dump:live,format=b,file=" + dumpFile)
|
||
+ .addToolArg(Integer.toString(pid));
|
||
+ ProcessBuilder pb = new ProcessBuilder(jmap.getCommand());
|
||
+ OutputBuffer output = ProcessTools.getOutput(pb);
|
||
+ Process p = pb.start();
|
||
+ int e = p.waitFor();
|
||
+ System.out.println("stdout:");
|
||
+ System.out.println(output.getStdout());
|
||
+ System.out.println("stderr:");
|
||
+ System.out.println(output.getStderr());
|
||
+
|
||
+ if (e != 0) {
|
||
+ throw new RuntimeException("jmap returns: " + e);
|
||
+ }
|
||
+ if (! new File(dumpFile).exists()) {
|
||
+ throw new RuntimeException("dump file NOT created: '" + dumpFile + "'");
|
||
+ }
|
||
+ } catch (Throwable t) {
|
||
+ t.printStackTrace();
|
||
+ throw new RuntimeException("Test failed with: " + t);
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./hotspot/test/testlibrary_tests/AssertsTest.java Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -0,0 +1,237 @@
|
||
+/*
|
||
+ * Copyright (c) 2013, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+import static com.oracle.java.testlibrary.Asserts.*;
|
||
+
|
||
+/* @test
|
||
+ * @summary Tests the different assertions in the Assert class
|
||
+ * @library /testlibrary
|
||
+ */
|
||
+public class AssertsTest {
|
||
+ private static class Foo implements Comparable<Foo> {
|
||
+ final int id;
|
||
+ public Foo(int id) {
|
||
+ this.id = id;
|
||
+ }
|
||
+
|
||
+ public int compareTo(Foo f) {
|
||
+ return new Integer(id).compareTo(new Integer(f.id));
|
||
+ }
|
||
+ }
|
||
+
|
||
+ public static void main(String[] args) throws Exception {
|
||
+ testLessThan();
|
||
+ testLessThanOrEqual();
|
||
+ testEquals();
|
||
+ testGreaterThanOrEqual();
|
||
+ testGreaterThan();
|
||
+ testNotEquals();
|
||
+ testNull();
|
||
+ testNotNull();
|
||
+ testTrue();
|
||
+ testFalse();
|
||
+ }
|
||
+
|
||
+ private static void testLessThan() throws Exception {
|
||
+ expectPass(Assertion.LT, 1, 2);
|
||
+
|
||
+ expectFail(Assertion.LT, 2, 2);
|
||
+ expectFail(Assertion.LT, 2, 1);
|
||
+ expectFail(Assertion.LT, null, 2);
|
||
+ expectFail(Assertion.LT, 2, null);
|
||
+ }
|
||
+
|
||
+ private static void testLessThanOrEqual() throws Exception {
|
||
+ expectPass(Assertion.LTE, 1, 2);
|
||
+ expectPass(Assertion.LTE, 2, 2);
|
||
+
|
||
+ expectFail(Assertion.LTE, 3, 2);
|
||
+ expectFail(Assertion.LTE, null, 2);
|
||
+ expectFail(Assertion.LTE, 2, null);
|
||
+ }
|
||
+
|
||
+ private static void testEquals() throws Exception {
|
||
+ expectPass(Assertion.EQ, 1, 1);
|
||
+ expectPass(Assertion.EQ, null, null);
|
||
+
|
||
+ Foo f1 = new Foo(1);
|
||
+ expectPass(Assertion.EQ, f1, f1);
|
||
+
|
||
+ Foo f2 = new Foo(1);
|
||
+ expectFail(Assertion.EQ, f1, f2);
|
||
+ expectFail(Assertion.LTE, null, 2);
|
||
+ expectFail(Assertion.LTE, 2, null);
|
||
+ }
|
||
+
|
||
+ private static void testGreaterThanOrEqual() throws Exception {
|
||
+ expectPass(Assertion.GTE, 1, 1);
|
||
+ expectPass(Assertion.GTE, 2, 1);
|
||
+
|
||
+ expectFail(Assertion.GTE, 1, 2);
|
||
+ expectFail(Assertion.GTE, null, 2);
|
||
+ expectFail(Assertion.GTE, 2, null);
|
||
+ }
|
||
+
|
||
+ private static void testGreaterThan() throws Exception {
|
||
+ expectPass(Assertion.GT, 2, 1);
|
||
+
|
||
+ expectFail(Assertion.GT, 1, 1);
|
||
+ expectFail(Assertion.GT, 1, 2);
|
||
+ expectFail(Assertion.GT, null, 2);
|
||
+ expectFail(Assertion.GT, 2, null);
|
||
+ }
|
||
+
|
||
+ private static void testNotEquals() throws Exception {
|
||
+ expectPass(Assertion.NE, null, 1);
|
||
+ expectPass(Assertion.NE, 1, null);
|
||
+
|
||
+ Foo f1 = new Foo(1);
|
||
+ Foo f2 = new Foo(1);
|
||
+ expectPass(Assertion.NE, f1, f2);
|
||
+
|
||
+ expectFail(Assertion.NE, null, null);
|
||
+ expectFail(Assertion.NE, f1, f1);
|
||
+ expectFail(Assertion.NE, 1, 1);
|
||
+ }
|
||
+
|
||
+ private static void testNull() throws Exception {
|
||
+ expectPass(Assertion.NULL, null);
|
||
+
|
||
+ expectFail(Assertion.NULL, 1);
|
||
+ }
|
||
+
|
||
+ private static void testNotNull() throws Exception {
|
||
+ expectPass(Assertion.NOTNULL, 1);
|
||
+
|
||
+ expectFail(Assertion.NOTNULL, null);
|
||
+ }
|
||
+
|
||
+ private static void testTrue() throws Exception {
|
||
+ expectPass(Assertion.TRUE, true);
|
||
+
|
||
+ expectFail(Assertion.TRUE, false);
|
||
+ }
|
||
+
|
||
+ private static void testFalse() throws Exception {
|
||
+ expectPass(Assertion.FALSE, false);
|
||
+
|
||
+ expectFail(Assertion.FALSE, true);
|
||
+ }
|
||
+
|
||
+ private static <T extends Comparable<T>> void expectPass(Assertion assertion, T ... args)
|
||
+ throws Exception {
|
||
+ Assertion.run(assertion, args);
|
||
+ }
|
||
+
|
||
+ private static <T extends Comparable<T>> void expectFail(Assertion assertion, T ... args)
|
||
+ throws Exception {
|
||
+ try {
|
||
+ Assertion.run(assertion, args);
|
||
+ } catch (RuntimeException e) {
|
||
+ return;
|
||
+ }
|
||
+ throw new Exception("Expected " + Assertion.format(assertion, (Object[]) args) +
|
||
+ " to throw a RuntimeException");
|
||
+ }
|
||
+
|
||
+}
|
||
+
|
||
+enum Assertion {
|
||
+ LT, LTE, EQ, GTE, GT, NE, NULL, NOTNULL, FALSE, TRUE;
|
||
+
|
||
+ public static <T extends Comparable<T>> void run(Assertion assertion, T ... args) {
|
||
+ String msg = "Expected " + format(assertion, args) + " to pass";
|
||
+ switch (assertion) {
|
||
+ case LT:
|
||
+ assertLessThan(args[0], args[1], msg);
|
||
+ break;
|
||
+ case LTE:
|
||
+ assertLessThanOrEqual(args[0], args[1], msg);
|
||
+ break;
|
||
+ case EQ:
|
||
+ assertEquals(args[0], args[1], msg);
|
||
+ break;
|
||
+ case GTE:
|
||
+ assertGreaterThanOrEqual(args[0], args[1], msg);
|
||
+ break;
|
||
+ case GT:
|
||
+ assertGreaterThan(args[0], args[1], msg);
|
||
+ break;
|
||
+ case NE:
|
||
+ assertNotEquals(args[0], args[1], msg);
|
||
+ break;
|
||
+ case NULL:
|
||
+ assertNull(args == null ? args : args[0], msg);
|
||
+ break;
|
||
+ case NOTNULL:
|
||
+ assertNotNull(args == null ? args : args[0], msg);
|
||
+ break;
|
||
+ case FALSE:
|
||
+ assertFalse((Boolean) args[0], msg);
|
||
+ break;
|
||
+ case TRUE:
|
||
+ assertTrue((Boolean) args[0], msg);
|
||
+ break;
|
||
+ default:
|
||
+ // do nothing
|
||
+ }
|
||
+ }
|
||
+
|
||
+ public static String format(Assertion assertion, Object ... args) {
|
||
+ switch (assertion) {
|
||
+ case LT:
|
||
+ return asString("assertLessThan", args);
|
||
+ case LTE:
|
||
+ return asString("assertLessThanOrEqual", args);
|
||
+ case EQ:
|
||
+ return asString("assertEquals", args);
|
||
+ case GTE:
|
||
+ return asString("assertGreaterThanOrEquals", args);
|
||
+ case GT:
|
||
+ return asString("assertGreaterThan", args);
|
||
+ case NE:
|
||
+ return asString("assertNotEquals", args);
|
||
+ case NULL:
|
||
+ return asString("assertNull", args);
|
||
+ case NOTNULL:
|
||
+ return asString("assertNotNull", args);
|
||
+ case FALSE:
|
||
+ return asString("assertFalse", args);
|
||
+ case TRUE:
|
||
+ return asString("assertTrue", args);
|
||
+ default:
|
||
+ return "";
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private static String asString(String assertion, Object ... args) {
|
||
+ if (args == null) {
|
||
+ return String.format("%s(null)", assertion);
|
||
+ }
|
||
+ if (args.length == 1) {
|
||
+ return String.format("%s(%s)", assertion, args[0]);
|
||
+ } else {
|
||
+ return String.format("%s(%s, %s)", assertion, args[0], args[1]);
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./hotspot/test/testlibrary_tests/OutputAnalyzerReportingTest.java Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -0,0 +1,124 @@
|
||
+/*
|
||
+ * Copyright (c) 2013, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @summary Test the OutputAnalyzer reporting functionality,
|
||
+ * such as printing additional diagnostic info
|
||
+ * (exit code, stdout, stderr, command line, etc.)
|
||
+ * @library /testlibrary
|
||
+ */
|
||
+
|
||
+import java.io.ByteArrayOutputStream;
|
||
+import java.io.PrintStream;
|
||
+
|
||
+import com.oracle.java.testlibrary.OutputAnalyzer;
|
||
+import com.oracle.java.testlibrary.ProcessTools;
|
||
+
|
||
+
|
||
+public class OutputAnalyzerReportingTest {
|
||
+
|
||
+ public static void main(String[] args) throws Exception {
|
||
+ // Create the output analyzer under test
|
||
+ String stdout = "aaaaaa";
|
||
+ String stderr = "bbbbbb";
|
||
+ OutputAnalyzer output = new OutputAnalyzer(stdout, stderr);
|
||
+
|
||
+ // Expected summary values should be the same for all cases,
|
||
+ // since the outputAnalyzer object is the same
|
||
+ String expectedExitValue = "-1";
|
||
+ String expectedSummary =
|
||
+ " stdout: [" + stdout + "];\n" +
|
||
+ " stderr: [" + stderr + "]\n" +
|
||
+ " exitValue = " + expectedExitValue + "\n";
|
||
+
|
||
+
|
||
+ DiagnosticSummaryTestRunner testRunner =
|
||
+ new DiagnosticSummaryTestRunner();
|
||
+
|
||
+ // should have exit value
|
||
+ testRunner.init(expectedSummary);
|
||
+ int unexpectedExitValue = 2;
|
||
+ try {
|
||
+ output.shouldHaveExitValue(unexpectedExitValue);
|
||
+ } catch (RuntimeException e) { }
|
||
+ testRunner.closeAndCheckResults();
|
||
+
|
||
+ // should not contain
|
||
+ testRunner.init(expectedSummary);
|
||
+ try {
|
||
+ output.shouldNotContain(stdout);
|
||
+ } catch (RuntimeException e) { }
|
||
+ testRunner.closeAndCheckResults();
|
||
+
|
||
+ // should contain
|
||
+ testRunner.init(expectedSummary);
|
||
+ try {
|
||
+ output.shouldContain("unexpected-stuff");
|
||
+ } catch (RuntimeException e) { }
|
||
+ testRunner.closeAndCheckResults();
|
||
+
|
||
+ // should not match
|
||
+ testRunner.init(expectedSummary);
|
||
+ try {
|
||
+ output.shouldNotMatch("[a]");
|
||
+ } catch (RuntimeException e) { }
|
||
+ testRunner.closeAndCheckResults();
|
||
+
|
||
+ // should match
|
||
+ testRunner.init(expectedSummary);
|
||
+ try {
|
||
+ output.shouldMatch("[qwerty]");
|
||
+ } catch (RuntimeException e) { }
|
||
+ testRunner.closeAndCheckResults();
|
||
+
|
||
+ }
|
||
+
|
||
+ private static class DiagnosticSummaryTestRunner {
|
||
+ private ByteArrayOutputStream byteStream =
|
||
+ new ByteArrayOutputStream(10000);
|
||
+
|
||
+ private String expectedSummary = "";
|
||
+ private PrintStream errStream;
|
||
+
|
||
+
|
||
+ public void init(String expectedSummary) {
|
||
+ this.expectedSummary = expectedSummary;
|
||
+ byteStream.reset();
|
||
+ errStream = new PrintStream(byteStream);
|
||
+ System.setErr(errStream);
|
||
+ }
|
||
+
|
||
+ public void closeAndCheckResults() {
|
||
+ // check results
|
||
+ errStream.close();
|
||
+ String stdErrStr = byteStream.toString();
|
||
+ if (!stdErrStr.contains(expectedSummary)) {
|
||
+ throw new RuntimeException("The output does not contain "
|
||
+ + "the diagnostic message, or the message is incorrect");
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./hotspot/test/testlibrary_tests/OutputAnalyzerTest.java Mon Jan 05 11:51:17 2015 -0800
|
||
@@ -0,0 +1,193 @@
|
||
+/*
|
||
+ * Copyright (c) 2013, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @summary Test the OutputAnalyzer utility class
|
||
+ * @library /testlibrary
|
||
+ */
|
||
+
|
||
+import com.oracle.java.testlibrary.OutputAnalyzer;
|
||
+
|
||
+public class OutputAnalyzerTest {
|
||
+
|
||
+ public static void main(String args[]) throws Exception {
|
||
+
|
||
+ String stdout = "aaaaaa";
|
||
+ String stderr = "bbbbbb";
|
||
+
|
||
+ // Regexps used for testing pattern matching of the test input
|
||
+ String stdoutPattern = "[a]";
|
||
+ String stderrPattern = "[b]";
|
||
+ String nonExistingPattern = "[c]";
|
||
+
|
||
+ OutputAnalyzer output = new OutputAnalyzer(stdout, stderr);
|
||
+
|
||
+ if (!stdout.equals(output.getStdout())) {
|
||
+ throw new Exception("getStdout() returned '" + output.getStdout() + "', expected '" + stdout + "'");
|
||
+ }
|
||
+
|
||
+ if (!stderr.equals(output.getStderr())) {
|
||
+ throw new Exception("getStderr() returned '" + output.getStderr() + "', expected '" + stderr + "'");
|
||
+ }
|
||
+
|
||
+ try {
|
||
+ output.shouldContain(stdout);
|
||
+ output.stdoutShouldContain(stdout);
|
||
+ output.shouldContain(stderr);
|
||
+ output.stderrShouldContain(stderr);
|
||
+ } catch (RuntimeException e) {
|
||
+ throw new Exception("shouldContain() failed", e);
|
||
+ }
|
||
+
|
||
+ try {
|
||
+ output.shouldContain("cccc");
|
||
+ throw new Exception("shouldContain() failed to throw exception");
|
||
+ } catch (RuntimeException e) {
|
||
+ // expected
|
||
+ }
|
||
+
|
||
+ try {
|
||
+ output.stdoutShouldContain(stderr);
|
||
+ throw new Exception("stdoutShouldContain() failed to throw exception");
|
||
+ } catch (RuntimeException e) {
|
||
+ // expected
|
||
+ }
|
||
+
|
||
+ try {
|
||
+ output.stderrShouldContain(stdout);
|
||
+ throw new Exception("stdoutShouldContain() failed to throw exception");
|
||
+ } catch (RuntimeException e) {
|
||
+ // expected
|
||
+ }
|
||
+
|
||
+ try {
|
||
+ output.shouldNotContain("cccc");
|
||
+ output.stdoutShouldNotContain("cccc");
|
||
+ output.stderrShouldNotContain("cccc");
|
||
+ } catch (RuntimeException e) {
|
||
+ throw new Exception("shouldNotContain() failed", e);
|
||
+ }
|
||
+
|
||
+ try {
|
||
+ output.shouldNotContain(stdout);
|
||
+ throw new Exception("shouldContain() failed to throw exception");
|
||
+ } catch (RuntimeException e) {
|
||
+ // expected
|
||
+ }
|
||
+
|
||
+ try {
|
||
+ output.stdoutShouldNotContain(stdout);
|
||
+ throw new Exception("shouldContain() failed to throw exception");
|
||
+ } catch (RuntimeException e) {
|
||
+ // expected
|
||
+ }
|
||
+
|
||
+ try {
|
||
+ output.stderrShouldNotContain(stderr);
|
||
+ throw new Exception("shouldContain() failed to throw exception");
|
||
+ } catch (RuntimeException e) {
|
||
+ // expected
|
||
+ }
|
||
+
|
||
+ // Should match
|
||
+ try {
|
||
+ output.shouldMatch(stdoutPattern);
|
||
+ output.stdoutShouldMatch(stdoutPattern);
|
||
+ output.shouldMatch(stderrPattern);
|
||
+ output.stderrShouldMatch(stderrPattern);
|
||
+ } catch (RuntimeException e) {
|
||
+ throw new Exception("shouldMatch() failed", e);
|
||
+ }
|
||
+
|
||
+ try {
|
||
+ output.shouldMatch(nonExistingPattern);
|
||
+ throw new Exception("shouldMatch() failed to throw exception");
|
||
+ } catch (RuntimeException e) {
|
||
+ // expected
|
||
+ }
|
||
+
|
||
+ try {
|
||
+ output.stdoutShouldMatch(stderrPattern);
|
||
+ throw new Exception(
|
||
+ "stdoutShouldMatch() failed to throw exception");
|
||
+ } catch (RuntimeException e) {
|
||
+ // expected
|
||
+ }
|
||
+
|
||
+ try {
|
||
+ output.stderrShouldMatch(stdoutPattern);
|
||
+ throw new Exception(
|
||
+ "stderrShouldMatch() failed to throw exception");
|
||
+ } catch (RuntimeException e) {
|
||
+ // expected
|
||
+ }
|
||
+
|
||
+ // Should not match
|
||
+ try {
|
||
+ output.shouldNotMatch(nonExistingPattern);
|
||
+ output.stdoutShouldNotMatch(nonExistingPattern);
|
||
+ output.stderrShouldNotMatch(nonExistingPattern);
|
||
+ } catch (RuntimeException e) {
|
||
+ throw new Exception("shouldNotMatch() failed", e);
|
||
+ }
|
||
+
|
||
+ try {
|
||
+ output.shouldNotMatch(stdoutPattern);
|
||
+ throw new Exception("shouldNotMatch() failed to throw exception");
|
||
+ } catch (RuntimeException e) {
|
||
+ // expected
|
||
+ }
|
||
+
|
||
+ try {
|
||
+ output.stdoutShouldNotMatch(stdoutPattern);
|
||
+ throw new Exception("shouldNotMatch() failed to throw exception");
|
||
+ } catch (RuntimeException e) {
|
||
+ // expected
|
||
+ }
|
||
+
|
||
+ try {
|
||
+ output.stderrShouldNotMatch(stderrPattern);
|
||
+ throw new Exception("shouldNotMatch() failed to throw exception");
|
||
+ } catch (RuntimeException e) {
|
||
+ // expected
|
||
+ }
|
||
+
|
||
+ {
|
||
+ String aaaa = "aaaa";
|
||
+ String result = output.firstMatch(aaaa);
|
||
+ if (!aaaa.equals(result)) {
|
||
+ throw new Exception("firstMatch(String) faild to match. Expected: " + aaaa + " got: " + result);
|
||
+ }
|
||
+ }
|
||
+
|
||
+ {
|
||
+ String aa = "aa";
|
||
+ String aa_grouped_aa = aa + "(" + aa + ")";
|
||
+ String result = output.firstMatch(aa_grouped_aa, 1);
|
||
+ if (!aa.equals(result)) {
|
||
+ throw new Exception("firstMatch(String, int) failed to match. Expected: " + aa + " got: " + result);
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- ./jaxp/.hgtags Mon Sep 08 12:15:56 2014 -0700
|
||
+++ ./jaxp/.hgtags Mon Jan 05 11:56:34 2015 -0800
|
||
@@ -473,11 +473,19 @@
|
||
45db678253587755df4a00066e42e2fce04bbb71 jdk7u65-b18
|
||
4e323af07c47061109fb5f585613b0cc4b4208ca jdk7u65-b19
|
||
f3b7bb6f1924ab7f635cdd60db7fbab64576cd6d jdk7u65-b32
|
||
+7215972c2c30d0fa469a459a3e4fcee6bc93991d jdk7u80-b00
|
||
+4c959b6a32057ec18c9c722ada3d0d0c716a51c4 jdk7u80-b01
|
||
+25a1b88d7a473e067471e00a5457236736e9a2e0 jdk7u80-b02
|
||
d41f31b707c87675f3467e980b1ceef2e53b3b5d jdk7u65-b20
|
||
d1f8566d39c56e40516a1afb304ed7c0681355d8 jdk7u67-b01
|
||
4e323af07c47061109fb5f585613b0cc4b4208ca jdk7u65-b40
|
||
a5f829d7fa05cf769402dfc82c94b737b8d011b0 jdk7u65-b31
|
||
f33ea72260ca7480f4a1405d35a3709895b491a2 jdk7u65-b33
|
||
+d1f8566d39c56e40516a1afb304ed7c0681355d8 jdk7u67-b01
|
||
+a9c1c53386a9b7856802a98a597a8cbf73e28fa0 jdk7u67-b31
|
||
+e7300cd38793c7620f39be5f73b7fcba2f80555b jdk7u67-b32
|
||
+78c4bc9bfa12cc97039fd84c5ec1cbd086a0ba35 jdk7u67-b33
|
||
+39a6fbc6ef75eba7b3c28e8485a0665d904f21eb jdk7u67-b34
|
||
86e93799766d67102a37559b3831abcc825d7e24 jdk7u66-b00
|
||
d34839cb2f15dee01cdfb1fd93378849de34d662 jdk7u66-b01
|
||
19e4e978c8212921104ba16d0db6bf18c6f8d0ab jdk7u66-b09
|
||
@@ -503,3 +511,51 @@
|
||
f7542072016b7972b383075f84df29bc05495d2e jdk7u71-b11
|
||
109dd4c4a07a8adfaf59e11c29e502277b803c44 jdk7u71-b12
|
||
df2c7c9a3609f8f4b30b09c29a9cfddc8b4b90ef jdk7u71-b13
|
||
+018049539cc25653eeba682b3ca5abcd63839d78 jdk7u71-b14
|
||
+0e7c12377e0120b908fc594afc596ce1f5f2b234 jdk7u72-b01
|
||
+bc5b33e920af4b34facfa85a6bf48d5f55b05116 jdk7u72-b02
|
||
+b1f6b12c1fcac4b0ea89bf3f134324aa8968b847 jdk7u72-b03
|
||
+f59d0ae0995d2cdb57ea482a8fa47575e0d8b57f jdk7u72-b04
|
||
+ed071d27bf7320265d8ae527bb622f2e26e1a89c jdk7u72-b05
|
||
+d3c5c35f617e33f673420ff9da8051c742513af3 jdk7u72-b06
|
||
+ef0842fc31d98031ad9bb514b0f8d2db7bcf4162 jdk7u72-b07
|
||
+89117e4403e61b9c033bcab65da30abf2219e385 jdk7u72-b08
|
||
+7637d4b21a9e3237f129f69a0dc7132877f3ab19 jdk7u72-b09
|
||
+a3d6d3327b32cd7fb41a144d48f957170dde3ba8 jdk7u72-b10
|
||
+d3fbd111daa01dc1737afd0a59084e14664d581a jdk7u72-b11
|
||
+fb713c907f33689a418c87bf721dafcdc9616ca8 jdk7u72-b12
|
||
+8f0d267ca63ab2f9d7839604ae88fafbcc0ad2d4 jdk7u72-b13
|
||
+fec38133453a8d70d4c528595ae1cab47909c4bd jdk7u72-b14
|
||
+e8ab19435208726b1334ba8e7928ea154e0959b3 jdk7u72-b30
|
||
+d8246774af472f617033202d2c58c7572da08dcd jdk7u72-b31
|
||
+4173f90038ff1764576d08efa34109a7895f106b jdk7u75-b00
|
||
+b9eaa7d194dd5e23bd2d53be4d57b25fdcb08e31 jdk7u75-b01
|
||
+98eaae4f301779861be3f9a8b0854ec83074615a jdk7u75-b02
|
||
+eb57739c7818a0dbaa39122ad35f5e48584be5df jdk7u75-b03
|
||
+908a056c8d8fa65864cbf5745a050f675be35288 jdk7u75-b04
|
||
+079579b6672777d71624b49b29042cd19cbccef2 jdk7u75-b05
|
||
+967717c26bb17ff3c3aa399072eebed17c599a92 jdk7u75-b06
|
||
+1a9565415e4142f9914b309888056f9b8f27de97 jdk7u75-b07
|
||
+d8419be679448402af177510f1a154ca7935d24f jdk7u75-b08
|
||
+08599c76e606df8d369d1eda03ac876ffbaafb36 jdk7u75-b09
|
||
+d3c566dedbcde177bfa573ae3632ad21c335a03d jdk7u75-b10
|
||
+1d6f8fbbfefc63adde96d70d74dc281616b7ac01 jdk7u75-b11
|
||
+15f65800816f164b5855744b59fbc3d661e0511d jdk7u75-b12
|
||
+d6c90cc2e91d58688884a8e659e79603e37d4cd5 jdk7u75-b13
|
||
+999eb9cbf8404232a03e3a877680ca3541b8f62c jdk7u75-b30
|
||
+4efcb94971a21562649ae01c07880139a35d3403 jdk7u75-b31
|
||
+8405eb3c02e3f81b20faa1adf43d447e2e7b7705 jdk7u76-b00
|
||
+f478245e2c18bd459d085c70cf7aa212b1f30dbf jdk7u76-b01
|
||
+bb77b08b760634a87ee3c1fbb3c7a519d61d4e87 jdk7u76-b02
|
||
+0c337b6088029d8867732a2f1e08dcc7271e6111 jdk7u76-b03
|
||
+0d0d6c0a1ae3cae89f59491c6643fe7f12c497bc jdk7u76-b04
|
||
+5bde0c6472681b8e508c7f54692ad3ca69c6a544 jdk7u76-b05
|
||
+9e39563c9f33ceac879ee214bc27db3e5f1d5004 jdk7u76-b06
|
||
+4e5b7d15fad4fc32c67a45512391c71e7e33460e jdk7u76-b07
|
||
+aefcd8f73cfb456a133ee923859683c68338649f jdk7u76-b08
|
||
+c6675d4d08b8d5e6a2bb9f631d8b5762f0b51cdf jdk7u76-b09
|
||
+62e1b60c3adfd3133e3fe9f8d5194512f503c540 jdk7u76-b10
|
||
+33040bd2deb5371a85fe7d7a9442cdf649919b39 jdk7u76-b11
|
||
+7167fcf821b00424c0464086f4047a7209dc9e59 jdk7u76-b12
|
||
+6262c3d41bb13f58338c4bc7946468ba70825046 jdk7u76-b13
|
||
+d3907dca5ffc798076f44cc63f01f7beb41343a9 jdk7u76-b30
|
||
--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java Mon Sep 08 12:15:56 2014 -0700
|
||
+++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java Mon Jan 05 11:56:34 2015 -0800
|
||
@@ -147,8 +147,9 @@
|
||
fCurrentEntity.lineNumber++;
|
||
fCurrentEntity.columnNumber = 1;
|
||
if (fCurrentEntity.position == fCurrentEntity.count) {
|
||
+ invokeListeners(1);
|
||
fCurrentEntity.ch[0] = (char)c;
|
||
- load(1, false, true);
|
||
+ load(1, false, false);
|
||
}
|
||
if (c == '\r' && external) {
|
||
int cc = fCurrentEntity.ch[fCurrentEntity.position++];
|
||
@@ -306,9 +307,10 @@
|
||
|
||
if (XML11Char.isXML11NameStart(ch)) {
|
||
if (++fCurrentEntity.position == fCurrentEntity.count) {
|
||
+ invokeListeners(1);
|
||
fCurrentEntity.ch[0] = ch;
|
||
offset = 0;
|
||
- if (load(1, false, true)) {
|
||
+ if (load(1, false, false)) {
|
||
fCurrentEntity.columnNumber++;
|
||
String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1);
|
||
return symbol;
|
||
@@ -317,9 +319,10 @@
|
||
}
|
||
else if (XML11Char.isXML11NameHighSurrogate(ch)) {
|
||
if (++fCurrentEntity.position == fCurrentEntity.count) {
|
||
+ invokeListeners(1);
|
||
fCurrentEntity.ch[0] = ch;
|
||
offset = 0;
|
||
- if (load(1, false, true)) {
|
||
+ if (load(1, false, false)) {
|
||
--fCurrentEntity.position;
|
||
--fCurrentEntity.startPosition;
|
||
return null;
|
||
@@ -332,10 +335,11 @@
|
||
return null;
|
||
}
|
||
if (++fCurrentEntity.position == fCurrentEntity.count) {
|
||
+ invokeListeners(2);
|
||
fCurrentEntity.ch[0] = ch;
|
||
fCurrentEntity.ch[1] = ch2;
|
||
offset = 0;
|
||
- if (load(2, false, true)) {
|
||
+ if (load(2, false, false)) {
|
||
fCurrentEntity.columnNumber += 2;
|
||
String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 2);
|
||
return symbol;
|
||
@@ -464,9 +468,10 @@
|
||
|
||
if (XML11Char.isXML11NCNameStart(ch)) {
|
||
if (++fCurrentEntity.position == fCurrentEntity.count) {
|
||
+ invokeListeners(1);
|
||
fCurrentEntity.ch[0] = ch;
|
||
offset = 0;
|
||
- if (load(1, false, true)) {
|
||
+ if (load(1, false, false)) {
|
||
fCurrentEntity.columnNumber++;
|
||
String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1);
|
||
return symbol;
|
||
@@ -475,9 +480,10 @@
|
||
}
|
||
else if (XML11Char.isXML11NameHighSurrogate(ch)) {
|
||
if (++fCurrentEntity.position == fCurrentEntity.count) {
|
||
+ invokeListeners(1);
|
||
fCurrentEntity.ch[0] = ch;
|
||
offset = 0;
|
||
- if (load(1, false, true)) {
|
||
+ if (load(1, false, false)) {
|
||
--fCurrentEntity.position;
|
||
--fCurrentEntity.startPosition;
|
||
return null;
|
||
@@ -490,10 +496,11 @@
|
||
return null;
|
||
}
|
||
if (++fCurrentEntity.position == fCurrentEntity.count) {
|
||
+ invokeListeners(2);
|
||
fCurrentEntity.ch[0] = ch;
|
||
fCurrentEntity.ch[1] = ch2;
|
||
offset = 0;
|
||
- if (load(2, false, true)) {
|
||
+ if (load(2, false, false)) {
|
||
fCurrentEntity.columnNumber += 2;
|
||
String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 2);
|
||
return symbol;
|
||
@@ -628,9 +635,10 @@
|
||
|
||
if (XML11Char.isXML11NCNameStart(ch)) {
|
||
if (++fCurrentEntity.position == fCurrentEntity.count) {
|
||
+ invokeListeners(1);
|
||
fCurrentEntity.ch[0] = ch;
|
||
offset = 0;
|
||
- if (load(1, false, true)) {
|
||
+ if (load(1, false, false)) {
|
||
fCurrentEntity.columnNumber++;
|
||
String name = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1);
|
||
qname.setValues(null, name, name, null);
|
||
@@ -640,9 +648,10 @@
|
||
}
|
||
else if (XML11Char.isXML11NameHighSurrogate(ch)) {
|
||
if (++fCurrentEntity.position == fCurrentEntity.count) {
|
||
+ invokeListeners(1);
|
||
fCurrentEntity.ch[0] = ch;
|
||
offset = 0;
|
||
- if (load(1, false, true)) {
|
||
+ if (load(1, false, false)) {
|
||
--fCurrentEntity.startPosition;
|
||
--fCurrentEntity.position;
|
||
return false;
|
||
@@ -655,10 +664,11 @@
|
||
return false;
|
||
}
|
||
if (++fCurrentEntity.position == fCurrentEntity.count) {
|
||
+ invokeListeners(2);
|
||
fCurrentEntity.ch[0] = ch;
|
||
fCurrentEntity.ch[1] = ch2;
|
||
offset = 0;
|
||
- if (load(2, false, true)) {
|
||
+ if (load(2, false, false)) {
|
||
fCurrentEntity.columnNumber += 2;
|
||
String name = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 2);
|
||
qname.setValues(null, name, name, null);
|
||
@@ -835,8 +845,9 @@
|
||
load(0, true, true);
|
||
}
|
||
else if (fCurrentEntity.position == fCurrentEntity.count - 1) {
|
||
+ invokeListeners(0);
|
||
fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
|
||
- load(1, false, true);
|
||
+ load(1, false, false);
|
||
fCurrentEntity.position = 0;
|
||
fCurrentEntity.startPosition = 0;
|
||
}
|
||
@@ -976,8 +987,9 @@
|
||
load(0, true, true);
|
||
}
|
||
else if (fCurrentEntity.position == fCurrentEntity.count - 1) {
|
||
+ invokeListeners(0);
|
||
fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
|
||
- load(1, false, true);
|
||
+ load(1, false, false);
|
||
fCurrentEntity.startPosition = 0;
|
||
fCurrentEntity.position = 0;
|
||
}
|
||
@@ -1346,8 +1358,9 @@
|
||
else if (c == '\n' && (cc == '\r' ) && fCurrentEntity.isExternal()) {
|
||
// handle newlines
|
||
if (fCurrentEntity.position == fCurrentEntity.count) {
|
||
+ invokeListeners(1);
|
||
fCurrentEntity.ch[0] = (char)cc;
|
||
- load(1, false, true);
|
||
+ load(1, false, false);
|
||
}
|
||
int ccc = fCurrentEntity.ch[++fCurrentEntity.position];
|
||
if (ccc == '\n' || ccc == 0x85) {
|
||
@@ -1408,8 +1421,9 @@
|
||
fCurrentEntity.lineNumber++;
|
||
fCurrentEntity.columnNumber = 1;
|
||
if (fCurrentEntity.position == fCurrentEntity.count - 1) {
|
||
+ invokeListeners(0);
|
||
fCurrentEntity.ch[0] = (char)c;
|
||
- entityChanged = load(1, true, true);
|
||
+ entityChanged = load(1, true, false);
|
||
if (!entityChanged) {
|
||
// the load change the position to be 1,
|
||
// need to restore it when entity not changed
|
||
--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java Mon Sep 08 12:15:56 2014 -0700
|
||
+++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java Mon Jan 05 11:56:34 2015 -0800
|
||
@@ -538,8 +538,9 @@
|
||
fCurrentEntity.lineNumber++;
|
||
fCurrentEntity.columnNumber = 1;
|
||
if (fCurrentEntity.position == fCurrentEntity.count) {
|
||
+ invokeListeners(1);
|
||
fCurrentEntity.ch[0] = (char)c;
|
||
- load(1, false, true);
|
||
+ load(1, false, false);
|
||
}
|
||
if (c == '\r' && isExternal) {
|
||
if (fCurrentEntity.ch[fCurrentEntity.position++] != '\n') {
|
||
@@ -670,9 +671,10 @@
|
||
int offset = fCurrentEntity.position;
|
||
if (XMLChar.isNameStart(fCurrentEntity.ch[offset])) {
|
||
if (++fCurrentEntity.position == fCurrentEntity.count) {
|
||
+ invokeListeners(1);
|
||
fCurrentEntity.ch[0] = fCurrentEntity.ch[offset];
|
||
offset = 0;
|
||
- if (load(1, false, true)) {
|
||
+ if (load(1, false, false)) {
|
||
fCurrentEntity.columnNumber++;
|
||
String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1);
|
||
|
||
@@ -776,10 +778,11 @@
|
||
|
||
if (XMLChar.isNameStart(fCurrentEntity.ch[offset])) {
|
||
if (++fCurrentEntity.position == fCurrentEntity.count) {
|
||
+ invokeListeners(1);
|
||
fCurrentEntity.ch[0] = fCurrentEntity.ch[offset];
|
||
offset = 0;
|
||
|
||
- if (load(1, false, true)) {
|
||
+ if (load(1, false, false)) {
|
||
fCurrentEntity.columnNumber++;
|
||
//adding into symbol table.
|
||
//XXX We are trying to add single character in SymbolTable??????
|
||
@@ -906,8 +909,9 @@
|
||
if (fCurrentEntity.position == fCurrentEntity.count) {
|
||
load(0, true, true);
|
||
} else if (fCurrentEntity.position == fCurrentEntity.count - 1) {
|
||
+ invokeListeners(0);
|
||
fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
|
||
- load(1, false, true);
|
||
+ load(1, false, false);
|
||
fCurrentEntity.position = 0;
|
||
}
|
||
|
||
@@ -1054,8 +1058,9 @@
|
||
if (fCurrentEntity.position == fCurrentEntity.count) {
|
||
load(0, true, true);
|
||
} else if (fCurrentEntity.position == fCurrentEntity.count - 1) {
|
||
+ invokeListeners(0);
|
||
fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
|
||
- load(1, false, true);
|
||
+ load(1, false, false);
|
||
fCurrentEntity.position = 0;
|
||
}
|
||
|
||
@@ -1419,8 +1424,9 @@
|
||
} else if (c == '\n' && cc == '\r' && isExternal) {
|
||
// handle newlines
|
||
if (fCurrentEntity.position == fCurrentEntity.count) {
|
||
+ invokeListeners(1);
|
||
fCurrentEntity.ch[0] = (char)cc;
|
||
- load(1, false, true);
|
||
+ load(1, false, false);
|
||
}
|
||
fCurrentEntity.position++;
|
||
if (fCurrentEntity.ch[fCurrentEntity.position] == '\n') {
|
||
@@ -1494,8 +1500,9 @@
|
||
fCurrentEntity.lineNumber++;
|
||
fCurrentEntity.columnNumber = 1;
|
||
if (fCurrentEntity.position == fCurrentEntity.count - 1) {
|
||
+ invokeListeners(0);
|
||
fCurrentEntity.ch[0] = (char)c;
|
||
- entityChanged = load(1, true, true);
|
||
+ entityChanged = load(1, true, false);
|
||
if (!entityChanged){
|
||
// the load change the position to be 1,
|
||
// need to restore it when entity not changed
|
||
--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaLoader.java Mon Sep 08 12:15:56 2014 -0700
|
||
+++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaLoader.java Mon Jan 05 11:56:34 2015 -0800
|
||
@@ -54,6 +54,7 @@
|
||
import com.sun.org.apache.xerces.internal.util.SymbolTable;
|
||
import com.sun.org.apache.xerces.internal.util.XMLSymbols;
|
||
import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
|
||
+import com.sun.org.apache.xerces.internal.utils.XMLSecurityManager;
|
||
import com.sun.org.apache.xerces.internal.utils.XMLSecurityPropertyManager;
|
||
import com.sun.org.apache.xerces.internal.xni.XNIException;
|
||
import com.sun.org.apache.xerces.internal.xni.grammars.Grammar;
|
||
@@ -983,6 +984,18 @@
|
||
*/
|
||
public void reset(XMLComponentManager componentManager) throws XMLConfigurationException {
|
||
|
||
+ XMLSecurityPropertyManager spm = (XMLSecurityPropertyManager)componentManager.getProperty(XML_SECURITY_PROPERTY_MANAGER);
|
||
+ if (spm == null) {
|
||
+ spm = new XMLSecurityPropertyManager();
|
||
+ setProperty(XML_SECURITY_PROPERTY_MANAGER, spm);
|
||
+ }
|
||
+
|
||
+ XMLSecurityManager sm = (XMLSecurityManager)componentManager.getProperty(SECURITY_MANAGER);
|
||
+ if (sm == null)
|
||
+ setProperty(SECURITY_MANAGER,new XMLSecurityManager(true));
|
||
+
|
||
+ faccessExternalSchema = spm.getValue(XMLSecurityPropertyManager.Property.ACCESS_EXTERNAL_SCHEMA);
|
||
+
|
||
fGrammarBucket.reset();
|
||
|
||
fSubGroupHandler.reset();
|
||
@@ -1066,9 +1079,6 @@
|
||
// get generate-synthetic-annotations feature
|
||
fSchemaHandler.setGenerateSyntheticAnnotations(componentManager.getFeature(GENERATE_SYNTHETIC_ANNOTATIONS, false));
|
||
fSchemaHandler.reset(componentManager);
|
||
-
|
||
- XMLSecurityPropertyManager spm = (XMLSecurityPropertyManager)componentManager.getProperty(XML_SECURITY_PROPERTY_MANAGER);
|
||
- faccessExternalSchema = spm.getValue(XMLSecurityPropertyManager.Property.ACCESS_EXTERNAL_SCHEMA);
|
||
}
|
||
|
||
private void initGrammarBucket(){
|
||
--- ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java Mon Sep 08 12:15:56 2014 -0700
|
||
+++ ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java Mon Jan 05 11:56:34 2015 -0800
|
||
@@ -450,7 +450,8 @@
|
||
}
|
||
|
||
private void propagateFeatures(AbstractXMLSchema schema) {
|
||
- schema.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, fSecurityManager != null);
|
||
+ schema.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING,
|
||
+ (fSecurityManager != null && fSecurityManager.isSecureProcessing()));
|
||
schema.setFeature(Constants.ORACLE_FEATURE_SERVICE_MECHANISM, fUseServicesMechanism);
|
||
String[] features = fXMLSchemaLoader.getRecognizedFeatures();
|
||
for (int i = 0; i < features.length; ++i) {
|
||
--- ./jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2.java Mon Sep 08 12:15:56 2014 -0700
|
||
+++ ./jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2.java Mon Jan 05 11:56:34 2015 -0800
|
||
@@ -3145,7 +3145,11 @@
|
||
m_data.elementAt(-dataIndex+1));
|
||
}
|
||
}
|
||
- else if (DTM.ELEMENT_NODE == type || DTM.DOCUMENT_FRAGMENT_NODE == type
|
||
+ else if (DTM.ELEMENT_NODE == type)
|
||
+ {
|
||
+ return getStringValueX(nodeHandle);
|
||
+ }
|
||
+ else if (DTM.DOCUMENT_FRAGMENT_NODE == type
|
||
|| DTM.DOCUMENT_NODE == type)
|
||
{
|
||
return null;
|
||
--- ./jaxp/src/com/sun/org/apache/xml/internal/serialize/DOMSerializerImpl.java Mon Sep 08 12:15:56 2014 -0700
|
||
+++ ./jaxp/src/com/sun/org/apache/xml/internal/serialize/DOMSerializerImpl.java Mon Jan 05 11:56:34 2015 -0800
|
||
@@ -851,7 +851,6 @@
|
||
ser.fDOMErrorHandler.handleError(error);
|
||
|
||
}
|
||
- e.printStackTrace();
|
||
throw (LSException) DOMUtil.createLSException(LSException.SERIALIZE_ERR, e).fillInStackTrace();
|
||
}
|
||
return true;
|
||
--- ./jaxws/.hgtags Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/.hgtags Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -472,11 +472,19 @@
|
||
dedfc93eeb5f4b28ad1a91902a0676aef0937e42 jdk7u65-b18
|
||
db4cccbfd72fc265b736a273797963754434a7d2 jdk7u65-b19
|
||
0cd66509e11335fac490076cbdcb2f47c592de86 jdk7u65-b32
|
||
+bef313c7ff7a7a829f8f6a305bf0c3738ad99795 jdk7u80-b00
|
||
+0eb2482c3d0663c39794ec4c268acc41c4cd387b jdk7u80-b01
|
||
+579128925dd9a0e9c529125c9e299dc0518037a5 jdk7u80-b02
|
||
28d868d40df0d420b87698e1215e5039d24a8ae5 jdk7u65-b20
|
||
1ef1681e21ca00edbc8727e849fef50637cc52d8 jdk7u67-b01
|
||
db4cccbfd72fc265b736a273797963754434a7d2 jdk7u65-b40
|
||
190d885fe83b5b1801ee6d7327161254545d55a8 jdk7u65-b31
|
||
6cf7676aa11c053481c0806afda9fc91c2bfd782 jdk7u65-b33
|
||
+1ef1681e21ca00edbc8727e849fef50637cc52d8 jdk7u67-b01
|
||
+34e3554140b7f9efe2ad20fa04dfd5faf5821248 jdk7u67-b31
|
||
+6090119e680a65addafb82f2b6227315813b7e68 jdk7u67-b32
|
||
+aa1879afbb8dc4dd157eab31c86de2845a3cad6a jdk7u67-b33
|
||
+a3290ceed5750bfc62a5ec5c00ee1aea125e9db3 jdk7u67-b34
|
||
d63ca1c5bdb9fb2e36ec4afda431c0d1dfdfc07c jdk7u66-b00
|
||
1dce52b208a9528266c26352e03e67ec0ddb4dd7 jdk7u66-b01
|
||
04481967eff566b8a379a0315d2a3a255928d6ce jdk7u66-b09
|
||
@@ -502,3 +510,51 @@
|
||
b37043cee55ed025b04a3420908897e69c6c687f jdk7u71-b11
|
||
3a432d7f01ed998ee6ca2ed04e818849a3d1e0c7 jdk7u71-b12
|
||
9dd0dea849dd2550b58346977d9111717c1f38b2 jdk7u71-b13
|
||
+a580f2c49eacc68a11cf0e724aec4a974fb77745 jdk7u71-b14
|
||
+18676fc7713f5341f298a1ae2aee9e217fcdb5a5 jdk7u72-b01
|
||
+e4bbb79df2b13cea8c24ee2e6346e1aa30645400 jdk7u72-b02
|
||
+646f7c237e9ecde8df0fc6524b3605a89e6dc135 jdk7u72-b03
|
||
+30d42f2fde558b4aeae26cc7bda89b2badf88aab jdk7u72-b04
|
||
+761c40c9076aefac72bbff913e8bc088e565386f jdk7u72-b05
|
||
+a3961ce4d5c1fd1f9cde546e62760a008b5b9d60 jdk7u72-b06
|
||
+1153553de579fbbf8c328ea47f07accf8e2d9ac2 jdk7u72-b07
|
||
+7b00d0359f49c82b38bb2f2faafae53eacc1a995 jdk7u72-b08
|
||
+f16ea19cfd03274e9e1fd5367c3f4c23accf4e75 jdk7u72-b09
|
||
+615c0d49e8927c9b03f5694df4ddb7a5e45eaf6d jdk7u72-b10
|
||
+b34f135642cddf3c15f1fecaad320cb12cbd9472 jdk7u72-b11
|
||
+cfa494e8b9bcd29ba59f1bfa3c365418b4102f71 jdk7u72-b12
|
||
+d4be88d9bfbff3e41bc4121838e90160734d9805 jdk7u72-b13
|
||
+e33bca6f8dab3e82b2dec2c52074f19a88e1267e jdk7u72-b14
|
||
+587c4a3bfb76c03fa589f61e28ed739c537409bc jdk7u72-b30
|
||
+4257d52e30b4054c9ce43cfe830dff2b8f740037 jdk7u72-b31
|
||
+664724762a245f1cd9d89ccd3d3833fcb16bed80 jdk7u75-b00
|
||
+ce5b9e0d988cb52d9e6c36edeafe60bd16280534 jdk7u75-b01
|
||
+1b6ba791cbf7d995a81dfd1478906ebae3769ea2 jdk7u75-b02
|
||
+033349ac9e45fd897571ff4f6e38ed48d46cd539 jdk7u75-b03
|
||
+f1266833b5a07aa84d5da263f4a18503838286f4 jdk7u75-b04
|
||
+bfe594779717071439b94ddc771117eedb442a25 jdk7u75-b05
|
||
+b700cddd5754a82fca4f5465116fbba516a96667 jdk7u75-b06
|
||
+781d7a0230eef7cbef89bb32bc0d722730c198e3 jdk7u75-b07
|
||
+b85627d6afbb758fc244147dfdbbd287ee524eed jdk7u75-b08
|
||
+e7aef72db8cf95b27af7c2508a02bf87b52b325b jdk7u75-b09
|
||
+d7c340b9d530da158dce7da897f66e31e83b1366 jdk7u75-b10
|
||
+4b36c07b29c32064abdfa6df09c381861875ddd4 jdk7u75-b11
|
||
+5458349b0e4860662dc5a4f96363c0e714d09c65 jdk7u75-b12
|
||
+38d474b401c6a69dfc7cea5ba79a894980fa8107 jdk7u75-b13
|
||
+4d068ffb0b544d004792b3047c5aa9ab72b53529 jdk7u75-b30
|
||
+2232599a19acc7c45baa0b3c70f072a47f1cbc22 jdk7u75-b31
|
||
+5d60eecdd6b881856ddfc34e0d34f3072575662a jdk7u76-b00
|
||
+9fed28dcccaafd49f9a4b2aee30b2babc97d4a93 jdk7u76-b01
|
||
+7e479fddbf5d7b7840319a44d9e72562d7cfd83b jdk7u76-b02
|
||
+2dcdee347bf25efe5e5d5242a5608547398bb7c7 jdk7u76-b03
|
||
+42324883f9b32a6eaaf39c8e5d8ba2c65fb1015e jdk7u76-b04
|
||
+129bfaec2a1aca5c3ca3db303dd7e7342c17e350 jdk7u76-b05
|
||
+7c564f2cbb1cc439506a26785d07683f16b9ec40 jdk7u76-b06
|
||
+c99e49a9c2bf9503135ad319bcdb3b3724d1af5c jdk7u76-b07
|
||
+e98a28d564626be745026d697d7bb68a7f053ed7 jdk7u76-b08
|
||
+7de80762ae307e56156279d84c8d1dcf73b26164 jdk7u76-b09
|
||
+c84694b00c547056b8da98ae4c0c7c9feb06863b jdk7u76-b10
|
||
+df2786b1daffc450d7e7e43c9d63aaf72a5cd2f0 jdk7u76-b11
|
||
+dc818936e1050f0058d35a7a27946e4e2bfb27ee jdk7u76-b12
|
||
+a986e4b755f388532378d595831bebece7bf72c4 jdk7u76-b13
|
||
+260565d7fba1a2d176bd43d81b0714bd19cf4459 jdk7u76-b30
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/processor/model/Message.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/processor/model/Message.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -25,7 +25,6 @@
|
||
|
||
package com.sun.tools.internal.ws.processor.model;
|
||
|
||
-import com.sun.tools.internal.ws.wsdl.framework.Entity;
|
||
import com.sun.tools.internal.ws.wscompile.ErrorReceiver;
|
||
import com.sun.tools.internal.ws.wscompile.AbortException;
|
||
import com.sun.tools.internal.ws.resources.ModelMessages;
|
||
@@ -177,7 +176,8 @@
|
||
throw new AbortException();
|
||
}
|
||
_parameters.add(p);
|
||
- _parametersByName.put(p.getName(), p);
|
||
+ String name = p.getCustomName() != null ? p.getCustomName() : p.getName();
|
||
+ _parametersByName.put(name, p);
|
||
}
|
||
|
||
public Parameter getParameterByName(String name) {
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/processor/modeler/wsdl/WSDLModeler.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/processor/modeler/wsdl/WSDLModeler.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -1757,9 +1757,9 @@
|
||
}
|
||
|
||
if (part.isIN())
|
||
- setCustomizedParameterName(info.portTypeOperation, inMsg, part, param, false);
|
||
+ setCustomizedParameterName(info.bindingOperation, inMsg, part, param, false);
|
||
else if (outMsg != null)
|
||
- setCustomizedParameterName(info.portTypeOperation, outMsg, part, param, false);
|
||
+ setCustomizedParameterName(info.bindingOperation, outMsg, part, param, false);
|
||
|
||
params.add(param);
|
||
}
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/model/nav/Utils.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/model/nav/Utils.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -54,17 +54,21 @@
|
||
|
||
static { // we statically initializing REFLECTION_NAVIGATOR property
|
||
try {
|
||
- Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
|
||
- //noinspection unchecked
|
||
- final Method getInstance = refNav.getDeclaredMethod("getInstance");
|
||
+ final Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
|
||
|
||
// requires accessClassInPackage privilege
|
||
- AccessController.doPrivileged(
|
||
- new PrivilegedAction<Object>() {
|
||
+ final Method getInstance = AccessController.doPrivileged(
|
||
+ new PrivilegedAction<Method>() {
|
||
+
|
||
@Override
|
||
- public Object run() {
|
||
- getInstance.setAccessible(true);
|
||
- return null;
|
||
+ public Method run() {
|
||
+ try {
|
||
+ Method getInstance = refNav.getDeclaredMethod("getInstance");
|
||
+ getInstance.setAccessible(true);
|
||
+ return getInstance;
|
||
+ } catch (NoSuchMethodException e) {
|
||
+ throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
|
||
+ }
|
||
}
|
||
}
|
||
);
|
||
@@ -72,16 +76,10 @@
|
||
//noinspection unchecked
|
||
REFLECTION_NAVIGATOR = (Navigator<Type, Class, Field, Method>) getInstance.invoke(null);
|
||
} catch (ClassNotFoundException e) {
|
||
- e.printStackTrace();
|
||
throw new IllegalStateException("Can't find ReflectionNavigator class");
|
||
} catch (InvocationTargetException e) {
|
||
- e.printStackTrace();
|
||
throw new IllegalStateException("ReflectionNavigator.getInstance throws the exception");
|
||
- } catch (NoSuchMethodException e) {
|
||
- e.printStackTrace();
|
||
- throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
|
||
} catch (IllegalAccessException e) {
|
||
- e.printStackTrace();
|
||
throw new IllegalStateException("ReflectionNavigator.getInstance method is inaccessible");
|
||
} catch (SecurityException e) {
|
||
LOGGER.log(Level.FINE, "Unable to access ReflectionNavigator.getInstance", e);
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/api/Utils.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/api/Utils.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -54,17 +54,20 @@
|
||
|
||
static { // we statically initializing REFLECTION_NAVIGATOR property
|
||
try {
|
||
- Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
|
||
- //noinspection unchecked
|
||
- final Method getInstance = refNav.getDeclaredMethod("getInstance");
|
||
+ final Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
|
||
|
||
// requires accessClassInPackage privilege
|
||
- AccessController.doPrivileged(
|
||
- new PrivilegedAction<Object>() {
|
||
+ final Method getInstance = AccessController.doPrivileged(
|
||
+ new PrivilegedAction<Method>() {
|
||
@Override
|
||
- public Object run() {
|
||
- getInstance.setAccessible(true);
|
||
- return null;
|
||
+ public Method run() {
|
||
+ try {
|
||
+ Method getInstance = refNav.getDeclaredMethod("getInstance");
|
||
+ getInstance.setAccessible(true);
|
||
+ return getInstance;
|
||
+ } catch (NoSuchMethodException e) {
|
||
+ throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
|
||
+ }
|
||
}
|
||
}
|
||
);
|
||
@@ -72,16 +75,10 @@
|
||
//noinspection unchecked
|
||
REFLECTION_NAVIGATOR = (Navigator<Type, Class, Field, Method>) getInstance.invoke(null);
|
||
} catch (ClassNotFoundException e) {
|
||
- e.printStackTrace();
|
||
throw new IllegalStateException("Can't find ReflectionNavigator class");
|
||
} catch (InvocationTargetException e) {
|
||
- e.printStackTrace();
|
||
throw new IllegalStateException("ReflectionNavigator.getInstance throws the exception");
|
||
- } catch (NoSuchMethodException e) {
|
||
- e.printStackTrace();
|
||
- throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
|
||
} catch (IllegalAccessException e) {
|
||
- e.printStackTrace();
|
||
throw new IllegalStateException("ReflectionNavigator.getInstance method is inaccessible");
|
||
} catch (SecurityException e) {
|
||
LOGGER.log(Level.FINE, "Unable to access ReflectionNavigator.getInstance", e);
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -40,6 +40,8 @@
|
||
import java.net.URI;
|
||
import java.net.URISyntaxException;
|
||
import java.net.URL;
|
||
+import java.security.AccessController;
|
||
+import java.security.PrivilegedAction;
|
||
import java.util.ArrayList;
|
||
import java.util.Calendar;
|
||
import java.util.Collections;
|
||
@@ -194,8 +196,15 @@
|
||
|
||
static {
|
||
|
||
- QName[] qnames = (System.getProperty(MAP_ANYURI_TO_URI) == null) ? new QName[] {
|
||
- createXS("string"),
|
||
+ String MAP_ANYURI_TO_URI_VALUE = AccessController.doPrivileged(
|
||
+ new PrivilegedAction<String>() {
|
||
+ @Override
|
||
+ public String run() {
|
||
+ return System.getProperty(MAP_ANYURI_TO_URI);
|
||
+ }
|
||
+ }
|
||
+ );
|
||
+ QName[] qnames = (MAP_ANYURI_TO_URI_VALUE == null) ? new QName[] { createXS("string"),
|
||
createXS("anySimpleType"),
|
||
createXS("normalizedString"),
|
||
createXS("anyURI"),
|
||
@@ -307,7 +316,7 @@
|
||
return v.toExternalForm();
|
||
}
|
||
});
|
||
- if (System.getProperty(MAP_ANYURI_TO_URI) == null) {
|
||
+ if (MAP_ANYURI_TO_URI_VALUE == null) {
|
||
secondaryList.add(
|
||
new StringImpl<URI>(URI.class, createXS("string")) {
|
||
public URI parse(CharSequence text) throws SAXException {
|
||
@@ -771,17 +780,18 @@
|
||
}
|
||
});
|
||
primaryList.add(
|
||
- new StringImpl<BigDecimal>(BigDecimal.class,
|
||
- createXS("decimal")
|
||
+ new StringImpl<BigDecimal>(BigDecimal.class,
|
||
+ createXS("decimal")
|
||
) {
|
||
- public BigDecimal parse(CharSequence text) {
|
||
- return DatatypeConverterImpl._parseDecimal(text.toString());
|
||
+ public BigDecimal parse(CharSequence text) {
|
||
+ return DatatypeConverterImpl._parseDecimal(text.toString());
|
||
+ }
|
||
+
|
||
+ public String print(BigDecimal v) {
|
||
+ return DatatypeConverterImpl._printDecimal(v);
|
||
+ }
|
||
}
|
||
-
|
||
- public String print(BigDecimal v) {
|
||
- return DatatypeConverterImpl._printDecimal(v);
|
||
- }
|
||
- });
|
||
+ );
|
||
primaryList.add(
|
||
new StringImpl<QName>(QName.class,
|
||
createXS("QName")
|
||
@@ -809,7 +819,7 @@
|
||
w.getNamespaceContext().declareNamespace(v.getNamespaceURI(),v.getPrefix(),false);
|
||
}
|
||
});
|
||
- if (System.getProperty(MAP_ANYURI_TO_URI) != null) {
|
||
+ if (MAP_ANYURI_TO_URI_VALUE != null) {
|
||
primaryList.add(
|
||
new StringImpl<URI>(URI.class, createXS("anyURI")) {
|
||
public URI parse(CharSequence text) throws SAXException {
|
||
@@ -827,16 +837,17 @@
|
||
});
|
||
}
|
||
primaryList.add(
|
||
- new StringImpl<Duration>(Duration.class, createXS("duration")) {
|
||
- public String print(Duration duration) {
|
||
- return duration.toString();
|
||
+ new StringImpl<Duration>(Duration.class, createXS("duration")) {
|
||
+ public String print(Duration duration) {
|
||
+ return duration.toString();
|
||
+ }
|
||
+
|
||
+ public Duration parse(CharSequence lexical) {
|
||
+ TODO.checkSpec("JSR222 Issue #42");
|
||
+ return DatatypeConverterImpl.getDatatypeFactory().newDuration(lexical.toString());
|
||
+ }
|
||
}
|
||
-
|
||
- public Duration parse(CharSequence lexical) {
|
||
- TODO.checkSpec("JSR222 Issue #42");
|
||
- return DatatypeConverterImpl.getDatatypeFactory().newDuration(lexical.toString());
|
||
- }
|
||
- });
|
||
+ );
|
||
primaryList.add(
|
||
new StringImpl<Void>(Void.class) {
|
||
// 'void' binding isn't defined by the spec, but when the JAX-RPC processes user-defined
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Utils.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Utils.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -54,17 +54,20 @@
|
||
|
||
static { // we statically initializing REFLECTION_NAVIGATOR property
|
||
try {
|
||
- Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
|
||
- //noinspection unchecked
|
||
- final Method getInstance = refNav.getDeclaredMethod("getInstance");
|
||
+ final Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
|
||
|
||
// requires accessClassInPackage privilege
|
||
- AccessController.doPrivileged(
|
||
- new PrivilegedAction<Object>() {
|
||
+ final Method getInstance = AccessController.doPrivileged(
|
||
+ new PrivilegedAction<Method>() {
|
||
@Override
|
||
- public Object run() {
|
||
- getInstance.setAccessible(true);
|
||
- return null;
|
||
+ public Method run() {
|
||
+ try {
|
||
+ Method getInstance = refNav.getDeclaredMethod("getInstance");
|
||
+ getInstance.setAccessible(true);
|
||
+ return getInstance;
|
||
+ } catch (NoSuchMethodException e) {
|
||
+ throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
|
||
+ }
|
||
}
|
||
}
|
||
);
|
||
@@ -72,16 +75,10 @@
|
||
//noinspection unchecked
|
||
REFLECTION_NAVIGATOR = (Navigator<Type, Class, Field, Method>) getInstance.invoke(null);
|
||
} catch (ClassNotFoundException e) {
|
||
- e.printStackTrace();
|
||
throw new IllegalStateException("Can't find ReflectionNavigator class");
|
||
} catch (InvocationTargetException e) {
|
||
- e.printStackTrace();
|
||
throw new IllegalStateException("ReflectionNavigator.getInstance throws the exception");
|
||
- } catch (NoSuchMethodException e) {
|
||
- e.printStackTrace();
|
||
- throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
|
||
} catch (IllegalAccessException e) {
|
||
- e.printStackTrace();
|
||
throw new IllegalStateException("ReflectionNavigator.getInstance method is inaccessible");
|
||
} catch (SecurityException e) {
|
||
LOGGER.log(Level.FINE, "Unable to access ReflectionNavigator.getInstance", e);
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ArrayBeanInfoImpl.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ArrayBeanInfoImpl.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -79,19 +79,19 @@
|
||
|
||
@Override
|
||
public void startElement(UnmarshallingContext.State state, TagName ea) {
|
||
- state.target = new ArrayList();
|
||
+ state.setTarget(new ArrayList());
|
||
}
|
||
|
||
@Override
|
||
public void leaveElement(UnmarshallingContext.State state, TagName ea) {
|
||
- state.target = toArray((List)state.target);
|
||
+ state.setTarget(toArray((List)state.getTarget()));
|
||
}
|
||
|
||
@Override
|
||
public void childElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
|
||
if(ea.matches("","item")) {
|
||
- state.loader = itemLoader;
|
||
- state.receiver = this;
|
||
+ state.setLoader(itemLoader);
|
||
+ state.setReceiver(this);
|
||
} else {
|
||
super.childElement(state,ea);
|
||
}
|
||
@@ -103,9 +103,9 @@
|
||
}
|
||
|
||
public void receive(UnmarshallingContext.State state, Object o) {
|
||
- ((List)state.target).add(o);
|
||
+ ((List)state.getTarget()).add(o);
|
||
}
|
||
- };
|
||
+ }
|
||
|
||
protected Object toArray( List list ) {
|
||
int len = list.size();
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ContentHandlerAdaptor.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ContentHandlerAdaptor.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -25,10 +25,6 @@
|
||
|
||
package com.sun.xml.internal.bind.v2.runtime;
|
||
|
||
-import java.io.IOException;
|
||
-
|
||
-import javax.xml.stream.XMLStreamException;
|
||
-
|
||
import com.sun.istack.internal.FinalArrayList;
|
||
import com.sun.istack.internal.SAXException2;
|
||
|
||
@@ -36,6 +32,9 @@
|
||
import org.xml.sax.SAXException;
|
||
import org.xml.sax.helpers.DefaultHandler;
|
||
|
||
+import javax.xml.stream.XMLStreamException;
|
||
+import java.io.IOException;
|
||
+
|
||
/**
|
||
* Receives SAX2 events and send the equivalent events to
|
||
* {@link XMLSerializer}
|
||
@@ -70,14 +69,14 @@
|
||
private boolean containsPrefixMapping(String prefix, String uri) {
|
||
for( int i=0; i<prefixMap.size(); i+=2 ) {
|
||
if(prefixMap.get(i).equals(prefix)
|
||
- && prefixMap.get(i+1).equals(uri))
|
||
+ && prefixMap.get(i+1).equals(uri))
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
public void startElement(String namespaceURI, String localName, String qName, Attributes atts)
|
||
- throws SAXException {
|
||
+ throws SAXException {
|
||
try {
|
||
flushText();
|
||
|
||
@@ -92,13 +91,13 @@
|
||
serializer.startElement(namespaceURI,localName, p,null);
|
||
|
||
// declare namespace events
|
||
- for( int i=0; i<prefixMap.size(); i+=2 ) {
|
||
+ for (int i = 0; i < prefixMap.size(); i += 2) {
|
||
// forcibly set this binding, instead of using declareNsUri.
|
||
// this guarantees that namespaces used in DOM will show up
|
||
// as-is in the marshalled output (instead of reassigned to something else,
|
||
// which may happen if you'd use declareNsUri.)
|
||
serializer.getNamespaceContext().force(
|
||
- prefixMap.get(i+1), prefixMap.get(i) );
|
||
+ prefixMap.get(i + 1), prefixMap.get(i));
|
||
}
|
||
// make sure namespaces needed by attributes are bound
|
||
for( int i=0; i<len; i++ ) {
|
||
@@ -108,7 +107,7 @@
|
||
String prefix = getPrefix(qname);
|
||
|
||
serializer.getNamespaceContext().declareNamespace(
|
||
- atts.getURI(i), prefix, true );
|
||
+ atts.getURI(i), prefix, true );
|
||
}
|
||
|
||
serializer.endNamespaceDecls(null);
|
||
@@ -128,9 +127,10 @@
|
||
}
|
||
}
|
||
|
||
+ // make sure namespaces needed by attributes are bound
|
||
private String getPrefix(String qname) {
|
||
int idx = qname.indexOf(':');
|
||
- String prefix = (idx==-1)?qname:qname.substring(0,idx);
|
||
+ String prefix = (idx == -1) ? "" : qname.substring(0, idx);
|
||
return prefix;
|
||
}
|
||
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ElementBeanInfoImpl.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ElementBeanInfoImpl.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -208,8 +208,8 @@
|
||
|
||
@Override
|
||
public final void startElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
|
||
- state.loader = core;
|
||
- state.intercepter = this;
|
||
+ state.setLoader(core);
|
||
+ state.setIntercepter(this);
|
||
|
||
// TODO: make sure there aren't too many duplicate of this code
|
||
// create the object to unmarshal
|
||
@@ -231,21 +231,21 @@
|
||
fireBeforeUnmarshal(ElementBeanInfoImpl.this, child, state);
|
||
|
||
context.recordOuterPeer(child);
|
||
- UnmarshallingContext.State p = state.prev;
|
||
- p.backup = p.target;
|
||
- p.target = child;
|
||
+ UnmarshallingContext.State p = state.getPrev();
|
||
+ p.setBackup(p.getTarget());
|
||
+ p.setTarget(child);
|
||
|
||
core.startElement(state,ea);
|
||
}
|
||
|
||
public Object intercept(UnmarshallingContext.State state, Object o) throws SAXException {
|
||
- JAXBElement e = (JAXBElement)state.target;
|
||
- state.target = state.backup;
|
||
- state.backup = null;
|
||
+ JAXBElement e = (JAXBElement)state.getTarget();
|
||
+ state.setTarget(state.getBackup());
|
||
+ state.setBackup(null);
|
||
|
||
- if (state.nil) {
|
||
+ if (state.isNil()) {
|
||
e.setNil(true);
|
||
- state.nil = false;
|
||
+ state.setNil(false);
|
||
}
|
||
|
||
if(o!=null)
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/Utils.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/Utils.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -54,17 +54,20 @@
|
||
|
||
static { // we statically initializing REFLECTION_NAVIGATOR property
|
||
try {
|
||
- Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
|
||
- //noinspection unchecked
|
||
- final Method getInstance = refNav.getDeclaredMethod("getInstance");
|
||
+ final Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
|
||
|
||
// requires accessClassInPackage privilege
|
||
- AccessController.doPrivileged(
|
||
- new PrivilegedAction<Object>() {
|
||
+ final Method getInstance = AccessController.doPrivileged(
|
||
+ new PrivilegedAction<Method>() {
|
||
@Override
|
||
- public Object run() {
|
||
- getInstance.setAccessible(true);
|
||
- return null;
|
||
+ public Method run() {
|
||
+ try {
|
||
+ Method getInstance = refNav.getDeclaredMethod("getInstance");
|
||
+ getInstance.setAccessible(true);
|
||
+ return getInstance;
|
||
+ } catch (NoSuchMethodException e) {
|
||
+ throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
|
||
+ }
|
||
}
|
||
}
|
||
);
|
||
@@ -72,16 +75,10 @@
|
||
//noinspection unchecked
|
||
REFLECTION_NAVIGATOR = (Navigator<Type, Class, Field, Method>) getInstance.invoke(null);
|
||
} catch (ClassNotFoundException e) {
|
||
- e.printStackTrace();
|
||
throw new IllegalStateException("Can't find ReflectionNavigator class");
|
||
} catch (InvocationTargetException e) {
|
||
- e.printStackTrace();
|
||
throw new IllegalStateException("ReflectionNavigator.getInstance throws the exception");
|
||
- } catch (NoSuchMethodException e) {
|
||
- e.printStackTrace();
|
||
- throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
|
||
} catch (IllegalAccessException e) {
|
||
- e.printStackTrace();
|
||
throw new IllegalStateException("ReflectionNavigator.getInstance method is inaccessible");
|
||
} catch (SecurityException e) {
|
||
LOGGER.log(Level.FINE, "Unable to access ReflectionNavigator.getInstance", e);
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ValueListBeanInfoImpl.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ValueListBeanInfoImpl.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -90,7 +90,7 @@
|
||
idx = p;
|
||
}
|
||
|
||
- state.target = toArray(r);
|
||
+ state.setTarget(toArray(r));
|
||
}
|
||
};
|
||
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/ArrayERProperty.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/ArrayERProperty.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -98,7 +98,7 @@
|
||
UnmarshallingContext context = state.getContext();
|
||
context.startScope(1);
|
||
// inherit the target so that our children can access its target
|
||
- state.target = state.prev.target;
|
||
+ state.setTarget(state.getPrev().getTarget());
|
||
|
||
// start it now, so that even if there's no children we can still return empty collection
|
||
context.getScope(0).start(acc,lister);
|
||
@@ -116,8 +116,8 @@
|
||
super.childElement(state,ea);
|
||
return;
|
||
}
|
||
- state.loader = child.loader;
|
||
- state.receiver = child.receiver;
|
||
+ state.setLoader(child.loader);
|
||
+ state.setReceiver(child.receiver);
|
||
}
|
||
|
||
@Override
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/SingleMapNodeProperty.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/SingleMapNodeProperty.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -147,17 +147,17 @@
|
||
public void startElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
|
||
// create or obtain the Map object
|
||
try {
|
||
- target.set((BeanT)state.prev.target);
|
||
+ target.set((BeanT)state.getPrev().getTarget());
|
||
map.set(acc.get(target.get()));
|
||
if(map.get() == null) {
|
||
map.set(ClassFactory.create(mapImplClass));
|
||
}
|
||
map.get().clear();
|
||
- state.target = map.get();
|
||
+ state.setTarget(map.get());
|
||
} catch (AccessorException e) {
|
||
// recover from error by setting a dummy Map that receives and discards the values
|
||
handleGenericException(e,true);
|
||
- state.target = new HashMap();
|
||
+ state.setTarget(new HashMap());
|
||
}
|
||
}
|
||
|
||
@@ -175,7 +175,7 @@
|
||
@Override
|
||
public void childElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
|
||
if(ea.matches(entryTag)) {
|
||
- state.loader = entryLoader;
|
||
+ state.setLoader(entryLoader);
|
||
} else {
|
||
super.childElement(state,ea);
|
||
}
|
||
@@ -195,26 +195,26 @@
|
||
private final Loader entryLoader = new Loader(false) {
|
||
@Override
|
||
public void startElement(UnmarshallingContext.State state, TagName ea) {
|
||
- state.target = new Object[2]; // this is inefficient
|
||
+ state.setTarget(new Object[2]); // this is inefficient
|
||
}
|
||
|
||
@Override
|
||
public void leaveElement(UnmarshallingContext.State state, TagName ea) {
|
||
- Object[] keyValue = (Object[])state.target;
|
||
- Map map = (Map) state.prev.target;
|
||
+ Object[] keyValue = (Object[])state.getTarget();
|
||
+ Map map = (Map) state.getPrev().getTarget();
|
||
map.put(keyValue[0],keyValue[1]);
|
||
}
|
||
|
||
@Override
|
||
public void childElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
|
||
if(ea.matches(keyTag)) {
|
||
- state.loader = keyLoader;
|
||
- state.receiver = keyReceiver;
|
||
+ state.setLoader(keyLoader);
|
||
+ state.setReceiver(keyReceiver);
|
||
return;
|
||
}
|
||
if(ea.matches(valueTag)) {
|
||
- state.loader = valueLoader;
|
||
- state.receiver = valueReceiver;
|
||
+ state.setLoader(valueLoader);
|
||
+ state.setReceiver(valueReceiver);
|
||
return;
|
||
}
|
||
super.childElement(state,ea);
|
||
@@ -232,7 +232,7 @@
|
||
this.index = index;
|
||
}
|
||
public void receive(UnmarshallingContext.State state, Object o) {
|
||
- ((Object[])state.target)[index] = o;
|
||
+ ((Object[])state.getTarget())[index] = o;
|
||
}
|
||
}
|
||
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/Utils.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/Utils.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -54,17 +54,20 @@
|
||
|
||
static { // we statically initializing REFLECTION_NAVIGATOR property
|
||
try {
|
||
- Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
|
||
- //noinspection unchecked
|
||
- final Method getInstance = refNav.getDeclaredMethod("getInstance");
|
||
+ final Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
|
||
|
||
// requires accessClassInPackage privilege
|
||
- AccessController.doPrivileged(
|
||
- new PrivilegedAction<Object>() {
|
||
+ final Method getInstance = AccessController.doPrivileged(
|
||
+ new PrivilegedAction<Method>() {
|
||
@Override
|
||
- public Object run() {
|
||
- getInstance.setAccessible(true);
|
||
- return null;
|
||
+ public Method run() {
|
||
+ try {
|
||
+ Method getInstance = refNav.getDeclaredMethod("getInstance");
|
||
+ getInstance.setAccessible(true);
|
||
+ return getInstance;
|
||
+ } catch (NoSuchMethodException e) {
|
||
+ throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
|
||
+ }
|
||
}
|
||
}
|
||
);
|
||
@@ -72,16 +75,10 @@
|
||
//noinspection unchecked
|
||
REFLECTION_NAVIGATOR = (Navigator<Type, Class, Field, Method>) getInstance.invoke(null);
|
||
} catch (ClassNotFoundException e) {
|
||
- e.printStackTrace();
|
||
throw new IllegalStateException("Can't find ReflectionNavigator class");
|
||
} catch (InvocationTargetException e) {
|
||
- e.printStackTrace();
|
||
throw new IllegalStateException("ReflectionNavigator.getInstance throws the exception");
|
||
- } catch (NoSuchMethodException e) {
|
||
- e.printStackTrace();
|
||
- throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
|
||
} catch (IllegalAccessException e) {
|
||
- e.printStackTrace();
|
||
throw new IllegalStateException("ReflectionNavigator.getInstance method is inaccessible");
|
||
} catch (SecurityException e) {
|
||
LOGGER.log(Level.FINE, "Unable to access ReflectionNavigator.getInstance", e);
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Accessor.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Accessor.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -152,7 +152,7 @@
|
||
|
||
public void receive(UnmarshallingContext.State state, Object o) throws SAXException {
|
||
try {
|
||
- set((BeanT) state.target, (ValueT) o);
|
||
+ set((BeanT) state.getTarget(), (ValueT) o);
|
||
} catch (AccessorException e) {
|
||
Loader.handleGenericException(e, true);
|
||
} catch (IllegalAccessError iae) {
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Utils.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Utils.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -54,17 +54,20 @@
|
||
|
||
static { // we statically initializing REFLECTION_NAVIGATOR property
|
||
try {
|
||
- Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
|
||
- //noinspection unchecked
|
||
- final Method getInstance = refNav.getDeclaredMethod("getInstance");
|
||
+ final Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
|
||
|
||
// requires accessClassInPackage privilege
|
||
- AccessController.doPrivileged(
|
||
- new PrivilegedAction<Object>() {
|
||
+ final Method getInstance = AccessController.doPrivileged(
|
||
+ new PrivilegedAction<Method>() {
|
||
@Override
|
||
- public Object run() {
|
||
- getInstance.setAccessible(true);
|
||
- return null;
|
||
+ public Method run() {
|
||
+ try {
|
||
+ Method getInstance = refNav.getDeclaredMethod("getInstance");
|
||
+ getInstance.setAccessible(true);
|
||
+ return getInstance;
|
||
+ } catch (NoSuchMethodException e) {
|
||
+ throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
|
||
+ }
|
||
}
|
||
}
|
||
);
|
||
@@ -72,16 +75,10 @@
|
||
//noinspection unchecked
|
||
REFLECTION_NAVIGATOR = (Navigator<Type, Class, Field, Method>) getInstance.invoke(null);
|
||
} catch (ClassNotFoundException e) {
|
||
- e.printStackTrace();
|
||
throw new IllegalStateException("Can't find ReflectionNavigator class");
|
||
} catch (InvocationTargetException e) {
|
||
- e.printStackTrace();
|
||
throw new IllegalStateException("ReflectionNavigator.getInstance throws the exception");
|
||
- } catch (NoSuchMethodException e) {
|
||
- e.printStackTrace();
|
||
- throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
|
||
} catch (IllegalAccessException e) {
|
||
- e.printStackTrace();
|
||
throw new IllegalStateException("ReflectionNavigator.getInstance method is inaccessible");
|
||
} catch (SecurityException e) {
|
||
LOGGER.log(Level.FINE, "Unable to access ReflectionNavigator.getInstance", e);
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/DefaultValueLoaderDecorator.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/DefaultValueLoaderDecorator.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -44,10 +44,10 @@
|
||
@Override
|
||
public void startElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
|
||
// install the default value, but don't override the one given by the parent loader
|
||
- if(state.elementDefaultValue==null)
|
||
- state.elementDefaultValue = defaultValue;
|
||
+ if(state.getElementDefaultValue() == null)
|
||
+ state.setElementDefaultValue(defaultValue);
|
||
|
||
- state.loader = l;
|
||
+ state.setLoader(l);
|
||
l.startElement(state,ea);
|
||
}
|
||
}
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/Discarder.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/Discarder.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -44,8 +44,8 @@
|
||
|
||
@Override
|
||
public void childElement(UnmarshallingContext.State state, TagName ea) {
|
||
- state.target = null;
|
||
+ state.setTarget(null);
|
||
// registering this allows the discarder to process the whole subtree.
|
||
- state.loader = this;
|
||
+ state.setLoader(this);
|
||
}
|
||
}
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/DomLoader.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/DomLoader.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -98,10 +98,10 @@
|
||
@Override
|
||
public void startElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
|
||
UnmarshallingContext context = state.getContext();
|
||
- if (state.target == null)
|
||
- state.target = new State(context);
|
||
+ if (state.getTarget() == null)
|
||
+ state.setTarget(new State(context));
|
||
|
||
- State s = (State) state.target;
|
||
+ State s = (State) state.getTarget();
|
||
try {
|
||
s.declarePrefixes(context, context.getNewlyDeclaredPrefixes());
|
||
s.handler.startElement(ea.uri, ea.local, ea.getQname(), ea.atts);
|
||
@@ -113,10 +113,10 @@
|
||
|
||
@Override
|
||
public void childElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
|
||
- state.loader = this;
|
||
- State s = (State) state.prev.target;
|
||
+ state.setLoader(this);
|
||
+ State s = (State) state.getPrev().getTarget();
|
||
s.depth++;
|
||
- state.target = s;
|
||
+ state.setTarget(s);
|
||
}
|
||
|
||
@Override
|
||
@@ -124,7 +124,7 @@
|
||
if(text.length()==0)
|
||
return; // there's no point in creating an empty Text node in DOM.
|
||
try {
|
||
- State s = (State) state.target;
|
||
+ State s = (State) state.getTarget();
|
||
s.handler.characters(text.toString().toCharArray(),0,text.length());
|
||
} catch( SAXException e ) {
|
||
state.getContext().handleError(e);
|
||
@@ -134,7 +134,7 @@
|
||
|
||
@Override
|
||
public void leaveElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
|
||
- State s = (State) state.target;
|
||
+ State s = (State) state.getTarget();
|
||
UnmarshallingContext context = state.getContext();
|
||
|
||
try {
|
||
@@ -156,7 +156,7 @@
|
||
}
|
||
|
||
// we are done
|
||
- state.target = s.getElement();
|
||
+ state.setTarget(s.getElement());
|
||
}
|
||
}
|
||
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/LeafPropertyLoader.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/LeafPropertyLoader.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -47,7 +47,7 @@
|
||
|
||
public void text(UnmarshallingContext.State state, CharSequence text) throws SAXException {
|
||
try {
|
||
- xacc.parse(state.prev.target,text);
|
||
+ xacc.parse(state.getPrev().getTarget(), text);
|
||
} catch (AccessorException e) {
|
||
handleGenericException(e,true);
|
||
} catch (RuntimeException e) {
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/LeafPropertyXsiLoader.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/LeafPropertyXsiLoader.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -55,9 +55,9 @@
|
||
|
||
@Override
|
||
public void startElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
|
||
- state.loader = selectLoader(state, ea);
|
||
-
|
||
- state.loader.startElement(state, ea);
|
||
+ final Loader loader = selectLoader(state, ea);
|
||
+ state.setLoader(loader);
|
||
+ loader.startElement(state, ea);
|
||
}
|
||
|
||
protected Loader selectLoader(UnmarshallingContext.State state, TagName ea) throws SAXException {
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/Loader.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/Loader.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -88,8 +88,8 @@
|
||
public void childElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
|
||
// notify the error, then recover by ignoring the whole element.
|
||
reportUnexpectedChildElement(ea, true);
|
||
- state.loader = Discarder.INSTANCE;
|
||
- state.receiver = null;
|
||
+ state.setLoader(Discarder.INSTANCE);
|
||
+ state.setReceiver(null);
|
||
}
|
||
|
||
@SuppressWarnings({"StringEquality"})
|
||
@@ -191,10 +191,10 @@
|
||
UnmarshallingContext context = state.getContext();
|
||
Unmarshaller.Listener listener = context.parent.getListener();
|
||
if(beanInfo.hasBeforeUnmarshalMethod()) {
|
||
- beanInfo.invokeBeforeUnmarshalMethod(context.parent, child, state.prev.target);
|
||
+ beanInfo.invokeBeforeUnmarshalMethod(context.parent, child, state.getPrev().getTarget());
|
||
}
|
||
if(listener!=null) {
|
||
- listener.beforeUnmarshal(child, state.prev.target);
|
||
+ listener.beforeUnmarshal(child, state.getPrev().getTarget());
|
||
}
|
||
}
|
||
}
|
||
@@ -211,10 +211,10 @@
|
||
UnmarshallingContext context = state.getContext();
|
||
Unmarshaller.Listener listener = context.parent.getListener();
|
||
if(beanInfo.hasAfterUnmarshalMethod()) {
|
||
- beanInfo.invokeAfterUnmarshalMethod(context.parent, child, state.target);
|
||
+ beanInfo.invokeAfterUnmarshalMethod(context.parent, child, state.getTarget());
|
||
}
|
||
if(listener!=null)
|
||
- listener.afterUnmarshal(child, state.target);
|
||
+ listener.afterUnmarshal(child, state.getTarget());
|
||
}
|
||
}
|
||
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/ProxyLoader.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/ProxyLoader.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -41,7 +41,7 @@
|
||
@Override
|
||
public final void startElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
|
||
Loader loader = selectLoader(state,ea);
|
||
- state.loader = loader;
|
||
+ state.setLoader(loader);
|
||
loader.startElement(state,ea);
|
||
}
|
||
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/SAXConnector.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/SAXConnector.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -116,17 +116,7 @@
|
||
if( qname==null || qname.length()==0 )
|
||
qname=local;
|
||
|
||
-
|
||
- boolean ignorable = true;
|
||
- StructureLoader sl;
|
||
-
|
||
- // not null only if element content is processed (StructureLoader is used)
|
||
- // ugly
|
||
- if((sl = this.context.getStructureLoader()) != null) {
|
||
- ignorable = ((ClassBeanInfoImpl)sl.getBeanInfo()).hasElementOnlyContentModel();
|
||
- }
|
||
-
|
||
- processText(ignorable);
|
||
+ processText(!context.getCurrentState().isMixed());
|
||
|
||
tagName.uri = uri;
|
||
tagName.local = local;
|
||
@@ -162,7 +152,7 @@
|
||
}
|
||
|
||
private void processText( boolean ignorable ) throws SAXException {
|
||
- if( predictor.expectText() && (!ignorable || !WhiteSpaceProcessor.isWhiteSpace(buffer)))
|
||
+ if (predictor.expectText() && (!ignorable || !WhiteSpaceProcessor.isWhiteSpace(buffer)))
|
||
next.text(buffer);
|
||
buffer.setLength(0);
|
||
}
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/Scope.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/Scope.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -97,7 +97,7 @@
|
||
public void add( Accessor<BeanT,PropT> acc, Lister<BeanT,PropT,ItemT,PackT> lister, ItemT value) throws SAXException{
|
||
try {
|
||
if(!hasStarted()) {
|
||
- this.bean = (BeanT)context.getCurrentState().target;
|
||
+ this.bean = (BeanT)context.getCurrentState().getTarget();
|
||
this.acc = acc;
|
||
this.lister = lister;
|
||
this.pack = lister.startPacking(bean,acc);
|
||
@@ -121,7 +121,7 @@
|
||
public void start( Accessor<BeanT,PropT> acc, Lister<BeanT,PropT,ItemT,PackT> lister) throws SAXException{
|
||
try {
|
||
if(!hasStarted()) {
|
||
- this.bean = (BeanT)context.getCurrentState().target;
|
||
+ this.bean = (BeanT)context.getCurrentState().getTarget();
|
||
this.acc = acc;
|
||
this.lister = lister;
|
||
this.pack = lister.startPacking(bean,acc);
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/StAXStreamConnector.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/StAXStreamConnector.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -70,7 +70,7 @@
|
||
// Quick hack until SJSXP fixes 6270116
|
||
boolean isZephyr = readerClass.getName().equals("com.sun.xml.internal.stream.XMLReaderImpl");
|
||
if (getBoolProp(reader,"org.codehaus.stax2.internNames") &&
|
||
- getBoolProp(reader,"org.codehaus.stax2.internNsUris"))
|
||
+ getBoolProp(reader,"org.codehaus.stax2.internNsUris"))
|
||
; // no need for interning
|
||
else
|
||
if (isZephyr)
|
||
@@ -219,8 +219,8 @@
|
||
int nsCount = staxStreamReader.getNamespaceCount();
|
||
for (int i = 0; i < nsCount; i++) {
|
||
visitor.startPrefixMapping(
|
||
- fixNull(staxStreamReader.getNamespacePrefix(i)),
|
||
- fixNull(staxStreamReader.getNamespaceURI(i)));
|
||
+ fixNull(staxStreamReader.getNamespacePrefix(i)),
|
||
+ fixNull(staxStreamReader.getNamespaceURI(i)));
|
||
}
|
||
|
||
// fire startElement
|
||
@@ -310,13 +310,13 @@
|
||
protected void handleCharacters() throws XMLStreamException, SAXException {
|
||
if( predictor.expectText() )
|
||
buffer.append(
|
||
- staxStreamReader.getTextCharacters(),
|
||
- staxStreamReader.getTextStart(),
|
||
- staxStreamReader.getTextLength() );
|
||
+ staxStreamReader.getTextCharacters(),
|
||
+ staxStreamReader.getTextStart(),
|
||
+ staxStreamReader.getTextLength() );
|
||
}
|
||
|
||
private void processText( boolean ignorable ) throws SAXException {
|
||
- if( predictor.expectText() && (!ignorable || !WhiteSpaceProcessor.isWhiteSpace(buffer))) {
|
||
+ if( predictor.expectText() && (!ignorable || !WhiteSpaceProcessor.isWhiteSpace(buffer) || context.getCurrentState().isMixed())) {
|
||
if(textReported) {
|
||
textReported = false;
|
||
} else {
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/StructureLoader.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/StructureLoader.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -171,7 +171,7 @@
|
||
|
||
context.recordInnerPeer(child);
|
||
|
||
- state.target = child;
|
||
+ state.setTarget(child);
|
||
|
||
fireBeforeUnmarshal(beanInfo, child, state);
|
||
|
||
@@ -196,7 +196,7 @@
|
||
String qname = atts.getQName(i);
|
||
if(atts.getURI(i).equals(WellKnownNamespace.XML_SCHEMA_INSTANCE))
|
||
continue; // xsi:* attributes are meant to be processed by us, not by user apps.
|
||
- Object o = state.target;
|
||
+ Object o = state.getTarget();
|
||
Map<QName,String> map = attCatchAll.get(o);
|
||
if(map==null) {
|
||
// TODO: use ClassFactory.inferImplClass(sig,knownImplClasses)
|
||
@@ -238,8 +238,8 @@
|
||
}
|
||
}
|
||
|
||
- state.loader = child.loader;
|
||
- state.receiver = child.receiver;
|
||
+ state.setLoader(child.loader);
|
||
+ state.setReceiver(child.receiver);
|
||
}
|
||
|
||
@Override
|
||
@@ -261,7 +261,7 @@
|
||
@Override
|
||
public void leaveElement(UnmarshallingContext.State state, TagName ea) throws SAXException {
|
||
state.getContext().endScope(frameSize);
|
||
- fireAfterUnmarshal(beanInfo, state.target, state.prev);
|
||
+ fireAfterUnmarshal(beanInfo, state.getTarget(), state.getPrev());
|
||
}
|
||
|
||
private static final QNameMap<TransducedAccessor> EMPTY = new QNameMap<TransducedAccessor>();
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/TextLoader.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/TextLoader.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -51,7 +51,7 @@
|
||
|
||
public void text(UnmarshallingContext.State state, CharSequence text) throws SAXException {
|
||
try {
|
||
- state.target = xducer.parse(text);
|
||
+ state.setTarget(xducer.parse(text));
|
||
} catch (AccessorException e) {
|
||
handleGenericException(e,true);
|
||
} catch (RuntimeException e) {
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/UnmarshallingContext.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/UnmarshallingContext.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -183,20 +183,19 @@
|
||
/**
|
||
* Loader that owns this element.
|
||
*/
|
||
- public Loader loader;
|
||
+ private Loader loader;
|
||
/**
|
||
* Once {@link #loader} is completed, this receiver
|
||
* receives the result.
|
||
*/
|
||
- public Receiver receiver;
|
||
+ private Receiver receiver;
|
||
|
||
- public Intercepter intercepter;
|
||
-
|
||
+ private Intercepter intercepter;
|
||
|
||
/**
|
||
* Object being unmarshalled by this {@link #loader}.
|
||
*/
|
||
- public Object target;
|
||
+ private Object target;
|
||
|
||
/**
|
||
* Hack for making JAXBElement unmarshalling work.
|
||
@@ -225,7 +224,7 @@
|
||
* @see ElementBeanInfoImpl.IntercepterLoader#startElement(State, TagName)
|
||
* @see ElementBeanInfoImpl.IntercepterLoader#intercept(State, Object)
|
||
*/
|
||
- public Object backup;
|
||
+ private Object backup;
|
||
|
||
/**
|
||
* Number of {@link UnmarshallingContext#nsBind}s declared thus far.
|
||
@@ -241,17 +240,22 @@
|
||
* or by a child {@link Loader} when
|
||
* {@link Loader#startElement(State, TagName)} is called.
|
||
*/
|
||
- public String elementDefaultValue;
|
||
+ private String elementDefaultValue;
|
||
|
||
/**
|
||
* {@link State} for the parent element
|
||
*
|
||
* {@link State} objects form a doubly linked list.
|
||
*/
|
||
- public State prev;
|
||
+ private State prev;
|
||
private State next;
|
||
|
||
- public boolean nil = false;
|
||
+ private boolean nil = false;
|
||
+
|
||
+ /**
|
||
+ * specifies that we are working with mixed content
|
||
+ */
|
||
+ private boolean mixed = false;
|
||
|
||
/**
|
||
* Gets the context.
|
||
@@ -262,13 +266,17 @@
|
||
|
||
private State(State prev) {
|
||
this.prev = prev;
|
||
- if(prev!=null)
|
||
+ if(prev!=null) {
|
||
prev.next = this;
|
||
+ if (prev.mixed) // parent is in mixed mode
|
||
+ this.mixed = true;
|
||
+ }
|
||
}
|
||
|
||
private void push() {
|
||
- if(next==null)
|
||
- allocateMoreStates();
|
||
+ if(next==null) {
|
||
+ next = new State(this);
|
||
+ }
|
||
State n = next;
|
||
n.numNsDecl = nsLen;
|
||
current = n;
|
||
@@ -278,11 +286,71 @@
|
||
assert prev!=null;
|
||
loader = null;
|
||
nil = false;
|
||
+ mixed = false;
|
||
receiver = null;
|
||
intercepter = null;
|
||
elementDefaultValue = null;
|
||
target = null;
|
||
current = prev;
|
||
+ next = null;
|
||
+ }
|
||
+
|
||
+ public boolean isMixed() {
|
||
+ return mixed;
|
||
+ }
|
||
+
|
||
+ public Object getTarget() {
|
||
+ return target;
|
||
+ }
|
||
+
|
||
+ public void setLoader(Loader loader) {
|
||
+ if (loader instanceof StructureLoader) // set mixed mode
|
||
+ mixed = !((StructureLoader)loader).getBeanInfo().hasElementOnlyContentModel();
|
||
+ this.loader = loader;
|
||
+ }
|
||
+
|
||
+ public void setReceiver(Receiver receiver) {
|
||
+ this.receiver = receiver;
|
||
+ }
|
||
+
|
||
+ public State getPrev() {
|
||
+ return prev;
|
||
+ }
|
||
+
|
||
+ public void setIntercepter(Intercepter intercepter) {
|
||
+ this.intercepter = intercepter;
|
||
+ }
|
||
+
|
||
+ public void setBackup(Object backup) {
|
||
+ this.backup = backup;
|
||
+ }
|
||
+
|
||
+ public void setTarget(Object target) {
|
||
+ this.target = target;
|
||
+ }
|
||
+
|
||
+ public Object getBackup() {
|
||
+ return backup;
|
||
+ }
|
||
+
|
||
+ public boolean isNil() {
|
||
+ return nil;
|
||
+ }
|
||
+
|
||
+ public void setNil(boolean nil) {
|
||
+ this.nil = nil;
|
||
+ }
|
||
+
|
||
+ public Loader getLoader() {
|
||
+ return loader;
|
||
+ }
|
||
+
|
||
+ public String getElementDefaultValue() {
|
||
+ return elementDefaultValue;
|
||
+ }
|
||
+
|
||
+ public void setElementDefaultValue(String elementDefaultValue) {
|
||
+ this.elementDefaultValue = elementDefaultValue;
|
||
}
|
||
}
|
||
|
||
@@ -322,7 +390,6 @@
|
||
this.parent = _parent;
|
||
this.assoc = assoc;
|
||
this.root = this.current = new State(null);
|
||
- allocateMoreStates();
|
||
}
|
||
|
||
public void reset(InfosetScanner scanner,boolean isInplaceMode, JaxBeanInfo expectedType, IDResolver idResolver) {
|
||
@@ -369,22 +436,6 @@
|
||
return null;
|
||
}
|
||
|
||
- /**
|
||
- * Allocates a few more {@link State}s.
|
||
- *
|
||
- * Allocating multiple {@link State}s at once allows those objects
|
||
- * to be allocated near each other, which reduces the working set
|
||
- * of CPU. It improves the chance the relevant data is in the cache.
|
||
- */
|
||
- private void allocateMoreStates() {
|
||
- // this method should be used only when we run out of a state.
|
||
- assert current.next==null;
|
||
-
|
||
- State s = current;
|
||
- for( int i=0; i<8; i++ )
|
||
- s = new State(s);
|
||
- }
|
||
-
|
||
public void clearStates() {
|
||
State last = current;
|
||
while (last.next != null) last = last.next;
|
||
@@ -487,16 +538,15 @@
|
||
}
|
||
|
||
public void text(CharSequence pcdata) throws SAXException {
|
||
- State cur = current;
|
||
pushCoordinator();
|
||
try {
|
||
- if(cur.elementDefaultValue!=null) {
|
||
- if(pcdata.length()==0) {
|
||
+ if (current.elementDefaultValue != null) {
|
||
+ if (pcdata.length() == 0) {
|
||
// send the default value into the unmarshaller instead
|
||
- pcdata = cur.elementDefaultValue;
|
||
+ pcdata = current.elementDefaultValue;
|
||
}
|
||
}
|
||
- cur.loader.text(cur,pcdata);
|
||
+ current.loader.text(current, pcdata);
|
||
} finally {
|
||
popCoordinator();
|
||
}
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/ValuePropertyLoader.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/ValuePropertyLoader.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -49,18 +49,17 @@
|
||
|
||
public void text(UnmarshallingContext.State state, CharSequence text) throws SAXException {
|
||
try {
|
||
- xacc.parse(state.target,text);
|
||
+ xacc.parse(state.getTarget(),text);
|
||
} catch (AccessorException e) {
|
||
handleGenericException(e,true);
|
||
} catch (RuntimeException e) {
|
||
- if(state.prev != null) {
|
||
- if(state.prev.target instanceof JAXBElement) {
|
||
- ; // do nothing - issue 601 - don't report exceptions like
|
||
- // NumberFormatException when unmarshalling "nillable" element
|
||
- // (I suppose JAXBElement indicates this
|
||
- } else {
|
||
+ if(state.getPrev() != null) {
|
||
+ if (!(state.getPrev().getTarget() instanceof JAXBElement))
|
||
handleParseConversionException(state,e);
|
||
- }
|
||
+ // else
|
||
+ // do nothing - issue 601 - don't report exceptions like
|
||
+ // NumberFormatException when unmarshalling "nillable" element
|
||
+ // (I suppose JAXBElement indicates this
|
||
} else {
|
||
handleParseConversionException(state,e);
|
||
}
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/XsiNilLoader.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/XsiNilLoader.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -62,7 +62,7 @@
|
||
onNil(state);
|
||
boolean hasOtherAttributes = (ea.atts.getLength() - 1) > 0;
|
||
// see issues 6759703 and 565 - need to preserve attributes even if the element is nil; only when the type is stored in JAXBElement
|
||
- if (!(hasOtherAttributes && (state.prev.target instanceof JAXBElement))) {
|
||
+ if (!(hasOtherAttributes && (state.getPrev().getTarget() instanceof JAXBElement))) {
|
||
return Discarder.INSTANCE;
|
||
}
|
||
}
|
||
@@ -96,8 +96,8 @@
|
||
@Override
|
||
protected void onNil(UnmarshallingContext.State state) throws SAXException {
|
||
try {
|
||
- acc.set(state.prev.target,null);
|
||
- state.prev.nil = true;
|
||
+ acc.set(state.getPrev().getTarget(),null);
|
||
+ state.getPrev().setNil(true);
|
||
} catch (AccessorException e) {
|
||
handleGenericException(e,true);
|
||
}
|
||
@@ -113,7 +113,7 @@
|
||
@Override
|
||
protected void onNil(UnmarshallingContext.State state) {
|
||
// let the receiver add this to the lister
|
||
- state.target = null;
|
||
+ state.setTarget(null);
|
||
}
|
||
}
|
||
}
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/XsiTypeLoader.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/XsiTypeLoader.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -61,7 +61,7 @@
|
||
beanInfo = defaultBeanInfo;
|
||
|
||
Loader loader = beanInfo.getLoader(null,false);
|
||
- state.loader = loader;
|
||
+ state.setLoader(loader);
|
||
loader.startElement(state,ea);
|
||
}
|
||
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/AttachmentPartImpl.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/AttachmentPartImpl.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -571,7 +571,8 @@
|
||
mailMap.addMailcap("text/xml;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.XmlDataContentHandler");
|
||
mailMap.addMailcap("application/xml;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.XmlDataContentHandler");
|
||
mailMap.addMailcap("application/fastinfoset;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.FastInfosetDataContentHandler");
|
||
- mailMap.addMailcap("multipart/*;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.MultipartDataContentHandler");
|
||
+ // this handler seems to be not used according VCS history ...
|
||
+ // mailMap.addMailcap("multipart/*;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.MultipartDataContentHandler");
|
||
mailMap.addMailcap("image/*;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.ImageDataContentHandler");
|
||
mailMap.addMailcap("text/plain;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.StringDataContentHandler");
|
||
}
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/model/Utils.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/model/Utils.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -54,17 +54,20 @@
|
||
|
||
static { // we statically initializing REFLECTION_NAVIGATOR property
|
||
try {
|
||
- Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
|
||
- //noinspection unchecked
|
||
- final Method getInstance = refNav.getDeclaredMethod("getInstance");
|
||
+ final Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator");
|
||
|
||
// requires accessClassInPackage privilege
|
||
- AccessController.doPrivileged(
|
||
- new PrivilegedAction<Object>() {
|
||
+ final Method getInstance = AccessController.doPrivileged(
|
||
+ new PrivilegedAction<Method>() {
|
||
@Override
|
||
- public Object run() {
|
||
- getInstance.setAccessible(true);
|
||
- return null;
|
||
+ public Method run() {
|
||
+ try {
|
||
+ Method getInstance = refNav.getDeclaredMethod("getInstance");
|
||
+ getInstance.setAccessible(true);
|
||
+ return getInstance;
|
||
+ } catch (NoSuchMethodException e) {
|
||
+ throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
|
||
+ }
|
||
}
|
||
}
|
||
);
|
||
@@ -72,16 +75,10 @@
|
||
//noinspection unchecked
|
||
REFLECTION_NAVIGATOR = (Navigator<Type, Class, Field, Method>) getInstance.invoke(null);
|
||
} catch (ClassNotFoundException e) {
|
||
- e.printStackTrace();
|
||
throw new IllegalStateException("Can't find ReflectionNavigator class");
|
||
} catch (InvocationTargetException e) {
|
||
- e.printStackTrace();
|
||
throw new IllegalStateException("ReflectionNavigator.getInstance throws the exception");
|
||
- } catch (NoSuchMethodException e) {
|
||
- e.printStackTrace();
|
||
- throw new IllegalStateException("ReflectionNavigator.getInstance can't be found");
|
||
} catch (IllegalAccessException e) {
|
||
- e.printStackTrace();
|
||
throw new IllegalStateException("ReflectionNavigator.getInstance method is inaccessible");
|
||
} catch (SecurityException e) {
|
||
LOGGER.log(Level.FINE, "Unable to access ReflectionNavigator.getInstance", e);
|
||
--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/spi/ProviderImpl.java Mon Sep 08 12:16:05 2014 -0700
|
||
+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/spi/ProviderImpl.java Mon Jan 05 11:56:55 2015 -0800
|
||
@@ -139,19 +139,12 @@
|
||
}
|
||
|
||
public EndpointReference readEndpointReference(final Source eprInfoset) {
|
||
- // EPR constructors are private, so we need privilege escalation.
|
||
- // this unmarshalling can only access instances of a fixed, known set of classes,
|
||
- // so doing that shouldn't introduce security vulnerability.
|
||
- return AccessController.doPrivileged(new PrivilegedAction<EndpointReference>() {
|
||
- public EndpointReference run() {
|
||
- try {
|
||
- Unmarshaller unmarshaller = eprjc.get().createUnmarshaller();
|
||
- return (EndpointReference) unmarshaller.unmarshal(eprInfoset);
|
||
- } catch (JAXBException e) {
|
||
- throw new WebServiceException("Error creating Marshaller or marshalling.", e);
|
||
- }
|
||
- }
|
||
- });
|
||
+ try {
|
||
+ Unmarshaller unmarshaller = eprjc.get().createUnmarshaller();
|
||
+ return (EndpointReference) unmarshaller.unmarshal(eprInfoset);
|
||
+ } catch (JAXBException e) {
|
||
+ throw new WebServiceException("Error creating Marshaller or marshalling.", e);
|
||
+ }
|
||
}
|
||
|
||
public <T> T getPort(EndpointReference endpointReference, Class<T> clazz, WebServiceFeature... webServiceFeatures) {
|
||
--- ./jdk/.hgtags Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/.hgtags Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -456,11 +456,19 @@
|
||
7f7430459adfe7b7fb65da8c3fac2ac5e3495ea1 jdk7u65-b18
|
||
ba6cef21c369076be97dd8133fd4a158cd486bd8 jdk7u65-b19
|
||
c3a56021fc22f886106f123d4f25b385ac6b79d7 jdk7u65-b32
|
||
+efc8886310cbccb941f826acfad2ad51a2891be5 jdk7u80-b00
|
||
+bc7f9d966c1df3748ef9c148eab25976cd065963 jdk7u80-b01
|
||
+2590a9c18fdba19086712bb91a28352e9239a2be jdk7u80-b02
|
||
8b9d926bd35adceb99f244b7b068fedb0f220f03 jdk7u65-b20
|
||
5cf343beab2ce73d299d4f1a8f3b95892f9fd818 jdk7u67-b01
|
||
ba6cef21c369076be97dd8133fd4a158cd486bd8 jdk7u65-b40
|
||
7b47a34063e94e1ab5636b11231d33fae92754c9 jdk7u65-b31
|
||
4cb63f8ca9ee8c60d6f3d0051b69acc8392bd8de jdk7u65-b33
|
||
+5cf343beab2ce73d299d4f1a8f3b95892f9fd818 jdk7u67-b01
|
||
+388d34a2e45c2660e7ede2a9d80949b14b5d8df9 jdk7u67-b31
|
||
+de2b809bb95904bfd5c2ad47cf0f41c97abd5750 jdk7u67-b32
|
||
+193d852a6dce1aaf47f1e6960e1c83936bd0e0a4 jdk7u67-b33
|
||
+d425e2aa1a6bcdf909c9ac7f690f3e87dcf6e3f6 jdk7u67-b34
|
||
9ccfe70cee626ac7831cfa7b7a7eb7a88fe1cd42 jdk7u66-b00
|
||
fc87b55d62fc1e81aaf61ff21175129b8ccc302e jdk7u66-b01
|
||
c67e394e49429565540f04c5c2a5544f750658bb jdk7u66-b09
|
||
@@ -486,3 +494,55 @@
|
||
1108ab8e3dce0318529b4bcda46ce895659bb09b jdk7u71-b11
|
||
ae4e88c495851c43862e2fc3d1ff7b64c68f368c jdk7u71-b12
|
||
a6cbc82d62f915cdcd6037c8b40a4590585553c7 jdk7u71-b13
|
||
+78a7e3c7165d4c281d4f90bb2304e95ca2c96969 jdk7u71-b14
|
||
+c76a5b2876b98194ccbeffeab76a0326bf163ba2 jdk7u72-b01
|
||
+b02c1a8b10cd7338eb808ebfaa5a74b4997fdc8f jdk7u72-b02
|
||
+bc98cecdab4cd4a97316a5407c91bdedc92d4bb5 jdk7u72-b03
|
||
+b227c93ab2c91ce4b412d1cfb4f7649bff30677b jdk7u72-b04
|
||
+dd7983c1586dd9e6e6d53bfa05d7e164329979b0 jdk7u72-b05
|
||
+b57a21af9f6d3cd9498099c329063a671b39e3c4 jdk7u72-b06
|
||
+9d53e2319954cc1479e190e26b110168c7073b0a jdk7u72-b07
|
||
+584b227e8efe21dd47a616afdb4f1f2a2fd630cf jdk7u72-b08
|
||
+2ee54b1c7203b9973e0b2ab06cf73e98886ee099 jdk7u72-b09
|
||
+d3257f2beb42163afe64adea65b53a18d039eb0d jdk7u72-b10
|
||
+4946dc66a0c77133a0a6e3198bd9bd1ec5ef0344 jdk7u72-b11
|
||
+e556571078d5c8d24b527ed809d12f37f6e3745b jdk7u72-b12
|
||
+13ed37084621a8af551ec46650c07ea96f1a22ba jdk7u72-b13
|
||
+f4cf053f2ed3df23b756dd182061876ac9774bc5 jdk7u72-b14
|
||
+6ef59d24666e8af5428706fc32295a5d088a48c9 jdk7u72-b30
|
||
+550c9196d41b566e01f2d164a1b5e0aba9871f5e jdk7u72-b31
|
||
+87f9570ca734714f981d4a47477dcc6c80a7d324 jdk7u75-b00
|
||
+0fefa48e670a31015be985ba74e35841d0cc66c1 jdk7u75-b01
|
||
+e885a036cc5dc0f8fa07dc0a5f55647f819f3fc5 jdk7u75-b02
|
||
+4b81833e1c004460c78208c2529775a05f3abf80 jdk7u75-b03
|
||
+1964c973dcc1ddb30115b7c7b6183548b3adcdf5 jdk7u75-b04
|
||
+ec3e1e179298a41bc6b77a170e2da66efb0bae3b jdk7u75-b05
|
||
+e9596c6470c944ff19c5198cfeb7fd979aad9120 jdk7u75-b06
|
||
+e0afb6ec0633d18f360f074c5672fa4c2196ea39 jdk7u75-b07
|
||
+8268d82995af433655d3db9a51b549032c19537d jdk7u75-b08
|
||
+0a1fe04693dd9f65176c35dc0631652086795f01 jdk7u75-b09
|
||
+c43642c55cd483f1d270e9ce55b9721fc32f900c jdk7u75-b10
|
||
+7bac76091c46f667f69aa9e426c29cc8e3a2d861 jdk7u75-b11
|
||
+1a37584734ff241c0c4c4382f7870efedef7e706 jdk7u75-b12
|
||
+16043c4cefc3cc5d859d97434abbdf79a7a58e49 jdk7u75-b13
|
||
+3778e2621fc972f88ac8a247543ad63527e7d9cd jdk7u75-b30
|
||
+cc9469a8208838cc4adec61acf0429c17622e75b jdk7u75-b31
|
||
+0666a58a7e584380c1b1dadb50ec67400110a9ab jdk7u76-b00
|
||
+182b3e8a732d6b0d21bd7d602361e5276f14b886 jdk7u76-b01
|
||
+3c743031578a431ccc1e27691b1958355d02caec jdk7u76-b02
|
||
+5e3a73518863851da31129b815a142ad34a3d376 jdk7u76-b03
|
||
+50322d45a16bd3f50a050f858495a586395e6095 jdk7u76-b04
|
||
+e41867e626749cf34019f9e45493cf049acbcec4 jdk7u76-b05
|
||
+7ca26abf06dd8e11c6d7f6ad724b8d5abc3c709d jdk7u76-b06
|
||
+84163d4b66f0acc5301223cd25b4093780950640 jdk7u76-b07
|
||
+81f8878be887f80e2bcd4c7f43f1da2de8d22273 jdk7u76-b08
|
||
+81f8878be887f80e2bcd4c7f43f1da2de8d22273 jdk7u76-b08
|
||
+0000000000000000000000000000000000000000 jdk7u76-b08
|
||
+0000000000000000000000000000000000000000 jdk7u76-b08
|
||
+9c008aa88919f1ab6d4337b66546f594443680b2 jdk7u76-b08
|
||
+70371a63e6c9ff4a73a2bbb09315c4138cf25792 jdk7u76-b09
|
||
+c67a0b63cc6971ced2e233b63ebbdec063ad81d2 jdk7u76-b10
|
||
+e0e3c03502518c460d51d8c517b081cbd712a9c1 jdk7u76-b11
|
||
+9af83882ca9e628f9e35634b930081271a91d561 jdk7u76-b12
|
||
+1af0023da23e23482947b715fbf3bdfdee0d2813 jdk7u76-b13
|
||
+c5567031a820910ded5f20f2d7fa21c433d744ca jdk7u76-b30
|
||
--- ./jdk/make/bridge/Jabswitch/Makefile Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/bridge/Jabswitch/Makefile Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
#
|
||
-# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||
+# Copyright (c) 2012, 2014, 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
|
||
@@ -44,7 +44,10 @@
|
||
JAB_MANIFEST_INP = $(CLOSED_PLATFORM_SRC)/native/sun/bridge/jabswitch.manifest
|
||
JAB_MANIFEST_OUT = $(TEMPDIR)/jabswitch.exe.intermediate.manifest
|
||
|
||
-RC_FLAGS += /fo "$(VERSIONRES)"
|
||
+RC_FLAGS += /fo "$(VERSIONRES)" \
|
||
+ /D "JDK_FNAME=$(PROGRAM)$(EXE_SUFFIX)" \
|
||
+ /D "JDK_INTERNAL_NAME=$(PROGRAM)" \
|
||
+ /D "JDK_FTYPE=0x1L"
|
||
OTHER_CPPFLAGS += /MD /Fo"$(TEMPDIR)/" /Fd"$(TEMPDIR)/" /analyze- /Od /Gd /nologo /Gm /D "WIN32" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /RTC1 /W3 /ZI /Zc:wchar_t /EHsc
|
||
LDDFLAGS += Advapi32.lib Version.lib User32.lib
|
||
|
||
--- ./jdk/make/com/apple/osxui/Makefile Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/com/apple/osxui/Makefile Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -67,6 +67,7 @@
|
||
|
||
RESOURCE_BUNDLES_COMPILED_PROPERTIES += \
|
||
com/apple/laf/resources/aqua.properties
|
||
+LOCALE_SET_DEFINITION = jre
|
||
|
||
#
|
||
# Rules
|
||
--- ./jdk/make/com/sun/nio/Makefile Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/com/sun/nio/Makefile Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
#
|
||
-# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
|
||
+# Copyright (c) 2009, 2014, 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
|
||
@@ -29,13 +29,8 @@
|
||
|
||
BUILDDIR = ../../..
|
||
include $(BUILDDIR)/common/Defs.gmk
|
||
-
|
||
-# MMM: disable for now
|
||
-ifneq ($(PLATFORM), macosx)
|
||
include $(BUILDDIR)/common/Subdirs.gmk
|
||
SUBDIRS = sctp
|
||
-endif
|
||
-
|
||
|
||
all build clean clobber::
|
||
$(SUBDIRS-loop)
|
||
--- ./jdk/make/com/sun/nio/sctp/Exportedfiles.gmk Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/com/sun/nio/sctp/Exportedfiles.gmk Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
#
|
||
-# Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
|
||
+# Copyright (c) 2009, 2014, 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
|
||
@@ -28,6 +28,7 @@
|
||
#
|
||
|
||
ifneq ($(PLATFORM), windows)
|
||
+ifneq ($(PLATFORM), macosx)
|
||
FILES_export = \
|
||
sun/nio/ch/SctpAssocChange.java \
|
||
sun/nio/ch/SctpChannelImpl.java \
|
||
@@ -37,3 +38,4 @@
|
||
sun/nio/ch/SctpServerChannelImpl.java \
|
||
sun/nio/ch/SctpStdSocketOption.java
|
||
endif
|
||
+endif
|
||
--- ./jdk/make/com/sun/nio/sctp/FILES_c.gmk Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/com/sun/nio/sctp/FILES_c.gmk Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
#
|
||
-# Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
|
||
+# Copyright (c) 2009, 2014, 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
|
||
@@ -24,8 +24,10 @@
|
||
#
|
||
|
||
ifneq ($(PLATFORM),windows)
|
||
+ifneq ($(PLATFORM),macosx)
|
||
FILES_c = \
|
||
SctpNet.c \
|
||
SctpChannelImpl.c \
|
||
SctpServerChannelImpl.c
|
||
endif
|
||
+endif
|
||
--- ./jdk/make/com/sun/nio/sctp/FILES_java.gmk Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/com/sun/nio/sctp/FILES_java.gmk Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
#
|
||
-# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
|
||
+# Copyright (c) 2009, 2014, 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
|
||
@@ -23,7 +23,7 @@
|
||
# questions.
|
||
#
|
||
FILES_java = \
|
||
- com/sun/nio/sctp/AbstractNotificationHandler.java \
|
||
+ com/sun/nio/sctp/AbstractNotificationHandler.java \
|
||
com/sun/nio/sctp/Association.java \
|
||
com/sun/nio/sctp/AssociationChangeNotification.java \
|
||
com/sun/nio/sctp/HandlerResult.java \
|
||
@@ -43,9 +43,13 @@
|
||
com/sun/nio/sctp/ShutdownNotification.java \
|
||
\
|
||
sun/nio/ch/SctpMessageInfoImpl.java \
|
||
- sun/nio/ch/SctpStdSocketOption.java
|
||
+ sun/nio/ch/SctpStdSocketOption.java \
|
||
+ sun/nio/ch/SctpChannelImpl.java \
|
||
+ sun/nio/ch/SctpMultiChannelImpl.java \
|
||
+ sun/nio/ch/SctpServerChannelImpl.java
|
||
|
||
ifneq ($(PLATFORM), windows)
|
||
+ifneq ($(PLATFORM), macosx)
|
||
FILES_java += \
|
||
sun/nio/ch/SctpAssocChange.java \
|
||
sun/nio/ch/SctpAssociationImpl.java \
|
||
@@ -58,9 +62,5 @@
|
||
sun/nio/ch/SctpSendFailed.java \
|
||
sun/nio/ch/SctpServerChannelImpl.java \
|
||
sun/nio/ch/SctpShutdown.java
|
||
-else
|
||
-FILES_java += \
|
||
- sun/nio/ch/SctpChannelImpl.java \
|
||
- sun/nio/ch/SctpMultiChannelImpl.java \
|
||
- sun/nio/ch/SctpServerChannelImpl.java
|
||
endif
|
||
+endif
|
||
--- ./jdk/make/com/sun/nio/sctp/Makefile Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/com/sun/nio/sctp/Makefile Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
#
|
||
-# Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
|
||
+# Copyright (c) 2009, 2014, 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
|
||
@@ -41,7 +41,15 @@
|
||
include FILES_java.gmk
|
||
include Exportedfiles.gmk
|
||
|
||
+ifeq ($(PLATFORM), windows)
|
||
+include $(BUILDDIR)/common/Classes.gmk
|
||
+endif
|
||
+ifeq ($(PLATFORM), macosx)
|
||
+include $(BUILDDIR)/common/Classes.gmk
|
||
+endif
|
||
+
|
||
ifneq ($(PLATFORM), windows)
|
||
+ifneq ($(PLATFORM), macosx)
|
||
include $(BUILDDIR)/common/Mapfile-vers.gmk
|
||
include $(BUILDDIR)/common/Library.gmk
|
||
|
||
@@ -67,12 +75,9 @@
|
||
ifeq ($(PLATFORM), solaris)
|
||
#LIBSCTP = -lsctp
|
||
OTHER_LDLIBS += $(LIBSOCKET) -L$(LIBDIR)/$(LIBARCH) -lnet -lnio
|
||
-endif # PLATFORM
|
||
-
|
||
-else # windows
|
||
-include $(BUILDDIR)/common/Classes.gmk
|
||
-endif # ifneq windows
|
||
-
|
||
+endif
|
||
+endif # macosx
|
||
+endif # windows
|
||
|
||
clean clobber::
|
||
$(RM) -r $(CLASSDESTDIR)/com/sun/nio/sctp
|
||
--- ./jdk/make/common/Defs-linux.gmk Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/common/Defs-linux.gmk Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -191,9 +191,9 @@
|
||
CFLAGS_REQUIRED_amd64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
|
||
CFLAGS_REQUIRED_i586 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
|
||
CFLAGS_REQUIRED_ia64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
|
||
-CFLAGS_REQUIRED_sparcv9 += -m64 -mcpu=v9
|
||
+CFLAGS_REQUIRED_sparcv9 += -m64 -mcpu=v9 -D_BIG_ENDIAN
|
||
LDFLAGS_COMMON_sparcv9 += -m64 -mcpu=v9
|
||
-CFLAGS_REQUIRED_sparc += -m32 -mcpu=v9
|
||
+CFLAGS_REQUIRED_sparc += -m32 -mcpu=v9 -D_BIG_ENDIAN
|
||
LDFLAGS_COMMON_sparc += -m32 -mcpu=v9
|
||
CFLAGS_REQUIRED_arm += -fsigned-char -D_LITTLE_ENDIAN
|
||
CFLAGS_REQUIRED_ppc += -fsigned-char -D_BIG_ENDIAN
|
||
--- ./jdk/make/common/internal/Resources.gmk Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/common/internal/Resources.gmk Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -225,6 +225,10 @@
|
||
$(add-property-java-file)
|
||
$(GENSRCDIR)/%_zh_HK.java: $(SHARE_SRC)/classes/%_zh_TW.properties
|
||
$(add-property-java-file)
|
||
+ifdef PLATFORM_SRC_MACOS
|
||
+$(GENSRCDIR)/%_zh_HK.java: $(PLATFORM_SRC_MACOS)/classes/%_zh_TW.properties
|
||
+ $(add-property-java-file)
|
||
+endif
|
||
|
||
# Simple delivery of zh_HK properties files just copies zh_TW properties files
|
||
$(CLASSDESTDIR)/%_zh_HK.properties: \
|
||
--- ./jdk/make/java/java/mapfile-vers Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/java/java/mapfile-vers Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -275,6 +275,7 @@
|
||
Java_sun_misc_VM_latestUserDefinedLoader;
|
||
Java_sun_misc_VM_initialize;
|
||
Java_sun_misc_VMSupport_initAgentProperties;
|
||
+ Java_sun_misc_VMSupport_getVMTemporaryDirectory;
|
||
|
||
# ZipFile.c needs this one
|
||
throwFileNotFoundException;
|
||
--- ./jdk/make/sun/javazic/tzdata/VERSION Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/sun/javazic/tzdata/VERSION Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,24 +1,24 @@
|
||
#
|
||
# 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.
|
||
#
|
||
-tzdata2014c
|
||
+tzdata2014j
|
||
--- ./jdk/make/sun/javazic/tzdata/africa Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/sun/javazic/tzdata/africa Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -21,36 +21,35 @@
|
||
# or visit www.oracle.com if you need additional information or have any
|
||
# questions.
|
||
#
|
||
-# <pre>
|
||
# This file is in the public domain, so clarified as of
|
||
# 2009-05-17 by Arthur David Olson.
|
||
|
||
-# This data is by no means authoritative; if you think you know better,
|
||
+# This file is by no means authoritative; if you think you know better,
|
||
# go ahead and edit the file (and please send any changes to
|
||
-# tz@iana.org for general use in the future).
|
||
+# tz@iana.org for general use in the future). For more, please see
|
||
+# the file CONTRIBUTING in the tz distribution.
|
||
|
||
-# From Paul Eggert (2013-02-21):
|
||
+# From Paul Eggert (2014-10-31):
|
||
#
|
||
-# A good source for time zone historical data outside the U.S. is
|
||
+# Unless otherwise specified, the source for data through 1990 is:
|
||
# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
|
||
# San Diego: ACS Publications, Inc. (2003).
|
||
+# Unfortunately this book contains many errors and cites no sources.
|
||
#
|
||
# Gwillim Law writes that a good source
|
||
# for recent time zone data is the International Air Transport
|
||
# Association's Standard Schedules Information Manual (IATA SSIM),
|
||
# published semiannually. Law sent in several helpful summaries
|
||
-# of the IATA's data after 1990.
|
||
-#
|
||
-# Except where otherwise noted, Shanks & Pottenger is the source for
|
||
-# entries through 1990, and IATA SSIM is the source for entries afterwards.
|
||
+# of the IATA's data after 1990. Except where otherwise noted,
|
||
+# IATA SSIM is the source for entries after 1990.
|
||
#
|
||
# Another source occasionally used is Edward W. Whitman, World Time Differences,
|
||
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
|
||
# I found in the UCLA library.
|
||
#
|
||
# For data circa 1899, a common source is:
|
||
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
|
||
-# <http://www.jstor.org/stable/1774359>.
|
||
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
|
||
+# http://www.jstor.org/stable/1774359
|
||
#
|
||
# A reliable and entertaining source about time zones is
|
||
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
|
||
@@ -58,13 +57,13 @@
|
||
# Previous editions of this database used WAT, CAT, SAT, and EAT
|
||
# for +0:00 through +3:00, respectively,
|
||
# but Mark R V Murray reports that
|
||
-# `SAST' is the official abbreviation for +2:00 in the country of South Africa,
|
||
-# `CAT' is commonly used for +2:00 in countries north of South Africa, and
|
||
-# `WAT' is probably the best name for +1:00, as the common phrase for
|
||
-# the area that includes Nigeria is ``West Africa''.
|
||
-# He has heard of ``Western Sahara Time'' for +0:00 but can find no reference.
|
||
+# 'SAST' is the official abbreviation for +2:00 in the country of South Africa,
|
||
+# 'CAT' is commonly used for +2:00 in countries north of South Africa, and
|
||
+# 'WAT' is probably the best name for +1:00, as the common phrase for
|
||
+# the area that includes Nigeria is "West Africa".
|
||
+# He has heard of "Western Sahara Time" for +0:00 but can find no reference.
|
||
#
|
||
-# To make things confusing, `WAT' seems to have been used for -1:00 long ago;
|
||
+# To make things confusing, 'WAT' seems to have been used for -1:00 long ago;
|
||
# I'd guess that this was because people needed _some_ name for -1:00,
|
||
# and at the time, far west Africa was the only major land area in -1:00.
|
||
# This usage is now obsolete, as the last use of -1:00 on the African
|
||
@@ -77,7 +76,7 @@
|
||
# 2:00 SAST South Africa Standard Time
|
||
# and Murray suggests the following abbreviation:
|
||
# 1:00 WAT West Africa Time
|
||
-# I realize that this leads to `WAT' being used for both -1:00 and 1:00
|
||
+# I realize that this leads to 'WAT' being used for both -1:00 and 1:00
|
||
# for times before 1976, but this is the best I can think of
|
||
# until we get more information.
|
||
#
|
||
@@ -88,7 +87,6 @@
|
||
# 3:00 CAST Central Africa Summer Time (no longer used)
|
||
# 3:00 SAST South Africa Summer Time (no longer used)
|
||
# 3:00 EAT East Africa Time
|
||
-# 4:00 EAST East Africa Summer Time (no longer used)
|
||
|
||
# Algeria
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
@@ -117,9 +115,9 @@
|
||
# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
|
||
# more precise 0:09:21.
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01
|
||
- 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
|
||
- 0:00 Algeria WE%sT 1940 Feb 25 2:00
|
||
+Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01
|
||
+ 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
|
||
+ 0:00 Algeria WE%sT 1940 Feb 25 2:00
|
||
1:00 Algeria CE%sT 1946 Oct 7
|
||
0:00 - WET 1956 Jan 29
|
||
1:00 - CET 1963 Apr 14
|
||
@@ -129,92 +127,71 @@
|
||
1:00 - CET
|
||
|
||
# Angola
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Luanda 0:52:56 - LMT 1892
|
||
- 0:52:04 - AOT 1911 May 26 # Angola Time
|
||
- 1:00 - WAT
|
||
-
|
||
# Benin
|
||
-# Whitman says they switched to 1:00 in 1946, not 1934;
|
||
-# go with Shanks & Pottenger.
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Porto-Novo 0:10:28 - LMT 1912
|
||
- 0:00 - GMT 1934 Feb 26
|
||
- 1:00 - WAT
|
||
+# See Africa/Lagos.
|
||
|
||
# Botswana
|
||
-# From Paul Eggert (2013-02-21):
|
||
-# Milne says they were regulated by the Cape Town Signal in 1899;
|
||
-# assume they switched to 2:00 when Cape Town did.
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Gaborone 1:43:40 - LMT 1885
|
||
- 1:30 - SAST 1903 Mar
|
||
- 2:00 - CAT 1943 Sep 19 2:00
|
||
- 2:00 1:00 CAST 1944 Mar 19 2:00
|
||
- 2:00 - CAT
|
||
+# See Africa/Maputo.
|
||
|
||
# Burkina Faso
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Ouagadougou -0:06:04 - LMT 1912
|
||
- 0:00 - GMT
|
||
+# See Africa/Abidjan.
|
||
|
||
# Burundi
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Bujumbura 1:57:28 - LMT 1890
|
||
- 2:00 - CAT
|
||
+# See Africa/Maputo.
|
||
|
||
# Cameroon
|
||
-# Whitman says they switched to 1:00 in 1920; go with Shanks & Pottenger.
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Douala 0:38:48 - LMT 1912
|
||
- 1:00 - WAT
|
||
+# See Africa/Lagos.
|
||
|
||
# Cape Verde
|
||
+#
|
||
+# Shanks gives 1907 for the transition to CVT.
|
||
+# Perhaps the 1911-05-26 Portuguese decree
|
||
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
|
||
+# merely made it official?
|
||
+#
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Atlantic/Cape_Verde -1:34:04 - LMT 1907 # Praia
|
||
+Zone Atlantic/Cape_Verde -1:34:04 - LMT 1907 # Praia
|
||
-2:00 - CVT 1942 Sep
|
||
-2:00 1:00 CVST 1945 Oct 15
|
||
- -2:00 - CVT 1975 Nov 25 2:00
|
||
+ -2:00 - CVT 1975 Nov 25 2:00
|
||
-1:00 - CVT
|
||
|
||
# Central African Republic
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Bangui 1:14:20 - LMT 1912
|
||
- 1:00 - WAT
|
||
+# See Africa/Lagos.
|
||
|
||
# Chad
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Ndjamena 1:00:12 - LMT 1912
|
||
+Zone Africa/Ndjamena 1:00:12 - LMT 1912 # N'Djamena
|
||
1:00 - WAT 1979 Oct 14
|
||
1:00 1:00 WAST 1980 Mar 8
|
||
1:00 - WAT
|
||
|
||
# Comoros
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Indian/Comoro 2:53:04 - LMT 1911 Jul # Moroni, Gran Comoro
|
||
- 3:00 - EAT
|
||
+# See Africa/Nairobi.
|
||
|
||
-# Democratic Republic of Congo
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Kinshasa 1:01:12 - LMT 1897 Nov 9
|
||
- 1:00 - WAT
|
||
-Zone Africa/Lubumbashi 1:49:52 - LMT 1897 Nov 9
|
||
- 2:00 - CAT
|
||
+# Democratic Republic of the Congo
|
||
+# See Africa/Lagos for the western part and Africa/Maputo for the eastern.
|
||
|
||
# Republic of the Congo
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Brazzaville 1:01:08 - LMT 1912
|
||
- 1:00 - WAT
|
||
+# See Africa/Lagos.
|
||
|
||
-# Cote D'Ivoire
|
||
+# Côte d'Ivoire / Ivory Coast
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Africa/Abidjan -0:16:08 - LMT 1912
|
||
0:00 - GMT
|
||
+Link Africa/Abidjan Africa/Bamako # Mali
|
||
+Link Africa/Abidjan Africa/Banjul # Gambia
|
||
+Link Africa/Abidjan Africa/Conakry # Guinea
|
||
+Link Africa/Abidjan Africa/Dakar # Senegal
|
||
+Link Africa/Abidjan Africa/Freetown # Sierra Leone
|
||
+Link Africa/Abidjan Africa/Lome # Togo
|
||
+Link Africa/Abidjan Africa/Nouakchott # Mauritania
|
||
+Link Africa/Abidjan Africa/Ouagadougou # Burkina Faso
|
||
+Link Africa/Abidjan Africa/Sao_Tome # São Tomé and Príncipe
|
||
+Link Africa/Abidjan Atlantic/St_Helena # St Helena
|
||
|
||
# Djibouti
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Djibouti 2:52:36 - LMT 1911 Jul
|
||
- 3:00 - EAT
|
||
+# See Africa/Nairobi.
|
||
|
||
###############################################################################
|
||
|
||
@@ -254,30 +231,26 @@
|
||
# Egyptians would approve the cancellation."
|
||
#
|
||
# Egypt to cancel daylight saving time
|
||
-# <a href="http://www.almasryalyoum.com/en/node/407168">
|
||
# http://www.almasryalyoum.com/en/node/407168
|
||
-# </a>
|
||
# or
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_egypt04.html">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_egypt04.html
|
||
-# </a>
|
||
Rule Egypt 1995 2010 - Apr lastFri 0:00s 1:00 S
|
||
-Rule Egypt 1995 2005 - Sep lastThu 23:00s 0 -
|
||
+Rule Egypt 1995 2005 - Sep lastThu 24:00 0 -
|
||
# From Steffen Thorsen (2006-09-19):
|
||
# The Egyptian Gazette, issue 41,090 (2006-09-18), page 1, reports:
|
||
# Egypt will turn back clocks by one hour at the midnight of Thursday
|
||
# after observing the daylight saving time since May.
|
||
# http://news.gom.com.eg/gazette/pdf/2006/09/18/01.pdf
|
||
-Rule Egypt 2006 only - Sep 21 23:00s 0 -
|
||
+Rule Egypt 2006 only - Sep 21 24:00 0 -
|
||
# From Dirk Losch (2007-08-14):
|
||
# I received a mail from an airline which says that the daylight
|
||
# saving time in Egypt will end in the night of 2007-09-06 to 2007-09-07.
|
||
-# From Jesper Norgaard Welen (2007-08-15): [The following agree:]
|
||
+# From Jesper Nørgaard Welen (2007-08-15): [The following agree:]
|
||
# http://www.nentjes.info/Bill/bill5.htm
|
||
# http://www.timeanddate.com/worldclock/city.html?n=53
|
||
# From Steffen Thorsen (2007-09-04): The official information...:
|
||
# http://www.sis.gov.eg/En/EgyptOnline/Miscellaneous/000002/0207000000000000001580.htm
|
||
-Rule Egypt 2007 only - Sep Thu>=1 23:00s 0 -
|
||
+Rule Egypt 2007 only - Sep Thu>=1 24:00 0 -
|
||
# From Abdelrahman Hassan (2007-09-06):
|
||
# Due to the Hijri (lunar Islamic calendar) year being 11 days shorter
|
||
# than the year of the Gregorian calendar, Ramadan shifts earlier each
|
||
@@ -311,15 +284,9 @@
|
||
#
|
||
# timeanddate[2] and another site I've found[3] also support that.
|
||
#
|
||
-# [1] <a href="https://bugzilla.redhat.com/show_bug.cgi?id=492263">
|
||
-# https://bugzilla.redhat.com/show_bug.cgi?id=492263
|
||
-# </a>
|
||
-# [2] <a href="http://www.timeanddate.com/worldclock/clockchange.html?n=53">
|
||
-# http://www.timeanddate.com/worldclock/clockchange.html?n=53
|
||
-# </a>
|
||
-# [3] <a href="http://wwp.greenwichmeantime.com/time-zone/africa/egypt/">
|
||
-# http://wwp.greenwichmeantime.com/time-zone/africa/egypt/
|
||
-# </a>
|
||
+# [1] https://bugzilla.redhat.com/show_bug.cgi?id=492263
|
||
+# [2] http://www.timeanddate.com/worldclock/clockchange.html?n=53
|
||
+# [3] http://wwp.greenwichmeantime.com/time-zone/africa/egypt/
|
||
|
||
# From Arthur David Olson (2009-04-20):
|
||
# In 2009 (and for the next several years), Ramadan ends before the fourth
|
||
@@ -329,14 +296,10 @@
|
||
# From Steffen Thorsen (2009-08-11):
|
||
# We have been able to confirm the August change with the Egyptian Cabinet
|
||
# Information and Decision Support Center:
|
||
-# <a href="http://www.timeanddate.com/news/time/egypt-dst-ends-2009.html">
|
||
# http://www.timeanddate.com/news/time/egypt-dst-ends-2009.html
|
||
-# </a>
|
||
#
|
||
# The Middle East News Agency
|
||
-# <a href="http://www.mena.org.eg/index.aspx">
|
||
# http://www.mena.org.eg/index.aspx
|
||
-# </a>
|
||
# also reports "Egypt starts winter time on August 21"
|
||
# today in article numbered "71, 11/08/2009 12:25 GMT."
|
||
# Only the title above is available without a subscription to their service,
|
||
@@ -344,67 +307,93 @@
|
||
# (at least today).
|
||
|
||
# From Alexander Krivenyshev (2010-07-20):
|
||
-# According to News from Egypt - Al-Masry Al-Youm Egypt's cabinet has
|
||
+# According to News from Egypt - Al-Masry Al-Youm Egypt's cabinet has
|
||
# decided that Daylight Saving Time will not be used in Egypt during
|
||
# Ramadan.
|
||
#
|
||
# Arabic translation:
|
||
-# "Clocks to go back during Ramadan--and then forward again"
|
||
-# <a href="http://www.almasryalyoum.com/en/news/clocks-go-back-during-ramadan-and-then-forward-again">
|
||
+# "Clocks to go back during Ramadan - and then forward again"
|
||
# http://www.almasryalyoum.com/en/news/clocks-go-back-during-ramadan-and-then-forward-again
|
||
-# </a>
|
||
-# or
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_egypt02.html">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_egypt02.html
|
||
-# </a>
|
||
|
||
# From Ahmad El-Dardiry (2014-05-07):
|
||
# Egypt is to change back to Daylight system on May 15
|
||
# http://english.ahram.org.eg/NewsContent/1/64/100735/Egypt/Politics-/Egypts-government-to-reapply-daylight-saving-time-.aspx
|
||
|
||
-# From Gunther Vermier (2015-05-13):
|
||
+# From Gunther Vermier (2014-05-13):
|
||
# our Egypt office confirms that the change will be at 15 May "midnight" (24:00)
|
||
|
||
-# From Paul Eggert (2014-05-13):
|
||
+# From Imed Chihi (2014-06-04):
|
||
+# We have finally "located" a precise official reference about the DST changes
|
||
+# in Egypt. The Ministers Cabinet decision is explained at
|
||
+# http://www.cabinet.gov.eg/Media/CabinetMeetingsDetails.aspx?id=347 ...
|
||
+# [T]his (Arabic) site is not accessible outside Egypt, but the page ...
|
||
+# translates into: "With regard to daylight saving time, it is scheduled to
|
||
+# take effect at exactly twelve o'clock this evening, Thursday, 15 MAY 2014,
|
||
+# to be suspended by twelve o'clock on the evening of Thursday, 26 JUN 2014,
|
||
+# and re-established again at the end of the month of Ramadan, at twelve
|
||
+# o'clock on the evening of Thursday, 31 JUL 2014." This statement has been
|
||
+# reproduced by other (more accessible) sites[, e.g.,]...
|
||
+# http://elgornal.net/news/news.aspx?id=4699258
|
||
+
|
||
+# From Paul Eggert (2014-06-04):
|
||
# Sarah El Deeb and Lee Keath of AP report that the Egyptian government says
|
||
# the change is because of blackouts in Cairo, even though Ahram Online (cited
|
||
-# above) says DST had no affect on electricity consumption. The AP story says
|
||
-# DST will not be observed during Ramadan. There is no information about when
|
||
-# DST will end. See:
|
||
+# above) says DST had no affect on electricity consumption. There is
|
||
+# no information about when DST will end this fall. See:
|
||
# http://abcnews.go.com/International/wireStory/el-sissi-pushes-egyptians-line-23614833
|
||
#
|
||
-# For now, guess that later transitions will use 2010's rules, and that
|
||
-# Egypt will agree with Morocco (see below) about the date Ramadan starts and
|
||
-# ends, though (unlike Morocco) it will switch at 00:00 standard time. In
|
||
-# Egypt the spring-forward transitions are removed for 2020-2022, when the
|
||
-# guessed spring-forward date falls during the estimated Ramadan, and all
|
||
-# transitions removed for 2023-2038, where the estimated Ramadan falls entirely
|
||
-# outside the guessed daylight-saving time. Ramadan intrudes on the guessed
|
||
-# DST starting in 2039, but that's beyond our somewhat-arbitrary cutoff.
|
||
-
|
||
-Rule Egypt 2008 only - Aug lastThu 23:00s 0 -
|
||
-Rule Egypt 2009 only - Aug 20 23:00s 0 -
|
||
-Rule Egypt 2010 only - Aug 11 0:00 0 -
|
||
-Rule Egypt 2010 only - Sep 10 0:00 1:00 S
|
||
-Rule Egypt 2010 only - Sep lastThu 23:00s 0 -
|
||
+# For now, guess that later spring and fall transitions will use
|
||
+# 2010's rules, and guess that Egypt will switch to standard time at
|
||
+# 24:00 the last Thursday before Ramadan, and back to DST at 00:00 the
|
||
+# first Friday after Ramadan. To implement this,
|
||
+# transition dates for 2015 through 2037 were determined by running
|
||
+# the following program under GNU Emacs 24.3, with the results integrated
|
||
+# by hand into the table below. Ramadan again intrudes on the guessed
|
||
+# DST starting in 2038, but that's beyond our somewhat-arbitrary cutoff.
|
||
+# (let ((islamic-year 1436))
|
||
+# (while (< islamic-year 1460)
|
||
+# (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year)))
|
||
+# (b (calendar-islamic-to-absolute (list 10 1 islamic-year)))
|
||
+# (friday 5))
|
||
+# (while (/= friday (mod a 7))
|
||
+# (setq a (1- a)))
|
||
+# (while (/= friday (mod b 7))
|
||
+# (setq b (1+ b)))
|
||
+# (setq a (1- a))
|
||
+# (setq b (1- b))
|
||
+# (setq a (calendar-gregorian-from-absolute a))
|
||
+# (setq b (calendar-gregorian-from-absolute b))
|
||
+# (insert
|
||
+# (format
|
||
+# (concat "Rule\tEgypt\t%d\tonly\t-\t%s\t%2d\t24:00\t0\t-\n"
|
||
+# "Rule\tEgypt\t%d\tonly\t-\t%s\t%2d\t24:00\t1:00\tS\n")
|
||
+# (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
|
||
+# (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
|
||
+# (setq islamic-year (+ 1 islamic-year))))
|
||
+Rule Egypt 2008 only - Aug lastThu 24:00 0 -
|
||
+Rule Egypt 2009 only - Aug 20 24:00 0 -
|
||
+Rule Egypt 2010 only - Aug 10 24:00 0 -
|
||
+Rule Egypt 2010 only - Sep 9 24:00 1:00 S
|
||
+Rule Egypt 2010 only - Sep lastThu 24:00 0 -
|
||
Rule Egypt 2014 only - May 15 24:00 1:00 S
|
||
-Rule Egypt 2014 only - Jun 29 0:00s 0 -
|
||
-Rule Egypt 2014 only - Jul 29 0:00s 1:00 S
|
||
-Rule Egypt 2014 max - Sep lastThu 23:00s 0 -
|
||
+Rule Egypt 2014 only - Jun 26 24:00 0 -
|
||
+Rule Egypt 2014 only - Jul 31 24:00 1:00 S
|
||
+Rule Egypt 2014 max - Sep lastThu 24:00 0 -
|
||
Rule Egypt 2015 2019 - Apr lastFri 0:00s 1:00 S
|
||
-Rule Egypt 2015 only - Jun 18 0:00s 0 -
|
||
-Rule Egypt 2015 only - Jul 18 0:00s 1:00 S
|
||
-Rule Egypt 2016 only - Jun 7 0:00s 0 -
|
||
-Rule Egypt 2016 only - Jul 7 0:00s 1:00 S
|
||
-Rule Egypt 2017 only - May 27 0:00s 0 -
|
||
-Rule Egypt 2017 only - Jun 26 0:00s 1:00 S
|
||
-Rule Egypt 2018 only - May 16 0:00s 0 -
|
||
-Rule Egypt 2018 only - Jun 15 0:00s 1:00 S
|
||
-Rule Egypt 2019 only - May 6 0:00s 0 -
|
||
-Rule Egypt 2019 only - Jun 5 0:00s 1:00 S
|
||
-Rule Egypt 2020 only - May 24 0:00s 1:00 S
|
||
-Rule Egypt 2021 only - May 13 0:00s 1:00 S
|
||
-Rule Egypt 2022 only - May 3 0:00s 1:00 S
|
||
+Rule Egypt 2015 only - Jun 11 24:00 0 -
|
||
+Rule Egypt 2015 only - Jul 23 24:00 1:00 S
|
||
+Rule Egypt 2016 only - Jun 2 24:00 0 -
|
||
+Rule Egypt 2016 only - Jul 7 24:00 1:00 S
|
||
+Rule Egypt 2017 only - May 25 24:00 0 -
|
||
+Rule Egypt 2017 only - Jun 29 24:00 1:00 S
|
||
+Rule Egypt 2018 only - May 10 24:00 0 -
|
||
+Rule Egypt 2018 only - Jun 14 24:00 1:00 S
|
||
+Rule Egypt 2019 only - May 2 24:00 0 -
|
||
+Rule Egypt 2019 only - Jun 6 24:00 1:00 S
|
||
+Rule Egypt 2020 only - May 28 24:00 1:00 S
|
||
+Rule Egypt 2021 only - May 13 24:00 1:00 S
|
||
+Rule Egypt 2022 only - May 5 24:00 1:00 S
|
||
Rule Egypt 2023 max - Apr lastFri 0:00s 1:00 S
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
@@ -412,60 +401,44 @@
|
||
2:00 Egypt EE%sT
|
||
|
||
# Equatorial Guinea
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Malabo 0:35:08 - LMT 1912
|
||
- 0:00 - GMT 1963 Dec 15
|
||
- 1:00 - WAT
|
||
+# See Africa/Lagos.
|
||
|
||
# Eritrea
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Asmara 2:35:32 - LMT 1870
|
||
- 2:35:32 - AMT 1890 # Asmara Mean Time
|
||
- 2:35:20 - ADMT 1936 May 5 # Adis Dera MT
|
||
- 3:00 - EAT
|
||
-
|
||
# Ethiopia
|
||
-# From Paul Eggert (2006-03-22):
|
||
-# Shanks & Pottenger write that Ethiopia had six narrowly-spaced time zones
|
||
-# between 1870 and 1890, and that they merged to 38E50 (2:35:20) in 1890.
|
||
-# We'll guess that 38E50 is for Adis Dera.
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Addis_Ababa 2:34:48 - LMT 1870
|
||
- 2:35:20 - ADMT 1936 May 5 # Adis Dera MT
|
||
- 3:00 - EAT
|
||
+# See Africa/Nairobi.
|
||
|
||
# Gabon
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Libreville 0:37:48 - LMT 1912
|
||
- 1:00 - WAT
|
||
+# See Africa/Lagos.
|
||
|
||
# Gambia
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Banjul -1:06:36 - LMT 1912
|
||
- -1:06:36 - BMT 1935 # Banjul Mean Time
|
||
- -1:00 - WAT 1964
|
||
- 0:00 - GMT
|
||
+# See Africa/Abidjan.
|
||
|
||
# Ghana
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
-# Whitman says DST was observed from 1931 to ``the present'';
|
||
-# go with Shanks & Pottenger.
|
||
-Rule Ghana 1936 1942 - Sep 1 0:00 0:20 GHST
|
||
-Rule Ghana 1936 1942 - Dec 31 0:00 0 GMT
|
||
+# Whitman says DST was observed from 1931 to "the present";
|
||
+# Shanks & Pottenger say 1936 to 1942;
|
||
+# and September 1 to January 1 is given by:
|
||
+# Scott Keltie J, Epstein M (eds), The Statesman's Year-Book,
|
||
+# 57th ed. Macmillan, London (1920), OCLC 609408015, pp xxviii.
|
||
+# For lack of better info, assume DST was observed from 1920 to 1942.
|
||
+Rule Ghana 1920 1942 - Sep 1 0:00 0:20 GHST
|
||
+Rule Ghana 1920 1942 - Dec 31 0:00 0 GMT
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Africa/Accra -0:00:52 - LMT 1918
|
||
0:00 Ghana %s
|
||
|
||
# Guinea
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Conakry -0:54:52 - LMT 1912
|
||
- 0:00 - GMT 1934 Feb 26
|
||
- -1:00 - WAT 1960
|
||
- 0:00 - GMT
|
||
+# See Africa/Abidjan.
|
||
|
||
# Guinea-Bissau
|
||
+#
|
||
+# Shanks gives 1911-05-26 for the transition to WAT,
|
||
+# evidently confusing the date of the Portuguese decree
|
||
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
|
||
+# with the date that it took effect, namely 1912-01-01.
|
||
+#
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Bissau -1:02:20 - LMT 1911 May 26
|
||
+Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1
|
||
-1:00 - WAT 1975
|
||
0:00 - GMT
|
||
|
||
@@ -476,13 +449,18 @@
|
||
2:30 - BEAT 1940
|
||
2:45 - BEAUT 1960
|
||
3:00 - EAT
|
||
+Link Africa/Nairobi Africa/Addis_Ababa # Ethiopia
|
||
+Link Africa/Nairobi Africa/Asmara # Eritrea
|
||
+Link Africa/Nairobi Africa/Dar_es_Salaam # Tanzania
|
||
+Link Africa/Nairobi Africa/Djibouti
|
||
+Link Africa/Nairobi Africa/Kampala # Uganda
|
||
+Link Africa/Nairobi Africa/Mogadishu # Somalia
|
||
+Link Africa/Nairobi Indian/Antananarivo # Madagascar
|
||
+Link Africa/Nairobi Indian/Comoro
|
||
+Link Africa/Nairobi Indian/Mayotte
|
||
|
||
# Lesotho
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Maseru 1:50:00 - LMT 1903 Mar
|
||
- 2:00 - SAST 1943 Sep 19 2:00
|
||
- 2:00 1:00 SAST 1944 Mar 19 2:00
|
||
- 2:00 - SAST
|
||
+# See Africa/Johannesburg.
|
||
|
||
# Liberia
|
||
# From Paul Eggert (2006-03-22):
|
||
@@ -549,38 +527,22 @@
|
||
2:00 - EET 1982
|
||
1:00 Libya CE%sT 1990 May 4
|
||
# The 1996 and 1997 entries are from Shanks & Pottenger;
|
||
-# the IATA SSIM data contain some obvious errors.
|
||
+# the IATA SSIM data entries contain some obvious errors.
|
||
2:00 - EET 1996 Sep 30
|
||
1:00 Libya CE%sT 1997 Oct 4
|
||
- 2:00 - EET 2012 Nov 10 2:00
|
||
- 1:00 Libya CE%sT 2013 Oct 25 2:00
|
||
+ 2:00 - EET 2012 Nov 10 2:00
|
||
+ 1:00 Libya CE%sT 2013 Oct 25 2:00
|
||
2:00 - EET
|
||
|
||
# Madagascar
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Indian/Antananarivo 3:10:04 - LMT 1911 Jul
|
||
- 3:00 - EAT 1954 Feb 27 23:00s
|
||
- 3:00 1:00 EAST 1954 May 29 23:00s
|
||
- 3:00 - EAT
|
||
+# See Africa/Nairobi.
|
||
|
||
# Malawi
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Blantyre 2:20:00 - LMT 1903 Mar
|
||
- 2:00 - CAT
|
||
+# See Africa/Maputo.
|
||
|
||
# Mali
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Bamako -0:32:00 - LMT 1912
|
||
- 0:00 - GMT 1934 Feb 26
|
||
- -1:00 - WAT 1960 Jun 20
|
||
- 0:00 - GMT
|
||
-
|
||
# Mauritania
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Nouakchott -1:03:48 - LMT 1912
|
||
- 0:00 - GMT 1934 Feb 26
|
||
- -1:00 - WAT 1960 Nov 28
|
||
- 0:00 - GMT
|
||
+# See Africa/Abidjan.
|
||
|
||
# Mauritius
|
||
|
||
@@ -604,9 +566,7 @@
|
||
|
||
# From Steffen Thorsen (2008-07-10):
|
||
# According to
|
||
-# <a href="http://www.lexpress.mu/display_article.php?news_id=111216">
|
||
# http://www.lexpress.mu/display_article.php?news_id=111216
|
||
-# </a>
|
||
# (in French), Mauritius will start and end their DST a few days earlier
|
||
# than previously announced (2008-11-01 to 2009-03-31). The new start
|
||
# date is 2008-10-26 at 02:00 and the new end date is 2009-03-27 (no time
|
||
@@ -621,22 +581,17 @@
|
||
|
||
# From Alex Krivenyshev (2008-07-11):
|
||
# Seems that English language article "The revival of daylight saving
|
||
-# time: Energy conservation?"-# No. 16578 (07/11/2008) was originally
|
||
+# time: Energy conservation?"-# No. 16578 (07/11/2008) was originally
|
||
# published on Monday, June 30, 2008...
|
||
#
|
||
# I guess that article in French "Le gouvernement avance l'introduction
|
||
-# de l'heure d'ete" stating that DST in Mauritius starting on October 26
|
||
-# and ending on March 27, 2009 is the most recent one.
|
||
-# ...
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_mauritius02.html">
|
||
+# de l'heure d'été" stating that DST in Mauritius starting on October 26
|
||
+# and ending on March 27, 2009 is the most recent one....
|
||
# http://www.worldtimezone.com/dst_news/dst_news_mauritius02.html
|
||
-# </a>
|
||
|
||
# From Riad M. Hossen Ally (2008-08-03):
|
||
# The Government of Mauritius weblink
|
||
-# <a href="http://www.gov.mu/portal/site/pmosite/menuitem.4ca0efdee47462e7440a600248a521ca/?content_id=4728ca68b2a5b110VgnVCM1000000a04a8c0RCRD">
|
||
# http://www.gov.mu/portal/site/pmosite/menuitem.4ca0efdee47462e7440a600248a521ca/?content_id=4728ca68b2a5b110VgnVCM1000000a04a8c0RCRD
|
||
-# </a>
|
||
# Cabinet Decision of July 18th, 2008 states as follows:
|
||
#
|
||
# 4. ...Cabinet has agreed to the introduction into the National Assembly
|
||
@@ -646,33 +601,25 @@
|
||
# States of America. It will start at two o'clock in the morning on the
|
||
# last Sunday of October and will end at two o'clock in the morning on
|
||
# the last Sunday of March the following year. The summer time for the
|
||
-# year 2008 - 2009 will, therefore, be effective as from 26 October 2008
|
||
+# year 2008-2009 will, therefore, be effective as from 26 October 2008
|
||
# and end on 29 March 2009.
|
||
|
||
# From Ed Maste (2008-10-07):
|
||
# THE TIME BILL (No. XXVII of 2008) Explanatory Memorandum states the
|
||
# beginning / ending of summer time is 2 o'clock standard time in the
|
||
# morning of the last Sunday of October / last Sunday of March.
|
||
-# <a href="http://www.gov.mu/portal/goc/assemblysite/file/bill2708.pdf">
|
||
# http://www.gov.mu/portal/goc/assemblysite/file/bill2708.pdf
|
||
-# </a>
|
||
|
||
# From Steffen Thorsen (2009-06-05):
|
||
# According to several sources, Mauritius will not continue to observe
|
||
# DST the coming summer...
|
||
#
|
||
# Some sources, in French:
|
||
-# <a href="http://www.defimedia.info/news/946/Rashid-Beebeejaun-:-%C2%AB-L%E2%80%99heure-d%E2%80%99%C3%A9t%C3%A9-ne-sera-pas-appliqu%C3%A9e-cette-ann%C3%A9e-%C2%BB">
|
||
# http://www.defimedia.info/news/946/Rashid-Beebeejaun-:-%C2%AB-L%E2%80%99heure-d%E2%80%99%C3%A9t%C3%A9-ne-sera-pas-appliqu%C3%A9e-cette-ann%C3%A9e-%C2%BB
|
||
-# </a>
|
||
-# <a href="http://lexpress.mu/Story/3398~Beebeejaun---Les-objectifs-d-%C3%A9conomie-d-%C3%A9nergie-de-l-heure-d-%C3%A9t%C3%A9-ont-%C3%A9t%C3%A9-atteints-">
|
||
# http://lexpress.mu/Story/3398~Beebeejaun---Les-objectifs-d-%C3%A9conomie-d-%C3%A9nergie-de-l-heure-d-%C3%A9t%C3%A9-ont-%C3%A9t%C3%A9-atteints-
|
||
-# </a>
|
||
#
|
||
# Our wrap-up:
|
||
-# <a href="http://www.timeanddate.com/news/time/mauritius-dst-will-not-repeat.html">
|
||
# http://www.timeanddate.com/news/time/mauritius-dst-will-not-repeat.html
|
||
-# </a>
|
||
|
||
# From Arthur David Olson (2009-07-11):
|
||
# The "mauritius-dst-will-not-repeat" wrapup includes this:
|
||
@@ -685,18 +632,16 @@
|
||
Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 S
|
||
Rule Mauritius 2009 only - Mar lastSun 2:00 0 -
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis
|
||
+Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis
|
||
4:00 Mauritius MU%sT # Mauritius Time
|
||
# Agalega Is, Rodriguez
|
||
# no information; probably like Indian/Mauritius
|
||
|
||
# Mayotte
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou
|
||
- 3:00 - EAT
|
||
+# See Africa/Nairobi.
|
||
|
||
# Morocco
|
||
-# See the `europe' file for Spanish Morocco (Africa/Ceuta).
|
||
+# See the 'europe' file for Spanish Morocco (Africa/Ceuta).
|
||
|
||
# From Alex Krivenyshev (2008-05-09):
|
||
# Here is an article that Morocco plan to introduce Daylight Saving Time between
|
||
@@ -704,60 +649,44 @@
|
||
#
|
||
# "... Morocco is to save energy by adjusting its clock during summer so it will
|
||
# be one hour ahead of GMT between 1 June and 27 September, according to
|
||
-# Communication Minister and Gov ernment Spokesman, Khalid Naciri...."
|
||
+# Communication Minister and Government Spokesman, Khalid Naciri...."
|
||
#
|
||
-# <a href="http://www.worldtimezone.net/dst_news/dst_news_morocco01.html">
|
||
# http://www.worldtimezone.net/dst_news/dst_news_morocco01.html
|
||
-# </a>
|
||
-# OR
|
||
-# <a href="http://en.afrik.com/news11892.html">
|
||
# http://en.afrik.com/news11892.html
|
||
-# </a>
|
||
|
||
# From Alex Krivenyshev (2008-05-09):
|
||
-# The Morocco time change can be confirmed on Morocco web site Maghreb Arabe Presse:
|
||
-# <a href="http://www.map.ma/eng/sections/box3/morocco_shifts_to_da/view">
|
||
+# The Morocco time change can be confirmed on Morocco web site Maghreb Arabe
|
||
+# Presse:
|
||
# http://www.map.ma/eng/sections/box3/morocco_shifts_to_da/view
|
||
-# </a>
|
||
#
|
||
# Morocco shifts to daylight time on June 1st through September 27, Govt.
|
||
# spokesman.
|
||
|
||
# From Patrice Scattolin (2008-05-09):
|
||
# According to this article:
|
||
-# <a href="http://www.avmaroc.com/actualite/heure-dete-comment-a127896.html">
|
||
# http://www.avmaroc.com/actualite/heure-dete-comment-a127896.html
|
||
-# </a>
|
||
-# (and republished here:
|
||
-# <a href="http://www.actu.ma/heure-dete-comment_i127896_0.html">
|
||
-# http://www.actu.ma/heure-dete-comment_i127896_0.html
|
||
-# </a>
|
||
-# )
|
||
-# the changes occurs at midnight:
|
||
+# (and republished here: <http://www.actu.ma/heure-dete-comment_i127896_0.html>)
|
||
+# the changes occur at midnight:
|
||
#
|
||
-# saturday night may 31st at midnight (which in french is to be
|
||
-# intrepreted as the night between saturday and sunday)
|
||
-# sunday night the 28th at midnight
|
||
+# Saturday night May 31st at midnight (which in French is to be
|
||
+# interpreted as the night between Saturday and Sunday)
|
||
+# Sunday night the 28th at midnight
|
||
#
|
||
-# Seeing that the 28th is monday, I am guessing that she intends to say
|
||
-# the midnight of the 28th which is the midnight between sunday and
|
||
-# monday, which jives with other sources that say that it's inclusive
|
||
-# june1st to sept 27th.
|
||
+# Seeing that the 28th is Monday, I am guessing that she intends to say
|
||
+# the midnight of the 28th which is the midnight between Sunday and
|
||
+# Monday, which jives with other sources that say that it's inclusive
|
||
+# June 1st to Sept 27th.
|
||
#
|
||
# The decision was taken by decree *2-08-224 *but I can't find the decree
|
||
# published on the web.
|
||
#
|
||
# It's also confirmed here:
|
||
-# <a href="http://www.maroc.ma/NR/exeres/FACF141F-D910-44B0-B7FA-6E03733425D1.htm">
|
||
# http://www.maroc.ma/NR/exeres/FACF141F-D910-44B0-B7FA-6E03733425D1.htm
|
||
-# </a>
|
||
-# on a government portal as being between june 1st and sept 27th (not yet
|
||
-# posted in english).
|
||
+# on a government portal as being between June 1st and Sept 27th (not yet
|
||
+# posted in English).
|
||
#
|
||
-# The following google query will generate many relevant hits:
|
||
-# <a href="http://www.google.com/search?hl=en&q=Conseil+de+gouvernement+maroc+heure+avance&btnG=Search">
|
||
+# The following Google query will generate many relevant hits:
|
||
# http://www.google.com/search?hl=en&q=Conseil+de+gouvernement+maroc+heure+avance&btnG=Search
|
||
-# </a>
|
||
|
||
# From Steffen Thorsen (2008-08-27):
|
||
# Morocco will change the clocks back on the midnight between August 31
|
||
@@ -765,47 +694,32 @@
|
||
# of September:
|
||
#
|
||
# One article about it (in French):
|
||
-# <a href="http://www.menara.ma/fr/Actualites/Maroc/Societe/ci.retour_a_l_heure_gmt_a_partir_du_dimanche_31_aout_a_minuit_officiel_.default">
|
||
# http://www.menara.ma/fr/Actualites/Maroc/Societe/ci.retour_a_l_heure_gmt_a_partir_du_dimanche_31_aout_a_minuit_officiel_.default
|
||
-# </a>
|
||
#
|
||
# We have some further details posted here:
|
||
-# <a href="http://www.timeanddate.com/news/time/morocco-ends-dst-early-2008.html">
|
||
# http://www.timeanddate.com/news/time/morocco-ends-dst-early-2008.html
|
||
-# </a>
|
||
|
||
# From Steffen Thorsen (2009-03-17):
|
||
# Morocco will observe DST from 2009-06-01 00:00 to 2009-08-21 00:00 according
|
||
# to many sources, such as
|
||
-# <a href="http://news.marweb.com/morocco/entertainment/morocco-daylight-saving.html">
|
||
# http://news.marweb.com/morocco/entertainment/morocco-daylight-saving.html
|
||
-# </a>
|
||
-# <a href="http://www.medi1sat.ma/fr/depeche.aspx?idp=2312">
|
||
# http://www.medi1sat.ma/fr/depeche.aspx?idp=2312
|
||
-# </a>
|
||
# (French)
|
||
#
|
||
# Our summary:
|
||
-# <a href="http://www.timeanddate.com/news/time/morocco-starts-dst-2009.html">
|
||
# http://www.timeanddate.com/news/time/morocco-starts-dst-2009.html
|
||
-# </a>
|
||
|
||
# From Alexander Krivenyshev (2009-03-17):
|
||
# Here is a link to official document from Royaume du Maroc Premier Ministre,
|
||
-# Ministere de la Modernisation des Secteurs Publics
|
||
+# Ministère de la Modernisation des Secteurs Publics
|
||
#
|
||
# Under Article 1 of Royal Decree No. 455-67 of Act 23 safar 1387 (2 june 1967)
|
||
# concerning the amendment of the legal time, the Ministry of Modernization of
|
||
# Public Sectors announced that the official time in the Kingdom will be
|
||
# advanced 60 minutes from Sunday 31 May 2009 at midnight.
|
||
#
|
||
-# <a href="http://www.mmsp.gov.ma/francais/Actualites_fr/PDF_Actualites_Fr/HeureEte_FR.pdf">
|
||
# http://www.mmsp.gov.ma/francais/Actualites_fr/PDF_Actualites_Fr/HeureEte_FR.pdf
|
||
-# </a>
|
||
-#
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_morocco03.html">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_morocco03.html
|
||
-# </a>
|
||
|
||
# From Steffen Thorsen (2010-04-13):
|
||
# Several news media in Morocco report that the Ministry of Modernization
|
||
@@ -813,51 +727,33 @@
|
||
# 2010-05-02 to 2010-08-08.
|
||
#
|
||
# Example:
|
||
-# <a href="http://www.lavieeco.com/actualites/4099-le-maroc-passera-a-l-heure-d-ete-gmt1-le-2-mai.html">
|
||
# http://www.lavieeco.com/actualites/4099-le-maroc-passera-a-l-heure-d-ete-gmt1-le-2-mai.html
|
||
-# </a>
|
||
# (French)
|
||
# Our page:
|
||
-# <a href="http://www.timeanddate.com/news/time/morocco-starts-dst-2010.html">
|
||
# http://www.timeanddate.com/news/time/morocco-starts-dst-2010.html
|
||
-# </a>
|
||
|
||
# From Dan Abitol (2011-03-30):
|
||
# ...Rules for Africa/Casablanca are the following (24h format)
|
||
-# The 3rd april 2011 at 00:00:00, [it] will be 3rd april 1:00:00
|
||
-# The 31th july 2011 at 00:59:59, [it] will be 31th July 00:00:00
|
||
+# The 3rd April 2011 at 00:00:00, [it] will be 3rd April 01:00:00
|
||
+# The 31st July 2011 at 00:59:59, [it] will be 31st July 00:00:00
|
||
# ...Official links of change in morocco
|
||
# The change was broadcast on the FM Radio
|
||
# I ve called ANRT (telecom regulations in Morocco) at
|
||
# +212.537.71.84.00
|
||
-# <a href="http://www.anrt.net.ma/fr/">
|
||
# http://www.anrt.net.ma/fr/
|
||
-# </a>
|
||
# They said that
|
||
-# <a href="http://www.map.ma/fr/sections/accueil/l_heure_legale_au_ma/view">
|
||
# http://www.map.ma/fr/sections/accueil/l_heure_legale_au_ma/view
|
||
-# </a>
|
||
# is the official publication to look at.
|
||
# They said that the decision was already taken.
|
||
#
|
||
# More articles in the press
|
||
-# <a href="http://www.yabiladi.com/articles/details/5058/secret-l-heure-d-ete-maroc-lev">
|
||
-# http://www.yabiladi.com/articles/details/5058/secret-l-heure-d-ete-maroc-lev
|
||
-# </a>
|
||
-# e.html
|
||
-# <a href="http://www.lematin.ma/Actualite/Express/Article.asp?id=148923">
|
||
+# http://www.yabiladi.com/articles/details/5058/secret-l-heure-d-ete-maroc-leve.html
|
||
# http://www.lematin.ma/Actualite/Express/Article.asp?id=148923
|
||
-# </a>
|
||
-# <a href="http://www.lavieeco.com/actualite/Le-Maroc-passe-sur-GMT%2B1-a-partir-de-dim">
|
||
# http://www.lavieeco.com/actualite/Le-Maroc-passe-sur-GMT%2B1-a-partir-de-dim
|
||
-# anche-prochain-5538.html
|
||
-# </a>
|
||
|
||
# From Petr Machata (2011-03-30):
|
||
# They have it written in English here:
|
||
-# <a href="http://www.map.ma/eng/sections/home/morocco_to_spring_fo/view">
|
||
# http://www.map.ma/eng/sections/home/morocco_to_spring_fo/view
|
||
-# </a>
|
||
#
|
||
# It says there that "Morocco will resume its standard time on July 31,
|
||
# 2011 at midnight." Now they don't say whether they mean midnight of
|
||
@@ -865,20 +761,16 @@
|
||
# also been like that in the past.
|
||
|
||
# From Alexander Krivenyshev (2012-03-09):
|
||
-# According to Infomédiaire web site from Morocco (infomediaire.ma),
|
||
-# on March 9, 2012, (in French) Heure légale:
|
||
-# Le Maroc adopte officiellement l'heure d'été
|
||
-# <a href="http://www.infomediaire.ma/news/maroc/heure-l%C3%A9gale-le-maroc-adopte-officiellement-lheure-d%C3%A9t%C3%A9">
|
||
+# According to Infomédiaire web site from Morocco (infomediaire.ma),
|
||
+# on March 9, 2012, (in French) Heure légale:
|
||
+# Le Maroc adopte officiellement l'heure d'été
|
||
# http://www.infomediaire.ma/news/maroc/heure-l%C3%A9gale-le-maroc-adopte-officiellement-lheure-d%C3%A9t%C3%A9
|
||
-# </a>
|
||
# Governing Council adopted draft decree, that Morocco DST starts on
|
||
# the last Sunday of March (March 25, 2012) and ends on
|
||
# last Sunday of September (September 30, 2012)
|
||
# except the month of Ramadan.
|
||
# or (brief)
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_morocco06.html">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_morocco06.html
|
||
-# </a>
|
||
|
||
# From Arthur David Olson (2012-03-10):
|
||
# The infomediaire.ma source indicates that the system is to be in
|
||
@@ -889,17 +781,13 @@
|
||
|
||
# From Christophe Tropamer (2012-03-16):
|
||
# Seen Morocco change again:
|
||
-# <a href="http://www.le2uminutes.com/actualite.php">
|
||
# http://www.le2uminutes.com/actualite.php
|
||
-# </a>
|
||
-# "...à partir du dernier dimance d'avril et non fins mars,
|
||
-# comme annoncé précédemment."
|
||
+# "...à partir du dernier dimanche d'avril et non fins mars,
|
||
+# comme annoncé précédemment."
|
||
|
||
# From Milamber Space Network (2012-07-17):
|
||
# The official return to GMT is announced by the Moroccan government:
|
||
-# <a href="http://www.mmsp.gov.ma/fr/actualites.aspx?id=288">
|
||
# http://www.mmsp.gov.ma/fr/actualites.aspx?id=288 [in French]
|
||
-# </a>
|
||
#
|
||
# Google translation, lightly edited:
|
||
# Back to the standard time of the Kingdom (GMT)
|
||
@@ -917,7 +805,7 @@
|
||
# announced a bit in advance. On 2012-07-11 the Moroccan government
|
||
# announced that year's Ramadan daylight-saving transitions would be
|
||
# 2012-07-20 and 2012-08-20; see
|
||
-# <http://www.mmsp.gov.ma/fr/actualites.aspx?id=288>.
|
||
+# http://www.mmsp.gov.ma/fr/actualites.aspx?id=288
|
||
|
||
# From Andrew Paprocki (2013-07-02):
|
||
# Morocco announced that the year's Ramadan daylight-savings
|
||
@@ -937,39 +825,36 @@
|
||
# From Sebastien Willemijns (2014-03-18):
|
||
# http://www.afriquinfos.com/articles/2014/3/18/maroc-heure-dete-avancez-tous-horloges-247891.asp
|
||
|
||
-# From Paul Eggert (2014-03-19):
|
||
-# To estimate what the Moroccan government will do in future years,
|
||
-# transition dates for 2014 through 2038 were determined by running
|
||
-# the following program under GNU Emacs 24.3:
|
||
-#
|
||
-# (let ((islamic-year 1435))
|
||
-# (while (< islamic-year 1461)
|
||
-# (let ((a
|
||
-# (calendar-gregorian-from-absolute
|
||
-# (calendar-islamic-to-absolute (list 9 1 islamic-year))))
|
||
-# (b
|
||
-# (calendar-gregorian-from-absolute
|
||
-# (calendar-islamic-to-absolute (list 10 1 islamic-year)))))
|
||
-# (insert
|
||
-# (format
|
||
-# (concat "Rule\tMorocco\t%d\tonly\t-\t%s\t %2d\t 3:00\t0\t-\n"
|
||
-# "Rule\tMorocco\t%d\tonly\t-\t%s\t %2d\t 2:00\t1:00\tS\n")
|
||
-# (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
|
||
-# (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
|
||
+# From Milamber Space Network (2014-06-05):
|
||
+# The Moroccan government has recently announced that the country will return
|
||
+# to standard time at 03:00 on Saturday, June 28, 2014 local time.... DST
|
||
+# will resume again at 02:00 on Saturday, August 2, 2014....
|
||
+# http://www.mmsp.gov.ma/fr/actualites.aspx?id=586
|
||
+
|
||
+# From Paul Eggert (2014-06-05):
|
||
+# For now, guess that later spring and fall transitions will use 2014's rules,
|
||
+# and guess that Morocco will switch to standard time at 03:00 the last
|
||
+# Saturday before Ramadan, and back to DST at 02:00 the first Saturday after
|
||
+# Ramadan. To implement this, transition dates for 2015 through 2037 were
|
||
+# determined by running the following program under GNU Emacs 24.3, with the
|
||
+# results integrated by hand into the table below.
|
||
+# (let ((islamic-year 1436))
|
||
+# (while (< islamic-year 1460)
|
||
+# (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year)))
|
||
+# (b (calendar-islamic-to-absolute (list 10 1 islamic-year)))
|
||
+# (saturday 6))
|
||
+# (while (/= saturday (mod (setq a (1- a)) 7)))
|
||
+# (while (/= saturday (mod b 7))
|
||
+# (setq b (1+ b)))
|
||
+# (setq a (calendar-gregorian-from-absolute a))
|
||
+# (setq b (calendar-gregorian-from-absolute b))
|
||
+# (insert
|
||
+# (format
|
||
+# (concat "Rule\tMorocco\t%d\tonly\t-\t%s\t%2d\t 3:00\t0\t-\n"
|
||
+# "Rule\tMorocco\t%d\tonly\t-\t%s\t%2d\t 2:00\t1:00\tS\n")
|
||
+# (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
|
||
+# (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
|
||
# (setq islamic-year (+ 1 islamic-year))))
|
||
-#
|
||
-# with spring-forward transitions removed for 2023-2025, when the
|
||
-# normal spring-forward date falls during the estimated Ramadan; with
|
||
-# all transitions removed for 2026-2035, where the estimated Ramadan
|
||
-# falls entirely outside daylight-saving time; and with fall-back
|
||
-# transitions removed for 2036-2037, where the normal fall-back
|
||
-# date falls during the estimated Ramadan. Normally, the table would
|
||
-# stop after 2037 because 32-bit time_t values roll around early in 2038,
|
||
-# but that would imply a prediction of perpetual DST after March 2038
|
||
-# due to the year-2037 glitches. So, this table instead stops after
|
||
-# 2038, the first non-glitchy year after the 32-bit rollover.
|
||
-# An advantage of stopping after 2038 is that it lets zic guess
|
||
-# TZ='WET0WEST,M3.5.0,M10.5.0/3' for time stamps far in the future.
|
||
|
||
# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
|
||
@@ -991,46 +876,44 @@
|
||
Rule Morocco 2008 only - Jun 1 0:00 1:00 S
|
||
Rule Morocco 2008 only - Sep 1 0:00 0 -
|
||
Rule Morocco 2009 only - Jun 1 0:00 1:00 S
|
||
-Rule Morocco 2009 only - Aug 21 0:00 0 -
|
||
+Rule Morocco 2009 only - Aug 21 0:00 0 -
|
||
Rule Morocco 2010 only - May 2 0:00 1:00 S
|
||
Rule Morocco 2010 only - Aug 8 0:00 0 -
|
||
Rule Morocco 2011 only - Apr 3 0:00 1:00 S
|
||
-Rule Morocco 2011 only - Jul 31 0 0 -
|
||
-Rule Morocco 2012 2013 - Apr lastSun 2:00 1:00 S
|
||
-Rule Morocco 2012 only - Sep 30 3:00 0 -
|
||
-Rule Morocco 2012 only - Jul 20 3:00 0 -
|
||
-Rule Morocco 2012 only - Aug 20 2:00 1:00 S
|
||
-Rule Morocco 2013 only - Jul 7 3:00 0 -
|
||
-Rule Morocco 2013 only - Aug 10 2:00 1:00 S
|
||
-Rule Morocco 2013 2035 - Oct lastSun 3:00 0 -
|
||
-Rule Morocco 2014 2022 - Mar lastSun 2:00 1:00 S
|
||
-Rule Morocco 2014 only - Jun 29 3:00 0 -
|
||
-Rule Morocco 2014 only - Jul 29 2:00 1:00 S
|
||
-Rule Morocco 2015 only - Jun 18 3:00 0 -
|
||
-Rule Morocco 2015 only - Jul 18 2:00 1:00 S
|
||
-Rule Morocco 2016 only - Jun 7 3:00 0 -
|
||
-Rule Morocco 2016 only - Jul 7 2:00 1:00 S
|
||
-Rule Morocco 2017 only - May 27 3:00 0 -
|
||
-Rule Morocco 2017 only - Jun 26 2:00 1:00 S
|
||
-Rule Morocco 2018 only - May 16 3:00 0 -
|
||
-Rule Morocco 2018 only - Jun 15 2:00 1:00 S
|
||
-Rule Morocco 2019 only - May 6 3:00 0 -
|
||
-Rule Morocco 2019 only - Jun 5 2:00 1:00 S
|
||
-Rule Morocco 2020 only - Apr 24 3:00 0 -
|
||
-Rule Morocco 2020 only - May 24 2:00 1:00 S
|
||
-Rule Morocco 2021 only - Apr 13 3:00 0 -
|
||
-Rule Morocco 2021 only - May 13 2:00 1:00 S
|
||
-Rule Morocco 2022 only - Apr 3 3:00 0 -
|
||
-Rule Morocco 2022 only - May 3 2:00 1:00 S
|
||
-Rule Morocco 2023 only - Apr 22 2:00 1:00 S
|
||
-Rule Morocco 2024 only - Apr 10 2:00 1:00 S
|
||
-Rule Morocco 2025 only - Mar 31 2:00 1:00 S
|
||
-Rule Morocco 2026 max - Mar lastSun 2:00 1:00 S
|
||
-Rule Morocco 2036 only - Oct 21 3:00 0 -
|
||
-Rule Morocco 2037 only - Oct 11 3:00 0 -
|
||
-Rule Morocco 2038 only - Sep 30 3:00 0 -
|
||
-Rule Morocco 2038 only - Oct 30 2:00 1:00 S
|
||
-Rule Morocco 2038 max - Oct lastSun 3:00 0 -
|
||
+Rule Morocco 2011 only - Jul 31 0 0 -
|
||
+Rule Morocco 2012 2013 - Apr lastSun 2:00 1:00 S
|
||
+Rule Morocco 2012 only - Sep 30 3:00 0 -
|
||
+Rule Morocco 2012 only - Jul 20 3:00 0 -
|
||
+Rule Morocco 2012 only - Aug 20 2:00 1:00 S
|
||
+Rule Morocco 2013 only - Jul 7 3:00 0 -
|
||
+Rule Morocco 2013 only - Aug 10 2:00 1:00 S
|
||
+Rule Morocco 2013 max - Oct lastSun 3:00 0 -
|
||
+Rule Morocco 2014 2022 - Mar lastSun 2:00 1:00 S
|
||
+Rule Morocco 2014 only - Jun 28 3:00 0 -
|
||
+Rule Morocco 2014 only - Aug 2 2:00 1:00 S
|
||
+Rule Morocco 2015 only - Jun 13 3:00 0 -
|
||
+Rule Morocco 2015 only - Jul 18 2:00 1:00 S
|
||
+Rule Morocco 2016 only - Jun 4 3:00 0 -
|
||
+Rule Morocco 2016 only - Jul 9 2:00 1:00 S
|
||
+Rule Morocco 2017 only - May 20 3:00 0 -
|
||
+Rule Morocco 2017 only - Jul 1 2:00 1:00 S
|
||
+Rule Morocco 2018 only - May 12 3:00 0 -
|
||
+Rule Morocco 2018 only - Jun 16 2:00 1:00 S
|
||
+Rule Morocco 2019 only - May 4 3:00 0 -
|
||
+Rule Morocco 2019 only - Jun 8 2:00 1:00 S
|
||
+Rule Morocco 2020 only - Apr 18 3:00 0 -
|
||
+Rule Morocco 2020 only - May 30 2:00 1:00 S
|
||
+Rule Morocco 2021 only - Apr 10 3:00 0 -
|
||
+Rule Morocco 2021 only - May 15 2:00 1:00 S
|
||
+Rule Morocco 2022 only - Apr 2 3:00 0 -
|
||
+Rule Morocco 2022 only - May 7 2:00 1:00 S
|
||
+Rule Morocco 2023 only - Apr 22 2:00 1:00 S
|
||
+Rule Morocco 2024 only - Apr 13 2:00 1:00 S
|
||
+Rule Morocco 2025 only - Apr 5 2:00 1:00 S
|
||
+Rule Morocco 2026 max - Mar lastSun 2:00 1:00 S
|
||
+Rule Morocco 2035 only - Oct 27 3:00 0 -
|
||
+Rule Morocco 2036 only - Oct 18 3:00 0 -
|
||
+Rule Morocco 2037 only - Oct 10 3:00 0 -
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26
|
||
@@ -1049,21 +932,34 @@
|
||
# Assume that this has been true since Western Sahara switched to GMT,
|
||
# since most of it was then controlled by Morocco.
|
||
|
||
-Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan
|
||
+Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan # El Aaiún
|
||
-1:00 - WAT 1976 Apr 14
|
||
0:00 Morocco WE%sT
|
||
|
||
# Mozambique
|
||
+#
|
||
+# Shanks gives 1903-03-01 for the transition to CAT.
|
||
+# Perhaps the 1911-05-26 Portuguese decree
|
||
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
|
||
+# merely made it official?
|
||
+#
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Africa/Maputo 2:10:20 - LMT 1903 Mar
|
||
2:00 - CAT
|
||
+Link Africa/Maputo Africa/Blantyre # Malawi
|
||
+Link Africa/Maputo Africa/Bujumbura # Burundi
|
||
+Link Africa/Maputo Africa/Gaborone # Botswana
|
||
+Link Africa/Maputo Africa/Harare # Zimbabwe
|
||
+Link Africa/Maputo Africa/Kigali # Rwanda
|
||
+Link Africa/Maputo Africa/Lubumbashi # E Dem. Rep. of Congo
|
||
+Link Africa/Maputo Africa/Lusaka # Zambia
|
||
|
||
# Namibia
|
||
# The 1994-04-03 transition is from Shanks & Pottenger.
|
||
# Shanks & Pottenger report no DST after 1998-04; go with IATA.
|
||
|
||
-# From Petronella Sibeene (2007-03-30) in
|
||
-# <http://allafrica.com/stories/200703300178.html>:
|
||
+# From Petronella Sibeene (2007-03-30):
|
||
+# http://allafrica.com/stories/200703300178.html
|
||
# While the entire country changes its time, Katima Mulilo and other
|
||
# settlements in Caprivi unofficially will not because the sun there
|
||
# rises and sets earlier compared to other regions. Chief of
|
||
@@ -1080,34 +976,41 @@
|
||
Rule Namibia 1995 max - Apr Sun>=1 2:00 0 -
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8
|
||
- 1:30 - SWAT 1903 Mar # SW Africa Time
|
||
- 2:00 - SAST 1942 Sep 20 2:00
|
||
- 2:00 1:00 SAST 1943 Mar 21 2:00
|
||
+ 1:30 - SWAT 1903 Mar # SW Africa Time
|
||
+ 2:00 - SAST 1942 Sep 20 2:00
|
||
+ 2:00 1:00 SAST 1943 Mar 21 2:00
|
||
2:00 - SAST 1990 Mar 21 # independence
|
||
2:00 - CAT 1994 Apr 3
|
||
1:00 Namibia WA%sT
|
||
|
||
# Niger
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Niamey 0:08:28 - LMT 1912
|
||
- -1:00 - WAT 1934 Feb 26
|
||
- 0:00 - GMT 1960
|
||
- 1:00 - WAT
|
||
+# See Africa/Lagos.
|
||
|
||
# Nigeria
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Africa/Lagos 0:13:36 - LMT 1919 Sep
|
||
1:00 - WAT
|
||
+Link Africa/Lagos Africa/Bangui # Central African Republic
|
||
+Link Africa/Lagos Africa/Brazzaville # Rep. of the Congo
|
||
+Link Africa/Lagos Africa/Douala # Cameroon
|
||
+Link Africa/Lagos Africa/Kinshasa # Dem. Rep. of the Congo (west)
|
||
+Link Africa/Lagos Africa/Libreville # Gabon
|
||
+Link Africa/Lagos Africa/Luanda # Angola
|
||
+Link Africa/Lagos Africa/Malabo # Equatorial Guinea
|
||
+Link Africa/Lagos Africa/Niamey # Niger
|
||
+Link Africa/Lagos Africa/Porto-Novo # Benin
|
||
|
||
-# Reunion
|
||
+# Réunion
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis
|
||
- 4:00 - RET # Reunion Time
|
||
+Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis
|
||
+ 4:00 - RET # Réunion Time
|
||
#
|
||
-# Scattered Islands (Iles Eparses) administered from Reunion are as follows.
|
||
+# Crozet Islands also observes Réunion time; see the 'antarctica' file.
|
||
+#
|
||
+# Scattered Islands (Îles Éparses) administered from Réunion are as follows.
|
||
# The following information about them is taken from
|
||
-# Iles Eparses (www.outre-mer.gouv.fr/domtom/ile.htm, 1997-07-22, in French;
|
||
-# no longer available as of 1999-08-17).
|
||
+# Îles Éparses (<http://www.outre-mer.gouv.fr/domtom/ile.htm>, 1997-07-22,
|
||
+# in French; no longer available as of 1999-08-17).
|
||
# We have no info about their time zone histories.
|
||
#
|
||
# Bassas da India - uninhabited
|
||
@@ -1117,37 +1020,24 @@
|
||
# Tromelin - inhabited until at least 1958
|
||
|
||
# Rwanda
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Kigali 2:00:16 - LMT 1935 Jun
|
||
- 2:00 - CAT
|
||
+# See Africa/Maputo.
|
||
|
||
# St Helena
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Atlantic/St_Helena -0:22:48 - LMT 1890 # Jamestown
|
||
- -0:22:48 - JMT 1951 # Jamestown Mean Time
|
||
- 0:00 - GMT
|
||
+# See Africa/Abidjan.
|
||
# The other parts of the St Helena territory are similar:
|
||
# Tristan da Cunha: on GMT, say Whitman and the CIA
|
||
-# Ascension: on GMT, says usno1995 and the CIA
|
||
+# Ascension: on GMT, say the USNO (1995-12-21) and the CIA
|
||
# Gough (scientific station since 1955; sealers wintered previously):
|
||
# on GMT, says the CIA
|
||
-# Inaccessible, Nightingale: no information, but probably GMT
|
||
+# Inaccessible, Nightingale: uninhabited
|
||
|
||
-# Sao Tome and Principe
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Sao_Tome 0:26:56 - LMT 1884
|
||
- -0:36:32 - LMT 1912 # Lisbon Mean Time
|
||
- 0:00 - GMT
|
||
-
|
||
+# São Tomé and Príncipe
|
||
# Senegal
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Dakar -1:09:44 - LMT 1912
|
||
- -1:00 - WAT 1941 Jun
|
||
- 0:00 - GMT
|
||
+# See Africa/Abidjan.
|
||
|
||
# Seychelles
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Indian/Mahe 3:41:48 - LMT 1906 Jun # Victoria
|
||
+Zone Indian/Mahe 3:41:48 - LMT 1906 Jun # Victoria
|
||
4:00 - SCT # Seychelles Time
|
||
# From Paul Eggert (2001-05-30):
|
||
# Aldabra, Farquhar, and Desroches, originally dependencies of the
|
||
@@ -1157,24 +1047,10 @@
|
||
# Possibly the islands were uninhabited.
|
||
|
||
# Sierra Leone
|
||
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
-# Whitman gives Mar 31 - Aug 31 for 1931 on; go with Shanks & Pottenger.
|
||
-Rule SL 1935 1942 - Jun 1 0:00 0:40 SLST
|
||
-Rule SL 1935 1942 - Oct 1 0:00 0 WAT
|
||
-Rule SL 1957 1962 - Jun 1 0:00 1:00 SLST
|
||
-Rule SL 1957 1962 - Sep 1 0:00 0 GMT
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Freetown -0:53:00 - LMT 1882
|
||
- -0:53:00 - FMT 1913 Jun # Freetown Mean Time
|
||
- -1:00 SL %s 1957
|
||
- 0:00 SL %s
|
||
+# See Africa/Abidjan.
|
||
|
||
# Somalia
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Mogadishu 3:01:28 - LMT 1893 Nov
|
||
- 3:00 - EAT 1931
|
||
- 2:30 - BEAT 1957
|
||
- 3:00 - EAT
|
||
+# See Africa/Nairobi.
|
||
|
||
# South Africa
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
@@ -1184,15 +1060,18 @@
|
||
Zone Africa/Johannesburg 1:52:00 - LMT 1892 Feb 8
|
||
1:30 - SAST 1903 Mar
|
||
2:00 SA SAST
|
||
+Link Africa/Johannesburg Africa/Maseru # Lesotho
|
||
+Link Africa/Johannesburg Africa/Mbabane # Swaziland
|
||
+#
|
||
# Marion and Prince Edward Is
|
||
# scientific station since 1947
|
||
# no information
|
||
|
||
# Sudan
|
||
#
|
||
-# From <a href="http://www.sunanews.net/sn13jane.html">
|
||
-# Sudan News Agency (2000-01-13)
|
||
-# </a>, also reported by Michael De Beukelaer-Dossche via Steffen Thorsen:
|
||
+# From <http://www.sunanews.net/sn13jane.html>
|
||
+# Sudan News Agency (2000-01-13),
|
||
+# also reported by Michaël De Beukelaer-Dossche via Steffen Thorsen:
|
||
# Clocks will be moved ahead for 60 minutes all over the Sudan as of noon
|
||
# Saturday.... This was announced Thursday by Caretaker State Minister for
|
||
# Manpower Abdul-Rahman Nur-Eddin.
|
||
@@ -1211,26 +1090,18 @@
|
||
Link Africa/Khartoum Africa/Juba
|
||
|
||
# Swaziland
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Mbabane 2:04:24 - LMT 1903 Mar
|
||
- 2:00 - SAST
|
||
+# See Africa/Johannesburg.
|
||
|
||
# Tanzania
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Dar_es_Salaam 2:37:08 - LMT 1931
|
||
- 3:00 - EAT 1948
|
||
- 2:45 - BEAUT 1961
|
||
- 3:00 - EAT
|
||
+# See Africa/Nairobi.
|
||
|
||
# Togo
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Lome 0:04:52 - LMT 1893
|
||
- 0:00 - GMT
|
||
+# See Africa/Abidjan.
|
||
|
||
# Tunisia
|
||
|
||
# From Gwillim Law (2005-04-30):
|
||
-# My correspondent, Risto Nykanen, has alerted me to another adoption of DST,
|
||
+# My correspondent, Risto Nykänen, has alerted me to another adoption of DST,
|
||
# this time in Tunisia. According to Yahoo France News
|
||
# <http://fr.news.yahoo.com/050426/5/4dumk.html>, in a story attributed to AP
|
||
# and dated 2005-04-26, "Tunisia has decided to advance its official time by
|
||
@@ -1239,8 +1110,8 @@
|
||
# Saturday." (My translation)
|
||
#
|
||
# From Oscar van Vlijmen (2005-05-02):
|
||
-# LaPresse, the first national daily newspaper ...
|
||
-# <http://www.lapresse.tn/archives/archives280405/actualites/lheure.html>
|
||
+# La Presse, the first national daily newspaper ...
|
||
+# http://www.lapresse.tn/archives/archives280405/actualites/lheure.html
|
||
# ... DST for 2005: on: Sun May 1 0h standard time, off: Fri Sept. 30,
|
||
# 1h standard time.
|
||
#
|
||
@@ -1253,18 +1124,12 @@
|
||
# From Steffen Thorsen (2009-03-16):
|
||
# According to several news sources, Tunisia will not observe DST this year.
|
||
# (Arabic)
|
||
-# <a href="http://www.elbashayer.com/?page=viewn&nid=42546">
|
||
# http://www.elbashayer.com/?page=viewn&nid=42546
|
||
-# </a>
|
||
-# <a href="http://www.babnet.net/kiwidetail-15295.asp">
|
||
# http://www.babnet.net/kiwidetail-15295.asp
|
||
-# </a>
|
||
#
|
||
# We have also confirmed this with the US embassy in Tunisia.
|
||
# We have a wrap-up about this on the following page:
|
||
-# <a href="http://www.timeanddate.com/news/time/tunisia-cancels-dst-2009.html">
|
||
# http://www.timeanddate.com/news/time/tunisia-cancels-dst-2009.html
|
||
-# </a>
|
||
|
||
# From Alexander Krivenyshev (2009-03-17):
|
||
# Here is a link to Tunis Afrique Presse News Agency
|
||
@@ -1272,20 +1137,17 @@
|
||
# Standard time to be kept the whole year long (tap.info.tn):
|
||
#
|
||
# (in English)
|
||
-# <a href="http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=26813&Itemid=157">
|
||
# http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=26813&Itemid=157
|
||
-# </a>
|
||
#
|
||
# (in Arabic)
|
||
-# <a href="http://www.tap.info.tn/ar/index.php?option=com_content&task=view&id=61240&Itemid=1">
|
||
# http://www.tap.info.tn/ar/index.php?option=com_content&task=view&id=61240&Itemid=1
|
||
-# </a>
|
||
|
||
-# From Arthur David Olson (2009--3-18):
|
||
-# The Tunis Afrique Presse News Agency notice contains this: "This measure is due to the fact
|
||
-# that the fasting month of ramadan coincides with the period concerned by summer time.
|
||
-# Therefore, the standard time will be kept unchanged the whole year long."
|
||
-# So foregoing DST seems to be an exception (albeit one that may be repeated in the future).
|
||
+# From Arthur David Olson (2009-03-18):
|
||
+# The Tunis Afrique Presse News Agency notice contains this: "This measure is
|
||
+# due to the fact that the fasting month of Ramadan coincides with the period
|
||
+# concerned by summer time. Therefore, the standard time will be kept
|
||
+# unchanged the whole year long." So foregoing DST seems to be an exception
|
||
+# (albeit one that may be repeated in the future).
|
||
|
||
# From Alexander Krivenyshev (2010-03-27):
|
||
# According to some news reports Tunis confirmed not to use DST in 2010
|
||
@@ -1297,12 +1159,8 @@
|
||
# coincided with the month of Ramadan..."
|
||
#
|
||
# (in Arabic)
|
||
-# <a href="http://www.moheet.com/show_news.aspx?nid=358861&pg=1">
|
||
# http://www.moheet.com/show_news.aspx?nid=358861&pg=1
|
||
-# <a href="http://www.almadenahnews.com/newss/news.php?c=118&id=38036">
|
||
# http://www.almadenahnews.com/newss/news.php?c=118&id=38036
|
||
-# or
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_tunis02.html">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_tunis02.html
|
||
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
@@ -1337,23 +1195,12 @@
|
||
# Shanks & Pottenger say the 1911 switch was on Mar 9; go with Howse's Mar 11.
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Africa/Tunis 0:40:44 - LMT 1881 May 12
|
||
- 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
|
||
+ 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
|
||
1:00 Tunisia CE%sT
|
||
|
||
# Uganda
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Kampala 2:09:40 - LMT 1928 Jul
|
||
- 3:00 - EAT 1930
|
||
- 2:30 - BEAT 1948
|
||
- 2:45 - BEAUT 1957
|
||
- 3:00 - EAT
|
||
+# See Africa/Nairobi.
|
||
|
||
# Zambia
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Lusaka 1:53:08 - LMT 1903 Mar
|
||
- 2:00 - CAT
|
||
-
|
||
# Zimbabwe
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Africa/Harare 2:04:12 - LMT 1903 Mar
|
||
- 2:00 - CAT
|
||
+# See Africa/Maputo.
|
||
--- ./jdk/make/sun/javazic/tzdata/antarctica Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/sun/javazic/tzdata/antarctica Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -21,19 +21,16 @@
|
||
# or visit www.oracle.com if you need additional information or have any
|
||
# questions.
|
||
#
|
||
-# <pre>
|
||
# This file is in the public domain, so clarified as of
|
||
# 2009-05-17 by Arthur David Olson.
|
||
|
||
# From Paul Eggert (1999-11-15):
|
||
# To keep things manageable, we list only locations occupied year-round; see
|
||
-# <a href="http://www.comnap.aq/comnap/comnap.nsf/P/Stations/">
|
||
# COMNAP - Stations and Bases
|
||
-# </a>
|
||
+# http://www.comnap.aq/comnap/comnap.nsf/P/Stations/
|
||
# and
|
||
-# <a href="http://www.spri.cam.ac.uk/bob/periant.htm">
|
||
# Summary of the Peri-Antarctic Islands (1998-07-23)
|
||
-# </a>
|
||
+# http://www.spri.cam.ac.uk/bob/periant.htm
|
||
# for information.
|
||
# Unless otherwise specified, we have no time zone information.
|
||
#
|
||
@@ -78,19 +75,19 @@
|
||
|
||
# Argentina - year-round bases
|
||
# Belgrano II, Confin Coast, -770227-0343737, since 1972-02-05
|
||
-# Esperanza, San Martin Land, -6323-05659, since 1952-12-17
|
||
-# Jubany, Potter Peninsula, King George Island, -6414-0602320, since 1982-01
|
||
-# Marambio, Seymour I, -6414-05637, since 1969-10-29
|
||
+# Carlini, Potter Cove, King George Island, -6414-0602320, since 1982-01
|
||
+# Esperanza, Hope Bay, -6323-05659, since 1952-12-17
|
||
+# Marambio, -6414-05637, since 1969-10-29
|
||
# Orcadas, Laurie I, -6016-04444, since 1904-02-22
|
||
-# San Martin, Debenham I, -6807-06708, since 1951-03-21
|
||
+# San Martín, Barry I, -6808-06706, since 1951-03-21
|
||
# (except 1960-03 / 1976-03-21)
|
||
|
||
# Australia - territories
|
||
# Heard Island, McDonald Islands (uninhabited)
|
||
# previously sealers and scientific personnel wintered
|
||
-# <a href="http://web.archive.org/web/20021204222245/http://www.dstc.qut.edu.au/DST/marg/daylight.html">
|
||
# Margaret Turner reports
|
||
-# </a> (1999-09-30) that they're UTC+5, with no DST;
|
||
+# http://web.archive.org/web/20021204222245/http://www.dstc.qut.edu.au/DST/marg/daylight.html
|
||
+# (1999-09-30) that they're UTC+5, with no DST;
|
||
# presumably this is when they have visitors.
|
||
#
|
||
# year-round bases
|
||
@@ -107,14 +104,10 @@
|
||
# The changes occurred on 2009-10-18 at 02:00 (local times).
|
||
#
|
||
# Government source: (Australian Antarctic Division)
|
||
-# <a href="http://www.aad.gov.au/default.asp?casid=37079">
|
||
# http://www.aad.gov.au/default.asp?casid=37079
|
||
-# </a>
|
||
#
|
||
# We have more background information here:
|
||
-# <a href="http://www.timeanddate.com/news/time/antarctica-new-times.html">
|
||
# http://www.timeanddate.com/news/time/antarctica-new-times.html
|
||
-# </a>
|
||
|
||
# From Steffen Thorsen (2010-03-10):
|
||
# We got these changes from the Australian Antarctic Division: ...
|
||
@@ -129,50 +122,49 @@
|
||
# - Mawson station stays on UTC+5.
|
||
#
|
||
# Background:
|
||
-# <a href="http://www.timeanddate.com/news/time/antartica-time-changes-2010.html">
|
||
# http://www.timeanddate.com/news/time/antartica-time-changes-2010.html
|
||
-# </a>
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Antarctica/Casey 0 - zzz 1969
|
||
- 8:00 - WST 2009 Oct 18 2:00
|
||
- # Western (Aus) Standard Time
|
||
- 11:00 - CAST 2010 Mar 5 2:00
|
||
- # Casey Time
|
||
- 8:00 - WST 2011 Oct 28 2:00
|
||
+ 8:00 - AWST 2009 Oct 18 2:00
|
||
+ # Australian Western Std Time
|
||
+ 11:00 - CAST 2010 Mar 5 2:00 # Casey Time
|
||
+ 8:00 - AWST 2011 Oct 28 2:00
|
||
11:00 - CAST 2012 Feb 21 17:00u
|
||
- 8:00 - WST
|
||
+ 8:00 - AWST
|
||
Zone Antarctica/Davis 0 - zzz 1957 Jan 13
|
||
- 7:00 - DAVT 1964 Nov # Davis Time
|
||
+ 7:00 - DAVT 1964 Nov # Davis Time
|
||
0 - zzz 1969 Feb
|
||
- 7:00 - DAVT 2009 Oct 18 2:00
|
||
+ 7:00 - DAVT 2009 Oct 18 2:00
|
||
5:00 - DAVT 2010 Mar 10 20:00u
|
||
- 7:00 - DAVT 2011 Oct 28 2:00
|
||
+ 7:00 - DAVT 2011 Oct 28 2:00
|
||
5:00 - DAVT 2012 Feb 21 20:00u
|
||
7:00 - DAVT
|
||
Zone Antarctica/Mawson 0 - zzz 1954 Feb 13
|
||
- 6:00 - MAWT 2009 Oct 18 2:00
|
||
- # Mawson Time
|
||
+ 6:00 - MAWT 2009 Oct 18 2:00 # Mawson Time
|
||
5:00 - MAWT
|
||
# References:
|
||
-# <a href="http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html">
|
||
# Casey Weather (1998-02-26)
|
||
-# </a>
|
||
-# <a href="http://www.antdiv.gov.au/aad/exop/sfo/davis/video.html">
|
||
+# http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html
|
||
# Davis Station, Antarctica (1998-02-26)
|
||
-# </a>
|
||
-# <a href="http://www.antdiv.gov.au/aad/exop/sfo/mawson/video.html">
|
||
+# http://www.antdiv.gov.au/aad/exop/sfo/davis/video.html
|
||
# Mawson Station, Antarctica (1998-02-25)
|
||
-# </a>
|
||
+# http://www.antdiv.gov.au/aad/exop/sfo/mawson/video.html
|
||
+
|
||
+# Belgium - year-round base
|
||
+# Princess Elisabeth, Queen Maud Land, -713412+0231200, since 2007
|
||
|
||
# Brazil - year-round base
|
||
-# Comandante Ferraz, King George Island, -6205+05824, since 1983/4
|
||
+# Ferraz, King George Island, -6205+05824, since 1983/4
|
||
+
|
||
+# Bulgaria - year-round base
|
||
+# St. Kliment Ohridski, Livingston Island, -623829-0602153, since 1988
|
||
|
||
# Chile - year-round bases and towns
|
||
# Escudero, South Shetland Is, -621157-0585735, since 1994
|
||
-# Presidente Eduadro Frei, King George Island, -6214-05848, since 1969-03-07
|
||
-# General Bernardo O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02
|
||
-# Capitan Arturo Prat, -6230-05941
|
||
+# Frei Montalva, King George Island, -6214-05848, since 1969-03-07
|
||
+# O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02
|
||
+# Prat, -6230-05941
|
||
# Villa Las Estrellas (a town), around the Frei base, since 1984-04-09
|
||
# These locations have always used Santiago time; use TZ='America/Santiago'.
|
||
|
||
@@ -180,31 +172,35 @@
|
||
# Great Wall, King George Island, -6213-05858, since 1985-02-20
|
||
# Zhongshan, Larsemann Hills, Prydz Bay, -6922+07623, since 1989-02-26
|
||
|
||
-# France - year-round bases
|
||
+# France - year-round bases (also see "France & Italy")
|
||
#
|
||
# From Antoine Leca (1997-01-20):
|
||
-# Time data are from Nicole Pailleau at the IFRTP
|
||
+# Time data entries are from Nicole Pailleau at the IFRTP
|
||
# (French Institute for Polar Research and Technology).
|
||
-# She confirms that French Southern Territories and Terre Adelie bases
|
||
-# don't observe daylight saving time, even if Terre Adelie supplies came
|
||
+# She confirms that French Southern Territories and Terre Adélie bases
|
||
+# don't observe daylight saving time, even if Terre Adélie supplies came
|
||
# from Tasmania.
|
||
#
|
||
# French Southern Territories with year-round inhabitants
|
||
#
|
||
-# Martin-de-Vivies Base, Amsterdam Island, -374105+0773155, since 1950
|
||
-# Alfred-Faure Base, Crozet Islands, -462551+0515152, since 1964
|
||
-# Port-aux-Francais, Kerguelen Islands, -492110+0701303, since 1951;
|
||
+# Alfred Faure, Possession Island, Crozet Islands, -462551+0515152, since 1964;
|
||
+# sealing & whaling stations operated variously 1802/1911+;
|
||
+# see Indian/Reunion.
|
||
+#
|
||
+# Martin-de-Viviès, Amsterdam Island, -374105+0773155, since 1950
|
||
+# Port-aux-Français, Kerguelen Islands, -492110+0701303, since 1951;
|
||
# whaling & sealing station operated 1908/1914, 1920/1929, and 1951/1956
|
||
#
|
||
# St Paul Island - near Amsterdam, uninhabited
|
||
# fishing stations operated variously 1819/1931
|
||
#
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Indian/Kerguelen 0 - zzz 1950 # Port-aux-Francais
|
||
+Zone Indian/Kerguelen 0 - zzz 1950 # Port-aux-Français
|
||
5:00 - TFT # ISO code TF Time
|
||
#
|
||
# year-round base in the main continent
|
||
-# Dumont-d'Urville, Ile des Petrels, -6640+14001, since 1956-11
|
||
+# Dumont d'Urville, Île des Pétrels, -6640+14001, since 1956-11
|
||
+# <http://en.wikipedia.org/wiki/Dumont_d'Urville_Station> (2005-12-05)
|
||
#
|
||
# Another base at Port-Martin, 50km east, began operation in 1947.
|
||
# It was destroyed by fire on 1952-01-14.
|
||
@@ -214,20 +210,22 @@
|
||
10:00 - PMT 1952 Jan 14 # Port-Martin Time
|
||
0 - zzz 1956 Nov
|
||
10:00 - DDUT # Dumont-d'Urville Time
|
||
-# Reference:
|
||
-# <a href="http://en.wikipedia.org/wiki/Dumont_d'Urville_Station">
|
||
-# Dumont d'Urville Station (2005-12-05)
|
||
-# </a>
|
||
+
|
||
+# France & Italy - year-round base
|
||
+# Concordia, -750600+1232000, since 2005
|
||
|
||
# Germany - year-round base
|
||
-# Georg von Neumayer, -7039-00815
|
||
+# Neumayer III, -704080-0081602, since 2009
|
||
|
||
-# India - year-round base
|
||
-# Dakshin Gangotri, -7005+01200
|
||
+# India - year-round bases
|
||
+# Bharati, -692428+0761114, since 2012
|
||
+# Maitri, -704558+0114356, since 1989
|
||
+
|
||
+# Italy - year-round base (also see "France & Italy")
|
||
+# Zuchelli, Terra Nova Bay, -744140+1640647, since 1986
|
||
|
||
# Japan - year-round bases
|
||
-# Dome Fuji, -7719+03942
|
||
-# Syowa, -690022+0393524
|
||
+# Syowa (also known as Showa), -690022+0393524, since 1957
|
||
#
|
||
# From Hideyuki Suzuki (1999-02-06):
|
||
# In all Japanese stations, +0300 is used as the standard time.
|
||
@@ -239,11 +237,11 @@
|
||
Zone Antarctica/Syowa 0 - zzz 1957 Jan 29
|
||
3:00 - SYOT # Syowa Time
|
||
# See:
|
||
-# <a href="http://www.nipr.ac.jp/english/ara01.html">
|
||
# NIPR Antarctic Research Activities (1999-08-17)
|
||
-# </a>
|
||
+# http://www.nipr.ac.jp/english/ara01.html
|
||
|
||
# S Korea - year-round base
|
||
+# Jang Bogo, Terra Nova Bay, -743700+1641205 since 2014
|
||
# King Sejong, King George Island, -6213-05847, since 1988
|
||
|
||
# New Zealand - claims
|
||
@@ -287,11 +285,14 @@
|
||
Rule Troll 2004 max - Oct lastSun 1:00u 0:00 UTC
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Antarctica/Troll 0 - zzz 2005 Feb 12
|
||
- 0:00 Troll %s
|
||
+ 0:00 Troll %s
|
||
|
||
# Poland - year-round base
|
||
# Arctowski, King George Island, -620945-0582745, since 1977
|
||
|
||
+# Romania - year-bound base
|
||
+# Law-Racoviță, Larsemann Hills, -692319+0762251, since 1986
|
||
+
|
||
# Russia - year-round bases
|
||
# Bellingshausen, King George Island, -621159-0585337, since 1968-02-22
|
||
# Mirny, Davis coast, -6633+09301, since 1956-02
|
||
@@ -301,8 +302,8 @@
|
||
# year-round from 1960/61 to 1992
|
||
|
||
# Vostok, since 1957-12-16, temporarily closed 1994-02/1994-11
|
||
-# <a href="http://quest.arc.nasa.gov/antarctica/QA/computers/Directions,Time,ZIP">
|
||
-# From Craig Mundell (1994-12-15)</a>:
|
||
+# From Craig Mundell (1994-12-15):
|
||
+# http://quest.arc.nasa.gov/antarctica/QA/computers/Directions,Time,ZIP
|
||
# Vostok, which is one of the Russian stations, is set on the same
|
||
# time as Moscow, Russia.
|
||
#
|
||
@@ -317,7 +318,7 @@
|
||
#
|
||
# From Paul Eggert (2001-05-04):
|
||
# This seems to be hopelessly confusing, so I asked Lee Hotz about it
|
||
-# in person. He said that some Antartic locations set their local
|
||
+# in person. He said that some Antarctic locations set their local
|
||
# time so that noon is the warmest part of the day, and that this
|
||
# changes during the year and does not necessarily correspond to mean
|
||
# solar noon. So the Vostok time might have been whatever the clocks
|
||
@@ -329,9 +330,12 @@
|
||
|
||
# S Africa - year-round bases
|
||
# Marion Island, -4653+03752
|
||
-# Sanae, -7141-00250
|
||
+# SANAE IV, Vesleskarvet, Queen Maud Land, -714022-0025026, since 1997
|
||
|
||
-# UK
|
||
+# Ukraine - year-round base
|
||
+# Vernadsky (formerly Faraday), Galindez Island, -651445-0641526, since 1954
|
||
+
|
||
+# United Kingdom
|
||
#
|
||
# British Antarctic Territories (BAT) claims
|
||
# South Orkney Islands
|
||
@@ -387,7 +391,7 @@
|
||
# but that he found it more convenient to keep GMT+12
|
||
# as supplies for the station were coming from McMurdo Sound,
|
||
# which was on GMT+12 because New Zealand was on GMT+12 all year
|
||
-# at that time (1957). (Source: Siple's book 90 degrees SOUTH.)
|
||
+# at that time (1957). (Source: Siple's book 90 Degrees South.)
|
||
#
|
||
# From Susan Smith
|
||
# http://www.cybertours.com/whs/pole10.html
|
||
--- ./jdk/make/sun/javazic/tzdata/asia Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/sun/javazic/tzdata/asia Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -21,41 +21,44 @@
|
||
# or visit www.oracle.com if you need additional information or have any
|
||
# questions.
|
||
#
|
||
-# <pre>
|
||
# This file is in the public domain, so clarified as of
|
||
# 2009-05-17 by Arthur David Olson.
|
||
|
||
-# This data is by no means authoritative; if you think you know better,
|
||
+# This file is by no means authoritative; if you think you know better,
|
||
# go ahead and edit the file (and please send any changes to
|
||
-# tz@iana.org for general use in the future).
|
||
+# tz@iana.org for general use in the future). For more, please see
|
||
+# the file CONTRIBUTING in the tz distribution.
|
||
|
||
-# From Paul Eggert (2013-08-11):
|
||
+# From Paul Eggert (2014-10-31):
|
||
#
|
||
-# A good source for time zone historical data outside the U.S. is
|
||
+# Unless otherwise specified, the source for data through 1990 is:
|
||
# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
|
||
# San Diego: ACS Publications, Inc. (2003).
|
||
+# Unfortunately this book contains many errors and cites no sources.
|
||
#
|
||
# Gwillim Law writes that a good source
|
||
# for recent time zone data is the International Air Transport
|
||
# Association's Standard Schedules Information Manual (IATA SSIM),
|
||
# published semiannually. Law sent in several helpful summaries
|
||
-# of the IATA's data after 1990.
|
||
-#
|
||
-# Except where otherwise noted, Shanks & Pottenger is the source for
|
||
-# entries through 1990, and IATA SSIM is the source for entries afterwards.
|
||
+# of the IATA's data after 1990. Except where otherwise noted,
|
||
+# IATA SSIM is the source for entries after 1990.
|
||
#
|
||
# Another source occasionally used is Edward W. Whitman, World Time Differences,
|
||
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
|
||
# I found in the UCLA library.
|
||
#
|
||
# For data circa 1899, a common source is:
|
||
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
|
||
-# <http://www.jstor.org/stable/1774359>.
|
||
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
|
||
+# http://www.jstor.org/stable/1774359
|
||
+#
|
||
+# For Russian data circa 1919, a source is:
|
||
+# Byalokoz EL. New Counting of Time in Russia since July 1, 1919.
|
||
+# (See the 'europe' file for a fuller citation.)
|
||
#
|
||
# A reliable and entertaining source about time zones is
|
||
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
|
||
#
|
||
-# I invented the abbreviations marked `*' in the following table;
|
||
+# I invented the abbreviations marked '*' in the following table;
|
||
# the rest are from earlier versions of this file, or from other sources.
|
||
# Corrections are welcome!
|
||
# std dst
|
||
@@ -66,17 +69,19 @@
|
||
# 3:30 IRST IRDT Iran
|
||
# 4:00 GST Gulf*
|
||
# 5:30 IST India
|
||
-# 7:00 ICT Indochina*
|
||
+# 7:00 ICT Indochina, most times and locations*
|
||
# 7:00 WIB west Indonesia (Waktu Indonesia Barat)
|
||
# 8:00 WITA central Indonesia (Waktu Indonesia Tengah)
|
||
# 8:00 CST China
|
||
-# 9:00 CJT Central Japanese Time (1896/1937)*
|
||
+# 8:00 IDT Indochina, 1943-45, 1947-55, 1960-75 (some locations)*
|
||
+# 8:00 JWST Western Standard Time (Japan, 1896/1937)*
|
||
+# 9:00 JCST Central Standard Time (Japan, 1896/1937)
|
||
# 9:00 WIT east Indonesia (Waktu Indonesia Timur)
|
||
# 9:00 JST JDT Japan
|
||
# 9:00 KST KDT Korea
|
||
-# 9:30 CST (Australian) Central Standard Time
|
||
+# 9:30 ACST Australian Central Standard Time
|
||
#
|
||
-# See the `europe' file for Russia and Turkey in Asia.
|
||
+# See the 'europe' file for Russia and Turkey in Asia.
|
||
|
||
# From Guy Harris:
|
||
# Incorporates data for Singapore from Robert Elz' asia 1.1, as well as
|
||
@@ -86,7 +91,7 @@
|
||
|
||
###############################################################################
|
||
|
||
-# These rules are stolen from the `europe' file.
|
||
+# These rules are stolen from the 'europe' file.
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
Rule EUAsia 1981 max - Mar lastSun 1:00u 1:00 S
|
||
Rule EUAsia 1979 1995 - Sep lastSun 1:00u 0 -
|
||
@@ -138,11 +143,11 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2
|
||
3:00 - YERT 1957 Mar # Yerevan Time
|
||
- 4:00 RussiaAsia YER%sT 1991 Mar 31 2:00s
|
||
+ 4:00 RussiaAsia YER%sT 1991 Mar 31 2:00s
|
||
3:00 1:00 YERST 1991 Sep 23 # independence
|
||
- 3:00 RussiaAsia AM%sT 1995 Sep 24 2:00s
|
||
+ 3:00 RussiaAsia AM%sT 1995 Sep 24 2:00s
|
||
4:00 - AMT 1997
|
||
- 4:00 RussiaAsia AM%sT 2012 Mar 25 2:00s
|
||
+ 4:00 RussiaAsia AM%sT 2012 Mar 25 2:00s
|
||
4:00 - AMT
|
||
|
||
# Azerbaijan
|
||
@@ -155,16 +160,16 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Asia/Baku 3:19:24 - LMT 1924 May 2
|
||
3:00 - BAKT 1957 Mar # Baku Time
|
||
- 4:00 RussiaAsia BAK%sT 1991 Mar 31 2:00s
|
||
+ 4:00 RussiaAsia BAK%sT 1991 Mar 31 2:00s
|
||
3:00 1:00 BAKST 1991 Aug 30 # independence
|
||
3:00 RussiaAsia AZ%sT 1992 Sep lastSat 23:00
|
||
- 4:00 - AZT 1996 # Azerbaijan time
|
||
+ 4:00 - AZT 1996 # Azerbaijan Time
|
||
4:00 EUAsia AZ%sT 1997
|
||
4:00 Azer AZ%sT
|
||
|
||
# Bahrain
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Asia/Bahrain 3:22:20 - LMT 1920 # Al Manamah
|
||
+Zone Asia/Bahrain 3:22:20 - LMT 1920 # Manamah
|
||
4:00 - GST 1972 Jun
|
||
3:00 - AST
|
||
|
||
@@ -174,13 +179,8 @@
|
||
# Daylight Saving Time from June 16 to Sept 30
|
||
#
|
||
# Bangladesh to introduce daylight saving time likely from June 16
|
||
-# <a href="http://www.asiantribune.com/?q=node/17288">
|
||
# http://www.asiantribune.com/?q=node/17288
|
||
-# </a>
|
||
-# or
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_bangladesh02.html">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_bangladesh02.html
|
||
-# </a>
|
||
#
|
||
# "... Bangladesh government has decided to switch daylight saving time from
|
||
# June
|
||
@@ -195,17 +195,11 @@
|
||
# the 19th and 20th, and they have not set the end date yet.
|
||
#
|
||
# Some sources:
|
||
-# <a href="http://in.reuters.com/article/southAsiaNews/idINIndia-40017620090601">
|
||
# http://in.reuters.com/article/southAsiaNews/idINIndia-40017620090601
|
||
-# </a>
|
||
-# <a href="http://bdnews24.com/details.php?id=85889&cid=2">
|
||
# http://bdnews24.com/details.php?id=85889&cid=2
|
||
-# </a>
|
||
#
|
||
# Our wrap-up:
|
||
-# <a href="http://www.timeanddate.com/news/time/bangladesh-daylight-saving-2009.html">
|
||
# http://www.timeanddate.com/news/time/bangladesh-daylight-saving-2009.html
|
||
-# </a>
|
||
|
||
# From A. N. M. Kamrus Saadat (2009-06-15):
|
||
# Finally we've got the official mail regarding DST start time where DST start
|
||
@@ -220,13 +214,8 @@
|
||
#
|
||
# Following report by same newspaper-"The Daily Star Friday":
|
||
# "DST change awaits cabinet decision-Clock won't go back by 1-hr from Oct 1"
|
||
-# <a href="http://www.thedailystar.net/newDesign/news-details.php?nid=107021">
|
||
# http://www.thedailystar.net/newDesign/news-details.php?nid=107021
|
||
-# </a>
|
||
-# or
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_bangladesh04.html">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_bangladesh04.html
|
||
-# </a>
|
||
|
||
# From Steffen Thorsen (2009-10-13):
|
||
# IANS (Indo-Asian News Service) now reports:
|
||
@@ -235,22 +224,15 @@
|
||
# "continue for an indefinite period."
|
||
#
|
||
# One of many places where it is published:
|
||
-# <a href="http://www.thaindian.com/newsportal/business/bangladesh-to-continue-indefinitely-with-advanced-time_100259987.html">
|
||
# http://www.thaindian.com/newsportal/business/bangladesh-to-continue-indefinitely-with-advanced-time_100259987.html
|
||
-# </a>
|
||
|
||
# From Alexander Krivenyshev (2009-12-24):
|
||
# According to Bangladesh newspaper "The Daily Star,"
|
||
# Bangladesh will change its clock back to Standard Time on Dec 31, 2009.
|
||
#
|
||
# Clock goes back 1-hr on Dec 31 night.
|
||
-# <a href="http://www.thedailystar.net/newDesign/news-details.php?nid=119228">
|
||
# http://www.thedailystar.net/newDesign/news-details.php?nid=119228
|
||
-# </a>
|
||
-# and
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_bangladesh05.html">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_bangladesh05.html
|
||
-# </a>
|
||
#
|
||
# "...The government yesterday decided to put the clock back by one hour
|
||
# on December 31 midnight and the new time will continue until March 31,
|
||
@@ -260,17 +242,12 @@
|
||
# From Alexander Krivenyshev (2010-03-22):
|
||
# According to Bangladesh newspaper "The Daily Star,"
|
||
# Cabinet cancels Daylight Saving Time
|
||
-# <a href="http://www.thedailystar.net/newDesign/latest_news.php?nid=22817">
|
||
# http://www.thedailystar.net/newDesign/latest_news.php?nid=22817
|
||
-# </a>
|
||
-# or
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html
|
||
-# </a>
|
||
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
Rule Dhaka 2009 only - Jun 19 23:00 1:00 S
|
||
-Rule Dhaka 2009 only - Dec 31 23:59 0 -
|
||
+Rule Dhaka 2009 only - Dec 31 24:00 0 -
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Asia/Dhaka 6:01:40 - LMT 1890
|
||
@@ -301,7 +278,7 @@
|
||
|
||
# Brunei
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Asia/Brunei 7:39:40 - LMT 1926 Mar # Bandar Seri Begawan
|
||
+Zone Asia/Brunei 7:39:40 - LMT 1926 Mar # Bandar Seri Begawan
|
||
7:30 - BNT 1933
|
||
8:00 - BNT
|
||
|
||
@@ -310,19 +287,15 @@
|
||
# Milne says 6:24:40 was the meridian of the time ball observatory at Rangoon.
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Asia/Rangoon 6:24:40 - LMT 1880 # or Yangon
|
||
- 6:24:40 - RMT 1920 # Rangoon Mean Time?
|
||
- 6:30 - BURT 1942 May # Burma Time
|
||
- 9:00 - JST 1945 May 3
|
||
- 6:30 - MMT # Myanmar Time
|
||
+Zone Asia/Rangoon 6:24:40 - LMT 1880 # or Yangon
|
||
+ 6:24:40 - RMT 1920 # Rangoon Mean Time?
|
||
+ 6:30 - BURT 1942 May # Burma Time
|
||
+ 9:00 - JST 1945 May 3
|
||
+ 6:30 - MMT # Myanmar Time
|
||
|
||
# Cambodia
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Asia/Phnom_Penh 6:59:40 - LMT 1906 Jun 9
|
||
- 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT?
|
||
- 7:00 - ICT 1912 May
|
||
- 8:00 - ICT 1931 May
|
||
- 7:00 - ICT
|
||
+# See Asia/Bangkok.
|
||
+
|
||
|
||
# China
|
||
|
||
@@ -332,12 +305,12 @@
|
||
# From Bob Devine (1988-01-28):
|
||
# No they don't. See TIME mag, 1986-02-17 p.52. Even though
|
||
# China is across 4 physical time zones, before Feb 1, 1986 only the
|
||
-# Peking (Bejing) time zone was recognized. Since that date, China
|
||
-# has two of 'em -- Peking's and Urumqi (named after the capital of
|
||
+# Peking (Beijing) time zone was recognized. Since that date, China
|
||
+# has two of 'em - Peking's and Ürümqi (named after the capital of
|
||
# the Xinjiang Uyghur Autonomous Region). I don't know about DST for it.
|
||
#
|
||
# . . .I just deleted the DST table and this editor makes it too
|
||
-# painful to suck in another copy.. So, here is what I have for
|
||
+# painful to suck in another copy. So, here is what I have for
|
||
# DST start/end dates for Peking's time zone (info from AP):
|
||
#
|
||
# 1986 May 4 - Sept 14
|
||
@@ -347,15 +320,16 @@
|
||
# CHINA 8 H AHEAD OF UTC ALL OF CHINA, INCL TAIWAN
|
||
# CHINA 9 H AHEAD OF UTC APR 17 - SEP 10
|
||
|
||
-# From Paul Eggert (2006-03-22):
|
||
-# Shanks & Pottenger write that China (except for Hong Kong and Macau)
|
||
-# has had a single time zone since 1980 May 1, observing summer DST
|
||
-# from 1986 through 1991; this contradicts Devine's
|
||
-# note about Time magazine, though apparently _something_ happened in 1986.
|
||
-# Go with Shanks & Pottenger for now. I made up names for the other
|
||
-# pre-1980 time zones.
|
||
+# From Paul Eggert (2008-02-11):
|
||
+# Jim Mann, "A clumsy embrace for another western custom: China on daylight
|
||
+# time - sort of", Los Angeles Times, 1986-05-05 ... [says] that China began
|
||
+# observing daylight saving time in 1986.
|
||
|
||
-# From Shanks & Pottenger:
|
||
+# From Paul Eggert (2014-06-30):
|
||
+# Shanks & Pottenger have China switching to a single time zone in 1980, but
|
||
+# this doesn't seem to be correct. They also write that China observed summer
|
||
+# DST from 1986 through 1991, which seems to match the above commentary, so
|
||
+# go with them for DST rules as follows:
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
Rule Shang 1940 only - Jun 3 0:00 1:00 D
|
||
Rule Shang 1940 1941 - Oct 1 0:00 0 S
|
||
@@ -369,7 +343,7 @@
|
||
# historic timezones from some Taiwan websites. And yes, there are official
|
||
# Chinese names for these locales (before 1949).
|
||
#
|
||
-# From Jesper Norgaard Welen (2006-07-14):
|
||
+# From Jesper Nørgaard Welen (2006-07-14):
|
||
# I have investigated the timezones around 1970 on the
|
||
# http://www.astro.com/atlas site [with provinces and county
|
||
# boundaries summarized below].... A few other exceptions were two
|
||
@@ -380,65 +354,97 @@
|
||
# (could be true), for the moment I am assuming that those two
|
||
# counties are mistakes in the astro.com data.
|
||
|
||
-# From Paul Eggert (2008-02-11):
|
||
-# I just now checked Google News for western news sources that talk
|
||
-# about China's single time zone, and couldn't find anything before 1986
|
||
-# talking about China being in one time zone. (That article was: Jim
|
||
-# Mann, "A clumsy embrace for another western custom: China on daylight
|
||
-# time--sort of", Los Angeles Times, 1986-05-05. By the way, this
|
||
-# article confirms the tz database's data claiming that China began
|
||
-# observing daylight saving time in 1986.
|
||
+# From Paul Eggert (2014-06-30):
|
||
+# Alois Treindl kindly sent me translations of the following two sources:
|
||
#
|
||
-# From Thomas S. Mullaney (2008-02-11):
|
||
-# I think you're combining two subjects that need to treated
|
||
-# separately: daylight savings (which, you're correct, wasn't
|
||
-# implemented until the 1980s) and the unified time zone centered near
|
||
-# Beijing (which was implemented in 1949). Briefly, there was also a
|
||
-# "Lhasa Time" in Tibet and "Urumqi Time" in Xinjiang. The first was
|
||
-# ceased, and the second eventually recognized (again, in the 1980s).
|
||
+# (1)
|
||
+# Guo Qingsheng (National Time-Service Center, CAS, Xi'an 710600, China)
|
||
+# Beijing Time at the Beginning of the PRC
|
||
+# China Historical Materials of Science and Technology
|
||
+# (Zhongguo ke ji shi liao, 中国科技史料), Vol. 24, No. 1 (2003)
|
||
+# It gives evidence that at the beginning of the PRC, Beijing time was
|
||
+# officially apparent solar time! However, Guo also says that the
|
||
+# evidence is dubious, as the relevant institute of astronomy had not
|
||
+# been taken over by the PRC yet. It's plausible that apparent solar
|
||
+# time was announced but never implemented, and that people continued
|
||
+# to use UT+8. As the Shanghai radio station (and I presume the
|
||
+# observatory) was still under control of French missionaries, it
|
||
+# could well have ignored any such mandate.
|
||
#
|
||
-# From Paul Eggert (2008-06-30):
|
||
-# There seems to be a good chance China switched to a single time zone in 1949
|
||
-# rather than in 1980 as Shanks & Pottenger have it, but we don't have a
|
||
-# reliable documentary source saying so yet, so for now we still go with
|
||
-# Shanks & Pottenger.
|
||
-
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-# Changbai Time ("Long-white Time", Long-white = Heilongjiang area)
|
||
+# (2)
|
||
+# Guo Qing-sheng (Shaanxi Astronomical Observatory, CAS, Xi'an 710600, China)
|
||
+# A Study on the Standard Time Changes for the Past 100 Years in China
|
||
+# [undated and unknown publication location]
|
||
+# It says several things:
|
||
+# * The Qing dynasty used local apparent solar time throughout China.
|
||
+# * The Republic of China instituted Beijing mean solar time effective
|
||
+# the official calendar book of 1914.
|
||
+# * The French Concession in Shanghai set up signal stations in
|
||
+# French docks in the 1890s, controlled by Xujiahui (Zikawei)
|
||
+# Observatory and set to local mean time.
|
||
+# * "From the end of the 19th century" it changed to UT+8.
|
||
+# * Chinese Customs (by then reduced to a tool of foreign powers)
|
||
+# eventually standardized on this time for all ports, and it
|
||
+# became used by railways as well.
|
||
+# * In 1918 the Central Observatory proposed dividing China into
|
||
+# five time zones (see below for details). This caught on
|
||
+# at first only in coastal areas observing UT+8.
|
||
+# * During WWII all of China was in theory was at UT+7. In practice
|
||
+# this was ignored in the west, and I presume was ignored in
|
||
+# Japanese-occupied territory.
|
||
+# * Japanese-occupied Manchuria was at UT+9, i.e., Japan time.
|
||
+# * The five-zone plan was resurrected after WWII and officially put into
|
||
+# place (with some modifications) in March 1948. It's not clear
|
||
+# how well it was observed in areas under Nationalist control.
|
||
+# * The People's Liberation Army used UT+8 during the civil war.
|
||
+#
|
||
+# An AP article "Shanghai Internat'l Area Little Changed" in the
|
||
+# Lewiston (ME) Daily Sun (1939-05-29), p 17, said "Even the time is
|
||
+# different - the occupied districts going by Tokyo time, an hour
|
||
+# ahead of that prevailing in the rest of Shanghai." Guess that the
|
||
+# Xujiahui Observatory was under French control and stuck with UT+8.
|
||
+#
|
||
+# In earlier versions of this file, China had many separate Zone entries, but
|
||
+# this was based on what were apparently incorrect data in Shanks & Pottenger.
|
||
+# This has now been simplified to the two entries Asia/Shanghai and
|
||
+# Asia/Urumqi, with the others being links for backward compatibility.
|
||
+# Proposed in 1918 and theoretically in effect until 1949 (although in practice
|
||
+# mainly observed in coastal areas), the five zones were:
|
||
+#
|
||
+# Changbai Time ("Long-white Time", Long-white = Heilongjiang area) UT+8.5
|
||
+# Asia/Harbin (currently a link to Asia/Shanghai)
|
||
# Heilongjiang (except Mohe county), Jilin
|
||
-Zone Asia/Harbin 8:26:44 - LMT 1928 # or Haerbin
|
||
- 8:30 - CHAT 1932 Mar # Changbai Time
|
||
- 8:00 - CST 1940
|
||
- 9:00 - CHAT 1966 May
|
||
- 8:30 - CHAT 1980 May
|
||
- 8:00 PRC C%sT
|
||
-# Zhongyuan Time ("Central plain Time")
|
||
+#
|
||
+# Zhongyuan Time ("Central plain Time") UT+8
|
||
+# Asia/Shanghai
|
||
# most of China
|
||
-# Milne gives 8:05:56.7; round to nearest.
|
||
-Zone Asia/Shanghai 8:05:57 - LMT 1928
|
||
- 8:00 Shang C%sT 1949
|
||
- 8:00 PRC C%sT
|
||
-# Long-shu Time (probably due to Long and Shu being two names of that area)
|
||
+# This currently represents most other zones as well,
|
||
+# as apparently these regions have been the same since 1970.
|
||
+# Milne gives 8:05:43.2 for Xujiahui Observatory time; round to nearest.
|
||
+# Guo says Shanghai switched to UT+8 "from the end of the 19th century".
|
||
+#
|
||
+# Long-shu Time (probably due to Long and Shu being two names of that area) UT+7
|
||
+# Asia/Chongqing (currently a link to Asia/Shanghai)
|
||
# Guangxi, Guizhou, Hainan, Ningxia, Sichuan, Shaanxi, and Yunnan;
|
||
# most of Gansu; west Inner Mongolia; west Qinghai; and the Guangdong
|
||
# counties Deqing, Enping, Kaiping, Luoding, Taishan, Xinxing,
|
||
# Yangchun, Yangjiang, Yu'nan, and Yunfu.
|
||
-Zone Asia/Chongqing 7:06:20 - LMT 1928 # or Chungking
|
||
- 7:00 - LONT 1980 May # Long-shu Time
|
||
- 8:00 PRC C%sT
|
||
-# Xin-zang Time ("Xinjiang-Tibet Time")
|
||
+#
|
||
+# Xin-zang Time ("Xinjiang-Tibet Time") UT+6
|
||
+# Asia/Urumqi
|
||
+# This currently represents Kunlun Time as well,
|
||
+# as apparently the two regions have been the same since 1970.
|
||
# The Gansu counties Aksay, Anxi, Dunhuang, Subei; west Qinghai;
|
||
# the Guangdong counties Xuwen, Haikang, Suixi, Lianjiang,
|
||
# Zhanjiang, Wuchuan, Huazhou, Gaozhou, Maoming, Dianbai, and Xinyi;
|
||
# east Tibet, including Lhasa, Chamdo, Shigaise, Jimsar, Shawan and Hutubi;
|
||
-# east Xinjiang, including Urumqi, Turpan, Karamay, Korla, Minfeng, Jinghe,
|
||
+# east Xinjiang, including Ürümqi, Turpan, Karamay, Korla, Minfeng, Jinghe,
|
||
# Wusu, Qiemo, Xinyan, Wulanwusu, Jinghe, Yumin, Tacheng, Tuoli, Emin,
|
||
# Shihezi, Changji, Yanqi, Heshuo, Tuokexun, Tulufan, Shanshan, Hami,
|
||
# Fukang, Kuitun, Kumukuli, Miquan, Qitai, and Turfan.
|
||
-Zone Asia/Urumqi 5:50:20 - LMT 1928 # or Urumchi
|
||
- 6:00 - URUT 1980 May # Urumqi Time
|
||
- 8:00 PRC C%sT
|
||
-# Kunlun Time
|
||
+#
|
||
+# Kunlun Time UT+5.5
|
||
+# Asia/Kashgar (currently a link to Asia/Urumqi)
|
||
# West Tibet, including Pulan, Aheqi, Shufu, Shule;
|
||
# West Xinjiang, including Aksu, Atushi, Yining, Hetian, Cele, Luopu, Nileke,
|
||
# Zhaosu, Tekesi, Gongliu, Chabuchaer, Huocheng, Bole, Pishan, Suiding,
|
||
@@ -455,9 +461,9 @@
|
||
# population of Xinjiang, typically use "Xinjiang time" which is two
|
||
# hours behind Beijing time, or UTC +0600. The government of the Xinjiang
|
||
# Uyghur Autonomous Region, (XAUR, or just Xinjiang for short) as well as
|
||
-# local governments such as the Urumqi city government use both times in
|
||
+# local governments such as the Ürümqi city government use both times in
|
||
# publications, referring to what is popularly called Xinjiang time as
|
||
-# "Urumqi time." When Uyghurs make an appointment in the Uyghur language
|
||
+# "Ürümqi time." When Uyghurs make an appointment in the Uyghur language
|
||
# they almost invariably use Xinjiang time.
|
||
#
|
||
# (Their ethnic Han compatriots would typically have no clue of its
|
||
@@ -469,21 +475,6 @@
|
||
# the province not having dual times but four times in use at the same
|
||
# time. Some areas remained on standard Xinjiang time or Beijing time and
|
||
# others moving their clocks ahead.)
|
||
-#
|
||
-# ...an example of an official website using of Urumqi time.
|
||
-#
|
||
-# The first few lines of the Google translation of
|
||
-# <a href="http://www.fjysgl.gov.cn/show.aspx?id=2379&cid=39">
|
||
-# http://www.fjysgl.gov.cn/show.aspx?id=2379&cid=39
|
||
-# </a>
|
||
-# (retrieved 2009-10-13)
|
||
-# > Urumqi fire seven people are missing the alleged losses of at least
|
||
-# > 500 million yuan
|
||
-# >
|
||
-# > (Reporter Dong Liu) the day before 20:20 or so (Urumqi Time 18:20),
|
||
-# > Urumqi City Department of International Plaza Luther Qiantang River
|
||
-# > burst fire. As of yesterday, 18:30, Urumqi City Fire officers and men
|
||
-# > have worked continuously for 22 hours...
|
||
|
||
# From Luther Ma (2009-11-19):
|
||
# With the risk of being redundant to previous answers these are the most common
|
||
@@ -494,7 +485,7 @@
|
||
# 3. Urumqi...
|
||
# 4. Kashgar...
|
||
# ...
|
||
-# 5. It seems that Uyghurs in Urumqi has been using Xinjiang since at least the
|
||
+# 5. It seems that Uyghurs in Ürümqi has been using Xinjiang since at least the
|
||
# 1960's. I know of one Han, now over 50, who grew up in the surrounding
|
||
# countryside and used Xinjiang time as a child.
|
||
#
|
||
@@ -506,10 +497,55 @@
|
||
# Autonomous Region under the PRC. (Before that Uyghurs, of course, would also
|
||
# not be using Beijing time, but some local time.)
|
||
|
||
-Zone Asia/Kashgar 5:03:56 - LMT 1928 # or Kashi or Kaxgar
|
||
- 5:30 - KAST 1940 # Kashgar Time
|
||
- 5:00 - KAST 1980 May
|
||
+# From David Cochrane (2014-03-26):
|
||
+# Just a confirmation that Ürümqi time was implemented in Ürümqi on 1 Feb 1986:
|
||
+# http://content.time.com/time/magazine/article/0,9171,960684,00.html
|
||
+
|
||
+# From Luther Ma (2014-04-22):
|
||
+# I have interviewed numerous people of various nationalities and from
|
||
+# different localities in Xinjiang and can confirm the information in Guo's
|
||
+# report regarding Xinjiang, as well as the Time article reference by David
|
||
+# Cochrane. Whether officially recognized or not (and both are officially
|
||
+# recognized), two separate times have been in use in Xinjiang since at least
|
||
+# the Cultural Revolution: Xinjiang Time (XJT), aka Ürümqi Time or local time;
|
||
+# and Beijing Time. There is no confusion in Xinjiang as to which name refers
|
||
+# to which time. Both are widely used in the province, although in some
|
||
+# population groups might be use one to the exclusion of the other. The only
|
||
+# problem is that computers and smart phones list Ürümqi (or Kashgar) as
|
||
+# having the same time as Beijing.
|
||
+
|
||
+# From Paul Eggert (2014-06-30):
|
||
+# In the early days of the PRC, Tibet was given its own time zone (UT+6) but
|
||
+# this was withdrawn in 1959 and never reinstated; see Tubten Khétsun,
|
||
+# Memories of life in Lhasa under Chinese Rule, Columbia U Press, ISBN
|
||
+# 978-0231142861 (2008), translator's introduction by Matthew Akester, p x.
|
||
+# As this is before our 1970 cutoff, Tibet doesn't need a separate zone.
|
||
+#
|
||
+# Xinjiang Time is well-documented as being officially recognized. E.g., see
|
||
+# "The Working-Calendar for The Xinjiang Uygur Autonomous Region Government"
|
||
+# <http://www.sinkiang.gov.cn/service/ourworking/> (2014-04-22).
|
||
+# Unfortunately, we have no good records of time in Xinjiang before 1986.
|
||
+# During the 20th century parts of Xinjiang were ruled by the Qing dynasty,
|
||
+# the Republic of China, various warlords, the First and Second East Turkestan
|
||
+# Republics, the Soviet Union, the Kuomintang, and the People's Republic of
|
||
+# China, and tracking down all these organizations' timekeeping rules would be
|
||
+# quite a trick. Approximate this lost history by a transition from LMT to
|
||
+# XJT at the start of 1928, the year of accession of the warlord Jin Shuren,
|
||
+# which happens to be the date given by Shanks & Pottenger (no doubt as a
|
||
+# guess) as the transition from LMT. Ignore the usage of UT+8 before
|
||
+# 1986-02-01 under the theory that the transition date to UT+8 is unknown and
|
||
+# that the sort of users who prefer Asia/Urumqi now typically ignored the
|
||
+# UT+8 mandate back then.
|
||
+
|
||
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
+# Beijing time, used throughout China; represented by Shanghai.
|
||
+Zone Asia/Shanghai 8:05:43 - LMT 1901
|
||
+ 8:00 Shang C%sT 1949
|
||
8:00 PRC C%sT
|
||
+# Xinjiang time, used by many in western China; represented by Ürümqi / Ürümchi
|
||
+# / Wulumuqi. (Please use Asia/Shanghai if you prefer Beijing time.)
|
||
+Zone Asia/Urumqi 5:50:20 - LMT 1928
|
||
+ 6:00 - XJT
|
||
|
||
|
||
# Hong Kong (Xianggang)
|
||
@@ -524,15 +560,11 @@
|
||
# and incorrect rules. Although the exact switch over time is missing, I
|
||
# think 3:30 is correct. The official DST record for Hong Kong can be
|
||
# obtained from
|
||
-# <a href="http://www.hko.gov.hk/gts/time/Summertime.htm">
|
||
# http://www.hko.gov.hk/gts/time/Summertime.htm
|
||
-# </a>.
|
||
|
||
# From Arthur David Olson (2009-10-28):
|
||
# Here are the dates given at
|
||
-# <a href="http://www.hko.gov.hk/gts/time/Summertime.htm">
|
||
# http://www.hko.gov.hk/gts/time/Summertime.htm
|
||
-# </a>
|
||
# as of 2009-10-28:
|
||
# Year Period
|
||
# 1941 1 Apr to 30 Sep
|
||
@@ -612,35 +644,113 @@
|
||
|
||
# Taiwan
|
||
|
||
-# Shanks & Pottenger write that Taiwan observed DST during 1945, when it
|
||
-# was still controlled by Japan. This is hard to believe, but we don't
|
||
-# have any other information.
|
||
-
|
||
# From smallufo (2010-04-03):
|
||
-# According to Taiwan's CWB,
|
||
-# <a href="http://www.cwb.gov.tw/V6/astronomy/cdata/summert.htm">
|
||
+# According to Taiwan's CWB [Central Weather Bureau],
|
||
# http://www.cwb.gov.tw/V6/astronomy/cdata/summert.htm
|
||
-# </a>
|
||
# Taipei has DST in 1979 between July 1st and Sep 30.
|
||
|
||
-# From Arthur David Olson (2010-04-07):
|
||
-# Here's Google's translation of the table at the bottom of the "summert.htm" page:
|
||
-# Decade Name Start and end date
|
||
-# Republic of China 34 years to 40 years (AD 1945-1951 years) Summer Time May 1 to September 30
|
||
-# 41 years of the Republic of China (AD 1952) Daylight Saving Time March 1 to October 31
|
||
-# Republic of China 42 years to 43 years (AD 1953-1954 years) Daylight Saving Time April 1 to October 31
|
||
-# In the 44 years to 45 years (AD 1955-1956 years) Daylight Saving Time April 1 to September 30
|
||
-# Republic of China 46 years to 48 years (AD 1957-1959) Summer Time April 1 to September 30
|
||
-# Republic of China 49 years to 50 years (AD 1960-1961) Summer Time June 1 to September 30
|
||
-# Republic of China 51 years to 62 years (AD 1962-1973 years) Stop Summer Time
|
||
-# Republic of China 63 years to 64 years (1974-1975 AD) Daylight Saving Time April 1 to September 30
|
||
-# Republic of China 65 years to 67 years (1976-1978 AD) Stop Daylight Saving Time
|
||
-# Republic of China 68 years (AD 1979) Daylight Saving Time July 1 to September 30
|
||
-# Republic of China since 69 years (AD 1980) Stop Daylight Saving Time
|
||
+# From Yu-Cheng Chuang (2013-07-12):
|
||
+# On Dec 28, 1895, the Meiji Emperor announced Ordinance No. 167 of
|
||
+# Meiji Year 28 "The clause about standard time", mentioned that
|
||
+# Taiwan and Penghu Islands, as well as Yaeyama and Miyako Islands
|
||
+# (both in Okinawa) adopt the Western Standard Time which is based on
|
||
+# 120E. The adoption began from Jan 1, 1896. The original text can be
|
||
+# found on Wikisource:
|
||
+# http://ja.wikisource.org/wiki/標準時ニ關スル件_(公布時)
|
||
+# ... This could be the first adoption of time zone in Taiwan, because
|
||
+# during the Qing Dynasty, it seems that there was no time zone
|
||
+# declared officially.
|
||
+#
|
||
+# Later, in the beginning of World War II, on Sep 25, 1937, the Showa
|
||
+# Emperor announced Ordinance No. 529 of Showa Year 12 "The clause of
|
||
+# revision in the ordinance No. 167 of Meiji year 28 about standard
|
||
+# time", in which abolished the adoption of Western Standard Time in
|
||
+# western islands (listed above), which means the whole Japan
|
||
+# territory, including later occupations, adopt Japan Central Time
|
||
+# (UTC+9). The adoption began on Oct 1, 1937. The original text can
|
||
+# be found on Wikisource:
|
||
+# http://ja.wikisource.org/wiki/明治二十八年勅令第百六十七號標準時ニ關スル件中改正ノ件
|
||
+#
|
||
+# That is, the time zone of Taipei switched to UTC+9 on Oct 1, 1937.
|
||
+
|
||
+# From Yu-Cheng Chuang (2014-07-02):
|
||
+# I've found more evidence about when the time zone was switched from UTC+9
|
||
+# back to UTC+8 after WW2. I believe it was on Sep 21, 1945. In a document
|
||
+# during Japanese era [1] in which the officer told the staff to change time
|
||
+# zone back to Western Standard Time (UTC+8) on Sep 21. And in another
|
||
+# history page of National Cheng Kung University [2], on Sep 21 there is a
|
||
+# note "from today, switch back to Western Standard Time". From these two
|
||
+# materials, I believe that the time zone change happened on Sep 21. And
|
||
+# today I have found another monthly journal called "The Astronomical Herald"
|
||
+# from The Astronomical Society of Japan [3] in which it mentioned the fact
|
||
+# that:
|
||
+#
|
||
+# 1. Standard Time of the Country (Japan) was adopted on Jan 1, 1888, using
|
||
+# the time at 135E (GMT+9)
|
||
+#
|
||
+# 2. Standard Time of the Country was renamed to Central Standard Time, on Jan
|
||
+# 1, 1898, and on the same day, the new territories Taiwan and Penghu islands,
|
||
+# as well as Yaeyama and Miyako islands, adopted a new time zone called
|
||
+# Western Standard Time, which is in GMT+8.
|
||
+#
|
||
+# 3. Western Standard Time was deprecated on Sep 30, 1937. From then all the
|
||
+# territories of Japan adopted the same time zone, which is Central Standard
|
||
+# Time.
|
||
+#
|
||
+# [1] Academica Historica, Taiwan:
|
||
+# http://163.29.208.22:8080/govsaleShowImage/connect_img.php?s=00101738900090036&e=00101738900090037
|
||
+# [2] Nat'l Cheng Kung University 70th Anniversary Special Site:
|
||
+# http://www.ncku.edu.tw/~ncku70/menu/001/01_01.htm
|
||
+# [3] Yukio Niimi, The Standard Time in Japan (1997), p.475:
|
||
+# http://www.asj.or.jp/geppou/archive_open/1997/pdf/19971001c.pdf
|
||
+
|
||
+# Yu-Cheng Chuang (2014-07-03):
|
||
+# I finally have found the real official gazette about changing back to
|
||
+# Western Standard Time on Sep 21 in Taiwan. It's Taiwan Governor-General
|
||
+# Bulletin No. 386 in Showa 20 years (1945), published on Sep 19, 1945. [1] ...
|
||
+# [It] abolishes Bulletin No. 207 in Showa 12 years (1937), which is a local
|
||
+# bulletin in Taiwan for that Ordinance No. 529. It also mentioned that 1am on
|
||
+# Sep 21, 1945 will be 12am on Sep 21. I think this bulletin is much more
|
||
+# official than the one I mentioned in my first mail, because it's from the
|
||
+# top-level government in Taiwan. If you're going to quote any resource, this
|
||
+# would be a good one.
|
||
+# [1] Taiwan Governor-General Gazette, No. 1018, Sep 19, 1945:
|
||
+# http://db2.th.gov.tw/db2/view/viewImg.php?imgcode=0072031018a&num=19&bgn=019&end=019&otherImg=&type=gener
|
||
+
|
||
+# From Yu-Cheng Chuang (2014-07-02):
|
||
+# In 1946, DST in Taiwan was from May 15 and ended on Sep 30. The info from
|
||
+# Central Weather Bureau website was not correct.
|
||
+#
|
||
+# Original Bulletin:
|
||
+# http://subtpg.tpg.gov.tw/og/image2.asp?f=03502F0AKM1AF
|
||
+# http://subtpg.tpg.gov.tw/og/image2.asp?f=0350300AKM1B0 (cont.)
|
||
+#
|
||
+# In 1947, DST in Taiwan was expanded to Oct 31. There is a backup of that
|
||
+# telegram announcement from Taiwan Province Government:
|
||
+#
|
||
+# http://subtpg.tpg.gov.tw/og/image2.asp?f=0360310AKZ431
|
||
+#
|
||
+# Here is a brief translation:
|
||
+#
|
||
+# The Summer Time this year is adopted from midnight Apr 15 until Sep 20
|
||
+# midnight. To save (energy?) consumption, we're expanding Summer Time
|
||
+# adoption till Oct 31 midnight.
|
||
+#
|
||
+# The Central Weather Bureau website didn't mention that, however it can
|
||
+# be found from historical government announcement database.
|
||
+
|
||
+# From Paul Eggert (2014-07-03):
|
||
+# As per Yu-Cheng Chuang, say that Taiwan was at UT+9 from 1937-10-01
|
||
+# until 1945-09-21 at 01:00, overriding Shanks & Pottenger.
|
||
+# Likewise, use Yu-Cheng Chuang's data for DST in Taiwan.
|
||
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
-Rule Taiwan 1945 1951 - May 1 0:00 1:00 D
|
||
-Rule Taiwan 1945 1951 - Oct 1 0:00 0 S
|
||
+Rule Taiwan 1946 only - May 15 0:00 1:00 D
|
||
+Rule Taiwan 1946 only - Oct 1 0:00 0 S
|
||
+Rule Taiwan 1947 only - Apr 15 0:00 1:00 D
|
||
+Rule Taiwan 1947 only - Nov 1 0:00 0 S
|
||
+Rule Taiwan 1948 1951 - May 1 0:00 1:00 D
|
||
+Rule Taiwan 1948 1951 - Oct 1 0:00 0 S
|
||
Rule Taiwan 1952 only - Mar 1 0:00 1:00 D
|
||
Rule Taiwan 1952 1954 - Nov 1 0:00 0 S
|
||
Rule Taiwan 1953 1959 - Apr 1 0:00 1:00 D
|
||
@@ -648,11 +758,14 @@
|
||
Rule Taiwan 1960 1961 - Jun 1 0:00 1:00 D
|
||
Rule Taiwan 1974 1975 - Apr 1 0:00 1:00 D
|
||
Rule Taiwan 1974 1975 - Oct 1 0:00 0 S
|
||
-Rule Taiwan 1979 only - Jun 30 0:00 1:00 D
|
||
-Rule Taiwan 1979 only - Sep 30 0:00 0 S
|
||
+Rule Taiwan 1979 only - Jul 1 0:00 1:00 D
|
||
+Rule Taiwan 1979 only - Oct 1 0:00 0 S
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Asia/Taipei 8:06:00 - LMT 1896 # or Taibei or T'ai-pei
|
||
+# Taipei or Taibei or T'ai-pei
|
||
+Zone Asia/Taipei 8:06:00 - LMT 1896 Jan 1
|
||
+ 8:00 - JWST 1937 Oct 1
|
||
+ 9:00 - JST 1945 Sep 21 1:00
|
||
8:00 Taiwan C%sT
|
||
|
||
# Macau (Macao, Aomen)
|
||
@@ -672,7 +785,7 @@
|
||
Rule Macau 1978 1980 - Apr Sun>=15 0:00 1:00 S
|
||
Rule Macau 1978 1980 - Oct Sun>=15 0:00 0 -
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Asia/Macau 7:34:20 - LMT 1912
|
||
+Zone Asia/Macau 7:34:20 - LMT 1912 Jan 1
|
||
8:00 Macau MO%sT 1999 Dec 20 # return to China
|
||
8:00 PRC C%sT
|
||
|
||
@@ -721,7 +834,7 @@
|
||
# republic has changed its time zone back to that of Moscow. As a result it
|
||
# is now just four hours ahead of Greenwich Mean Time, rather than five hours
|
||
# ahead. The switch was decreed by the pro-Western president of Georgia,
|
||
-# Mikhail Saakashvili, who said the change was partly prompted by the process
|
||
+# Mikheil Saakashvili, who said the change was partly prompted by the process
|
||
# of integration into Europe.
|
||
|
||
# From Teimuraz Abashidze (2005-11-07):
|
||
@@ -734,29 +847,31 @@
|
||
# I don't know what can be done, especially knowing that some years ago our
|
||
# DST rules where changed THREE TIMES during one month.
|
||
|
||
+# Milne 1899 says Tbilisi (Tiflis) time was 2:59:05.7.
|
||
+# Byalokoz 1919 says Georgia was 2:59:11.
|
||
+# Go with Byalokoz.
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Asia/Tbilisi 2:59:16 - LMT 1880
|
||
- 2:59:16 - TBMT 1924 May 2 # Tbilisi Mean Time
|
||
+Zone Asia/Tbilisi 2:59:11 - LMT 1880
|
||
+ 2:59:11 - TBMT 1924 May 2 # Tbilisi Mean Time
|
||
3:00 - TBIT 1957 Mar # Tbilisi Time
|
||
- 4:00 RussiaAsia TBI%sT 1991 Mar 31 2:00s
|
||
+ 4:00 RussiaAsia TBI%sT 1991 Mar 31 2:00s
|
||
3:00 1:00 TBIST 1991 Apr 9 # independence
|
||
- 3:00 RussiaAsia GE%sT 1992 # Georgia Time
|
||
+ 3:00 RussiaAsia GE%sT 1992 # Georgia Time
|
||
3:00 E-EurAsia GE%sT 1994 Sep lastSun
|
||
4:00 E-EurAsia GE%sT 1996 Oct lastSun
|
||
4:00 1:00 GEST 1997 Mar lastSun
|
||
4:00 E-EurAsia GE%sT 2004 Jun 27
|
||
- 3:00 RussiaAsia GE%sT 2005 Mar lastSun 2:00
|
||
+ 3:00 RussiaAsia GE%sT 2005 Mar lastSun 2:00
|
||
4:00 - GET
|
||
|
||
# East Timor
|
||
|
||
# See Indonesia for the 1945 transition.
|
||
|
||
-# From Joao Carrascalao, brother of the former governor of East Timor, in
|
||
-# <a href="http://etan.org/et99c/december/26-31/30ETMAY.htm">
|
||
+# From João Carrascalão, brother of the former governor of East Timor, in
|
||
# East Timor may be late for its millennium
|
||
-# </a> (1999-12-26/31):
|
||
+# <http://etan.org/et99c/december/26-31/30ETMAY.htm> (1999-12-26/31):
|
||
# Portugal tried to change the time forward in 1974 because the sun
|
||
# rises too early but the suggestion raised a lot of problems with the
|
||
# Timorese and I still don't think it would work today because it
|
||
@@ -766,25 +881,25 @@
|
||
# We don't have any record of the above attempt.
|
||
# Most likely our records are incomplete, but we have no better data.
|
||
|
||
-# <a href="http://www.hri.org/news/world/undh/last/00-08-16.undh.html">
|
||
# From Manoel de Almeida e Silva, Deputy Spokesman for the UN Secretary-General
|
||
-# (2000-08-16)</a>:
|
||
+# http://www.hri.org/news/world/undh/2000/00-08-16.undh.html
|
||
+# (2000-08-16):
|
||
# The Cabinet of the East Timor Transition Administration decided
|
||
# today to advance East Timor's time by one hour. The time change,
|
||
# which will be permanent, with no seasonal adjustment, will happen at
|
||
# midnight on Saturday, September 16.
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Asia/Dili 8:22:20 - LMT 1912
|
||
+Zone Asia/Dili 8:22:20 - LMT 1912 Jan 1
|
||
8:00 - TLT 1942 Feb 21 23:00 # E Timor Time
|
||
9:00 - JST 1945 Sep 23
|
||
9:00 - TLT 1976 May 3
|
||
- 8:00 - WITA 2000 Sep 17 00:00
|
||
+ 8:00 - WITA 2000 Sep 17 0:00
|
||
9:00 - TLT
|
||
|
||
# India
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Asia/Kolkata 5:53:28 - LMT 1880 # Kolkata
|
||
+Zone Asia/Kolkata 5:53:28 - LMT 1880 # Kolkata
|
||
5:53:20 - HMT 1941 Oct # Howrah Mean Time?
|
||
6:30 - BURT 1942 May 15 # Burma Time
|
||
5:30 - IST 1942 Sep
|
||
@@ -797,8 +912,12 @@
|
||
|
||
# Indonesia
|
||
#
|
||
+# From Paul Eggert (2014-09-06):
|
||
+# The 1876 Report of the Secretary of the [US] Navy, p 306 says that Batavia
|
||
+# civil time was 7:07:12.5; round to even for Jakarta.
|
||
+#
|
||
# From Gwillim Law (2001-05-28), overriding Shanks & Pottenger:
|
||
-# <http://www.sumatera-inc.com/go_to_invest/about_indonesia.asp#standtime>
|
||
+# http://www.sumatera-inc.com/go_to_invest/about_indonesia.asp#standtime
|
||
# says that Indonesia's time zones changed on 1988-01-01. Looking at some
|
||
# time zone maps, I think that must refer to Western Borneo (Kalimantan Barat
|
||
# and Kalimantan Tengah) switching from UTC+8 to UTC+7.
|
||
@@ -810,7 +929,7 @@
|
||
# other formal surrender ceremonies were September 9, 11, and 13, plus
|
||
# September 12 for the regional surrender to Mountbatten in Singapore.
|
||
# These would be the earliest possible times for a change.
|
||
-# Regimes horaires pour le monde entier, by Henri Le Corre, (Editions
|
||
+# Régimes horaires pour le monde entier, by Henri Le Corre, (Éditions
|
||
# Traditionnelles, 1987, Paris) says that Java and Madura switched
|
||
# from JST to UTC+07:30 on 1945-09-23, and gives 1944-09-01 for Jayapura
|
||
# (Hollandia). For now, assume all Indonesian locations other than Jayapura
|
||
@@ -835,7 +954,7 @@
|
||
# Shanks & Pottenger say the next transition was at 1924 Jan 1 0:13,
|
||
# but this must be a typo.
|
||
7:07:12 - BMT 1923 Dec 31 23:47:12 # Batavia
|
||
- 7:20 - JAVT 1932 Nov # Java Time
|
||
+ 7:20 - JAVT 1932 Nov # Java Time
|
||
7:30 - WIB 1942 Mar 23
|
||
9:00 - JST 1945 Sep 23
|
||
7:30 - WIB 1948 May
|
||
@@ -861,7 +980,7 @@
|
||
# Maluku Islands, West Papua, Papua
|
||
Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
|
||
9:00 - WIT 1944 Sep 1
|
||
- 9:30 - CST 1964
|
||
+ 9:30 - ACST 1964
|
||
9:00 - WIT
|
||
|
||
# Iran
|
||
@@ -927,7 +1046,7 @@
|
||
# Several of my users have reported that Iran will not observe DST anymore:
|
||
# http://www.irna.ir/en/news/view/line-17/0603193812164948.htm
|
||
#
|
||
-# From Reuters (2007-09-16), with a heads-up from Jesper Norgaard Welen:
|
||
+# From Reuters (2007-09-16), with a heads-up from Jesper Nørgaard Welen:
|
||
# ... the Guardian Council ... approved a law on Sunday to re-introduce
|
||
# daylight saving time ...
|
||
# http://uk.reuters.com/article/oilRpt/idUKBLA65048420070916
|
||
@@ -993,7 +1112,7 @@
|
||
Rule Iran 2036 2037 - Sep 21 0:00 0 S
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Asia/Tehran 3:25:44 - LMT 1916
|
||
- 3:25:44 - TMT 1946 # Tehran Mean Time
|
||
+ 3:25:44 - TMT 1946 # Tehran Mean Time
|
||
3:30 - IRST 1977 Nov
|
||
4:00 Iran IR%sT 1979
|
||
3:30 Iran IR%sT
|
||
@@ -1018,17 +1137,11 @@
|
||
# From Steffen Thorsen (2008-03-10):
|
||
# The cabinet in Iraq abolished DST last week, according to the following
|
||
# news sources (in Arabic):
|
||
-# <a href="http://www.aljeeran.net/wesima_articles/news-20080305-98602.html">
|
||
# http://www.aljeeran.net/wesima_articles/news-20080305-98602.html
|
||
-# </a>
|
||
-# <a href="http://www.aswataliraq.info/look/article.tpl?id=2047&IdLanguage=17&IdPublication=4&NrArticle=71743&NrIssue=1&NrSection=10">
|
||
# http://www.aswataliraq.info/look/article.tpl?id=2047&IdLanguage=17&IdPublication=4&NrArticle=71743&NrIssue=1&NrSection=10
|
||
-# </a>
|
||
#
|
||
# We have published a short article in English about the change:
|
||
-# <a href="http://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html">
|
||
# http://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html
|
||
-# </a>
|
||
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
Rule Iraq 1982 only - May 1 0:00 1:00 D
|
||
@@ -1037,14 +1150,14 @@
|
||
Rule Iraq 1984 1985 - Apr 1 0:00 1:00 D
|
||
Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 S
|
||
Rule Iraq 1986 1990 - Mar lastSun 1:00s 1:00 D
|
||
-# IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the `:01' is a typo.
|
||
+# IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the ':01' is a typo.
|
||
# Shanks & Pottenger say Iraq did not observe DST 1992/1997; ignore this.
|
||
#
|
||
Rule Iraq 1991 2007 - Apr 1 3:00s 1:00 D
|
||
Rule Iraq 1991 2007 - Oct 1 3:00s 0 S
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Asia/Baghdad 2:57:40 - LMT 1890
|
||
- 2:57:36 - BMT 1918 # Baghdad Mean Time?
|
||
+ 2:57:36 - BMT 1918 # Baghdad Mean Time?
|
||
3:00 - AST 1982 May
|
||
3:00 Iraq A%sT
|
||
|
||
@@ -1272,7 +1385,7 @@
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Asia/Jerusalem 2:20:54 - LMT 1880
|
||
- 2:20:40 - JMT 1918 # Jerusalem Mean Time?
|
||
+ 2:20:40 - JMT 1918 # Jerusalem Mean Time?
|
||
2:00 Zion I%sT
|
||
|
||
|
||
@@ -1281,15 +1394,15 @@
|
||
|
||
# Japan
|
||
|
||
-# `9:00' and `JST' is from Guy Harris.
|
||
+# '9:00' and 'JST' is from Guy Harris.
|
||
|
||
# From Paul Eggert (1995-03-06):
|
||
# Today's _Asahi Evening News_ (page 4) reports that Japan had
|
||
-# daylight saving between 1948 and 1951, but ``the system was discontinued
|
||
-# because the public believed it would lead to longer working hours.''
|
||
+# daylight saving between 1948 and 1951, but "the system was discontinued
|
||
+# because the public believed it would lead to longer working hours."
|
||
|
||
-# From Mayumi Negishi in the 2005-08-10 Japan Times
|
||
-# <http://www.japantimes.co.jp/cgi-bin/getarticle.pl5?nn20050810f2.htm>:
|
||
+# From Mayumi Negishi in the 2005-08-10 Japan Times:
|
||
+# http://www.japantimes.co.jp/cgi-bin/getarticle.pl5?nn20050810f2.htm
|
||
# Occupation authorities imposed daylight-saving time on Japan on
|
||
# [1948-05-01].... But lack of prior debate and the execution of
|
||
# daylight-saving time just three days after the bill was passed generated
|
||
@@ -1313,7 +1426,8 @@
|
||
|
||
# From Hideyuki Suzuki (1998-11-09):
|
||
# 'Tokyo' usually stands for the former location of Tokyo Astronomical
|
||
-# Observatory: E 139 44' 40".90 (9h 18m 58s.727), N 35 39' 16".0.
|
||
+# Observatory: 139 degrees 44' 40.90" E (9h 18m 58.727s),
|
||
+# 35 degrees 39' 16.0" N.
|
||
# This data is from 'Rika Nenpyou (Chronological Scientific Tables) 1996'
|
||
# edited by National Astronomical Observatory of Japan....
|
||
# JST (Japan Standard Time) has been used since 1888-01-01 00:00 (JST).
|
||
@@ -1321,10 +1435,10 @@
|
||
|
||
# From Hideyuki Suzuki (1998-11-16):
|
||
# The ordinance No. 51 (1886) established "standard time" in Japan,
|
||
-# which stands for the time on E 135 degree.
|
||
+# which stands for the time on 135 degrees E.
|
||
# In the ordinance No. 167 (1895), "standard time" was renamed to "central
|
||
# standard time". And the same ordinance also established "western standard
|
||
-# time", which stands for the time on E 120 degree.... But "western standard
|
||
+# time", which stands for the time on 120 degrees E.... But "western standard
|
||
# time" was abolished in the ordinance No. 529 (1937). In the ordinance No.
|
||
# 167, there is no mention regarding for what place western standard time is
|
||
# standard....
|
||
@@ -1332,27 +1446,33 @@
|
||
# I wrote "ordinance" above, but I don't know how to translate.
|
||
# In Japanese it's "chokurei", which means ordinance from emperor.
|
||
|
||
-# Shanks & Pottenger claim JST in use since 1896, and that a few
|
||
-# places (e.g. Ishigaki) use +0800; go with Suzuki. Guess that all
|
||
-# ordinances took effect on Jan 1.
|
||
+# From Yu-Cheng Chuang (2013-07-12):
|
||
+# ...the Meiji Emperor announced Ordinance No. 167 of Meiji Year 28 "The clause
|
||
+# about standard time" ... The adoption began from Jan 1, 1896.
|
||
+# http://ja.wikisource.org/wiki/標準時ニ關スル件_(公布時)
|
||
+#
|
||
+# ...the Showa Emperor announced Ordinance No. 529 of Showa Year 12 ... which
|
||
+# means the whole Japan territory, including later occupations, adopt Japan
|
||
+# Central Time (UTC+9). The adoption began on Oct 1, 1937.
|
||
+# http://ja.wikisource.org/wiki/明治二十八年勅令第百六十七號標準時ニ關スル件中改正ノ件
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u
|
||
- 9:00 - JST 1896
|
||
- 9:00 - CJT 1938
|
||
+ 9:00 - JST 1896 Jan 1
|
||
+ 9:00 - JCST 1937 Oct 1
|
||
9:00 Japan J%sT
|
||
# Since 1938, all Japanese possessions have been like Asia/Tokyo.
|
||
|
||
# Jordan
|
||
#
|
||
-# From <a href="http://star.arabia.com/990701/JO9.html">
|
||
-# Jordan Week (1999-07-01) </a> via Steffen Thorsen (1999-09-09):
|
||
+# From <http://star.arabia.com/990701/JO9.html>
|
||
+# Jordan Week (1999-07-01) via Steffen Thorsen (1999-09-09):
|
||
# Clocks in Jordan were forwarded one hour on Wednesday at midnight,
|
||
# in accordance with the government's decision to implement summer time
|
||
# all year round.
|
||
#
|
||
-# From <a href="http://star.arabia.com/990930/JO9.html">
|
||
-# Jordan Week (1999-09-30) </a> via Steffen Thorsen (1999-11-09):
|
||
+# From <http://star.arabia.com/990930/JO9.html>
|
||
+# Jordan Week (1999-09-30) via Steffen Thorsen (1999-11-09):
|
||
# Winter time starts today Thursday, 30 September. Clocks will be turned back
|
||
# by one hour. This is the latest government decision and it's final!
|
||
# The decision was taken because of the increase in working hours in
|
||
@@ -1372,9 +1492,7 @@
|
||
|
||
# From Steffen Thorsen (2009-04-02):
|
||
# This single one might be good enough, (2009-03-24, Arabic):
|
||
-# <a href="http://petra.gov.jo/Artical.aspx?Lng=2&Section=8&Artical=95279">
|
||
# http://petra.gov.jo/Artical.aspx?Lng=2&Section=8&Artical=95279
|
||
-# </a>
|
||
#
|
||
# Google's translation:
|
||
#
|
||
@@ -1465,9 +1583,8 @@
|
||
# - Qyzylorda switched from +5:00 to +6:00 on 1992-01-19 02:00.
|
||
# - Oral switched from +5:00 to +4:00 in spring 1989.
|
||
|
||
-# <a href="http://www.kazsociety.org.uk/news/2005/03/30.htm">
|
||
-# From Kazakhstan Embassy's News Bulletin #11 (2005-03-21):
|
||
-# </a>
|
||
+# From Kazakhstan Embassy's News Bulletin #11
|
||
+# <http://www.kazsociety.org.uk/news/2005/03/30.htm> (2005-03-21):
|
||
# The Government of Kazakhstan passed a resolution March 15 abolishing
|
||
# daylight saving time citing lack of economic benefits and health
|
||
# complications coupled with a decrease in productivity.
|
||
@@ -1500,10 +1617,10 @@
|
||
6:00 - KIZT 1982 Apr 1
|
||
5:00 RussiaAsia KIZ%sT 1991
|
||
5:00 - KIZT 1991 Dec 16 # independence
|
||
- 5:00 - QYZT 1992 Jan 19 2:00
|
||
+ 5:00 - QYZT 1992 Jan 19 2:00
|
||
6:00 RussiaAsia QYZ%sT 2005 Mar 15
|
||
6:00 - QYZT
|
||
-# Aqtobe (aka Aktobe, formerly Akt'ubinsk)
|
||
+# Aqtobe (aka Aktobe, formerly Aktyubinsk)
|
||
Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2
|
||
4:00 - AKTT 1930 Jun 21 # Aktyubinsk Time
|
||
5:00 - AKTT 1981 Apr 1
|
||
@@ -1523,7 +1640,7 @@
|
||
6:00 - SHET 1982 Apr 1
|
||
5:00 RussiaAsia SHE%sT 1991
|
||
5:00 - SHET 1991 Dec 16 # independence
|
||
- 5:00 RussiaAsia AQT%sT 1995 Mar lastSun 2:00 # Aqtau Time
|
||
+ 5:00 RussiaAsia AQT%sT 1995 Mar lastSun 2:00 # Aqtau Time
|
||
4:00 RussiaAsia AQT%sT 2005 Mar 15
|
||
5:00 - AQTT
|
||
# West Kazakhstan
|
||
@@ -1532,7 +1649,7 @@
|
||
5:00 - URAT 1981 Apr 1
|
||
5:00 1:00 URAST 1981 Oct 1
|
||
6:00 - URAT 1982 Apr 1
|
||
- 5:00 RussiaAsia URA%sT 1989 Mar 26 2:00
|
||
+ 5:00 RussiaAsia URA%sT 1989 Mar 26 2:00
|
||
4:00 RussiaAsia URA%sT 1991
|
||
4:00 - URAT 1991 Dec 16 # independence
|
||
4:00 RussiaAsia ORA%sT 2005 Mar 15 # Oral Time
|
||
@@ -1543,7 +1660,7 @@
|
||
|
||
# From Paul Eggert (2005-08-15):
|
||
# According to an article dated today in the Kyrgyzstan Development Gateway
|
||
-# <http://eng.gateway.kg/cgi-bin/page.pl?id=1&story_name=doc9979.shtml>
|
||
+# http://eng.gateway.kg/cgi-bin/page.pl?id=1&story_name=doc9979.shtml
|
||
# Kyrgyzstan is canceling the daylight saving time system. I take the article
|
||
# to mean that they will leave their clocks at 6 hours ahead of UTC.
|
||
# From Malik Abdugaliev (2005-09-21):
|
||
@@ -1558,68 +1675,92 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Asia/Bishkek 4:58:24 - LMT 1924 May 2
|
||
5:00 - FRUT 1930 Jun 21 # Frunze Time
|
||
- 6:00 RussiaAsia FRU%sT 1991 Mar 31 2:00s
|
||
- 5:00 1:00 FRUST 1991 Aug 31 2:00 # independence
|
||
- 5:00 Kyrgyz KG%sT 2005 Aug 12 # Kyrgyzstan Time
|
||
+ 6:00 RussiaAsia FRU%sT 1991 Mar 31 2:00s
|
||
+ 5:00 1:00 FRUST 1991 Aug 31 2:00 # independence
|
||
+ 5:00 Kyrgyz KG%sT 2005 Aug 12 # Kyrgyzstan Time
|
||
6:00 - KGT
|
||
|
||
###############################################################################
|
||
|
||
# Korea (North and South)
|
||
|
||
-# From Annie I. Bang (2006-07-10) in
|
||
-# <http://www.koreaherald.co.kr/SITE/data/html_dir/2006/07/10/200607100012.asp>:
|
||
-# The Ministry of Commerce, Industry and Energy has already
|
||
-# commissioned a research project [to reintroduce DST] and has said
|
||
-# the system may begin as early as 2008.... Korea ran a daylight
|
||
-# saving program from 1949-61 but stopped it during the 1950-53 Korean War.
|
||
+# From Annie I. Bang (2006-07-10):
|
||
+# http://www.koreaherald.com/view.php?ud=200607100012
|
||
+# Korea ran a daylight saving program from 1949-61 but stopped it
|
||
+# during the 1950-53 Korean War. The system was temporarily enforced
|
||
+# between 1987 and 1988 ...
|
||
|
||
-# From Shanks & Pottenger:
|
||
+# From Sanghyuk Jung (2014-10-29):
|
||
+# http://mm.icann.org/pipermail/tz/2014-October/021830.html
|
||
+# According to the Korean Wikipedia
|
||
+# http://ko.wikipedia.org/wiki/한국_표준시
|
||
+# [oldid=12896437 2014-09-04 08:03 UTC]
|
||
+# DST in Republic of Korea was as follows.... And I checked old
|
||
+# newspapers in Korean, all articles correspond with data in Wikipedia.
|
||
+# For example, the article in 1948 (Korean Language) proved that DST
|
||
+# started at June 1 in that year. For another example, the article in
|
||
+# 1988 said that DST started at 2:00 AM in that year.
|
||
+
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
-Rule ROK 1960 only - May 15 0:00 1:00 D
|
||
-Rule ROK 1960 only - Sep 13 0:00 0 S
|
||
-Rule ROK 1987 1988 - May Sun>=8 0:00 1:00 D
|
||
-Rule ROK 1987 1988 - Oct Sun>=8 0:00 0 S
|
||
+Rule ROK 1948 only - Jun 1 0:00 1:00 D
|
||
+Rule ROK 1948 only - Sep 13 0:00 0 S
|
||
+Rule ROK 1949 only - Apr 3 0:00 1:00 D
|
||
+Rule ROK 1949 1951 - Sep Sun>=8 0:00 0 S
|
||
+Rule ROK 1950 only - Apr 1 0:00 1:00 D
|
||
+Rule ROK 1951 only - May 6 0:00 1:00 D
|
||
+Rule ROK 1955 only - May 5 0:00 1:00 D
|
||
+Rule ROK 1955 only - Sep 9 0:00 0 S
|
||
+Rule ROK 1956 only - May 20 0:00 1:00 D
|
||
+Rule ROK 1956 only - Sep 30 0:00 0 S
|
||
+Rule ROK 1957 1960 - May Sun>=1 0:00 1:00 D
|
||
+Rule ROK 1957 1960 - Sep Sun>=18 0:00 0 S
|
||
+Rule ROK 1987 1988 - May Sun>=8 2:00 1:00 D
|
||
+Rule ROK 1987 1988 - Oct Sun>=8 3:00 0 S
|
||
+
|
||
+# From Paul Eggert (2014-10-30):
|
||
+# The Korean Wikipedia entry gives the following sources for UT offsets:
|
||
+#
|
||
+# 1908: Official Journal Article No. 3994 (Edict No. 5)
|
||
+# 1912: Governor-General of Korea Official Gazette Issue No. 367
|
||
+# (Announcement No. 338)
|
||
+# 1954: Presidential Decree No. 876 (1954-03-17)
|
||
+# 1961: Law No. 676 (1961-08-07)
|
||
+# 1987: Law No. 3919 (1986-12-31)
|
||
+#
|
||
+# The Wikipedia entry also has confusing information about a change
|
||
+# to UT+9 in April 1910, but then what would be the point of the later change
|
||
+# to UT+9 on 1912-01-01? Omit the 1910 change for now.
|
||
+#
|
||
+# I guessed that time zone abbreviations through 1945 followed the same
|
||
+# rules as discussed under Taiwan, with nominal switches from JST to KST
|
||
+# when the respective cities were taken over by the Allies after WWII.
|
||
+#
|
||
+# For Pyongyang we have no information; guess no changes since World War II.
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Asia/Seoul 8:27:52 - LMT 1890
|
||
- 8:30 - KST 1904 Dec
|
||
- 9:00 - KST 1928
|
||
- 8:30 - KST 1932
|
||
+Zone Asia/Seoul 8:27:52 - LMT 1908 Apr 1
|
||
+ 8:30 - KST 1912 Jan 1
|
||
+ 9:00 - JCST 1937 Oct 1
|
||
+ 9:00 - JST 1945 Sep 8
|
||
9:00 - KST 1954 Mar 21
|
||
- 8:00 ROK K%sT 1961 Aug 10
|
||
- 8:30 - KST 1968 Oct
|
||
+ 8:30 ROK K%sT 1961 Aug 10
|
||
9:00 ROK K%sT
|
||
-Zone Asia/Pyongyang 8:23:00 - LMT 1890
|
||
- 8:30 - KST 1904 Dec
|
||
- 9:00 - KST 1928
|
||
- 8:30 - KST 1932
|
||
- 9:00 - KST 1954 Mar 21
|
||
- 8:00 - KST 1961 Aug 10
|
||
+Zone Asia/Pyongyang 8:23:00 - LMT 1908 Apr 1
|
||
+ 8:30 - KST 1912 Jan 1
|
||
+ 9:00 - JCST 1937 Oct 1
|
||
+ 9:00 - JST 1945 Aug 24
|
||
9:00 - KST
|
||
|
||
###############################################################################
|
||
|
||
# Kuwait
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-# From the Arab Times (2007-03-14):
|
||
-# The Civil Service Commission (CSC) has approved a proposal forwarded
|
||
-# by MP Ahmad Baqer on implementing the daylight saving time (DST) in
|
||
-# Kuwait starting from April until the end of Sept this year, reports Al-Anba.
|
||
-# <http://www.arabtimesonline.com/arabtimes/kuwait/Viewdet.asp?ID=9950>.
|
||
-# From Paul Eggert (2007-03-29):
|
||
-# We don't know the details, or whether the approval means it'll happen,
|
||
-# so for now we assume no DST.
|
||
Zone Asia/Kuwait 3:11:56 - LMT 1950
|
||
3:00 - AST
|
||
|
||
# Laos
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Asia/Vientiane 6:50:24 - LMT 1906 Jun 9 # or Viangchan
|
||
- 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT?
|
||
- 7:00 - ICT 1912 May
|
||
- 8:00 - ICT 1931 May
|
||
- 7:00 - ICT
|
||
+# See Asia/Bangkok.
|
||
+
|
||
|
||
# Lebanon
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
@@ -1657,8 +1798,8 @@
|
||
Rule NBorneo 1935 1941 - Dec 14 0:00 0 -
|
||
#
|
||
# peninsular Malaysia
|
||
-# The data here are taken from Mok Ly Yng (2003-10-30)
|
||
-# <http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html>.
|
||
+# taken from Mok Ly Yng (2003-10-30)
|
||
+# http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Asia/Kuala_Lumpur 6:46:46 - LMT 1901 Jan 1
|
||
6:55:25 - SMT 1905 Jun 1 # Singapore M.T.
|
||
@@ -1670,12 +1811,12 @@
|
||
7:30 - MALT 1982 Jan 1
|
||
8:00 - MYT # Malaysia Time
|
||
# Sabah & Sarawak
|
||
-# From Paul Eggert (2006-03-22):
|
||
-# The data here are mostly from Shanks & Pottenger, but the 1942, 1945 and 1982
|
||
-# transition dates are from Mok Ly Yng.
|
||
+# From Paul Eggert (2014-08-12):
|
||
+# The data entries here are mostly from Shanks & Pottenger, but the 1942, 1945
|
||
+# and 1982 transition dates are from Mok Ly Yng.
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Asia/Kuching 7:21:20 - LMT 1926 Mar
|
||
- 7:30 - BORT 1933 # Borneo Time
|
||
+ 7:30 - BORT 1933 # Borneo Time
|
||
8:00 NBorneo BOR%sT 1942 Feb 16
|
||
9:00 - JST 1945 Sep 12
|
||
8:00 - BORT 1982 Jan 1
|
||
@@ -1683,22 +1824,21 @@
|
||
|
||
# Maldives
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Indian/Maldives 4:54:00 - LMT 1880 # Male
|
||
- 4:54:00 - MMT 1960 # Male Mean Time
|
||
- 5:00 - MVT # Maldives Time
|
||
+Zone Indian/Maldives 4:54:00 - LMT 1880 # Male
|
||
+ 4:54:00 - MMT 1960 # Male Mean Time
|
||
+ 5:00 - MVT # Maldives Time
|
||
|
||
# Mongolia
|
||
|
||
# Shanks & Pottenger say that Mongolia has three time zones, but
|
||
-# usno1995 and the CIA map Standard Time Zones of the World (2005-03)
|
||
-# both say that it has just one.
|
||
+# The USNO (1995-12-21) and the CIA map Standard Time Zones of the World
|
||
+# (2005-03) both say that it has just one.
|
||
|
||
# From Oscar van Vlijmen (1999-12-11):
|
||
-# <a href="http://www.mongoliatourism.gov.mn/general.htm">
|
||
# General Information Mongolia
|
||
-# </a> (1999-09)
|
||
+# <http://www.mongoliatourism.gov.mn/general.htm> (1999-09)
|
||
# "Time: Mongolia has two time zones. Three westernmost provinces of
|
||
-# Bayan-Ulgii, Uvs, and Hovd are one hour earlier than the capital city, and
|
||
+# Bayan-Ölgii, Uvs, and Hovd are one hour earlier than the capital city, and
|
||
# the rest of the country follows the Ulaanbaatar time, which is UTC/GMT plus
|
||
# eight hours."
|
||
|
||
@@ -1709,7 +1849,7 @@
|
||
# of implementation may have been different....
|
||
# Some maps in the past have indicated that there was an additional time
|
||
# zone in the eastern part of Mongolia, including the provinces of Dornod,
|
||
-# Suhbaatar, and possibly Khentij.
|
||
+# Sükhbaatar, and possibly Khentii.
|
||
|
||
# From Paul Eggert (1999-12-15):
|
||
# Naming and spelling is tricky in Mongolia.
|
||
@@ -1723,10 +1863,10 @@
|
||
# (adopted DST on 2001-04-27 02:00 local time, ending 2001-09-28),
|
||
# there are three time zones.
|
||
#
|
||
-# Provinces [at 7:00]: Bayan-ulgii, Uvs, Khovd, Zavkhan, Govi-Altai
|
||
-# Provinces [at 8:00]: Khovsgol, Bulgan, Arkhangai, Khentii, Tov,
|
||
-# Bayankhongor, Ovorkhangai, Dundgovi, Dornogovi, Omnogovi
|
||
-# Provinces [at 9:00]: Dornod, Sukhbaatar
|
||
+# Provinces [at 7:00]: Bayan-Ölgii, Uvs, Khovd, Zavkhan, Govi-Altai
|
||
+# Provinces [at 8:00]: Khövsgöl, Bulgan, Arkhangai, Khentii, Töv,
|
||
+# Bayankhongor, Övörkhangai, Dundgovi, Dornogovi, Ömnögovi
|
||
+# Provinces [at 9:00]: Dornod, Sükhbaatar
|
||
#
|
||
# [The province of Selenge is omitted from the above lists.]
|
||
|
||
@@ -1743,16 +1883,16 @@
|
||
# We have wildly conflicting information about Mongolia's time zones.
|
||
# Bill Bonnet (2005-05-19) reports that the US Embassy in Ulaanbaatar says
|
||
# there is only one time zone and that DST is observed, citing Microsoft
|
||
-# Windows XP as the source. Risto Nykanen (2005-05-16) reports that
|
||
+# Windows XP as the source. Risto Nykänen (2005-05-16) reports that
|
||
# travelmongolia.org says there are two time zones (UTC+7, UTC+8) with no DST.
|
||
# Oscar van Vlijmen (2005-05-20) reports that the Mongolian Embassy in
|
||
# Washington, DC says there are two time zones, with DST observed.
|
||
# He also found
|
||
-# <http://ubpost.mongolnews.mn/index.php?subaction=showcomments&id=1111634894&archive=&start_from=&ucat=1&>
|
||
+# http://ubpost.mongolnews.mn/index.php?subaction=showcomments&id=1111634894&archive=&start_from=&ucat=1&
|
||
# which also says that there is DST, and which has a comment by "Toddius"
|
||
# (2005-03-31 06:05 +0700) saying "Mongolia actually has 3.5 time zones.
|
||
# The West (OLGII) is +7 GMT, most of the country is ULAT is +8 GMT
|
||
-# and some Eastern provinces are +9 GMT but Sukhbaatar Aimag is SUHK +8.5 GMT.
|
||
+# and some Eastern provinces are +9 GMT but Sükhbaatar Aimag is SUHK +8.5 GMT.
|
||
# The SUKH timezone is new this year, it is one of the few things the
|
||
# parliament passed during the tumultuous winter session."
|
||
# For now, let's ignore this information, until we have more confirmation.
|
||
@@ -1768,29 +1908,23 @@
|
||
# +08:00 instead. Different sources appear to disagree with the tz
|
||
# database on this, e.g.:
|
||
#
|
||
-# <a href="http://www.timeanddate.com/worldclock/city.html?n=1026">
|
||
# http://www.timeanddate.com/worldclock/city.html?n=1026
|
||
-# </a>
|
||
-# <a href="http://www.worldtimeserver.com/current_time_in_MN.aspx">
|
||
# http://www.worldtimeserver.com/current_time_in_MN.aspx
|
||
-# </a>
|
||
#
|
||
# both say GMT+08:00.
|
||
|
||
# From Steffen Thorsen (2008-03-31):
|
||
# eznis airways, which operates several domestic flights, has a flight
|
||
# schedule here:
|
||
-# <a href="http://www.eznis.com/Container.jsp?id=112">
|
||
# http://www.eznis.com/Container.jsp?id=112
|
||
-# </a>
|
||
# (click the English flag for English)
|
||
#
|
||
-# There it appears that flights between Choibalsan and Ulaanbatar arrive
|
||
+# There it appears that flights between Choibalsan and Ulaanbaatar arrive
|
||
# about 1:35 - 1:50 hours later in local clock time, no matter the
|
||
-# direction, while Ulaanbaatar-Khvod takes 2 hours in the Eastern
|
||
-# direction and 3:35 back, which indicates that Ulaanbatar and Khvod are
|
||
+# direction, while Ulaanbaatar-Khovd takes 2 hours in the Eastern
|
||
+# direction and 3:35 back, which indicates that Ulaanbaatar and Khovd are
|
||
# in different time zones (like we know about), while Choibalsan and
|
||
-# Ulaanbatar are in the same time zone (correction needed).
|
||
+# Ulaanbaatar are in the same time zone (correction needed).
|
||
|
||
# From Arthur David Olson (2008-05-19):
|
||
# Assume that Choibalsan is indeed offset by 8:00.
|
||
@@ -1806,7 +1940,7 @@
|
||
# (1996-09) says 1996-10-25. Go with Shanks & Pottenger through 1998.
|
||
#
|
||
# Shanks & Pottenger say that the Sept. 1984 through Sept. 1990 switches
|
||
-# in Choibalsan (more precisely, in Dornod and Sukhbaatar) took place
|
||
+# in Choibalsan (more precisely, in Dornod and Sükhbaatar) took place
|
||
# at 02:00 standard time, not at 00:00 local time as in the rest of
|
||
# the country. That would be odd, and possibly is a result of their
|
||
# correction of 02:00 (in the previous edition) not being done correctly
|
||
@@ -1822,13 +1956,13 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
# Hovd, a.k.a. Chovd, Dund-Us, Dzhargalant, Khovd, Jirgalanta
|
||
Zone Asia/Hovd 6:06:36 - LMT 1905 Aug
|
||
- 6:00 - HOVT 1978 # Hovd Time
|
||
+ 6:00 - HOVT 1978 # Hovd Time
|
||
7:00 Mongol HOV%sT
|
||
# Ulaanbaatar, a.k.a. Ulan Bataar, Ulan Bator, Urga
|
||
Zone Asia/Ulaanbaatar 7:07:32 - LMT 1905 Aug
|
||
- 7:00 - ULAT 1978 # Ulaanbaatar Time
|
||
+ 7:00 - ULAT 1978 # Ulaanbaatar Time
|
||
8:00 Mongol ULA%sT
|
||
-# Choibalsan, a.k.a. Bajan Tuemen, Bajan Tumen, Chojbalsan,
|
||
+# Choibalsan, a.k.a. Bajan Tümen, Bajan Tumen, Chojbalsan,
|
||
# Choybalsan, Sanbejse, Tchoibalsan
|
||
Zone Asia/Choibalsan 7:38:00 - LMT 1905 Aug
|
||
7:00 - ULAT 1978
|
||
@@ -1860,7 +1994,7 @@
|
||
# 00:01 was to make it clear which day it was on.
|
||
|
||
# From Paul Eggert (2002-03-15):
|
||
-# Jesper Norgaard found this URL:
|
||
+# Jesper Nørgaard found this URL:
|
||
# http://www.pak.gov.pk/public/news/app/app06_dec.htm
|
||
# (dated 2001-12-06) which says that the Cabinet adopted a scheme "to
|
||
# advance the clocks by one hour on the night between the first
|
||
@@ -1892,43 +2026,30 @@
|
||
# Here is an article that Pakistan plan to introduce Daylight Saving Time
|
||
# on June 1, 2008 for 3 months.
|
||
#
|
||
-# "... The federal cabinet on Wednesday announced a new conservation plan to help
|
||
-# reduce load shedding by approving the closure of commercial centres at 9pm and
|
||
-# moving clocks forward by one hour for the next three months.
|
||
-# ...."
|
||
+# "... The federal cabinet on Wednesday announced a new conservation plan to
|
||
+# help reduce load shedding by approving the closure of commercial centres at
|
||
+# 9pm and moving clocks forward by one hour for the next three months. ...."
|
||
#
|
||
-# <a href="http://www.worldtimezone.net/dst_news/dst_news_pakistan01.html">
|
||
# http://www.worldtimezone.net/dst_news/dst_news_pakistan01.html
|
||
-# </a>
|
||
-# OR
|
||
-# <a href="http://www.dailytimes.com.pk/default.asp?page=2008%5C05%5C15%5Cstory_15-5-2008_pg1_4">
|
||
# http://www.dailytimes.com.pk/default.asp?page=2008%5C05%5C15%5Cstory_15-5-2008_pg1_4
|
||
-# </a>
|
||
|
||
# From Arthur David Olson (2008-05-19):
|
||
# XXX--midnight transitions is a guess; 2008 only is a guess.
|
||
|
||
# From Alexander Krivenyshev (2008-08-28):
|
||
# Pakistan government has decided to keep the watches one-hour advanced
|
||
-# for another 2 months--plan to return to Standard Time on October 31
|
||
+# for another 2 months - plan to return to Standard Time on October 31
|
||
# instead of August 31.
|
||
#
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_pakistan02.html">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_pakistan02.html
|
||
-# </a>
|
||
-# OR
|
||
-# <a href="http://dailymailnews.com/200808/28/news/dmbrn03.html">
|
||
# http://dailymailnews.com/200808/28/news/dmbrn03.html
|
||
-# </a>
|
||
|
||
# From Alexander Krivenyshev (2009-04-08):
|
||
# Based on previous media reports that "... proposed plan to
|
||
# advance clocks by one hour from May 1 will cause disturbance
|
||
# to the working schedules rather than bringing discipline in
|
||
# official working."
|
||
-# <a href="http://www.thenews.com.pk/daily_detail.asp?id=171280">
|
||
# http://www.thenews.com.pk/daily_detail.asp?id=171280
|
||
-# </a>
|
||
#
|
||
# recent news that instead of May 2009 - Pakistan plan to
|
||
# introduce DST from April 15, 2009
|
||
@@ -1936,15 +2057,8 @@
|
||
# FYI: Associated Press Of Pakistan
|
||
# April 08, 2009
|
||
# Cabinet okays proposal to advance clocks by one hour from April 15
|
||
-# <a href="http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=73043&Itemid=1">
|
||
# http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=73043&Itemid=1
|
||
-# </a>
|
||
-#
|
||
-# or
|
||
-#
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_pakistan05.html">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_pakistan05.html
|
||
-# </a>
|
||
#
|
||
# ....
|
||
# The Federal Cabinet on Wednesday approved the proposal to
|
||
@@ -1957,34 +2071,20 @@
|
||
# clocks backward by one hour from October 1. A formal announcement to
|
||
# this effect will be made after the Prime Minister grants approval in
|
||
# this regard."
|
||
-# <a href="http://www.thenews.com.pk/updates.asp?id=87168">
|
||
# http://www.thenews.com.pk/updates.asp?id=87168
|
||
-# </a>
|
||
|
||
# From Alexander Krivenyshev (2009-09-28):
|
||
# According to Associated Press Of Pakistan, it is confirmed that
|
||
-# Pakistan clocks across the country would be turned back by an hour from October
|
||
-# 1, 2009.
|
||
+# Pakistan clocks across the country would be turned back by an hour from
|
||
+# October 1, 2009.
|
||
#
|
||
# "Clocks to go back one hour from 1 Oct"
|
||
-# <a href="http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=86715&Itemid=2">
|
||
# http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=86715&Itemid=2
|
||
-# </a>
|
||
-# or
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_pakistan07.htm">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_pakistan07.htm
|
||
-# </a>
|
||
-
|
||
+#
|
||
# From Steffen Thorsen (2009-09-29):
|
||
-# Alexander Krivenyshev wrote:
|
||
-# > According to Associated Press Of Pakistan, it is confirmed that
|
||
-# > Pakistan clocks across the country would be turned back by an hour from October
|
||
-# > 1, 2009.
|
||
-#
|
||
# Now they seem to have changed their mind, November 1 is the new date:
|
||
-# <a href="http://www.thenews.com.pk/top_story_detail.asp?Id=24742">
|
||
# http://www.thenews.com.pk/top_story_detail.asp?Id=24742
|
||
-# </a>
|
||
# "The country's clocks will be reversed by one hour on November 1.
|
||
# Officials of Federal Ministry for Interior told this to Geo News on
|
||
# Monday."
|
||
@@ -1996,11 +2096,9 @@
|
||
#
|
||
# We have confirmed this year's end date with both with the Ministry of
|
||
# Water and Power and the Pakistan Electric Power Company:
|
||
-# <a href="http://www.timeanddate.com/news/time/pakistan-ends-dst09.html">
|
||
# http://www.timeanddate.com/news/time/pakistan-ends-dst09.html
|
||
-# </a>
|
||
|
||
-# From Christoph Goehre (2009-10-01):
|
||
+# From Christoph Göhre (2009-10-01):
|
||
# [T]he German Consulate General in Karachi reported me today that Pakistan
|
||
# will go back to standard time on 1st of November.
|
||
|
||
@@ -2016,22 +2114,17 @@
|
||
# Now, it seems that the decision to not observe DST in final:
|
||
#
|
||
# "Govt Withdraws Plan To Advance Clocks"
|
||
-# <a href="http://www.apakistannews.com/govt-withdraws-plan-to-advance-clocks-172041">
|
||
# http://www.apakistannews.com/govt-withdraws-plan-to-advance-clocks-172041
|
||
-# </a>
|
||
#
|
||
# "People laud PM's announcement to end DST"
|
||
-# <a href="http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=99374&Itemid=2">
|
||
# http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=99374&Itemid=2
|
||
-# </a>
|
||
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
Rule Pakistan 2002 only - Apr Sun>=2 0:01 1:00 S
|
||
Rule Pakistan 2002 only - Oct Sun>=2 0:01 0 -
|
||
Rule Pakistan 2008 only - Jun 1 0:00 1:00 S
|
||
-Rule Pakistan 2008 only - Nov 1 0:00 0 -
|
||
+Rule Pakistan 2008 2009 - Nov 1 0:00 0 -
|
||
Rule Pakistan 2009 only - Apr 15 0:00 1:00 S
|
||
-Rule Pakistan 2009 only - Nov 1 0:00 0 -
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Asia/Karachi 4:28:12 - LMT 1907
|
||
@@ -2105,10 +2198,9 @@
|
||
# the PA has decided to implement DST in April.
|
||
|
||
# From Paul Eggert (1999-09-20):
|
||
-# Daoud Kuttab writes in
|
||
-# <a href="http://www.jpost.com/com/Archive/22.Apr.1999/Opinion/Article-2.html">
|
||
-# Holiday havoc
|
||
-# </a> (Jerusalem Post, 1999-04-22) that
|
||
+# Daoud Kuttab writes in Holiday havoc
|
||
+# http://www.jpost.com/com/Archive/22.Apr.1999/Opinion/Article-2.html
|
||
+# (Jerusalem Post, 1999-04-22) that
|
||
# the Palestinian National Authority changed to DST on 1999-04-15.
|
||
# I vaguely recall that they switch back in October (sorry, forgot the source).
|
||
# For now, let's assume that the spring switch was at 24:00,
|
||
@@ -2121,7 +2213,7 @@
|
||
# A user from Gaza reported that Gaza made the change early because of
|
||
# the Ramadan. Next year Ramadan will be even earlier, so I think
|
||
# there is a good chance next year's end date will be around two weeks
|
||
-# earlier--the same goes for Jordan.
|
||
+# earlier - the same goes for Jordan.
|
||
|
||
# From Steffen Thorsen (2006-08-17):
|
||
# I was informed by a user in Bethlehem that in Bethlehem it started the
|
||
@@ -2140,7 +2232,7 @@
|
||
# I guess it is likely that next year's date will be moved as well,
|
||
# because of the Ramadan.
|
||
|
||
-# From Jesper Norgaard Welen (2007-09-18):
|
||
+# From Jesper Nørgaard Welen (2007-09-18):
|
||
# According to Steffen Thorsen's web site the Gaza Strip and the rest of the
|
||
# Palestinian territories left DST early on 13.th. of September at 2:00.
|
||
|
||
@@ -2157,16 +2249,9 @@
|
||
# Gaza Strip (as Egypt) ended DST at midnight Thursday (Aug 28, 2008), while
|
||
# the West Bank will end Daylight Saving Time at midnight Sunday (Aug 31, 2008).
|
||
#
|
||
-# <a href="http://www.guardian.co.uk/world/feedarticle/7759001">
|
||
# http://www.guardian.co.uk/world/feedarticle/7759001
|
||
-# </a>
|
||
-# <a href="http://www.abcnews.go.com/International/wireStory?id=5676087">
|
||
# http://www.abcnews.go.com/International/wireStory?id=5676087
|
||
-# </a>
|
||
-# or
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_gazastrip01.html">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_gazastrip01.html
|
||
-# </a>
|
||
|
||
# From Alexander Krivenyshev (2009-03-26):
|
||
# According to the Palestine News Network (arabic.pnn.ps), Palestinian
|
||
@@ -2174,24 +2259,17 @@
|
||
# 26 and continue until the night of 27 September 2009.
|
||
#
|
||
# (in Arabic)
|
||
-# <a href="http://arabic.pnn.ps/index.php?option=com_content&task=view&id=50850">
|
||
# http://arabic.pnn.ps/index.php?option=com_content&task=view&id=50850
|
||
-# </a>
|
||
#
|
||
-# or
|
||
# (English translation)
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_westbank01.html">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_westbank01.html
|
||
-# </a>
|
||
|
||
# From Steffen Thorsen (2009-08-31):
|
||
# Palestine's Council of Ministers announced that they will revert back to
|
||
# winter time on Friday, 2009-09-04.
|
||
#
|
||
# One news source:
|
||
-# <a href="http://www.safa.ps/ara/?action=showdetail&seid=4158">
|
||
# http://www.safa.ps/ara/?action=showdetail&seid=4158
|
||
-# </a>
|
||
# (Palestinian press agency, Arabic),
|
||
# Google translate: "Decided that the Palestinian government in Ramallah
|
||
# headed by Salam Fayyad, the start of work in time for the winter of
|
||
@@ -2200,9 +2278,7 @@
|
||
#
|
||
# We are not sure if Gaza will do the same, last year they had a different
|
||
# end date, we will keep this page updated:
|
||
-# <a href="http://www.timeanddate.com/news/time/westbank-gaza-dst-2009.html">
|
||
# http://www.timeanddate.com/news/time/westbank-gaza-dst-2009.html
|
||
-# </a>
|
||
|
||
# From Alexander Krivenyshev (2009-09-02):
|
||
# Seems that Gaza Strip will go back to Winter Time same date as West Bank.
|
||
@@ -2212,51 +2288,35 @@
|
||
#
|
||
# "Winter time unite the West Bank and Gaza"
|
||
# (from Palestinian National Authority):
|
||
-# <a href="http://www.moi.gov.ps/en/?page=633167343250594025&nid=11505
|
||
# http://www.moi.gov.ps/en/?page=633167343250594025&nid=11505
|
||
-# </a>
|
||
-# or
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_gazastrip02.html>
|
||
# http://www.worldtimezone.com/dst_news/dst_news_gazastrip02.html
|
||
-# </a>
|
||
|
||
# From Alexander Krivenyshev (2010-03-19):
|
||
# According to Voice of Palestine DST will last for 191 days, from March
|
||
# 26, 2010 till "the last Sunday before the tenth day of Tishri
|
||
# (October), each year" (October 03, 2010?)
|
||
#
|
||
-# <a href="http://palvoice.org/forums/showthread.php?t=245697">
|
||
# http://palvoice.org/forums/showthread.php?t=245697
|
||
-# </a>
|
||
# (in Arabic)
|
||
-# or
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_westbank03.html">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_westbank03.html
|
||
-# </a>
|
||
|
||
# From Steffen Thorsen (2010-03-24):
|
||
# ...Ma'an News Agency reports that Hamas cabinet has decided it will
|
||
# start one day later, at 12:01am. Not sure if they really mean 12:01am or
|
||
# noon though:
|
||
#
|
||
-# <a href="http://www.maannews.net/eng/ViewDetails.aspx?ID=271178">
|
||
# http://www.maannews.net/eng/ViewDetails.aspx?ID=271178
|
||
-# </a>
|
||
# (Ma'an News Agency)
|
||
# "At 12:01am Friday, clocks in Israel and the West Bank will change to
|
||
# 1:01am, while Gaza clocks will change at 12:01am Saturday morning."
|
||
|
||
# From Steffen Thorsen (2010-08-11):
|
||
# According to several sources, including
|
||
-# <a href="http://www.maannews.net/eng/ViewDetails.aspx?ID=306795">
|
||
# http://www.maannews.net/eng/ViewDetails.aspx?ID=306795
|
||
-# </a>
|
||
# the clocks were set back one hour at 2010-08-11 00:00:00 local time in
|
||
# Gaza and the West Bank.
|
||
# Some more background info:
|
||
-# <a href="http://www.timeanddate.com/news/time/westbank-gaza-end-dst-2010.html">
|
||
# http://www.timeanddate.com/news/time/westbank-gaza-end-dst-2010.html
|
||
-# </a>
|
||
|
||
# From Steffen Thorsen (2011-08-26):
|
||
# Gaza and the West Bank did go back to standard time in the beginning of
|
||
@@ -2264,13 +2324,9 @@
|
||
# 00:00 (so two periods of DST in 2011). The pause was because of
|
||
# Ramadan.
|
||
#
|
||
-# <a href="http://www.maannews.net/eng/ViewDetails.aspx?ID=416217">
|
||
# http://www.maannews.net/eng/ViewDetails.aspx?ID=416217
|
||
-# </a>
|
||
# Additional info:
|
||
-# <a href="http://www.timeanddate.com/news/time/palestine-dst-2011.html">
|
||
# http://www.timeanddate.com/news/time/palestine-dst-2011.html
|
||
-# </a>
|
||
|
||
# From Alexander Krivenyshev (2011-08-27):
|
||
# According to the article in The Jerusalem Post:
|
||
@@ -2280,14 +2336,9 @@
|
||
# The Hamas government said on Saturday that it won't observe summertime after
|
||
# the Muslim feast of Id al-Fitr, which begins on Tuesday..."
|
||
# ...
|
||
-# <a href="http://www.jpost.com/MiddleEast/Article.aspx?id=235650">
|
||
# http://www.jpost.com/MiddleEast/Article.aspx?id=235650
|
||
-# </a>
|
||
-# or
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_gazastrip05.html">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_gazastrip05.html
|
||
-# </a>
|
||
-# The rules for Egypt are stolen from the `africa' file.
|
||
+# The rules for Egypt are stolen from the 'africa' file.
|
||
|
||
# From Steffen Thorsen (2011-09-30):
|
||
# West Bank did end Daylight Saving Time this morning/midnight (2011-09-30
|
||
@@ -2295,26 +2346,18 @@
|
||
# So West Bank and Gaza now have the same time again.
|
||
#
|
||
# Many sources, including:
|
||
-# <a href="http://www.maannews.net/eng/ViewDetails.aspx?ID=424808">
|
||
# http://www.maannews.net/eng/ViewDetails.aspx?ID=424808
|
||
-# </a>
|
||
|
||
# From Steffen Thorsen (2012-03-26):
|
||
# Palestinian news sources tell that both Gaza and West Bank will start DST
|
||
# on Friday (Thursday midnight, 2012-03-29 24:00).
|
||
# Some of many sources in Arabic:
|
||
-# <a href="http://www.samanews.com/index.php?act=Show&id=122638">
|
||
# http://www.samanews.com/index.php?act=Show&id=122638
|
||
-# </a>
|
||
#
|
||
-# <a href="http://safa.ps/details/news/74352/%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-%D8%A8%D8%A7%D9%84%D8%B6%D9%81%D8%A9-%D9%88%D8%BA%D8%B2%D8%A9-%D9%84%D9%8A%D9%84%D8%A9-%D8%A7%D9%84%D8%AC%D9%85%D8%B9%D8%A9.html">
|
||
# http://safa.ps/details/news/74352/%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-%D8%A8%D8%A7%D9%84%D8%B6%D9%81%D8%A9-%D9%88%D8%BA%D8%B2%D8%A9-%D9%84%D9%8A%D9%84%D8%A9-%D8%A7%D9%84%D8%AC%D9%85%D8%B9%D8%A9.html
|
||
-# </a>
|
||
#
|
||
# Our brief summary:
|
||
-# <a href="http://www.timeanddate.com/news/time/gaza-west-bank-dst-2012.html">
|
||
# http://www.timeanddate.com/news/time/gaza-west-bank-dst-2012.html
|
||
-# </a>
|
||
|
||
# From Steffen Thorsen (2013-03-26):
|
||
# The following news sources tells that Palestine will "start daylight saving
|
||
@@ -2374,10 +2417,10 @@
|
||
2:00 EgyptAsia EE%sT 1967 Jun 5
|
||
2:00 Zion I%sT 1996
|
||
2:00 Jordan EE%sT 1999
|
||
- 2:00 Palestine EE%sT 2008 Aug 29 0:00
|
||
+ 2:00 Palestine EE%sT 2008 Aug 29 0:00
|
||
2:00 - EET 2008 Sep
|
||
2:00 Palestine EE%sT 2010
|
||
- 2:00 - EET 2010 Mar 27 0:01
|
||
+ 2:00 - EET 2010 Mar 27 0:01
|
||
2:00 Palestine EE%sT 2011 Aug 1
|
||
2:00 - EET 2012
|
||
2:00 Palestine EE%sT
|
||
@@ -2393,25 +2436,27 @@
|
||
# no information
|
||
|
||
# Philippines
|
||
-# On 1844-08-16, Narciso Claveria, governor-general of the
|
||
+# On 1844-08-16, Narciso Clavería, governor-general of the
|
||
# Philippines, issued a proclamation announcing that 1844-12-30 was to
|
||
-# be immediately followed by 1845-01-01. Robert H. van Gent has a
|
||
-# transcript of the decree in <http://www.phys.uu.nl/~vgent/idl/idl.htm>.
|
||
-# The rest of the data are from Shanks & Pottenger.
|
||
+# be immediately followed by 1845-01-01; see R.H. van Gent's
|
||
+# History of the International Date Line
|
||
+# http://www.staff.science.uu.nl/~gent0113/idl/idl_philippines.htm
|
||
+# The rest of the data entries are from Shanks & Pottenger.
|
||
|
||
-# From Paul Eggert (2006-04-25):
|
||
-# Tomorrow's Manila Standard reports that the Philippines Department of
|
||
-# Trade and Industry is considering adopting DST this June when the
|
||
-# rainy season begins. See
|
||
-# <http://www.manilastandardtoday.com/?page=politics02_april26_2006>.
|
||
-# For now, we'll ignore this, since it's not definite and we lack details.
|
||
-#
|
||
-# From Jesper Norgaard Welen (2006-04-26):
|
||
+# From Jesper Nørgaard Welen (2006-04-26):
|
||
# ... claims that Philippines had DST last time in 1990:
|
||
# http://story.philippinetimes.com/p.x/ct/9/id/145be20cc6b121c0/cid/3e5bbccc730d258c/
|
||
# [a story dated 2006-04-25 by Cris Larano of Dow Jones Newswires,
|
||
# but no details]
|
||
|
||
+# From Paul Eggert (2014-08-14):
|
||
+# The following source says DST may be instituted November-January and again
|
||
+# March-June, but this is not definite. It also says DST was last proclaimed
|
||
+# during the Ramos administration (1992-1998); but again, no details.
|
||
+# Carcamo D. PNoy urged to declare use of daylight saving time.
|
||
+# Philippine Star 2014-08-05
|
||
+# http://www.philstar.com/headlines/2014/08/05/1354152/pnoy-urged-declare-use-daylight-saving-time
|
||
+
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
Rule Phil 1936 only - Nov 1 0:00 1:00 S
|
||
Rule Phil 1937 only - Feb 1 0:00 0 -
|
||
@@ -2428,18 +2473,39 @@
|
||
|
||
# Qatar
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Asia/Qatar 3:26:08 - LMT 1920 # Al Dawhah / Doha
|
||
+Zone Asia/Qatar 3:26:08 - LMT 1920 # Al Dawhah / Doha
|
||
4:00 - GST 1972 Jun
|
||
3:00 - AST
|
||
|
||
# Saudi Arabia
|
||
+#
|
||
+# From Paul Eggert (2014-07-15):
|
||
+# Time in Saudi Arabia and other countries in the Arabian peninsula was not
|
||
+# standardized until relatively recently; we don't know when, and possibly it
|
||
+# has never been made official. Richard P Hunt, in "Islam city yielding to
|
||
+# modern times", New York Times (1961-04-09), p 20, wrote that only airlines
|
||
+# observed standard time, and that people in Jeddah mostly observed quasi-solar
|
||
+# time, doing so by setting their watches at sunrise to 6 o'clock (or to 12
|
||
+# o'clock for "Arab" time).
|
||
+#
|
||
+# The TZ database cannot represent quasi-solar time; airline time is the best
|
||
+# we can do. The 1946 foreign air news digest of the U.S. Civil Aeronautics
|
||
+# Board (OCLC 42299995) reported that the "... Arabian Government, inaugurated
|
||
+# a weekly Dhahran-Cairo service, via the Saudi Arabian cities of Riyadh and
|
||
+# Jidda, on March 14, 1947". Shanks & Pottenger guessed 1950; go with the
|
||
+# earlier date.
|
||
+#
|
||
+# Shanks & Pottenger also state that until 1968-05-01 Saudi Arabia had two
|
||
+# time zones; the other zone, at UTC+4, was in the far eastern part of
|
||
+# the country. Ignore this, as it's before our 1970 cutoff.
|
||
+#
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Asia/Riyadh 3:06:52 - LMT 1950
|
||
+Zone Asia/Riyadh 3:06:52 - LMT 1947 Mar 14
|
||
3:00 - AST
|
||
|
||
# Singapore
|
||
-# The data here are taken from Mok Ly Yng (2003-10-30)
|
||
-# <http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html>.
|
||
+# taken from Mok Ly Yng (2003-10-30)
|
||
+# http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
|
||
6:55:25 - SMT 1905 Jun 1 # Singapore M.T.
|
||
@@ -2465,26 +2531,24 @@
|
||
|
||
# From Paul Eggert (1996-09-03):
|
||
# "Sri Lanka advances clock by an hour to avoid blackout"
|
||
-# (www.virtual-pc.com/lankaweb/news/items/240596-2.html, 1996-05-24,
|
||
+# (<http://www.virtual-pc.com/lankaweb/news/items/240596-2.html>, 1996-05-24,
|
||
# no longer available as of 1999-08-17)
|
||
-# reported ``the country's standard time will be put forward by one hour at
|
||
-# midnight Friday (1830 GMT) `in the light of the present power crisis'.''
|
||
+# reported "the country's standard time will be put forward by one hour at
|
||
+# midnight Friday (1830 GMT) 'in the light of the present power crisis'."
|
||
#
|
||
# From Dharmasiri Senanayake, Sri Lanka Media Minister (1996-10-24), as quoted
|
||
-# by Shamindra in
|
||
-# <a href="news:54rka5$m5h@mtinsc01-mgt.ops.worldnet.att.net">
|
||
-# Daily News - Hot News Section (1996-10-26)
|
||
-# </a>:
|
||
+# by Shamindra in Daily News - Hot News Section
|
||
+# <news:54rka5$m5h@mtinsc01-mgt.ops.worldnet.att.net> (1996-10-26):
|
||
# With effect from 12.30 a.m. on 26th October 1996
|
||
# Sri Lanka will be six (06) hours ahead of GMT.
|
||
|
||
-# From Jesper Norgaard Welen (2006-04-14), quoting Sri Lanka News Online
|
||
+# From Jesper Nørgaard Welen (2006-04-14), quoting Sri Lanka News Online
|
||
# <http://news.sinhalaya.com/wmview.php?ArtID=11002> (2006-04-13):
|
||
# 0030 hrs on April 15, 2006 (midnight of April 14, 2006 +30 minutes)
|
||
# at present, become 2400 hours of April 14, 2006 (midnight of April 14, 2006).
|
||
|
||
# From Peter Apps and Ranga Sirila of Reuters (2006-04-12) in:
|
||
-# <http://today.reuters.co.uk/news/newsArticle.aspx?type=scienceNews&storyID=2006-04-12T172228Z_01_COL295762_RTRIDST_0_SCIENCE-SRILANKA-TIME-DC.XML>
|
||
+# http://today.reuters.co.uk/news/newsArticle.aspx?type=scienceNews&storyID=2006-04-12T172228Z_01_COL295762_RTRIDST_0_SCIENCE-SRILANKA-TIME-DC.XML
|
||
# [The Tamil Tigers] never accepted the original 1996 time change and simply
|
||
# kept their clocks set five and a half hours ahead of Greenwich Mean
|
||
# Time (GMT), in line with neighbor India.
|
||
@@ -2498,7 +2562,7 @@
|
||
# twice in 1996 and probably SL Government or its standardization
|
||
# agencies never declared an abbreviation as a national standard.
|
||
#
|
||
-# I recollect before the recent change the government annoucemments
|
||
+# I recollect before the recent change the government announcements
|
||
# mentioning it as simply changing Sri Lanka Standard Time or Sri Lanka
|
||
# Time and no mention was made about the abbreviation.
|
||
#
|
||
@@ -2508,7 +2572,7 @@
|
||
# item....
|
||
#
|
||
# Within Sri Lanka I think LKT is well known among computer users and
|
||
-# adminsitrators. In my opinion SLT may not be a good choice because the
|
||
+# administrators. In my opinion SLT may not be a good choice because the
|
||
# nation's largest telcom / internet operator Sri Lanka Telcom is well
|
||
# known by that abbreviation - simply as SLT (there IP domains are
|
||
# slt.lk and sltnet.lk).
|
||
@@ -2523,13 +2587,13 @@
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Asia/Colombo 5:19:24 - LMT 1880
|
||
- 5:19:32 - MMT 1906 # Moratuwa Mean Time
|
||
+ 5:19:32 - MMT 1906 # Moratuwa Mean Time
|
||
5:30 - IST 1942 Jan 5
|
||
5:30 0:30 IHST 1942 Sep
|
||
- 5:30 1:00 IST 1945 Oct 16 2:00
|
||
- 5:30 - IST 1996 May 25 0:00
|
||
- 6:30 - LKT 1996 Oct 26 0:30
|
||
- 6:00 - LKT 2006 Apr 15 0:30
|
||
+ 5:30 1:00 IST 1945 Oct 16 2:00
|
||
+ 5:30 - IST 1996 May 25 0:00
|
||
+ 6:30 - LKT 1996 Oct 26 0:30
|
||
+ 6:00 - LKT 2006 Apr 15 0:30
|
||
5:30 - IST
|
||
|
||
# Syria
|
||
@@ -2580,7 +2644,7 @@
|
||
# Today the AP reported "Syria will switch to summertime at midnight Thursday."
|
||
# http://www.iht.com/articles/ap/2007/03/29/africa/ME-GEN-Syria-Time-Change.php
|
||
Rule Syria 2007 only - Mar lastFri 0:00 1:00 S
|
||
-# From Jesper Norgard (2007-10-27):
|
||
+# From Jesper Nørgaard (2007-10-27):
|
||
# The sister center ICARDA of my work CIMMYT is confirming that Syria DST will
|
||
# not take place 1st November at 0:00 o'clock but 1st November at 24:00 or
|
||
# rather Midnight between Thursday and Friday. This does make more sense than
|
||
@@ -2589,7 +2653,7 @@
|
||
# it is implemented at midnight of the last workday before weekend...
|
||
#
|
||
# From Steffen Thorsen (2007-10-27):
|
||
-# Jesper Norgaard Welen wrote:
|
||
+# Jesper Nørgaard Welen wrote:
|
||
#
|
||
# > "Winter local time in Syria will be observed at midnight of Thursday 1
|
||
# > November 2007, and the clock will be put back 1 hour."
|
||
@@ -2605,8 +2669,7 @@
|
||
|
||
# From Stephen Colebourne (2008-03-17):
|
||
# For everyone's info, I saw an IATA time zone change for [Syria] for
|
||
-# this month (March 2008) in the last day or so...This is the data IATA
|
||
-# are now using:
|
||
+# this month (March 2008) in the last day or so....
|
||
# Country Time Standard --- DST Start --- --- DST End --- DST
|
||
# Name Zone Variation Time Date Time Date
|
||
# Variation
|
||
@@ -2618,16 +2681,15 @@
|
||
# From Arthur David Olson (2008-03-17):
|
||
# Here's a link to English-language coverage by the Syrian Arab News
|
||
# Agency (SANA)...
|
||
-# <a href="http://www.sana.sy/eng/21/2008/03/11/165173.htm">
|
||
# http://www.sana.sy/eng/21/2008/03/11/165173.htm
|
||
-# </a>...which reads (in part) "The Cabinet approved the suggestion of the
|
||
+# ...which reads (in part) "The Cabinet approved the suggestion of the
|
||
# Ministry of Electricity to begin daylight savings time on Friday April
|
||
# 4th, advancing clocks one hour ahead on midnight of Thursday April 3rd."
|
||
# Since Syria is two hours east of UTC, the 2200 and 2100 transition times
|
||
# shown above match up with midnight in Syria.
|
||
|
||
# From Arthur David Olson (2008-03-18):
|
||
-# My buest guess at a Syrian rule is "the Friday nearest April 1";
|
||
+# My best guess at a Syrian rule is "the Friday nearest April 1";
|
||
# coding that involves either using a "Mar Fri>=29" construct that old time zone
|
||
# compilers can't handle or having multiple Rules (a la Israel).
|
||
# For now, use "Apr Fri>=1", and go with IATA on a uniform Sep 30 end.
|
||
@@ -2640,37 +2702,27 @@
|
||
# winter time on 2008-11-01 at 00:00 local daylight time (delaying/setting
|
||
# clocks back 60 minutes).
|
||
#
|
||
-# <a href="http://sana.sy/ara/2/2008/10/07/195459.htm">
|
||
# http://sana.sy/ara/2/2008/10/07/195459.htm
|
||
-# </a>
|
||
|
||
# From Steffen Thorsen (2009-03-19):
|
||
# Syria will start DST on 2009-03-27 00:00 this year according to many sources,
|
||
# two examples:
|
||
#
|
||
-# <a href="http://www.sana.sy/eng/21/2009/03/17/217563.htm">
|
||
# http://www.sana.sy/eng/21/2009/03/17/217563.htm
|
||
-# </a>
|
||
# (English, Syrian Arab News # Agency)
|
||
-# <a href="http://thawra.alwehda.gov.sy/_View_news2.asp?FileName=94459258720090318012209">
|
||
# http://thawra.alwehda.gov.sy/_View_news2.asp?FileName=94459258720090318012209
|
||
-# </a>
|
||
# (Arabic, gov-site)
|
||
#
|
||
# We have not found any sources saying anything about when DST ends this year.
|
||
#
|
||
# Our summary
|
||
-# <a href="http://www.timeanddate.com/news/time/syria-dst-starts-march-27-2009.html">
|
||
# http://www.timeanddate.com/news/time/syria-dst-starts-march-27-2009.html
|
||
-# </a>
|
||
|
||
# From Steffen Thorsen (2009-10-27):
|
||
# The Syrian Arab News Network on 2009-09-29 reported that Syria will
|
||
# revert back to winter (standard) time on midnight between Thursday
|
||
# 2009-10-29 and Friday 2009-10-30:
|
||
-# <a href="http://www.sana.sy/ara/2/2009/09/29/247012.htm">
|
||
# http://www.sana.sy/ara/2/2009/09/29/247012.htm (Arabic)
|
||
-# </a>
|
||
|
||
# From Arthur David Olson (2009-10-28):
|
||
# We'll see if future DST switching times turn out to be end of the last
|
||
@@ -2681,23 +2733,17 @@
|
||
# The "Syrian News Station" reported on 2010-03-16 that the Council of
|
||
# Ministers has decided that Syria will start DST on midnight Thursday
|
||
# 2010-04-01: (midnight between Thursday and Friday):
|
||
-# <a href="http://sns.sy/sns/?path=news/read/11421">
|
||
# http://sns.sy/sns/?path=news/read/11421 (Arabic)
|
||
-# </a>
|
||
|
||
# From Steffen Thorsen (2012-03-26):
|
||
# Today, Syria's government announced that they will start DST early on Friday
|
||
# (00:00). This is a bit earlier than the past two years.
|
||
#
|
||
# From Syrian Arab News Agency, in Arabic:
|
||
-# <a href="http://www.sana.sy/ara/2/2012/03/26/408215.htm">
|
||
# http://www.sana.sy/ara/2/2012/03/26/408215.htm
|
||
-# </a>
|
||
#
|
||
# Our brief summary:
|
||
-# <a href="http://www.timeanddate.com/news/time/syria-dst-2012.html">
|
||
# http://www.timeanddate.com/news/time/syria-dst-2012.html
|
||
-# </a>
|
||
|
||
# From Arthur David Olson (2012-03-27):
|
||
# Assume last Friday in March going forward XXX.
|
||
@@ -2710,7 +2756,7 @@
|
||
Rule Syria 2009 max - Oct lastFri 0:00 0 -
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq
|
||
+Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq
|
||
2:00 Syria EE%sT
|
||
|
||
# Tajikistan
|
||
@@ -2718,24 +2764,26 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2
|
||
5:00 - DUST 1930 Jun 21 # Dushanbe Time
|
||
- 6:00 RussiaAsia DUS%sT 1991 Mar 31 2:00s
|
||
- 5:00 1:00 DUSST 1991 Sep 9 2:00s
|
||
- 5:00 - TJT # Tajikistan Time
|
||
+ 6:00 RussiaAsia DUS%sT 1991 Mar 31 2:00s
|
||
+ 5:00 1:00 DUSST 1991 Sep 9 2:00s
|
||
+ 5:00 - TJT # Tajikistan Time
|
||
|
||
# Thailand
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Asia/Bangkok 6:42:04 - LMT 1880
|
||
6:42:04 - BMT 1920 Apr # Bangkok Mean Time
|
||
7:00 - ICT
|
||
+Link Asia/Bangkok Asia/Phnom_Penh # Cambodia
|
||
+Link Asia/Bangkok Asia/Vientiane # Laos
|
||
|
||
# Turkmenistan
|
||
# From Shanks & Pottenger.
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Asia/Ashgabat 3:53:32 - LMT 1924 May 2 # or Ashkhabad
|
||
4:00 - ASHT 1930 Jun 21 # Ashkhabad Time
|
||
- 5:00 RussiaAsia ASH%sT 1991 Mar 31 2:00
|
||
+ 5:00 RussiaAsia ASH%sT 1991 Mar 31 2:00
|
||
4:00 RussiaAsia ASH%sT 1991 Oct 27 # independence
|
||
- 4:00 RussiaAsia TM%sT 1992 Jan 19 2:00
|
||
+ 4:00 RussiaAsia TM%sT 1992 Jan 19 2:00
|
||
5:00 - TMT
|
||
|
||
# United Arab Emirates
|
||
@@ -2744,8 +2792,9 @@
|
||
4:00 - GST
|
||
|
||
# Uzbekistan
|
||
+# Byalokoz 1919 says Uzbekistan was 4:27:53.
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Asia/Samarkand 4:27:12 - LMT 1924 May 2
|
||
+Zone Asia/Samarkand 4:27:53 - LMT 1924 May 2
|
||
4:00 - SAMT 1930 Jun 21 # Samarkand Time
|
||
5:00 - SAMT 1981 Apr 1
|
||
5:00 1:00 SAMST 1981 Oct 1
|
||
@@ -2753,31 +2802,75 @@
|
||
5:00 RussiaAsia SAM%sT 1991 Sep 1 # independence
|
||
5:00 RussiaAsia UZ%sT 1992
|
||
5:00 - UZT
|
||
-Zone Asia/Tashkent 4:37:12 - LMT 1924 May 2
|
||
+# Milne says Tashkent was 4:37:10.8; round to nearest.
|
||
+Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
|
||
5:00 - TAST 1930 Jun 21 # Tashkent Time
|
||
- 6:00 RussiaAsia TAS%sT 1991 Mar 31 2:00
|
||
+ 6:00 RussiaAsia TAS%sT 1991 Mar 31 2:00
|
||
5:00 RussiaAsia TAS%sT 1991 Sep 1 # independence
|
||
5:00 RussiaAsia UZ%sT 1992
|
||
5:00 - UZT
|
||
|
||
# Vietnam
|
||
|
||
-# From Paul Eggert (2013-02-21):
|
||
+# From Paul Eggert (2014-10-04):
|
||
# Milne gives 7:16:56 for the meridian of Saigon in 1899, as being
|
||
# used in Lower Laos, Cambodia, and Annam. But this is quite a ways
|
||
# from Saigon's location. For now, ignore this and stick with Shanks
|
||
-# and Pottenger.
|
||
+# and Pottenger for LMT before 1906.
|
||
|
||
# From Arthur David Olson (2008-03-18):
|
||
-# The English-language name of Vietnam's most populous city is "Ho Chi Min City";
|
||
-# we use Ho_Chi_Minh below to avoid a name of more than 14 characters.
|
||
+# The English-language name of Vietnam's most populous city is "Ho Chi Minh
|
||
+# City"; use Ho_Chi_Minh below to avoid a name of more than 14 characters.
|
||
|
||
-# From Shanks & Pottenger:
|
||
+# From Paul Eggert (2014-10-21) after a heads-up from Trần Ngọc Quân:
|
||
+# Trần Tiến Bình's authoritative book "Lịch Việt Nam: thế kỷ XX-XXI (1901-2100)"
|
||
+# (Nhà xuất bản Văn Hoá - Thông Tin, Hanoi, 2005), pp 49-50,
|
||
+# is quoted verbatim in:
|
||
+# http://www.thoigian.com.vn/?mPage=P80D01
|
||
+# is translated by Brian Inglis in:
|
||
+# http://mm.icann.org/pipermail/tz/2014-October/021654.html
|
||
+# and is the basis for the information below.
|
||
+#
|
||
+# The 1906 transition was effective July 1 and standardized Indochina to
|
||
+# Phù Liễn Observatory, legally 104 deg. 17'17" east of Paris.
|
||
+# It's unclear whether this meant legal Paris Mean Time (00:09:21) or
|
||
+# the Paris Meridian (2 deg. 20'14.03" E); the former yields 07:06:30.1333...
|
||
+# and the latter 07:06:29.333... so either way it rounds to 07:06:30,
|
||
+# which is used below even though the modern-day Phù Liễn Observatory
|
||
+# is closer to 07:06:31. Abbreviate Phù Liễn Mean Time as PLMT.
|
||
+#
|
||
+# The following transitions occurred in Indochina in general (before 1954)
|
||
+# and in South Vietnam in particular (after 1954):
|
||
+# To 07:00 on 1911-05-01.
|
||
+# To 08:00 on 1942-12-31 at 23:00.
|
||
+# To 09:00 in 1945-03-14 at 23:00.
|
||
+# To 07:00 on 1945-09-02 in Vietnam.
|
||
+# To 08:00 on 1947-04-01 in French-controlled Indochina.
|
||
+# To 07:00 on 1955-07-01 in South Vietnam.
|
||
+# To 08:00 on 1959-12-31 at 23:00 in South Vietnam.
|
||
+# To 07:00 on 1975-06-13 in South Vietnam.
|
||
+#
|
||
+# Trần cites the following sources; it's unclear which supplied the info above.
|
||
+#
|
||
+# Hoàng Xuân Hãn: "Lịch và lịch Việt Nam". Tập san Khoa học Xã hội,
|
||
+# No. 9, Paris, February 1982.
|
||
+#
|
||
+# Lê Thành Lân: "Lịch và niên biểu lịch sử hai mươi thế kỷ (0001-2010)",
|
||
+# NXB Thống kê, Hanoi, 2000.
|
||
+#
|
||
+# Lê Thành Lân: "Lịch hai thế kỷ (1802-2010) và các lịch vĩnh cửu",
|
||
+# NXB Thuận Hoá, Huế, 1995.
|
||
+
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Asia/Ho_Chi_Minh 7:06:40 - LMT 1906 Jun 9
|
||
- 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT?
|
||
- 7:00 - ICT 1912 May
|
||
- 8:00 - ICT 1931 May
|
||
+Zone Asia/Ho_Chi_Minh 7:06:40 - LMT 1906 Jul 1
|
||
+ 7:06:30 - PLMT 1911 May 1
|
||
+ 7:00 - ICT 1942 Dec 31 23:00
|
||
+ 8:00 - IDT 1945 Mar 14 23:00
|
||
+ 9:00 - JST 1945 Sep 2
|
||
+ 7:00 - ICT 1947 Apr 1
|
||
+ 8:00 - IDT 1955 Jul 1
|
||
+ 7:00 - ICT 1959 Dec 31 23:00
|
||
+ 8:00 - IDT 1975 Jun 13
|
||
7:00 - ICT
|
||
|
||
# Yemen
|
||
--- ./jdk/make/sun/javazic/tzdata/australasia Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/sun/javazic/tzdata/australasia Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -21,7 +21,6 @@
|
||
# or visit www.oracle.com if you need additional information or have any
|
||
# questions.
|
||
#
|
||
-# <pre>
|
||
# This file is in the public domain, so clarified as of
|
||
# 2009-05-17 by Arthur David Olson.
|
||
|
||
@@ -36,13 +35,13 @@
|
||
# Please see the notes below for the controversy about "EST" versus "AEST" etc.
|
||
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
-Rule Aus 1917 only - Jan 1 0:01 1:00 -
|
||
-Rule Aus 1917 only - Mar 25 2:00 0 -
|
||
-Rule Aus 1942 only - Jan 1 2:00 1:00 -
|
||
-Rule Aus 1942 only - Mar 29 2:00 0 -
|
||
-Rule Aus 1942 only - Sep 27 2:00 1:00 -
|
||
-Rule Aus 1943 1944 - Mar lastSun 2:00 0 -
|
||
-Rule Aus 1943 only - Oct 3 2:00 1:00 -
|
||
+Rule Aus 1917 only - Jan 1 0:01 1:00 D
|
||
+Rule Aus 1917 only - Mar 25 2:00 0 S
|
||
+Rule Aus 1942 only - Jan 1 2:00 1:00 D
|
||
+Rule Aus 1942 only - Mar 29 2:00 0 S
|
||
+Rule Aus 1942 only - Sep 27 2:00 1:00 D
|
||
+Rule Aus 1943 1944 - Mar lastSun 2:00 0 S
|
||
+Rule Aus 1943 only - Oct 3 2:00 1:00 D
|
||
# Go with Whitman and the Australian National Standards Commission, which
|
||
# says W Australia didn't use DST in 1943/1944. Ignore Whitman's claim that
|
||
# 1944/1945 was just like 1943/1944.
|
||
@@ -50,26 +49,26 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
# Northern Territory
|
||
Zone Australia/Darwin 8:43:20 - LMT 1895 Feb
|
||
- 9:00 - CST 1899 May
|
||
- 9:30 Aus CST
|
||
+ 9:00 - ACST 1899 May
|
||
+ 9:30 Aus AC%sT
|
||
# Western Australia
|
||
#
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
-Rule AW 1974 only - Oct lastSun 2:00s 1:00 -
|
||
-Rule AW 1975 only - Mar Sun>=1 2:00s 0 -
|
||
-Rule AW 1983 only - Oct lastSun 2:00s 1:00 -
|
||
-Rule AW 1984 only - Mar Sun>=1 2:00s 0 -
|
||
-Rule AW 1991 only - Nov 17 2:00s 1:00 -
|
||
-Rule AW 1992 only - Mar Sun>=1 2:00s 0 -
|
||
-Rule AW 2006 only - Dec 3 2:00s 1:00 -
|
||
-Rule AW 2007 2009 - Mar lastSun 2:00s 0 -
|
||
-Rule AW 2007 2008 - Oct lastSun 2:00s 1:00 -
|
||
+Rule AW 1974 only - Oct lastSun 2:00s 1:00 D
|
||
+Rule AW 1975 only - Mar Sun>=1 2:00s 0 S
|
||
+Rule AW 1983 only - Oct lastSun 2:00s 1:00 D
|
||
+Rule AW 1984 only - Mar Sun>=1 2:00s 0 S
|
||
+Rule AW 1991 only - Nov 17 2:00s 1:00 D
|
||
+Rule AW 1992 only - Mar Sun>=1 2:00s 0 S
|
||
+Rule AW 2006 only - Dec 3 2:00s 1:00 D
|
||
+Rule AW 2007 2009 - Mar lastSun 2:00s 0 S
|
||
+Rule AW 2007 2008 - Oct lastSun 2:00s 1:00 D
|
||
Zone Australia/Perth 7:43:24 - LMT 1895 Dec
|
||
- 8:00 Aus WST 1943 Jul
|
||
- 8:00 AW WST
|
||
+ 8:00 Aus AW%sT 1943 Jul
|
||
+ 8:00 AW AW%sT
|
||
Zone Australia/Eucla 8:35:28 - LMT 1895 Dec
|
||
- 8:45 Aus CWST 1943 Jul
|
||
- 8:45 AW CWST
|
||
+ 8:45 Aus ACW%sT 1943 Jul
|
||
+ 8:45 AW ACW%sT
|
||
|
||
# Queensland
|
||
#
|
||
@@ -85,150 +84,150 @@
|
||
# so use Lindeman.
|
||
#
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
-Rule AQ 1971 only - Oct lastSun 2:00s 1:00 -
|
||
-Rule AQ 1972 only - Feb lastSun 2:00s 0 -
|
||
-Rule AQ 1989 1991 - Oct lastSun 2:00s 1:00 -
|
||
-Rule AQ 1990 1992 - Mar Sun>=1 2:00s 0 -
|
||
-Rule Holiday 1992 1993 - Oct lastSun 2:00s 1:00 -
|
||
-Rule Holiday 1993 1994 - Mar Sun>=1 2:00s 0 -
|
||
+Rule AQ 1971 only - Oct lastSun 2:00s 1:00 D
|
||
+Rule AQ 1972 only - Feb lastSun 2:00s 0 S
|
||
+Rule AQ 1989 1991 - Oct lastSun 2:00s 1:00 D
|
||
+Rule AQ 1990 1992 - Mar Sun>=1 2:00s 0 S
|
||
+Rule Holiday 1992 1993 - Oct lastSun 2:00s 1:00 D
|
||
+Rule Holiday 1993 1994 - Mar Sun>=1 2:00s 0 S
|
||
Zone Australia/Brisbane 10:12:08 - LMT 1895
|
||
- 10:00 Aus EST 1971
|
||
- 10:00 AQ EST
|
||
+ 10:00 Aus AE%sT 1971
|
||
+ 10:00 AQ AE%sT
|
||
Zone Australia/Lindeman 9:55:56 - LMT 1895
|
||
- 10:00 Aus EST 1971
|
||
- 10:00 AQ EST 1992 Jul
|
||
- 10:00 Holiday EST
|
||
+ 10:00 Aus AE%sT 1971
|
||
+ 10:00 AQ AE%sT 1992 Jul
|
||
+ 10:00 Holiday AE%sT
|
||
|
||
# South Australia
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
-Rule AS 1971 1985 - Oct lastSun 2:00s 1:00 -
|
||
-Rule AS 1986 only - Oct 19 2:00s 1:00 -
|
||
-Rule AS 1987 2007 - Oct lastSun 2:00s 1:00 -
|
||
-Rule AS 1972 only - Feb 27 2:00s 0 -
|
||
-Rule AS 1973 1985 - Mar Sun>=1 2:00s 0 -
|
||
-Rule AS 1986 1990 - Mar Sun>=15 2:00s 0 -
|
||
-Rule AS 1991 only - Mar 3 2:00s 0 -
|
||
-Rule AS 1992 only - Mar 22 2:00s 0 -
|
||
-Rule AS 1993 only - Mar 7 2:00s 0 -
|
||
-Rule AS 1994 only - Mar 20 2:00s 0 -
|
||
-Rule AS 1995 2005 - Mar lastSun 2:00s 0 -
|
||
-Rule AS 2006 only - Apr 2 2:00s 0 -
|
||
-Rule AS 2007 only - Mar lastSun 2:00s 0 -
|
||
-Rule AS 2008 max - Apr Sun>=1 2:00s 0 -
|
||
-Rule AS 2008 max - Oct Sun>=1 2:00s 1:00 -
|
||
+Rule AS 1971 1985 - Oct lastSun 2:00s 1:00 D
|
||
+Rule AS 1986 only - Oct 19 2:00s 1:00 D
|
||
+Rule AS 1987 2007 - Oct lastSun 2:00s 1:00 D
|
||
+Rule AS 1972 only - Feb 27 2:00s 0 S
|
||
+Rule AS 1973 1985 - Mar Sun>=1 2:00s 0 S
|
||
+Rule AS 1986 1990 - Mar Sun>=15 2:00s 0 S
|
||
+Rule AS 1991 only - Mar 3 2:00s 0 S
|
||
+Rule AS 1992 only - Mar 22 2:00s 0 S
|
||
+Rule AS 1993 only - Mar 7 2:00s 0 S
|
||
+Rule AS 1994 only - Mar 20 2:00s 0 S
|
||
+Rule AS 1995 2005 - Mar lastSun 2:00s 0 S
|
||
+Rule AS 2006 only - Apr 2 2:00s 0 S
|
||
+Rule AS 2007 only - Mar lastSun 2:00s 0 S
|
||
+Rule AS 2008 max - Apr Sun>=1 2:00s 0 S
|
||
+Rule AS 2008 max - Oct Sun>=1 2:00s 1:00 D
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Australia/Adelaide 9:14:20 - LMT 1895 Feb
|
||
- 9:00 - CST 1899 May
|
||
- 9:30 Aus CST 1971
|
||
- 9:30 AS CST
|
||
+ 9:00 - ACST 1899 May
|
||
+ 9:30 Aus AC%sT 1971
|
||
+ 9:30 AS AC%sT
|
||
|
||
# Tasmania
|
||
#
|
||
# From Paul Eggert (2005-08-16):
|
||
-# <http://www.bom.gov.au/climate/averages/tables/dst_times.shtml>
|
||
+# http://www.bom.gov.au/climate/averages/tables/dst_times.shtml
|
||
# says King Island didn't observe DST from WWII until late 1971.
|
||
#
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
-Rule AT 1967 only - Oct Sun>=1 2:00s 1:00 -
|
||
-Rule AT 1968 only - Mar lastSun 2:00s 0 -
|
||
-Rule AT 1968 1985 - Oct lastSun 2:00s 1:00 -
|
||
-Rule AT 1969 1971 - Mar Sun>=8 2:00s 0 -
|
||
-Rule AT 1972 only - Feb lastSun 2:00s 0 -
|
||
-Rule AT 1973 1981 - Mar Sun>=1 2:00s 0 -
|
||
-Rule AT 1982 1983 - Mar lastSun 2:00s 0 -
|
||
-Rule AT 1984 1986 - Mar Sun>=1 2:00s 0 -
|
||
-Rule AT 1986 only - Oct Sun>=15 2:00s 1:00 -
|
||
-Rule AT 1987 1990 - Mar Sun>=15 2:00s 0 -
|
||
-Rule AT 1987 only - Oct Sun>=22 2:00s 1:00 -
|
||
-Rule AT 1988 1990 - Oct lastSun 2:00s 1:00 -
|
||
-Rule AT 1991 1999 - Oct Sun>=1 2:00s 1:00 -
|
||
-Rule AT 1991 2005 - Mar lastSun 2:00s 0 -
|
||
-Rule AT 2000 only - Aug lastSun 2:00s 1:00 -
|
||
-Rule AT 2001 max - Oct Sun>=1 2:00s 1:00 -
|
||
-Rule AT 2006 only - Apr Sun>=1 2:00s 0 -
|
||
-Rule AT 2007 only - Mar lastSun 2:00s 0 -
|
||
-Rule AT 2008 max - Apr Sun>=1 2:00s 0 -
|
||
+Rule AT 1967 only - Oct Sun>=1 2:00s 1:00 D
|
||
+Rule AT 1968 only - Mar lastSun 2:00s 0 S
|
||
+Rule AT 1968 1985 - Oct lastSun 2:00s 1:00 D
|
||
+Rule AT 1969 1971 - Mar Sun>=8 2:00s 0 S
|
||
+Rule AT 1972 only - Feb lastSun 2:00s 0 S
|
||
+Rule AT 1973 1981 - Mar Sun>=1 2:00s 0 S
|
||
+Rule AT 1982 1983 - Mar lastSun 2:00s 0 S
|
||
+Rule AT 1984 1986 - Mar Sun>=1 2:00s 0 S
|
||
+Rule AT 1986 only - Oct Sun>=15 2:00s 1:00 D
|
||
+Rule AT 1987 1990 - Mar Sun>=15 2:00s 0 S
|
||
+Rule AT 1987 only - Oct Sun>=22 2:00s 1:00 D
|
||
+Rule AT 1988 1990 - Oct lastSun 2:00s 1:00 D
|
||
+Rule AT 1991 1999 - Oct Sun>=1 2:00s 1:00 D
|
||
+Rule AT 1991 2005 - Mar lastSun 2:00s 0 S
|
||
+Rule AT 2000 only - Aug lastSun 2:00s 1:00 D
|
||
+Rule AT 2001 max - Oct Sun>=1 2:00s 1:00 D
|
||
+Rule AT 2006 only - Apr Sun>=1 2:00s 0 S
|
||
+Rule AT 2007 only - Mar lastSun 2:00s 0 S
|
||
+Rule AT 2008 max - Apr Sun>=1 2:00s 0 S
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Australia/Hobart 9:49:16 - LMT 1895 Sep
|
||
- 10:00 - EST 1916 Oct 1 2:00
|
||
- 10:00 1:00 EST 1917 Feb
|
||
- 10:00 Aus EST 1967
|
||
- 10:00 AT EST
|
||
+ 10:00 - AEST 1916 Oct 1 2:00
|
||
+ 10:00 1:00 AEDT 1917 Feb
|
||
+ 10:00 Aus AE%sT 1967
|
||
+ 10:00 AT AE%sT
|
||
Zone Australia/Currie 9:35:28 - LMT 1895 Sep
|
||
- 10:00 - EST 1916 Oct 1 2:00
|
||
- 10:00 1:00 EST 1917 Feb
|
||
- 10:00 Aus EST 1971 Jul
|
||
- 10:00 AT EST
|
||
+ 10:00 - AEST 1916 Oct 1 2:00
|
||
+ 10:00 1:00 AEDT 1917 Feb
|
||
+ 10:00 Aus AE%sT 1971 Jul
|
||
+ 10:00 AT AE%sT
|
||
|
||
# Victoria
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
-Rule AV 1971 1985 - Oct lastSun 2:00s 1:00 -
|
||
-Rule AV 1972 only - Feb lastSun 2:00s 0 -
|
||
-Rule AV 1973 1985 - Mar Sun>=1 2:00s 0 -
|
||
-Rule AV 1986 1990 - Mar Sun>=15 2:00s 0 -
|
||
-Rule AV 1986 1987 - Oct Sun>=15 2:00s 1:00 -
|
||
-Rule AV 1988 1999 - Oct lastSun 2:00s 1:00 -
|
||
-Rule AV 1991 1994 - Mar Sun>=1 2:00s 0 -
|
||
-Rule AV 1995 2005 - Mar lastSun 2:00s 0 -
|
||
-Rule AV 2000 only - Aug lastSun 2:00s 1:00 -
|
||
-Rule AV 2001 2007 - Oct lastSun 2:00s 1:00 -
|
||
-Rule AV 2006 only - Apr Sun>=1 2:00s 0 -
|
||
-Rule AV 2007 only - Mar lastSun 2:00s 0 -
|
||
-Rule AV 2008 max - Apr Sun>=1 2:00s 0 -
|
||
-Rule AV 2008 max - Oct Sun>=1 2:00s 1:00 -
|
||
+Rule AV 1971 1985 - Oct lastSun 2:00s 1:00 D
|
||
+Rule AV 1972 only - Feb lastSun 2:00s 0 S
|
||
+Rule AV 1973 1985 - Mar Sun>=1 2:00s 0 S
|
||
+Rule AV 1986 1990 - Mar Sun>=15 2:00s 0 S
|
||
+Rule AV 1986 1987 - Oct Sun>=15 2:00s 1:00 D
|
||
+Rule AV 1988 1999 - Oct lastSun 2:00s 1:00 D
|
||
+Rule AV 1991 1994 - Mar Sun>=1 2:00s 0 S
|
||
+Rule AV 1995 2005 - Mar lastSun 2:00s 0 S
|
||
+Rule AV 2000 only - Aug lastSun 2:00s 1:00 D
|
||
+Rule AV 2001 2007 - Oct lastSun 2:00s 1:00 D
|
||
+Rule AV 2006 only - Apr Sun>=1 2:00s 0 S
|
||
+Rule AV 2007 only - Mar lastSun 2:00s 0 S
|
||
+Rule AV 2008 max - Apr Sun>=1 2:00s 0 S
|
||
+Rule AV 2008 max - Oct Sun>=1 2:00s 1:00 D
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Australia/Melbourne 9:39:52 - LMT 1895 Feb
|
||
- 10:00 Aus EST 1971
|
||
- 10:00 AV EST
|
||
+ 10:00 Aus AE%sT 1971
|
||
+ 10:00 AV AE%sT
|
||
|
||
# New South Wales
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
-Rule AN 1971 1985 - Oct lastSun 2:00s 1:00 -
|
||
-Rule AN 1972 only - Feb 27 2:00s 0 -
|
||
-Rule AN 1973 1981 - Mar Sun>=1 2:00s 0 -
|
||
-Rule AN 1982 only - Apr Sun>=1 2:00s 0 -
|
||
-Rule AN 1983 1985 - Mar Sun>=1 2:00s 0 -
|
||
-Rule AN 1986 1989 - Mar Sun>=15 2:00s 0 -
|
||
-Rule AN 1986 only - Oct 19 2:00s 1:00 -
|
||
-Rule AN 1987 1999 - Oct lastSun 2:00s 1:00 -
|
||
-Rule AN 1990 1995 - Mar Sun>=1 2:00s 0 -
|
||
-Rule AN 1996 2005 - Mar lastSun 2:00s 0 -
|
||
-Rule AN 2000 only - Aug lastSun 2:00s 1:00 -
|
||
-Rule AN 2001 2007 - Oct lastSun 2:00s 1:00 -
|
||
-Rule AN 2006 only - Apr Sun>=1 2:00s 0 -
|
||
-Rule AN 2007 only - Mar lastSun 2:00s 0 -
|
||
-Rule AN 2008 max - Apr Sun>=1 2:00s 0 -
|
||
-Rule AN 2008 max - Oct Sun>=1 2:00s 1:00 -
|
||
+Rule AN 1971 1985 - Oct lastSun 2:00s 1:00 D
|
||
+Rule AN 1972 only - Feb 27 2:00s 0 S
|
||
+Rule AN 1973 1981 - Mar Sun>=1 2:00s 0 S
|
||
+Rule AN 1982 only - Apr Sun>=1 2:00s 0 S
|
||
+Rule AN 1983 1985 - Mar Sun>=1 2:00s 0 S
|
||
+Rule AN 1986 1989 - Mar Sun>=15 2:00s 0 S
|
||
+Rule AN 1986 only - Oct 19 2:00s 1:00 D
|
||
+Rule AN 1987 1999 - Oct lastSun 2:00s 1:00 D
|
||
+Rule AN 1990 1995 - Mar Sun>=1 2:00s 0 S
|
||
+Rule AN 1996 2005 - Mar lastSun 2:00s 0 S
|
||
+Rule AN 2000 only - Aug lastSun 2:00s 1:00 D
|
||
+Rule AN 2001 2007 - Oct lastSun 2:00s 1:00 D
|
||
+Rule AN 2006 only - Apr Sun>=1 2:00s 0 S
|
||
+Rule AN 2007 only - Mar lastSun 2:00s 0 S
|
||
+Rule AN 2008 max - Apr Sun>=1 2:00s 0 S
|
||
+Rule AN 2008 max - Oct Sun>=1 2:00s 1:00 D
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Australia/Sydney 10:04:52 - LMT 1895 Feb
|
||
- 10:00 Aus EST 1971
|
||
- 10:00 AN EST
|
||
+ 10:00 Aus AE%sT 1971
|
||
+ 10:00 AN AE%sT
|
||
Zone Australia/Broken_Hill 9:25:48 - LMT 1895 Feb
|
||
- 10:00 - EST 1896 Aug 23
|
||
- 9:00 - CST 1899 May
|
||
- 9:30 Aus CST 1971
|
||
- 9:30 AN CST 2000
|
||
- 9:30 AS CST
|
||
+ 10:00 - AEST 1896 Aug 23
|
||
+ 9:00 - ACST 1899 May
|
||
+ 9:30 Aus AC%sT 1971
|
||
+ 9:30 AN AC%sT 2000
|
||
+ 9:30 AS AC%sT
|
||
|
||
# Lord Howe Island
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
-Rule LH 1981 1984 - Oct lastSun 2:00 1:00 -
|
||
-Rule LH 1982 1985 - Mar Sun>=1 2:00 0 -
|
||
-Rule LH 1985 only - Oct lastSun 2:00 0:30 -
|
||
-Rule LH 1986 1989 - Mar Sun>=15 2:00 0 -
|
||
-Rule LH 1986 only - Oct 19 2:00 0:30 -
|
||
-Rule LH 1987 1999 - Oct lastSun 2:00 0:30 -
|
||
-Rule LH 1990 1995 - Mar Sun>=1 2:00 0 -
|
||
-Rule LH 1996 2005 - Mar lastSun 2:00 0 -
|
||
-Rule LH 2000 only - Aug lastSun 2:00 0:30 -
|
||
-Rule LH 2001 2007 - Oct lastSun 2:00 0:30 -
|
||
-Rule LH 2006 only - Apr Sun>=1 2:00 0 -
|
||
-Rule LH 2007 only - Mar lastSun 2:00 0 -
|
||
-Rule LH 2008 max - Apr Sun>=1 2:00 0 -
|
||
-Rule LH 2008 max - Oct Sun>=1 2:00 0:30 -
|
||
+Rule LH 1981 1984 - Oct lastSun 2:00 1:00 D
|
||
+Rule LH 1982 1985 - Mar Sun>=1 2:00 0 S
|
||
+Rule LH 1985 only - Oct lastSun 2:00 0:30 D
|
||
+Rule LH 1986 1989 - Mar Sun>=15 2:00 0 S
|
||
+Rule LH 1986 only - Oct 19 2:00 0:30 D
|
||
+Rule LH 1987 1999 - Oct lastSun 2:00 0:30 D
|
||
+Rule LH 1990 1995 - Mar Sun>=1 2:00 0 S
|
||
+Rule LH 1996 2005 - Mar lastSun 2:00 0 S
|
||
+Rule LH 2000 only - Aug lastSun 2:00 0:30 D
|
||
+Rule LH 2001 2007 - Oct lastSun 2:00 0:30 D
|
||
+Rule LH 2006 only - Apr Sun>=1 2:00 0 S
|
||
+Rule LH 2007 only - Mar lastSun 2:00 0 S
|
||
+Rule LH 2008 max - Apr Sun>=1 2:00 0 S
|
||
+Rule LH 2008 max - Oct Sun>=1 2:00 0:30 D
|
||
Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb
|
||
- 10:00 - EST 1981 Mar
|
||
- 10:30 LH LHST
|
||
+ 10:00 - AEST 1981 Mar
|
||
+ 10:30 LH LH%sT
|
||
|
||
# Australian miscellany
|
||
#
|
||
@@ -244,8 +243,8 @@
|
||
# Permanent occupation (scientific station) 1911-1915 and since 25 March 1948;
|
||
# sealing and penguin oil station operated Nov 1899 to Apr 1919. See the
|
||
# Tasmania Parks & Wildlife Service history of sealing at Macquarie Island
|
||
-# <http://www.parks.tas.gov.au/index.aspx?base=1828>
|
||
-# <http://www.parks.tas.gov.au/index.aspx?base=1831>.
|
||
+# http://www.parks.tas.gov.au/index.aspx?base=1828
|
||
+# http://www.parks.tas.gov.au/index.aspx?base=1831
|
||
# Guess that it was like Australia/Hobart while inhabited before 2010.
|
||
#
|
||
# From Steffen Thorsen (2010-03-10):
|
||
@@ -256,16 +255,16 @@
|
||
#
|
||
# From Arthur David Olson (2013-05-23):
|
||
# The 1919 transition is overspecified below so pre-2013 zics
|
||
-# will produce a binary file with an EST-type as the first 32-bit type;
|
||
+# will produce a binary file with an [A]EST-type as the first 32-bit type;
|
||
# this is required for correct handling of times before 1916 by
|
||
# pre-2013 versions of localtime.
|
||
Zone Antarctica/Macquarie 0 - zzz 1899 Nov
|
||
- 10:00 - EST 1916 Oct 1 2:00
|
||
- 10:00 1:00 EST 1917 Feb
|
||
- 10:00 Aus EST 1919 Apr 1 0:00s
|
||
+ 10:00 - AEST 1916 Oct 1 2:00
|
||
+ 10:00 1:00 AEDT 1917 Feb
|
||
+ 10:00 Aus AE%sT 1919 Apr 1 0:00s
|
||
0 - zzz 1948 Mar 25
|
||
- 10:00 Aus EST 1967
|
||
- 10:00 AT EST 2010 Apr 4 3:00
|
||
+ 10:00 Aus AE%sT 1967
|
||
+ 10:00 AT AE%sT 2010 Apr 4 3:00
|
||
11:00 - MIST # Macquarie I Standard Time
|
||
|
||
# Christmas
|
||
@@ -273,24 +272,14 @@
|
||
Zone Indian/Christmas 7:02:52 - LMT 1895 Feb
|
||
7:00 - CXT # Christmas Island Time
|
||
|
||
-# Cook Is
|
||
-# From Shanks & Pottenger:
|
||
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
-Rule Cook 1978 only - Nov 12 0:00 0:30 HS
|
||
-Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 -
|
||
-Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 HS
|
||
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua
|
||
- -10:30 - CKT 1978 Nov 12 # Cook Is Time
|
||
- -10:00 Cook CK%sT
|
||
-
|
||
-# Cocos
|
||
+# Cocos (Keeling) Is
|
||
# These islands were ruled by the Ross family from about 1830 to 1978.
|
||
# We don't know when standard time was introduced; for now, we guess 1900.
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Indian/Cocos 6:27:40 - LMT 1900
|
||
6:30 - CCT # Cocos Islands Time
|
||
|
||
+
|
||
# Fiji
|
||
|
||
# Milne gives 11:55:44 for Suva.
|
||
@@ -300,20 +289,13 @@
|
||
# from November 29th 2009 to April 25th 2010.
|
||
#
|
||
# "Daylight savings to commence this month"
|
||
-# <a href="http://www.radiofiji.com.fj/fullstory.php?id=23719">
|
||
# http://www.radiofiji.com.fj/fullstory.php?id=23719
|
||
-# </a>
|
||
-# or
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_fiji01.html">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_fiji01.html
|
||
-# </a>
|
||
|
||
# From Steffen Thorsen (2009-11-10):
|
||
# The Fiji Government has posted some more details about the approved
|
||
# amendments:
|
||
-# <a href="http://www.fiji.gov.fj/publish/page_16198.shtml">
|
||
# http://www.fiji.gov.fj/publish/page_16198.shtml
|
||
-# </a>
|
||
|
||
# From Steffen Thorsen (2010-03-03):
|
||
# The Cabinet in Fiji has decided to end DST about a month early, on
|
||
@@ -322,35 +304,24 @@
|
||
# 2011 (last Sunday a good guess?).
|
||
#
|
||
# Official source:
|
||
-# <a href="http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=1096:3310-cabinet-approves-change-in-daylight-savings-dates&catid=49:cabinet-releases&Itemid=166">
|
||
# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=1096:3310-cabinet-approves-change-in-daylight-savings-dates&catid=49:cabinet-releases&Itemid=166
|
||
-# </a>
|
||
#
|
||
# A bit more background info here:
|
||
-# <a href="http://www.timeanddate.com/news/time/fiji-dst-ends-march-2010.html">
|
||
# http://www.timeanddate.com/news/time/fiji-dst-ends-march-2010.html
|
||
-# </a>
|
||
|
||
# From Alexander Krivenyshev (2010-10-24):
|
||
# According to Radio Fiji and Fiji Times online, Fiji will end DST 3
|
||
# weeks earlier than expected - on March 6, 2011, not March 27, 2011...
|
||
# Here is confirmation from Government of the Republic of the Fiji Islands,
|
||
# Ministry of Information (fiji.gov.fj) web site:
|
||
-# <a href="http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=2608:daylight-savings&catid=71:press-releases&Itemid=155">
|
||
# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=2608:daylight-savings&catid=71:press-releases&Itemid=155
|
||
-# </a>
|
||
-# or
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_fiji04.html">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_fiji04.html
|
||
-# </a>
|
||
|
||
# From Steffen Thorsen (2011-10-03):
|
||
# Now the dates have been confirmed, and at least our start date
|
||
# assumption was correct (end date was one week wrong).
|
||
#
|
||
-# <a href="http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155">
|
||
-# www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155
|
||
-# </a>
|
||
+# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155
|
||
# which says
|
||
# Members of the public are reminded to change their time to one hour in
|
||
# advance at 2am to 3am on October 23, 2011 and one hour back at 3am to
|
||
@@ -360,9 +331,7 @@
|
||
# Another change to the Fiji DST end date. In the TZ database the end date for
|
||
# Fiji DST 2012, is currently Feb 26. This has been changed to Jan 22.
|
||
#
|
||
-# <a href="http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=5017:amendments-to-daylight-savings&catid=71:press-releases&Itemid=155">
|
||
# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=5017:amendments-to-daylight-savings&catid=71:press-releases&Itemid=155
|
||
-# </a>
|
||
# states:
|
||
#
|
||
# The end of daylight saving scheduled initially for the 26th of February 2012
|
||
@@ -385,31 +354,38 @@
|
||
# Fiji will end DST on 2014-01-19 02:00:
|
||
# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVINGS-TO-END-THIS-MONTH-%281%29.aspx
|
||
|
||
-# From Paul Eggert (2014-01-10):
|
||
-# For now, guess that Fiji springs forward the Sunday before the fourth
|
||
-# Monday in October, and springs back the penultimate Sunday in January.
|
||
-# This is ad hoc, but matches recent practice.
|
||
+# From Ken Rylander (2014-10-20):
|
||
+# DST will start Nov. 2 this year.
|
||
+# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVING-STARTS-ON-SUNDAY,-NOVEMBER-2ND.aspx
|
||
+
|
||
+# From Paul Eggert (2014-10-20):
|
||
+# For now, guess DST from 02:00 the first Sunday in November to
|
||
+# 03:00 the first Sunday on or after January 18. Although ad hoc, it
|
||
+# matches this year's plan and seems more likely to match future
|
||
+# practice than guessing no DST.
|
||
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 S
|
||
Rule Fiji 1999 2000 - Feb lastSun 3:00 0 -
|
||
Rule Fiji 2009 only - Nov 29 2:00 1:00 S
|
||
Rule Fiji 2010 only - Mar lastSun 3:00 0 -
|
||
-Rule Fiji 2010 max - Oct Sun>=21 2:00 1:00 S
|
||
+Rule Fiji 2010 2013 - Oct Sun>=21 2:00 1:00 S
|
||
Rule Fiji 2011 only - Mar Sun>=1 3:00 0 -
|
||
Rule Fiji 2012 2013 - Jan Sun>=18 3:00 0 -
|
||
-Rule Fiji 2014 max - Jan Sun>=18 2:00 0 -
|
||
+Rule Fiji 2014 only - Jan Sun>=18 2:00 0 -
|
||
+Rule Fiji 2014 max - Nov Sun>=1 2:00 1:00 S
|
||
+Rule Fiji 2015 max - Jan Sun>=18 3:00 0 -
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva
|
||
+Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva
|
||
12:00 Fiji FJ%sT # Fiji Time
|
||
|
||
# French Polynesia
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Pacific/Gambier -8:59:48 - LMT 1912 Oct # Rikitea
|
||
+Zone Pacific/Gambier -8:59:48 - LMT 1912 Oct # Rikitea
|
||
-9:00 - GAMT # Gambier Time
|
||
Zone Pacific/Marquesas -9:18:00 - LMT 1912 Oct
|
||
-9:30 - MART # Marquesas Time
|
||
-Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct # Papeete
|
||
+Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct # Papeete
|
||
-10:00 - TAHT # Tahiti Time
|
||
# Clipperton (near North America) is administered from French Polynesia;
|
||
# it is uninhabited.
|
||
@@ -417,14 +393,14 @@
|
||
# Guam
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Pacific/Guam -14:21:00 - LMT 1844 Dec 31
|
||
- 9:39:00 - LMT 1901 # Agana
|
||
- 10:00 - GST 2000 Dec 23 # Guam
|
||
+ 9:39:00 - LMT 1901 # Agana
|
||
+ 10:00 - GST 2000 Dec 23 # Guam
|
||
10:00 - ChST # Chamorro Standard Time
|
||
|
||
# Kiribati
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki
|
||
- 12:00 - GILT # Gilbert Is Time
|
||
+Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki
|
||
+ 12:00 - GILT # Gilbert Is Time
|
||
Zone Pacific/Enderbury -11:24:20 - LMT 1901
|
||
-12:00 - PHOT 1979 Oct # Phoenix Is Time
|
||
-11:00 - PHOT 1995
|
||
@@ -438,7 +414,7 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Pacific/Saipan -14:17:00 - LMT 1844 Dec 31
|
||
9:43:00 - LMT 1901
|
||
- 9:00 - MPT 1969 Oct # N Mariana Is Time
|
||
+ 9:00 - MPT 1969 Oct # N Mariana Is Time
|
||
10:00 - MPT 2000 Dec 23
|
||
10:00 - ChST # Chamorro Standard Time
|
||
|
||
@@ -449,24 +425,24 @@
|
||
12:00 - MHT
|
||
Zone Pacific/Kwajalein 11:09:20 - LMT 1901
|
||
11:00 - MHT 1969 Oct
|
||
- -12:00 - KWAT 1993 Aug 20 # Kwajalein Time
|
||
+ -12:00 - KWAT 1993 Aug 20 # Kwajalein Time
|
||
12:00 - MHT
|
||
|
||
# Micronesia
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Pacific/Chuuk 10:07:08 - LMT 1901
|
||
- 10:00 - CHUT # Chuuk Time
|
||
-Zone Pacific/Pohnpei 10:32:52 - LMT 1901 # Kolonia
|
||
- 11:00 - PONT # Pohnpei Time
|
||
+ 10:00 - CHUT # Chuuk Time
|
||
+Zone Pacific/Pohnpei 10:32:52 - LMT 1901 # Kolonia
|
||
+ 11:00 - PONT # Pohnpei Time
|
||
Zone Pacific/Kosrae 10:51:56 - LMT 1901
|
||
- 11:00 - KOST 1969 Oct # Kosrae Time
|
||
+ 11:00 - KOST 1969 Oct # Kosrae Time
|
||
12:00 - KOST 1999
|
||
11:00 - KOST
|
||
|
||
# Nauru
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Pacific/Nauru 11:07:40 - LMT 1921 Jan 15 # Uaobe
|
||
- 11:30 - NRT 1942 Mar 15 # Nauru Time
|
||
+Zone Pacific/Nauru 11:07:40 - LMT 1921 Jan 15 # Uaobe
|
||
+ 11:30 - NRT 1942 Mar 15 # Nauru Time
|
||
9:00 - JST 1944 Aug 15
|
||
11:30 - NRT 1979 May
|
||
12:00 - NRT
|
||
@@ -479,7 +455,7 @@
|
||
# Shanks & Pottenger say the following was at 2:00; go with IATA.
|
||
Rule NC 1997 only - Mar 2 2:00s 0 -
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Pacific/Noumea 11:05:48 - LMT 1912 Jan 13
|
||
+Zone Pacific/Noumea 11:05:48 - LMT 1912 Jan 13 # Nouméa
|
||
11:00 NC NC%sT
|
||
|
||
|
||
@@ -496,7 +472,8 @@
|
||
Rule NZ 1934 1940 - Sep lastSun 2:00 0:30 S
|
||
Rule NZ 1946 only - Jan 1 0:00 0 S
|
||
# Since 1957 Chatham has been 45 minutes ahead of NZ, but there's no
|
||
-# convenient notation for this so we must duplicate the Rule lines.
|
||
+# convenient single notation for the date and time of this transition
|
||
+# so we must duplicate the Rule lines.
|
||
Rule NZ 1974 only - Nov Sun>=1 2:00s 1:00 D
|
||
Rule Chatham 1974 only - Nov Sun>=1 2:45s 1:00 D
|
||
Rule NZ 1975 only - Feb lastSun 2:00s 0 S
|
||
@@ -519,13 +496,14 @@
|
||
Zone Pacific/Auckland 11:39:04 - LMT 1868 Nov 2
|
||
11:30 NZ NZ%sT 1946 Jan 1
|
||
12:00 NZ NZ%sT
|
||
-Zone Pacific/Chatham 12:13:48 - LMT 1957 Jan 1
|
||
+Zone Pacific/Chatham 12:13:48 - LMT 1868 Nov 2
|
||
+ 12:15 - CHAST 1946 Jan 1
|
||
12:45 Chatham CHA%sT
|
||
|
||
Link Pacific/Auckland Antarctica/McMurdo
|
||
|
||
# Auckland Is
|
||
-# uninhabited; Maori and Moriori, colonial settlers, pastoralists, sealers,
|
||
+# uninhabited; Māori and Moriori, colonial settlers, pastoralists, sealers,
|
||
# and scientific personnel have wintered
|
||
|
||
# Campbell I
|
||
@@ -534,48 +512,82 @@
|
||
# previously whalers, sealers, pastoralists, and scientific personnel wintered
|
||
# was probably like Pacific/Auckland
|
||
|
||
+# Cook Is
|
||
+# From Shanks & Pottenger:
|
||
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
+Rule Cook 1978 only - Nov 12 0:00 0:30 HS
|
||
+Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 -
|
||
+Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 HS
|
||
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
+Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua
|
||
+ -10:30 - CKT 1978 Nov 12 # Cook Is Time
|
||
+ -10:00 Cook CK%sT
|
||
+
|
||
###############################################################################
|
||
|
||
|
||
# Niue
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Pacific/Niue -11:19:40 - LMT 1901 # Alofi
|
||
- -11:20 - NUT 1951 # Niue Time
|
||
- -11:30 - NUT 1978 Oct 1
|
||
+Zone Pacific/Niue -11:19:40 - LMT 1901 # Alofi
|
||
+ -11:20 - NUT 1951 # Niue Time
|
||
+ -11:30 - NUT 1978 Oct 1
|
||
-11:00 - NUT
|
||
|
||
# Norfolk
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Pacific/Norfolk 11:11:52 - LMT 1901 # Kingston
|
||
- 11:12 - NMT 1951 # Norfolk Mean Time
|
||
- 11:30 - NFT # Norfolk Time
|
||
+Zone Pacific/Norfolk 11:11:52 - LMT 1901 # Kingston
|
||
+ 11:12 - NMT 1951 # Norfolk Mean Time
|
||
+ 11:30 - NFT # Norfolk Time
|
||
|
||
# Palau (Belau)
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Pacific/Palau 8:57:56 - LMT 1901 # Koror
|
||
+Zone Pacific/Palau 8:57:56 - LMT 1901 # Koror
|
||
9:00 - PWT # Palau Time
|
||
|
||
# Papua New Guinea
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Pacific/Port_Moresby 9:48:40 - LMT 1880
|
||
- 9:48:32 - PMMT 1895 # Port Moresby Mean Time
|
||
- 10:00 - PGT # Papua New Guinea Time
|
||
+ 9:48:32 - PMMT 1895 # Port Moresby Mean Time
|
||
+ 10:00 - PGT # Papua New Guinea Time
|
||
+#
|
||
+# From Paul Eggert (2014-10-13):
|
||
+# Base the Bougainville entry on the Arawa-Kieta region, which appears to have
|
||
+# the most people even though it was devastated in the Bougainville Civil War.
|
||
+#
|
||
+# Although Shanks gives 1942-03-15 / 1943-11-01 for JST, these dates
|
||
+# are apparently rough guesswork from the starts of military campaigns.
|
||
+# The World War II entries below are instead based on Arawa-Kieta.
|
||
+# The Japanese occupied Kieta in July 1942,
|
||
+# according to the Pacific War Online Encyclopedia
|
||
+# http://pwencycl.kgbudge.com/B/o/Bougainville.htm
|
||
+# and seem to have controlled it until their 1945-08-21 surrender.
|
||
+#
|
||
+# The Autonomous Region of Bougainville plans to switch from UTC+10 to UTC+11
|
||
+# on 2014-12-28 at 02:00. They call UTC+11 "Bougainville Standard Time";
|
||
+# abbreviate this as BST. See:
|
||
+# http://www.bougainville24.com/bougainville-issues/bougainville-gets-own-timezone/
|
||
+#
|
||
+Zone Pacific/Bougainville 10:22:16 - LMT 1880
|
||
+ 9:48:32 - PMMT 1895
|
||
+ 10:00 - PGT 1942 Jul
|
||
+ 9:00 - JST 1945 Aug 21
|
||
+ 10:00 - PGT 2014 Dec 28 2:00
|
||
+ 11:00 - BST
|
||
|
||
# Pitcairn
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Pacific/Pitcairn -8:40:20 - LMT 1901 # Adamstown
|
||
- -8:30 - PNT 1998 Apr 27 00:00
|
||
+Zone Pacific/Pitcairn -8:40:20 - LMT 1901 # Adamstown
|
||
+ -8:30 - PNT 1998 Apr 27 0:00
|
||
-8:00 - PST # Pitcairn Standard Time
|
||
|
||
# American Samoa
|
||
Zone Pacific/Pago_Pago 12:37:12 - LMT 1879 Jul 5
|
||
-11:22:48 - LMT 1911
|
||
- -11:30 - SAMT 1950 # Samoa Time
|
||
- -11:00 - NST 1967 Apr # N=Nome
|
||
- -11:00 - BST 1983 Nov 30 # B=Bering
|
||
- -11:00 - SST # S=Samoa
|
||
+ -11:00 - NST 1967 Apr # N=Nome
|
||
+ -11:00 - BST 1983 Nov 30 # B=Bering
|
||
+ -11:00 - SST # S=Samoa
|
||
|
||
-# Samoa
|
||
+# Samoa (formerly and also known as Western Samoa)
|
||
|
||
# From Steffen Thorsen (2009-10-16):
|
||
# We have been in contact with the government of Samoa again, and received
|
||
@@ -586,141 +598,80 @@
|
||
# Sunday of April 2011."
|
||
#
|
||
# Background info:
|
||
-# <a href="http://www.timeanddate.com/news/time/samoa-dst-plan-2009.html">
|
||
# http://www.timeanddate.com/news/time/samoa-dst-plan-2009.html
|
||
-# </a>
|
||
#
|
||
# Samoa's Daylight Saving Time Act 2009 is available here, but does not
|
||
# contain any dates:
|
||
-# <a href="http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%202009%20%28English%29%20-%20Final%207-7-091.pdf">
|
||
# http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%202009%20%28English%29%20-%20Final%207-7-091.pdf
|
||
-# </a>
|
||
|
||
# From Laupue Raymond Hughes (2010-10-07):
|
||
# Please see
|
||
-# <a href="http://www.mcil.gov.ws">
|
||
# http://www.mcil.gov.ws
|
||
-# </a>,
|
||
# the Ministry of Commerce, Industry and Labour (sideframe) "Last Sunday
|
||
# September 2010 (26/09/10) - adjust clocks forward from 12:00 midnight
|
||
# to 01:00am and First Sunday April 2011 (03/04/11) - adjust clocks
|
||
# backwards from 1:00am to 12:00am"
|
||
|
||
# From Laupue Raymond Hughes (2011-03-07):
|
||
-# I believe this will be posted shortly on the website
|
||
-# <a href="http://www.mcil.gov.ws">
|
||
-# www.mcil.gov.ws
|
||
-# </a>
|
||
+# [http://www.mcil.gov.ws/ftcd/daylight_saving_2011.pdf]
|
||
#
|
||
-# PUBLIC NOTICE ON DAYLIGHT SAVING TIME
|
||
-#
|
||
-# Pursuant to the Daylight Saving Act 2009 and Cabinets decision,
|
||
-# businesses and the general public are hereby advised that daylight
|
||
-# saving time is on the first Saturday of April 2011 (02/04/11).
|
||
-#
|
||
-# The public is therefore advised that when the standard time strikes
|
||
-# the hour of four oclock (4.00am or 0400 Hours) on the 2nd April 2011,
|
||
-# then all instruments used to measure standard time are to be
|
||
-# adjusted/changed to three oclock (3:00am or 0300Hrs).
|
||
-#
|
||
-# Margaret Fruean ACTING CHIEF EXECUTIVE OFFICER MINISTRY OF COMMERCE,
|
||
-# INDUSTRY AND LABOUR 28th February 2011
|
||
+# ... when the standard time strikes the hour of four o'clock (4.00am
|
||
+# or 0400 Hours) on the 2nd April 2011, then all instruments used to
|
||
+# measure standard time are to be adjusted/changed to three o'clock
|
||
+# (3:00am or 0300Hrs).
|
||
|
||
-# From David Zuelke (2011-05-09):
|
||
+# From David Zülke (2011-05-09):
|
||
# Subject: Samoa to move timezone from east to west of international date line
|
||
#
|
||
-# <a href="http://www.morningstar.co.uk/uk/markets/newsfeeditem.aspx?id=138501958347963">
|
||
# http://www.morningstar.co.uk/uk/markets/newsfeeditem.aspx?id=138501958347963
|
||
-# </a>
|
||
|
||
-# From Mark Sim-Smith (2011-08-17):
|
||
-# I have been in contact with Leilani Tuala Warren from the Samoa Law
|
||
-# Reform Commission, and she has sent me a copy of the Bill that she
|
||
-# confirmed has been passed...Most of the sections are about maps rather
|
||
-# than the time zone change, but I'll paste the relevant bits below. But
|
||
-# the essence is that at midnight 29 Dec (UTC-11 I suppose), Samoa
|
||
-# changes from UTC-11 to UTC+13:
|
||
-#
|
||
-# International Date Line Bill 2011
|
||
-#
|
||
-# AN ACT to provide for the change to standard time in Samoa and to make
|
||
-# consequential amendments to the position of the International Date
|
||
-# Line, and for related purposes.
|
||
-#
|
||
-# BE IT ENACTED by the Legislative Assembly of Samoa in Parliament
|
||
-# assembled as follows:
|
||
-#
|
||
-# 1. Short title and commencement-(1) This Act may be cited as the
|
||
-# International Date Line Act 2011. (2) Except for section 5(3) this Act
|
||
-# commences at 12 o'clock midnight, on Thursday 29th December 2011. (3)
|
||
-# Section 5(3) commences on the date of assent by the Head of State.
|
||
-#
|
||
-# [snip]
|
||
-#
|
||
-# 3. Interpretation - [snip] "Samoa standard time" in this Act and any
|
||
-# other statute of Samoa which refers to 'Samoa standard time' means the
|
||
-# time 13 hours in advance of Co-ordinated Universal Time.
|
||
-#
|
||
-# 4. Samoa standard time - (1) Upon the commencement of this Act, Samoa
|
||
-# standard time shall be set at 13 hours in advance of Co-ordinated
|
||
-# Universal Time for the whole of Samoa. (2) All references to Samoa's
|
||
-# time zone and to Samoa standard time in Samoa in all legislation and
|
||
-# instruments after the commencement of this Act shall be references to
|
||
-# Samoa standard time as provided for in this Act. (3) Nothing in this
|
||
-# Act affects the provisions of the Daylight Saving Act 2009, except that
|
||
-# it defines Samoa standard time....
|
||
+# From Paul Eggert (2014-06-27):
|
||
+# The International Date Line Act 2011
|
||
+# http://www.parliament.gov.ws/images/ACTS/International_Date_Line_Act__2011_-_Eng.pdf
|
||
+# changed Samoa from UTC-11 to UTC+13, effective "12 o'clock midnight, on
|
||
+# Thursday 29th December 2011". The International Date Line was adjusted
|
||
+# accordingly.
|
||
|
||
# From Laupue Raymond Hughes (2011-09-02):
|
||
-# <a href="http://www.mcil.gov.ws/mcil_publications.html">
|
||
# http://www.mcil.gov.ws/mcil_publications.html
|
||
-# </a>
|
||
#
|
||
# here is the official website publication for Samoa DST and dateline change
|
||
#
|
||
# DST
|
||
-# Year End Time Start Time
|
||
-# 2011 - - - - - - 24 September 3:00am to 4:00am
|
||
-# 2012 01 April 4:00am to 3:00am - - - - - -
|
||
+# Year End Time Start Time
|
||
+# 2011 - - - - - - 24 September 3:00am to 4:00am
|
||
+# 2012 01 April 4:00am to 3:00am - - - - - -
|
||
#
|
||
# Dateline Change skip Friday 30th Dec 2011
|
||
# Thursday 29th December 2011 23:59:59 Hours
|
||
# Saturday 31st December 2011 00:00:00 Hours
|
||
#
|
||
-# Clarification by Tim Parenti (2012-01-03):
|
||
-# Although Samoa has used Daylight Saving Time in the 2010-2011 and 2011-2012
|
||
-# seasons, there is not yet any indication that this trend will continue on
|
||
-# a regular basis. For now, we have explicitly listed the transitions below.
|
||
-#
|
||
-# From Nicky (2012-09-10):
|
||
+# From Nicholas Pereira (2012-09-10):
|
||
# Daylight Saving Time commences on Sunday 30th September 2012 and
|
||
-# ends on Sunday 7th of April 2013.
|
||
-#
|
||
-# Please find link below for more information.
|
||
+# ends on Sunday 7th of April 2013....
|
||
# http://www.mcil.gov.ws/mcil_publications.html
|
||
#
|
||
-# That publication also includes dates for Summer of 2013/4 as well
|
||
-# which give the impression of a pattern in selecting dates for the
|
||
-# future, so for now, we will guess this will continue.
|
||
+# From Paul Eggert (2014-07-08):
|
||
+# That web page currently lists transitions for 2012/3 and 2013/4.
|
||
+# Assume the pattern instituted in 2012 will continue indefinitely.
|
||
|
||
-# Western Samoa
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
+Rule WS 2010 only - Sep lastSun 0:00 1 D
|
||
+Rule WS 2011 only - Apr Sat>=1 4:00 0 S
|
||
+Rule WS 2011 only - Sep lastSat 3:00 1 D
|
||
+Rule WS 2012 max - Apr Sun>=1 4:00 0 S
|
||
Rule WS 2012 max - Sep lastSun 3:00 1 D
|
||
-Rule WS 2012 max - Apr Sun>=1 4:00 0 -
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Pacific/Apia 12:33:04 - LMT 1879 Jul 5
|
||
-11:26:56 - LMT 1911
|
||
- -11:30 - SAMT 1950 # Samoa Time
|
||
- -11:00 - WST 2010 Sep 26
|
||
- -11:00 1:00 WSDT 2011 Apr 2 4:00
|
||
- -11:00 - WST 2011 Sep 24 3:00
|
||
- -11:00 1:00 WSDT 2011 Dec 30
|
||
- 13:00 1:00 WSDT 2012 Apr Sun>=1 4:00
|
||
+ -11:30 - WSST 1950
|
||
+ -11:00 WS S%sT 2011 Dec 29 24:00 # S=Samoa
|
||
13:00 WS WS%sT
|
||
|
||
# Solomon Is
|
||
# excludes Bougainville, for which see Papua New Guinea
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct # Honiara
|
||
+Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct # Honiara
|
||
11:00 - SBT # Solomon Is Time
|
||
|
||
# Tokelau Is
|
||
@@ -744,7 +695,7 @@
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Pacific/Fakaofo -11:24:56 - LMT 1901
|
||
- -11:00 - TKT 2011 Dec 30 # Tokelau Time
|
||
+ -11:00 - TKT 2011 Dec 30 # Tokelau Time
|
||
13:00 - TKT
|
||
|
||
# Tonga
|
||
@@ -804,8 +755,8 @@
|
||
# time from Operation Newsreel (Hardtack I/Teak shot, 1958-08-01) to the last
|
||
# Operation Fishbowl shot (Tightrope, 1962-11-04).... [See] Herman Hoerlin,
|
||
# "The United States High-Altitude Test Experience: A Review Emphasizing the
|
||
-# Impact on the Environment", Los Alamos LA-6405, Oct 1976
|
||
-# <http://www.fas.org/sgp/othergov/doe/lanl/docs1/00322994.pdf>.
|
||
+# Impact on the Environment", Los Alamos LA-6405, Oct 1976.
|
||
+# http://www.fas.org/sgp/othergov/doe/lanl/docs1/00322994.pdf
|
||
# See the table on page 4 where he lists GMT and local times for the tests; a
|
||
# footnote for the JI tests reads that local time is "JI time = Hawaii Time
|
||
# Minus One Hour".
|
||
@@ -820,7 +771,7 @@
|
||
# From Mark Brader (2005-01-23):
|
||
# [Fallacies and Fantasies of Air Transport History, by R.E.G. Davies,
|
||
# published 1994 by Paladwr Press, McLean, VA, USA; ISBN 0-9626483-5-3]
|
||
-# reproduced a Pan American Airways timeables from 1936, for their weekly
|
||
+# reproduced a Pan American Airways timetable from 1936, for their weekly
|
||
# "Orient Express" flights between San Francisco and Manila, and connecting
|
||
# flights to Chicago and the US East Coast. As it uses some time zone
|
||
# designations that I've never seen before:....
|
||
@@ -830,9 +781,9 @@
|
||
Zone Pacific/Midway -11:49:28 - LMT 1901
|
||
-11:00 - NST 1956 Jun 3
|
||
-11:00 1:00 NDT 1956 Sep 2
|
||
- -11:00 - NST 1967 Apr # N=Nome
|
||
- -11:00 - BST 1983 Nov 30 # B=Bering
|
||
- -11:00 - SST # S=Samoa
|
||
+ -11:00 - NST 1967 Apr # N=Nome
|
||
+ -11:00 - BST 1983 Nov 30 # B=Bering
|
||
+ -11:00 - SST # S=Samoa
|
||
|
||
# Palmyra
|
||
# uninhabited since World War II; was probably like Pacific/Kiritimati
|
||
@@ -852,7 +803,7 @@
|
||
Rule Vanuatu 1992 1993 - Jan Sun>=23 0:00 0 -
|
||
Rule Vanuatu 1992 only - Oct Sun>=23 0:00 1:00 S
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
|
||
+Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
|
||
11:00 Vanuatu VU%sT # Vanuatu Time
|
||
|
||
# Wallis and Futuna
|
||
@@ -864,188 +815,213 @@
|
||
|
||
# NOTES
|
||
|
||
-# This data is by no means authoritative; if you think you know better,
|
||
+# This file is by no means authoritative; if you think you know better,
|
||
# go ahead and edit the file (and please send any changes to
|
||
-# tz@iana.org for general use in the future).
|
||
+# tz@iana.org for general use in the future). For more, please see
|
||
+# the file CONTRIBUTING in the tz distribution.
|
||
|
||
-# From Paul Eggert (2013-02-21):
|
||
-# A good source for time zone historical data outside the U.S. is
|
||
+# From Paul Eggert (2014-10-31):
|
||
+#
|
||
+# Unless otherwise specified, the source for data through 1990 is:
|
||
# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
|
||
# San Diego: ACS Publications, Inc. (2003).
|
||
+# Unfortunately this book contains many errors and cites no sources.
|
||
#
|
||
# Gwillim Law writes that a good source
|
||
# for recent time zone data is the International Air Transport
|
||
# Association's Standard Schedules Information Manual (IATA SSIM),
|
||
# published semiannually. Law sent in several helpful summaries
|
||
-# of the IATA's data after 1990.
|
||
-#
|
||
-# Except where otherwise noted, Shanks & Pottenger is the source for
|
||
-# entries through 1990, and IATA SSIM is the source for entries afterwards.
|
||
+# of the IATA's data after 1990. Except where otherwise noted,
|
||
+# IATA SSIM is the source for entries after 1990.
|
||
#
|
||
# Another source occasionally used is Edward W. Whitman, World Time Differences,
|
||
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
|
||
# I found in the UCLA library.
|
||
#
|
||
# For data circa 1899, a common source is:
|
||
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
|
||
-# <http://www.jstor.org/stable/1774359>.
|
||
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
|
||
+# http://www.jstor.org/stable/1774359
|
||
#
|
||
# A reliable and entertaining source about time zones is
|
||
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
|
||
#
|
||
-# I invented the abbreviations marked `*' in the following table;
|
||
+# I invented the abbreviations marked '*' in the following table;
|
||
# the rest are from earlier versions of this file, or from other sources.
|
||
# Corrections are welcome!
|
||
-# std dst
|
||
-# LMT Local Mean Time
|
||
-# 8:00 WST WST Western Australia
|
||
-# 8:45 CWST CWST Central Western Australia*
|
||
-# 9:00 JST Japan
|
||
-# 9:30 CST CST Central Australia
|
||
-# 10:00 EST EST Eastern Australia
|
||
-# 10:00 ChST Chamorro
|
||
-# 10:30 LHST LHST Lord Howe*
|
||
-# 11:30 NZMT NZST New Zealand through 1945
|
||
-# 12:00 NZST NZDT New Zealand 1946-present
|
||
-# 12:45 CHAST CHADT Chatham*
|
||
-# -11:00 SST Samoa
|
||
-# -10:00 HST Hawaii
|
||
-# - 8:00 PST Pitcairn*
|
||
+# std dst
|
||
+# LMT Local Mean Time
|
||
+# 8:00 AWST AWDT Western Australia
|
||
+# 8:45 ACWST ACWDT Central Western Australia*
|
||
+# 9:00 JST Japan
|
||
+# 9:30 ACST ACDT Central Australia
|
||
+# 10:00 AEST AEDT Eastern Australia
|
||
+# 10:00 ChST Chamorro
|
||
+# 10:30 LHST LHDT Lord Howe*
|
||
+# 11:00 BST Bougainville*
|
||
+# 11:30 NZMT NZST New Zealand through 1945
|
||
+# 12:00 NZST NZDT New Zealand 1946-present
|
||
+# 12:15 CHAST Chatham through 1945*
|
||
+# 12:45 CHAST CHADT Chatham 1946-present*
|
||
+# 13:00 WSST WSDT (western) Samoa 2011-present*
|
||
+# -11:30 WSST Western Samoa through 1950*
|
||
+# -11:00 SST Samoa
|
||
+# -10:00 HST Hawaii
|
||
+# - 8:00 PST Pitcairn*
|
||
#
|
||
-# See the `northamerica' file for Hawaii.
|
||
-# See the `southamerica' file for Easter I and the Galapagos Is.
|
||
+# See the 'northamerica' file for Hawaii.
|
||
+# See the 'southamerica' file for Easter I and the Galápagos Is.
|
||
|
||
###############################################################################
|
||
|
||
# Australia
|
||
|
||
+# From Paul Eggert (2014-06-30):
|
||
+# Daylight saving time has long been controversial in Australia, pitting
|
||
+# region against region, rural against urban, and local against global.
|
||
+# For example, in her review of Graeme Davison's _The Unforgiving
|
||
+# Minute: how Australians learned to tell the time_ (1993), Perth native
|
||
+# Phillipa J Martyr wrote, "The section entitled 'Saving Daylight' was
|
||
+# very informative, but was (as can, sadly, only be expected from a
|
||
+# Melbourne-based study) replete with the usual chuckleheaded
|
||
+# Queenslanders and straw-chewing yokels from the West prattling fables
|
||
+# about fading curtains and crazed farm animals."
|
||
+# Electronic Journal of Australian and New Zealand History (1997-03-03)
|
||
+# http://www.jcu.edu.au/aff/history/reviews/davison.htm
|
||
+
|
||
# From Paul Eggert (2005-12-08):
|
||
-# <a href="http://www.bom.gov.au/climate/averages/tables/dst_times.shtml">
|
||
# Implementation Dates of Daylight Saving Time within Australia
|
||
-# </a> summarizes daylight saving issues in Australia.
|
||
+# http://www.bom.gov.au/climate/averages/tables/dst_times.shtml
|
||
+# summarizes daylight saving issues in Australia.
|
||
|
||
# From Arthur David Olson (2005-12-12):
|
||
-# <a href="http://www.lawlink.nsw.gov.au/lawlink/Corporate/ll_agdinfo.nsf/pages/community_relations_daylight_saving">
|
||
# Lawlink NSW:Daylight Saving in New South Wales
|
||
-# </a> covers New South Wales in particular.
|
||
+# http://www.lawlink.nsw.gov.au/lawlink/Corporate/ll_agdinfo.nsf/pages/community_relations_daylight_saving
|
||
+# covers New South Wales in particular.
|
||
|
||
# From John Mackin (1991-03-06):
|
||
-# We in Australia have _never_ referred to DST as `daylight' time.
|
||
-# It is called `summer' time. Now by a happy coincidence, `summer'
|
||
-# and `standard' happen to start with the same letter; hence, the
|
||
+# We in Australia have _never_ referred to DST as 'daylight' time.
|
||
+# It is called 'summer' time. Now by a happy coincidence, 'summer'
|
||
+# and 'standard' happen to start with the same letter; hence, the
|
||
# abbreviation does _not_ change...
|
||
# The legislation does not actually define abbreviations, at least
|
||
# in this State, but the abbreviation is just commonly taken to be the
|
||
# initials of the phrase, and the legislation here uniformly uses
|
||
-# the phrase `summer time' and does not use the phrase `daylight
|
||
+# the phrase 'summer time' and does not use the phrase 'daylight
|
||
# time'.
|
||
# Announcers on the Commonwealth radio network, the ABC (for Australian
|
||
-# Broadcasting Commission), use the phrases `Eastern Standard Time'
|
||
-# or `Eastern Summer Time'. (Note, though, that as I say in the
|
||
+# Broadcasting Commission), use the phrases 'Eastern Standard Time'
|
||
+# or 'Eastern Summer Time'. (Note, though, that as I say in the
|
||
# current australasia file, there is really no such thing.) Announcers
|
||
# on its overseas service, Radio Australia, use the same phrases
|
||
-# prefixed by the word `Australian' when referring to local times;
|
||
+# prefixed by the word 'Australian' when referring to local times;
|
||
# time announcements on that service, naturally enough, are made in UTC.
|
||
|
||
-# From Arthur David Olson (1992-03-08):
|
||
-# Given the above, what's chosen for year-round use is:
|
||
-# CST for any place operating at a GMTOFF of 9:30
|
||
-# WST for any place operating at a GMTOFF of 8:00
|
||
-# EST for any place operating at a GMTOFF of 10:00
|
||
-
|
||
-# From Chuck Soper (2006-06-01):
|
||
-# I recently found this Australian government web page on time zones:
|
||
-# <http://www.australia.gov.au/about-australia-13time>
|
||
-# And this government web page lists time zone names and abbreviations:
|
||
-# <http://www.bom.gov.au/climate/averages/tables/daysavtm.shtml>
|
||
-
|
||
-# From Paul Eggert (2001-04-05), summarizing a long discussion about "EST"
|
||
-# versus "AEST" etc.:
|
||
+# From Paul Eggert (2014-06-30):
|
||
#
|
||
-# I see the following points of dispute:
|
||
+# Inspired by Mackin's remarks quoted above, earlier versions of this
|
||
+# file used "EST" for both Eastern Standard Time and Eastern Summer
|
||
+# Time in Australia, and similarly for "CST", "CWST", and "WST".
|
||
+# However, these abbreviations were confusing and were not common
|
||
+# practice among Australians, and there were justifiable complaints
|
||
+# about them, so I attempted to survey current Australian usage.
|
||
+# For the tz database, the full English phrase is not that important;
|
||
+# what matters is the abbreviation. It's difficult to survey the web
|
||
+# directly for abbreviation usage, as there are so many false hits for
|
||
+# strings like "EST" and "EDT", so I looked for pages that defined an
|
||
+# abbreviation for eastern or central DST in Australia, and got the
|
||
+# following numbers of unique hits for the listed Google queries:
|
||
#
|
||
-# * How important are unique time zone abbreviations?
|
||
+# 10 "Eastern Daylight Time AEST" site:au [some are false hits]
|
||
+# 10 "Eastern Summer Time AEST" site:au
|
||
+# 10 "Summer Time AEDT" site:au
|
||
+# 13 "EDST Eastern Daylight Saving Time" site:au
|
||
+# 18 "Summer Time ESST" site:au
|
||
+# 28 "Eastern Daylight Saving Time EDST" site:au
|
||
+# 39 "EDT Eastern Daylight Time" site:au [some are false hits]
|
||
+# 53 "Eastern Daylight Time EDT" site:au [some are false hits]
|
||
+# 54 "AEDT Australian Eastern Daylight Time" site:au
|
||
+# 182 "Eastern Daylight Time AEDT" site:au
|
||
#
|
||
-# Here I tend to agree with the point (most recently made by Chris
|
||
-# Newman) that unique abbreviations should not be essential for proper
|
||
-# operation of software. We have other instances of ambiguity
|
||
-# (e.g. "IST" denoting both "Israel Standard Time" and "Indian
|
||
-# Standard Time"), and they are not likely to go away any time soon.
|
||
-# In the old days, some software mistakenly relied on unique
|
||
-# abbreviations, but this is becoming less true with time, and I don't
|
||
-# think it's that important to cater to such software these days.
|
||
+# 17 "Central Daylight Time CDT" site:au [some are false hits]
|
||
+# 46 "Central Daylight Time ACDT" site:au
|
||
#
|
||
-# On the other hand, there is another motivation for unambiguous
|
||
-# abbreviations: it cuts down on human confusion. This is
|
||
-# particularly true for Australia, where "EST" can mean one thing for
|
||
-# time T and a different thing for time T plus 1 second.
|
||
+# I tried several other variants (e.g., "Eastern Summer Time EST") but
|
||
+# they all returned fewer than 10 unique hits. I also looked for pages
|
||
+# mentioning both "western standard time" and an abbreviation, since
|
||
+# there is no WST in the US to generate false hits, and found:
|
||
#
|
||
-# * Does the relevant legislation indicate which abbreviations should be used?
|
||
+# 156 "western standard time" AWST site:au
|
||
+# 226 "western standard time" WST site:au
|
||
#
|
||
-# Here I tend to think that things are a mess, just as they are in
|
||
-# many other countries. We Americans are currently disagreeing about
|
||
-# which abbreviation to use for the newly legislated Chamorro Standard
|
||
-# Time, for example.
|
||
+# I then surveyed the top ten newspapers in Australia by circulation as
|
||
+# listed in Wikipedia, using Google queries like "AEDT site:heraldsun.com.au"
|
||
+# and obtaining estimated counts from the initial page of search results.
|
||
+# All ten papers greatly preferred "AEDT" to "EDT". The papers
|
||
+# surveyed were the Herald Sun, The Daily Telegraph, The Courier-Mail,
|
||
+# The Sydney Morning Herald, The West Australian, The Age, The Advertiser,
|
||
+# The Australian, The Financial Review, and The Herald (Newcastle).
|
||
#
|
||
-# Personally, I would prefer to use common practice; I would like to
|
||
-# refer to legislation only for examples of common practice, or as a
|
||
-# tiebreaker.
|
||
+# I also searched for historical usage, to see whether abbreviations
|
||
+# like "AEDT" are new. A Trove search <http://trove.nla.gov.au/>
|
||
+# found only one newspaper (The Canberra Times) with a house style
|
||
+# dating back to the 1970s, I expect because other newspapers weren't
|
||
+# fully indexed. The Canberra Times strongly preferred abbreviations
|
||
+# like "AEDT". The first occurrence of "AEDT" was a World Weather
|
||
+# column (1971-11-17, page 24), and of "ACDT" was a Scoreboard column
|
||
+# (1993-01-24, p 16). The style was the typical usage but was not
|
||
+# strictly enforced; for example, "Welcome to the twilight zones ..."
|
||
+# (1994-10-29, p 1) uses the abbreviations AEST/AEDT, CST/CDT, and
|
||
+# WST, and goes on to say, "The confusion and frustration some feel
|
||
+# about the lack of uniformity among Australia's six states and two
|
||
+# territories has prompted one group to form its very own political
|
||
+# party -- the Sydney-based Daylight Saving Extension Party."
|
||
#
|
||
-# * Do Australians more often use "Eastern Daylight Time" or "Eastern
|
||
-# Summer Time"? Do they typically prefix the time zone names with
|
||
-# the word "Australian"?
|
||
+# I also surveyed federal government sources. They did not agree:
|
||
#
|
||
-# My own impression is that both "Daylight Time" and "Summer Time" are
|
||
-# common and are widely understood, but that "Summer Time" is more
|
||
-# popular; and that the leading "A" is also common but is omitted more
|
||
-# often than not. I just used AltaVista advanced search and got the
|
||
-# following count of page hits:
|
||
+# The Australian Government (2014-03-26)
|
||
+# http://australia.gov.au/about-australia/our-country/time
|
||
+# (This document was produced by the Department of Finance.)
|
||
+# AEST ACST AWST AEDT ACDT
|
||
#
|
||
-# 1,103 "Eastern Summer Time" AND domain:au
|
||
-# 971 "Australian Eastern Summer Time" AND domain:au
|
||
-# 613 "Eastern Daylight Time" AND domain:au
|
||
-# 127 "Australian Eastern Daylight Time" AND domain:au
|
||
+# Bureau of Meteorology (2012-11-08)
|
||
+# http://www.bom.gov.au/climate/averages/tables/daysavtm.shtml
|
||
+# EST CST WST EDT CDT
|
||
#
|
||
-# Here "Summer" seems quite a bit more popular than "Daylight",
|
||
-# particularly when we know the time zone is Australian and not US,
|
||
-# say. The "Australian" prefix seems to be popular for Eastern Summer
|
||
-# Time, but unpopular for Eastern Daylight Time.
|
||
+# Civil Aviation Safety Authority (undated)
|
||
+# http://services.casa.gov.au/outnback/inc/pages/episode3/episode-3_time_zones.shtml
|
||
+# EST CST WST (no abbreviations given for DST)
|
||
#
|
||
-# For abbreviations, tools like AltaVista are less useful because of
|
||
-# ambiguity. Many hits are not really time zones, unfortunately, and
|
||
-# many hits denote US time zones and not Australian ones. But here
|
||
-# are the hit counts anyway:
|
||
+# Geoscience Australia (2011-11-24)
|
||
+# http://www.ga.gov.au/geodesy/astro/sunrise.jsp
|
||
+# AEST ACST AWST AEDT ACDT
|
||
#
|
||
-# 161,304 "EST" and domain:au
|
||
-# 25,156 "EDT" and domain:au
|
||
-# 18,263 "AEST" and domain:au
|
||
-# 10,416 "AEDT" and domain:au
|
||
+# Parliamentary Library (2008-11-10)
|
||
+# http://www.aph.gov.au/binaries/library/pubs/rp/2008-09/09rp14.pdf
|
||
+# EST CST WST preferred for standard time; AEST AEDT ACST ACDT also used
|
||
#
|
||
-# 14,538 "CST" and domain:au
|
||
-# 5,728 "CDT" and domain:au
|
||
-# 176 "ACST" and domain:au
|
||
-# 29 "ACDT" and domain:au
|
||
+# The Transport Safety Bureau has an extensive series of accident reports,
|
||
+# and investigators seem to use whatever abbreviation they like.
|
||
+# Googling site:atsb.gov.au found the following number of unique hits:
|
||
+# 311 "ESuT", 195 "EDT", 26 "AEDT", 83 "CSuT", 46 "CDT".
|
||
+# "_SuT" tended to appear in older reports, and "A_DT" tended to
|
||
+# appear in reports of events with international implications.
|
||
#
|
||
-# 7,539 "WST" and domain:au
|
||
-# 68 "AWST" and domain:au
|
||
-#
|
||
-# This data suggest that Australians tend to omit the "A" prefix in
|
||
-# practice. The situation for "ST" versus "DT" is less clear, given
|
||
-# the ambiguities involved.
|
||
-#
|
||
-# * How do Australians feel about the abbreviations in the tz database?
|
||
-#
|
||
-# If you just count Australians on this list, I count 2 in favor and 3
|
||
-# against. One of the "against" votes (David Keegel) counseled delay,
|
||
-# saying that both AEST/AEDT and EST/EST are widely used and
|
||
-# understood in Australia.
|
||
+# From the above it appears that there is a working consensus in
|
||
+# Australia to use trailing "DT" for daylight saving time; although
|
||
+# some sources use trailing "SST" or "ST" or "SuT" they are by far in
|
||
+# the minority. The case for leading "A" is weaker, but since it
|
||
+# seems to be preferred in the overall web and is preferred in all
|
||
+# the leading newspaper websites and in many government departments,
|
||
+# it has a stronger case than omitting the leading "A". The current
|
||
+# version of the database therefore uses abbreviations like "AEST" and
|
||
+# "AEDT" for Australian time zones.
|
||
|
||
# From Paul Eggert (1995-12-19):
|
||
# Shanks & Pottenger report 2:00 for all autumn changes in Australia and NZ.
|
||
# Mark Prior writes that his newspaper
|
||
# reports that NSW's fall 1995 change will occur at 2:00,
|
||
# but Robert Elz says it's been 3:00 in Victoria since 1970
|
||
-# and perhaps the newspaper's `2:00' is referring to standard time.
|
||
+# and perhaps the newspaper's '2:00' is referring to standard time.
|
||
# For now we'll continue to assume 2:00s for changes since 1960.
|
||
|
||
# From Eric Ulevik (1998-01-05):
|
||
@@ -1055,17 +1031,14 @@
|
||
# relevant entries in this database.
|
||
#
|
||
# NSW (including LHI and Broken Hill):
|
||
-# <a href="http://www.austlii.edu.au/au/legis/nsw/consol_act/sta1987137/index.html">
|
||
# Standard Time Act 1987 (updated 1995-04-04)
|
||
-# </a>
|
||
+# http://www.austlii.edu.au/au/legis/nsw/consol_act/sta1987137/index.html
|
||
# ACT
|
||
-# <a href="http://www.austlii.edu.au/au/legis/act/consol_act/stasta1972279/index.html">
|
||
# Standard Time and Summer Time Act 1972
|
||
-# </a>
|
||
+# http://www.austlii.edu.au/au/legis/act/consol_act/stasta1972279/index.html
|
||
# SA
|
||
-# <a href="http://www.austlii.edu.au/au/legis/sa/consol_act/sta1898137/index.html">
|
||
# Standard Time Act, 1898
|
||
-# </a>
|
||
+# http://www.austlii.edu.au/au/legis/sa/consol_act/sta1898137/index.html
|
||
|
||
# From David Grosz (2005-06-13):
|
||
# It was announced last week that Daylight Saving would be extended by
|
||
@@ -1083,7 +1056,7 @@
|
||
# Victoria: I wasn't able to find anything separate, but the other articles
|
||
# allude to it.
|
||
# But not Queensland
|
||
-# http://www.news.com.au/story/0,10117,15564030-1248,00.html.
|
||
+# http://www.news.com.au/story/0,10117,15564030-1248,00.html
|
||
|
||
# Northern Territory
|
||
|
||
@@ -1130,9 +1103,9 @@
|
||
# The 1992 ending date used in the rules is a best guess;
|
||
# it matches what was used in the past.
|
||
|
||
-# <a href="http://www.bom.gov.au/faq/faqgen.htm">
|
||
# The Australian Bureau of Meteorology FAQ
|
||
-# </a> (1999-09-27) writes that Giles Meteorological Station uses
|
||
+# http://www.bom.gov.au/faq/faqgen.htm
|
||
+# (1999-09-27) writes that Giles Meteorological Station uses
|
||
# South Australian time even though it's located in Western Australia.
|
||
|
||
# Queensland
|
||
@@ -1173,9 +1146,9 @@
|
||
# The chosen rules the union of the 1971/1972 change and the 1989-1992 changes.
|
||
|
||
# From Christopher Hunt (2006-11-21), after an advance warning
|
||
-# from Jesper Norgaard Welen (2006-11-01):
|
||
+# from Jesper Nørgaard Welen (2006-11-01):
|
||
# WA are trialing DST for three years.
|
||
-# <http://www.parliament.wa.gov.au/parliament/bills.nsf/9A1B183144403DA54825721200088DF1/$File/Bill175-1B.pdf>
|
||
+# http://www.parliament.wa.gov.au/parliament/bills.nsf/9A1B183144403DA54825721200088DF1/$File/Bill175-1B.pdf
|
||
|
||
# From Rives McDow (2002-04-09):
|
||
# The most interesting region I have found consists of three towns on the
|
||
@@ -1189,7 +1162,7 @@
|
||
# From Paul Eggert (2002-04-09):
|
||
# This is confirmed by the section entitled
|
||
# "What's the deal with time zones???" in
|
||
-# <http://www.earthsci.unimelb.edu.au/~awatkins/null.html>.
|
||
+# http://www.earthsci.unimelb.edu.au/~awatkins/null.html
|
||
#
|
||
# From Alex Livingston (2006-12-07):
|
||
# ... it was just on four years ago that I drove along the Eyre Highway,
|
||
@@ -1337,7 +1310,7 @@
|
||
# Based on law library research by John Mackin,
|
||
# who notes:
|
||
# In Australia, time is not legislated federally, but rather by the
|
||
-# individual states. Thus, while such terms as ``Eastern Standard Time''
|
||
+# individual states. Thus, while such terms as "Eastern Standard Time"
|
||
# [I mean, of course, Australian EST, not any other kind] are in common
|
||
# use, _they have NO REAL MEANING_, as they are not defined in the
|
||
# legislation. This is very important to understand.
|
||
@@ -1345,48 +1318,42 @@
|
||
|
||
# From Eric Ulevik (1999-05-26):
|
||
# DST will start in NSW on the last Sunday of August, rather than the usual
|
||
-# October in 2000. [See: Matthew Moore,
|
||
-# <a href="http://www.smh.com.au/news/9905/26/pageone/pageone4.html">
|
||
-# Two months more daylight saving
|
||
-# </a>
|
||
-# Sydney Morning Herald (1999-05-26).]
|
||
+# October in 2000. See: Matthew Moore,
|
||
+# Two months more daylight saving, Sydney Morning Herald (1999-05-26).
|
||
+# http://www.smh.com.au/news/9905/26/pageone/pageone4.html
|
||
|
||
# From Paul Eggert (1999-09-27):
|
||
# See the following official NSW source:
|
||
-# <a href="http://dir.gis.nsw.gov.au/cgi-bin/genobject/document/other/daylightsaving/tigGmZ">
|
||
# Daylight Saving in New South Wales.
|
||
-# </a>
|
||
+# http://dir.gis.nsw.gov.au/cgi-bin/genobject/document/other/daylightsaving/tigGmZ
|
||
#
|
||
# Narrabri Shire (NSW) council has announced it will ignore the extension of
|
||
# daylight saving next year. See:
|
||
-# <a href="http://abc.net.au/news/regionals/neweng/monthly/regeng-22jul1999-1.htm">
|
||
# Narrabri Council to ignore daylight saving
|
||
-# </a> (1999-07-22). For now, we'll wait to see if this really happens.
|
||
+# http://abc.net.au/news/regionals/neweng/monthly/regeng-22jul1999-1.htm
|
||
+# (1999-07-22). For now, we'll wait to see if this really happens.
|
||
#
|
||
# Victoria will following NSW. See:
|
||
-# <a href="http://abc.net.au/local/news/olympics/1999/07/item19990728112314_1.htm">
|
||
-# Vic to extend daylight saving
|
||
-# </a> (1999-07-28).
|
||
+# Vic to extend daylight saving (1999-07-28)
|
||
+# http://abc.net.au/local/news/olympics/1999/07/item19990728112314_1.htm
|
||
#
|
||
# However, South Australia rejected the DST request. See:
|
||
-# <a href="http://abc.net.au/news/olympics/1999/07/item19990719151754_1.htm">
|
||
-# South Australia rejects Olympics daylight savings request
|
||
-# </a> (1999-07-19).
|
||
+# South Australia rejects Olympics daylight savings request (1999-07-19)
|
||
+# http://abc.net.au/news/olympics/1999/07/item19990719151754_1.htm
|
||
#
|
||
# Queensland also will not observe DST for the Olympics. See:
|
||
-# <a href="http://abc.net.au/news/olympics/1999/06/item19990601114608_1.htm">
|
||
# Qld says no to daylight savings for Olympics
|
||
-# </a> (1999-06-01), which quotes Queensland Premier Peter Beattie as saying
|
||
-# ``Look you've got to remember in my family when this came up last time
|
||
+# http://abc.net.au/news/olympics/1999/06/item19990601114608_1.htm
|
||
+# (1999-06-01), which quotes Queensland Premier Peter Beattie as saying
|
||
+# "Look you've got to remember in my family when this came up last time
|
||
# I voted for it, my wife voted against it and she said to me it's all very
|
||
# well for you, you don't have to worry about getting the children out of
|
||
# bed, getting them to school, getting them to sleep at night.
|
||
-# I've been through all this argument domestically...my wife rules.''
|
||
+# I've been through all this argument domestically...my wife rules."
|
||
#
|
||
# Broken Hill will stick with South Australian time in 2000. See:
|
||
-# <a href="http://abc.net.au/news/regionals/brokenh/monthly/regbrok-21jul1999-6.htm">
|
||
-# Broken Hill to be behind the times
|
||
-# </a> (1999-07-21).
|
||
+# Broken Hill to be behind the times (1999-07-21)
|
||
+# http://abc.net.au/news/regionals/brokenh/monthly/regbrok-21jul1999-6.htm
|
||
|
||
# IATA SSIM (1998-09) says that the spring 2000 change for Australian
|
||
# Capital Territory, New South Wales except Lord Howe Island and Broken
|
||
@@ -1402,7 +1369,7 @@
|
||
# Yancowinna
|
||
|
||
# From John Mackin (1989-01-04):
|
||
-# `Broken Hill' means the County of Yancowinna.
|
||
+# 'Broken Hill' means the County of Yancowinna.
|
||
|
||
# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
|
||
# # YANCOWINNA.. [ Confirmation courtesy of Broken Hill Postmaster ]
|
||
@@ -1459,9 +1426,7 @@
|
||
# summer (southern hemisphere).
|
||
#
|
||
# From
|
||
-# <a href="http://www.safework.sa.gov.au/uploaded_files/DaylightDatesSet.pdf">
|
||
# http://www.safework.sa.gov.au/uploaded_files/DaylightDatesSet.pdf
|
||
-# </a>
|
||
# The extended daylight saving period that South Australia has been trialling
|
||
# for over the last year is now set to be ongoing.
|
||
# Daylight saving will continue to start on the first Sunday in October each
|
||
@@ -1471,9 +1436,7 @@
|
||
# the ACT for all 52 weeks of the year...
|
||
#
|
||
# We have a wrap-up here:
|
||
-# <a href="http://www.timeanddate.com/news/time/south-australia-extends-dst.html">
|
||
# http://www.timeanddate.com/news/time/south-australia-extends-dst.html
|
||
-# </a>
|
||
###############################################################################
|
||
|
||
# New Zealand
|
||
@@ -1482,7 +1445,7 @@
|
||
# the 1989/90 year was a trial of an extended "daylight saving" period.
|
||
# This trial was deemed successful and the extended period adopted for
|
||
# subsequent years (with the addition of a further week at the start).
|
||
-# source -- phone call to Ministry of Internal Affairs Head Office.
|
||
+# source - phone call to Ministry of Internal Affairs Head Office.
|
||
|
||
# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
|
||
# # The Country of New Zealand (Australia's east island -) Gee they hate that!
|
||
@@ -1524,6 +1487,19 @@
|
||
# that DST will begin on 2007-09-30 2008-04-06.
|
||
# http://www.dia.govt.nz/diawebsite.nsf/wpg_URL/Services-Daylight-Saving-Daylight-saving-to-be-extended
|
||
|
||
+# From Paul Eggert (2014-07-14):
|
||
+# Chatham Island time was formally standardized on 1957-01-01 by
|
||
+# New Zealand's Standard Time Amendment Act 1956 (1956-10-26).
|
||
+# http://www.austlii.edu.au/nz/legis/hist_act/staa19561956n100244.pdf
|
||
+# According to Google Books snippet view, a speaker in the New Zealand
|
||
+# parliamentary debates in 1956 said "Clause 78 makes provision for standard
|
||
+# time in the Chatham Islands. The time there is 45 minutes in advance of New
|
||
+# Zealand time. I understand that is the time they keep locally, anyhow."
|
||
+# For now, assume this practice goes back to the introduction of standard time
|
||
+# in New Zealand, as this would make Chatham Islands time almost exactly match
|
||
+# LMT back when New Zealand was at UTC+11:30; also, assume Chatham Islands did
|
||
+# not observe New Zealand's prewar DST.
|
||
+
|
||
###############################################################################
|
||
|
||
|
||
@@ -1543,7 +1519,7 @@
|
||
|
||
# From the BBC World Service in
|
||
# http://news.bbc.co.uk/2/hi/asia-pacific/205226.stm (1998-10-31 16:03 UTC):
|
||
-# The Fijiian government says the main reasons for the time change is to
|
||
+# The Fijian government says the main reasons for the time change is to
|
||
# improve productivity and reduce road accidents.... [T]he move is also
|
||
# intended to boost Fiji's ability to attract tourists to witness the dawning
|
||
# of the new millennium.
|
||
@@ -1551,16 +1527,12 @@
|
||
# http://www.fiji.gov.fj/press/2000_09/2000_09_13-05.shtml (2000-09-13)
|
||
# reports that Fiji has discontinued DST.
|
||
|
||
-# Johnston
|
||
-
|
||
-# Johnston data is from usno1995.
|
||
-
|
||
|
||
# Kiribati
|
||
|
||
# From Paul Eggert (1996-01-22):
|
||
# Today's _Wall Street Journal_ (page 1) reports that Kiribati
|
||
-# ``declared it the same day [throughout] the country as of Jan. 1, 1995''
|
||
+# "declared it the same day [throughout] the country as of Jan. 1, 1995"
|
||
# as part of the competition to be first into the 21st century.
|
||
|
||
|
||
@@ -1575,8 +1547,8 @@
|
||
|
||
# N Mariana Is, Guam
|
||
|
||
-# Howse writes (p 153) ``The Spaniards, on the other hand, reached the
|
||
-# Philippines and the Ladrones from America,'' and implies that the Ladrones
|
||
+# Howse writes (p 153) "The Spaniards, on the other hand, reached the
|
||
+# Philippines and the Ladrones from America," and implies that the Ladrones
|
||
# (now called the Marianas) kept American date for quite some time.
|
||
# For now, we assume the Ladrones switched at the same time as the Philippines;
|
||
# see Asia/Manila.
|
||
@@ -1590,17 +1562,16 @@
|
||
# Micronesia
|
||
|
||
# Alan Eugene Davis writes (1996-03-16),
|
||
-# ``I am certain, having lived there for the past decade, that "Truk"
|
||
-# (now properly known as Chuuk) ... is in the time zone GMT+10.''
|
||
+# "I am certain, having lived there for the past decade, that 'Truk'
|
||
+# (now properly known as Chuuk) ... is in the time zone GMT+10."
|
||
#
|
||
# Shanks & Pottenger write that Truk switched from UTC+10 to UTC+11
|
||
# on 1978-10-01; ignore this for now.
|
||
|
||
# From Paul Eggert (1999-10-29):
|
||
# The Federated States of Micronesia Visitors Board writes in
|
||
-# <a href="http://www.fsmgov.org/info/clocks.html">
|
||
-# The Federated States of Micronesia - Visitor Information
|
||
-# </a> (1999-01-26)
|
||
+# The Federated States of Micronesia - Visitor Information (1999-01-26)
|
||
+# http://www.fsmgov.org/info/clocks.html
|
||
# that Truk and Yap are UTC+10, and Ponape and Kosrae are UTC+11.
|
||
# We don't know when Kosrae switched from UTC+12; assume January 1 for now.
|
||
|
||
@@ -1646,27 +1617,34 @@
|
||
# Sacramento but it was changed a couple of years ago.
|
||
|
||
|
||
-# Samoa
|
||
+# (Western) Samoa and American Samoa
|
||
|
||
# Howse writes (p 153, citing p 10 of the 1883-11-18 New York Herald)
|
||
# that in 1879 the King of Samoa decided to change
|
||
-# ``the date in his kingdom from the Antipodean to the American system,
|
||
-# ordaining -- by a masterpiece of diplomatic flattery -- that
|
||
-# the Fourth of July should be celebrated twice in that year.''
|
||
+# "the date in his kingdom from the Antipodean to the American system,
|
||
+# ordaining - by a masterpiece of diplomatic flattery - that
|
||
+# the Fourth of July should be celebrated twice in that year."
|
||
|
||
+# Although Shanks & Pottenger says they both switched to UTC-11:30
|
||
+# in 1911, and to UTC-11 in 1950. many earlier sources give UTC-11
|
||
+# for American Samoa, e.g., the US National Bureau of Standards
|
||
+# circular "Standard Time Throughout the World", 1932.
|
||
+# Assume American Samoa switched to UTC-11 in 1911, not 1950,
|
||
+# and that after 1950 they agreed until (western) Samoa skipped a
|
||
+# day in 2011. Assume also that the Samoas follow the US and New
|
||
+# Zealand's "ST"/"DT" style of daylight-saving abbreviations.
|
||
|
||
# Tonga
|
||
|
||
# From Paul Eggert (1996-01-22):
|
||
-# Today's _Wall Street Journal_ (p 1) reports that ``Tonga has been plotting
|
||
-# to sneak ahead of [New Zealanders] by introducing daylight-saving time.''
|
||
+# Today's _Wall Street Journal_ (p 1) reports that "Tonga has been plotting
|
||
+# to sneak ahead of [New Zealanders] by introducing daylight-saving time."
|
||
# Since Kiribati has moved the Date Line it's not clear what Tonga will do.
|
||
|
||
# Don Mundell writes in the 1997-02-20 Tonga Chronicle
|
||
-# <a href="http://www.tongatapu.net.to/tonga/homeland/timebegins.htm">
|
||
-# How Tonga became `The Land where Time Begins'
|
||
-# </a>:
|
||
-
|
||
+# How Tonga became 'The Land where Time Begins':
|
||
+# http://www.tongatapu.net.to/tonga/homeland/timebegins.htm
|
||
+#
|
||
# Until 1941 Tonga maintained a standard time 50 minutes ahead of NZST
|
||
# 12 hours and 20 minutes ahead of GMT. When New Zealand adjusted its
|
||
# standard time in 1940s, Tonga had the choice of subtracting from its
|
||
@@ -1674,8 +1652,8 @@
|
||
# advancing its time to maintain the differential of 13 degrees
|
||
# (approximately 50 minutes ahead of New Zealand time).
|
||
#
|
||
-# Because His Majesty King Taufa'ahau Tupou IV, then Crown Prince
|
||
-# Tungi, preferred to ensure Tonga's title as the land where time
|
||
+# Because His Majesty King Tāufaʻāhau Tupou IV, then Crown Prince
|
||
+# Tungī, preferred to ensure Tonga's title as the land where time
|
||
# begins, the Legislative Assembly approved the latter change.
|
||
#
|
||
# But some of the older, more conservative members from the outer
|
||
@@ -1701,9 +1679,7 @@
|
||
# * Tonga will introduce DST in November
|
||
#
|
||
# I was given this link by John Letts:
|
||
-# <a href="http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm">
|
||
# http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm
|
||
-# </a>
|
||
#
|
||
# I have not been able to find exact dates for the transition in November
|
||
# yet. By reading this article it seems like Fiji will be 14 hours ahead
|
||
@@ -1711,9 +1687,7 @@
|
||
# (12 + 1 hour DST).
|
||
|
||
# From Arthur David Olson (1999-09-20):
|
||
-# According to <a href="http://www.tongaonline.com/news/sept1799.html">
|
||
-# http://www.tongaonline.com/news/sept1799.html
|
||
-# </a>:
|
||
+# According to <http://www.tongaonline.com/news/sept1799.html>:
|
||
# "Daylight Savings Time will take effect on Oct. 2 through April 15, 2000
|
||
# and annually thereafter from the first Saturday in October through the
|
||
# third Saturday of April. Under the system approved by Privy Council on
|
||
@@ -1731,7 +1705,7 @@
|
||
# instead of the original reported date April 16. Unfortunately, the article
|
||
# is no longer available on the site, and I did not make a copy of the
|
||
# text, and I have forgotten to report it here.
|
||
-# (Original URL was: http://www.tongaonline.com/news/march162000.htm )
|
||
+# (Original URL was <http://www.tongaonline.com/news/march162000.htm>)
|
||
|
||
# From Rives McDow (2000-12-01):
|
||
# Tonga is observing DST as of 2000-11-04 and will stop on 2001-01-27.
|
||
@@ -1751,7 +1725,7 @@
|
||
# From Vernice Anderson, Personal Secretary to Philip Jessup,
|
||
# US Ambassador At Large (oral history interview, 1971-02-02):
|
||
#
|
||
-# Saturday, the 14th [of October, 1950] -- ... The time was all the
|
||
+# Saturday, the 14th [of October, 1950] - ... The time was all the
|
||
# more confusing at that point, because we had crossed the
|
||
# International Date Line, thus getting two Sundays. Furthermore, we
|
||
# discovered that Wake Island had two hours of daylight saving time
|
||
@@ -1796,7 +1770,7 @@
|
||
# on the high seas. Whenever a ship was within the territorial waters of any
|
||
# nation it would use that nation's standard time. The captain was permitted
|
||
# to change his ship's clocks at a time of his choice following his ship's
|
||
-# entry into another zone time--he often chose midnight. These zones were
|
||
+# entry into another zone time - he often chose midnight. These zones were
|
||
# adopted by all major fleets between 1920 and 1925 but not by many
|
||
# independent merchant ships until World War II.
|
||
|
||
@@ -1804,6 +1778,6 @@
|
||
# (2005-03-20):
|
||
#
|
||
# The American Practical Navigator (2002)
|
||
-# <http://pollux.nss.nima.mil/pubs/pubs_j_apn_sections.html?rid=187>
|
||
+# http://pollux.nss.nima.mil/pubs/pubs_j_apn_sections.html?rid=187
|
||
# talks only about the 180-degree meridian with respect to ships in
|
||
# international waters; it ignores the international date line.
|
||
--- ./jdk/make/sun/javazic/tzdata/backward Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/sun/javazic/tzdata/backward Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -21,15 +21,15 @@
|
||
# or visit www.oracle.com if you need additional information or have any
|
||
# questions.
|
||
#
|
||
-# <pre>
|
||
# This file is in the public domain, so clarified as of
|
||
# 2009-05-17 by Arthur David Olson.
|
||
|
||
# This file provides links between current names for time zones
|
||
# and their old names. Many names changed in late 1993.
|
||
|
||
+# Link TARGET LINK-NAME
|
||
Link Africa/Asmara Africa/Asmera
|
||
-Link Africa/Bamako Africa/Timbuktu
|
||
+Link Africa/Abidjan Africa/Timbuktu
|
||
Link America/Argentina/Catamarca America/Argentina/ComodRivadavia
|
||
Link America/Adak America/Atka
|
||
Link America/Argentina/Buenos_Aires America/Buenos_Aires
|
||
@@ -50,8 +50,11 @@
|
||
Link Pacific/Auckland Antarctica/South_Pole
|
||
Link Asia/Ashgabat Asia/Ashkhabad
|
||
Link Asia/Kolkata Asia/Calcutta
|
||
-Link Asia/Chongqing Asia/Chungking
|
||
+Link Asia/Shanghai Asia/Chongqing
|
||
+Link Asia/Shanghai Asia/Chungking
|
||
Link Asia/Dhaka Asia/Dacca
|
||
+Link Asia/Shanghai Asia/Harbin
|
||
+Link Asia/Urumqi Asia/Kashgar
|
||
Link Asia/Kathmandu Asia/Katmandu
|
||
Link Asia/Macau Asia/Macao
|
||
Link Asia/Ho_Chi_Minh Asia/Saigon
|
||
--- ./jdk/make/sun/javazic/tzdata/etcetera Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/sun/javazic/tzdata/etcetera Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -21,7 +21,6 @@
|
||
# or visit www.oracle.com if you need additional information or have any
|
||
# questions.
|
||
#
|
||
-# <pre>
|
||
# This file is in the public domain, so clarified as of
|
||
# 2009-05-17 by Arthur David Olson.
|
||
|
||
@@ -37,7 +36,7 @@
|
||
Zone Etc/UCT 0 - UCT
|
||
|
||
# The following link uses older naming conventions,
|
||
-# but it belongs here, not in the file `backward',
|
||
+# but it belongs here, not in the file 'backward',
|
||
# as functions like gmtime load the "GMT" file to handle leap seconds properly.
|
||
# We want this to work even on installations that omit the other older names.
|
||
Link Etc/GMT GMT
|
||
--- ./jdk/make/sun/javazic/tzdata/europe Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/sun/javazic/tzdata/europe Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -21,24 +21,30 @@
|
||
# or visit www.oracle.com if you need additional information or have any
|
||
# questions.
|
||
#
|
||
-# <pre>
|
||
# This file is in the public domain, so clarified as of
|
||
# 2009-05-17 by Arthur David Olson.
|
||
|
||
-# This data is by no means authoritative; if you think you know better,
|
||
+# This file is by no means authoritative; if you think you know better,
|
||
# go ahead and edit the file (and please send any changes to
|
||
-# tz@iana.org for general use in the future).
|
||
+# tz@iana.org for general use in the future). For more, please see
|
||
+# the file CONTRIBUTING in the tz distribution.
|
||
|
||
-# From Paul Eggert (2006-03-22):
|
||
-# A good source for time zone historical data outside the U.S. is
|
||
+# From Paul Eggert (2014-10-31):
|
||
+#
|
||
+# Unless otherwise specified, the source for data through 1990 is:
|
||
# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
|
||
# San Diego: ACS Publications, Inc. (2003).
|
||
+# Unfortunately this book contains many errors and cites no sources.
|
||
#
|
||
# Gwillim Law writes that a good source
|
||
# for recent time zone data is the International Air Transport
|
||
# Association's Standard Schedules Information Manual (IATA SSIM),
|
||
# published semiannually. Law sent in several helpful summaries
|
||
-# of the IATA's data after 1990.
|
||
+# of the IATA's data after 1990. Except where otherwise noted,
|
||
+# IATA SSIM is the source for entries after 1990.
|
||
+#
|
||
+# A reliable and entertaining source about time zones is
|
||
+# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
|
||
#
|
||
# Except where otherwise noted, Shanks & Pottenger is the source for
|
||
# entries through 1991, and IATA SSIM is the source for entries afterwards.
|
||
@@ -49,9 +55,9 @@
|
||
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated),
|
||
# which I found in the UCLA library.
|
||
#
|
||
-# <a href="http://www.pettswoodvillage.co.uk/Daylight_Savings_William_Willett.pdf">
|
||
# William Willett, The Waste of Daylight, 19th edition
|
||
-# </a> (1914-03)
|
||
+# <http://cs.ucla.edu/~eggert/The-Waste-of-Daylight-19th.pdf>
|
||
+# [PDF] (1914-03)
|
||
#
|
||
# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
|
||
# <http://www.jstor.org/stable/1774359>. He writes:
|
||
@@ -59,10 +65,20 @@
|
||
# may be sent to Mr. John Milne, Royal Geographical Society,
|
||
# Savile Row, London." Nowadays please email them to tz@iana.org.
|
||
#
|
||
-# Brazil's Departamento Servico da Hora (DSH),
|
||
-# <a href="http://pcdsh01.on.br/HISTHV.htm">
|
||
+# Byalokoz EL. New Counting of Time in Russia since July 1, 1919.
|
||
+# This Russian-language source was consulted by Vladimir Karpinsky; see
|
||
+# http://mm.icann.org/pipermail/tz/2014-August/021320.html
|
||
+# The full Russian citation is:
|
||
+# Бялокоз, Евгений Людвигович. Новый счет времени в течении суток
|
||
+# введенный декретом Совета народных комиссаров для всей России с 1-го
|
||
+# июля 1919 г. / Изд. 2-е Междуведомственной комиссии. - Петроград:
|
||
+# Десятая гос. тип., 1919.
|
||
+# http://resolver.gpntb.ru/purl?docushare/dsweb/Get/Resource-2011/Byalokoz__E.L.__Novyy__schet__vremeni__v__techenie__sutok__izd__2(1).pdf
|
||
+#
|
||
+# Brazil's Divisão Serviço da Hora (DSHO),
|
||
# History of Summer Time
|
||
-# </a> (1998-09-21, in Portuguese)
|
||
+# <http://pcdsh01.on.br/HISTHV.htm>
|
||
+# (1998-09-21, in Portuguese)
|
||
|
||
#
|
||
# I invented the abbreviations marked '*' in the following table;
|
||
@@ -78,13 +94,12 @@
|
||
# 0:00 WET WEST WEMT Western Europe
|
||
# 0:19:32.13 AMT NST Amsterdam, Netherlands Summer (1835-1937)*
|
||
# 0:20 NET NEST Netherlands (1937-1940)*
|
||
+# 1:00 BST British Standard (1968-1971)
|
||
# 1:00 CET CEST CEMT Central Europe
|
||
# 1:00:14 SET Swedish (1879-1899)*
|
||
# 2:00 EET EEST Eastern Europe
|
||
-# 3:00 MSK MSD Moscow
|
||
-#
|
||
-# A reliable and entertaining source about time zones, especially in Britain,
|
||
-# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
|
||
+# 3:00 FET Further-eastern Europe (2011-2014)*
|
||
+# 3:00 MSK MSD MSM* Moscow
|
||
|
||
# From Peter Ilieve (1994-12-04),
|
||
# The original six [EU members]: Belgium, France, (West) Germany, Italy,
|
||
@@ -128,7 +143,7 @@
|
||
# along the towpath within a few yards of it.'
|
||
#
|
||
# I have a one inch to one mile map of London and my estimate of the stone's
|
||
-# position is 51 deg. 28' 30" N, 0 deg. 18' 45" W. The longitude should
|
||
+# position is 51 degrees 28' 30" N, 0 degrees 18' 45" W. The longitude should
|
||
# be within about +-2". The Ordnance Survey grid reference is TQ172761.
|
||
#
|
||
# [This yields GMTOFF = -0:01:15 for London LMT in the 18th century.]
|
||
@@ -160,8 +175,22 @@
|
||
# transition date for London, namely 1847-12-01. We don't know as much
|
||
# about Dublin, so we use 1880-08-02, the legal transition time.
|
||
|
||
-# From Paul Eggert (2003-09-27):
|
||
-# Summer Time was first seriously proposed by William Willett (1857-1915),
|
||
+# From Paul Eggert (2014-07-19):
|
||
+# The ancients had no need for daylight saving, as they kept time
|
||
+# informally or via hours whose length depended on the time of year.
|
||
+# Daylight saving time in its modern sense was invented by the
|
||
+# New Zealand entomologist George Vernon Hudson (1867-1946),
|
||
+# whose day job as a postal clerk led him to value
|
||
+# after-hours daylight in which to pursue his research.
|
||
+# In 1895 he presented a paper to the Wellington Philosophical Society
|
||
+# that proposed a two-hour daylight-saving shift. See:
|
||
+# Hudson GV. On seasonal time-adjustment in countries south of lat. 30 deg.
|
||
+# Transactions and Proceedings of the New Zealand Institute. 1895;28:734
|
||
+# http://rsnz.natlib.govt.nz/volume/rsnz_28/rsnz_28_00_006110.html
|
||
+# Although some interest was expressed in New Zealand, his proposal
|
||
+# did not find its way into law and eventually it was almost forgotten.
|
||
+#
|
||
+# In England, DST was independently reinvented by William Willett (1857-1915),
|
||
# a London builder and member of the Royal Astronomical Society
|
||
# who circulated a pamphlet "The Waste of Daylight" (1907)
|
||
# that proposed advancing clocks 20 minutes on each of four Sundays in April,
|
||
@@ -174,7 +203,7 @@
|
||
# A monument to Willett was unveiled on 1927-05-21, in an open space in
|
||
# a 45-acre wood near Chislehurst, Kent that was purchased by popular
|
||
# subscription and open to the public. On the south face of the monolith,
|
||
-# designed by G. W. Miller, is the...William Willett Memorial Sundial,
|
||
+# designed by G. W. Miller, is the William Willett Memorial Sundial,
|
||
# which is permanently set to Summer Time.
|
||
|
||
# From Winston Churchill (1934-04-28):
|
||
@@ -183,9 +212,9 @@
|
||
# between 160 and 170 hours more daylight leisure, to a war which
|
||
# plunged Europe into darkness for four years, and shook the
|
||
# foundations of civilization throughout the world.
|
||
-# -- <a href="http://www.winstonchurchill.org/fh114willett.htm">
|
||
-# "A Silent Toast to William Willett", Pictorial Weekly
|
||
-# </a>
|
||
+# -- "A Silent Toast to William Willett", Pictorial Weekly;
|
||
+# republished in Finest Hour (Spring 2002) 1(114):26
|
||
+# http://www.winstonchurchill.org/images/finesthour/Vol.01%20No.114.pdf
|
||
|
||
# From Paul Eggert (1996-09-03):
|
||
# The OED Supplement says that the English originally said "Daylight Saving"
|
||
@@ -194,7 +223,6 @@
|
||
# proponents (who eventually won the argument) are quoted as using "Summer".
|
||
|
||
# From Arthur David Olson (1989-01-19):
|
||
-#
|
||
# A source at the British Information Office in New York avers that it's
|
||
# known as "British" Summer Time in all parts of the United Kingdom.
|
||
|
||
@@ -221,8 +249,8 @@
|
||
# official designation; the reply of the 21st was that there wasn't
|
||
# but he couldn't think of anything better than the "Double British
|
||
# Summer Time" that the BBC had been using informally.
|
||
-# http://student.cusu.cam.ac.uk/~jsm28/british-time/bbc-19410418.png
|
||
-# http://student.cusu.cam.ac.uk/~jsm28/british-time/ho-19410421.png
|
||
+# http://www.polyomino.org.uk/british-time/bbc-19410418.png
|
||
+# http://www.polyomino.org.uk/british-time/ho-19410421.png
|
||
|
||
# From Sir Alexander Maxwell in the above-mentioned letter (1941-04-21):
|
||
# [N]o official designation has as far as I know been adopted for the time
|
||
@@ -239,23 +267,14 @@
|
||
# the history of summer time legislation in the United Kingdom.
|
||
# Since 1998 Joseph S. Myers has been updating
|
||
# and extending this list, which can be found in
|
||
-# http://student.cusu.cam.ac.uk/~jsm28/british-time/
|
||
-# <a href="http://www.polyomino.org.uk/british-time/">
|
||
-# History of legal time in Britain
|
||
-# </a>
|
||
-# Rob Crowther (2012-01-04) reports that that URL no longer
|
||
-# exists, and the article can now be found at:
|
||
-# <a href="http://www.polyomino.org.uk/british-time/">
|
||
# http://www.polyomino.org.uk/british-time/
|
||
-# </a>
|
||
|
||
# From Joseph S. Myers (1998-01-06):
|
||
#
|
||
# The legal time in the UK outside of summer time is definitely GMT, not UTC;
|
||
# see Lord Tanlaw's speech
|
||
-# <a href="http://www.parliament.the-stationery-office.co.uk/pa/ld199697/ldhansrd/pdvn/lds97/text/70611-20.htm#70611-20_head0">
|
||
-# (Lords Hansard 11 June 1997 columns 964 to 976)
|
||
-# </a>.
|
||
+# http://www.publications.parliament.uk/pa/ld199798/ldhansrd/vo970611/text/70611-10.htm#70611-10_head0
|
||
+# (Lords Hansard 11 June 1997 columns 964 to 976).
|
||
|
||
# From Paul Eggert (2006-03-22):
|
||
#
|
||
@@ -294,9 +313,17 @@
|
||
# "Timeball on the ballast office is down. Dunsink time."
|
||
# -- James Joyce, Ulysses
|
||
|
||
+# "Countess Markievicz ... claimed that the [1916] abolition of Dublin Mean Time
|
||
+# was among various actions undertaken by the 'English' government that
|
||
+# would 'put the whole country into the SF (Sinn Féin) camp'. She claimed
|
||
+# Irish 'public feeling (was) outraged by forcing of English time on us'."
|
||
+# -- Parsons M. Dublin lost its time zone - and 25 minutes - after 1916 Rising.
|
||
+# Irish Times 2014-10-27.
|
||
+# http://www.irishtimes.com/news/politics/dublin-lost-its-time-zone-and-25-minutes-after-1916-rising-1.1977411
|
||
+
|
||
# From Joseph S. Myers (2005-01-26):
|
||
-# Irish laws are available online at www.irishstatutebook.ie. These include
|
||
-# various relating to legal time, for example:
|
||
+# Irish laws are available online at <http://www.irishstatutebook.ie>.
|
||
+# These include various relating to legal time, for example:
|
||
#
|
||
# ZZA13Y1923.html ZZA12Y1924.html ZZA8Y1925.html ZZSIV20PG1267.html
|
||
#
|
||
@@ -458,25 +485,27 @@
|
||
# Use Europe/London for Jersey, Guernsey, and the Isle of Man.
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Europe/London -0:01:15 - LMT 1847 Dec 1 0:00s
|
||
+Zone Europe/London -0:01:15 - LMT 1847 Dec 1 0:00s
|
||
0:00 GB-Eire %s 1968 Oct 27
|
||
- 1:00 - BST 1971 Oct 31 2:00u
|
||
+ 1:00 - BST 1971 Oct 31 2:00u
|
||
0:00 GB-Eire %s 1996
|
||
0:00 EU GMT/BST
|
||
Link Europe/London Europe/Jersey
|
||
Link Europe/London Europe/Guernsey
|
||
Link Europe/London Europe/Isle_of_Man
|
||
+
|
||
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2
|
||
- -0:25:21 - DMT 1916 May 21 2:00
|
||
- -0:25:21 1:00 IST 1916 Oct 1 2:00s
|
||
+ -0:25:21 - DMT 1916 May 21 2:00
|
||
+ -0:25:21 1:00 IST 1916 Oct 1 2:00s
|
||
0:00 GB-Eire %s 1921 Dec 6 # independence
|
||
- 0:00 GB-Eire GMT/IST 1940 Feb 25 2:00
|
||
- 0:00 1:00 IST 1946 Oct 6 2:00
|
||
- 0:00 - GMT 1947 Mar 16 2:00
|
||
- 0:00 1:00 IST 1947 Nov 2 2:00
|
||
- 0:00 - GMT 1948 Apr 18 2:00
|
||
+ 0:00 GB-Eire GMT/IST 1940 Feb 25 2:00
|
||
+ 0:00 1:00 IST 1946 Oct 6 2:00
|
||
+ 0:00 - GMT 1947 Mar 16 2:00
|
||
+ 0:00 1:00 IST 1947 Nov 2 2:00
|
||
+ 0:00 - GMT 1948 Apr 18 2:00
|
||
0:00 GB-Eire GMT/IST 1968 Oct 27
|
||
- 1:00 - IST 1971 Oct 31 2:00u
|
||
+ 1:00 - IST 1971 Oct 31 2:00u
|
||
0:00 GB-Eire GMT/IST 1996
|
||
0:00 EU GMT/IST
|
||
|
||
@@ -495,10 +524,9 @@
|
||
Rule EU 1981 max - Mar lastSun 1:00u 1:00 S
|
||
Rule EU 1996 max - Oct lastSun 1:00u 0 -
|
||
# The most recent directive covers the years starting in 2002. See:
|
||
-# <a="http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CELEX:32000L0084:EN:NOT">
|
||
# Directive 2000/84/EC of the European Parliament and of the Council
|
||
# of 19 January 2001 on summer-time arrangements.
|
||
-# </a>
|
||
+# http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CELEX:32000L0084:EN:NOT
|
||
|
||
# W-Eur differs from EU only in that W-Eur uses standard time.
|
||
Rule W-Eur 1977 1980 - Apr Sun>=1 1:00s 1:00 S
|
||
@@ -521,18 +549,18 @@
|
||
Rule C-Eur 1944 1945 - Apr Mon>=1 2:00s 1:00 S
|
||
# Whitman gives 1944 Oct 7; go with Shanks & Pottenger.
|
||
Rule C-Eur 1944 only - Oct 2 2:00s 0 -
|
||
-# From Jesper Norgaard Welen (2008-07-13):
|
||
+# From Jesper Nørgaard Welen (2008-07-13):
|
||
#
|
||
# I found what is probably a typo of 2:00 which should perhaps be 2:00s
|
||
# in the C-Eur rule from tz database version 2008d (this part was
|
||
-# corrected in version 2008d). The circumstancial evidence is simply the
|
||
+# corrected in version 2008d). The circumstantial evidence is simply the
|
||
# tz database itself, as seen below:
|
||
#
|
||
# Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15 0:01
|
||
# 0:00 France WE%sT 1945 Sep 16 3:00
|
||
#
|
||
# Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15
|
||
-# 0:00 France WE%sT 1945 Sep 16 3:00
|
||
+# 0:00 France WE%sT 1945 Sep 16 3:00
|
||
#
|
||
# Zone Europe/Belgrade 1:22:00 - LMT 1884
|
||
# 1:00 1:00 CEST 1945 Sep 16 2:00s
|
||
@@ -576,16 +604,16 @@
|
||
Rule E-Eur 1996 max - Oct lastSun 0:00 0 -
|
||
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
-Rule Russia 1917 only - Jul 1 23:00 1:00 MST # Moscow Summer Time
|
||
-Rule Russia 1917 only - Dec 28 0:00 0 MMT # Moscow Mean Time
|
||
-Rule Russia 1918 only - May 31 22:00 2:00 MDST # Moscow Double Summer Time
|
||
+Rule Russia 1917 only - Jul 1 23:00 1:00 MST # Moscow Summer Time
|
||
+Rule Russia 1917 only - Dec 28 0:00 0 MMT # Moscow Mean Time
|
||
+Rule Russia 1918 only - May 31 22:00 2:00 MDST # Moscow Double Summer Time
|
||
Rule Russia 1918 only - Sep 16 1:00 1:00 MST
|
||
Rule Russia 1919 only - May 31 23:00 2:00 MDST
|
||
-Rule Russia 1919 only - Jul 1 2:00 1:00 S
|
||
-Rule Russia 1919 only - Aug 16 0:00 0 -
|
||
-Rule Russia 1921 only - Feb 14 23:00 1:00 S
|
||
-Rule Russia 1921 only - Mar 20 23:00 2:00 M # Midsummer
|
||
-Rule Russia 1921 only - Sep 1 0:00 1:00 S
|
||
+Rule Russia 1919 only - Jul 1 2:00 1:00 MSD
|
||
+Rule Russia 1919 only - Aug 16 0:00 0 MSK
|
||
+Rule Russia 1921 only - Feb 14 23:00 1:00 MSD
|
||
+Rule Russia 1921 only - Mar 20 23:00 2:00 MSM # Midsummer
|
||
+Rule Russia 1921 only - Sep 1 0:00 1:00 MSD
|
||
Rule Russia 1921 only - Oct 1 0:00 0 -
|
||
# Act No.925 of the Council of Ministers of the USSR (1980-10-24):
|
||
Rule Russia 1981 1984 - Apr 1 0:00 1:00 S
|
||
@@ -600,6 +628,7 @@
|
||
Rule Russia 1993 2010 - Mar lastSun 2:00s 1:00 S
|
||
Rule Russia 1993 1995 - Sep lastSun 2:00s 0 -
|
||
Rule Russia 1996 2010 - Oct lastSun 2:00s 0 -
|
||
+# As described below, Russia's 2014 change affects Zone data, not Rule data.
|
||
|
||
# From Alexander Krivenyshev (2011-06-14):
|
||
# According to Kremlin press service, Russian President Dmitry Medvedev
|
||
@@ -607,14 +636,10 @@
|
||
# According to the law Russia is abolishing daylight saving time.
|
||
#
|
||
# Medvedev signed a law "On the Calculation of Time" (in russian):
|
||
-# <a href="http://bmockbe.ru/events/?ID=7583">
|
||
# http://bmockbe.ru/events/?ID=7583
|
||
-# </a>
|
||
#
|
||
# Medvedev signed a law on the calculation of the time (in russian):
|
||
-# <a href="http://www.regnum.ru/news/polit/1413906.html">
|
||
# http://www.regnum.ru/news/polit/1413906.html
|
||
-# </a>
|
||
|
||
# From Arthur David Olson (2011-06-15):
|
||
# Take "abolishing daylight saving time" to mean that time is now considered
|
||
@@ -634,10 +659,10 @@
|
||
# From Markus Kuhn (1996-07-12):
|
||
# The official German names ... are
|
||
#
|
||
-# Mitteleuropaeische Zeit (MEZ) = UTC+01:00
|
||
-# Mitteleuropaeische Sommerzeit (MESZ) = UTC+02:00
|
||
+# Mitteleuropäische Zeit (MEZ) = UTC+01:00
|
||
+# Mitteleuropäische Sommerzeit (MESZ) = UTC+02:00
|
||
#
|
||
-# as defined in the German Time Act (Gesetz ueber die Zeitbestimmung (ZeitG),
|
||
+# as defined in the German Time Act (Gesetz über die Zeitbestimmung (ZeitG),
|
||
# 1978-07-25, Bundesgesetzblatt, Jahrgang 1978, Teil I, S. 1110-1111)....
|
||
# I wrote ... to the German Federal Physical-Technical Institution
|
||
#
|
||
@@ -692,7 +717,7 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Europe/Andorra 0:06:04 - LMT 1901
|
||
0:00 - WET 1946 Sep 30
|
||
- 1:00 - CET 1985 Mar 31 2:00
|
||
+ 1:00 - CET 1985 Mar 31 2:00
|
||
1:00 EU CE%sT
|
||
|
||
# Austria
|
||
@@ -718,9 +743,9 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Europe/Vienna 1:05:21 - LMT 1893 Apr
|
||
1:00 C-Eur CE%sT 1920
|
||
- 1:00 Austria CE%sT 1940 Apr 1 2:00s
|
||
- 1:00 C-Eur CE%sT 1945 Apr 2 2:00s
|
||
- 1:00 1:00 CEST 1945 Apr 12 2:00s
|
||
+ 1:00 Austria CE%sT 1940 Apr 1 2:00s
|
||
+ 1:00 C-Eur CE%sT 1945 Apr 2 2:00s
|
||
+ 1:00 1:00 CEST 1945 Apr 12 2:00s
|
||
1:00 - CET 1946
|
||
1:00 Austria CE%sT 1981
|
||
1:00 EU CE%sT
|
||
@@ -731,38 +756,37 @@
|
||
# GMT+3 without DST (was GMT+2 with DST).
|
||
#
|
||
# Sources (Russian language):
|
||
-# 1.
|
||
-# <a href="http://www.belta.by/ru/all_news/society/V-Belarusi-otmenjaetsja-perexod-na-sezonnoe-vremja_i_572952.html">
|
||
# http://www.belta.by/ru/all_news/society/V-Belarusi-otmenjaetsja-perexod-na-sezonnoe-vremja_i_572952.html
|
||
-# </a>
|
||
-# 2.
|
||
-# <a href="http://naviny.by/rubrics/society/2011/09/16/ic_articles_116_175144/">
|
||
# http://naviny.by/rubrics/society/2011/09/16/ic_articles_116_175144/
|
||
-# </a>
|
||
-# 3.
|
||
-# <a href="http://news.tut.by/society/250578.html">
|
||
# http://news.tut.by/society/250578.html
|
||
-# </a>
|
||
+#
|
||
+# From Alexander Bokovoy (2014-10-09):
|
||
+# Belarussian government decided against changing to winter time....
|
||
+# http://eng.belta.by/all_news/society/Belarus-decides-against-adjusting-time-in-Russias-wake_i_76335.html
|
||
+# From Paul Eggert (2014-10-08):
|
||
+# Hence Belarus can share time zone abbreviations with Moscow again.
|
||
+#
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Europe/Minsk 1:50:16 - LMT 1880
|
||
- 1:50 - MMT 1924 May 2 # Minsk Mean Time
|
||
+ 1:50 - MMT 1924 May 2 # Minsk Mean Time
|
||
2:00 - EET 1930 Jun 21
|
||
3:00 - MSK 1941 Jun 28
|
||
1:00 C-Eur CE%sT 1944 Jul 3
|
||
3:00 Russia MSK/MSD 1990
|
||
- 3:00 - MSK 1991 Mar 31 2:00s
|
||
- 2:00 1:00 EEST 1991 Sep 29 2:00s
|
||
- 2:00 - EET 1992 Mar 29 0:00s
|
||
- 2:00 1:00 EEST 1992 Sep 27 0:00s
|
||
- 2:00 Russia EE%sT 2011 Mar 27 2:00s
|
||
- 3:00 - FET # Further-eastern European Time
|
||
+ 3:00 - MSK 1991 Mar 31 2:00s
|
||
+ 2:00 1:00 EEST 1991 Sep 29 2:00s
|
||
+ 2:00 - EET 1992 Mar 29 0:00s
|
||
+ 2:00 1:00 EEST 1992 Sep 27 0:00s
|
||
+ 2:00 Russia EE%sT 2011 Mar 27 2:00s
|
||
+ 3:00 - FET 2014 Oct 26 1:00s
|
||
+ 3:00 - MSK
|
||
|
||
# Belgium
|
||
#
|
||
# From Paul Eggert (1997-07-02):
|
||
# Entries from 1918 through 1991 are taken from:
|
||
# Annuaire de L'Observatoire Royal de Belgique,
|
||
-# Avenue Circulaire, 3, B-1180 BRUXELLES, CLVIIe annee, 1991
|
||
+# Avenue Circulaire, 3, B-1180 BRUXELLES, CLVIIe année, 1991
|
||
# (Imprimerie HAYEZ, s.p.r.l., Rue Fin, 4, 1080 BRUXELLES, MCMXC),
|
||
# pp 8-9.
|
||
# LMT before 1892 was 0:17:30, according to the official journal of Belgium:
|
||
@@ -812,7 +836,7 @@
|
||
Rule Belgium 1946 only - Oct 7 2:00s 0 -
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Europe/Brussels 0:17:30 - LMT 1880
|
||
- 0:17:30 - BMT 1892 May 1 12:00 # Brussels MT
|
||
+ 0:17:30 - BMT 1892 May 1 12:00 # Brussels MT
|
||
0:00 - WET 1914 Nov 8
|
||
1:00 - CET 1916 May 1 0:00
|
||
1:00 C-Eur CE%sT 1918 Nov 11 11:00u
|
||
@@ -828,8 +852,8 @@
|
||
#
|
||
# From Plamen Simenov via Steffen Thorsen (1999-09-09):
|
||
# A document of Government of Bulgaria (No.94/1997) says:
|
||
-# EET --> EETDST is in 03:00 Local time in last Sunday of March ...
|
||
-# EETDST --> EET is in 04:00 Local time in last Sunday of October
|
||
+# EET -> EETDST is in 03:00 Local time in last Sunday of March ...
|
||
+# EETDST -> EET is in 04:00 Local time in last Sunday of October
|
||
#
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
Rule Bulg 1979 only - Mar 31 23:00 1:00 S
|
||
@@ -842,7 +866,7 @@
|
||
1:56:56 - IMT 1894 Nov 30 # Istanbul MT?
|
||
2:00 - EET 1942 Nov 2 3:00
|
||
1:00 C-Eur CE%sT 1945
|
||
- 1:00 - CET 1945 Apr 2 3:00
|
||
+ 1:00 - CET 1945 Apr 2 3:00
|
||
2:00 - EET 1979 Mar 31 23:00
|
||
2:00 Bulg EE%sT 1982 Sep 26 2:00
|
||
2:00 C-Eur EE%sT 1991
|
||
@@ -866,15 +890,15 @@
|
||
Rule Czech 1949 only - Apr 9 2:00s 1:00 S
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Europe/Prague 0:57:44 - LMT 1850
|
||
- 0:57:44 - PMT 1891 Oct # Prague Mean Time
|
||
- 1:00 C-Eur CE%sT 1944 Sep 17 2:00s
|
||
+ 0:57:44 - PMT 1891 Oct # Prague Mean Time
|
||
+ 1:00 C-Eur CE%sT 1944 Sep 17 2:00s
|
||
1:00 Czech CE%sT 1979
|
||
1:00 EU CE%sT
|
||
# Use Europe/Prague also for Slovakia.
|
||
|
||
# Denmark, Faroe Islands, and Greenland
|
||
|
||
-# From Jesper Norgaard Welen (2005-04-26):
|
||
+# From Jesper Nørgaard Welen (2005-04-26):
|
||
# http://www.hum.aau.dk/~poe/tid/tine/DanskTid.htm says that the law
|
||
# [introducing standard time] was in effect from 1894-01-01....
|
||
# The page http://www.retsinfo.dk/_GETDOCI_/ACCN/A18930008330-REGL
|
||
@@ -884,7 +908,7 @@
|
||
# http://www.retsinfo.dk/_GETDOCI_/ACCN/A19722110030-REGL
|
||
#
|
||
# This provoked a new law from 1974 to make possible summer time changes
|
||
-# in subsequenet decrees with the law
|
||
+# in subsequent decrees with the law
|
||
# http://www.retsinfo.dk/_GETDOCI_/ACCN/A19740022330-REGL
|
||
#
|
||
# It seems however that no decree was set forward until 1980. I have
|
||
@@ -899,7 +923,7 @@
|
||
# was suspended on that night):
|
||
# http://www.retsinfo.dk/_GETDOCI_/ACCN/C19801120554-REGL
|
||
|
||
-# From Jesper Norgaard Welen (2005-06-11):
|
||
+# From Jesper Nørgaard Welen (2005-06-11):
|
||
# The Herning Folkeblad (1980-09-26) reported that the night between
|
||
# Saturday and Sunday the clock is set back from three to two.
|
||
|
||
@@ -923,11 +947,11 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Europe/Copenhagen 0:50:20 - LMT 1890
|
||
0:50:20 - CMT 1894 Jan 1 # Copenhagen MT
|
||
- 1:00 Denmark CE%sT 1942 Nov 2 2:00s
|
||
- 1:00 C-Eur CE%sT 1945 Apr 2 2:00
|
||
+ 1:00 Denmark CE%sT 1942 Nov 2 2:00s
|
||
+ 1:00 C-Eur CE%sT 1945 Apr 2 2:00
|
||
1:00 Denmark CE%sT 1980
|
||
1:00 EU CE%sT
|
||
-Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # Torshavn
|
||
+Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # Tórshavn
|
||
0:00 - WET 1981
|
||
0:00 EU WE%sT
|
||
#
|
||
@@ -939,11 +963,11 @@
|
||
# From Paul Eggert (2006-03-22):
|
||
# Greenland joined the EU as part of Denmark, obtained home rule on 1979-05-01,
|
||
# and left the EU on 1985-02-01. It therefore should have been using EU
|
||
-# rules at least through 1984. Shanks & Pottenger say Scoresbysund and Godthab
|
||
+# rules at least through 1984. Shanks & Pottenger say Scoresbysund and Godthåb
|
||
# used C-Eur rules after 1980, but IATA SSIM (1991/1996) says they use EU
|
||
# rules since at least 1991. Assume EU rules since 1980.
|
||
|
||
-# From Gwillin Law (2001-06-06), citing
|
||
+# From Gwillim Law (2001-06-06), citing
|
||
# <http://www.statkart.no/efs/efshefter/2001/efs5-2001.pdf> (2001-03-15),
|
||
# and with translations corrected by Steffen Thorsen:
|
||
#
|
||
@@ -978,16 +1002,16 @@
|
||
# DPC research station at Zackenberg.
|
||
#
|
||
# Scoresbysund and two small villages nearby keep time UTC-1 and use
|
||
-# the same daylight savings time period as in West Greenland (Godthab).
|
||
+# the same daylight savings time period as in West Greenland (Godthåb).
|
||
#
|
||
-# The rest of Greenland, including Godthab (this area, although it
|
||
+# The rest of Greenland, including Godthåb (this area, although it
|
||
# includes central Greenland, is known as west Greenland), keeps time
|
||
# UTC-3, with daylight savings methods according to European rules.
|
||
#
|
||
# It is common procedure to use UTC 0 in the wilderness of East and
|
||
# North Greenland, because it is mainly Icelandic aircraft operators
|
||
# maintaining traffic in these areas. However, the official status of
|
||
-# this area is that it sticks with Godthab time. This area might be
|
||
+# this area is that it sticks with Godthåb time. This area might be
|
||
# considered a dual time zone in some respects because of this.
|
||
|
||
# From Rives McDow (2001-11-19):
|
||
@@ -996,8 +1020,8 @@
|
||
|
||
# From Paul Eggert (2006-03-22):
|
||
# From 1997 on the CIA map shows Danmarkshavn on GMT;
|
||
-# the 1995 map as like Godthab.
|
||
-# For lack of better info, assume they were like Godthab before 1996.
|
||
+# the 1995 map as like Godthåb.
|
||
+# For lack of better info, assume they were like Godthåb before 1996.
|
||
# startkart.no says Thule does not observe DST, but this is clearly an error,
|
||
# so go with Shanks & Pottenger for Thule transitions until this year.
|
||
# For 2007 on assume Thule will stay in sync with US DST rules.
|
||
@@ -1012,15 +1036,15 @@
|
||
#
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Danmarkshavn -1:14:40 - LMT 1916 Jul 28
|
||
- -3:00 - WGT 1980 Apr 6 2:00
|
||
+ -3:00 - WGT 1980 Apr 6 2:00
|
||
-3:00 EU WG%sT 1996
|
||
0:00 - GMT
|
||
Zone America/Scoresbysund -1:27:52 - LMT 1916 Jul 28 # Ittoqqortoormiit
|
||
- -2:00 - CGT 1980 Apr 6 2:00
|
||
+ -2:00 - CGT 1980 Apr 6 2:00
|
||
-2:00 C-Eur CG%sT 1981 Mar 29
|
||
-1:00 EU EG%sT
|
||
Zone America/Godthab -3:26:56 - LMT 1916 Jul 28 # Nuuk
|
||
- -3:00 - WGT 1980 Apr 6 2:00
|
||
+ -3:00 - WGT 1980 Apr 6 2:00
|
||
-3:00 EU WG%sT
|
||
Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik air base
|
||
-4:00 Thule A%sT
|
||
@@ -1042,17 +1066,16 @@
|
||
# summer time next spring."
|
||
|
||
# From Peter Ilieve (1998-11-04), heavily edited:
|
||
-# <a href="http://trip.rk.ee/cgi-bin/thw?${BASE}=akt&${OOHTML}=rtd&TA=1998&TO=1&AN=1390">
|
||
# The 1998-09-22 Estonian time law
|
||
-# </a>
|
||
+# http://trip.rk.ee/cgi-bin/thw?${BASE}=akt&${OOHTML}=rtd&TA=1998&TO=1&AN=1390
|
||
# refers to the Eighth Directive and cites the association agreement between
|
||
-# the EU and Estonia, ratified by the Estonian law (RT II 1995, 22--27, 120).
|
||
+# the EU and Estonia, ratified by the Estonian law (RT II 1995, 22-27, 120).
|
||
#
|
||
# I also asked [my relative] whether they use any standard abbreviation
|
||
# for their standard and summer times. He says no, they use "suveaeg"
|
||
# (summer time) and "talveaeg" (winter time).
|
||
|
||
-# From <a href="http://www.baltictimes.com/">The Baltic Times</a> (1999-09-09)
|
||
+# From The Baltic Times <http://www.baltictimes.com/> (1999-09-09)
|
||
# via Steffen Thorsen:
|
||
# This year will mark the last time Estonia shifts to summer time,
|
||
# a council of the ruling coalition announced Sept. 6....
|
||
@@ -1070,19 +1093,19 @@
|
||
# The Estonian government has changed once again timezone politics.
|
||
# Now we are using again EU rules.
|
||
#
|
||
-# From Urmet Jaanes (2002-03-28):
|
||
+# From Urmet Jänes (2002-03-28):
|
||
# The legislative reference is Government decree No. 84 on 2002-02-21.
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Europe/Tallinn 1:39:00 - LMT 1880
|
||
- 1:39:00 - TMT 1918 Feb # Tallinn Mean Time
|
||
+ 1:39:00 - TMT 1918 Feb # Tallinn Mean Time
|
||
1:00 C-Eur CE%sT 1919 Jul
|
||
1:39:00 - TMT 1921 May
|
||
2:00 - EET 1940 Aug 6
|
||
3:00 - MSK 1941 Sep 15
|
||
1:00 C-Eur CE%sT 1944 Sep 22
|
||
- 3:00 Russia MSK/MSD 1989 Mar 26 2:00s
|
||
- 2:00 1:00 EEST 1989 Sep 24 2:00s
|
||
+ 3:00 Russia MSK/MSD 1989 Mar 26 2:00s
|
||
+ 2:00 1:00 EEST 1989 Sep 24 2:00s
|
||
2:00 C-Eur EE%sT 1998 Sep 22
|
||
2:00 EU EE%sT 1999 Nov 1
|
||
2:00 - EET 2002 Feb 21
|
||
@@ -1104,35 +1127,45 @@
|
||
# This is documented in Heikki Oja: Aikakirja 2007, published by The Almanac
|
||
# Office of University of Helsinki, ISBN 952-10-3221-9, available online (in
|
||
# Finnish) at
|
||
-#
|
||
-# <a href="http://almanakka.helsinki.fi/aikakirja/Aikakirja2007kokonaan.pdf">
|
||
# http://almanakka.helsinki.fi/aikakirja/Aikakirja2007kokonaan.pdf
|
||
-# </a>
|
||
#
|
||
# Page 105 (56 in PDF version) has a handy table of all past daylight savings
|
||
# transitions. It is easy enough to interpret without Finnish skills.
|
||
#
|
||
# This is also confirmed by Finnish Broadcasting Company's archive at:
|
||
-#
|
||
-# <a href="http://www.yle.fi/elavaarkisto/?s=s&g=1&ag=5&t=&a=3401">
|
||
# http://www.yle.fi/elavaarkisto/?s=s&g=1&ag=5&t=&a=3401
|
||
-# </a>
|
||
#
|
||
# The news clip from 1981 says that "the time between 2 and 3 o'clock does not
|
||
# exist tonight."
|
||
|
||
+# From Konstantin Hyppönen (2014-06-13):
|
||
+# [Heikki Oja's book Aikakirja 2013]
|
||
+# http://almanakka.helsinki.fi/images/aikakirja/Aikakirja2013kokonaan.pdf
|
||
+# pages 104-105, including a scan from a newspaper published on Apr 2 1942
|
||
+# say that ... [o]n Apr 2 1942, 24 o'clock (which means Apr 3 1942,
|
||
+# 00:00), clocks were moved one hour forward. The newspaper
|
||
+# mentions "on the night from Thursday to Friday"....
|
||
+# On Oct 4 1942, clocks were moved at 1:00 one hour backwards.
|
||
+#
|
||
+# From Paul Eggert (2014-06-14):
|
||
+# Go with Oja over Shanks.
|
||
+
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
-Rule Finland 1942 only - Apr 3 0:00 1:00 S
|
||
-Rule Finland 1942 only - Oct 3 0:00 0 -
|
||
+Rule Finland 1942 only - Apr 2 24:00 1:00 S
|
||
+Rule Finland 1942 only - Oct 4 1:00 0 -
|
||
Rule Finland 1981 1982 - Mar lastSun 2:00 1:00 S
|
||
Rule Finland 1981 1982 - Sep lastSun 3:00 0 -
|
||
+
|
||
+# Milne says Helsinki (Helsingfors) time was 1:39:49.2 (official document);
|
||
+# round to nearest.
|
||
+
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Europe/Helsinki 1:39:52 - LMT 1878 May 31
|
||
- 1:39:52 - HMT 1921 May # Helsinki Mean Time
|
||
+Zone Europe/Helsinki 1:39:49 - LMT 1878 May 31
|
||
+ 1:39:49 - HMT 1921 May # Helsinki Mean Time
|
||
2:00 Finland EE%sT 1983
|
||
2:00 EU EE%sT
|
||
|
||
-# Aaland Is
|
||
+# Åland Is
|
||
Link Europe/Helsinki Europe/Mariehamn
|
||
|
||
|
||
@@ -1140,14 +1173,14 @@
|
||
|
||
# From Ciro Discepolo (2000-12-20):
|
||
#
|
||
-# Henri Le Corre, Regimes Horaires pour le monde entier, Editions
|
||
+# Henri Le Corre, Régimes horaires pour le monde entier, Éditions
|
||
# Traditionnelles - Paris 2 books, 1993
|
||
#
|
||
-# Gabriel, Traite de l'heure dans le monde, Guy Tredaniel editeur,
|
||
+# Gabriel, Traité de l'heure dans le monde, Guy Trédaniel,
|
||
# Paris, 1991
|
||
#
|
||
-# Francoise Gauquelin, Problemes de l'heure resolus en astrologie,
|
||
-# Guy tredaniel, Paris 1987
|
||
+# Françoise Gauquelin, Problèmes de l'heure résolus en astrologie,
|
||
+# Guy Trédaniel, Paris 1987
|
||
|
||
|
||
#
|
||
@@ -1188,16 +1221,16 @@
|
||
Rule France 1940 only - Feb 25 2:00 1:00 S
|
||
# The French rules for 1941-1944 were not used in Paris, but Shanks & Pottenger
|
||
# write that they were used in Monaco and in many French locations.
|
||
-# Le Corre writes that the upper limit of the free zone was Arneguy, Orthez,
|
||
-# Mont-de-Marsan, Bazas, Langon, Lamotte-Montravel, Marouil, La
|
||
-# Rochefoucault, Champagne-Mouton, La Roche-Posay, La Haye-Descartes,
|
||
+# Le Corre writes that the upper limit of the free zone was Arnéguy, Orthez,
|
||
+# Mont-de-Marsan, Bazas, Langon, Lamothe-Montravel, Marœuil, La
|
||
+# Rochefoucauld, Champagne-Mouton, La Roche-Posay, La Haye-Descartes,
|
||
# Loches, Montrichard, Vierzon, Bourges, Moulins, Digoin,
|
||
-# Paray-le-Monial, Montceau-les-Mines, Chalons-sur-Saone, Arbois,
|
||
+# Paray-le-Monial, Montceau-les-Mines, Chalon-sur-Saône, Arbois,
|
||
# Dole, Morez, St-Claude, and Collonges (Haute-Savoie).
|
||
Rule France 1941 only - May 5 0:00 2:00 M # Midsummer
|
||
# Shanks & Pottenger say this transition occurred at Oct 6 1:00,
|
||
# but go with Denis Excoffier (1997-12-12),
|
||
-# who quotes the Ephemerides Astronomiques for 1998 from Bureau des Longitudes
|
||
+# who quotes the Ephémérides astronomiques for 1998 from Bureau des Longitudes
|
||
# as saying 5/10/41 22hUT.
|
||
Rule France 1941 only - Oct 6 0:00 1:00 S
|
||
Rule France 1942 only - Mar 9 0:00 2:00 M
|
||
@@ -1218,7 +1251,7 @@
|
||
# on PMT-0:09:21 until 1978-08-09, when the time base finally switched to UTC.
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15 0:01
|
||
- 0:09:21 - PMT 1911 Mar 11 0:01 # Paris MT
|
||
+ 0:09:21 - PMT 1911 Mar 11 0:01 # Paris MT
|
||
# Shanks & Pottenger give 1940 Jun 14 0:00; go with Excoffier and Le Corre.
|
||
0:00 France WE%sT 1940 Jun 14 23:00
|
||
# Le Corre says Paris stuck with occupied-France time after the liberation;
|
||
@@ -1235,15 +1268,13 @@
|
||
# Bundesanstalt contains DST information back to 1916.
|
||
# [See tz-link.htm for the URL.]
|
||
|
||
-# From Joerg Schilling (2002-10-23):
|
||
+# From Jörg Schilling (2002-10-23):
|
||
# In 1945, Berlin was switched to Moscow Summer time (GMT+4) by
|
||
-# <a href="http://www.dhm.de/lemo/html/biografien/BersarinNikolai/">
|
||
-# General [Nikolai] Bersarin</a>.
|
||
+# http://www.dhm.de/lemo/html/biografien/BersarinNikolai/
|
||
+# General [Nikolai] Bersarin.
|
||
|
||
# From Paul Eggert (2003-03-08):
|
||
-# <a href="http://www.parlament-berlin.de/pds-fraktion.nsf/727459127c8b66ee8525662300459099/defc77cb784f180ac1256c2b0030274b/$FILE/bersarint.pdf">
|
||
# http://www.parlament-berlin.de/pds-fraktion.nsf/727459127c8b66ee8525662300459099/defc77cb784f180ac1256c2b0030274b/$FILE/bersarint.pdf
|
||
-# </a>
|
||
# says that Bersarin issued an order to use Moscow time on May 20.
|
||
# However, Moscow did not observe daylight saving in 1945, so
|
||
# this was equivalent to CEMT (GMT+3), not GMT+4.
|
||
@@ -1268,23 +1299,23 @@
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Europe/Berlin 0:53:28 - LMT 1893 Apr
|
||
- 1:00 C-Eur CE%sT 1945 May 24 2:00
|
||
+ 1:00 C-Eur CE%sT 1945 May 24 2:00
|
||
1:00 SovietZone CE%sT 1946
|
||
1:00 Germany CE%sT 1980
|
||
1:00 EU CE%sT
|
||
|
||
# From Tobias Conradi (2011-09-12):
|
||
-# Busingen <http://www.buesingen.de>, surrounded by the Swiss canton
|
||
+# Büsingen <http://www.buesingen.de>, surrounded by the Swiss canton
|
||
# Schaffhausen, did not start observing DST in 1980 as the rest of DE
|
||
# (West Germany at that time) and DD (East Germany at that time) did.
|
||
# DD merged into DE, the area is currently covered by code DE in ISO 3166-1,
|
||
# which in turn is covered by the zone Europe/Berlin.
|
||
#
|
||
-# Source for the time in Busingen 1980:
|
||
+# Source for the time in Büsingen 1980:
|
||
# http://www.srf.ch/player/video?id=c012c029-03b7-4c2b-9164-aa5902cd58d3
|
||
|
||
# From Arthur David Olson (2012-03-03):
|
||
-# Busingen and Zurich have shared clocks since 1970.
|
||
+# Büsingen and Zurich have shared clocks since 1970.
|
||
|
||
Link Europe/Zurich Europe/Busingen
|
||
|
||
@@ -1295,8 +1326,8 @@
|
||
|
||
# Gibraltar
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Europe/Gibraltar -0:21:24 - LMT 1880 Aug 2 0:00s
|
||
- 0:00 GB-Eire %s 1957 Apr 14 2:00
|
||
+Zone Europe/Gibraltar -0:21:24 - LMT 1880 Aug 2 0:00s
|
||
+ 0:00 GB-Eire %s 1957 Apr 14 2:00
|
||
1:00 - CET 1982
|
||
1:00 EU CE%sT
|
||
|
||
@@ -1327,7 +1358,7 @@
|
||
Rule Greece 1980 only - Sep 28 0:00 0 -
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Europe/Athens 1:34:52 - LMT 1895 Sep 14
|
||
- 1:34:52 - AMT 1916 Jul 28 0:01 # Athens MT
|
||
+ 1:34:52 - AMT 1916 Jul 28 0:01 # Athens MT
|
||
2:00 Greece EE%sT 1941 Apr 30
|
||
1:00 Greece CE%sT 1944 Apr 4
|
||
2:00 Greece EE%sT 1981
|
||
@@ -1336,15 +1367,20 @@
|
||
2:00 EU EE%sT
|
||
|
||
# Hungary
|
||
+# From Paul Eggert (2014-07-15):
|
||
+# Dates for 1916-1945 are taken from:
|
||
+# Oross A. Jelen a múlt jövője: a nyári időszámítás Magyarországon 1916-1945.
|
||
+# National Archives of Hungary (2012-10-29).
|
||
+# http://mnl.gov.hu/a_het_dokumentuma/a_nyari_idoszamitas_magyarorszagon_19161945.html
|
||
+# This source does not always give times, which are taken from Shanks
|
||
+# & Pottenger (which disagree about the dates).
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
Rule Hungary 1918 only - Apr 1 3:00 1:00 S
|
||
-Rule Hungary 1918 only - Sep 29 3:00 0 -
|
||
+Rule Hungary 1918 only - Sep 16 3:00 0 -
|
||
Rule Hungary 1919 only - Apr 15 3:00 1:00 S
|
||
-Rule Hungary 1919 only - Sep 15 3:00 0 -
|
||
-Rule Hungary 1920 only - Apr 5 3:00 1:00 S
|
||
-Rule Hungary 1920 only - Sep 30 3:00 0 -
|
||
+Rule Hungary 1919 only - Nov 24 3:00 0 -
|
||
Rule Hungary 1945 only - May 1 23:00 1:00 S
|
||
-Rule Hungary 1945 only - Nov 3 0:00 0 -
|
||
+Rule Hungary 1945 only - Nov 1 0:00 0 -
|
||
Rule Hungary 1946 only - Mar 31 2:00s 1:00 S
|
||
Rule Hungary 1946 1949 - Oct Sun>=1 2:00s 0 -
|
||
Rule Hungary 1947 1949 - Apr Sun>=4 2:00s 1:00 S
|
||
@@ -1360,7 +1396,7 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Europe/Budapest 1:16:20 - LMT 1890 Oct
|
||
1:00 C-Eur CE%sT 1918
|
||
- 1:00 Hungary CE%sT 1941 Apr 6 2:00
|
||
+ 1:00 Hungary CE%sT 1941 Apr 8
|
||
1:00 C-Eur CE%sT 1945
|
||
1:00 Hungary CE%sT 1980 Sep 28 2:00s
|
||
1:00 EU CE%sT
|
||
@@ -1423,7 +1459,7 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Atlantic/Reykjavik -1:27:24 - LMT 1837
|
||
-1:27:48 - RMT 1908 # Reykjavik Mean Time?
|
||
- -1:00 Iceland IS%sT 1968 Apr 7 1:00s
|
||
+ -1:00 Iceland IS%sT 1968 Apr 7 1:00s
|
||
0:00 - GMT
|
||
|
||
# Italy
|
||
@@ -1438,9 +1474,8 @@
|
||
# From Paul Eggert (2006-03-22):
|
||
# For Italian DST we have three sources: Shanks & Pottenger, Whitman, and
|
||
# F. Pollastri
|
||
-# <a href="http://toi.iriti.cnr.it/uk/ienitlt.html">
|
||
# Day-light Saving Time in Italy (2006-02-03)
|
||
-# </a>
|
||
+# http://toi.iriti.cnr.it/uk/ienitlt.html
|
||
# ('FP' below), taken from an Italian National Electrotechnical Institute
|
||
# publication. When the three sources disagree, guess who's right, as follows:
|
||
#
|
||
@@ -1500,8 +1535,8 @@
|
||
Rule Italy 1979 only - Sep 30 0:00s 0 -
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Europe/Rome 0:49:56 - LMT 1866 Sep 22
|
||
- 0:49:56 - RMT 1893 Nov 1 0:00s # Rome Mean
|
||
- 1:00 Italy CE%sT 1942 Nov 2 2:00s
|
||
+ 0:49:56 - RMT 1893 Nov 1 0:00s # Rome Mean
|
||
+ 1:00 Italy CE%sT 1942 Nov 2 2:00s
|
||
1:00 C-Eur CE%sT 1944 Jul
|
||
1:00 Italy CE%sT 1980
|
||
1:00 EU CE%sT
|
||
@@ -1548,18 +1583,18 @@
|
||
|
||
# From Andrei Ivanov (2000-03-06):
|
||
# This year Latvia will not switch to Daylight Savings Time (as specified in
|
||
-# <a href="http://www.lv-laiks.lv/wwwraksti/2000/071072/vd4.htm">
|
||
# The Regulations of the Cabinet of Ministers of the Rep. of Latvia of
|
||
-# 29-Feb-2000 (#79)</a>, in Latvian for subscribers only).
|
||
+# 29-Feb-2000 (#79) <http://www.lv-laiks.lv/wwwraksti/2000/071072/vd4.htm>,
|
||
+# in Latvian for subscribers only).
|
||
|
||
-# <a href="http://www.rferl.org/newsline/2001/01/3-CEE/cee-030101.html">
|
||
-# From RFE/RL Newsline (2001-01-03), noted after a heads-up by Rives McDow:
|
||
-# </a>
|
||
+# From RFE/RL Newsline
|
||
+# http://www.rferl.org/newsline/2001/01/3-CEE/cee-030101.html
|
||
+# (2001-01-03), noted after a heads-up by Rives McDow:
|
||
# The Latvian government on 2 January decided that the country will
|
||
# institute daylight-saving time this spring, LETA reported.
|
||
# Last February the three Baltic states decided not to turn back their
|
||
# clocks one hour in the spring....
|
||
-# Minister of Economy Aigars Kalvitis noted that Latvia had too few
|
||
+# Minister of Economy Aigars Kalvītis noted that Latvia had too few
|
||
# daylight hours and thus decided to comply with a draft European
|
||
# Commission directive that provides for instituting daylight-saving
|
||
# time in EU countries between 2002 and 2006. The Latvian government
|
||
@@ -1569,18 +1604,23 @@
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
Rule Latvia 1989 1996 - Mar lastSun 2:00s 1:00 S
|
||
Rule Latvia 1989 1996 - Sep lastSun 2:00s 0 -
|
||
+
|
||
+# Milne 1899 says Riga was 1:36:28 (Polytechnique House time).
|
||
+# Byalokoz 1919 says Latvia was 1:36:34.
|
||
+# Go with Byalokoz.
|
||
+
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Europe/Riga 1:36:24 - LMT 1880
|
||
- 1:36:24 - RMT 1918 Apr 15 2:00 #Riga Mean Time
|
||
- 1:36:24 1:00 LST 1918 Sep 16 3:00 #Latvian Summer
|
||
- 1:36:24 - RMT 1919 Apr 1 2:00
|
||
- 1:36:24 1:00 LST 1919 May 22 3:00
|
||
- 1:36:24 - RMT 1926 May 11
|
||
+Zone Europe/Riga 1:36:34 - LMT 1880
|
||
+ 1:36:34 - RMT 1918 Apr 15 2:00 # Riga MT
|
||
+ 1:36:34 1:00 LST 1918 Sep 16 3:00 # Latvian ST
|
||
+ 1:36:34 - RMT 1919 Apr 1 2:00
|
||
+ 1:36:34 1:00 LST 1919 May 22 3:00
|
||
+ 1:36:34 - RMT 1926 May 11
|
||
2:00 - EET 1940 Aug 5
|
||
3:00 - MSK 1941 Jul
|
||
1:00 C-Eur CE%sT 1944 Oct 13
|
||
- 3:00 Russia MSK/MSD 1989 Mar lastSun 2:00s
|
||
- 2:00 1:00 EEST 1989 Sep lastSun 2:00s
|
||
+ 3:00 Russia MSK/MSD 1989 Mar lastSun 2:00s
|
||
+ 2:00 1:00 EEST 1989 Sep lastSun 2:00s
|
||
2:00 Latvia EE%sT 1997 Jan 21
|
||
2:00 EU EE%sT 2000 Feb 29
|
||
2:00 - EET 2001 Jan 2
|
||
@@ -1614,7 +1654,7 @@
|
||
# I would like to inform that in this year Lithuanian time zone
|
||
# (Europe/Vilnius) was changed.
|
||
|
||
-# From <a href="http://www.elta.lt/">ELTA</a> No. 972 (2582) (1999-09-29),
|
||
+# From ELTA No. 972 (2582) (1999-09-29) <http://www.elta.lt/>,
|
||
# via Steffen Thorsen:
|
||
# Lithuania has shifted back to the second time zone (GMT plus two hours)
|
||
# to be valid here starting from October 31,
|
||
@@ -1623,9 +1663,9 @@
|
||
# motion to give up shifting to summer time in spring, as it was
|
||
# already done by Estonia.
|
||
|
||
-# From the <a href="http://www.tourism.lt/informa/ff.htm">
|
||
-# Fact File, Lithuanian State Department of Tourism
|
||
-# </a> (2000-03-27): Local time is GMT+2 hours ..., no daylight saving.
|
||
+# From the Fact File, Lithuanian State Department of Tourism
|
||
+# <http://www.tourism.lt/informa/ff.htm> (2000-03-27):
|
||
+# Local time is GMT+2 hours ..., no daylight saving.
|
||
|
||
# From a user via Klaus Marten (2003-02-07):
|
||
# As a candidate for membership of the European Union, Lithuania will
|
||
@@ -1638,18 +1678,18 @@
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Europe/Vilnius 1:41:16 - LMT 1880
|
||
- 1:24:00 - WMT 1917 # Warsaw Mean Time
|
||
+ 1:24:00 - WMT 1917 # Warsaw Mean Time
|
||
1:35:36 - KMT 1919 Oct 10 # Kaunas Mean Time
|
||
1:00 - CET 1920 Jul 12
|
||
2:00 - EET 1920 Oct 9
|
||
1:00 - CET 1940 Aug 3
|
||
3:00 - MSK 1941 Jun 24
|
||
1:00 C-Eur CE%sT 1944 Aug
|
||
- 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
|
||
- 2:00 1:00 EEST 1991 Sep 29 2:00s
|
||
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
|
||
+ 2:00 1:00 EEST 1991 Sep 29 2:00s
|
||
2:00 C-Eur EE%sT 1998
|
||
- 2:00 - EET 1998 Mar 29 1:00u
|
||
- 1:00 EU CE%sT 1999 Oct 31 1:00u
|
||
+ 2:00 - EET 1998 Mar 29 1:00u
|
||
+ 1:00 EU CE%sT 1999 Oct 31 1:00u
|
||
2:00 - EET 2003 Jan 1
|
||
2:00 EU EE%sT
|
||
|
||
@@ -1683,9 +1723,9 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Europe/Luxembourg 0:24:36 - LMT 1904 Jun
|
||
1:00 Lux CE%sT 1918 Nov 25
|
||
- 0:00 Lux WE%sT 1929 Oct 6 2:00s
|
||
- 0:00 Belgium WE%sT 1940 May 14 3:00
|
||
- 1:00 C-Eur WE%sT 1944 Sep 18 3:00
|
||
+ 0:00 Lux WE%sT 1929 Oct 6 2:00s
|
||
+ 0:00 Belgium WE%sT 1940 May 14 3:00
|
||
+ 1:00 C-Eur WE%sT 1944 Sep 18 3:00
|
||
1:00 Belgium CE%sT 1977
|
||
1:00 EU CE%sT
|
||
|
||
@@ -1702,9 +1742,9 @@
|
||
Rule Malta 1975 1980 - Sep Sun>=15 2:00 0 -
|
||
Rule Malta 1980 only - Mar 31 2:00 1:00 S
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 0:00s # Valletta
|
||
- 1:00 Italy CE%sT 1942 Nov 2 2:00s
|
||
- 1:00 C-Eur CE%sT 1945 Apr 2 2:00s
|
||
+Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 0:00s # Valletta
|
||
+ 1:00 Italy CE%sT 1942 Nov 2 2:00s
|
||
+ 1:00 C-Eur CE%sT 1945 Apr 2 2:00s
|
||
1:00 Italy CE%sT 1973 Mar 31
|
||
1:00 Malta CE%sT 1981
|
||
1:00 EU CE%sT
|
||
@@ -1719,7 +1759,7 @@
|
||
# In early 1992 there was large-scale interethnic violence in the area
|
||
# and it's possible that some Russophones continued to observe Moscow time.
|
||
# But [two people] separately reported via
|
||
-# Jesper Norgaard that as of 2001-01-24 Tiraspol was like Chisinau.
|
||
+# Jesper Nørgaard that as of 2001-01-24 Tiraspol was like Chisinau.
|
||
# The Tiraspol entry has therefore been removed for now.
|
||
#
|
||
# From Alexander Krivenyshev (2011-10-17):
|
||
@@ -1728,13 +1768,8 @@
|
||
# to the Winter Time).
|
||
#
|
||
# News (in Russian):
|
||
-# <a href="http://www.kyivpost.ua/russia/news/pridnestrove-otkazalos-ot-perehoda-na-zimnee-vremya-30954.html">
|
||
# http://www.kyivpost.ua/russia/news/pridnestrove-otkazalos-ot-perehoda-na-zimnee-vremya-30954.html
|
||
-# </a>
|
||
-#
|
||
-# <a href="http://www.allmoldova.com/moldova-news/1249064116.html">
|
||
# http://www.allmoldova.com/moldova-news/1249064116.html
|
||
-# </a>
|
||
#
|
||
# The substance of this change (reinstatement of the Tiraspol entry)
|
||
# is from a patch from Petr Machata (2011-10-17)
|
||
@@ -1752,9 +1787,7 @@
|
||
# Following Moldova and neighboring Ukraine- Transnistria (Pridnestrovie)-
|
||
# Tiraspol will go back to winter time on October 30, 2011.
|
||
# News from Moldova (in russian):
|
||
-# <a href="http://ru.publika.md/link_317061.html">
|
||
# http://ru.publika.md/link_317061.html
|
||
-# </a>
|
||
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
@@ -1777,8 +1810,8 @@
|
||
# more precise 0:09:21.
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15
|
||
- 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
|
||
- 0:00 France WE%sT 1945 Sep 16 3:00
|
||
+ 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
|
||
+ 0:00 France WE%sT 1945 Sep 16 3:00
|
||
1:00 France CE%sT 1977
|
||
1:00 EU CE%sT
|
||
|
||
@@ -1822,8 +1855,8 @@
|
||
# was not until 1866 when they were all required by law to observe
|
||
# Amsterdam mean time.
|
||
|
||
-# The data before 1945 are taken from
|
||
-# <http://www.phys.uu.nl/~vgent/wettijd/wettijd.htm>.
|
||
+# The data entries before 1945 are taken from
|
||
+# http://www.phys.uu.nl/~vgent/wettijd/wettijd.htm
|
||
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
Rule Neth 1916 only - May 1 0:00 1:00 NST # Netherlands Summer Time
|
||
@@ -1854,8 +1887,8 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Europe/Amsterdam 0:19:32 - LMT 1835
|
||
0:19:32 Neth %s 1937 Jul 1
|
||
- 0:20 Neth NE%sT 1940 May 16 0:00 # Dutch Time
|
||
- 1:00 C-Eur CE%sT 1945 Apr 2 2:00
|
||
+ 0:20 Neth NE%sT 1940 May 16 0:00 # Dutch Time
|
||
+ 1:00 C-Eur CE%sT 1945 Apr 2 2:00
|
||
1:00 Neth CE%sT 1977
|
||
1:00 EU CE%sT
|
||
|
||
@@ -1885,14 +1918,14 @@
|
||
# time they were declared as parts of Norway. Svalbard was declared
|
||
# as a part of Norway by law of 1925-07-17 no 11, section 4 and Jan
|
||
# Mayen by law of 1930-02-27 no 2, section 2. (From
|
||
-# http://www.lovdata.no/all/nl-19250717-011.html and
|
||
-# http://www.lovdata.no/all/nl-19300227-002.html). The law/regulation
|
||
+# <http://www.lovdata.no/all/nl-19250717-011.html> and
|
||
+# <http://www.lovdata.no/all/nl-19300227-002.html>). The law/regulation
|
||
# for normal/standard time in Norway is from 1894-06-29 no 1 (came
|
||
# into operation on 1895-01-01) and Svalbard/Jan Mayen seem to be a
|
||
# part of this law since 1925/1930. (From
|
||
-# http://www.lovdata.no/all/nl-18940629-001.html ) I have not been
|
||
+# <http://www.lovdata.no/all/nl-18940629-001.html>) I have not been
|
||
# able to find if Jan Mayen used a different time zone (e.g. -0100)
|
||
-# before 1930. Jan Mayen has only been "inhabitated" since 1921 by
|
||
+# before 1930. Jan Mayen has only been "inhabited" since 1921 by
|
||
# Norwegian meteorologists and maybe used the same time as Norway ever
|
||
# since 1921. Svalbard (Arctic/Longyearbyen) has been inhabited since
|
||
# before 1895, and therefore probably changed the local time somewhere
|
||
@@ -1907,7 +1940,7 @@
|
||
# <http://home.no.net/janmayen/history.htm> says that the meteorologists
|
||
# burned down their station in 1940 and left the island, but returned in
|
||
# 1941 with a small Norwegian garrison and continued operations despite
|
||
-# frequent air ttacks from Germans. In 1943 the Americans established a
|
||
+# frequent air attacks from Germans. In 1943 the Americans established a
|
||
# radiolocating station on the island, called "Atlantic City". Possibly
|
||
# the UT offset changed during the war, but I think it unlikely that
|
||
# Jan Mayen used German daylight-saving rules.
|
||
@@ -1918,7 +1951,7 @@
|
||
# <http://www.svalbard.com/SvalbardFAQ.html> says that the Germans were
|
||
# expelled on 1942-05-14. However, small parties of Germans did return,
|
||
# and according to Wilhelm Dege's book "War North of 80" (1954)
|
||
-# <http://www.ucalgary.ca/UofC/departments/UP/1-55238/1-55238-110-2.html>
|
||
+# http://www.ucalgary.ca/UofC/departments/UP/1-55238/1-55238-110-2.html
|
||
# the German armed forces at the Svalbard weather station code-named
|
||
# Haudegen did not surrender to the Allies until September 1945.
|
||
#
|
||
@@ -1927,6 +1960,10 @@
|
||
Link Europe/Oslo Arctic/Longyearbyen
|
||
|
||
# Poland
|
||
+
|
||
+# The 1919 dates and times can be found in Tygodnik Urzędowy nr 1 (1919-03-20),
|
||
+# <http://www.wbc.poznan.pl/publication/32156> pp 1-2.
|
||
+
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
Rule Poland 1918 1919 - Sep 16 2:00s 0 -
|
||
Rule Poland 1919 only - Apr 15 2:00s 1:00 S
|
||
@@ -1937,9 +1974,9 @@
|
||
Rule Poland 1945 only - Apr 29 0:00 1:00 S
|
||
Rule Poland 1945 only - Nov 1 0:00 0 -
|
||
# For 1946 on the source is Kazimierz Borkowski,
|
||
-# Torun Center for Astronomy, Dept. of Radio Astronomy, Nicolaus Copernicus U.,
|
||
-# <http://www.astro.uni.torun.pl/~kb/Artykuly/U-PA/Czas2.htm#tth_tAb1>
|
||
-# Thanks to Przemyslaw Augustyniak (2005-05-28) for this reference.
|
||
+# Toruń Center for Astronomy, Dept. of Radio Astronomy, Nicolaus Copernicus U.,
|
||
+# http://www.astro.uni.torun.pl/~kb/Artykuly/U-PA/Czas2.htm#tth_tAb1
|
||
+# Thanks to Przemysław Augustyniak (2005-05-28) for this reference.
|
||
# He also gives these further references:
|
||
# Mon Pol nr 13, poz 162 (1995) <http://www.abc.com.pl/serwis/mp/1995/0162.htm>
|
||
# Druk nr 2180 (2003) <http://www.senat.gov.pl/k5/dok/sejm/053/2180.pdf>
|
||
@@ -1959,10 +1996,10 @@
|
||
Rule Poland 1962 1964 - Sep lastSun 1:00s 0 -
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Europe/Warsaw 1:24:00 - LMT 1880
|
||
- 1:24:00 - WMT 1915 Aug 5 # Warsaw Mean Time
|
||
- 1:00 C-Eur CE%sT 1918 Sep 16 3:00
|
||
+ 1:24:00 - WMT 1915 Aug 5 # Warsaw Mean Time
|
||
+ 1:00 C-Eur CE%sT 1918 Sep 16 3:00
|
||
2:00 Poland EE%sT 1922 Jun
|
||
- 1:00 Poland CE%sT 1940 Jun 23 2:00
|
||
+ 1:00 Poland CE%sT 1940 Jun 23 2:00
|
||
1:00 C-Eur CE%sT 1944 Oct
|
||
1:00 Poland CE%sT 1977
|
||
1:00 W-Eur CE%sT 1988
|
||
@@ -1970,6 +2007,14 @@
|
||
|
||
# Portugal
|
||
#
|
||
+# From Paul Eggert (2014-08-11), after a heads-up from Stephen Colebourne:
|
||
+# According to a Portuguese decree (1911-05-26)
|
||
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
|
||
+# Lisbon was at -0:36:44.68, but switched to GMT on 1912-01-01 at 00:00.
|
||
+# Round the old offset to -0:36:45. This agrees with Willett but disagrees
|
||
+# with Shanks, who says the transition occurred on 1911-05-24 at 00:00 for
|
||
+# Europe/Lisbon, Atlantic/Azores, and Atlantic/Madeira.
|
||
+#
|
||
# From Rui Pedro Salgueiro (1992-11-12):
|
||
# Portugal has recently (September, 27) changed timezone
|
||
# (from WET to MET or CET) to harmonize with EEC.
|
||
@@ -2049,35 +2094,34 @@
|
||
Rule Port 1980 only - Mar lastSun 0:00s 1:00 S
|
||
Rule Port 1981 1982 - Mar lastSun 1:00s 1:00 S
|
||
Rule Port 1983 only - Mar lastSun 2:00s 1:00 S
|
||
+#
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-# Shanks & Pottenger say the transition from LMT to WET occurred 1911-05-24;
|
||
-# Willett says 1912-01-01. Go with Willett.
|
||
-Zone Europe/Lisbon -0:36:32 - LMT 1884
|
||
- -0:36:32 - LMT 1912 Jan 1 # Lisbon Mean Time
|
||
- 0:00 Port WE%sT 1966 Apr 3 2:00
|
||
- 1:00 - CET 1976 Sep 26 1:00
|
||
- 0:00 Port WE%sT 1983 Sep 25 1:00s
|
||
- 0:00 W-Eur WE%sT 1992 Sep 27 1:00s
|
||
- 1:00 EU CE%sT 1996 Mar 31 1:00u
|
||
+Zone Europe/Lisbon -0:36:45 - LMT 1884
|
||
+ -0:36:45 - LMT 1912 Jan 1 # Lisbon Mean Time
|
||
+ 0:00 Port WE%sT 1966 Apr 3 2:00
|
||
+ 1:00 - CET 1976 Sep 26 1:00
|
||
+ 0:00 Port WE%sT 1983 Sep 25 1:00s
|
||
+ 0:00 W-Eur WE%sT 1992 Sep 27 1:00s
|
||
+ 1:00 EU CE%sT 1996 Mar 31 1:00u
|
||
0:00 EU WE%sT
|
||
-Zone Atlantic/Azores -1:42:40 - LMT 1884 # Ponta Delgada
|
||
- -1:54:32 - HMT 1911 May 24 # Horta Mean Time
|
||
- -2:00 Port AZO%sT 1966 Apr 3 2:00 # Azores Time
|
||
- -1:00 Port AZO%sT 1983 Sep 25 1:00s
|
||
- -1:00 W-Eur AZO%sT 1992 Sep 27 1:00s
|
||
- 0:00 EU WE%sT 1993 Mar 28 1:00u
|
||
+Zone Atlantic/Azores -1:42:40 - LMT 1884 # Ponta Delgada
|
||
+ -1:54:32 - HMT 1912 Jan 1 # Horta Mean Time
|
||
+ -2:00 Port AZO%sT 1966 Apr 3 2:00 # Azores Time
|
||
+ -1:00 Port AZO%sT 1983 Sep 25 1:00s
|
||
+ -1:00 W-Eur AZO%sT 1992 Sep 27 1:00s
|
||
+ 0:00 EU WE%sT 1993 Mar 28 1:00u
|
||
-1:00 EU AZO%sT
|
||
-Zone Atlantic/Madeira -1:07:36 - LMT 1884 # Funchal
|
||
- -1:07:36 - FMT 1911 May 24 # Funchal Mean Time
|
||
- -1:00 Port MAD%sT 1966 Apr 3 2:00 # Madeira Time
|
||
- 0:00 Port WE%sT 1983 Sep 25 1:00s
|
||
+Zone Atlantic/Madeira -1:07:36 - LMT 1884 # Funchal
|
||
+ -1:07:36 - FMT 1912 Jan 1 # Funchal Mean Time
|
||
+ -1:00 Port MAD%sT 1966 Apr 3 2:00 # Madeira Time
|
||
+ 0:00 Port WE%sT 1983 Sep 25 1:00s
|
||
0:00 EU WE%sT
|
||
|
||
# Romania
|
||
#
|
||
# From Paul Eggert (1999-10-07):
|
||
-# <a href="http://www.nineoclock.ro/POL/1778pol.html">
|
||
-# Nine O'clock</a> (1998-10-23) reports that the switch occurred at
|
||
+# Nine O'clock <http://www.nineoclock.ro/POL/1778pol.html>
|
||
+# (1998-10-23) reports that the switch occurred at
|
||
# 04:00 local time in fall 1998. For lack of better info,
|
||
# assume that Romania and Moldova switched to EU rules in 1997,
|
||
# the same year as Bulgaria.
|
||
@@ -2094,32 +2138,28 @@
|
||
Rule Romania 1991 1993 - Sep lastSun 0:00s 0 -
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct
|
||
- 1:44:24 - BMT 1931 Jul 24 # Bucharest MT
|
||
- 2:00 Romania EE%sT 1981 Mar 29 2:00s
|
||
+ 1:44:24 - BMT 1931 Jul 24 # Bucharest MT
|
||
+ 2:00 Romania EE%sT 1981 Mar 29 2:00s
|
||
2:00 C-Eur EE%sT 1991
|
||
2:00 Romania EE%sT 1994
|
||
2:00 E-Eur EE%sT 1997
|
||
2:00 EU EE%sT
|
||
|
||
+
|
||
# Russia
|
||
|
||
# From Alexander Krivenyshev (2011-09-15):
|
||
# Based on last Russian Government Decree # 725 on August 31, 2011
|
||
# (Government document
|
||
-# <a href="http://www.government.ru/gov/results/16355/print/">
|
||
# http://www.government.ru/gov/results/16355/print/
|
||
-# </a>
|
||
# in Russian)
|
||
# there are few corrections have to be made for some Russian time zones...
|
||
# All updated Russian Time Zones were placed in table and translated to English
|
||
# by WorldTimeZone.com at the link below:
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_russia36.htm">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_russia36.htm
|
||
-# </a>
|
||
|
||
# From Sanjeev Gupta (2011-09-27):
|
||
# Scans of [Decree #23 of January 8, 1992] are available at:
|
||
-# <a href="http://government.consultant.ru/page.aspx?1223966">
|
||
# http://government.consultant.ru/page.aspx?1223966
|
||
# They are in Cyrillic letters (presumably Russian).
|
||
|
||
@@ -2128,16 +2168,12 @@
|
||
# changed in September 2011:
|
||
#
|
||
# One source is
|
||
-# < a href="http://government.ru/gov/results/16355/>
|
||
# http://government.ru/gov/results/16355/
|
||
-# </a>
|
||
# which, according to translate.google.com, begins "Decree of August 31,
|
||
# 2011 No 725" and contains no other dates or "effective date" information.
|
||
#
|
||
# Another source is
|
||
-# <a href="http://www.rg.ru/2011/09/06/chas-zona-dok.html">
|
||
# http://www.rg.ru/2011/09/06/chas-zona-dok.html
|
||
-# </a>
|
||
# which, according to translate.google.com, begins "Resolution of the
|
||
# Government of the Russian Federation on August 31, 2011 N 725" and also
|
||
# contains "Date first official publication: September 6, 2011 Posted on:
|
||
@@ -2145,28 +2181,45 @@
|
||
# does not contain any "effective date" information.
|
||
#
|
||
# Another source is
|
||
-# <a href="http://en.wikipedia.org/wiki/Oymyakonsky_District#cite_note-RuTime-7">
|
||
# http://en.wikipedia.org/wiki/Oymyakonsky_District#cite_note-RuTime-7
|
||
-# </a>
|
||
# which, in note 8, contains "Resolution #725 of August 31, 2011...
|
||
# Effective as of after 7 days following the day of the official publication"
|
||
# but which does not contain any reference to September 6, 2011.
|
||
#
|
||
# The Wikipedia article refers to
|
||
-# <a href="http://base.consultant.ru/cons/cgi/online.cgi?req=doc;base=LAW;n=118896">
|
||
# http://base.consultant.ru/cons/cgi/online.cgi?req=doc;base=LAW;n=118896
|
||
-# </a>
|
||
# which seems to copy the text of the government.ru page.
|
||
#
|
||
# Tobias Conradi combines Wikipedia's
|
||
# "as of after 7 days following the day of the official publication"
|
||
-# with www.rg.ru's "Date of first official publication: September 6, 2011" to get
|
||
-# September 13, 2011 as the cutover date (unusually, a Tuesday, as Tobias Conradi notes).
|
||
+# with www.rg.ru's "Date of first official publication: September 6, 2011" to
|
||
+# get September 13, 2011 as the cutover date (unusually, a Tuesday, as Tobias
|
||
+# Conradi notes).
|
||
#
|
||
# None of the sources indicates a time of day for changing clocks.
|
||
#
|
||
# Go with 2011-09-13 0:00s.
|
||
|
||
+# From Alexander Krivenyshev (2014-07-01):
|
||
+# According to the Russian news (ITAR-TASS News Agency)
|
||
+# http://en.itar-tass.com/russia/738562
|
||
+# the State Duma has approved ... the draft bill on returning to
|
||
+# winter time standard and return Russia 11 time zones. The new
|
||
+# regulations will come into effect on October 26, 2014 at 02:00 ...
|
||
+# http://asozd2.duma.gov.ru/main.nsf/%28Spravka%29?OpenAgent&RN=431985-6&02
|
||
+# Here is a link where we put together table (based on approved Bill N
|
||
+# 431985-6) with proposed 11 Russian time zones and corresponding
|
||
+# areas/cities/administrative centers in the Russian Federation (in English):
|
||
+# http://www.worldtimezone.com/dst_news/dst_news_russia65.html
|
||
+#
|
||
+# From Alexander Krivenyshev (2014-07-22):
|
||
+# Putin signed the Federal Law 431985-6 ... (in Russian)
|
||
+# http://itar-tass.com/obschestvo/1333711
|
||
+# http://www.pravo.gov.ru:8080/page.aspx?111660
|
||
+# http://www.kremlin.ru/acts/46279
|
||
+# From October 26, 2014 the new Russian time zone map will looks like this:
|
||
+# http://www.worldtimezone.com/dst_news/dst_news_russia-map-2014-07.html
|
||
+
|
||
# From Paul Eggert (2006-03-22):
|
||
# Except for Moscow after 1919-07-01, I invented the time zone abbreviations.
|
||
# Moscow time zone abbreviations after 1919-07-01, and Moscow rules after 1991,
|
||
@@ -2193,9 +2246,9 @@
|
||
#
|
||
# For Grozny, Chechnya, we have the following story from
|
||
# John Daniszewski, "Scavengers in the Rubble", Los Angeles Times (2001-02-07):
|
||
-# News--often false--is spread by word of mouth. A rumor that it was
|
||
+# News - often false - is spread by word of mouth. A rumor that it was
|
||
# time to move the clocks back put this whole city out of sync with
|
||
-# the rest of Russia for two weeks--even soldiers stationed here began
|
||
+# the rest of Russia for two weeks - even soldiers stationed here began
|
||
# enforcing curfew at the wrong time.
|
||
#
|
||
# From Gwillim Law (2001-06-05):
|
||
@@ -2206,107 +2259,265 @@
|
||
# since September 1997.... Although the Kuril Islands are
|
||
# administratively part of Sakhalin oblast', they appear to have
|
||
# remained on UTC+11 along with Magadan.
|
||
-#
|
||
+
|
||
+# From Tim Parenti (2014-07-06):
|
||
+# The comments detailing the coverage of each Russian zone are meant to assist
|
||
+# with maintenance only and represent our best guesses as to which regions
|
||
+# are covered by each zone. They are not meant to be taken as an authoritative
|
||
+# listing. The region codes listed come from
|
||
+# http://en.wikipedia.org/w/?title=Federal_subjects_of_Russia&oldid=611810498
|
||
+# and are used for convenience only; no guarantees are made regarding their
|
||
+# future stability. ISO 3166-2:RU codes are also listed for first-level
|
||
+# divisions where available.
|
||
+
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-#
|
||
-# Kaliningradskaya oblast'.
|
||
+
|
||
+
|
||
+# From Tim Parenti (2014-07-03):
|
||
+# Europe/Kaliningrad covers...
|
||
+# 39 RU-KGD Kaliningrad Oblast
|
||
+
|
||
Zone Europe/Kaliningrad 1:22:00 - LMT 1893 Apr
|
||
1:00 C-Eur CE%sT 1945
|
||
2:00 Poland CE%sT 1946
|
||
- 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
|
||
- 2:00 Russia EE%sT 2011 Mar 27 2:00s
|
||
- 3:00 - FET # Further-eastern European Time
|
||
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
|
||
+ 2:00 Russia EE%sT 2011 Mar 27 2:00s
|
||
+ 3:00 - FET 2014 Oct 26 2:00s
|
||
+ 2:00 - EET
|
||
+
|
||
+
|
||
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
|
||
+# Europe/Moscow covers...
|
||
+# 01 RU-AD Adygea, Republic of
|
||
+# 05 RU-DA Dagestan, Republic of
|
||
+# 06 RU-IN Ingushetia, Republic of
|
||
+# 07 RU-KB Kabardino-Balkar Republic
|
||
+# 08 RU-KL Kalmykia, Republic of
|
||
+# 09 RU-KC Karachay-Cherkess Republic
|
||
+# 10 RU-KR Karelia, Republic of
|
||
+# 11 RU-KO Komi Republic
|
||
+# 12 RU-ME Mari El Republic
|
||
+# 13 RU-MO Mordovia, Republic of
|
||
+# 15 RU-SE North Ossetia-Alania, Republic of
|
||
+# 16 RU-TA Tatarstan, Republic of
|
||
+# 20 RU-CE Chechen Republic
|
||
+# 21 RU-CU Chuvash Republic
|
||
+# 23 RU-KDA Krasnodar Krai
|
||
+# 26 RU-STA Stavropol Krai
|
||
+# 29 RU-ARK Arkhangelsk Oblast
|
||
+# 31 RU-BEL Belgorod Oblast
|
||
+# 32 RU-BRY Bryansk Oblast
|
||
+# 33 RU-VLA Vladimir Oblast
|
||
+# 35 RU-VLG Vologda Oblast
|
||
+# 36 RU-VOR Voronezh Oblast
|
||
+# 37 RU-IVA Ivanovo Oblast
|
||
+# 40 RU-KLU Kaluga Oblast
|
||
+# 44 RU-KOS Kostroma Oblast
|
||
+# 46 RU-KRS Kursk Oblast
|
||
+# 47 RU-LEN Leningrad Oblast
|
||
+# 48 RU-LIP Lipetsk Oblast
|
||
+# 50 RU-MOS Moscow Oblast
|
||
+# 51 RU-MUR Murmansk Oblast
|
||
+# 52 RU-NIZ Nizhny Novgorod Oblast
|
||
+# 53 RU-NGR Novgorod Oblast
|
||
+# 57 RU-ORL Oryol Oblast
|
||
+# 58 RU-PNZ Penza Oblast
|
||
+# 60 RU-PSK Pskov Oblast
|
||
+# 61 RU-ROS Rostov Oblast
|
||
+# 62 RU-RYA Ryazan Oblast
|
||
+# 67 RU-SMO Smolensk Oblast
|
||
+# 68 RU-TAM Tambov Oblast
|
||
+# 69 RU-TVE Tver Oblast
|
||
+# 71 RU-TUL Tula Oblast
|
||
+# 73 RU-ULY Ulyanovsk Oblast
|
||
+# 76 RU-YAR Yaroslavl Oblast
|
||
+# 77 RU-MOW Moscow
|
||
+# 78 RU-SPE Saint Petersburg
|
||
+# 83 RU-NEN Nenets Autonomous Okrug
|
||
+
|
||
+# From Vladimir Karpinsky (2014-07-08):
|
||
+# LMT in Moscow (before Jul 3, 1916) is 2:30:17, that was defined by Moscow
|
||
+# Observatory (coordinates: 55 deg. 45'29.70", 37 deg. 34'05.30")....
|
||
+# LMT in Moscow since Jul 3, 1916 is 2:31:01 as a result of new standard.
|
||
+# (The info is from the book by Byalokoz ... p. 18.)
|
||
+# The time in St. Petersburg as capital of Russia was defined by
|
||
+# Pulkov observatory, near St. Petersburg. In 1916 LMT Moscow
|
||
+# was synchronized with LMT St. Petersburg (+30 minutes), (Pulkov observatory
|
||
+# coordinates: 59 deg. 46'18.70", 30 deg. 19'40.70") so 30 deg. 19'40.70" >
|
||
+# 2h01m18.7s = 2:01:19. LMT Moscow = LMT St.Petersburg + 30m 2:01:19 + 0:30 =
|
||
+# 2:31:19 ...
|
||
#
|
||
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
|
||
-# Respublika Adygeya, Arkhangel'skaya oblast',
|
||
-# Belgorodskaya oblast', Bryanskaya oblast', Vladimirskaya oblast',
|
||
-# Vologodskaya oblast', Voronezhskaya oblast',
|
||
-# Respublika Dagestan, Ivanovskaya oblast', Respublika Ingushetiya,
|
||
-# Kabarbino-Balkarskaya Respublika, Respublika Kalmykiya,
|
||
-# Kalyzhskaya oblast', Respublika Karachaevo-Cherkessiya,
|
||
-# Respublika Kareliya, Respublika Komi,
|
||
-# Kostromskaya oblast', Krasnodarskij kraj, Kurskaya oblast',
|
||
-# Leningradskaya oblast', Lipetskaya oblast', Respublika Marij El,
|
||
-# Respublika Mordoviya, Moskva, Moskovskaya oblast',
|
||
-# Murmanskaya oblast', Nenetskij avtonomnyj okrug,
|
||
-# Nizhegorodskaya oblast', Novgorodskaya oblast', Orlovskaya oblast',
|
||
-# Penzenskaya oblast', Pskovskaya oblast', Rostovskaya oblast',
|
||
-# Ryazanskaya oblast', Sankt-Peterburg,
|
||
-# Respublika Severnaya Osetiya, Smolenskaya oblast',
|
||
-# Stavropol'skij kraj, Tambovskaya oblast', Respublika Tatarstan,
|
||
-# Tverskaya oblast', Tyl'skaya oblast', Ul'yanovskaya oblast',
|
||
-# Chechenskaya Respublika, Chuvashskaya oblast',
|
||
-# Yaroslavskaya oblast'
|
||
-Zone Europe/Moscow 2:30:20 - LMT 1880
|
||
- 2:30 - MMT 1916 Jul 3 # Moscow Mean Time
|
||
- 2:30:48 Russia %s 1919 Jul 1 2:00
|
||
+# From Paul Eggert (2014-07-08):
|
||
+# Milne does not list Moscow, but suggests that its time might be listed in
|
||
+# Résumés mensuels et annuels des observations météorologiques (1895).
|
||
+# Presumably this is OCLC 85825704, a journal published with parallel text in
|
||
+# Russian and French. This source has not been located; go with Karpinsky.
|
||
+
|
||
+Zone Europe/Moscow 2:30:17 - LMT 1880
|
||
+ 2:30:17 - MMT 1916 Jul 3 # Moscow Mean Time
|
||
+ 2:31:19 Russia %s 1919 Jul 1 2:00
|
||
+ 3:00 Russia %s 1921 Oct
|
||
3:00 Russia MSK/MSD 1922 Oct
|
||
2:00 - EET 1930 Jun 21
|
||
- 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
|
||
- 2:00 Russia EE%sT 1992 Jan 19 2:00s
|
||
- 3:00 Russia MSK/MSD 2011 Mar 27 2:00s
|
||
- 4:00 - MSK
|
||
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
|
||
+ 2:00 Russia EE%sT 1992 Jan 19 2:00s
|
||
+ 3:00 Russia MSK/MSD 2011 Mar 27 2:00s
|
||
+ 4:00 - MSK 2014 Oct 26 2:00s
|
||
+ 3:00 - MSK
|
||
+
|
||
+
|
||
+# From Tim Parenti (2014-07-03):
|
||
+# Europe/Simferopol covers...
|
||
+# ** **** Crimea, Republic of
|
||
+# ** **** Sevastopol
|
||
+
|
||
+Zone Europe/Simferopol 2:16:24 - LMT 1880
|
||
+ 2:16 - SMT 1924 May 2 # Simferopol Mean T
|
||
+ 2:00 - EET 1930 Jun 21
|
||
+ 3:00 - MSK 1941 Nov
|
||
+ 1:00 C-Eur CE%sT 1944 Apr 13
|
||
+ 3:00 Russia MSK/MSD 1990
|
||
+ 3:00 - MSK 1990 Jul 1 2:00
|
||
+ 2:00 - EET 1992
|
||
+# Central Crimea used Moscow time 1994/1997.
|
||
#
|
||
-# Astrakhanskaya oblast', Kirovskaya oblast', Saratovskaya oblast',
|
||
-# Volgogradskaya oblast'. Shanks & Pottenger say Kirov is still at +0400
|
||
-# but Wikipedia (2006-05-09) says +0300. Perhaps it switched after the
|
||
-# others? But we have no data.
|
||
+# From Paul Eggert (2006-03-22):
|
||
+# The _Economist_ (1994-05-28, p 45) reports that central Crimea switched
|
||
+# from Kiev to Moscow time sometime after the January 1994 elections.
|
||
+# Shanks (1999) says "date of change uncertain", but implies that it happened
|
||
+# sometime between the 1994 DST switches. Shanks & Pottenger simply say
|
||
+# 1994-09-25 03:00, but that can't be right. For now, guess it
|
||
+# changed in May.
|
||
+ 2:00 E-Eur EE%sT 1994 May
|
||
+# From IATA SSIM (1994/1997), which also says that Kerch is still like Kiev.
|
||
+ 3:00 E-Eur MSK/MSD 1996 Mar 31 3:00s
|
||
+ 3:00 1:00 MSD 1996 Oct 27 3:00s
|
||
+# IATA SSIM (1997-09) says Crimea switched to EET/EEST.
|
||
+# Assume it happened in March by not changing the clocks.
|
||
+ 3:00 Russia MSK/MSD 1997
|
||
+ 3:00 - MSK 1997 Mar lastSun 1:00u
|
||
+# From Alexander Krivenyshev (2014-03-17):
|
||
+# time change at 2:00 (2am) on March 30, 2014
|
||
+# http://vz.ru/news/2014/3/17/677464.html
|
||
+# From Paul Eggert (2014-03-30):
|
||
+# Simferopol and Sevastopol reportedly changed their central town clocks
|
||
+# late the previous day, but this appears to have been ceremonial
|
||
+# and the discrepancies are small enough to not worry about.
|
||
+ 2:00 EU EE%sT 2014 Mar 30 2:00
|
||
+ 4:00 - MSK 2014 Oct 26 2:00s
|
||
+ 3:00 - MSK
|
||
+
|
||
+
|
||
+# From Tim Parenti (2014-07-03):
|
||
+# Europe/Volgograd covers...
|
||
+# 30 RU-AST Astrakhan Oblast
|
||
+# 34 RU-VGG Volgograd Oblast
|
||
+# 43 RU-KIR Kirov Oblast
|
||
+# 64 RU-SAR Saratov Oblast
|
||
+
|
||
+# From Paul Eggert (2006-05-09):
|
||
+# Shanks & Pottenger say Kirov is still at +0400 but Wikipedia says +0300.
|
||
+# Perhaps it switched after the others? But we have no data.
|
||
+
|
||
Zone Europe/Volgograd 2:57:40 - LMT 1920 Jan 3
|
||
3:00 - TSAT 1925 Apr 6 # Tsaritsyn Time
|
||
3:00 - STAT 1930 Jun 21 # Stalingrad Time
|
||
4:00 - STAT 1961 Nov 11
|
||
- 4:00 Russia VOL%sT 1989 Mar 26 2:00s # Volgograd T
|
||
- 3:00 Russia VOL%sT 1991 Mar 31 2:00s
|
||
- 4:00 - VOLT 1992 Mar 29 2:00s
|
||
- 3:00 Russia VOL%sT 2011 Mar 27 2:00s
|
||
- 4:00 - VOLT
|
||
-#
|
||
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
|
||
-# Samarskaya oblast', Udmyrtskaya respublika
|
||
-Zone Europe/Samara 3:20:36 - LMT 1919 Jul 1 2:00
|
||
+ 4:00 Russia VOL%sT 1989 Mar 26 2:00s # Volgograd T
|
||
+ 3:00 Russia VOL%sT 1991 Mar 31 2:00s
|
||
+ 4:00 - VOLT 1992 Mar 29 2:00s
|
||
+ 3:00 Russia MSK 2011 Mar 27 2:00s
|
||
+ 4:00 - MSK 2014 Oct 26 2:00s
|
||
+ 3:00 - MSK
|
||
+
|
||
+
|
||
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
|
||
+# Europe/Samara covers...
|
||
+# 18 RU-UD Udmurt Republic
|
||
+# 63 RU-SAM Samara Oblast
|
||
+
|
||
+# Byalokoz 1919 says Samara was 3:20:20.
|
||
+
|
||
+Zone Europe/Samara 3:20:20 - LMT 1919 Jul 1 2:00
|
||
3:00 - SAMT 1930 Jun 21
|
||
4:00 - SAMT 1935 Jan 27
|
||
- 4:00 Russia KUY%sT 1989 Mar 26 2:00s # Kuybyshev
|
||
- 3:00 Russia KUY%sT 1991 Mar 31 2:00s
|
||
- 2:00 Russia KUY%sT 1991 Sep 29 2:00s
|
||
- 3:00 - KUYT 1991 Oct 20 3:00
|
||
- 4:00 Russia SAM%sT 2010 Mar 28 2:00s # Samara Time
|
||
- 3:00 Russia SAM%sT 2011 Mar 27 2:00s
|
||
+ 4:00 Russia KUY%sT 1989 Mar 26 2:00s # Kuybyshev
|
||
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
|
||
+ 2:00 Russia EE%sT 1991 Sep 29 2:00s
|
||
+ 3:00 - KUYT 1991 Oct 20 3:00
|
||
+ 4:00 Russia SAM%sT 2010 Mar 28 2:00s # Samara Time
|
||
+ 3:00 Russia SAM%sT 2011 Mar 27 2:00s
|
||
4:00 - SAMT
|
||
|
||
+
|
||
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
|
||
+# Asia/Yekaterinburg covers...
|
||
+# 02 RU-BA Bashkortostan, Republic of
|
||
+# 90 RU-PER Perm Krai
|
||
+# 45 RU-KGN Kurgan Oblast
|
||
+# 56 RU-ORE Orenburg Oblast
|
||
+# 66 RU-SVE Sverdlovsk Oblast
|
||
+# 72 RU-TYU Tyumen Oblast
|
||
+# 74 RU-CHE Chelyabinsk Oblast
|
||
+# 86 RU-KHM Khanty-Mansi Autonomous Okrug - Yugra
|
||
+# 89 RU-YAN Yamalo-Nenets Autonomous Okrug
|
||
#
|
||
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
|
||
-# Respublika Bashkortostan, Komi-Permyatskij avtonomnyj okrug,
|
||
-# Kurganskaya oblast', Orenburgskaya oblast', Permskaya oblast',
|
||
-# Sverdlovskaya oblast', Tyumenskaya oblast',
|
||
-# Khanty-Manskijskij avtonomnyj okrug, Chelyabinskaya oblast',
|
||
-# Yamalo-Nenetskij avtonomnyj okrug.
|
||
-Zone Asia/Yekaterinburg 4:02:24 - LMT 1919 Jul 15 4:00
|
||
+# Note: Effective 2005-12-01, (59) Perm Oblast and (81) Komi-Permyak
|
||
+# Autonomous Okrug merged to form (90, RU-PER) Perm Krai.
|
||
+
|
||
+# Milne says Yekaterinburg was 4:02:32.9; round to nearest.
|
||
+# Byalokoz 1919 says its provincial time was based on Perm, at 3:45:05.
|
||
+# Assume it switched on 1916-07-03, the time of the new standard.
|
||
+# The 1919 and 1930 transitions are from Shanks.
|
||
+
|
||
+Zone Asia/Yekaterinburg 4:02:33 - LMT 1916 Jul 3
|
||
+ 3:45:05 - PMT 1919 Jul 15 4:00
|
||
4:00 - SVET 1930 Jun 21 # Sverdlovsk Time
|
||
- 5:00 Russia SVE%sT 1991 Mar 31 2:00s
|
||
- 4:00 Russia SVE%sT 1992 Jan 19 2:00s
|
||
- 5:00 Russia YEK%sT 2011 Mar 27 2:00s
|
||
- 6:00 - YEKT # Yekaterinburg Time
|
||
-#
|
||
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
|
||
-# Respublika Altaj, Altajskij kraj, Omskaya oblast'.
|
||
-Zone Asia/Omsk 4:53:36 - LMT 1919 Nov 14
|
||
- 5:00 - OMST 1930 Jun 21 # Omsk TIme
|
||
- 6:00 Russia OMS%sT 1991 Mar 31 2:00s
|
||
- 5:00 Russia OMS%sT 1992 Jan 19 2:00s
|
||
- 6:00 Russia OMS%sT 2011 Mar 27 2:00s
|
||
- 7:00 - OMST
|
||
-#
|
||
+ 5:00 Russia SVE%sT 1991 Mar 31 2:00s
|
||
+ 4:00 Russia SVE%sT 1992 Jan 19 2:00s
|
||
+ 5:00 Russia YEK%sT 2011 Mar 27 2:00s
|
||
+ 6:00 - YEKT 2014 Oct 26 2:00s
|
||
+ 5:00 - YEKT
|
||
+
|
||
+
|
||
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
|
||
+# Asia/Omsk covers...
|
||
+# 04 RU-AL Altai Republic
|
||
+# 22 RU-ALT Altai Krai
|
||
+# 55 RU-OMS Omsk Oblast
|
||
+
|
||
+# Byalokoz 1919 says Omsk was 4:53:30.
|
||
+
|
||
+Zone Asia/Omsk 4:53:30 - LMT 1919 Nov 14
|
||
+ 5:00 - OMST 1930 Jun 21 # Omsk Time
|
||
+ 6:00 Russia OMS%sT 1991 Mar 31 2:00s
|
||
+ 5:00 Russia OMS%sT 1992 Jan 19 2:00s
|
||
+ 6:00 Russia OMS%sT 2011 Mar 27 2:00s
|
||
+ 7:00 - OMST 2014 Oct 26 2:00s
|
||
+ 6:00 - OMST
|
||
+
|
||
+
|
||
+# From Tim Parenti (2014-07-03):
|
||
+# Asia/Novosibirsk covers...
|
||
+# 54 RU-NVS Novosibirsk Oblast
|
||
+# 70 RU-TOM Tomsk Oblast
|
||
+
|
||
# From Paul Eggert (2006-08-19): I'm guessing about Tomsk here; it's
|
||
# not clear when it switched from +7 to +6.
|
||
-# Novosibirskaya oblast', Tomskaya oblast'.
|
||
-Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00
|
||
+
|
||
+Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00
|
||
6:00 - NOVT 1930 Jun 21 # Novosibirsk Time
|
||
- 7:00 Russia NOV%sT 1991 Mar 31 2:00s
|
||
- 6:00 Russia NOV%sT 1992 Jan 19 2:00s
|
||
+ 7:00 Russia NOV%sT 1991 Mar 31 2:00s
|
||
+ 6:00 Russia NOV%sT 1992 Jan 19 2:00s
|
||
7:00 Russia NOV%sT 1993 May 23 # say Shanks & P.
|
||
- 6:00 Russia NOV%sT 2011 Mar 27 2:00s
|
||
- 7:00 - NOVT
|
||
+ 6:00 Russia NOV%sT 2011 Mar 27 2:00s
|
||
+ 7:00 - NOVT 2014 Oct 26 2:00s
|
||
+ 6:00 - NOVT
|
||
+
|
||
+
|
||
+# From Tim Parenti (2014-07-03):
|
||
+# Asia/Novokuznetsk covers...
|
||
+# 42 RU-KEM Kemerovo Oblast
|
||
|
||
# From Alexander Krivenyshev (2009-10-13):
|
||
# Kemerovo oblast' (Kemerovo region) in Russia will change current time zone on
|
||
@@ -2319,14 +2530,10 @@
|
||
# time zone." ("Russia Zone 5" or old "USSR Zone 5" is GMT +0600)
|
||
#
|
||
# Russian Government web site (Russian language)
|
||
-# <a href="http://www.government.ru/content/governmentactivity/rfgovernmentdecisions/archiv">
|
||
# http://www.government.ru/content/governmentactivity/rfgovernmentdecisions/archive/2009/09/14/991633.htm
|
||
-# </a>
|
||
# or Russian-English translation by WorldTimeZone.com with reference
|
||
# map to local region and new Russia Time Zone map after March 28, 2010
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_russia03.html">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_russia03.html
|
||
-# </a>
|
||
#
|
||
# Thus, when Russia will switch to DST on the night of March 28, 2010
|
||
# Kemerovo region (Kemerovo oblast') will not change the clock.
|
||
@@ -2334,152 +2541,319 @@
|
||
# As a result, Kemerovo oblast' will be in the same time zone as
|
||
# Novosibirsk, Omsk, Tomsk, Barnaul and Altai Republic.
|
||
|
||
-Zone Asia/Novokuznetsk 5:48:48 - NMT 1920 Jan 6
|
||
+# From Tim Parenti (2014-07-02), per Alexander Krivenyshev (2014-07-02):
|
||
+# The Kemerovo region will remain at UTC+7 through the 2014-10-26 change, thus
|
||
+# realigning itself with KRAT.
|
||
+
|
||
+Zone Asia/Novokuznetsk 5:48:48 - LMT 1924 May 1
|
||
6:00 - KRAT 1930 Jun 21 # Krasnoyarsk Time
|
||
- 7:00 Russia KRA%sT 1991 Mar 31 2:00s
|
||
- 6:00 Russia KRA%sT 1992 Jan 19 2:00s
|
||
- 7:00 Russia KRA%sT 2010 Mar 28 2:00s
|
||
- 6:00 Russia NOV%sT 2011 Mar 27 2:00s
|
||
- 7:00 - NOVT # Novosibirsk/Novokuznetsk Time
|
||
+ 7:00 Russia KRA%sT 1991 Mar 31 2:00s
|
||
+ 6:00 Russia KRA%sT 1992 Jan 19 2:00s
|
||
+ 7:00 Russia KRA%sT 2010 Mar 28 2:00s
|
||
+ 6:00 Russia NOV%sT 2011 Mar 27 2:00s # Novosibirsk
|
||
+ 7:00 - NOVT 2014 Oct 26 2:00s
|
||
+ 7:00 - KRAT # Krasnoyarsk Time
|
||
|
||
+
|
||
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
|
||
+# Asia/Krasnoyarsk covers...
|
||
+# 17 RU-TY Tuva Republic
|
||
+# 19 RU-KK Khakassia, Republic of
|
||
+# 24 RU-KYA Krasnoyarsk Krai
|
||
#
|
||
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
|
||
-# Krasnoyarskij kraj,
|
||
-# Tajmyrskij (Dolgano-Nenetskij) avtonomnyj okrug,
|
||
-# Respublika Tuva, Respublika Khakasiya, Evenkijskij avtonomnyj okrug.
|
||
-Zone Asia/Krasnoyarsk 6:11:20 - LMT 1920 Jan 6
|
||
+# Note: Effective 2007-01-01, (88) Evenk Autonomous Okrug and (84) Taymyr
|
||
+# Autonomous Okrug were merged into (24, RU-KYA) Krasnoyarsk Krai.
|
||
+
|
||
+# Byalokoz 1919 says Krasnoyarsk was 6:11:26.
|
||
+
|
||
+Zone Asia/Krasnoyarsk 6:11:26 - LMT 1920 Jan 6
|
||
6:00 - KRAT 1930 Jun 21 # Krasnoyarsk Time
|
||
- 7:00 Russia KRA%sT 1991 Mar 31 2:00s
|
||
- 6:00 Russia KRA%sT 1992 Jan 19 2:00s
|
||
- 7:00 Russia KRA%sT 2011 Mar 27 2:00s
|
||
- 8:00 - KRAT
|
||
+ 7:00 Russia KRA%sT 1991 Mar 31 2:00s
|
||
+ 6:00 Russia KRA%sT 1992 Jan 19 2:00s
|
||
+ 7:00 Russia KRA%sT 2011 Mar 27 2:00s
|
||
+ 8:00 - KRAT 2014 Oct 26 2:00s
|
||
+ 7:00 - KRAT
|
||
+
|
||
+
|
||
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
|
||
+# Asia/Irkutsk covers...
|
||
+# 03 RU-BU Buryatia, Republic of
|
||
+# 38 RU-IRK Irkutsk Oblast
|
||
#
|
||
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
|
||
-# Respublika Buryatiya, Irkutskaya oblast',
|
||
-# Ust'-Ordynskij Buryatskij avtonomnyj okrug.
|
||
-Zone Asia/Irkutsk 6:57:20 - LMT 1880
|
||
- 6:57:20 - IMT 1920 Jan 25 # Irkutsk Mean Time
|
||
+# Note: Effective 2008-01-01, (85) Ust-Orda Buryat Autonomous Okrug was
|
||
+# merged into (38, RU-IRK) Irkutsk Oblast.
|
||
+
|
||
+# Milne 1899 says Irkutsk was 6:57:15.
|
||
+# Byalokoz 1919 says Irkutsk was 6:57:05.
|
||
+# Go with Byalokoz.
|
||
+
|
||
+Zone Asia/Irkutsk 6:57:05 - LMT 1880
|
||
+ 6:57:05 - IMT 1920 Jan 25 # Irkutsk Mean Time
|
||
7:00 - IRKT 1930 Jun 21 # Irkutsk Time
|
||
- 8:00 Russia IRK%sT 1991 Mar 31 2:00s
|
||
- 7:00 Russia IRK%sT 1992 Jan 19 2:00s
|
||
- 8:00 Russia IRK%sT 2011 Mar 27 2:00s
|
||
- 9:00 - IRKT
|
||
+ 8:00 Russia IRK%sT 1991 Mar 31 2:00s
|
||
+ 7:00 Russia IRK%sT 1992 Jan 19 2:00s
|
||
+ 8:00 Russia IRK%sT 2011 Mar 27 2:00s
|
||
+ 9:00 - IRKT 2014 Oct 26 2:00s
|
||
+ 8:00 - IRKT
|
||
+
|
||
+
|
||
+# From Tim Parenti (2014-07-06):
|
||
+# Asia/Chita covers...
|
||
+# 92 RU-ZAB Zabaykalsky Krai
|
||
#
|
||
-# From Oscar van Vlijmen (2003-10-18): [This region consists of]
|
||
-# Aginskij Buryatskij avtonomnyj okrug, Amurskaya oblast',
|
||
-# [parts of] Respublika Sakha (Yakutiya), Chitinskaya oblast'.
|
||
+# Note: Effective 2008-03-01, (75) Chita Oblast and (80) Agin-Buryat
|
||
+# Autonomous Okrug merged to form (92, RU-ZAB) Zabaykalsky Krai.
|
||
|
||
-# From Oscar van Vlijmen (2009-11-29):
|
||
-# ...some regions of [Russia] were merged with others since 2005...
|
||
-# Some names were changed, no big deal, except for one instance: a new name.
|
||
-# YAK/YAKST: UTC+9 Zabajkal'skij kraj.
|
||
+Zone Asia/Chita 7:33:52 - LMT 1919 Dec 15
|
||
+ 8:00 - YAKT 1930 Jun 21 # Yakutsk Time
|
||
+ 9:00 Russia YAK%sT 1991 Mar 31 2:00s
|
||
+ 8:00 Russia YAK%sT 1992 Jan 19 2:00s
|
||
+ 9:00 Russia YAK%sT 2011 Mar 27 2:00s
|
||
+ 10:00 - YAKT 2014 Oct 26 2:00s
|
||
+ 8:00 - IRKT
|
||
|
||
-# From Oscar van Vlijmen (2009-11-29):
|
||
-# The Sakha districts are: Aldanskij, Amginskij, Anabarskij,
|
||
-# Verkhnevilyujskij, Vilyujskij, Gornyj,
|
||
-# Zhiganskij, Kobyajskij, Lenskij, Megino-Kangalasskij, Mirninskij,
|
||
-# Namskij, Nyurbinskij, Olenyokskij, Olyokminskij,
|
||
-# Suntarskij, Tattinskij, Ust'-Aldanskij, Khangalasskij,
|
||
-# Churapchinskij, Eveno-Bytantajskij Natsional'nij.
|
||
|
||
-Zone Asia/Yakutsk 8:38:40 - LMT 1919 Dec 15
|
||
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
|
||
+# Asia/Yakutsk covers...
|
||
+# 28 RU-AMU Amur Oblast
|
||
+#
|
||
+# ...and parts of (14, RU-SA) Sakha (Yakutia) Republic:
|
||
+# 14-02 **** Aldansky District
|
||
+# 14-04 **** Amginsky District
|
||
+# 14-05 **** Anabarsky District
|
||
+# 14-06 **** Bulunsky District
|
||
+# 14-07 **** Verkhnevilyuysky District
|
||
+# 14-10 **** Vilyuysky District
|
||
+# 14-11 **** Gorny District
|
||
+# 14-12 **** Zhigansky District
|
||
+# 14-13 **** Kobyaysky District
|
||
+# 14-14 **** Lensky District
|
||
+# 14-15 **** Megino-Kangalassky District
|
||
+# 14-16 **** Mirninsky District
|
||
+# 14-18 **** Namsky District
|
||
+# 14-19 **** Neryungrinsky District
|
||
+# 14-21 **** Nyurbinsky District
|
||
+# 14-23 **** Olenyoksky District
|
||
+# 14-24 **** Olyokminsky District
|
||
+# 14-26 **** Suntarsky District
|
||
+# 14-27 **** Tattinsky District
|
||
+# 14-29 **** Ust-Aldansky District
|
||
+# 14-32 **** Khangalassky District
|
||
+# 14-33 **** Churapchinsky District
|
||
+# 14-34 **** Eveno-Bytantaysky National District
|
||
+
|
||
+# From Tim Parenti (2014-07-03):
|
||
+# Our commentary seems to have lost mention of (14-19) Neryungrinsky District.
|
||
+# Since the surrounding districts of Sakha are all YAKT, assume this is, too.
|
||
+# Also assume its history has been the same as the rest of Asia/Yakutsk.
|
||
+
|
||
+# Byalokoz 1919 says Yakutsk was 8:38:58.
|
||
+
|
||
+Zone Asia/Yakutsk 8:38:58 - LMT 1919 Dec 15
|
||
8:00 - YAKT 1930 Jun 21 # Yakutsk Time
|
||
- 9:00 Russia YAK%sT 1991 Mar 31 2:00s
|
||
- 8:00 Russia YAK%sT 1992 Jan 19 2:00s
|
||
- 9:00 Russia YAK%sT 2011 Mar 27 2:00s
|
||
- 10:00 - YAKT
|
||
+ 9:00 Russia YAK%sT 1991 Mar 31 2:00s
|
||
+ 8:00 Russia YAK%sT 1992 Jan 19 2:00s
|
||
+ 9:00 Russia YAK%sT 2011 Mar 27 2:00s
|
||
+ 10:00 - YAKT 2014 Oct 26 2:00s
|
||
+ 9:00 - YAKT
|
||
+
|
||
+
|
||
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
|
||
+# Asia/Vladivostok covers...
|
||
+# 25 RU-PRI Primorsky Krai
|
||
+# 27 RU-KHA Khabarovsk Krai
|
||
+# 79 RU-YEV Jewish Autonomous Oblast
|
||
#
|
||
-# From Oscar van Vlijmen (2003-10-18): [This region consists of]
|
||
-# Evrejskaya avtonomnaya oblast', Khabarovskij kraj, Primorskij kraj,
|
||
-# [parts of] Respublika Sakha (Yakutiya).
|
||
+# ...and parts of (14, RU-SA) Sakha (Yakutia) Republic:
|
||
+# 14-09 **** Verkhoyansky District
|
||
+# 14-31 **** Ust-Yansky District
|
||
|
||
-# From Oscar van Vlijmen (2009-11-29):
|
||
-# The Sakha districts are: Bulunskij, Verkhoyanskij, ... Ust'-Yanskij.
|
||
-Zone Asia/Vladivostok 8:47:44 - LMT 1922 Nov 15
|
||
+# Milne 1899 says Vladivostok was 8:47:33.5.
|
||
+# Byalokoz 1919 says Vladivostok was 8:47:31.
|
||
+# Go with Byalokoz.
|
||
+
|
||
+Zone Asia/Vladivostok 8:47:31 - LMT 1922 Nov 15
|
||
9:00 - VLAT 1930 Jun 21 # Vladivostok Time
|
||
- 10:00 Russia VLA%sT 1991 Mar 31 2:00s
|
||
- 9:00 Russia VLA%sST 1992 Jan 19 2:00s
|
||
- 10:00 Russia VLA%sT 2011 Mar 27 2:00s
|
||
- 11:00 - VLAT
|
||
+ 10:00 Russia VLA%sT 1991 Mar 31 2:00s
|
||
+ 9:00 Russia VLA%sT 1992 Jan 19 2:00s
|
||
+ 10:00 Russia VLA%sT 2011 Mar 27 2:00s
|
||
+ 11:00 - VLAT 2014 Oct 26 2:00s
|
||
+ 10:00 - VLAT
|
||
+
|
||
+
|
||
+# From Tim Parenti (2014-07-03):
|
||
+# Asia/Khandyga covers parts of (14, RU-SA) Sakha (Yakutia) Republic:
|
||
+# 14-28 **** Tomponsky District
|
||
+# 14-30 **** Ust-Maysky District
|
||
|
||
# From Arthur David Olson (2012-05-09):
|
||
# Tomponskij and Ust'-Majskij switched from Vladivostok time to Yakutsk time
|
||
# in 2011.
|
||
-#
|
||
+
|
||
# From Paul Eggert (2012-11-25):
|
||
# Shanks and Pottenger (2003) has Khandyga on Yakutsk time.
|
||
# Make a wild guess that it switched to Vladivostok time in 2004.
|
||
# This transition is no doubt wrong, but we have no better info.
|
||
-#
|
||
+
|
||
Zone Asia/Khandyga 9:02:13 - LMT 1919 Dec 15
|
||
8:00 - YAKT 1930 Jun 21 # Yakutsk Time
|
||
- 9:00 Russia YAK%sT 1991 Mar 31 2:00s
|
||
- 8:00 Russia YAK%sT 1992 Jan 19 2:00s
|
||
+ 9:00 Russia YAK%sT 1991 Mar 31 2:00s
|
||
+ 8:00 Russia YAK%sT 1992 Jan 19 2:00s
|
||
9:00 Russia YAK%sT 2004
|
||
- 10:00 Russia VLA%sT 2011 Mar 27 2:00s
|
||
- 11:00 - VLAT 2011 Sep 13 0:00s # Decree 725?
|
||
- 10:00 - YAKT
|
||
+ 10:00 Russia VLA%sT 2011 Mar 27 2:00s
|
||
+ 11:00 - VLAT 2011 Sep 13 0:00s # Decree 725?
|
||
+ 10:00 - YAKT 2014 Oct 26 2:00s
|
||
+ 9:00 - YAKT
|
||
|
||
-#
|
||
-# Sakhalinskaya oblast'.
|
||
-# The Zone name should be Yuzhno-Sakhalinsk, but that's too long.
|
||
+
|
||
+# From Tim Parenti (2014-07-03):
|
||
+# Asia/Sakhalin covers...
|
||
+# 65 RU-SAK Sakhalin Oblast
|
||
+# ...with the exception of:
|
||
+# 65-11 **** Severo-Kurilsky District (North Kuril Islands)
|
||
+
|
||
+# The Zone name should be Asia/Yuzhno-Sakhalinsk, but that's too long.
|
||
Zone Asia/Sakhalin 9:30:48 - LMT 1905 Aug 23
|
||
- 9:00 - CJT 1938
|
||
+ 9:00 - JCST 1937 Oct 1
|
||
9:00 - JST 1945 Aug 25
|
||
- 11:00 Russia SAK%sT 1991 Mar 31 2:00s # Sakhalin T.
|
||
- 10:00 Russia SAK%sT 1992 Jan 19 2:00s
|
||
- 11:00 Russia SAK%sT 1997 Mar lastSun 2:00s
|
||
- 10:00 Russia SAK%sT 2011 Mar 27 2:00s
|
||
- 11:00 - SAKT
|
||
-#
|
||
-# From Oscar van Vlijmen (2003-10-18): [This region consists of]
|
||
-# Magadanskaya oblast', Respublika Sakha (Yakutiya).
|
||
-# Probably also: Kuril Islands.
|
||
+ 11:00 Russia SAK%sT 1991 Mar 31 2:00s # Sakhalin T
|
||
+ 10:00 Russia SAK%sT 1992 Jan 19 2:00s
|
||
+ 11:00 Russia SAK%sT 1997 Mar lastSun 2:00s
|
||
+ 10:00 Russia SAK%sT 2011 Mar 27 2:00s
|
||
+ 11:00 - SAKT 2014 Oct 26 2:00s
|
||
+ 10:00 - SAKT
|
||
|
||
-# From Oscar van Vlijmen (2009-11-29):
|
||
-# The Sakha districts are: Abyjskij, Allaikhovskij, Verkhhhnekolymskij, Momskij,
|
||
-# Nizhnekolymskij, ... Srednekolymskij.
|
||
+
|
||
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
|
||
+# Asia/Magadan covers...
|
||
+# 49 RU-MAG Magadan Oblast
|
||
+
|
||
+# From Tim Parenti (2014-07-06), per Alexander Krivenyshev (2014-07-02):
|
||
+# Magadan Oblast is moving from UTC+12 to UTC+10 on 2014-10-26; however,
|
||
+# several districts of Sakha Republic as well as Severo-Kurilsky District of
|
||
+# the Sakhalin Oblast (also known as the North Kuril Islands), represented
|
||
+# until now by Asia/Magadan, will instead move to UTC+11. These regions will
|
||
+# need their own zone.
|
||
+
|
||
Zone Asia/Magadan 10:03:12 - LMT 1924 May 2
|
||
10:00 - MAGT 1930 Jun 21 # Magadan Time
|
||
- 11:00 Russia MAG%sT 1991 Mar 31 2:00s
|
||
- 10:00 Russia MAG%sT 1992 Jan 19 2:00s
|
||
- 11:00 Russia MAG%sT 2011 Mar 27 2:00s
|
||
- 12:00 - MAGT
|
||
+ 11:00 Russia MAG%sT 1991 Mar 31 2:00s
|
||
+ 10:00 Russia MAG%sT 1992 Jan 19 2:00s
|
||
+ 11:00 Russia MAG%sT 2011 Mar 27 2:00s
|
||
+ 12:00 - MAGT 2014 Oct 26 2:00s
|
||
+ 10:00 - MAGT
|
||
+
|
||
+
|
||
+# From Tim Parenti (2014-07-06):
|
||
+# Asia/Srednekolymsk covers parts of (14, RU-SA) Sakha (Yakutia) Republic:
|
||
+# 14-01 **** Abyysky District
|
||
+# 14-03 **** Allaikhovsky District
|
||
+# 14-08 **** Verkhnekolymsky District
|
||
+# 14-17 **** Momsky District
|
||
+# 14-20 **** Nizhnekolymsky District
|
||
+# 14-25 **** Srednekolymsky District
|
||
+#
|
||
+# ...and parts of (65, RU-SAK) Sakhalin Oblast:
|
||
+# 65-11 **** Severo-Kurilsky District (North Kuril Islands)
|
||
+
|
||
+# From Tim Parenti (2014-07-02):
|
||
+# Oymyakonsky District of Sakha Republic (represented by Ust-Nera), along with
|
||
+# most of Sakhalin Oblast (represented by Sakhalin) will be moving to UTC+10 on
|
||
+# 2014-10-26 to stay aligned with VLAT/SAKT; however, Severo-Kurilsky District
|
||
+# of the Sakhalin Oblast (also known as the North Kuril Islands, represented by
|
||
+# Severo-Kurilsk) will remain on UTC+11.
|
||
+
|
||
+# From Tim Parenti (2014-07-06):
|
||
+# Assume North Kuril Islands have history like Magadan before 2011-03-27.
|
||
+# There is a decent chance this is wrong, in which case a new zone
|
||
+# Asia/Severo-Kurilsk would become necessary.
|
||
+#
|
||
+# Srednekolymsk and Zyryanka are the most populous places amongst these
|
||
+# districts, but have very similar populations. In fact, Wikipedia currently
|
||
+# lists them both as having 3528 people, exactly 1668 males and 1860 females
|
||
+# each! (Yikes!)
|
||
+# http://en.wikipedia.org/w/?title=Srednekolymsky_District&oldid=603435276
|
||
+# http://en.wikipedia.org/w/?title=Verkhnekolymsky_District&oldid=594378493
|
||
+# Assume this is a mistake, albeit an amusing one.
|
||
+#
|
||
+# Looking at censuses, the populations of the two municipalities seem to have
|
||
+# fluctuated recently. Zyryanka was more populous than Srednekolymsk in the
|
||
+# 1989 and 2002 censuses, but Srednekolymsk was more populous in the most
|
||
+# recent (2010) census, 3525 to 3170. (See pages 195 and 197 of
|
||
+# http://www.gks.ru/free_doc/new_site/perepis2010/croc/Documents/Vol1/pub-01-05.pdf
|
||
+# in Russian.) In addition, Srednekolymsk appears to be a much older
|
||
+# settlement and the population of Zyryanka seems to be declining.
|
||
+# Go with Srednekolymsk.
|
||
+#
|
||
+# Since Magadan Oblast moves to UTC+10 on 2014-10-26, we cannot keep using MAGT
|
||
+# as the abbreviation. Use SRET instead.
|
||
+
|
||
+Zone Asia/Srednekolymsk 10:14:52 - LMT 1924 May 2
|
||
+ 10:00 - MAGT 1930 Jun 21 # Magadan Time
|
||
+ 11:00 Russia MAG%sT 1991 Mar 31 2:00s
|
||
+ 10:00 Russia MAG%sT 1992 Jan 19 2:00s
|
||
+ 11:00 Russia MAG%sT 2011 Mar 27 2:00s
|
||
+ 12:00 - MAGT 2014 Oct 26 2:00s
|
||
+ 11:00 - SRET # Srednekolymsk Time
|
||
+
|
||
+
|
||
+# From Tim Parenti (2014-07-03):
|
||
+# Asia/Ust-Nera covers parts of (14, RU-SA) Sakha (Yakutia) Republic:
|
||
+# 14-22 **** Oymyakonsky District
|
||
|
||
# From Arthur David Olson (2012-05-09):
|
||
-# Ojmyakonskij and the Kuril Islands switched from
|
||
+# Ojmyakonskij [and the Kuril Islands] switched from
|
||
# Magadan time to Vladivostok time in 2011.
|
||
+#
|
||
+# From Tim Parenti (2014-07-06), per Alexander Krivenyshev (2014-07-02):
|
||
+# It's unlikely that any of the Kuril Islands were involved in such a switch,
|
||
+# as the South and Middle Kurils have been on UTC+11 (SAKT) with the rest of
|
||
+# Sakhalin Oblast since at least 2011-09, and the North Kurils have been on
|
||
+# UTC+12 since at least then, too.
|
||
+
|
||
Zone Asia/Ust-Nera 9:32:54 - LMT 1919 Dec 15
|
||
8:00 - YAKT 1930 Jun 21 # Yakutsk Time
|
||
9:00 Russia YAKT 1981 Apr 1
|
||
- 11:00 Russia MAG%sT 1991 Mar 31 2:00s
|
||
- 10:00 Russia MAG%sT 1992 Jan 19 2:00s
|
||
- 11:00 Russia MAG%sT 2011 Mar 27 2:00s
|
||
- 12:00 - MAGT 2011 Sep 13 0:00s # Decree 725?
|
||
- 11:00 - VLAT
|
||
+ 11:00 Russia MAG%sT 1991 Mar 31 2:00s
|
||
+ 10:00 Russia MAG%sT 1992 Jan 19 2:00s
|
||
+ 11:00 Russia MAG%sT 2011 Mar 27 2:00s
|
||
+ 12:00 - MAGT 2011 Sep 13 0:00s # Decree 725?
|
||
+ 11:00 - VLAT 2014 Oct 26 2:00s
|
||
+ 10:00 - VLAT
|
||
|
||
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
|
||
-# Kamchatskaya oblast', Koryakskij avtonomnyj okrug.
|
||
+
|
||
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
|
||
+# Asia/Kamchatka covers...
|
||
+# 91 RU-KAM Kamchatka Krai
|
||
#
|
||
-# The Zone name should be Asia/Petropavlovsk-Kamchatski, but that's too long.
|
||
+# Note: Effective 2007-07-01, (41) Kamchatka Oblast and (82) Koryak
|
||
+# Autonomous Okrug merged to form (91, RU-KAM) Kamchatka Krai.
|
||
+
|
||
+# The Zone name should be Asia/Petropavlovsk-Kamchatski or perhaps
|
||
+# Asia/Petropavlovsk-Kamchatsky, but these are too long.
|
||
Zone Asia/Kamchatka 10:34:36 - LMT 1922 Nov 10
|
||
11:00 - PETT 1930 Jun 21 # P-K Time
|
||
- 12:00 Russia PET%sT 1991 Mar 31 2:00s
|
||
- 11:00 Russia PET%sT 1992 Jan 19 2:00s
|
||
- 12:00 Russia PET%sT 2010 Mar 28 2:00s
|
||
- 11:00 Russia PET%sT 2011 Mar 27 2:00s
|
||
+ 12:00 Russia PET%sT 1991 Mar 31 2:00s
|
||
+ 11:00 Russia PET%sT 1992 Jan 19 2:00s
|
||
+ 12:00 Russia PET%sT 2010 Mar 28 2:00s
|
||
+ 11:00 Russia PET%sT 2011 Mar 27 2:00s
|
||
12:00 - PETT
|
||
-#
|
||
-# Chukotskij avtonomnyj okrug
|
||
+
|
||
+
|
||
+# From Tim Parenti (2014-07-03):
|
||
+# Asia/Anadyr covers...
|
||
+# 87 RU-CHU Chukotka Autonomous Okrug
|
||
+
|
||
Zone Asia/Anadyr 11:49:56 - LMT 1924 May 2
|
||
12:00 - ANAT 1930 Jun 21 # Anadyr Time
|
||
- 13:00 Russia ANA%sT 1982 Apr 1 0:00s
|
||
- 12:00 Russia ANA%sT 1991 Mar 31 2:00s
|
||
- 11:00 Russia ANA%sT 1992 Jan 19 2:00s
|
||
- 12:00 Russia ANA%sT 2010 Mar 28 2:00s
|
||
- 11:00 Russia ANA%sT 2011 Mar 27 2:00s
|
||
+ 13:00 Russia ANA%sT 1982 Apr 1 0:00s
|
||
+ 12:00 Russia ANA%sT 1991 Mar 31 2:00s
|
||
+ 11:00 Russia ANA%sT 1992 Jan 19 2:00s
|
||
+ 12:00 Russia ANA%sT 2010 Mar 28 2:00s
|
||
+ 11:00 Russia ANA%sT 2011 Mar 27 2:00s
|
||
12:00 - ANAT
|
||
|
||
+
|
||
# San Marino
|
||
# See Europe/Rome.
|
||
|
||
@@ -2488,11 +2862,11 @@
|
||
Zone Europe/Belgrade 1:22:00 - LMT 1884
|
||
1:00 - CET 1941 Apr 18 23:00
|
||
1:00 C-Eur CE%sT 1945
|
||
- 1:00 - CET 1945 May 8 2:00s
|
||
+ 1:00 - CET 1945 May 8 2:00s
|
||
1:00 1:00 CEST 1945 Sep 16 2:00s
|
||
-# Metod Kozelj reports that the legal date of
|
||
+# Metod Koželj reports that the legal date of
|
||
# transition to EU rules was 1982-11-27, for all of Yugoslavia at the time.
|
||
-# Shanks & Pottenger don't give as much detail, so go with Kozelj.
|
||
+# Shanks & Pottenger don't give as much detail, so go with Koželj.
|
||
1:00 - CET 1982 Nov 27
|
||
1:00 EU CE%sT
|
||
Link Europe/Belgrade Europe/Ljubljana # Slovenia
|
||
@@ -2568,13 +2942,13 @@
|
||
0:00 1:00 WEST 1918 Oct 7 23:00
|
||
0:00 - WET 1924
|
||
0:00 Spain WE%sT 1929
|
||
- 0:00 SpainAfrica WE%sT 1984 Mar 16
|
||
+ 0:00 SpainAfrica WE%sT 1984 Mar 16
|
||
1:00 - CET 1986
|
||
1:00 EU CE%sT
|
||
Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
|
||
- -1:00 - CANT 1946 Sep 30 1:00 # Canaries Time
|
||
- 0:00 - WET 1980 Apr 6 0:00s
|
||
- 0:00 1:00 WEST 1980 Sep 28 0:00s
|
||
+ -1:00 - CANT 1946 Sep 30 1:00 # Canaries T
|
||
+ 0:00 - WET 1980 Apr 6 0:00s
|
||
+ 0:00 1:00 WEST 1980 Sep 28 0:00s
|
||
0:00 EU WE%sT
|
||
# IATA SSIM (1996-09) says the Canaries switch at 2:00u, not 1:00u.
|
||
# Ignore this for now, as the Canaries are part of the EU.
|
||
@@ -2583,7 +2957,7 @@
|
||
|
||
# From Ivan Nilsson (2001-04-13), superseding Shanks & Pottenger:
|
||
#
|
||
-# The law "Svensk forfattningssamling 1878, no 14" about standard time in 1879:
|
||
+# The law "Svensk författningssamling 1878, no 14" about standard time in 1879:
|
||
# From the beginning of 1879 (that is 01-01 00:00) the time for all
|
||
# places in the country is "the mean solar time for the meridian at
|
||
# three degrees, or twelve minutes of time, to the west of the
|
||
@@ -2594,7 +2968,7 @@
|
||
# national standard time as 01:00:14 ahead of GMT....
|
||
#
|
||
# About the beginning of CET in Sweden. The lawtext ("Svensk
|
||
-# forfattningssamling 1899, no 44") states, that "from the beginning
|
||
+# författningssamling 1899, no 44") states, that "from the beginning
|
||
# of 1900... ... the same as the mean solar time for the meridian at
|
||
# the distance of one hour of time from the meridian of the English
|
||
# observatory at Greenwich, or at 12 minutes 14 seconds to the west
|
||
@@ -2602,7 +2976,7 @@
|
||
# 1899-06-16. In short: At 1900-01-01 00:00:00 the new standard time
|
||
# in Sweden is 01:00:00 ahead of GMT.
|
||
#
|
||
-# 1916: The lawtext ("Svensk forfattningssamling 1916, no 124") states
|
||
+# 1916: The lawtext ("Svensk författningssamling 1916, no 124") states
|
||
# that "1916-05-15 is considered to begin one hour earlier". It is
|
||
# pretty obvious that at 05-14 23:00 the clocks are set to 05-15 00:00....
|
||
# Further the law says, that "1916-09-30 is considered to end one hour later".
|
||
@@ -2612,7 +2986,7 @@
|
||
# not available on the site (to my knowledge they are only available
|
||
# in Swedish): <http://www.riksdagen.se/english/work/sfst.asp> (type
|
||
# "sommartid" without the quotes in the field "Fritext" and then click
|
||
-# the Sok-button).
|
||
+# the Sök-button).
|
||
#
|
||
# (2001-05-13):
|
||
#
|
||
@@ -2627,9 +3001,9 @@
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Europe/Stockholm 1:12:12 - LMT 1879 Jan 1
|
||
- 1:00:14 - SET 1900 Jan 1 # Swedish Time
|
||
+ 1:00:14 - SET 1900 Jan 1 # Swedish Time
|
||
1:00 - CET 1916 May 14 23:00
|
||
- 1:00 1:00 CEST 1916 Oct 1 01:00
|
||
+ 1:00 1:00 CEST 1916 Oct 1 1:00
|
||
1:00 - CET 1980
|
||
1:00 EU CE%sT
|
||
|
||
@@ -2637,7 +3011,7 @@
|
||
# From Howse:
|
||
# By the end of the 18th century clocks and watches became commonplace
|
||
# and their performance improved enormously. Communities began to keep
|
||
-# mean time in preference to apparent time -- Geneva from 1780 ....
|
||
+# mean time in preference to apparent time - Geneva from 1780 ....
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
# From Whitman (who writes "Midnight?"):
|
||
# Rule Swiss 1940 only - Nov 2 0:00 1:00 S
|
||
@@ -2653,7 +3027,7 @@
|
||
# to be wrong. This is now verified.
|
||
#
|
||
# I have found copies of the original ruling by the Swiss Federal
|
||
-# government, in 'Eidgen[o]ssische Gesetzessammlung 1941 and 1942' (Swiss
|
||
+# government, in 'Eidgenössische Gesetzessammlung 1941 and 1942' (Swiss
|
||
# federal law collection)...
|
||
#
|
||
# DST began on Monday 5 May 1941, 1:00 am by shifting the clocks to 2:00 am
|
||
@@ -2672,7 +3046,7 @@
|
||
# night as an absolute novelty, because this was the first time that such
|
||
# a thing had happened in Switzerland.
|
||
#
|
||
-# I have also checked 1916, because one book source (Gabriel, Traite de
|
||
+# I have also checked 1916, because one book source (Gabriel, Traité de
|
||
# l'heure dans le monde) claims that Switzerland had DST in 1916. This is
|
||
# false, no official document could be found. Probably Gabriel got misled
|
||
# by references to Germany, which introduced DST in 1916 for the first time.
|
||
@@ -2686,19 +3060,19 @@
|
||
# One further detail for Switzerland, which is probably out of scope for
|
||
# most users of tzdata: The [Europe/Zurich zone] ...
|
||
# describes all of Switzerland correctly, with the exception of
|
||
-# the Cantone Geneve (Geneva, Genf). Between 1848 and 1894 Geneve did not
|
||
+# the Canton de Genève (Geneva, Genf). Between 1848 and 1894 Geneva did not
|
||
# follow Bern Mean Time but kept its own local mean time.
|
||
# To represent this, an extra zone would be needed.
|
||
#
|
||
# From Alois Treindl (2013-09-11):
|
||
# The Federal regulations say
|
||
# http://www.admin.ch/opc/de/classified-compilation/20071096/index.html
|
||
-# ... the meridian for Bern mean time ... is 7 degrees 26'22.50".
|
||
+# ... the meridian for Bern mean time ... is 7 degrees 26' 22.50".
|
||
# Expressed in time, it is 0h29m45.5s.
|
||
|
||
# From Pierre-Yves Berger (2013-09-11):
|
||
-# the "Circulaire du conseil federal" (December 11 1893)
|
||
-# <http://www.amtsdruckschriften.bar.admin.ch/viewOrigDoc.do?id=10071353> ...
|
||
+# the "Circulaire du conseil fédéral" (December 11 1893)
|
||
+# http://www.amtsdruckschriften.bar.admin.ch/viewOrigDoc.do?id=10071353
|
||
# clearly states that the [1894-06-01] change should be done at midnight
|
||
# but if no one is present after 11 at night, could be postponed until one
|
||
# hour before the beginning of service.
|
||
@@ -2709,14 +3083,14 @@
|
||
# We can find no reliable source for Shanks's assertion that all of Switzerland
|
||
# except Geneva switched to Bern Mean Time at 00:00 on 1848-09-12. This book:
|
||
#
|
||
-# Jakob Messerli. Gleichmassig, punktlich, schnell: Zeiteinteilung und
|
||
+# Jakob Messerli. Gleichmässig, pünktlich, schnell. Zeiteinteilung und
|
||
# Zeitgebrauch in der Schweiz im 19. Jahrhundert. Chronos, Zurich 1995,
|
||
# ISBN 3-905311-68-2, OCLC 717570797.
|
||
#
|
||
# suggests that the transition was more gradual, and that the Swiss did not
|
||
# agree about civil time during the transition. The timekeeping it gives the
|
||
# most detail for is postal and telegraph time: here, federal legislation (the
|
||
-# "Bundesgesetz uber die Erstellung von elektrischen Telegraphen") passed on
|
||
+# "Bundesgesetz über die Erstellung von elektrischen Telegraphen") passed on
|
||
# 1851-11-23, and an official implementation notice was published 1853-07-16
|
||
# (Bundesblatt 1853, Bd. II, S. 859). On p 72 Messerli writes that in
|
||
# practice since July 1853 Bernese time was used in "all postal and telegraph
|
||
@@ -2730,7 +3104,7 @@
|
||
Rule Swiss 1941 1942 - Oct Mon>=1 2:00 0 -
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Europe/Zurich 0:34:08 - LMT 1853 Jul 16 # See above comment.
|
||
- 0:29:46 - BMT 1894 Jun # Bern Mean Time
|
||
+ 0:29:46 - BMT 1894 Jun # Bern Mean Time
|
||
1:00 Swiss CE%sT 1981
|
||
1:00 EU CE%sT
|
||
|
||
@@ -2738,7 +3112,7 @@
|
||
|
||
# From Amar Devegowda (2007-01-03):
|
||
# The time zone rules for Istanbul, Turkey have not been changed for years now.
|
||
-# ... The latest rules are available at -
|
||
+# ... The latest rules are available at:
|
||
# http://www.timeanddate.com/worldclock/timezone.html?n=107
|
||
# From Steffen Thorsen (2007-01-03):
|
||
# I have been able to find press records back to 1996 which all say that
|
||
@@ -2763,8 +3137,7 @@
|
||
# (on a non-government server though) describing dates between 2002 and 2006:
|
||
# http://www.alomaliye.com/bkk_2002_3769.htm
|
||
|
||
-# From Gökdeniz Karadağ (2011-03-10):
|
||
-#
|
||
+# From Gökdeniz Karadağ (2011-03-10):
|
||
# According to the articles linked below, Turkey will change into summer
|
||
# time zone (GMT+3) on March 28, 2011 at 3:00 a.m. instead of March 27.
|
||
# This change is due to a nationwide exam on 27th.
|
||
@@ -2777,9 +3150,16 @@
|
||
# Turkish Local election....
|
||
# http://www.sabah.com.tr/Ekonomi/2014/02/12/yaz-saatinde-onemli-degisiklik
|
||
# ... so Turkey will move clocks forward one hour on March 31 at 3:00 a.m.
|
||
-# From Paul Eggert (2014-02-17):
|
||
-# Here is an English-language source:
|
||
-# http://www.worldbulletin.net/turkey/129016/turkey-switches-to-daylight-saving-time-march-31
|
||
+# From Randal L. Schwartz (2014-04-15):
|
||
+# Having landed on a flight from the states to Istanbul (via AMS) on March 31,
|
||
+# I can tell you that NOBODY (even the airlines) respected this timezone DST
|
||
+# change delay. Maybe the word just didn't get out in time.
|
||
+# From Paul Eggert (2014-06-15):
|
||
+# The press reported massive confusion, as election officials obeyed the rule
|
||
+# change but cell phones (and airline baggage systems) did not. See:
|
||
+# Kostidis M. Eventful elections in Turkey. Balkan News Agency
|
||
+# http://www.balkaneu.com/eventful-elections-turkey/ 2014-03-30.
|
||
+# I guess the best we can do is document the official time.
|
||
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
Rule Turkey 1916 only - May 1 0:00 1:00 S
|
||
@@ -2846,10 +3226,10 @@
|
||
2:00 Turkey EE%sT 1978 Oct 15
|
||
3:00 Turkey TR%sT 1985 Apr 20 # Turkey Time
|
||
2:00 Turkey EE%sT 2007
|
||
- 2:00 EU EE%sT 2011 Mar 27 1:00u
|
||
- 2:00 - EET 2011 Mar 28 1:00u
|
||
- 2:00 EU EE%sT 2014 Mar 30 1:00u
|
||
- 2:00 - EET 2014 Mar 31 1:00u
|
||
+ 2:00 EU EE%sT 2011 Mar 27 1:00u
|
||
+ 2:00 - EET 2011 Mar 28 1:00u
|
||
+ 2:00 EU EE%sT 2014 Mar 30 1:00u
|
||
+ 2:00 - EET 2014 Mar 31 1:00u
|
||
2:00 EU EE%sT
|
||
Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
|
||
|
||
@@ -2870,7 +3250,7 @@
|
||
# Bill number 8330 of MP from the Party of Regions Oleg Nadoshi got
|
||
# approval from 266 deputies.
|
||
#
|
||
-# Ukraine abolishes transter back to the winter time (in Russian)
|
||
+# Ukraine abolishes transfer back to the winter time (in Russian)
|
||
# http://news.mail.ru/politics/6861560/
|
||
#
|
||
# The Ukrainians will no longer change the clock (in Russian)
|
||
@@ -2931,12 +3311,12 @@
|
||
2:00 - EET 1930 Jun 21
|
||
3:00 - MSK 1941 Sep 20
|
||
1:00 C-Eur CE%sT 1943 Nov 6
|
||
- 3:00 Russia MSK/MSD 1990 Jul 1 2:00
|
||
- 2:00 1:00 EEST 1991 Sep 29 3:00
|
||
+ 3:00 Russia MSK/MSD 1990 Jul 1 2:00
|
||
+ 2:00 1:00 EEST 1991 Sep 29 3:00
|
||
2:00 E-Eur EE%sT 1995
|
||
2:00 EU EE%sT
|
||
# Ruthenia used CET 1990/1991.
|
||
-# "Uzhhorod" is the transliteration of the Ukrainian name, but
|
||
+# "Uzhhorod" is the transliteration of the Rusyn/Ukrainian pronunciation, but
|
||
# "Uzhgorod" is more common in English.
|
||
Zone Europe/Uzhgorod 1:29:12 - LMT 1890 Oct
|
||
1:00 - CET 1940
|
||
@@ -2944,8 +3324,8 @@
|
||
1:00 1:00 CEST 1944 Oct 26
|
||
1:00 - CET 1945 Jun 29
|
||
3:00 Russia MSK/MSD 1990
|
||
- 3:00 - MSK 1990 Jul 1 2:00
|
||
- 1:00 - CET 1991 Mar 31 3:00
|
||
+ 3:00 - MSK 1990 Jul 1 2:00
|
||
+ 1:00 - CET 1991 Mar 31 3:00
|
||
2:00 - EET 1992
|
||
2:00 E-Eur EE%sT 1995
|
||
2:00 EU EE%sT
|
||
@@ -2959,42 +3339,9 @@
|
||
2:00 - EET 1930 Jun 21
|
||
3:00 - MSK 1941 Aug 25
|
||
1:00 C-Eur CE%sT 1943 Oct 25
|
||
- 3:00 Russia MSK/MSD 1991 Mar 31 2:00
|
||
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00
|
||
2:00 E-Eur EE%sT 1995
|
||
2:00 EU EE%sT
|
||
-# Central Crimea used Moscow time 1994/1997.
|
||
-Zone Europe/Simferopol 2:16:24 - LMT 1880
|
||
- 2:16 - SMT 1924 May 2 # Simferopol Mean T
|
||
- 2:00 - EET 1930 Jun 21
|
||
- 3:00 - MSK 1941 Nov
|
||
- 1:00 C-Eur CE%sT 1944 Apr 13
|
||
- 3:00 Russia MSK/MSD 1990
|
||
- 3:00 - MSK 1990 Jul 1 2:00
|
||
- 2:00 - EET 1992
|
||
-# From Paul Eggert (2006-03-22):
|
||
-# The _Economist_ (1994-05-28, p 45) reports that central Crimea switched
|
||
-# from Kiev to Moscow time sometime after the January 1994 elections.
|
||
-# Shanks (1999) says "date of change uncertain", but implies that it happened
|
||
-# sometime between the 1994 DST switches. Shanks & Pottenger simply say
|
||
-# 1994-09-25 03:00, but that can't be right. For now, guess it
|
||
-# changed in May.
|
||
- 2:00 E-Eur EE%sT 1994 May
|
||
-# From IATA SSIM (1994/1997), which also says that Kerch is still like Kiev.
|
||
- 3:00 E-Eur MSK/MSD 1996 Mar 31 3:00s
|
||
- 3:00 1:00 MSD 1996 Oct 27 3:00s
|
||
-# IATA SSIM (1997-09) says Crimea switched to EET/EEST.
|
||
-# Assume it happened in March by not changing the clocks.
|
||
- 3:00 Russia MSK/MSD 1997
|
||
- 3:00 - MSK 1997 Mar lastSun 1:00u
|
||
-# From Alexander Krivenyshev (2014-03-17):
|
||
-# time change at 2:00 (2am) on March 30, 2014
|
||
-# http://vz.ru/news/2014/3/17/677464.html
|
||
-# From Paul Eggert (2014-03-30):
|
||
-# Simferopol and Sevastopol reportedly changed their central town clocks
|
||
-# late the previous day, but this appears to have been ceremonial
|
||
-# and the discrepancies are small enough to not worry about.
|
||
- 2:00 EU EE%sT 2014 Mar 30 2:00
|
||
- 4:00 - MSK
|
||
|
||
# Vatican City
|
||
# See Europe/Rome.
|
||
@@ -3018,7 +3365,7 @@
|
||
# ...
|
||
#
|
||
# ...the European time rules are...standardized since 1981, when
|
||
-# most European coun[tr]ies started DST. Before that year, only
|
||
+# most European countries started DST. Before that year, only
|
||
# a few countries (UK, France, Italy) had DST, each according
|
||
# to own national rules. In 1981, however, DST started on
|
||
# 'Apr firstSun', and not on 'Mar lastSun' as in the following
|
||
@@ -3026,7 +3373,7 @@
|
||
# But also since 1981 there are some more national exceptions
|
||
# than listed in 'europe': Switzerland, for example, joined DST
|
||
# one year later, Denmark ended DST on 'Oct 1' instead of 'Sep
|
||
-# lastSun' in 1981---I don't know how they handle now.
|
||
+# lastSun' in 1981 - I don't know how they handle now.
|
||
#
|
||
# Finally, DST ist always from 'Apr 1' to 'Oct 1' in the
|
||
# Soviet Union (as far as I know).
|
||
--- ./jdk/make/sun/javazic/tzdata/factory Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/sun/javazic/tzdata/factory Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -21,7 +21,6 @@
|
||
# or visit www.oracle.com if you need additional information or have any
|
||
# questions.
|
||
#
|
||
-# <pre>
|
||
# This file is in the public domain, so clarified as of
|
||
# 2009-05-17 by Arthur David Olson.
|
||
|
||
--- ./jdk/make/sun/javazic/tzdata/iso3166.tab Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/sun/javazic/tzdata/iso3166.tab Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -26,21 +26,21 @@
|
||
# This file is in the public domain, so clarified as of
|
||
# 2009-05-17 by Arthur David Olson.
|
||
#
|
||
-# From Paul Eggert (2013-05-27):
|
||
+# From Paul Eggert (2014-07-18):
|
||
+# This file contains a table of two-letter country codes. Columns are
|
||
+# separated by a single tab. Lines beginning with '#' are comments.
|
||
+# Although all text currently uses ASCII encoding, this is planned to
|
||
+# change to UTF-8 soon. The columns of the table are as follows:
|
||
#
|
||
-# This file contains a table with the following columns:
|
||
# 1. ISO 3166-1 alpha-2 country code, current as of
|
||
-# ISO 3166-1 Newsletter VI-15 (2013-05-10). See: Updates on ISO 3166
|
||
+# ISO 3166-1 Newsletter VI-16 (2013-07-11). See: Updates on ISO 3166
|
||
# http://www.iso.org/iso/home/standards/country_codes/updates_on_iso_3166.htm
|
||
# 2. The usual English name for the coded region,
|
||
# chosen so that alphabetic sorting of subsets produces helpful lists.
|
||
# This is not the same as the English name in the ISO 3166 tables.
|
||
#
|
||
-# Columns are separated by a single tab.
|
||
# The table is sorted by country code.
|
||
#
|
||
-# Lines beginning with `#' are comments.
|
||
-#
|
||
# This table is intended as an aid for users, to help them select time
|
||
# zone data appropriate for their practical needs. It is not intended
|
||
# to take or endorse any position on legal or territorial claims.
|
||
--- ./jdk/make/sun/javazic/tzdata/leapseconds Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/sun/javazic/tzdata/leapseconds Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -21,7 +21,7 @@
|
||
# or visit www.oracle.com if you need additional information or have any
|
||
# questions.
|
||
#
|
||
-# Allowance for leapseconds added to each timezone file.
|
||
+# Allowance for leap seconds added to each time zone file.
|
||
|
||
# This file is in the public domain.
|
||
|
||
@@ -31,10 +31,10 @@
|
||
# you should be able to pick up leap-seconds.list from a secondary NIST server.
|
||
# For more about leap-seconds.list, please see
|
||
# The NTP Timescale and Leap Seconds
|
||
-# <http://www.eecis.udel.edu/~mills/leap.html>.
|
||
+# http://www.eecis.udel.edu/~mills/leap.html
|
||
|
||
-# The International Earth Rotation Service periodically uses leap seconds
|
||
-# to keep UTC to within 0.9 s of UT1
|
||
+# The International Earth Rotation and Reference Systems Service
|
||
+# periodically uses leap seconds to keep UTC to within 0.9 s of UT1
|
||
# (which measures the true angular orientation of the earth in space); see
|
||
# Terry J Quinn, The BIPM and the accurate measure of time,
|
||
# Proc IEEE 79, 7 (July 1991), 894-905 <http://dx.doi.org/10.1109/5.84965>.
|
||
--- ./jdk/make/sun/javazic/tzdata/northamerica Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/sun/javazic/tzdata/northamerica Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -21,15 +21,15 @@
|
||
# or visit www.oracle.com if you need additional information or have any
|
||
# questions.
|
||
#
|
||
-# <pre>
|
||
# This file is in the public domain, so clarified as of
|
||
# 2009-05-17 by Arthur David Olson.
|
||
|
||
# also includes Central America and the Caribbean
|
||
|
||
-# This data is by no means authoritative; if you think you know better,
|
||
+# This file is by no means authoritative; if you think you know better,
|
||
# go ahead and edit the file (and please send any changes to
|
||
-# tz@iana.org for general use in the future).
|
||
+# tz@iana.org for general use in the future). For more, please see
|
||
+# the file CONTRIBUTING in the tz distribution.
|
||
|
||
# From Paul Eggert (1999-03-22):
|
||
# A reliable and entertaining source about time zones is
|
||
@@ -78,13 +78,13 @@
|
||
# to push people into bed earlier, and get them up earlier, to make
|
||
# them healthy, wealthy and wise in spite of themselves.
|
||
#
|
||
-# -- Robertson Davies, The diary of Samuel Marchbanks,
|
||
+# -- Robertson Davies, The diary of Samuel Marchbanks,
|
||
# Clarke, Irwin (1947), XIX, Sunday
|
||
#
|
||
# For more about the first ten years of DST in the United States, see
|
||
-# Robert Garland's <a href="http://www.clpgh.org/exhibit/dst.html">
|
||
-# Ten years of daylight saving from the Pittsburgh standpoint
|
||
-# (Carnegie Library of Pittsburgh, 1927)</a>.
|
||
+# Robert Garland, Ten years of daylight saving from the Pittsburgh standpoint
|
||
+# (Carnegie Library of Pittsburgh, 1927).
|
||
+# http://www.clpgh.org/exhibit/dst.html
|
||
#
|
||
# Shanks says that DST was called "War Time" in the US in 1918 and 1919.
|
||
# However, DST was imposed by the Standard Time Act of 1918, which
|
||
@@ -103,11 +103,11 @@
|
||
# From Arthur David Olson (2000-09-25):
|
||
# Last night I heard part of a rebroadcast of a 1945 Arch Oboler radio drama.
|
||
# In the introduction, Oboler spoke of "Eastern Peace Time."
|
||
-# An AltaVista search turned up
|
||
-# <a href="http://rowayton.org/rhs/hstaug45.html">:
|
||
+# An AltaVista search turned up:
|
||
+# http://rowayton.org/rhs/hstaug45.html
|
||
# "When the time is announced over the radio now, it is 'Eastern Peace
|
||
# Time' instead of the old familiar 'Eastern War Time.' Peace is wonderful."
|
||
-# </a> (August 1945) by way of confirmation.
|
||
+# (August 1945) by way of confirmation.
|
||
|
||
# From Joseph Gallant citing
|
||
# George H. Douglas, _The Early Days of Radio Broadcasting_ (1987):
|
||
@@ -205,7 +205,7 @@
|
||
# USA ALASKA STD 9 H BEHIND UTC MOST OF ALASKA (AKST)
|
||
# USA ALASKA STD 8 H BEHIND UTC APR 3 - OCT 30 (AKDT)
|
||
# USA ALEUTIAN 10 H BEHIND UTC ISLANDS WEST OF 170W
|
||
-# USA - " - 9 H BEHIND UTC APR 3 - OCT 30
|
||
+# USA " 9 H BEHIND UTC APR 3 - OCT 30
|
||
# USA HAWAII 10 H BEHIND UTC
|
||
# USA BERING 11 H BEHIND UTC SAMOA, MIDWAY
|
||
|
||
@@ -258,19 +258,19 @@
|
||
# The following was signed into law on 2005-08-08.
|
||
#
|
||
# H.R. 6, Energy Policy Act of 2005, SEC. 110. DAYLIGHT SAVINGS.
|
||
-# (a) Amendment- Section 3(a) of the Uniform Time Act of 1966 (15
|
||
+# (a) Amendment.--Section 3(a) of the Uniform Time Act of 1966 (15
|
||
# U.S.C. 260a(a)) is amended--
|
||
-# (1) by striking 'first Sunday of April' and inserting 'second
|
||
-# Sunday of March'; and
|
||
-# (2) by striking 'last Sunday of October' and inserting 'first
|
||
+# (1) by striking "first Sunday of April" and inserting "second
|
||
+# Sunday of March"; and
|
||
+# (2) by striking "last Sunday of October" and inserting "first
|
||
# Sunday of November'.
|
||
-# (b) Effective Date- Subsection (a) shall take effect 1 year after the
|
||
+# (b) Effective Date.--Subsection (a) shall take effect 1 year after the
|
||
# date of enactment of this Act or March 1, 2007, whichever is later.
|
||
-# (c) Report to Congress- Not later than 9 months after the effective
|
||
+# (c) Report to Congress.--Not later than 9 months after the effective
|
||
# date stated in subsection (b), the Secretary shall report to Congress
|
||
# on the impact of this section on energy consumption in the United
|
||
# States.
|
||
-# (d) Right to Revert- Congress retains the right to revert the
|
||
+# (d) Right to Revert.--Congress retains the right to revert the
|
||
# Daylight Saving Time back to the 2005 time schedules once the
|
||
# Department study is complete.
|
||
|
||
@@ -292,7 +292,7 @@
|
||
|
||
# From Paul Eggert (2005-08-26):
|
||
# According to today's Huntsville Times
|
||
-# <http://www.al.com/news/huntsvilletimes/index.ssf?/base/news/1125047783228320.xml&coll=1>
|
||
+# http://www.al.com/news/huntsvilletimes/index.ssf?/base/news/1125047783228320.xml&coll=1
|
||
# a few towns on Alabama's "eastern border with Georgia, such as Phenix City
|
||
# in Russell County, Lanett in Chambers County and some towns in Lee County,
|
||
# set their watches and clocks on Eastern time." It quotes H.H. "Bubba"
|
||
@@ -300,6 +300,12 @@
|
||
# time zone, but we do go by the Eastern time zone because so many people work
|
||
# in Columbus."
|
||
|
||
+# From Paul Eggert (2014-09-06):
|
||
+# Monthly Notices of the Royal Astronomical Society 44, 4 (1884-02-08), 208
|
||
+# says that New York City Hall time was 3 minutes 58.4 seconds fast of
|
||
+# Eastern time (i.e., -4:56:01.6) just before the 1883 switch. Round to the
|
||
+# nearest second.
|
||
+
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
|
||
Rule NYC 1920 only - Mar lastSun 2:00 1:00 D
|
||
Rule NYC 1920 only - Oct lastSun 2:00 0 S
|
||
@@ -347,15 +353,15 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Chicago -5:50:36 - LMT 1883 Nov 18 12:09:24
|
||
-6:00 US C%sT 1920
|
||
- -6:00 Chicago C%sT 1936 Mar 1 2:00
|
||
- -5:00 - EST 1936 Nov 15 2:00
|
||
+ -6:00 Chicago C%sT 1936 Mar 1 2:00
|
||
+ -5:00 - EST 1936 Nov 15 2:00
|
||
-6:00 Chicago C%sT 1942
|
||
-6:00 US C%sT 1946
|
||
-6:00 Chicago C%sT 1967
|
||
-6:00 US C%sT
|
||
# Oliver County, ND switched from mountain to central time on 1992-10-25.
|
||
Zone America/North_Dakota/Center -6:45:12 - LMT 1883 Nov 18 12:14:48
|
||
- -7:00 US M%sT 1992 Oct 25 02:00
|
||
+ -7:00 US M%sT 1992 Oct 25 2:00
|
||
-6:00 US C%sT
|
||
# Morton County, ND, switched from mountain to central time on
|
||
# 2003-10-26, except for the area around Mandan which was already central time.
|
||
@@ -364,29 +370,26 @@
|
||
# Jones, Mellette, and Todd Counties in South Dakota;
|
||
# but in practice these other counties were already observing central time.
|
||
# See <http://www.epa.gov/fedrgstr/EPA-IMPACT/2003/October/Day-28/i27056.htm>.
|
||
-Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21
|
||
- -7:00 US M%sT 2003 Oct 26 02:00
|
||
+Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21
|
||
+ -7:00 US M%sT 2003 Oct 26 2:00
|
||
-6:00 US C%sT
|
||
|
||
# From Josh Findley (2011-01-21):
|
||
# ...it appears that Mercer County, North Dakota, changed from the
|
||
# mountain time zone to the central time zone at the last transition from
|
||
# daylight-saving to standard time (on Nov. 7, 2010):
|
||
-# <a href="http://www.gpo.gov/fdsys/pkg/FR-2010-09-29/html/2010-24376.htm">
|
||
# http://www.gpo.gov/fdsys/pkg/FR-2010-09-29/html/2010-24376.htm
|
||
-# </a>
|
||
-# <a href="http://www.bismarcktribune.com/news/local/article_1eb1b588-c758-11df-b472-001cc4c03286.html">
|
||
# http://www.bismarcktribune.com/news/local/article_1eb1b588-c758-11df-b472-001cc4c03286.html
|
||
-# </a>
|
||
|
||
# From Andy Lipscomb (2011-01-24):
|
||
# ...according to the Census Bureau, the largest city is Beulah (although
|
||
# it's commonly referred to as Beulah-Hazen, with Hazen being the next
|
||
# largest city in Mercer County). Google Maps places Beulah's city hall
|
||
-# at 4715'51" north, 10146'40" west, which yields an offset of 6h47'07".
|
||
+# at 47 degrees 15' 51" N, 101 degrees 46' 40" W, which yields an offset
|
||
+# of 6h47'07".
|
||
|
||
-Zone America/North_Dakota/Beulah -6:47:07 - LMT 1883 Nov 18 12:12:53
|
||
- -7:00 US M%sT 2010 Nov 7 2:00
|
||
+Zone America/North_Dakota/Beulah -6:47:07 - LMT 1883 Nov 18 12:12:53
|
||
+ -7:00 US M%sT 2010 Nov 7 2:00
|
||
-6:00 US C%sT
|
||
|
||
# US mountain time, represented by Denver
|
||
@@ -448,15 +451,18 @@
|
||
# was destroyed in 1805 by a Yakutat-kon war party.) However, there
|
||
# were nearby inhabitants in some cases and for our purposes perhaps
|
||
# it's best to simply use the official transition.
|
||
+
|
||
+# From Paul Eggert (2014-07-18):
|
||
+# One opinion of the early-1980s turmoil in Alaska over time zones and
|
||
+# daylight saving time appeared as graffiti on a Juneau airport wall:
|
||
+# "Welcome to Juneau. Please turn your watch back to the 19th century."
|
||
+# See: Turner W. Alaska's four time zones now two. NY Times 1983-11-01.
|
||
+# http://www.nytimes.com/1983/11/01/us/alaska-s-four-time-zones-now-two.html
|
||
#
|
||
-
|
||
-# From Steve Ferguson (2011-01-31):
|
||
-# The author lives in Alaska and many of the references listed are only
|
||
-# available to Alaskan residents.
|
||
-#
|
||
-# <a href="http://www.alaskahistoricalsociety.org/index.cfm?section=discover%20alaska&page=Glimpses%20of%20the%20Past&viewpost=2&ContentId=98">
|
||
-# http://www.alaskahistoricalsociety.org/index.cfm?section=discover%20alaska&page=Glimpses%20of%20the%20Past&viewpost=2&ContentId=98
|
||
-# </a>
|
||
+# Steve Ferguson (2011-01-31) referred to the following source:
|
||
+# Norris F. Keeping time in Alaska: national directives, local response.
|
||
+# Alaska History 2001;16(1-2).
|
||
+# http://alaskahistoricalsociety.org/discover-alaska/glimpses-of-the-past/keeping-time-in-alaska/
|
||
|
||
# From Arthur David Olson (2011-02-01):
|
||
# Here's database-relevant material from the 2001 "Alaska History" article:
|
||
@@ -482,12 +488,10 @@
|
||
# From Arthur David Olson (2011-02-09):
|
||
# I just spoke by phone with a staff member at the Metlakatla Indian
|
||
# Community office (using contact information available at
|
||
-# <a href="http://www.commerce.state.ak.us/dca/commdb/CIS.cfm?Comm_Boro_name=Metlakatla">
|
||
# http://www.commerce.state.ak.us/dca/commdb/CIS.cfm?Comm_Boro_name=Metlakatla
|
||
-# </a>).
|
||
# It's shortly after 1:00 here on the east coast of the United States;
|
||
# the staffer said it was shortly after 10:00 there. When I asked whether
|
||
-# that meant they were on Pacific time, they said no--they were on their
|
||
+# that meant they were on Pacific time, they said no - they were on their
|
||
# own time. I asked about daylight saving; they said it wasn't used. I
|
||
# did not inquire about practices in the past.
|
||
|
||
@@ -501,9 +505,9 @@
|
||
-8:00 - PST 1942
|
||
-8:00 US P%sT 1946
|
||
-8:00 - PST 1969
|
||
- -8:00 US P%sT 1980 Apr 27 2:00
|
||
- -9:00 US Y%sT 1980 Oct 26 2:00
|
||
- -8:00 US P%sT 1983 Oct 30 2:00
|
||
+ -8:00 US P%sT 1980 Apr 27 2:00
|
||
+ -9:00 US Y%sT 1980 Oct 26 2:00
|
||
+ -8:00 US P%sT 1983 Oct 30 2:00
|
||
-9:00 US Y%sT 1983 Nov 30
|
||
-9:00 US AK%sT
|
||
Zone America/Sitka 14:58:47 - LMT 1867 Oct 18
|
||
@@ -511,7 +515,7 @@
|
||
-8:00 - PST 1942
|
||
-8:00 US P%sT 1946
|
||
-8:00 - PST 1969
|
||
- -8:00 US P%sT 1983 Oct 30 2:00
|
||
+ -8:00 US P%sT 1983 Oct 30 2:00
|
||
-9:00 US Y%sT 1983 Nov 30
|
||
-9:00 US AK%sT
|
||
Zone America/Metlakatla 15:13:42 - LMT 1867 Oct 18
|
||
@@ -519,8 +523,8 @@
|
||
-8:00 - PST 1942
|
||
-8:00 US P%sT 1946
|
||
-8:00 - PST 1969
|
||
- -8:00 US P%sT 1983 Oct 30 2:00
|
||
- -8:00 - MeST
|
||
+ -8:00 US P%sT 1983 Oct 30 2:00
|
||
+ -8:00 - PST
|
||
Zone America/Yakutat 14:41:05 - LMT 1867 Oct 18
|
||
-9:18:55 - LMT 1900 Aug 20 12:00
|
||
-9:00 - YST 1942
|
||
@@ -535,7 +539,7 @@
|
||
-10:00 US CAT/CAPT 1946 # Peace
|
||
-10:00 - CAT 1967 Apr
|
||
-10:00 - AHST 1969
|
||
- -10:00 US AH%sT 1983 Oct 30 2:00
|
||
+ -10:00 US AH%sT 1983 Oct 30 2:00
|
||
-9:00 US Y%sT 1983 Nov 30
|
||
-9:00 US AK%sT
|
||
Zone America/Nome 12:58:21 - LMT 1867 Oct 18
|
||
@@ -544,7 +548,7 @@
|
||
-11:00 US N%sT 1946
|
||
-11:00 - NST 1967 Apr
|
||
-11:00 - BST 1969
|
||
- -11:00 US B%sT 1983 Oct 30 2:00
|
||
+ -11:00 US B%sT 1983 Oct 30 2:00
|
||
-9:00 US Y%sT 1983 Nov 30
|
||
-9:00 US AK%sT
|
||
Zone America/Adak 12:13:21 - LMT 1867 Oct 18
|
||
@@ -553,7 +557,7 @@
|
||
-11:00 US N%sT 1946
|
||
-11:00 - NST 1967 Apr
|
||
-11:00 - BST 1969
|
||
- -11:00 US B%sT 1983 Oct 30 2:00
|
||
+ -11:00 US B%sT 1983 Oct 30 2:00
|
||
-10:00 US AH%sT 1983 Nov 30
|
||
-10:00 US HA%sT
|
||
# The following switches don't quite make our 1970 cutoff.
|
||
@@ -571,7 +575,7 @@
|
||
# Minutes of the Unalaska City Council Meeting, January 10, 1967:
|
||
# "Except for St. Paul and Akutan, Unalaska is the only important
|
||
# location not on Alaska Standard Time. The following resolution was
|
||
-# made by William Robinson and seconded by Henry Swanson: Be it
|
||
+# made by William Robinson and seconded by Henry Swanson: Be it
|
||
# resolved that the City of Unalaska hereby goes to Alaska Standard
|
||
# Time as of midnight Friday, January 13, 1967 (1 A.M. Saturday,
|
||
# January 14, Alaska Standard Time.) This resolution was passed with
|
||
@@ -583,9 +587,7 @@
|
||
# "Hawaiian Time" by Robert C. Schmitt and Doak C. Cox appears on pages 207-225
|
||
# of volume 26 of The Hawaiian Journal of History (1992). As of 2010-12-09,
|
||
# the article is available at
|
||
-# <a href="http://evols.library.manoa.hawaii.edu/bitstream/10524/239/2/JL26215.pdf">
|
||
# http://evols.library.manoa.hawaii.edu/bitstream/10524/239/2/JL26215.pdf
|
||
-# </a>
|
||
# and indicates that standard time was adopted effective noon, January
|
||
# 13, 1896 (page 218), that in "1933, the Legislature decreed daylight
|
||
# saving for the period between the last Sunday of each April and the
|
||
@@ -606,7 +608,7 @@
|
||
# year, the standard time of this Territory shall be advanced one
|
||
# hour...This Act shall take effect upon its approval. Approved this 26th
|
||
# day of April, A. D. 1933. LAWRENCE M JUDD, Governor of the Territory of
|
||
-# Hawaii." Page 172: "Act 163...Act 90 of the Session Laws of 1933 is
|
||
+# Hawaii." Page 172: "Act 163...Act 90 of the Session Laws of 1933 is
|
||
# hereby repealed...This Act shall take effect upon its approval, upon
|
||
# which date the standard time of this Territory shall be restored to
|
||
# that existing immediately prior to the taking effect of said Act 90.
|
||
@@ -616,14 +618,14 @@
|
||
# Note that 1933-05-21 was a Sunday.
|
||
# We're left to guess the time of day when Act 163 was approved; guess noon.
|
||
|
||
-Zone Pacific/Honolulu -10:31:26 - LMT 1896 Jan 13 12:00 #Schmitt&Cox
|
||
- -10:30 - HST 1933 Apr 30 2:00 #Laws 1933
|
||
- -10:30 1:00 HDT 1933 May 21 12:00 #Laws 1933+12
|
||
- -10:30 - HST 1942 Feb 09 2:00 #Schmitt&Cox+2
|
||
- -10:30 1:00 HDT 1945 Sep 30 2:00 #Schmitt&Cox+2
|
||
- -10:30 - HST 1947 Jun 8 2:00 #Schmitt&Cox+2
|
||
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
+Zone Pacific/Honolulu -10:31:26 - LMT 1896 Jan 13 12:00
|
||
+ -10:30 - HST 1933 Apr 30 2:00
|
||
+ -10:30 1:00 HDT 1933 May 21 12:00
|
||
+ -10:30 - HST 1942 Feb 9 2:00
|
||
+ -10:30 1:00 HDT 1945 Sep 30 2:00
|
||
+ -10:30 - HST 1947 Jun 8 2:00
|
||
-10:00 - HST
|
||
-
|
||
Link Pacific/Honolulu Pacific/Johnston
|
||
|
||
# Now we turn to US areas that have diverged from the consensus since 1970.
|
||
@@ -633,9 +635,9 @@
|
||
# From Paul Eggert (2002-10-20):
|
||
#
|
||
# The information in the rest of this paragraph is derived from the
|
||
-# <a href="http://www.dlapr.lib.az.us/links/daylight.htm">
|
||
-# Daylight Saving Time web page (2002-01-23)</a> maintained by the
|
||
-# Arizona State Library, Archives and Public Records.
|
||
+# Daylight Saving Time web page
|
||
+# <http://www.dlapr.lib.az.us/links/daylight.htm> (2002-01-23)
|
||
+# maintained by the Arizona State Library, Archives and Public Records.
|
||
# Between 1944-01-01 and 1944-04-01 the State of Arizona used standard
|
||
# time, but by federal law railroads, airlines, bus lines, military
|
||
# personnel, and some engaged in interstate commerce continued to
|
||
@@ -649,10 +651,11 @@
|
||
# Shanks says the 1944 experiment came to an end on 1944-03-17.
|
||
# Go with the Arizona State Library instead.
|
||
|
||
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Phoenix -7:28:18 - LMT 1883 Nov 18 11:31:42
|
||
- -7:00 US M%sT 1944 Jan 1 00:01
|
||
- -7:00 - MST 1944 Apr 1 00:01
|
||
- -7:00 US M%sT 1944 Oct 1 00:01
|
||
+ -7:00 US M%sT 1944 Jan 1 0:01
|
||
+ -7:00 - MST 1944 Apr 1 0:01
|
||
+ -7:00 US M%sT 1944 Oct 1 0:01
|
||
-7:00 - MST 1967
|
||
-7:00 US M%sT 1968 Mar 21
|
||
-7:00 - MST
|
||
@@ -676,24 +679,22 @@
|
||
#
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Boise -7:44:49 - LMT 1883 Nov 18 12:15:11
|
||
- -8:00 US P%sT 1923 May 13 2:00
|
||
+ -8:00 US P%sT 1923 May 13 2:00
|
||
-7:00 US M%sT 1974
|
||
- -7:00 - MST 1974 Feb 3 2:00
|
||
+ -7:00 - MST 1974 Feb 3 2:00
|
||
-7:00 US M%sT
|
||
|
||
# Indiana
|
||
#
|
||
# For a map of Indiana's time zone regions, see:
|
||
-# <a href="http://www.mccsc.edu/time.html">
|
||
-# What time is it in Indiana?
|
||
-# </a> (2006-03-01)
|
||
+# http://en.wikipedia.org/wiki/Time_in_Indiana
|
||
#
|
||
# From Paul Eggert (2007-08-17):
|
||
# Since 1970, most of Indiana has been like America/Indiana/Indianapolis,
|
||
# with the following exceptions:
|
||
#
|
||
# - Gibson, Jasper, Lake, LaPorte, Newton, Porter, Posey, Spencer,
|
||
-# Vandenburgh, and Warrick counties have been like America/Chicago.
|
||
+# Vanderburgh, and Warrick counties have been like America/Chicago.
|
||
#
|
||
# - Dearborn and Ohio counties have been like America/New_York.
|
||
#
|
||
@@ -712,22 +713,16 @@
|
||
# that they would be ambiguous if we left them at the 'America' level.
|
||
# So we reluctantly put them all in a subdirectory 'America/Indiana'.
|
||
|
||
-# From Paul Eggert (2005-08-16):
|
||
-# http://www.mccsc.edu/time.html says that Indiana will use DST starting 2006.
|
||
-
|
||
-# From Nathan Stratton Treadway (2006-03-30):
|
||
-# http://www.dot.gov/affairs/dot0406.htm [3705 B]
|
||
-# From Deborah Goldsmith (2006-01-18):
|
||
-# http://dmses.dot.gov/docimages/pdf95/382329_web.pdf [2.9 MB]
|
||
-# From Paul Eggert (2006-01-20):
|
||
-# It says "DOT is relocating the time zone boundary in Indiana to move Starke,
|
||
+# From Paul Eggert (2014-06-26):
|
||
+# https://www.federalregister.gov/articles/2006/01/20/06-563/standard-time-zone-boundary-in-the-state-of-indiana
|
||
+# says "DOT is relocating the time zone boundary in Indiana to move Starke,
|
||
# Pulaski, Knox, Daviess, Martin, Pike, Dubois, and Perry Counties from the
|
||
# Eastern Time Zone to the Central Time Zone.... The effective date of
|
||
-# this rule is 2:OO a.m. EST Sunday, April 2, 2006, which is the
|
||
+# this rule is 2 a.m. EST Sunday, April 2, 2006, which is the
|
||
# changeover date from standard time to Daylight Saving Time."
|
||
-# Strictly speaking, this means the affected counties will change their
|
||
-# clocks twice that night, but this obviously is in error. The intent
|
||
-# is that 01:59:59 EST be followed by 02:00:00 CDT.
|
||
+# Strictly speaking, this meant the affected counties changed their
|
||
+# clocks twice that night, but this obviously was in error. The intent
|
||
+# was that 01:59:59 EST be followed by 02:00:00 CDT.
|
||
|
||
# From Gwillim Law (2007-02-10):
|
||
# The Associated Press has been reporting that Pulaski County, Indiana is
|
||
@@ -739,13 +734,13 @@
|
||
Rule Indianapolis 1941 1954 - Sep lastSun 2:00 0 S
|
||
Rule Indianapolis 1946 1954 - Apr lastSun 2:00 1:00 D
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22
|
||
+Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22
|
||
-6:00 US C%sT 1920
|
||
-6:00 Indianapolis C%sT 1942
|
||
-6:00 US C%sT 1946
|
||
- -6:00 Indianapolis C%sT 1955 Apr 24 2:00
|
||
- -5:00 - EST 1957 Sep 29 2:00
|
||
- -6:00 - CST 1958 Apr 27 2:00
|
||
+ -6:00 Indianapolis C%sT 1955 Apr 24 2:00
|
||
+ -5:00 - EST 1957 Sep 29 2:00
|
||
+ -6:00 - CST 1958 Apr 27 2:00
|
||
-5:00 - EST 1969
|
||
-5:00 US E%sT 1971
|
||
-5:00 - EST 2006
|
||
@@ -761,10 +756,10 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Indiana/Marengo -5:45:23 - LMT 1883 Nov 18 12:14:37
|
||
-6:00 US C%sT 1951
|
||
- -6:00 Marengo C%sT 1961 Apr 30 2:00
|
||
+ -6:00 Marengo C%sT 1961 Apr 30 2:00
|
||
-5:00 - EST 1969
|
||
- -5:00 US E%sT 1974 Jan 6 2:00
|
||
- -6:00 1:00 CDT 1974 Oct 27 2:00
|
||
+ -5:00 US E%sT 1974 Jan 6 2:00
|
||
+ -6:00 1:00 CDT 1974 Oct 27 2:00
|
||
-5:00 US E%sT 1976
|
||
-5:00 - EST 2006
|
||
-5:00 US E%sT
|
||
@@ -785,11 +780,11 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Indiana/Vincennes -5:50:07 - LMT 1883 Nov 18 12:09:53
|
||
-6:00 US C%sT 1946
|
||
- -6:00 Vincennes C%sT 1964 Apr 26 2:00
|
||
+ -6:00 Vincennes C%sT 1964 Apr 26 2:00
|
||
-5:00 - EST 1969
|
||
-5:00 US E%sT 1971
|
||
- -5:00 - EST 2006 Apr 2 2:00
|
||
- -6:00 US C%sT 2007 Nov 4 2:00
|
||
+ -5:00 - EST 2006 Apr 2 2:00
|
||
+ -6:00 US C%sT 2007 Nov 4 2:00
|
||
-5:00 US E%sT
|
||
#
|
||
# Perry County, Indiana, switched from eastern to central time in April 2006.
|
||
@@ -806,10 +801,10 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Indiana/Tell_City -5:47:03 - LMT 1883 Nov 18 12:12:57
|
||
-6:00 US C%sT 1946
|
||
- -6:00 Perry C%sT 1964 Apr 26 2:00
|
||
+ -6:00 Perry C%sT 1964 Apr 26 2:00
|
||
-5:00 - EST 1969
|
||
-5:00 US E%sT 1971
|
||
- -5:00 - EST 2006 Apr 2 2:00
|
||
+ -5:00 - EST 2006 Apr 2 2:00
|
||
-6:00 US C%sT
|
||
#
|
||
# Pike County, Indiana moved from central to eastern time in 1977,
|
||
@@ -822,11 +817,11 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Indiana/Petersburg -5:49:07 - LMT 1883 Nov 18 12:10:53
|
||
-6:00 US C%sT 1955
|
||
- -6:00 Pike C%sT 1965 Apr 25 2:00
|
||
- -5:00 - EST 1966 Oct 30 2:00
|
||
- -6:00 US C%sT 1977 Oct 30 2:00
|
||
- -5:00 - EST 2006 Apr 2 2:00
|
||
- -6:00 US C%sT 2007 Nov 4 2:00
|
||
+ -6:00 Pike C%sT 1965 Apr 25 2:00
|
||
+ -5:00 - EST 1966 Oct 30 2:00
|
||
+ -6:00 US C%sT 1977 Oct 30 2:00
|
||
+ -5:00 - EST 2006 Apr 2 2:00
|
||
+ -6:00 US C%sT 2007 Nov 4 2:00
|
||
-5:00 US E%sT
|
||
#
|
||
# Starke County, Indiana moved from central to eastern time in 1991,
|
||
@@ -844,10 +839,10 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Indiana/Knox -5:46:30 - LMT 1883 Nov 18 12:13:30
|
||
-6:00 US C%sT 1947
|
||
- -6:00 Starke C%sT 1962 Apr 29 2:00
|
||
- -5:00 - EST 1963 Oct 27 2:00
|
||
- -6:00 US C%sT 1991 Oct 27 2:00
|
||
- -5:00 - EST 2006 Apr 2 2:00
|
||
+ -6:00 Starke C%sT 1962 Apr 29 2:00
|
||
+ -5:00 - EST 1963 Oct 27 2:00
|
||
+ -6:00 US C%sT 1991 Oct 27 2:00
|
||
+ -5:00 - EST 2006 Apr 2 2:00
|
||
-6:00 US C%sT
|
||
#
|
||
# Pulaski County, Indiana, switched from eastern to central time in
|
||
@@ -860,17 +855,17 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Indiana/Winamac -5:46:25 - LMT 1883 Nov 18 12:13:35
|
||
-6:00 US C%sT 1946
|
||
- -6:00 Pulaski C%sT 1961 Apr 30 2:00
|
||
+ -6:00 Pulaski C%sT 1961 Apr 30 2:00
|
||
-5:00 - EST 1969
|
||
-5:00 US E%sT 1971
|
||
- -5:00 - EST 2006 Apr 2 2:00
|
||
- -6:00 US C%sT 2007 Mar 11 2:00
|
||
+ -5:00 - EST 2006 Apr 2 2:00
|
||
+ -6:00 US C%sT 2007 Mar 11 2:00
|
||
-5:00 US E%sT
|
||
#
|
||
# Switzerland County, Indiana, did not observe DST from 1973 through 2005.
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Indiana/Vevay -5:40:16 - LMT 1883 Nov 18 12:19:44
|
||
- -6:00 US C%sT 1954 Apr 25 2:00
|
||
+ -6:00 US C%sT 1954 Apr 25 2:00
|
||
-5:00 - EST 1969
|
||
-5:00 US E%sT 1973
|
||
-5:00 - EST 2006
|
||
@@ -891,18 +886,17 @@
|
||
-6:00 US C%sT 1921
|
||
-6:00 Louisville C%sT 1942
|
||
-6:00 US C%sT 1946
|
||
- -6:00 Louisville C%sT 1961 Jul 23 2:00
|
||
+ -6:00 Louisville C%sT 1961 Jul 23 2:00
|
||
-5:00 - EST 1968
|
||
- -5:00 US E%sT 1974 Jan 6 2:00
|
||
- -6:00 1:00 CDT 1974 Oct 27 2:00
|
||
+ -5:00 US E%sT 1974 Jan 6 2:00
|
||
+ -6:00 1:00 CDT 1974 Oct 27 2:00
|
||
-5:00 US E%sT
|
||
#
|
||
# Wayne County, Kentucky
|
||
#
|
||
-# From
|
||
-# <a href="http://www.lake-cumberland.com/life/archive/news990129time.shtml">
|
||
-# Lake Cumberland LIFE
|
||
-# </a> (1999-01-29) via WKYM-101.7:
|
||
+# From Lake Cumberland LIFE
|
||
+# http://www.lake-cumberland.com/life/archive/news990129time.shtml
|
||
+# (1999-01-29) via WKYM-101.7:
|
||
# Clinton County has joined Wayne County in asking the DoT to change from
|
||
# the Central to the Eastern time zone.... The Wayne County government made
|
||
# the same request in December. And while Russell County officials have not
|
||
@@ -919,9 +913,8 @@
|
||
#
|
||
# From Paul Eggert (2001-07-16):
|
||
# The final rule was published in the
|
||
-# <a href="http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=2000_register&docid=fr17au00-22">
|
||
-# Federal Register 65, 160 (2000-08-17), page 50154-50158.
|
||
-# </a>
|
||
+# Federal Register 65, 160 (2000-08-17), pp 50154-50158.
|
||
+# http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=2000_register&docid=fr17au00-22
|
||
#
|
||
Zone America/Kentucky/Monticello -5:39:24 - LMT 1883 Nov 18 12:20:36
|
||
-6:00 US C%sT 1946
|
||
@@ -946,9 +939,8 @@
|
||
# See America/North_Dakota/Center for the Oliver County, ND change.
|
||
# West Wendover, NV officially switched from Pacific to mountain time on
|
||
# 1999-10-31. See the
|
||
-# <a href="http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=1999_register&docid=fr21oc99-15">
|
||
-# Federal Register 64, 203 (1999-10-21), page 56705-56707.
|
||
-# </a>
|
||
+# Federal Register 64, 203 (1999-10-21), pp 56705-56707.
|
||
+# http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=1999_register&docid=fr21oc99-15
|
||
# However, the Federal Register says that West Wendover already operated
|
||
# on mountain time, and the rule merely made this official;
|
||
# hence a separate tz entry is not needed.
|
||
@@ -986,12 +978,12 @@
|
||
Rule Detroit 1967 only - Oct lastSun 2:00 0 S
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Detroit -5:32:11 - LMT 1905
|
||
- -6:00 - CST 1915 May 15 2:00
|
||
+ -6:00 - CST 1915 May 15 2:00
|
||
-5:00 - EST 1942
|
||
-5:00 US E%sT 1946
|
||
-5:00 Detroit E%sT 1973
|
||
-5:00 US E%sT 1975
|
||
- -5:00 - EST 1975 Apr 27 2:00
|
||
+ -5:00 - EST 1975 Apr 27 2:00
|
||
-5:00 US E%sT
|
||
#
|
||
# Dickinson, Gogebic, Iron, and Menominee Counties, Michigan,
|
||
@@ -1004,8 +996,8 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
|
||
-6:00 US C%sT 1946
|
||
- -6:00 Menominee C%sT 1969 Apr 27 2:00
|
||
- -5:00 - EST 1973 Apr 29 2:00
|
||
+ -6:00 Menominee C%sT 1969 Apr 27 2:00
|
||
+ -5:00 - EST 1973 Apr 29 2:00
|
||
-6:00 US C%sT
|
||
|
||
# Navassa
|
||
@@ -1022,19 +1014,19 @@
|
||
################################################################################
|
||
|
||
|
||
-# From Paul Eggert (2006-03-22):
|
||
-# A good source for time zone historical data outside the U.S. is
|
||
+# From Paul Eggert (2014-10-31):
|
||
+#
|
||
+# Unless otherwise specified, the source for data through 1990 is:
|
||
# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
|
||
# San Diego: ACS Publications, Inc. (2003).
|
||
+# Unfortunately this book contains many errors and cites no sources.
|
||
#
|
||
# Gwillim Law writes that a good source
|
||
# for recent time zone data is the International Air Transport
|
||
# Association's Standard Schedules Information Manual (IATA SSIM),
|
||
# published semiannually. Law sent in several helpful summaries
|
||
-# of the IATA's data after 1990.
|
||
-#
|
||
-# Except where otherwise noted, Shanks & Pottenger is the source for
|
||
-# entries through 1990, and IATA SSIM is the source for entries afterwards.
|
||
+# of the IATA's data after 1990. Except where otherwise noted,
|
||
+# IATA SSIM is the source for entries after 1990.
|
||
#
|
||
# Other sources occasionally used include:
|
||
#
|
||
@@ -1042,9 +1034,9 @@
|
||
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated),
|
||
# which I found in the UCLA library.
|
||
#
|
||
-# <a href="http://www.pettswoodvillage.co.uk/Daylight_Savings_William_Willett.pdf">
|
||
# William Willett, The Waste of Daylight, 19th edition
|
||
-# </a> (1914-03)
|
||
+# <http://cs.ucla.edu/~eggert/The-Waste-of-Daylight-19th.pdf>
|
||
+# [PDF] (1914-03)
|
||
#
|
||
# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
|
||
# <http://www.jstor.org/stable/1774359>.
|
||
@@ -1053,11 +1045,11 @@
|
||
|
||
# Canada
|
||
|
||
-# From Alain LaBont<e'> (1994-11-14):
|
||
+# From Alain LaBonté (1994-11-14):
|
||
# I post here the time zone abbreviations standardized in Canada
|
||
# for both English and French in the CAN/CSA-Z234.4-89 standard....
|
||
#
|
||
-# UTC Standard time Daylight savings time
|
||
+# UTC Standard time Daylight saving time
|
||
# offset French English French English
|
||
# -2:30 - - HAT NDT
|
||
# -3 - - HAA ADT
|
||
@@ -1070,7 +1062,7 @@
|
||
# -9 HNY YST - -
|
||
#
|
||
# HN: Heure Normale ST: Standard Time
|
||
-# HA: Heure Avanc<e'>e DT: Daylight saving Time
|
||
+# HA: Heure Avancée DT: Daylight saving Time
|
||
#
|
||
# A: de l'Atlantique Atlantic
|
||
# C: du Centre Central
|
||
@@ -1085,7 +1077,7 @@
|
||
# From Paul Eggert (1994-11-22):
|
||
# Alas, this sort of thing must be handled by localization software.
|
||
|
||
-# Unless otherwise specified, the data for Canada are all from Shanks
|
||
+# Unless otherwise specified, the data entries for Canada are all from Shanks
|
||
# & Pottenger.
|
||
|
||
# From Chris Walton (2006-04-01, 2006-04-25, 2006-06-26, 2007-01-31,
|
||
@@ -1132,17 +1124,16 @@
|
||
# An amendment to the Interpretation Act was registered on February 19/2007....
|
||
# http://action.attavik.ca/home/justice-gn/attach/2007/gaz02part2.pdf
|
||
|
||
-# From Paul Eggert (2006-04-25):
|
||
+# From Paul Eggert (2014-10-18):
|
||
# H. David Matthews and Mary Vincent's map
|
||
-# <a href="http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp">
|
||
# "It's about TIME", _Canadian Geographic_ (September-October 1998)
|
||
-# </a> contains detailed boundaries for regions observing nonstandard
|
||
+# http://www.canadiangeographic.ca/Magazine/SO98/alacarte.asp
|
||
+# contains detailed boundaries for regions observing nonstandard
|
||
# time and daylight saving time arrangements in Canada circa 1998.
|
||
#
|
||
-# INMS, the Institute for National Measurement Standards in Ottawa, has <a
|
||
-# href="http://inms-ienm.nrc-cnrc.gc.ca/en/time_services/daylight_saving_e.php">
|
||
-# information about standard and daylight saving time zones in Canada.
|
||
-# </a> (updated periodically).
|
||
+# National Research Council Canada maintains info about time zones and DST.
|
||
+# http://www.nrc-cnrc.gc.ca/eng/services/time/time_zones.html
|
||
+# http://www.nrc-cnrc.gc.ca/eng/services/time/faq/index.html#Q5
|
||
# Its unofficial information is often taken from Matthews and Vincent.
|
||
|
||
# From Paul Eggert (2006-06-27):
|
||
@@ -1151,9 +1142,7 @@
|
||
|
||
# From Chris Walton (2011-12-01)
|
||
# In the first of Tammy Hardwick's articles
|
||
-# <a href="http://www.ilovecreston.com/?p=articles&t=spec&ar=260">
|
||
# http://www.ilovecreston.com/?p=articles&t=spec&ar=260
|
||
-# </a>
|
||
# she quotes the Friday November 1/1918 edition of the Creston Review.
|
||
# The quote includes these two statements:
|
||
# 'Sunday the CPR went back to the old system of time...'
|
||
@@ -1221,9 +1210,7 @@
|
||
# Time to Standard Time and from Standard Time to Daylight Savings Time
|
||
# now occurs at 2:00AM.
|
||
# ...
|
||
-# <a href="http://www.assembly.nl.ca/legislation/sr/annualstatutes/2011/1106.chp.htm">
|
||
# http://www.assembly.nl.ca/legislation/sr/annualstatutes/2011/1106.chp.htm
|
||
-# </a>
|
||
# ...
|
||
# MICHAEL PELLEY | Manager of Enterprise Architecture - Solution Delivery
|
||
# Office of the Chief Information Officer
|
||
@@ -1259,7 +1246,7 @@
|
||
-3:30 - NST 1936
|
||
-3:30 StJohns N%sT 1942 May 11
|
||
-3:30 Canada N%sT 1946
|
||
- -3:30 StJohns N%sT 1966 Mar 15 2:00
|
||
+ -3:30 StJohns N%sT 1966 Mar 15 2:00
|
||
-4:00 StJohns A%sT 2011 Nov
|
||
-4:00 Canada A%sT
|
||
|
||
@@ -1320,7 +1307,7 @@
|
||
Zone America/Halifax -4:14:24 - LMT 1902 Jun 15
|
||
-4:00 Halifax A%sT 1918
|
||
-4:00 Canada A%sT 1919
|
||
- -4:00 Halifax A%sT 1942 Feb 9 2:00s
|
||
+ -4:00 Halifax A%sT 1942 Feb 9 2:00s
|
||
-4:00 Canada A%sT 1946
|
||
-4:00 Halifax A%sT 1974
|
||
-4:00 Canada A%sT
|
||
@@ -1379,7 +1366,7 @@
|
||
# meridian is supposed to observe AST, but residents as far east as
|
||
# Natashquan use EST/EDT, and residents east of Natashquan use AST.
|
||
# The Quebec department of justice writes in
|
||
-# "The situation in Minganie and Basse-Cote-Nord"
|
||
+# "The situation in Minganie and Basse-Côte-Nord"
|
||
# http://www.justice.gouv.qc.ca/english/publications/generale/temps-minganie-a.htm
|
||
# that the coastal strip from just east of Natashquan to Blanc-Sablon
|
||
# observes Atlantic standard time all year round.
|
||
@@ -1387,7 +1374,6 @@
|
||
# says this common practice was codified into law as of 2007.
|
||
# For lack of better info, guess this practice began around 1970, contra to
|
||
# Shanks & Pottenger who have this region observing AST/ADT.
|
||
-# for post-1970 data America/Puerto_Rico.
|
||
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
Rule Mont 1917 only - Mar 25 2:00 1:00 D
|
||
@@ -1401,18 +1387,10 @@
|
||
Rule Mont 1924 only - May 17 2:00 1:00 D
|
||
Rule Mont 1924 1926 - Sep lastSun 2:30 0 S
|
||
Rule Mont 1925 1926 - May Sun>=1 2:00 1:00 D
|
||
-# The 1927-to-1937 rules can be expressed more simply as
|
||
-# Rule Mont 1927 1937 - Apr lastSat 24:00 1:00 D
|
||
-# Rule Mont 1927 1937 - Sep lastSat 24:00 0 S
|
||
-# The rules below avoid use of 24:00
|
||
-# (which pre-1998 versions of zic cannot handle).
|
||
-Rule Mont 1927 only - May 1 0:00 1:00 D
|
||
-Rule Mont 1927 1932 - Sep lastSun 0:00 0 S
|
||
-Rule Mont 1928 1931 - Apr lastSun 0:00 1:00 D
|
||
-Rule Mont 1932 only - May 1 0:00 1:00 D
|
||
-Rule Mont 1933 1940 - Apr lastSun 0:00 1:00 D
|
||
-Rule Mont 1933 only - Oct 1 0:00 0 S
|
||
-Rule Mont 1934 1939 - Sep lastSun 0:00 0 S
|
||
+Rule Mont 1927 1937 - Apr lastSat 24:00 1:00 D
|
||
+Rule Mont 1927 1937 - Sep lastSat 24:00 0 S
|
||
+Rule Mont 1938 1940 - Apr lastSun 0:00 1:00 D
|
||
+Rule Mont 1938 1939 - Sep lastSun 0:00 0 S
|
||
Rule Mont 1946 1973 - Apr lastSun 2:00 1:00 D
|
||
Rule Mont 1945 1948 - Sep lastSun 2:00 0 S
|
||
Rule Mont 1949 1950 - Oct lastSun 2:00 0 S
|
||
@@ -1426,7 +1404,7 @@
|
||
Zone America/Montreal -4:54:16 - LMT 1884
|
||
-5:00 Mont E%sT 1918
|
||
-5:00 Canada E%sT 1919
|
||
- -5:00 Mont E%sT 1942 Feb 9 2:00s
|
||
+ -5:00 Mont E%sT 1942 Feb 9 2:00s
|
||
-5:00 Canada E%sT 1946
|
||
-5:00 Mont E%sT 1974
|
||
-5:00 Canada E%sT
|
||
@@ -1448,7 +1426,7 @@
|
||
# have already done so. In Orillia DST was to run until Saturday,
|
||
# 1912-08-31 (no time mentioned), but it was met with considerable
|
||
# hostility from certain segments of the public, and was revoked after
|
||
-# only two weeks -- I copied it as Saturday, 1912-07-07, 22:00, but
|
||
+# only two weeks - I copied it as Saturday, 1912-07-07, 22:00, but
|
||
# presumably that should be -07-06. (1912-06-19, -07-12; also letters
|
||
# earlier in June).
|
||
#
|
||
@@ -1458,10 +1436,8 @@
|
||
# Mark Brader writes that an article in the 1997-10-14 Toronto Star
|
||
# says that Atikokan, Ontario currently does not observe DST,
|
||
# but will vote on 11-10 whether to use EST/EDT.
|
||
-# He also writes that the
|
||
-# <a href="http://www.gov.on.ca/MBS/english/publications/statregs/conttext.html">
|
||
-# Ontario Time Act (1990, Chapter T.9)
|
||
-# </a>
|
||
+# He also writes that the Ontario Time Act (1990, Chapter T.9)
|
||
+# http://www.gov.on.ca/MBS/english/publications/statregs/conttext.html
|
||
# says that Ontario east of 90W uses EST/EDT, and west of 90W uses CST/CDT.
|
||
# Officially Atikokan is therefore on CST/CDT, and most likely this report
|
||
# concerns a non-official time observed as a matter of local practice.
|
||
@@ -1540,9 +1516,7 @@
|
||
# The Journal of The Royal Astronomical Society of Canada,
|
||
# volume 26, number 2 (February 1932) and, as of 2010-07-17,
|
||
# was available at
|
||
-# <a href="http://adsabs.harvard.edu/full/1932JRASC..26...49S">
|
||
# http://adsabs.harvard.edu/full/1932JRASC..26...49S
|
||
-# </a>
|
||
#
|
||
# It includes the text below (starting on page 57):
|
||
#
|
||
@@ -1553,26 +1527,26 @@
|
||
# ing in 1930. The information for the province of Quebec is definite,
|
||
# for the other provinces only approximate:
|
||
#
|
||
-# Province Daylight saving time used
|
||
+# Province Daylight saving time used
|
||
# Prince Edward Island Not used.
|
||
# Nova Scotia In Halifax only.
|
||
# New Brunswick In St. John only.
|
||
# Quebec In the following places:
|
||
-# Montreal Lachine
|
||
-# Quebec Mont-Royal
|
||
-# Levis Iberville
|
||
-# St. Lambert Cap de la Madeleine
|
||
-# Verdun Loretteville
|
||
-# Westmount Richmond
|
||
-# Outremont St. Jerome
|
||
-# Longueuil Greenfield Park
|
||
-# Arvida Waterloo
|
||
-# Chambly-Canton Beaulieu
|
||
-# Melbourne La Tuque
|
||
-# St. Theophile Buckingham
|
||
+# Montreal Lachine
|
||
+# Quebec Mont-Royal
|
||
+# Lévis Iberville
|
||
+# St. Lambert Cap de la Madelèine
|
||
+# Verdun Loretteville
|
||
+# Westmount Richmond
|
||
+# Outremont St. Jérôme
|
||
+# Longueuil Greenfield Park
|
||
+# Arvida Waterloo
|
||
+# Chambly-Canton Beaulieu
|
||
+# Melbourne La Tuque
|
||
+# St. Théophile Buckingham
|
||
# Ontario Used generally in the cities and towns along
|
||
-# the southerly part of the province. Not
|
||
-# used in the northwesterlhy part.
|
||
+# the southerly part of the province. Not
|
||
+# used in the northwesterly part.
|
||
# Manitoba Not used.
|
||
# Saskatchewan In Regina only.
|
||
# Alberta Not used.
|
||
@@ -1641,7 +1615,7 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Toronto -5:17:32 - LMT 1895
|
||
-5:00 Canada E%sT 1919
|
||
- -5:00 Toronto E%sT 1942 Feb 9 2:00s
|
||
+ -5:00 Toronto E%sT 1942 Feb 9 2:00s
|
||
-5:00 Canada E%sT 1946
|
||
-5:00 Toronto E%sT 1974
|
||
-5:00 Canada E%sT
|
||
@@ -1654,16 +1628,16 @@
|
||
-5:00 Canada E%sT
|
||
Zone America/Nipigon -5:53:04 - LMT 1895
|
||
-5:00 Canada E%sT 1940 Sep 29
|
||
- -5:00 1:00 EDT 1942 Feb 9 2:00s
|
||
+ -5:00 1:00 EDT 1942 Feb 9 2:00s
|
||
-5:00 Canada E%sT
|
||
Zone America/Rainy_River -6:18:16 - LMT 1895
|
||
-6:00 Canada C%sT 1940 Sep 29
|
||
- -6:00 1:00 CDT 1942 Feb 9 2:00s
|
||
+ -6:00 1:00 CDT 1942 Feb 9 2:00s
|
||
-6:00 Canada C%sT
|
||
Zone America/Atikokan -6:06:28 - LMT 1895
|
||
-6:00 Canada C%sT 1940 Sep 29
|
||
- -6:00 1:00 CDT 1942 Feb 9 2:00s
|
||
- -6:00 Canada C%sT 1945 Sep 30 2:00
|
||
+ -6:00 1:00 CDT 1942 Feb 9 2:00s
|
||
+ -6:00 Canada C%sT 1945 Sep 30 2:00
|
||
-5:00 - EST
|
||
|
||
|
||
@@ -1676,7 +1650,7 @@
|
||
# the first Sunday of April of each year and two o'clock Central
|
||
# Standard Time in the morning of the last Sunday of October next
|
||
# following, one hour in advance of Central Standard Time."...
|
||
-# I believe that the English legislation [of the old time act] had =
|
||
+# I believe that the English legislation [of the old time act] had
|
||
# been assented to (March 22, 1967)....
|
||
# Also, as far as I can tell, there was no order-in-council varying
|
||
# the time of Daylight Saving Time for 2005 and so the provisions of
|
||
@@ -1799,12 +1773,12 @@
|
||
Rule Swift 1960 1961 - Sep lastSun 2:00 0 S
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Regina -6:58:36 - LMT 1905 Sep
|
||
- -7:00 Regina M%sT 1960 Apr lastSun 2:00
|
||
+ -7:00 Regina M%sT 1960 Apr lastSun 2:00
|
||
-6:00 - CST
|
||
Zone America/Swift_Current -7:11:20 - LMT 1905 Sep
|
||
- -7:00 Canada M%sT 1946 Apr lastSun 2:00
|
||
+ -7:00 Canada M%sT 1946 Apr lastSun 2:00
|
||
-7:00 Regina M%sT 1950
|
||
- -7:00 Swift M%sT 1972 Apr lastSun 2:00
|
||
+ -7:00 Swift M%sT 1972 Apr lastSun 2:00
|
||
-6:00 - CST
|
||
|
||
|
||
@@ -1854,9 +1828,7 @@
|
||
# Earlier this year I stumbled across a detailed article about the time
|
||
# keeping history of Creston; it was written by Tammy Hardwick who is the
|
||
# manager of the Creston & District Museum. The article was written in May 2009.
|
||
-# <a href="http://www.ilovecreston.com/?p=articles&t=spec&ar=260">
|
||
# http://www.ilovecreston.com/?p=articles&t=spec&ar=260
|
||
-# </a>
|
||
# According to the article, Creston has not changed its clocks since June 1918.
|
||
# i.e. Creston has been stuck on UTC-7 for 93 years.
|
||
# Dawson Creek, on the other hand, changed its clocks as recently as April 1972.
|
||
@@ -1864,18 +1836,16 @@
|
||
# Unfortunately the exact date for the time change in June 1918 remains
|
||
# unknown and will be difficult to ascertain. I e-mailed Tammy a few months
|
||
# ago to ask if Sunday June 2 was a reasonable guess. She said it was just
|
||
-# as plausible as any other date (in June). She also said that after writing the
|
||
-# article she had discovered another time change in 1916; this is the subject
|
||
-# of another article which she wrote in October 2010.
|
||
-# <a href="http://www.creston.museum.bc.ca/index.php?module=comments&uop=view_comment&cm+id=56">
|
||
+# as plausible as any other date (in June). She also said that after writing
|
||
+# the article she had discovered another time change in 1916; this is the
|
||
+# subject of another article which she wrote in October 2010.
|
||
# http://www.creston.museum.bc.ca/index.php?module=comments&uop=view_comment&cm+id=56
|
||
-# </a>
|
||
|
||
# Here is a summary of the three clock change events in Creston's history:
|
||
# 1. 1884 or 1885: adoption of Mountain Standard Time (GMT-7)
|
||
# Exact date unknown
|
||
# 2. Oct 1916: switch to Pacific Standard Time (GMT-8)
|
||
-# Exact date in October unknown; Sunday October 1 is a reasonable guess.
|
||
+# Exact date in October unknown; Sunday October 1 is a reasonable guess.
|
||
# 3. June 1918: switch to Pacific Daylight Time (GMT-7)
|
||
# Exact date in June unknown; Sunday June 2 is a reasonable guess.
|
||
# note#1:
|
||
@@ -1888,9 +1858,7 @@
|
||
# There is no guarantee that Creston will remain on Mountain Standard Time
|
||
# (UTC-7) forever.
|
||
# The subject was debated at least once this year by the town Council.
|
||
-# <a href="http://www.bclocalnews.com/kootenay_rockies/crestonvalleyadvance/news/116760809.html">
|
||
# http://www.bclocalnews.com/kootenay_rockies/crestonvalleyadvance/news/116760809.html
|
||
-# </a>
|
||
|
||
# During a period WWII, summer time (Daylight saying) was mandatory in Canada.
|
||
# In Creston, that was handled by shifting the area to PST (-8:00) then applying
|
||
@@ -1917,7 +1885,7 @@
|
||
-8:00 Canada P%sT
|
||
Zone America/Dawson_Creek -8:00:56 - LMT 1884
|
||
-8:00 Canada P%sT 1947
|
||
- -8:00 Vanc P%sT 1972 Aug 30 2:00
|
||
+ -8:00 Vanc P%sT 1972 Aug 30 2:00
|
||
-7:00 - MST
|
||
Zone America/Creston -7:46:04 - LMT 1884
|
||
-7:00 - MST 1916 Oct 1
|
||
@@ -1944,18 +1912,17 @@
|
||
|
||
# From Rives McDow (1999-09-04):
|
||
# Nunavut ... moved ... to incorporate the whole territory into one time zone.
|
||
-# <a href="http://www.nunatsiaq.com/nunavut/nvt90903_13.html">
|
||
# Nunavut moves to single time zone Oct. 31
|
||
-# </a>
|
||
+# http://www.nunatsiaq.com/nunavut/nvt90903_13.html
|
||
#
|
||
# From Antoine Leca (1999-09-06):
|
||
# We then need to create a new timezone for the Kitikmeot region of Nunavut
|
||
# to differentiate it from the Yellowknife region.
|
||
|
||
# From Paul Eggert (1999-09-20):
|
||
-# <a href="http://www.nunavut.com/basicfacts/english/basicfacts_1territory.html">
|
||
# Basic Facts: The New Territory
|
||
-# </a> (1999) reports that Pangnirtung operates on eastern time,
|
||
+# http://www.nunavut.com/basicfacts/english/basicfacts_1territory.html
|
||
+# (1999) reports that Pangnirtung operates on eastern time,
|
||
# and that Coral Harbour does not observe DST. We don't know when
|
||
# Pangnirtung switched to eastern time; we'll guess 1995.
|
||
|
||
@@ -1983,8 +1950,8 @@
|
||
# the current state of affairs.
|
||
|
||
# From Michaela Rodrigue, writing in the
|
||
-# <a href="http://www.nunatsiaq.com/archives/nunavut991130/nvt91119_17.html">
|
||
-# Nunatsiaq News (1999-11-19)</a>:
|
||
+# Nunatsiaq News (1999-11-19):
|
||
+# http://www.nunatsiaq.com/archives/nunavut991130/nvt91119_17.html
|
||
# Clyde River, Pangnirtung and Sanikiluaq now operate with two time zones,
|
||
# central - or Nunavut time - for government offices, and eastern time
|
||
# for municipal offices and schools.... Igloolik [was similar but then]
|
||
@@ -2002,10 +1969,8 @@
|
||
# Central Time and Southampton Island [in the Central zone] is not
|
||
# required to use daylight savings.
|
||
|
||
-# From
|
||
-# <a href="http://www.nunatsiaq.com/archives/nunavut001130/nvt21110_02.html">
|
||
-# Nunavut now has two time zones
|
||
-# </a> (2000-11-10):
|
||
+# From <http://www.nunatsiaq.com/archives/nunavut001130/nvt21110_02.html>
|
||
+# Nunavut now has two time zones (2000-11-10):
|
||
# The Nunavut government would allow its employees in Kugluktuk and
|
||
# Cambridge Bay to operate on central time year-round, putting them
|
||
# one hour behind the rest of Nunavut for six months during the winter.
|
||
@@ -2033,10 +1998,7 @@
|
||
# [Also see <http://www.nunatsiaq.com/nunavut/nvt10309_06.html> (2001-03-09).]
|
||
|
||
# From Gwillim Law (2005-05-21):
|
||
-# According to maps at
|
||
-# http://inms-ienm.nrc-cnrc.gc.ca/images/time_services/TZ01SWE.jpg
|
||
-# http://inms-ienm.nrc-cnrc.gc.ca/images/time_services/TZ01SSE.jpg
|
||
-# (both dated 2003), and
|
||
+# According to ...
|
||
# http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp
|
||
# (from a 1998 Canadian Geographic article), the de facto and de jure time
|
||
# for Southampton Island (at the north end of Hudson Bay) is UTC-5 all year
|
||
@@ -2045,9 +2007,11 @@
|
||
# predates the creation of Nunavut, it probably goes back many years....
|
||
# The Inuktitut name of Coral Harbour is Sallit, but it's rarely used.
|
||
#
|
||
-# From Paul Eggert (2005-07-26):
|
||
+# From Paul Eggert (2014-10-17):
|
||
# For lack of better information, assume that Southampton Island observed
|
||
-# daylight saving only during wartime.
|
||
+# daylight saving only during wartime. Gwillim Law's email also
|
||
+# mentioned maps now maintained by National Research Council Canada;
|
||
+# see above for an up-to-date link.
|
||
|
||
# From Chris Walton (2007-03-01):
|
||
# ... the community of Resolute (located on Cornwallis Island in
|
||
@@ -2096,9 +2060,7 @@
|
||
# used to be the mayor of Resolute Bay and he apparently owns half the
|
||
# businesses including "South Camp Inn." This website has some info on
|
||
# Aziz:
|
||
-# <a href="http://www.uphere.ca/node/493">
|
||
# http://www.uphere.ca/node/493
|
||
-# </a>
|
||
#
|
||
# I sent Aziz an e-mail asking when Resolute Bay had stopped using
|
||
# Eastern Standard Time.
|
||
@@ -2136,47 +2098,47 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
# aka Panniqtuuq
|
||
Zone America/Pangnirtung 0 - zzz 1921 # trading post est.
|
||
- -4:00 NT_YK A%sT 1995 Apr Sun>=1 2:00
|
||
- -5:00 Canada E%sT 1999 Oct 31 2:00
|
||
- -6:00 Canada C%sT 2000 Oct 29 2:00
|
||
+ -4:00 NT_YK A%sT 1995 Apr Sun>=1 2:00
|
||
+ -5:00 Canada E%sT 1999 Oct 31 2:00
|
||
+ -6:00 Canada C%sT 2000 Oct 29 2:00
|
||
-5:00 Canada E%sT
|
||
# formerly Frobisher Bay
|
||
Zone America/Iqaluit 0 - zzz 1942 Aug # Frobisher Bay est.
|
||
- -5:00 NT_YK E%sT 1999 Oct 31 2:00
|
||
- -6:00 Canada C%sT 2000 Oct 29 2:00
|
||
+ -5:00 NT_YK E%sT 1999 Oct 31 2:00
|
||
+ -6:00 Canada C%sT 2000 Oct 29 2:00
|
||
-5:00 Canada E%sT
|
||
# aka Qausuittuq
|
||
Zone America/Resolute 0 - zzz 1947 Aug 31 # Resolute founded
|
||
- -6:00 NT_YK C%sT 2000 Oct 29 2:00
|
||
- -5:00 - EST 2001 Apr 1 3:00
|
||
- -6:00 Canada C%sT 2006 Oct 29 2:00
|
||
- -5:00 - EST 2007 Mar 11 3:00
|
||
+ -6:00 NT_YK C%sT 2000 Oct 29 2:00
|
||
+ -5:00 - EST 2001 Apr 1 3:00
|
||
+ -6:00 Canada C%sT 2006 Oct 29 2:00
|
||
+ -5:00 - EST 2007 Mar 11 3:00
|
||
-6:00 Canada C%sT
|
||
# aka Kangiqiniq
|
||
Zone America/Rankin_Inlet 0 - zzz 1957 # Rankin Inlet founded
|
||
- -6:00 NT_YK C%sT 2000 Oct 29 2:00
|
||
- -5:00 - EST 2001 Apr 1 3:00
|
||
+ -6:00 NT_YK C%sT 2000 Oct 29 2:00
|
||
+ -5:00 - EST 2001 Apr 1 3:00
|
||
-6:00 Canada C%sT
|
||
# aka Iqaluktuuttiaq
|
||
Zone America/Cambridge_Bay 0 - zzz 1920 # trading post est.?
|
||
- -7:00 NT_YK M%sT 1999 Oct 31 2:00
|
||
- -6:00 Canada C%sT 2000 Oct 29 2:00
|
||
- -5:00 - EST 2000 Nov 5 0:00
|
||
- -6:00 - CST 2001 Apr 1 3:00
|
||
+ -7:00 NT_YK M%sT 1999 Oct 31 2:00
|
||
+ -6:00 Canada C%sT 2000 Oct 29 2:00
|
||
+ -5:00 - EST 2000 Nov 5 0:00
|
||
+ -6:00 - CST 2001 Apr 1 3:00
|
||
-7:00 Canada M%sT
|
||
Zone America/Yellowknife 0 - zzz 1935 # Yellowknife founded?
|
||
-7:00 NT_YK M%sT 1980
|
||
-7:00 Canada M%sT
|
||
Zone America/Inuvik 0 - zzz 1953 # Inuvik founded
|
||
- -8:00 NT_YK P%sT 1979 Apr lastSun 2:00
|
||
+ -8:00 NT_YK P%sT 1979 Apr lastSun 2:00
|
||
-7:00 NT_YK M%sT 1980
|
||
-7:00 Canada M%sT
|
||
Zone America/Whitehorse -9:00:12 - LMT 1900 Aug 20
|
||
- -9:00 NT_YK Y%sT 1966 Jul 1 2:00
|
||
+ -9:00 NT_YK Y%sT 1966 Jul 1 2:00
|
||
-8:00 NT_YK P%sT 1980
|
||
-8:00 Canada P%sT
|
||
Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
|
||
- -9:00 NT_YK Y%sT 1973 Oct 28 0:00
|
||
+ -9:00 NT_YK Y%sT 1973 Oct 28 0:00
|
||
-8:00 NT_YK P%sT 1980
|
||
-8:00 Canada P%sT
|
||
|
||
@@ -2188,9 +2150,8 @@
|
||
# From Paul Eggert (2001-03-05):
|
||
# The Investigation and Analysis Service of the
|
||
# Mexican Library of Congress (MLoC) has published a
|
||
-# <a href="http://www.cddhcu.gob.mx/bibliot/publica/inveyana/polisoc/horver/">
|
||
# history of Mexican local time (in Spanish)
|
||
-# </a>.
|
||
+# http://www.cddhcu.gob.mx/bibliot/publica/inveyana/polisoc/horver/
|
||
#
|
||
# Here are the discrepancies between Shanks & Pottenger (S&P) and the MLoC.
|
||
# (In all cases we go with the MLoC.)
|
||
@@ -2235,9 +2196,8 @@
|
||
# -------------- End Forwarded Message --------------
|
||
# From Paul Eggert (1996-06-12):
|
||
# For an English translation of the decree, see
|
||
-# <a href="http://mexico-travel.com/extra/timezone_eng.html">
|
||
# "Diario Oficial: Time Zone Changeover" (1996-01-04).
|
||
-# </a>
|
||
+# http://mexico-travel.com/extra/timezone_eng.html
|
||
|
||
# From Rives McDow (1998-10-08):
|
||
# The State of Quintana Roo has reverted back to central STD and DST times
|
||
@@ -2249,7 +2209,7 @@
|
||
# savings time so as to stay on the same time zone as the southern part of
|
||
# Arizona year round.
|
||
|
||
-# From Jesper Norgaard, translating
|
||
+# From Jesper Nørgaard, translating
|
||
# <http://www.reforma.com/nacional/articulo/064327/> (2001-01-17):
|
||
# In Oaxaca, the 55.000 teachers from the Section 22 of the National
|
||
# Syndicate of Education Workers, refuse to apply daylight saving each
|
||
@@ -2262,7 +2222,7 @@
|
||
# January 17, 2000 - The Energy Secretary, Ernesto Martens, announced
|
||
# that Summer Time will be reduced from seven to five months, starting
|
||
# this year....
|
||
-# <http://www.publico.com.mx/scripts/texto3.asp?action=pagina&pag=21&pos=p&secc=naci&date=01/17/2001>
|
||
+# http://www.publico.com.mx/scripts/texto3.asp?action=pagina&pag=21&pos=p&secc=naci&date=01/17/2001
|
||
# [translated], says "summer time will ... take effect on the first Sunday
|
||
# in May, and end on the last Sunday of September.
|
||
|
||
@@ -2270,23 +2230,22 @@
|
||
# The 2001-01-24 traditional Washington Post contained the page one
|
||
# story "Timely Issue Divides Mexicans."...
|
||
# http://www.washingtonpost.com/wp-dyn/articles/A37383-2001Jan23.html
|
||
-# ... Mexico City Mayor Lopez Obrador "...is threatening to keep
|
||
+# ... Mexico City Mayor López Obrador "...is threatening to keep
|
||
# Mexico City and its 20 million residents on a different time than
|
||
-# the rest of the country..." In particular, Lopez Obrador would abolish
|
||
+# the rest of the country..." In particular, López Obrador would abolish
|
||
# observation of Daylight Saving Time.
|
||
|
||
-# <a href="http://www.conae.gob.mx/ahorro/decretohorver2001.html#decre">
|
||
# Official statute published by the Energy Department
|
||
-# </a> (2001-02-01) shows Baja and Chihauhua as still using US DST rules,
|
||
-# and Sonora with no DST. This was reported by Jesper Norgaard (2001-02-03).
|
||
+# http://www.conae.gob.mx/ahorro/decretohorver2001.html#decre
|
||
+# (2001-02-01) shows Baja and Chihauhua as still using US DST rules,
|
||
+# and Sonora with no DST. This was reported by Jesper Nørgaard (2001-02-03).
|
||
|
||
# From Paul Eggert (2001-03-03):
|
||
#
|
||
-# <a href="http://www.latimes.com/news/nation/20010303/t000018766.html">
|
||
+# http://www.latimes.com/news/nation/20010303/t000018766.html
|
||
# James F. Smith writes in today's LA Times
|
||
-# </a>
|
||
# * Sonora will continue to observe standard time.
|
||
-# * Last week Mexico City's mayor Andres Manuel Lopez Obrador decreed that
|
||
+# * Last week Mexico City's mayor Andrés Manuel López Obrador decreed that
|
||
# the Federal District will not adopt DST.
|
||
# * 4 of 16 district leaders announced they'll ignore the decree.
|
||
# * The decree does not affect federal-controlled facilities including
|
||
@@ -2294,7 +2253,7 @@
|
||
#
|
||
# For now we'll assume that the Federal District will bow to federal rules.
|
||
|
||
-# From Jesper Norgaard (2001-04-01):
|
||
+# From Jesper Nørgaard (2001-04-01):
|
||
# I found some references to the Mexican application of daylight
|
||
# saving, which modifies what I had already sent you, stating earlier
|
||
# that a number of northern Mexican states would go on daylight
|
||
@@ -2303,7 +2262,7 @@
|
||
# saving all year) will follow the original decree of president
|
||
# Vicente Fox, starting daylight saving May 6, 2001 and ending
|
||
# September 30, 2001.
|
||
-# References: "Diario de Monterrey" <www.diariodemonterrey.com/index.asp>
|
||
+# References: "Diario de Monterrey" <http://www.diariodemonterrey.com/index.asp>
|
||
# Palabra <http://palabra.infosel.com/010331/primera/ppri3101.pdf> (2001-03-31)
|
||
|
||
# From Reuters (2001-09-04):
|
||
@@ -2315,7 +2274,7 @@
|
||
# standard time. "This is so residents of the Federal District are not
|
||
# subject to unexpected time changes," a statement from the court said.
|
||
|
||
-# From Jesper Norgaard Welen (2002-03-12):
|
||
+# From Jesper Nørgaard Welen (2002-03-12):
|
||
# ... consulting my local grocery store(!) and my coworkers, they all insisted
|
||
# that a new decision had been made to reinstate US style DST in Mexico....
|
||
# http://www.conae.gob.mx/ahorro/horaver2001_m1_2002.html (2002-02-20)
|
||
@@ -2329,48 +2288,36 @@
|
||
# > the United States.
|
||
# Now this has passed both the Congress and the Senate, so starting from
|
||
# 2010, some border regions will be the same:
|
||
-# <a href="http://www.signonsandiego.com/news/2009/dec/28/clocks-will-match-both-sides-border/">
|
||
# http://www.signonsandiego.com/news/2009/dec/28/clocks-will-match-both-sides-border/
|
||
-# </a>
|
||
-# <a href="http://www.elmananarey.com/diario/noticia/nacional/noticias/empatan_horario_de_frontera_con_eu/621939">
|
||
# http://www.elmananarey.com/diario/noticia/nacional/noticias/empatan_horario_de_frontera_con_eu/621939
|
||
-# </a>
|
||
# (Spanish)
|
||
#
|
||
# Could not find the new law text, but the proposed law text changes are here:
|
||
-# <a href="http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/20091210-V.pdf">
|
||
# http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/20091210-V.pdf
|
||
-# </a>
|
||
# (Gaceta Parlamentaria)
|
||
#
|
||
# There is also a list of the votes here:
|
||
-# <a href="http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/V2-101209.html">
|
||
# http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/V2-101209.html
|
||
-# </a>
|
||
#
|
||
# Our page:
|
||
-# <a href="http://www.timeanddate.com/news/time/north-mexico-dst-change.html">
|
||
# http://www.timeanddate.com/news/time/north-mexico-dst-change.html
|
||
-# </a>
|
||
|
||
# From Arthur David Olson (2010-01-20):
|
||
# The page
|
||
-# <a href="http://dof.gob.mx/nota_detalle.php?codigo=5127480&fecha=06/01/2010">
|
||
# http://dof.gob.mx/nota_detalle.php?codigo=5127480&fecha=06/01/2010
|
||
-# </a>
|
||
# includes this text:
|
||
# En los municipios fronterizos de Tijuana y Mexicali en Baja California;
|
||
-# Juárez y Ojinaga en Chihuahua; Acuña y Piedras Negras en Coahuila;
|
||
-# Anáhuac en Nuevo León; y Nuevo Laredo, Reynosa y Matamoros en
|
||
-# Tamaulipas, la aplicación de este horario estacional surtirá efecto
|
||
-# desde las dos horas del segundo domingo de marzo y concluirá a las dos
|
||
+# Juárez y Ojinaga en Chihuahua; Acuña y Piedras Negras en Coahuila;
|
||
+# Anáhuac en Nuevo León; y Nuevo Laredo, Reynosa y Matamoros en
|
||
+# Tamaulipas, la aplicación de este horario estacional surtirá efecto
|
||
+# desde las dos horas del segundo domingo de marzo y concluirá a las dos
|
||
# horas del primer domingo de noviembre.
|
||
# En los municipios fronterizos que se encuentren ubicados en la franja
|
||
-# fronteriza norte en el territorio comprendido entre la línea
|
||
-# internacional y la línea paralela ubicada a una distancia de veinte
|
||
-# kilómetros, así como la Ciudad de Ensenada, Baja California, hacia el
|
||
-# interior del país, la aplicación de este horario estacional surtirá
|
||
-# efecto desde las dos horas del segundo domingo de marzo y concluirá a
|
||
+# fronteriza norte en el territorio comprendido entre la línea
|
||
+# internacional y la línea paralela ubicada a una distancia de veinte
|
||
+# kilómetros, así como la Ciudad de Ensenada, Baja California, hacia el
|
||
+# interior del país, la aplicación de este horario estacional surtirá
|
||
+# efecto desde las dos horas del segundo domingo de marzo y concluirá a
|
||
# las dos horas del primer domingo de noviembre.
|
||
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
@@ -2389,39 +2336,39 @@
|
||
Rule Mexico 2002 max - Apr Sun>=1 2:00 1:00 D
|
||
Rule Mexico 2002 max - Oct lastSun 2:00 0 S
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-# Quintana Roo
|
||
+# Quintana Roo; represented by Cancún
|
||
Zone America/Cancun -5:47:04 - LMT 1922 Jan 1 0:12:56
|
||
-6:00 - CST 1981 Dec 23
|
||
-5:00 Mexico E%sT 1998 Aug 2 2:00
|
||
-6:00 Mexico C%sT
|
||
-# Campeche, Yucatan
|
||
+# Campeche, Yucatán; represented by Mérida
|
||
Zone America/Merida -5:58:28 - LMT 1922 Jan 1 0:01:32
|
||
-6:00 - CST 1981 Dec 23
|
||
-5:00 - EST 1982 Dec 2
|
||
-6:00 Mexico C%sT
|
||
-# Coahuila, Durango, Nuevo Leon, Tamaulipas (near US border)
|
||
+# Coahuila, Durango, Nuevo León, Tamaulipas (near US border)
|
||
Zone America/Matamoros -6:40:00 - LMT 1921 Dec 31 23:20:00
|
||
-6:00 - CST 1988
|
||
-6:00 US C%sT 1989
|
||
-6:00 Mexico C%sT 2010
|
||
-6:00 US C%sT
|
||
-# Coahuila, Durango, Nuevo Leon, Tamaulipas (away from US border)
|
||
+# Coahuila, Durango, Nuevo León, Tamaulipas (away from US border)
|
||
Zone America/Monterrey -6:41:16 - LMT 1921 Dec 31 23:18:44
|
||
-6:00 - CST 1988
|
||
-6:00 US C%sT 1989
|
||
-6:00 Mexico C%sT
|
||
# Central Mexico
|
||
-Zone America/Mexico_City -6:36:36 - LMT 1922 Jan 1 0:23:24
|
||
+Zone America/Mexico_City -6:36:36 - LMT 1922 Jan 1 0:23:24
|
||
-7:00 - MST 1927 Jun 10 23:00
|
||
-6:00 - CST 1930 Nov 15
|
||
-7:00 - MST 1931 May 1 23:00
|
||
-6:00 - CST 1931 Oct
|
||
-7:00 - MST 1932 Apr 1
|
||
- -6:00 Mexico C%sT 2001 Sep 30 02:00
|
||
+ -6:00 Mexico C%sT 2001 Sep 30 2:00
|
||
-6:00 - CST 2002 Feb 20
|
||
-6:00 Mexico C%sT
|
||
# Chihuahua (near US border)
|
||
-Zone America/Ojinaga -6:57:40 - LMT 1922 Jan 1 0:02:20
|
||
+Zone America/Ojinaga -6:57:40 - LMT 1922 Jan 1 0:02:20
|
||
-7:00 - MST 1927 Jun 10 23:00
|
||
-6:00 - CST 1930 Nov 15
|
||
-7:00 - MST 1931 May 1 23:00
|
||
@@ -2429,7 +2376,7 @@
|
||
-7:00 - MST 1932 Apr 1
|
||
-6:00 - CST 1996
|
||
-6:00 Mexico C%sT 1998
|
||
- -6:00 - CST 1998 Apr Sun>=1 3:00
|
||
+ -6:00 - CST 1998 Apr Sun>=1 3:00
|
||
-7:00 Mexico M%sT 2010
|
||
-7:00 US M%sT
|
||
# Chihuahua (away from US border)
|
||
@@ -2441,7 +2388,7 @@
|
||
-7:00 - MST 1932 Apr 1
|
||
-6:00 - CST 1996
|
||
-6:00 Mexico C%sT 1998
|
||
- -6:00 - CST 1998 Apr Sun>=1 3:00
|
||
+ -6:00 - CST 1998 Apr Sun>=1 3:00
|
||
-7:00 Mexico M%sT
|
||
# Sonora
|
||
Zone America/Hermosillo -7:23:52 - LMT 1921 Dec 31 23:36:08
|
||
@@ -2457,42 +2404,33 @@
|
||
-7:00 - MST
|
||
|
||
# From Alexander Krivenyshev (2010-04-21):
|
||
-# According to news, Bahía de Banderas (Mexican state of Nayarit)
|
||
+# According to news, Bahía de Banderas (Mexican state of Nayarit)
|
||
# changed time zone UTC-7 to new time zone UTC-6 on April 4, 2010 (to
|
||
# share the same time zone as nearby city Puerto Vallarta, Jalisco).
|
||
#
|
||
# (Spanish)
|
||
-# Bahía de Banderas homologa su horario al del centro del
|
||
-# país, a partir de este domingo
|
||
-# <a href="http://www.nayarit.gob.mx/notes.asp?id=20748">
|
||
+# Bahía de Banderas homologa su horario al del centro del
|
||
+# país, a partir de este domingo
|
||
# http://www.nayarit.gob.mx/notes.asp?id=20748
|
||
-# </a>
|
||
#
|
||
-# Bahía de Banderas homologa su horario con el del Centro del
|
||
-# País
|
||
-# <a href="http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50">
|
||
-# http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50"
|
||
-# </a>
|
||
+# Bahía de Banderas homologa su horario con el del Centro del
|
||
+# País
|
||
+# http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50
|
||
#
|
||
# (English)
|
||
-# Puerto Vallarta and Bahía de Banderas: One Time Zone
|
||
-# <a href="http://virtualvallarta.com/puertovallarta/puertovallarta/localnews/2009-12-03-Puerto-Vallarta-and-Bahia-de-Banderas-One-Time-Zone.shtml">
|
||
+# Puerto Vallarta and Bahía de Banderas: One Time Zone
|
||
# http://virtualvallarta.com/puertovallarta/puertovallarta/localnews/2009-12-03-Puerto-Vallarta-and-Bahia-de-Banderas-One-Time-Zone.shtml
|
||
-# </a>
|
||
-#
|
||
-# or
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_mexico08.html">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_mexico08.html
|
||
-# </a>
|
||
#
|
||
# "Mexico's Senate approved the amendments to the Mexican Schedule System that
|
||
-# will allow Bahía de Banderas and Puerto Vallarta to share the same time
|
||
+# will allow Bahía de Banderas and Puerto Vallarta to share the same time
|
||
# zone ..."
|
||
# Baja California Sur, Nayarit, Sinaloa
|
||
|
||
# From Arthur David Olson (2010-05-01):
|
||
# Use "Bahia_Banderas" to keep the name to fourteen characters.
|
||
|
||
+# Mazatlán
|
||
Zone America/Mazatlan -7:05:40 - LMT 1921 Dec 31 23:54:20
|
||
-7:00 - MST 1927 Jun 10 23:00
|
||
-6:00 - CST 1930 Nov 15
|
||
@@ -2504,6 +2442,7 @@
|
||
-8:00 - PST 1970
|
||
-7:00 Mexico M%sT
|
||
|
||
+# Bahía de Banderas
|
||
Zone America/Bahia_Banderas -7:01:00 - LMT 1921 Dec 31 23:59:00
|
||
-7:00 - MST 1927 Jun 10 23:00
|
||
-6:00 - CST 1930 Nov 15
|
||
@@ -2513,7 +2452,7 @@
|
||
-6:00 - CST 1942 Apr 24
|
||
-7:00 - MST 1949 Jan 14
|
||
-8:00 - PST 1970
|
||
- -7:00 Mexico M%sT 2010 Apr 4 2:00
|
||
+ -7:00 Mexico M%sT 2010 Apr 4 2:00
|
||
-6:00 Mexico C%sT
|
||
|
||
# Baja California (near US border)
|
||
@@ -2560,7 +2499,7 @@
|
||
# America/Tijuana only in that it did not observe DST from 1976
|
||
# through 1995. This was as per Shanks (1999). But Shanks & Pottenger say
|
||
# Ensenada did not observe DST from 1948 through 1975. Guy Harris reports
|
||
-# that the 1987 OAG says "Only Ensenada, Mexicale, San Felipe and
|
||
+# that the 1987 OAG says "Only Ensenada, Mexicali, San Felipe and
|
||
# Tijuana observe DST," which agrees with Shanks & Pottenger but implies that
|
||
# DST-observance was a town-by-town matter back then. This concerns
|
||
# data after 1970 so most likely there should be at least one Zone
|
||
@@ -2573,7 +2512,7 @@
|
||
###############################################################################
|
||
|
||
# Anguilla
|
||
-# See 'southamerica'.
|
||
+# See America/Port_of_Spain.
|
||
|
||
# Antigua and Barbuda
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
@@ -2609,8 +2548,8 @@
|
||
Rule Barb 1979 only - Sep 30 2:00 0 S
|
||
Rule Barb 1980 only - Sep 25 2:00 0 S
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone America/Barbados -3:58:29 - LMT 1924 # Bridgetown
|
||
- -3:58:29 - BMT 1932 # Bridgetown Mean Time
|
||
+Zone America/Barbados -3:58:29 - LMT 1924 # Bridgetown
|
||
+ -3:58:29 - BMT 1932 # Bridgetown Mean Time
|
||
-4:00 Barb A%sT
|
||
|
||
# Belize
|
||
@@ -2640,20 +2579,20 @@
|
||
# http://www.theroyalgazette.com/apps/pbcs.dll/article?AID=/20060529/NEWS/105290135
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Atlantic/Bermuda -4:19:18 - LMT 1930 Jan 1 2:00 # Hamilton
|
||
- -4:00 - AST 1974 Apr 28 2:00
|
||
+Zone Atlantic/Bermuda -4:19:18 - LMT 1930 Jan 1 2:00 # Hamilton
|
||
+ -4:00 - AST 1974 Apr 28 2:00
|
||
-4:00 Canada A%sT 1976
|
||
-4:00 US A%sT
|
||
|
||
# Cayman Is
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown
|
||
- -5:07:11 - KMT 1912 Feb # Kingston Mean Time
|
||
+Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown
|
||
+ -5:07:11 - KMT 1912 Feb # Kingston Mean Time
|
||
-5:00 - EST
|
||
|
||
# Costa Rica
|
||
|
||
-# Milne gives -5:36:13.3 as San Jose mean time; round to nearest.
|
||
+# Milne gives -5:36:13.3 as San José mean time; round to nearest.
|
||
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
Rule CR 1979 1980 - Feb lastSun 0:00 1:00 D
|
||
@@ -2663,10 +2602,10 @@
|
||
# go with Shanks & Pottenger.
|
||
Rule CR 1991 only - Jul 1 0:00 0 S
|
||
Rule CR 1992 only - Mar 15 0:00 0 S
|
||
-# There are too many San Joses elsewhere, so we'll use 'Costa Rica'.
|
||
+# There are too many San Josés elsewhere, so we'll use 'Costa Rica'.
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone America/Costa_Rica -5:36:13 - LMT 1890 # San Jose
|
||
- -5:36:13 - SJMT 1921 Jan 15 # San Jose Mean Time
|
||
+Zone America/Costa_Rica -5:36:13 - LMT 1890 # San José
|
||
+ -5:36:13 - SJMT 1921 Jan 15 # San José Mean Time
|
||
-6:00 CR C%sT
|
||
# Coco
|
||
# no information; probably like America/Costa_Rica
|
||
@@ -2685,8 +2624,8 @@
|
||
# During the game, play-by-play announcer Jim Hunter noted that
|
||
# "We'll be losing two hours of sleep...Cuba switched to Daylight Saving
|
||
# Time today." (The "two hour" remark referred to losing one hour of
|
||
-# sleep on 1999-03-28--when the announcers were in Cuba as it switched
|
||
-# to DST--and one more hour on 1999-04-04--when the announcers will have
|
||
+# sleep on 1999-03-28 - when the announcers were in Cuba as it switched
|
||
+# to DST - and one more hour on 1999-04-04 - when the announcers will have
|
||
# returned to Baltimore, which switches on that date.)
|
||
|
||
# From Steffen Thorsen (2013-11-11):
|
||
@@ -2708,16 +2647,16 @@
|
||
# adjustment in Cuba. We will stay in daylight saving time:
|
||
# http://www.granma.cu/espanol/2005/noviembre/mier9/horario.html
|
||
|
||
-# From Jesper Norgaard Welen (2006-10-21):
|
||
+# From Jesper Nørgaard Welen (2006-10-21):
|
||
# An article in GRANMA INTERNACIONAL claims that Cuba will end
|
||
# the 3 years of permanent DST next weekend, see
|
||
# http://www.granma.cu/ingles/2006/octubre/lun16/43horario.html
|
||
# "On Saturday night, October 28 going into Sunday, October 29, at 01:00,
|
||
-# watches should be set back one hour -- going back to 00:00 hours -- returning
|
||
+# watches should be set back one hour - going back to 00:00 hours - returning
|
||
# to the normal schedule....
|
||
|
||
# From Paul Eggert (2007-03-02):
|
||
-# http://www.granma.cubaweb.cu/english/news/art89.html, dated yesterday,
|
||
+# <http://www.granma.cubaweb.cu/english/news/art89.html>, dated yesterday,
|
||
# says Cuban clocks will advance at midnight on March 10.
|
||
# For lack of better information, assume Cuba will use US rules,
|
||
# except that it switches at midnight standard time as usual.
|
||
@@ -2731,10 +2670,10 @@
|
||
# http://www.prensalatina.com.mx/article.asp?ID=%7B4CC32C1B-A9F7-42FB-8A07-8631AFC923AF%7D&language=ES
|
||
# http://actualidad.terra.es/sociedad/articulo/cuba_llama_ahorrar_energia_cambio_1957044.htm
|
||
#
|
||
-# From Alex Kryvenishev (2007-10-25):
|
||
+# From Alex Krivenyshev (2007-10-25):
|
||
# Here is also article from Granma (Cuba):
|
||
#
|
||
-# [Regira] el Horario Normal desde el [proximo] domingo 28 de octubre
|
||
+# Regirá el Horario Normal desde el próximo domingo 28 de octubre
|
||
# http://www.granma.cubaweb.cu/2007/10/24/nacional/artic07.html
|
||
#
|
||
# http://www.worldtimezone.com/dst_news/dst_news_cuba03.html
|
||
@@ -2742,23 +2681,18 @@
|
||
# From Arthur David Olson (2008-03-09):
|
||
# I'm in Maryland which is now observing United States Eastern Daylight
|
||
# Time. At 9:44 local time I used RealPlayer to listen to
|
||
-# <a href="http://media.enet.cu/radioreloj">
|
||
# http://media.enet.cu/radioreloj
|
||
-# </a>, a Cuban information station, and heard
|
||
+# a Cuban information station, and heard
|
||
# the time announced as "ocho cuarenta y cuatro" ("eight forty-four"),
|
||
# indicating that Cuba is still on standard time.
|
||
|
||
# From Steffen Thorsen (2008-03-12):
|
||
# It seems that Cuba will start DST on Sunday, 2007-03-16...
|
||
# It was announced yesterday, according to this source (in Spanish):
|
||
-# <a href="http://www.nnc.cubaweb.cu/marzo-2008/cien-1-11-3-08.htm">
|
||
# http://www.nnc.cubaweb.cu/marzo-2008/cien-1-11-3-08.htm
|
||
-# </a>
|
||
#
|
||
# Some more background information is posted here:
|
||
-# <a href="http://www.timeanddate.com/news/time/cuba-starts-dst-march-16.html">
|
||
# http://www.timeanddate.com/news/time/cuba-starts-dst-march-16.html
|
||
-# </a>
|
||
#
|
||
# The article also says that Cuba has been observing DST since 1963,
|
||
# while Shanks (and tzdata) has 1965 as the first date (except in the
|
||
@@ -2768,18 +2702,14 @@
|
||
# change some historic records as well.
|
||
#
|
||
# One example:
|
||
-# <a href="http://www.radiohc.cu/espanol/noticias/mar07/11mar/hor.htm">
|
||
# http://www.radiohc.cu/espanol/noticias/mar07/11mar/hor.htm
|
||
-# </a>
|
||
|
||
-# From Jesper Norgaard Welen (2008-03-13):
|
||
+# From Jesper Nørgaard Welen (2008-03-13):
|
||
# The Cuban time change has just been confirmed on the most authoritative
|
||
# web site, the Granma. Please check out
|
||
-# <a href="http://www.granma.cubaweb.cu/2008/03/13/nacional/artic10.html">
|
||
# http://www.granma.cubaweb.cu/2008/03/13/nacional/artic10.html
|
||
-# </a>
|
||
#
|
||
-# Basically as expected after Steffen Thorsens information, the change
|
||
+# Basically as expected after Steffen Thorsen's information, the change
|
||
# will take place midnight between Saturday and Sunday.
|
||
|
||
# From Arthur David Olson (2008-03-12):
|
||
@@ -2790,18 +2720,14 @@
|
||
# midnight between Saturday, March 07, 2009 and Sunday, March 08, 2009-
|
||
# not on midnight March 14 / March 15 as previously thought.
|
||
#
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_cuba05.html">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_cuba05.html
|
||
# (in Spanish)
|
||
-# </a>
|
||
|
||
# From Arthur David Olson (2009-03-09)
|
||
# I listened over the Internet to
|
||
-# <a href="http://media.enet.cu/readioreloj">
|
||
# http://media.enet.cu/readioreloj
|
||
-# </a>
|
||
# this morning; when it was 10:05 a. m. here in Bethesda, Maryland the
|
||
-# the time was announced as "diez cinco"--the same time as here, indicating
|
||
+# the time was announced as "diez cinco" - the same time as here, indicating
|
||
# that has indeed switched to DST. Assume second Sunday from 2009 forward.
|
||
|
||
# From Steffen Thorsen (2011-03-08):
|
||
@@ -2810,42 +2736,30 @@
|
||
# changed at all).
|
||
#
|
||
# Source:
|
||
-# <a href="http://granma.co.cu/2011/03/08/nacional/artic01.html">
|
||
# http://granma.co.cu/2011/03/08/nacional/artic01.html
|
||
-# </a>
|
||
#
|
||
# Our info:
|
||
-# <a href="http://www.timeanddate.com/news/time/cuba-starts-dst-2011.html">
|
||
# http://www.timeanddate.com/news/time/cuba-starts-dst-2011.html
|
||
-# </a>
|
||
#
|
||
# From Steffen Thorsen (2011-10-30)
|
||
# Cuba will end DST two weeks later this year. Instead of going back
|
||
# tonight, it has been delayed to 2011-11-13 at 01:00.
|
||
#
|
||
# One source (Spanish)
|
||
-# <a href="http://www.radioangulo.cu/noticias/cuba/17105-cuba-restablecera-el-horario-del-meridiano-de-greenwich.html">
|
||
# http://www.radioangulo.cu/noticias/cuba/17105-cuba-restablecera-el-horario-del-meridiano-de-greenwich.html
|
||
-# </a>
|
||
#
|
||
# Our page:
|
||
-# <a href="http://www.timeanddate.com/news/time/cuba-time-changes-2011.html">
|
||
# http://www.timeanddate.com/news/time/cuba-time-changes-2011.html
|
||
-# </a>
|
||
#
|
||
# From Steffen Thorsen (2012-03-01)
|
||
# According to Radio Reloj, Cuba will start DST on Midnight between March
|
||
# 31 and April 1.
|
||
#
|
||
# Radio Reloj has the following info (Spanish):
|
||
-# <a href="http://www.radioreloj.cu/index.php/noticias-radio-reloj/71-miscelaneas/7529-cuba-aplicara-el-horario-de-verano-desde-el-1-de-abril">
|
||
# http://www.radioreloj.cu/index.php/noticias-radio-reloj/71-miscelaneas/7529-cuba-aplicara-el-horario-de-verano-desde-el-1-de-abril
|
||
-# </a>
|
||
#
|
||
# Our info on it:
|
||
-# <a href="http://www.timeanddate.com/news/time/cuba-starts-dst-2012.html">
|
||
# http://www.timeanddate.com/news/time/cuba-starts-dst-2012.html
|
||
-# </a>
|
||
|
||
# From Steffen Thorsen (2012-11-03):
|
||
# Radio Reloj and many other sources report that Cuba is changing back
|
||
@@ -2901,7 +2815,7 @@
|
||
-5:00 Cuba C%sT
|
||
|
||
# Dominica
|
||
-# See 'southamerica'.
|
||
+# See America/Port_of_Spain.
|
||
|
||
# Dominican Republic
|
||
|
||
@@ -2934,8 +2848,8 @@
|
||
Zone America/Santo_Domingo -4:39:36 - LMT 1890
|
||
-4:40 - SDMT 1933 Apr 1 12:00 # S. Dom. MT
|
||
-5:00 DR E%sT 1974 Oct 27
|
||
- -4:00 - AST 2000 Oct 29 02:00
|
||
- -5:00 US E%sT 2000 Dec 3 01:00
|
||
+ -4:00 - AST 2000 Oct 29 2:00
|
||
+ -5:00 US E%sT 2000 Dec 3 1:00
|
||
-4:00 - AST
|
||
|
||
# El Salvador
|
||
@@ -2946,20 +2860,20 @@
|
||
# There are too many San Salvadors elsewhere, so use America/El_Salvador
|
||
# instead of America/San_Salvador.
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone America/El_Salvador -5:56:48 - LMT 1921 # San Salvador
|
||
+Zone America/El_Salvador -5:56:48 - LMT 1921 # San Salvador
|
||
-6:00 Salv C%sT
|
||
|
||
# Grenada
|
||
# Guadeloupe
|
||
-# St Barthelemy
|
||
+# St Barthélemy
|
||
# St Martin (French part)
|
||
-# See 'southamerica'.
|
||
+# See America/Port_of_Spain.
|
||
|
||
# Guatemala
|
||
#
|
||
# From Gwillim Law (2006-04-22), after a heads-up from Oscar van Vlijmen:
|
||
# Diario Co Latino, at
|
||
-# http://www.diariocolatino.com/internacionales/detalles.asp?NewsID=8079,
|
||
+# <http://www.diariocolatino.com/internacionales/detalles.asp?NewsID=8079>,
|
||
# says in an article dated 2006-04-19 that the Guatemalan government had
|
||
# decided on that date to advance official time by 60 minutes, to lessen the
|
||
# impact of the elevated cost of oil.... Daylight saving time will last from
|
||
@@ -2967,7 +2881,7 @@
|
||
# From Paul Eggert (2006-06-22):
|
||
# The Ministry of Energy and Mines, press release CP-15/2006
|
||
# (2006-04-19), says DST ends at 24:00. See
|
||
-# <http://www.sieca.org.gt/Sitio_publico/Energeticos/Doc/Medidas/Cambio_Horario_Nac_190406.pdf>.
|
||
+# http://www.sieca.org.gt/Sitio_publico/Energeticos/Doc/Medidas/Cambio_Horario_Nac_190406.pdf
|
||
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
Rule Guat 1973 only - Nov 25 0:00 1:00 D
|
||
@@ -2984,11 +2898,10 @@
|
||
|
||
# Haiti
|
||
# From Gwillim Law (2005-04-15):
|
||
-# Risto O. Nykanen wrote me that Haiti is now on DST.
|
||
-# I searched for confirmation, and I found a
|
||
-# <a href="http://www.haitianconsulate.org/time.doc"> press release
|
||
+# Risto O. Nykänen wrote me that Haiti is now on DST.
|
||
+# I searched for confirmation, and I found a press release
|
||
# on the Web page of the Haitian Consulate in Chicago (2005-03-31),
|
||
-# </a>. Translated from French, it says:
|
||
+# <http://www.haitianconsulate.org/time.doc>. Translated from French, it says:
|
||
#
|
||
# "The Prime Minister's Communication Office notifies the public in general
|
||
# and the press in particular that, following a decision of the Interior
|
||
@@ -3065,14 +2978,14 @@
|
||
# <http://www.latribuna.hn/99299.html> that Manuel Zelaya, the president
|
||
# of Honduras, refused to back down on this.
|
||
|
||
-# From Jesper Norgaard Welen (2006-08-08):
|
||
+# From Jesper Nørgaard Welen (2006-08-08):
|
||
# It seems that Honduras has returned from DST to standard time this Monday at
|
||
# 00:00 hours (prolonging Sunday to 25 hours duration).
|
||
# http://www.worldtimezone.com/dst_news/dst_news_honduras04.html
|
||
|
||
# From Paul Eggert (2006-08-08):
|
||
-# Also see Diario El Heraldo, The country returns to standard time (2006-08-08)
|
||
-# <http://www.elheraldo.hn/nota.php?nid=54941&sec=12>.
|
||
+# Also see Diario El Heraldo, The country returns to standard time (2006-08-08).
|
||
+# http://www.elheraldo.hn/nota.php?nid=54941&sec=12
|
||
# It mentions executive decree 18-2006.
|
||
|
||
# From Steffen Thorsen (2006-08-17):
|
||
@@ -3099,23 +3012,34 @@
|
||
# Shanks & Pottenger give -5:07:12, but Milne records -5:07:10.41 from an
|
||
# unspecified official document, and says "This time is used throughout the
|
||
# island". Go with Milne. Round to the nearest second as required by zic.
|
||
+#
|
||
+# Shanks & Pottenger give April 28 for the 1974 spring-forward transition, but
|
||
+# Lance Neita writes that Prime Minister Michael Manley decreed it January 5.
|
||
+# Assume Neita meant Jan 6 02:00, the same as the US. Neita also writes that
|
||
+# Manley's supporters associated this act with Manley's nickname "Joshua"
|
||
+# (recall that in the Bible the sun stood still at Joshua's request),
|
||
+# and with the Rod of Correction which Manley said he had received from
|
||
+# Haile Selassie, Emperor of Ethiopia. See:
|
||
+# Neita L. The politician in all of us. Jamaica Observer 2014-09-20
|
||
+# http://www.jamaicaobserver.com/columns/The-politician-in-all-of-us_17573647
|
||
+#
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone America/Jamaica -5:07:11 - LMT 1890 # Kingston
|
||
+Zone America/Jamaica -5:07:11 - LMT 1890 # Kingston
|
||
-5:07:11 - KMT 1912 Feb # Kingston Mean Time
|
||
- -5:00 - EST 1974 Apr 28 2:00
|
||
+ -5:00 - EST 1974
|
||
-5:00 US E%sT 1984
|
||
-5:00 - EST
|
||
|
||
# Martinique
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone America/Martinique -4:04:20 - LMT 1890 # Fort-de-France
|
||
- -4:04:20 - FFMT 1911 May # Fort-de-France MT
|
||
+Zone America/Martinique -4:04:20 - LMT 1890 # Fort-de-France
|
||
+ -4:04:20 - FFMT 1911 May # Fort-de-France MT
|
||
-4:00 - AST 1980 Apr 6
|
||
-4:00 1:00 ADT 1980 Sep 28
|
||
-4:00 - AST
|
||
|
||
# Montserrat
|
||
-# See 'southamerica'.
|
||
+# See America/Port_of_Spain.
|
||
|
||
# Nicaragua
|
||
#
|
||
@@ -3138,27 +3062,27 @@
|
||
# From Gwillim Law (2005-04-21):
|
||
# The Associated Press story on the time change, which can be found at
|
||
# http://www.lapalmainteractivo.com/guias/content/gen/ap/America_Latina/AMC_GEN_NICARAGUA_HORA.html
|
||
-# and elsewhere, says (fifth paragraph, translated from Spanish): "The last
|
||
+# and elsewhere, says (fifth paragraph, translated from Spanish): "The last
|
||
# time that a change of clocks was applied to save energy was in the year 2000
|
||
-# during the Arnoldo Aleman administration."...
|
||
+# during the Arnoldo Alemán administration."...
|
||
# The northamerica file says that Nicaragua has been on UTC-6 continuously
|
||
# since December 1998. I wasn't able to find any details of Nicaraguan time
|
||
# changes in 2000. Perhaps a note could be added to the northamerica file, to
|
||
# the effect that we have indirect evidence that DST was observed in 2000.
|
||
#
|
||
-# From Jesper Norgaard Welen (2005-11-02):
|
||
+# From Jesper Nørgaard Welen (2005-11-02):
|
||
# Nicaragua left DST the 2005-10-02 at 00:00 (local time).
|
||
# http://www.presidencia.gob.ni/presidencia/files_index/secretaria/comunicados/2005/septiembre/26septiembre-cambio-hora.htm
|
||
# (2005-09-26)
|
||
#
|
||
-# From Jesper Norgaard Welen (2006-05-05):
|
||
+# From Jesper Nørgaard Welen (2006-05-05):
|
||
# http://www.elnuevodiario.com.ni/2006/05/01/nacionales/18410
|
||
# (my informal translation)
|
||
-# By order of the president of the republic, Enrique Bolanos, Nicaragua
|
||
+# By order of the president of the republic, Enrique Bolaños, Nicaragua
|
||
# advanced by sixty minutes their official time, yesterday at 2 in the
|
||
-# morning, and will stay that way until 30.th. of september.
|
||
+# morning, and will stay that way until 30th of September.
|
||
#
|
||
-# From Jesper Norgaard Welen (2006-09-30):
|
||
+# From Jesper Nørgaard Welen (2006-09-30):
|
||
# http://www.presidencia.gob.ni/buscador_gaceta/BD/DECRETOS/2006/D-063-2006P-PRN-Cambio-Hora.pdf
|
||
# My informal translation runs:
|
||
# The natural sun time is restored in all the national territory, in that the
|
||
@@ -3176,7 +3100,7 @@
|
||
-5:45:12 - MMT 1934 Jun 23 # Managua Mean Time?
|
||
-6:00 - CST 1973 May
|
||
-5:00 - EST 1975 Feb 16
|
||
- -6:00 Nic C%sT 1992 Jan 1 4:00
|
||
+ -6:00 Nic C%sT 1992 Jan 1 4:00
|
||
-5:00 - EST 1992 Sep 24
|
||
-6:00 - CST 1993
|
||
-5:00 - EST 1997
|
||
@@ -3185,36 +3109,36 @@
|
||
# Panama
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Panama -5:18:08 - LMT 1890
|
||
- -5:19:36 - CMT 1908 Apr 22 # Colon Mean Time
|
||
+ -5:19:36 - CMT 1908 Apr 22 # Colón Mean Time
|
||
-5:00 - EST
|
||
|
||
# Puerto Rico
|
||
# There are too many San Juans elsewhere, so we'll use 'Puerto_Rico'.
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12:00 # San Juan
|
||
+Zone America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12:00 # San Juan
|
||
-4:00 - AST 1942 May 3
|
||
-4:00 US A%sT 1946
|
||
-4:00 - AST
|
||
|
||
# St Kitts-Nevis
|
||
# St Lucia
|
||
-# See 'southamerica'.
|
||
+# See America/Port_of_Spain.
|
||
|
||
# St Pierre and Miquelon
|
||
# There are too many St Pierres elsewhere, so we'll use 'Miquelon'.
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone America/Miquelon -3:44:40 - LMT 1911 May 15 # St Pierre
|
||
+Zone America/Miquelon -3:44:40 - LMT 1911 May 15 # St Pierre
|
||
-4:00 - AST 1980 May
|
||
-3:00 - PMST 1987 # Pierre & Miquelon Time
|
||
-3:00 Canada PM%sT
|
||
|
||
# St Vincent and the Grenadines
|
||
-# See 'southamerica'.
|
||
+# See America/Port_of_Spain.
|
||
|
||
# Turks and Caicos
|
||
#
|
||
# From Chris Dunn in
|
||
-# <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=415007>
|
||
+# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=415007
|
||
# (2007-03-15): In the Turks & Caicos Islands (America/Grand_Turk) the
|
||
# daylight saving dates for time changes have been adjusted to match
|
||
# the recent U.S. change of dates.
|
||
@@ -3227,21 +3151,27 @@
|
||
# Clocks are set back one hour at 2:00 a.m. local Daylight Saving Time"
|
||
# indicating that the normal ET rules are followed.
|
||
#
|
||
-# From Paul Eggert (2006-05-01):
|
||
-# Shanks & Pottenger say they use US DST rules, but IATA SSIM (1991/1998)
|
||
-# says they switch at midnight. Go with Shanks & Pottenger.
|
||
+# From Paul Eggert (2014-08-19):
|
||
+# The 2014-08-13 Cabinet meeting decided to stay on UTC-4 year-round. See:
|
||
+# http://tcweeklynews.com/daylight-savings-time-to-be-maintained-p5353-127.htm
|
||
+# Model this as a switch from EST/EDT to AST ...
|
||
+# From Chris Walton (2014-11-04):
|
||
+# ... the TCI government appears to have delayed the switch to
|
||
+# "permanent daylight saving time" by one year....
|
||
+# http://tcweeklynews.com/time-change-to-go-ahead-this-november-p5437-127.htm
|
||
#
|
||
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
-Rule TC 1979 1986 - Apr lastSun 2:00 1:00 D
|
||
-Rule TC 1979 2006 - Oct lastSun 2:00 0 S
|
||
-Rule TC 1987 2006 - Apr Sun>=1 2:00 1:00 D
|
||
-Rule TC 2007 max - Mar Sun>=8 2:00 1:00 D
|
||
-Rule TC 2007 max - Nov Sun>=1 2:00 0 S
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Grand_Turk -4:44:32 - LMT 1890
|
||
- -5:07:11 - KMT 1912 Feb # Kingston Mean Time
|
||
- -5:00 TC E%sT
|
||
+ -5:07:11 - KMT 1912 Feb # Kingston Mean Time
|
||
+ -5:00 - EST 1979
|
||
+ -5:00 US E%sT 2015 Nov Sun>=1 2:00
|
||
+ -4:00 - AST
|
||
|
||
# British Virgin Is
|
||
# Virgin Is
|
||
-# See 'southamerica'.
|
||
+# See America/Port_of_Spain.
|
||
+
|
||
+
|
||
+# Local Variables:
|
||
+# coding: utf-8
|
||
+# End:
|
||
--- ./jdk/make/sun/javazic/tzdata/pacificnew Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/sun/javazic/tzdata/pacificnew Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -21,7 +21,6 @@
|
||
# or visit www.oracle.com if you need additional information or have any
|
||
# questions.
|
||
#
|
||
-# <pre>
|
||
# This file is in the public domain, so clarified as of
|
||
# 2009-05-17 by Arthur David Olson.
|
||
|
||
--- ./jdk/make/sun/javazic/tzdata/southamerica Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/sun/javazic/tzdata/southamerica Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -21,31 +21,31 @@
|
||
# or visit www.oracle.com if you need additional information or have any
|
||
# questions.
|
||
#
|
||
-# <pre>
|
||
# This file is in the public domain, so clarified as of
|
||
# 2009-05-17 by Arthur David Olson.
|
||
|
||
-# This data is by no means authoritative; if you think you know better,
|
||
+# This file is by no means authoritative; if you think you know better,
|
||
# go ahead and edit the file (and please send any changes to
|
||
-# tz@iana.org for general use in the future).
|
||
+# tz@iana.org for general use in the future). For more, please see
|
||
+# the file CONTRIBUTING in the tz distribution.
|
||
|
||
-# From Paul Eggert (2006-03-22):
|
||
-# A good source for time zone historical data outside the U.S. is
|
||
+# From Paul Eggert (2014-10-31):
|
||
+#
|
||
+# Unless otherwise specified, the source for data through 1990 is:
|
||
# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
|
||
# San Diego: ACS Publications, Inc. (2003).
|
||
-#
|
||
-# For data circa 1899, a common source is:
|
||
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
|
||
-# <http://www.jstor.org/stable/1774359>.
|
||
+# Unfortunately this book contains many errors and cites no sources.
|
||
#
|
||
# Gwillim Law writes that a good source
|
||
# for recent time zone data is the International Air Transport
|
||
# Association's Standard Schedules Information Manual (IATA SSIM),
|
||
# published semiannually. Law sent in several helpful summaries
|
||
-# of the IATA's data after 1990.
|
||
+# of the IATA's data after 1990. Except where otherwise noted,
|
||
+# IATA SSIM is the source for entries after 1990.
|
||
#
|
||
-# Except where otherwise noted, Shanks & Pottenger is the source for
|
||
-# entries through 1990, and IATA SSIM is the source for entries afterwards.
|
||
+# For data circa 1899, a common source is:
|
||
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
|
||
+# http://www.jstor.org/stable/1774359
|
||
#
|
||
# Earlier editions of these tables used the North American style (e.g. ARST and
|
||
# ARDT for Argentine Standard and Daylight Time), but the following quote
|
||
@@ -53,24 +53,24 @@
|
||
# I suggest the use of _Summer time_ instead of the more cumbersome
|
||
# _daylight-saving time_. _Summer time_ seems to be in general use
|
||
# in Europe and South America.
|
||
-# -- E O Cutler, _New York Times_ (1937-02-14), quoted in
|
||
+# -- E O Cutler, _New York Times_ (1937-02-14), quoted in
|
||
# H L Mencken, _The American Language: Supplement I_ (1960), p 466
|
||
#
|
||
# Earlier editions of these tables also used the North American style
|
||
# for time zones in Brazil, but this was incorrect, as Brazilians say
|
||
-# "summer time". Reinaldo Goulart, a Sao Paulo businessman active in
|
||
+# "summer time". Reinaldo Goulart, a São Paulo businessman active in
|
||
# the railroad sector, writes (1999-07-06):
|
||
# The subject of time zones is currently a matter of discussion/debate in
|
||
-# Brazil. Let's say that "the Brasilia time" is considered the
|
||
-# "official time" because Brasilia is the capital city.
|
||
-# The other three time zones are called "Brasilia time "minus one" or
|
||
+# Brazil. Let's say that "the Brasília time" is considered the
|
||
+# "official time" because Brasília is the capital city.
|
||
+# The other three time zones are called "Brasília time "minus one" or
|
||
# "plus one" or "plus two". As far as I know there is no such
|
||
# name/designation as "Eastern Time" or "Central Time".
|
||
# So I invented the following (English-language) abbreviations for now.
|
||
# Corrections are welcome!
|
||
# std dst
|
||
# -2:00 FNT FNST Fernando de Noronha
|
||
-# -3:00 BRT BRST Brasilia
|
||
+# -3:00 BRT BRST Brasília
|
||
# -4:00 AMT AMST Amazon
|
||
# -5:00 ACT ACST Acre
|
||
|
||
@@ -84,7 +84,7 @@
|
||
# Argentina: first Sunday in October to first Sunday in April since 1976.
|
||
# Double Summer time from 1969 to 1974. Switches at midnight.
|
||
|
||
-# From U. S. Naval Observatory (1988-01-199):
|
||
+# From U. S. Naval Observatory (1988-01-19):
|
||
# ARGENTINA 3 H BEHIND UTC
|
||
|
||
# From Hernan G. Otero (1995-06-26):
|
||
@@ -118,7 +118,7 @@
|
||
# From Hernan G. Otero (1995-06-26):
|
||
# These corrections were contributed by InterSoft Argentina S.A.,
|
||
# obtaining the data from the:
|
||
-# Talleres de Hidrografia Naval Argentina
|
||
+# Talleres de Hidrografía Naval Argentina
|
||
# (Argentine Naval Hydrography Institute)
|
||
Rule Arg 1989 1993 - Mar Sun>=1 0:00 0 -
|
||
Rule Arg 1989 1992 - Oct Sun>=15 0:00 1:00 S
|
||
@@ -140,13 +140,13 @@
|
||
Rule Arg 2000 only - Mar 3 0:00 0 -
|
||
#
|
||
# From Peter Gradelski via Steffen Thorsen (2000-03-01):
|
||
-# We just checked with our Sao Paulo office and they say the government of
|
||
+# We just checked with our São Paulo office and they say the government of
|
||
# Argentina decided not to become one of the countries that go on or off DST.
|
||
# So Buenos Aires should be -3 hours from GMT at all times.
|
||
#
|
||
-# From Fabian L. Arce Jofre (2000-04-04):
|
||
+# From Fabián L. Arce Jofré (2000-04-04):
|
||
# The law that claimed DST for Argentina was derogated by President Fernando
|
||
-# de la Rua on March 2, 2000, because it would make people spend more energy
|
||
+# de la Rúa on March 2, 2000, because it would make people spend more energy
|
||
# in the winter time, rather than less. The change took effect on March 3.
|
||
#
|
||
# From Mariano Absatz (2001-06-06):
|
||
@@ -179,15 +179,13 @@
|
||
# that Argentina will use DST next year as well, from October to
|
||
# March, although exact rules are not given.
|
||
#
|
||
-# From Jesper Norgaard Welen (2007-12-26)
|
||
+# From Jesper Nørgaard Welen (2007-12-26)
|
||
# The last hurdle of Argentina DST is over, the proposal was approved in
|
||
-# the lower chamber too (Deputados) with a vote 192 for and 2 against.
|
||
+# the lower chamber too (Diputados) with a vote 192 for and 2 against.
|
||
# By the way thanks to Mariano Absatz and Daniel Mario Vega for the link to
|
||
# the original scanned proposal, where the dates and the zero hours are
|
||
# clear and unambiguous...This is the article about final approval:
|
||
-# <a href="http://www.lanacion.com.ar/politica/nota.asp?nota_id=973996">
|
||
# http://www.lanacion.com.ar/politica/nota.asp?nota_id=973996
|
||
-# </a>
|
||
#
|
||
# From Paul Eggert (2007-12-22):
|
||
# For dates after mid-2008, the following rules are my guesses and
|
||
@@ -197,13 +195,8 @@
|
||
# As per message from Carlos Alberto Fonseca Arauz (Nicaragua),
|
||
# Argentina will start DST on Sunday October 19, 2008.
|
||
#
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_argentina03.html">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_argentina03.html
|
||
-# </a>
|
||
-# OR
|
||
-# <a href="http://www.impulsobaires.com.ar/nota.php?id=57832 (in spanish)">
|
||
# http://www.impulsobaires.com.ar/nota.php?id=57832 (in spanish)
|
||
-# </a>
|
||
|
||
# From Rodrigo Severo (2008-10-06):
|
||
# Here is some info available at a Gentoo bug related to TZ on Argentina's DST:
|
||
@@ -212,48 +205,39 @@
|
||
# Hi, there is a problem with timezone-data-2008e and maybe with
|
||
# timezone-data-2008f
|
||
# Argentinian law [Number] 25.155 is no longer valid.
|
||
-# <a href="http://www.infoleg.gov.ar/infolegInternet/anexos/60000-64999/60036/norma.htm">
|
||
# http://www.infoleg.gov.ar/infolegInternet/anexos/60000-64999/60036/norma.htm
|
||
-# </a>
|
||
# The new one is law [Number] 26.350
|
||
-# <a href="http://www.infoleg.gov.ar/infolegInternet/anexos/135000-139999/136191/norma.htm">
|
||
# http://www.infoleg.gov.ar/infolegInternet/anexos/135000-139999/136191/norma.htm
|
||
-# </a>
|
||
# So there is no summer time in Argentina for now.
|
||
|
||
# From Mariano Absatz (2008-10-20):
|
||
-# Decree 1693/2008 applies Law 26.350 for the summer 2008/2009 establishing DST in Argentina
|
||
-# From 2008-10-19 until 2009-03-15
|
||
-# <a href="http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=16102008&pi=3&pf=4&s=0&sec=01">
|
||
+# Decree 1693/2008 applies Law 26.350 for the summer 2008/2009 establishing DST
|
||
+# in Argentina from 2008-10-19 until 2009-03-15.
|
||
# http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=16102008&pi=3&pf=4&s=0&sec=01
|
||
-# </a>
|
||
#
|
||
-# Decree 1705/2008 excepting 12 Provinces from applying DST in the summer 2008/2009:
|
||
-# Catamarca, La Rioja, Mendoza, Salta, San Juan, San Luis, La Pampa, Neuquen, Rio Negro, Chubut, Santa Cruz
|
||
-# and Tierra del Fuego
|
||
-# <a href="http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=17102008&pi=1&pf=1&s=0&sec=01">
|
||
+
|
||
+# Decree 1705/2008 excepting 12 Provinces from applying DST in the summer
|
||
+# 2008/2009: Catamarca, La Rioja, Mendoza, Salta, San Juan, San Luis, La
|
||
+# Pampa, Neuquén, Rio Negro, Chubut, Santa Cruz and Tierra del Fuego
|
||
# http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=17102008&pi=1&pf=1&s=0&sec=01
|
||
-# </a>
|
||
#
|
||
-# Press release 235 dated Saturday October 18th, from the Government of the Province of Jujuy saying
|
||
-# it will not apply DST either (even when it was not included in Decree 1705/2008)
|
||
-# <a href="http://www.jujuy.gov.ar/index2/partes_prensa/18_10_08/235-181008.doc">
|
||
+# Press release 235 dated Saturday October 18th, from the Government of the
|
||
+# Province of Jujuy saying it will not apply DST either (even when it was not
|
||
+# included in Decree 1705/2008).
|
||
# http://www.jujuy.gov.ar/index2/partes_prensa/18_10_08/235-181008.doc
|
||
-# </a>
|
||
|
||
# From fullinet (2009-10-18):
|
||
# As announced in
|
||
-# <a hef="http://www.argentina.gob.ar/argentina/portal/paginas.dhtml?pagina=356">
|
||
# http://www.argentina.gob.ar/argentina/portal/paginas.dhtml?pagina=356
|
||
-# </a>
|
||
-# (an official .gob.ar) under title: "Sin Cambio de Hora" (english: "No hour change")
|
||
+# (an official .gob.ar) under title: "Sin Cambio de Hora"
|
||
+# (English: "No hour change").
|
||
#
|
||
-# "Por el momento, el Gobierno Nacional resolvio no modificar la hora
|
||
-# oficial, decision que estaba en estudio para su implementacion el
|
||
-# domingo 18 de octubre. Desde el Ministerio de Planificacion se anuncio
|
||
-# que la Argentina hoy, en estas condiciones meteorologicas, no necesita
|
||
-# la modificacion del huso horario, ya que 2009 nos encuentra con
|
||
-# crecimiento en la produccion y distribucion energetica."
|
||
+# "Por el momento, el Gobierno Nacional resolvió no modificar la hora
|
||
+# oficial, decisión que estaba en estudio para su implementación el
|
||
+# domingo 18 de octubre. Desde el Ministerio de Planificación se anunció
|
||
+# que la Argentina hoy, en estas condiciones meteorológicas, no necesita
|
||
+# la modificación del huso horario, ya que 2009 nos encuentra con
|
||
+# crecimiento en la producción y distribución energética."
|
||
|
||
Rule Arg 2007 only - Dec 30 0:00 1:00 S
|
||
Rule Arg 2008 2009 - Mar Sun>=15 0:00 0 -
|
||
@@ -267,10 +251,10 @@
|
||
# It's Law No. 7,210. This change is due to a public power emergency, so for
|
||
# now we'll assume it's for this year only.
|
||
#
|
||
-# From Paul Eggert (2006-03-22):
|
||
-# <a href="http://www.spicasc.net/horvera.html">
|
||
-# Hora de verano para la Republica Argentina (2003-06-08)
|
||
-# </a> says that standard time in Argentina from 1894-10-31
|
||
+# From Paul Eggert (2014-08-09):
|
||
+# Hora de verano para la República Argentina
|
||
+# http://buenasiembra.com.ar/esoterismo/astrologia/hora-de-verano-de-la-republica-argentina-27.html
|
||
+# says that standard time in Argentina from 1894-10-31
|
||
# to 1920-05-01 was -4:16:48.25. Go with this more-precise value
|
||
# over Shanks & Pottenger.
|
||
#
|
||
@@ -285,10 +269,10 @@
|
||
# time in October 17th.
|
||
#
|
||
# Catamarca, Chubut, La Rioja, San Juan, San Luis, Santa Cruz,
|
||
-# Tierra del Fuego, Tucuman.
|
||
+# Tierra del Fuego, Tucumán.
|
||
#
|
||
# From Mariano Absatz (2004-06-14):
|
||
-# ... this weekend, the Province of Tucuman decided it'd go back to UTC-03:00
|
||
+# ... this weekend, the Province of Tucumán decided it'd go back to UTC-03:00
|
||
# yesterday midnight (that is, at 24:00 Saturday 12th), since the people's
|
||
# annoyance with the change is much higher than the power savings obtained....
|
||
#
|
||
@@ -323,49 +307,38 @@
|
||
# Here are articles that Argentina Province San Luis is planning to end DST
|
||
# as earlier as upcoming Monday January 21, 2008 or February 2008:
|
||
#
|
||
-# Provincia argentina retrasa reloj y marca diferencia con resto del pais
|
||
+# Provincia argentina retrasa reloj y marca diferencia con resto del país
|
||
# (Argentine Province delayed clock and mark difference with the rest of the
|
||
# country)
|
||
-# <a href="http://cl.invertia.com/noticias/noticia.aspx?idNoticia=200801171849_EFE_ET4373&idtel">
|
||
# http://cl.invertia.com/noticias/noticia.aspx?idNoticia=200801171849_EFE_ET4373&idtel
|
||
-# </a>
|
||
#
|
||
# Es inminente que en San Luis atrasen una hora los relojes
|
||
# (It is imminent in San Luis clocks one hour delay)
|
||
-# <a href="http://www.lagaceta.com.ar/vernotae.asp?id_nota=253414">
|
||
-# http://www.lagaceta.com.ar/vernotae.asp?id_nota=253414
|
||
-# </a>
|
||
-#
|
||
-# <a href="http://www.worldtimezone.net/dst_news/dst_news_argentina02.html">
|
||
+# http://www.lagaceta.com.ar/nota/253414/Economia/Es-inminente-que-en-San-Luis-atrasen-una-hora-los-relojes.html
|
||
# http://www.worldtimezone.net/dst_news/dst_news_argentina02.html
|
||
-# </a>
|
||
|
||
-# From Jesper Norgaard Welen (2008-01-18):
|
||
+# From Jesper Nørgaard Welen (2008-01-18):
|
||
# The page of the San Luis provincial government
|
||
-# <a href="http://www.sanluis.gov.ar/notas.asp?idCanal=0&id=22812">
|
||
# http://www.sanluis.gov.ar/notas.asp?idCanal=0&id=22812
|
||
-# </a>
|
||
# confirms what Alex Krivenyshev has earlier sent to the tz
|
||
# emailing list about that San Luis plans to return to standard
|
||
# time much earlier than the rest of the country. It also
|
||
# confirms that upon request the provinces San Juan and Mendoza
|
||
# refused to follow San Luis in this change.
|
||
#
|
||
-# The change is supposed to take place Monday the 21.st at 0:00
|
||
+# The change is supposed to take place Monday the 21st at 0:00
|
||
# hours. As far as I understand it if this goes ahead, we need
|
||
# a new timezone for San Luis (although there are also documented
|
||
# independent changes in the southamerica file of San Luis in
|
||
# 1990 and 1991 which has not been confirmed).
|
||
|
||
-# From Jesper Norgaard Welen (2008-01-25):
|
||
+# From Jesper Nørgaard Welen (2008-01-25):
|
||
# Unfortunately the below page has become defunct, about the San Luis
|
||
# time change. Perhaps because it now is part of a group of pages "Most
|
||
# important pages of 2008."
|
||
#
|
||
# You can use
|
||
-# <a href="http://www.sanluis.gov.ar/notas.asp?idCanal=8141&id=22834">
|
||
# http://www.sanluis.gov.ar/notas.asp?idCanal=8141&id=22834
|
||
-# </a>
|
||
# instead it seems. Or use "Buscador" from the main page of the San Luis
|
||
# government, and fill in "huso" and click OK, and you will get 3 pages
|
||
# from which the first one is identical to the above.
|
||
@@ -385,9 +358,9 @@
|
||
# back in 2004, when these provinces changed to UTC-4 for a few days, I
|
||
# mailed them personally and never got an answer).
|
||
|
||
-# From Paul Eggert (2008-06-30):
|
||
-# Unless otherwise specified, data are from Shanks & Pottenger through 1992,
|
||
-# from the IATA otherwise. As noted below, Shanks & Pottenger say that
|
||
+# From Paul Eggert (2014-08-12):
|
||
+# Unless otherwise specified, data entries are from Shanks & Pottenger through
|
||
+# 1992, from the IATA otherwise. As noted below, Shanks & Pottenger say that
|
||
# America/Cordoba split into 6 subregions during 1991/1992, one of which
|
||
# was America/San_Luis, but we haven't verified this yet so for now we'll
|
||
# keep America/Cordoba a single region rather than splitting it into the
|
||
@@ -399,14 +372,9 @@
|
||
# to utc-04:00 until the second Saturday in October...
|
||
#
|
||
# The press release is at
|
||
-# <a href="http://www.sanluis.gov.ar/SL/Paginas/NoticiaDetalle.asp?TemaId=1&InfoPrensaId=3102">
|
||
# http://www.sanluis.gov.ar/SL/Paginas/NoticiaDetalle.asp?TemaId=1&InfoPrensaId=3102
|
||
-# </a>
|
||
-# (I couldn't find the decree, but
|
||
-# <a href="http://www.sanluis.gov.ar">
|
||
-# www.sanluis.gov.ar
|
||
-# <a/>
|
||
-# is the official page for the Province Government).
|
||
+# (I couldn't find the decree, but www.sanluis.gov.ar
|
||
+# is the official page for the Province Government.)
|
||
#
|
||
# There's also a note in only one of the major national papers ...
|
||
# http://www.lanacion.com.ar/nota.asp?nota_id=1107912
|
||
@@ -423,9 +391,7 @@
|
||
# ...the Province of San Luis is a case in itself.
|
||
#
|
||
# The Law at
|
||
-# <a href="http://www.diputadossanluis.gov.ar/diputadosasp/paginas/verNorma.asp?NormaID=276>"
|
||
# http://www.diputadossanluis.gov.ar/diputadosasp/paginas/verNorma.asp?NormaID=276
|
||
-# </a>
|
||
# is ambiguous because establishes a calendar from the 2nd Sunday in
|
||
# October at 0:00 thru the 2nd Saturday in March at 24:00 and the
|
||
# complement of that starting on the 2nd Sunday of March at 0:00 and
|
||
@@ -454,19 +420,15 @@
|
||
# ...
|
||
|
||
# From Alexander Krivenyshev (2010-04-09):
|
||
-# According to news reports from El Diario de la Republica Province San
|
||
+# According to news reports from El Diario de la República Province San
|
||
# Luis, Argentina (standard time UTC-04) will keep Daylight Saving Time
|
||
-# after April 11, 2010--will continue to have same time as rest of
|
||
+# after April 11, 2010 - will continue to have same time as rest of
|
||
# Argentina (UTC-3) (no DST).
|
||
#
|
||
-# Confirmaron la prórroga del huso horario de verano (Spanish)
|
||
-# <a href="http://www.eldiariodelarepublica.com/index.php?option=com_content&task=view&id=29383&Itemid=9">
|
||
+# Confirmaron la prórroga del huso horario de verano (Spanish)
|
||
# http://www.eldiariodelarepublica.com/index.php?option=com_content&task=view&id=29383&Itemid=9
|
||
-# </a>
|
||
# or (some English translation):
|
||
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_argentina08.html">
|
||
# http://www.worldtimezone.com/dst_news/dst_news_argentina08.html
|
||
-# </a>
|
||
|
||
# From Mariano Absatz (2010-04-12):
|
||
# yes...I can confirm this...and given that San Luis keeps calling
|
||
@@ -478,7 +440,7 @@
|
||
# Perhaps San Luis operates on the legal fiction that it is at UTC-4
|
||
# with perpetual summer time, but ordinary usage typically seems to
|
||
# just say it's at UTC-3; see, for example,
|
||
-# <http://es.wikipedia.org/wiki/Hora_oficial_argentina>.
|
||
+# http://es.wikipedia.org/wiki/Hora_oficial_argentina
|
||
# We've documented similar situations as being plain changes to
|
||
# standard time, so let's do that here too. This does not change UTC
|
||
# offsets, only tm_isdst and the time zone abbreviations. One minor
|
||
@@ -486,20 +448,20 @@
|
||
# setting for time stamps past 2038.
|
||
|
||
# From Paul Eggert (2013-02-21):
|
||
-# Milne says Cordoba time was -4:16:48.2. Round to the nearest second.
|
||
+# Milne says Córdoba time was -4:16:48.2. Round to the nearest second.
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
#
|
||
# Buenos Aires (BA), Capital Federal (CF),
|
||
-Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
|
||
- -4:16:48 - CMT 1920 May # Cordoba Mean Time
|
||
+Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
|
||
+ -4:16:48 - CMT 1920 May # Córdoba Mean Time
|
||
-4:00 - ART 1930 Dec
|
||
-4:00 Arg AR%sT 1969 Oct 5
|
||
-3:00 Arg AR%sT 1999 Oct 3
|
||
-4:00 Arg AR%sT 2000 Mar 3
|
||
-3:00 Arg AR%sT
|
||
#
|
||
-# Cordoba (CB), Santa Fe (SF), Entre Rios (ER), Corrientes (CN), Misiones (MN),
|
||
+# Córdoba (CB), Santa Fe (SF), Entre Ríos (ER), Corrientes (CN), Misiones (MN),
|
||
# Chaco (CC), Formosa (FM), Santiago del Estero (SE)
|
||
#
|
||
# Shanks & Pottenger also make the following claims, which we haven't verified:
|
||
@@ -519,7 +481,7 @@
|
||
-4:00 Arg AR%sT 2000 Mar 3
|
||
-3:00 Arg AR%sT
|
||
#
|
||
-# Salta (SA), La Pampa (LP), Neuquen (NQ), Rio Negro (RN)
|
||
+# Salta (SA), La Pampa (LP), Neuquén (NQ), Rio Negro (RN)
|
||
Zone America/Argentina/Salta -4:21:40 - LMT 1894 Oct 31
|
||
-4:16:48 - CMT 1920 May
|
||
-4:00 - ART 1930 Dec
|
||
@@ -531,7 +493,7 @@
|
||
-3:00 Arg AR%sT 2008 Oct 18
|
||
-3:00 - ART
|
||
#
|
||
-# Tucuman (TM)
|
||
+# Tucumán (TM)
|
||
Zone America/Argentina/Tucuman -4:20:52 - LMT 1894 Oct 31
|
||
-4:16:48 - CMT 1920 May
|
||
-4:00 - ART 1930 Dec
|
||
@@ -642,8 +604,8 @@
|
||
-3:00 - ART
|
||
#
|
||
# Santa Cruz (SC)
|
||
-Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
|
||
- -4:16:48 - CMT 1920 May # Cordoba Mean Time
|
||
+Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
|
||
+ -4:16:48 - CMT 1920 May # Córdoba Mean Time
|
||
-4:00 - ART 1930 Dec
|
||
-4:00 Arg AR%sT 1969 Oct 5
|
||
-3:00 Arg AR%sT 1999 Oct 3
|
||
@@ -653,9 +615,9 @@
|
||
-3:00 Arg AR%sT 2008 Oct 18
|
||
-3:00 - ART
|
||
#
|
||
-# Tierra del Fuego, Antartida e Islas del Atlantico Sur (TF)
|
||
-Zone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31
|
||
- -4:16:48 - CMT 1920 May # Cordoba Mean Time
|
||
+# Tierra del Fuego, Antártida e Islas del Atlántico Sur (TF)
|
||
+Zone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31
|
||
+ -4:16:48 - CMT 1920 May # Córdoba Mean Time
|
||
-4:00 - ART 1930 Dec
|
||
-4:00 Arg AR%sT 1969 Oct 5
|
||
-3:00 Arg AR%sT 1999 Oct 3
|
||
@@ -686,13 +648,13 @@
|
||
|
||
# From IATA SSIM (1996-02):
|
||
# _Only_ the following states in BR1 observe DST: Rio Grande do Sul (RS),
|
||
-# Santa Catarina (SC), Parana (PR), Sao Paulo (SP), Rio de Janeiro (RJ),
|
||
-# Espirito Santo (ES), Minas Gerais (MG), Bahia (BA), Goias (GO),
|
||
+# Santa Catarina (SC), Paraná (PR), São Paulo (SP), Rio de Janeiro (RJ),
|
||
+# Espírito Santo (ES), Minas Gerais (MG), Bahia (BA), Goiás (GO),
|
||
# Distrito Federal (DF), Tocantins (TO), Sergipe [SE] and Alagoas [AL].
|
||
# [The last three states are new to this issue of the IATA SSIM.]
|
||
|
||
# From Gwillim Law (1996-10-07):
|
||
-# Geography, history (Tocantins was part of Goias until 1989), and other
|
||
+# Geography, history (Tocantins was part of Goiás until 1989), and other
|
||
# sources of time zone information lead me to believe that AL, SE, and TO were
|
||
# always in BR1, and so the only change was whether or not they observed DST....
|
||
# The earliest issue of the SSIM I have is 2/91. Each issue from then until
|
||
@@ -706,16 +668,14 @@
|
||
# However, some conclusions can be drawn from another IATA manual: the Airline
|
||
# Coding Directory, which lists close to 400 airports in Brazil. For each
|
||
# airport it gives a time zone which is coded to the SSIM. From that
|
||
-# information, I'm led to conclude that the states of Amapa (AP), Ceara (CE),
|
||
-# Maranhao (MA), Paraiba (PR), Pernambuco (PE), Piaui (PI), and Rio Grande do
|
||
-# Norte (RN), and the eastern part of Para (PA) are all in BR1 without DST.
|
||
+# information, I'm led to conclude that the states of Amapá (AP), Ceará (CE),
|
||
+# Maranhão (MA), Paraíba (PR), Pernambuco (PE), Piauí (PI), and Rio Grande do
|
||
+# Norte (RN), and the eastern part of Pará (PA) are all in BR1 without DST.
|
||
|
||
# From Marcos Tadeu (1998-09-27):
|
||
-# <a href="http://pcdsh01.on.br/verao1.html">
|
||
-# Brazilian official page
|
||
-# </a>
|
||
+# Brazilian official page <http://pcdsh01.on.br/verao1.html>
|
||
|
||
-# From Jesper Norgaard (2000-11-03):
|
||
+# From Jesper Nørgaard (2000-11-03):
|
||
# [For an official list of which regions in Brazil use which time zones, see:]
|
||
# http://pcdsh01.on.br/Fusbr.htm
|
||
# http://pcdsh01.on.br/Fusbrhv.htm
|
||
@@ -748,13 +708,13 @@
|
||
|
||
# From Paul Schulze (2008-06-24):
|
||
# ...by law number 11.662 of April 24, 2008 (published in the "Diario
|
||
-# Oficial da Uniao"...) in Brazil there are changes in the timezones,
|
||
+# Oficial da União"...) in Brazil there are changes in the timezones,
|
||
# effective today (00:00am at June 24, 2008) as follows:
|
||
#
|
||
-# a) The timezone UTC+5 is e[x]tinguished, with all the Acre state and the
|
||
+# a) The timezone UTC+5 is extinguished, with all the Acre state and the
|
||
# part of the Amazonas state that had this timezone now being put to the
|
||
# timezone UTC+4
|
||
-# b) The whole Para state now is put at timezone UTC+3, instead of just
|
||
+# b) The whole Pará state now is put at timezone UTC+3, instead of just
|
||
# part of it, as was before.
|
||
#
|
||
# This change follows a proposal of senator Tiao Viana of Acre state, that
|
||
@@ -767,13 +727,11 @@
|
||
|
||
# From Rodrigo Severo (2008-06-24):
|
||
# Just correcting the URL:
|
||
-# <a href="https://www.in.gov.br/imprensa/visualiza/index.jsp?jornal=do&secao=1&pagina=1&data=25/04/2008">
|
||
# https://www.in.gov.br/imprensa/visualiza/index.jsp?jornal=do&secao=1&pagina=1&data=25/04/2008
|
||
-# </a>
|
||
#
|
||
# As a result of the above Decree I believe the America/Rio_Branco
|
||
# timezone shall be modified from UTC-5 to UTC-4 and a new timezone shall
|
||
-# be created to represent the...west side of the Para State. I
|
||
+# be created to represent the...west side of the Pará State. I
|
||
# suggest this new timezone be called Santarem as the most
|
||
# important/populated city in the affected area.
|
||
#
|
||
@@ -782,19 +740,16 @@
|
||
|
||
# From Alex Krivenyshev (2008-06-24):
|
||
# This is a quick reference page for New and Old Brazil Time Zones map.
|
||
-# <a href="http://www.worldtimezone.com/brazil-time-new-old.php">
|
||
# http://www.worldtimezone.com/brazil-time-new-old.php
|
||
-# </a>
|
||
#
|
||
-# - 4 time zones replaced by 3 time zones-eliminating time zone UTC- 05
|
||
-# (state Acre and the part of the Amazonas will be UTC/GMT- 04) - western
|
||
-# part of Par state is moving to one timezone UTC- 03 (from UTC -04).
|
||
+# - 4 time zones replaced by 3 time zones - eliminating time zone UTC-05
|
||
+# (state Acre and the part of the Amazonas will be UTC/GMT-04) - western
|
||
+# part of Par state is moving to one timezone UTC-03 (from UTC-04).
|
||
|
||
# From Paul Eggert (2002-10-10):
|
||
# The official decrees referenced below are mostly taken from
|
||
-# <a href="http://pcdsh01.on.br/DecHV.html">
|
||
-# Decretos sobre o Horario de Verao no Brasil
|
||
-# </a>.
|
||
+# Decretos sobre o Horário de Verão no Brasil.
|
||
+# http://pcdsh01.on.br/DecHV.html
|
||
|
||
# From Steffen Thorsen (2008-08-29):
|
||
# As announced by the government and many newspapers in Brazil late
|
||
@@ -806,25 +761,17 @@
|
||
# It has not yet been posted to http://pcdsh01.on.br/DecHV.html
|
||
#
|
||
# An official page about it:
|
||
-# <a href="http://www.mme.gov.br/site/news/detail.do?newsId=16722">
|
||
# http://www.mme.gov.br/site/news/detail.do?newsId=16722
|
||
-# </a>
|
||
# Note that this link does not always work directly, but must be accessed
|
||
# by going to
|
||
-# <a href="http://www.mme.gov.br/first">
|
||
# http://www.mme.gov.br/first
|
||
-# </a>
|
||
#
|
||
# One example link that works directly:
|
||
-# <a href="http://jornale.com.br/index.php?option=com_content&task=view&id=13530&Itemid=54">
|
||
# http://jornale.com.br/index.php?option=com_content&task=view&id=13530&Itemid=54
|
||
# (Portuguese)
|
||
-# </a>
|
||
#
|
||
# We have a written a short article about it as well:
|
||
-# <a href="http://www.timeanddate.com/news/time/brazil-dst-2008-2009.html">
|
||
# http://www.timeanddate.com/news/time/brazil-dst-2008-2009.html
|
||
-# </a>
|
||
#
|
||
# From Alexander Krivenyshev (2011-10-04):
|
||
# State Bahia will return to Daylight savings time this year after 8 years off.
|
||
@@ -832,17 +779,12 @@
|
||
# television station in Salvador.
|
||
|
||
# In Portuguese:
|
||
-# <a href="http://g1.globo.com/bahia/noticia/2011/10/governador-jaques-wagner-confirma-horario-de-verao-na-bahia.html">
|
||
# http://g1.globo.com/bahia/noticia/2011/10/governador-jaques-wagner-confirma-horario-de-verao-na-bahia.html
|
||
-# </a> and
|
||
-# <a href="http://noticias.terra.com.br/brasil/noticias/0,,OI5390887-EI8139,00-Bahia+volta+a+ter+horario+de+verao+apos+oito+anos.html">
|
||
# http://noticias.terra.com.br/brasil/noticias/0,,OI5390887-EI8139,00-Bahia+volta+a+ter+horario+de+verao+apos+oito+anos.html
|
||
-# </a>
|
||
|
||
# From Guilherme Bernardes Rodrigues (2011-10-07):
|
||
# There is news in the media, however there is still no decree about it.
|
||
-# I just send a e-mail to Zulmira Brandao at
|
||
-# <a href="http://pcdsh01.on.br/">http://pcdsh01.on.br/</a> the
|
||
+# I just send a e-mail to Zulmira Brandao at http://pcdsh01.on.br/ the
|
||
# official agency about time in Brazil, and she confirmed that the old rule is
|
||
# still in force.
|
||
|
||
@@ -854,9 +796,7 @@
|
||
#
|
||
# DECRETO No- 7.584, DE 13 DE OUTUBRO DE 2011
|
||
# Link :
|
||
-# <a href="http://www.in.gov.br/visualiza/index.jsp?data=13/10/2011&jornal=1000&pagina=6&totalArquivos=6">
|
||
# http://www.in.gov.br/visualiza/index.jsp?data=13/10/2011&jornal=1000&pagina=6&totalArquivos=6
|
||
-# </a>
|
||
|
||
# From Kelley Cook (2012-10-16):
|
||
# The governor of state of Bahia in Brazil announced on Thursday that
|
||
@@ -884,42 +824,42 @@
|
||
# For now, assume western Amazonas will change as well.
|
||
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
-# Decree <a href="http://pcdsh01.on.br/HV20466.htm">20,466</a> (1931-10-01)
|
||
-# Decree <a href="http://pcdsh01.on.br/HV21896.htm">21,896</a> (1932-01-10)
|
||
+# Decree 20,466 <http://pcdsh01.on.br/HV20466.htm> (1931-10-01)
|
||
+# Decree 21,896 <http://pcdsh01.on.br/HV21896.htm> (1932-01-10)
|
||
Rule Brazil 1931 only - Oct 3 11:00 1:00 S
|
||
Rule Brazil 1932 1933 - Apr 1 0:00 0 -
|
||
Rule Brazil 1932 only - Oct 3 0:00 1:00 S
|
||
-# Decree <a href="http://pcdsh01.on.br/HV23195.htm">23,195</a> (1933-10-10)
|
||
+# Decree 23,195 <http://pcdsh01.on.br/HV23195.htm> (1933-10-10)
|
||
# revoked DST.
|
||
-# Decree <a href="http://pcdsh01.on.br/HV27496.htm">27,496</a> (1949-11-24)
|
||
-# Decree <a href="http://pcdsh01.on.br/HV27998.htm">27,998</a> (1950-04-13)
|
||
+# Decree 27,496 <http://pcdsh01.on.br/HV27496.htm> (1949-11-24)
|
||
+# Decree 27,998 <http://pcdsh01.on.br/HV27998.htm> (1950-04-13)
|
||
Rule Brazil 1949 1952 - Dec 1 0:00 1:00 S
|
||
Rule Brazil 1950 only - Apr 16 1:00 0 -
|
||
Rule Brazil 1951 1952 - Apr 1 0:00 0 -
|
||
-# Decree <a href="http://pcdsh01.on.br/HV32308.htm">32,308</a> (1953-02-24)
|
||
+# Decree 32,308 <http://pcdsh01.on.br/HV32308.htm> (1953-02-24)
|
||
Rule Brazil 1953 only - Mar 1 0:00 0 -
|
||
-# Decree <a href="http://pcdsh01.on.br/HV34724.htm">34,724</a> (1953-11-30)
|
||
+# Decree 34,724 <http://pcdsh01.on.br/HV34724.htm> (1953-11-30)
|
||
# revoked DST.
|
||
-# Decree <a href="http://pcdsh01.on.br/HV52700.htm">52,700</a> (1963-10-18)
|
||
+# Decree 52,700 <http://pcdsh01.on.br/HV52700.htm> (1963-10-18)
|
||
# established DST from 1963-10-23 00:00 to 1964-02-29 00:00
|
||
# in SP, RJ, GB, MG, ES, due to the prolongation of the drought.
|
||
-# Decree <a href="http://pcdsh01.on.br/HV53071.htm">53,071</a> (1963-12-03)
|
||
+# Decree 53,071 <http://pcdsh01.on.br/HV53071.htm> (1963-12-03)
|
||
# extended the above decree to all of the national territory on 12-09.
|
||
Rule Brazil 1963 only - Dec 9 0:00 1:00 S
|
||
-# Decree <a href="http://pcdsh01.on.br/HV53604.htm">53,604</a> (1964-02-25)
|
||
+# Decree 53,604 <http://pcdsh01.on.br/HV53604.htm> (1964-02-25)
|
||
# extended summer time by one day to 1964-03-01 00:00 (start of school).
|
||
Rule Brazil 1964 only - Mar 1 0:00 0 -
|
||
-# Decree <a href="http://pcdsh01.on.br/HV55639.htm">55,639</a> (1965-01-27)
|
||
+# Decree 55,639 <http://pcdsh01.on.br/HV55639.htm> (1965-01-27)
|
||
Rule Brazil 1965 only - Jan 31 0:00 1:00 S
|
||
Rule Brazil 1965 only - Mar 31 0:00 0 -
|
||
-# Decree <a href="http://pcdsh01.on.br/HV57303.htm">57,303</a> (1965-11-22)
|
||
+# Decree 57,303 <http://pcdsh01.on.br/HV57303.htm> (1965-11-22)
|
||
Rule Brazil 1965 only - Dec 1 0:00 1:00 S
|
||
-# Decree <a href="http://pcdsh01.on.br/HV57843.htm">57,843</a> (1966-02-18)
|
||
+# Decree 57,843 <http://pcdsh01.on.br/HV57843.htm> (1966-02-18)
|
||
Rule Brazil 1966 1968 - Mar 1 0:00 0 -
|
||
Rule Brazil 1966 1967 - Nov 1 0:00 1:00 S
|
||
-# Decree <a href="http://pcdsh01.on.br/HV63429.htm">63,429</a> (1968-10-15)
|
||
+# Decree 63,429 <http://pcdsh01.on.br/HV63429.htm> (1968-10-15)
|
||
# revoked DST.
|
||
-# Decree <a href="http://pcdsh01.on.br/HV91698.htm">91,698</a> (1985-09-27)
|
||
+# Decree 91,698 <http://pcdsh01.on.br/HV91698.htm> (1985-09-27)
|
||
Rule Brazil 1985 only - Nov 2 0:00 1:00 S
|
||
# Decree 92,310 (1986-01-21)
|
||
# Decree 92,463 (1986-03-13)
|
||
@@ -927,42 +867,42 @@
|
||
# Decree 93,316 (1986-10-01)
|
||
Rule Brazil 1986 only - Oct 25 0:00 1:00 S
|
||
Rule Brazil 1987 only - Feb 14 0:00 0 -
|
||
-# Decree <a href="http://pcdsh01.on.br/HV94922.htm">94,922</a> (1987-09-22)
|
||
+# Decree 94,922 <http://pcdsh01.on.br/HV94922.htm> (1987-09-22)
|
||
Rule Brazil 1987 only - Oct 25 0:00 1:00 S
|
||
Rule Brazil 1988 only - Feb 7 0:00 0 -
|
||
-# Decree <a href="http://pcdsh01.on.br/HV96676.htm">96,676</a> (1988-09-12)
|
||
+# Decree 96,676 <http://pcdsh01.on.br/HV96676.htm> (1988-09-12)
|
||
# except for the states of AC, AM, PA, RR, RO, and AP (then a territory)
|
||
Rule Brazil 1988 only - Oct 16 0:00 1:00 S
|
||
Rule Brazil 1989 only - Jan 29 0:00 0 -
|
||
-# Decree <a href="http://pcdsh01.on.br/HV98077.htm">98,077</a> (1989-08-21)
|
||
+# Decree 98,077 <http://pcdsh01.on.br/HV98077.htm> (1989-08-21)
|
||
# with the same exceptions
|
||
Rule Brazil 1989 only - Oct 15 0:00 1:00 S
|
||
Rule Brazil 1990 only - Feb 11 0:00 0 -
|
||
-# Decree <a href="http://pcdsh01.on.br/HV99530.htm">99,530</a> (1990-09-17)
|
||
+# Decree 99,530 <http://pcdsh01.on.br/HV99530.htm> (1990-09-17)
|
||
# adopted by RS, SC, PR, SP, RJ, ES, MG, GO, MS, DF.
|
||
# Decree 99,629 (1990-10-19) adds BA, MT.
|
||
Rule Brazil 1990 only - Oct 21 0:00 1:00 S
|
||
Rule Brazil 1991 only - Feb 17 0:00 0 -
|
||
-# <a href="http://pcdsh01.on.br/HV1991.htm">Unnumbered decree</a> (1991-09-25)
|
||
+# Unnumbered decree <http://pcdsh01.on.br/HV1991.htm> (1991-09-25)
|
||
# adopted by RS, SC, PR, SP, RJ, ES, MG, BA, GO, MT, MS, DF.
|
||
Rule Brazil 1991 only - Oct 20 0:00 1:00 S
|
||
Rule Brazil 1992 only - Feb 9 0:00 0 -
|
||
-# <a href="http://pcdsh01.on.br/HV1992.htm">Unnumbered decree</a> (1992-10-16)
|
||
+# Unnumbered decree <http://pcdsh01.on.br/HV1992.htm> (1992-10-16)
|
||
# adopted by same states.
|
||
Rule Brazil 1992 only - Oct 25 0:00 1:00 S
|
||
Rule Brazil 1993 only - Jan 31 0:00 0 -
|
||
-# Decree <a href="http://pcdsh01.on.br/HV942.htm">942</a> (1993-09-28)
|
||
+# Decree 942 <http://pcdsh01.on.br/HV942.htm> (1993-09-28)
|
||
# adopted by same states, plus AM.
|
||
-# Decree <a href="http://pcdsh01.on.br/HV1252.htm">1,252</a> (1994-09-22;
|
||
+# Decree 1,252 <http://pcdsh01.on.br/HV1252.htm> (1994-09-22;
|
||
# web page corrected 2004-01-07) adopted by same states, minus AM.
|
||
-# Decree <a href="http://pcdsh01.on.br/HV1636.htm">1,636</a> (1995-09-14)
|
||
+# Decree 1,636 <http://pcdsh01.on.br/HV1636.htm> (1995-09-14)
|
||
# adopted by same states, plus MT and TO.
|
||
-# Decree <a href="http://pcdsh01.on.br/HV1674.htm">1,674</a> (1995-10-13)
|
||
+# Decree 1,674 <http://pcdsh01.on.br/HV1674.htm> (1995-10-13)
|
||
# adds AL, SE.
|
||
Rule Brazil 1993 1995 - Oct Sun>=11 0:00 1:00 S
|
||
Rule Brazil 1994 1995 - Feb Sun>=15 0:00 0 -
|
||
Rule Brazil 1996 only - Feb 11 0:00 0 -
|
||
-# Decree <a href="http://pcdsh01.on.br/HV2000.htm">2,000</a> (1996-09-04)
|
||
+# Decree 2,000 <http://pcdsh01.on.br/HV2000.htm> (1996-09-04)
|
||
# adopted by same states, minus AL, SE.
|
||
Rule Brazil 1996 only - Oct 6 0:00 1:00 S
|
||
Rule Brazil 1997 only - Feb 16 0:00 0 -
|
||
@@ -975,53 +915,51 @@
|
||
#
|
||
# Decree 2,317 (1997-09-04), adopted by same states.
|
||
Rule Brazil 1997 only - Oct 6 0:00 1:00 S
|
||
-# Decree <a href="http://pcdsh01.on.br/figuras/HV2495.JPG">2,495</a>
|
||
+# Decree 2,495 <http://pcdsh01.on.br/figuras/HV2495.JPG>
|
||
# (1998-02-10)
|
||
Rule Brazil 1998 only - Mar 1 0:00 0 -
|
||
-# Decree <a href="http://pcdsh01.on.br/figuras/Hv98.jpg">2,780</a> (1998-09-11)
|
||
+# Decree 2,780 <http://pcdsh01.on.br/figuras/Hv98.jpg> (1998-09-11)
|
||
# adopted by the same states as before.
|
||
Rule Brazil 1998 only - Oct 11 0:00 1:00 S
|
||
Rule Brazil 1999 only - Feb 21 0:00 0 -
|
||
-# Decree <a href="http://pcdsh01.on.br/figuras/HV3150.gif">3,150</a>
|
||
+# Decree 3,150 <http://pcdsh01.on.br/figuras/HV3150.gif>
|
||
# (1999-08-23) adopted by same states.
|
||
-# Decree <a href="http://pcdsh01.on.br/DecHV99.gif">3,188</a> (1999-09-30)
|
||
+# Decree 3,188 <http://pcdsh01.on.br/DecHV99.gif> (1999-09-30)
|
||
# adds SE, AL, PB, PE, RN, CE, PI, MA and RR.
|
||
Rule Brazil 1999 only - Oct 3 0:00 1:00 S
|
||
Rule Brazil 2000 only - Feb 27 0:00 0 -
|
||
-# Decree <a href="http://pcdsh01.on.br/DEC3592.htm">3,592</a> (2000-09-06)
|
||
+# Decree 3,592 <http://pcdsh01.on.br/DEC3592.htm> (2000-09-06)
|
||
# adopted by the same states as before.
|
||
-# Decree <a href="http://pcdsh01.on.br/Dec3630.jpg">3,630</a> (2000-10-13)
|
||
+# Decree 3,630 <http://pcdsh01.on.br/Dec3630.jpg> (2000-10-13)
|
||
# repeals DST in PE and RR, effective 2000-10-15 00:00.
|
||
-# Decree <a href="http://pcdsh01.on.br/Dec3632.jpg">3,632</a> (2000-10-17)
|
||
+# Decree 3,632 <http://pcdsh01.on.br/Dec3632.jpg> (2000-10-17)
|
||
# repeals DST in SE, AL, PB, RN, CE, PI and MA, effective 2000-10-22 00:00.
|
||
-# Decree <a href="http://pcdsh01.on.br/figuras/HV3916.gif">3,916</a>
|
||
+# Decree 3,916 <http://pcdsh01.on.br/figuras/HV3916.gif>
|
||
# (2001-09-13) reestablishes DST in AL, CE, MA, PB, PE, PI, RN, SE.
|
||
Rule Brazil 2000 2001 - Oct Sun>=8 0:00 1:00 S
|
||
Rule Brazil 2001 2006 - Feb Sun>=15 0:00 0 -
|
||
# Decree 4,399 (2002-10-01) repeals DST in AL, CE, MA, PB, PE, PI, RN, SE.
|
||
-# <a href="http://www.presidencia.gov.br/CCIVIL/decreto/2002/D4399.htm">4,399</a>
|
||
+# 4,399 <http://www.presidencia.gov.br/CCIVIL/decreto/2002/D4399.htm>
|
||
Rule Brazil 2002 only - Nov 3 0:00 1:00 S
|
||
# Decree 4,844 (2003-09-24; corrected 2003-09-26) repeals DST in BA, MT, TO.
|
||
-# <a href="http://www.presidencia.gov.br/CCIVIL/decreto/2003/D4844.htm">4,844</a>
|
||
+# 4,844 <http://www.presidencia.gov.br/CCIVIL/decreto/2003/D4844.htm>
|
||
Rule Brazil 2003 only - Oct 19 0:00 1:00 S
|
||
# Decree 5,223 (2004-10-01) reestablishes DST in MT.
|
||
-# <a href="http://www.planalto.gov.br/ccivil_03/_Ato2004-2006/2004/Decreto/D5223.htm">5,223</a>
|
||
+# 5,223 <http://www.planalto.gov.br/ccivil_03/_Ato2004-2006/2004/Decreto/D5223.htm>
|
||
Rule Brazil 2004 only - Nov 2 0:00 1:00 S
|
||
-# Decree <a href="http://pcdsh01.on.br/DecHV5539.gif">5,539</a> (2005-09-19),
|
||
+# Decree 5,539 <http://pcdsh01.on.br/DecHV5539.gif> (2005-09-19),
|
||
# adopted by the same states as before.
|
||
Rule Brazil 2005 only - Oct 16 0:00 1:00 S
|
||
-# Decree <a href="http://pcdsh01.on.br/DecHV5920.gif">5,920</a> (2006-10-03),
|
||
+# Decree 5,920 <http://pcdsh01.on.br/DecHV5920.gif> (2006-10-03),
|
||
# adopted by the same states as before.
|
||
Rule Brazil 2006 only - Nov 5 0:00 1:00 S
|
||
Rule Brazil 2007 only - Feb 25 0:00 0 -
|
||
-# Decree <a href="http://pcdsh01.on.br/DecHV6212.gif">6,212</a> (2007-09-26),
|
||
+# Decree 6,212 <http://pcdsh01.on.br/DecHV6212.gif> (2007-09-26),
|
||
# adopted by the same states as before.
|
||
Rule Brazil 2007 only - Oct Sun>=8 0:00 1:00 S
|
||
# From Frederico A. C. Neves (2008-09-10):
|
||
# According to this decree
|
||
-# <a href="http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm">
|
||
# http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm
|
||
-# </a>
|
||
# [t]he DST period in Brazil now on will be from the 3rd Oct Sunday to the
|
||
# 3rd Feb Sunday. There is an exception on the return date when this is
|
||
# the Carnival Sunday then the return date will be the next Sunday...
|
||
@@ -1056,29 +994,29 @@
|
||
-2:00 Brazil FN%sT 2002 Oct 1
|
||
-2:00 - FNT
|
||
# Other Atlantic islands have no permanent settlement.
|
||
-# These include Trindade and Martin Vaz (administratively part of ES),
|
||
-# Atol das Rocas (RN), and Penedos de Sao Pedro e Sao Paulo (PE).
|
||
+# These include Trindade and Martim Vaz (administratively part of ES),
|
||
+# Rocas Atoll (RN), and the St Peter and St Paul Archipelago (PE).
|
||
# Fernando de Noronha was a separate territory from 1942-09-02 to 1989-01-01;
|
||
# it also included the Penedos.
|
||
#
|
||
-# Amapa (AP), east Para (PA)
|
||
-# East Para includes Belem, Maraba, Serra Norte, and Sao Felix do Xingu.
|
||
-# The division between east and west Para is the river Xingu.
|
||
+# Amapá (AP), east Pará (PA)
|
||
+# East Pará includes Belém, Marabá, Serra Norte, and São Félix do Xingu.
|
||
+# The division between east and west Pará is the river Xingu.
|
||
# In the north a very small part from the river Javary (now Jari I guess,
|
||
-# the border with Amapa) to the Amazon, then to the Xingu.
|
||
+# the border with Amapá) to the Amazon, then to the Xingu.
|
||
Zone America/Belem -3:13:56 - LMT 1914
|
||
-3:00 Brazil BR%sT 1988 Sep 12
|
||
-3:00 - BRT
|
||
#
|
||
-# west Para (PA)
|
||
-# West Para includes Altamira, Oribidos, Prainha, Oriximina, and Santarem.
|
||
+# west Pará (PA)
|
||
+# West Pará includes Altamira, Óbidos, Prainha, Oriximiná, and Santarém.
|
||
Zone America/Santarem -3:38:48 - LMT 1914
|
||
-4:00 Brazil AM%sT 1988 Sep 12
|
||
- -4:00 - AMT 2008 Jun 24 00:00
|
||
+ -4:00 - AMT 2008 Jun 24 0:00
|
||
-3:00 - BRT
|
||
#
|
||
-# Maranhao (MA), Piaui (PI), Ceara (CE), Rio Grande do Norte (RN),
|
||
-# Paraiba (PB)
|
||
+# Maranhão (MA), Piauí (PI), Ceará (CE), Rio Grande do Norte (RN),
|
||
+# Paraíba (PB)
|
||
Zone America/Fortaleza -2:34:00 - LMT 1914
|
||
-3:00 Brazil BR%sT 1990 Sep 17
|
||
-3:00 - BRT 1999 Sep 30
|
||
@@ -1125,11 +1063,11 @@
|
||
-3:00 Brazil BR%sT 2012 Oct 21
|
||
-3:00 - BRT
|
||
#
|
||
-# Goias (GO), Distrito Federal (DF), Minas Gerais (MG),
|
||
-# Espirito Santo (ES), Rio de Janeiro (RJ), Sao Paulo (SP), Parana (PR),
|
||
+# Goiás (GO), Distrito Federal (DF), Minas Gerais (MG),
|
||
+# Espírito Santo (ES), Rio de Janeiro (RJ), São Paulo (SP), Paraná (PR),
|
||
# Santa Catarina (SC), Rio Grande do Sul (RS)
|
||
Zone America/Sao_Paulo -3:06:28 - LMT 1914
|
||
- -3:00 Brazil BR%sT 1963 Oct 23 00:00
|
||
+ -3:00 Brazil BR%sT 1963 Oct 23 0:00
|
||
-3:00 1:00 BRST 1964
|
||
-3:00 Brazil BR%sT
|
||
#
|
||
@@ -1143,7 +1081,7 @@
|
||
-4:00 - AMT 2004 Oct 1
|
||
-4:00 Brazil AM%sT
|
||
#
|
||
-# Rondonia (RO)
|
||
+# Rondônia (RO)
|
||
Zone America/Porto_Velho -4:15:36 - LMT 1914
|
||
-4:00 Brazil AM%sT 1988 Sep 12
|
||
-4:00 - AMT
|
||
@@ -1155,7 +1093,7 @@
|
||
-4:00 Brazil AM%sT 2000 Oct 15
|
||
-4:00 - AMT
|
||
#
|
||
-# east Amazonas (AM): Boca do Acre, Jutai, Manaus, Floriano Peixoto
|
||
+# east Amazonas (AM): Boca do Acre, Jutaí, Manaus, Floriano Peixoto
|
||
# The great circle line from Tabatinga to Porto Acre divides
|
||
# east from west Amazonas.
|
||
Zone America/Manaus -4:00:04 - LMT 1914
|
||
@@ -1165,19 +1103,19 @@
|
||
-4:00 - AMT
|
||
#
|
||
# west Amazonas (AM): Atalaia do Norte, Boca do Maoco, Benjamin Constant,
|
||
-# Eirunepe, Envira, Ipixuna
|
||
+# Eirunepé, Envira, Ipixuna
|
||
Zone America/Eirunepe -4:39:28 - LMT 1914
|
||
-5:00 Brazil AC%sT 1988 Sep 12
|
||
-5:00 - ACT 1993 Sep 28
|
||
-5:00 Brazil AC%sT 1994 Sep 22
|
||
- -5:00 - ACT 2008 Jun 24 00:00
|
||
+ -5:00 - ACT 2008 Jun 24 0:00
|
||
-4:00 - AMT 2013 Nov 10
|
||
-5:00 - ACT
|
||
#
|
||
# Acre (AC)
|
||
Zone America/Rio_Branco -4:31:12 - LMT 1914
|
||
-5:00 Brazil AC%sT 1988 Sep 12
|
||
- -5:00 - ACT 2008 Jun 24 00:00
|
||
+ -5:00 - ACT 2008 Jun 24 0:00
|
||
-4:00 - AMT 2013 Nov 10
|
||
-5:00 - ACT
|
||
|
||
@@ -1198,66 +1136,54 @@
|
||
# From Oscar van Vlijmen (2006-10-08):
|
||
# http://www.horaoficial.cl/cambio.htm
|
||
|
||
-# From Jesper Norgaard Welen (2006-10-08):
|
||
+# From Jesper Nørgaard Welen (2006-10-08):
|
||
# I think that there are some obvious mistakes in the suggested link
|
||
# from Oscar van Vlijmen,... for instance entry 66 says that GMT-4
|
||
# ended 1990-09-12 while entry 67 only begins GMT-3 at 1990-09-15
|
||
# (they should have been 1990-09-15 and 1990-09-16 respectively), but
|
||
# anyhow it clears up some doubts too.
|
||
|
||
-# From Paul Eggert (2006-12-27):
|
||
-# The following data for Chile and America/Santiago are from
|
||
+# From Paul Eggert (2014-08-12):
|
||
+# The following data entries for Chile and America/Santiago are from
|
||
# <http://www.horaoficial.cl/horaof.htm> (2006-09-20), transcribed by
|
||
-# Jesper Norgaard Welen. The data for Pacific/Easter are from Shanks
|
||
+# Jesper Nørgaard Welen. The data entries for Pacific/Easter are from Shanks
|
||
# & Pottenger, except with DST transitions after 1932 cloned from
|
||
-# America/Santiago. The pre-1980 Pacific/Easter data are dubious,
|
||
+# America/Santiago. The pre-1980 Pacific/Easter data entries are dubious,
|
||
# but we have no other source.
|
||
|
||
-# From German Poo-Caaman~o (2008-03-03):
|
||
+# From Germán Poo-Caamaño (2008-03-03):
|
||
# Due to drought, Chile extends Daylight Time in three weeks. This
|
||
# is one-time change (Saturday 3/29 at 24:00 for America/Santiago
|
||
# and Saturday 3/29 at 22:00 for Pacific/Easter)
|
||
# The Supreme Decree is located at
|
||
-# <a href="http://www.shoa.cl/servicios/supremo316.pdf">
|
||
# http://www.shoa.cl/servicios/supremo316.pdf
|
||
-# </a>
|
||
# and the instructions for 2008 are located in:
|
||
-# <a href="http://www.horaoficial.cl/cambio.htm">
|
||
# http://www.horaoficial.cl/cambio.htm
|
||
-# </a>.
|
||
|
||
-# From Jose Miguel Garrido (2008-03-05):
|
||
+# From José Miguel Garrido (2008-03-05):
|
||
# ...
|
||
# You could see the announces of the change on
|
||
-# <a href="http://www.shoa.cl/noticias/2008/04hora/hora.htm">
|
||
# http://www.shoa.cl/noticias/2008/04hora/hora.htm
|
||
-# </a>.
|
||
|
||
# From Angel Chiang (2010-03-04):
|
||
# Subject: DST in Chile exceptionally extended to 3 April due to earthquake
|
||
-# <a href="http://www.gobiernodechile.cl/viewNoticia.aspx?idArticulo=30098">
|
||
# http://www.gobiernodechile.cl/viewNoticia.aspx?idArticulo=30098
|
||
-# </a>
|
||
# (in Spanish, last paragraph).
|
||
#
|
||
# This is breaking news. There should be more information available later.
|
||
|
||
-# From Arthur Daivd Olson (2010-03-06):
|
||
+# From Arthur David Olson (2010-03-06):
|
||
# Angel Chiang's message confirmed by Julio Pacheco; Julio provided a patch.
|
||
|
||
-# From Glenn Eychaner (2011-03-02): [geychaner@mac.com]
|
||
+# From Glenn Eychaner (2011-03-02):
|
||
# It appears that the Chilean government has decided to postpone the
|
||
# change from summer time to winter time again, by three weeks to April
|
||
# 2nd:
|
||
-# <a href="http://www.emol.com/noticias/nacional/detalle/detallenoticias.asp?idnoticia=467651">
|
||
# http://www.emol.com/noticias/nacional/detalle/detallenoticias.asp?idnoticia=467651
|
||
-# </a>
|
||
#
|
||
# This is not yet reflected in the official "cambio de hora" site, but
|
||
# probably will be soon:
|
||
-# <a href="http://www.horaoficial.cl/cambio.htm">
|
||
# http://www.horaoficial.cl/cambio.htm
|
||
-# </a>
|
||
|
||
# From Arthur David Olson (2011-03-02):
|
||
# The emol.com article mentions a water shortage as the cause of the
|
||
@@ -1265,9 +1191,7 @@
|
||
|
||
# From Glenn Eychaner (2011-03-28):
|
||
# The article:
|
||
-# <a href="http://diario.elmercurio.com/2011/03/28/_portada/_portada/noticias/7565897A-CA86-49E6-9E03-660B21A4883E.htm?id=3D{7565897A-CA86-49E6-9E03-660B21A4883E}">
|
||
# http://diario.elmercurio.com/2011/03/28/_portada/_portada/noticias/7565897A-CA86-49E6-9E03-660B21A4883E.htm?id=3D{7565897A-CA86-49E6-9E03-660B21A4883E}
|
||
-# </a>
|
||
#
|
||
# In English:
|
||
# Chile's clocks will go back an hour this year on the 7th of May instead
|
||
@@ -1298,7 +1222,7 @@
|
||
# start date is 2013-09-08 00:00....
|
||
# http://www.gob.cl/informa/2013/02/15/gobierno-anuncia-fechas-de-cambio-de-hora-para-el-ano-2013.htm
|
||
|
||
-# From Jose Miguel Garrido (2014-02-19):
|
||
+# From José Miguel Garrido (2014-02-19):
|
||
# Today appeared in the Diario Oficial a decree amending the time change
|
||
# dates to 2014.
|
||
# DST End: last Saturday of April 2014 (Sun 27 Apr 2014 03:00 UTC)
|
||
@@ -1352,7 +1276,7 @@
|
||
# (1996-09) says 1998-03-08. Ignore these.
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Santiago -4:42:46 - LMT 1890
|
||
- -4:42:46 - SMT 1910 # Santiago Mean Time
|
||
+ -4:42:46 - SMT 1910 # Santiago Mean Time
|
||
-5:00 - CLT 1916 Jul 1 # Chile Time
|
||
-4:42:46 - SMT 1918 Sep 1 # Santiago Mean Time
|
||
-4:00 - CLT 1919 Jul 1 # Chile Time
|
||
@@ -1361,16 +1285,16 @@
|
||
-4:00 Chile CL%sT
|
||
Zone Pacific/Easter -7:17:44 - LMT 1890
|
||
-7:17:28 - EMT 1932 Sep # Easter Mean Time
|
||
- -7:00 Chile EAS%sT 1982 Mar 13 21:00 # Easter I Time
|
||
+ -7:00 Chile EAS%sT 1982 Mar 13 21:00 # Easter Time
|
||
-6:00 Chile EAS%sT
|
||
#
|
||
-# Sala y Gomez Island is like Pacific/Easter.
|
||
-# Other Chilean locations, including Juan Fernandez Is, San Ambrosio,
|
||
-# San Felix, and Antarctic bases, are like America/Santiago.
|
||
+# Salas y Gómez Island is uninhabited.
|
||
+# Other Chilean locations, including Juan Fernández Is, Desventuradas Is,
|
||
+# and Antarctic bases, are like America/Santiago.
|
||
|
||
# Colombia
|
||
|
||
-# Milne gives 4:56:16.4 for Bogota time in 1899; round to nearest. He writes,
|
||
+# Milne gives 4:56:16.4 for Bogotá time in 1899; round to nearest. He writes,
|
||
# "A variation of fifteen minutes in the public clocks of Bogota is not rare."
|
||
|
||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||
@@ -1378,37 +1302,37 @@
|
||
Rule CO 1993 only - Apr 4 0:00 0 -
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Bogota -4:56:16 - LMT 1884 Mar 13
|
||
- -4:56:16 - BMT 1914 Nov 23 # Bogota Mean Time
|
||
+ -4:56:16 - BMT 1914 Nov 23 # Bogotá Mean Time
|
||
-5:00 CO CO%sT # Colombia Time
|
||
# Malpelo, Providencia, San Andres
|
||
# no information; probably like America/Bogota
|
||
|
||
-# Curacao
|
||
+# Curaçao
|
||
|
||
-# Milne gives 4:35:46.9 for Curacao mean time; round to nearest.
|
||
+# Milne gives 4:35:46.9 for Curaçao mean time; round to nearest.
|
||
#
|
||
# From Paul Eggert (2006-03-22):
|
||
# Shanks & Pottenger say that The Bottom and Philipsburg have been at
|
||
# -4:00 since standard time was introduced on 1912-03-02; and that
|
||
# Kralendijk and Rincon used Kralendijk Mean Time (-4:33:08) from
|
||
# 1912-02-02 to 1965-01-01. The former is dubious, since S&P also say
|
||
-# Saba Island has been like Curacao.
|
||
+# Saba Island has been like Curaçao.
|
||
# This all predates our 1970 cutoff, though.
|
||
#
|
||
-# By July 2007 Curacao and St Maarten are planned to become
|
||
+# By July 2007 Curaçao and St Maarten are planned to become
|
||
# associated states within the Netherlands, much like Aruba;
|
||
# Bonaire, Saba and St Eustatius would become directly part of the
|
||
# Netherlands as Kingdom Islands. This won't affect their time zones
|
||
# though, as far as we know.
|
||
#
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone America/Curacao -4:35:47 - LMT 1912 Feb 12 # Willemstad
|
||
+Zone America/Curacao -4:35:47 - LMT 1912 Feb 12 # Willemstad
|
||
-4:30 - ANT 1965 # Netherlands Antilles Time
|
||
-4:00 - AST
|
||
|
||
# From Arthur David Olson (2011-06-15):
|
||
# use links for places with new iso3166 codes.
|
||
-# The name "Lower Prince's Quarter" is both longer than fourteen charaters
|
||
+# The name "Lower Prince's Quarter" is both longer than fourteen characters
|
||
# and contains an apostrophe; use "Lower_Princes" below.
|
||
|
||
Link America/Curacao America/Lower_Princes # Sint Maarten
|
||
@@ -1416,7 +1340,7 @@
|
||
|
||
# Ecuador
|
||
#
|
||
-# Milne says the Sentral and South American Telegraph Company used -5:24:15.
|
||
+# Milne says the Central and South American Telegraph Company used -5:24:15.
|
||
#
|
||
# From Paul Eggert (2007-03-04):
|
||
# Apparently Ecuador had a failed experiment with DST in 1992.
|
||
@@ -1427,10 +1351,10 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Guayaquil -5:19:20 - LMT 1890
|
||
-5:14:00 - QMT 1931 # Quito Mean Time
|
||
- -5:00 - ECT # Ecuador Time
|
||
+ -5:00 - ECT # Ecuador Time
|
||
Zone Pacific/Galapagos -5:58:24 - LMT 1931 # Puerto Baquerizo Moreno
|
||
-5:00 - ECT 1986
|
||
- -6:00 - GALT # Galapagos Time
|
||
+ -6:00 - GALT # Galápagos Time
|
||
|
||
# Falklands
|
||
|
||
@@ -1439,7 +1363,7 @@
|
||
# the IATA gives 1996-09-08. Go with Shanks & Pottenger.
|
||
|
||
# From Falkland Islands Government Office, London (2001-01-22)
|
||
-# via Jesper Norgaard:
|
||
+# via Jesper Nørgaard:
|
||
# ... the clocks revert back to Local Mean Time at 2 am on Sunday 15
|
||
# April 2001 and advance one hour to summer time at 2 am on Sunday 2
|
||
# September. It is anticipated that the clocks will revert back at 2
|
||
@@ -1488,9 +1412,7 @@
|
||
# daylight saving time.
|
||
#
|
||
# One source:
|
||
-# <a href="http://www.falklandnews.com/public/story.cfm?get=5914&source=3">
|
||
# http://www.falklandnews.com/public/story.cfm?get=5914&source=3
|
||
-# </a>
|
||
#
|
||
# We have gotten this confirmed by a clerk of the legislative assembly:
|
||
# Normally the clocks revert to Local Mean Time (UTC/GMT -4 hours) on the
|
||
@@ -1531,10 +1453,10 @@
|
||
Rule Falk 2001 2010 - Sep Sun>=1 2:00 1:00 S
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone Atlantic/Stanley -3:51:24 - LMT 1890
|
||
- -3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time
|
||
- -4:00 Falk FK%sT 1983 May # Falkland Is Time
|
||
+ -3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time
|
||
+ -4:00 Falk FK%sT 1983 May # Falkland Is Time
|
||
-3:00 Falk FK%sT 1985 Sep 15
|
||
- -4:00 Falk FK%sT 2010 Sep 5 02:00
|
||
+ -4:00 Falk FK%sT 2010 Sep 5 2:00
|
||
-3:00 - FKST
|
||
|
||
# French Guiana
|
||
@@ -1545,7 +1467,7 @@
|
||
|
||
# Guyana
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone America/Guyana -3:52:40 - LMT 1915 Mar # Georgetown
|
||
+Zone America/Guyana -3:52:40 - LMT 1915 Mar # Georgetown
|
||
-3:45 - GBGT 1966 May 26 # Br Guiana Time
|
||
-3:45 - GYT 1975 Jul 31 # Guyana Time
|
||
-3:00 - GYT 1991
|
||
@@ -1555,8 +1477,8 @@
|
||
# Paraguay
|
||
#
|
||
# From Paul Eggert (2006-03-22):
|
||
-# Shanks & Pottenger say that spring transitions are from 01:00 -> 02:00,
|
||
-# and autumn transitions are from 00:00 -> 23:00. Go with pre-1999
|
||
+# Shanks & Pottenger say that spring transitions are 01:00 -> 02:00,
|
||
+# and autumn transitions are 00:00 -> 23:00. Go with pre-1999
|
||
# editions of Shanks, and with the IATA, who say transitions occur at 00:00.
|
||
#
|
||
# From Waldemar Villamayor-Venialbo (2013-09-20):
|
||
@@ -1582,9 +1504,8 @@
|
||
# (10-01).
|
||
#
|
||
# Translated by Gwillim Law (2001-02-27) from
|
||
-# <a href="http://www.diarionoticias.com.py/011000/nacional/naciona1.htm">
|
||
-# Noticias, a daily paper in Asuncion, Paraguay (2000-10-01)
|
||
-# </a>:
|
||
+# Noticias, a daily paper in Asunción, Paraguay (2000-10-01):
|
||
+# http://www.diarionoticias.com.py/011000/nacional/naciona1.htm
|
||
# Starting at 0:00 today, the clock will be set forward 60 minutes, in
|
||
# fulfillment of Decree No. 7,273 of the Executive Power.... The time change
|
||
# system has been operating for several years. Formerly there was a separate
|
||
@@ -1605,21 +1526,18 @@
|
||
Rule Para 2002 2004 - Apr Sun>=1 0:00 0 -
|
||
Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 S
|
||
#
|
||
-# From Jesper Norgaard Welen (2005-01-02):
|
||
+# From Jesper Nørgaard Welen (2005-01-02):
|
||
# There are several sources that claim that Paraguay made
|
||
# a timezone rule change in autumn 2004.
|
||
# From Steffen Thorsen (2005-01-05):
|
||
# Decree 1,867 (2004-03-05)
|
||
-# From Carlos Raul Perasso via Jesper Norgaard Welen (2006-10-13)
|
||
-# <http://www.presidencia.gov.py/decretos/D1867.pdf>
|
||
+# From Carlos Raúl Perasso via Jesper Nørgaard Welen (2006-10-13)
|
||
+# http://www.presidencia.gov.py/decretos/D1867.pdf
|
||
Rule Para 2004 2009 - Oct Sun>=15 0:00 1:00 S
|
||
Rule Para 2005 2009 - Mar Sun>=8 0:00 0 -
|
||
-# From Carlos Raul Perasso (2010-02-18):
|
||
-# By decree number 3958 issued yesterday (
|
||
-# <a href="http://www.presidencia.gov.py/v1/wp-content/uploads/2010/02/decreto3958.pdf">
|
||
+# From Carlos Raúl Perasso (2010-02-18):
|
||
+# By decree number 3958 issued yesterday
|
||
# http://www.presidencia.gov.py/v1/wp-content/uploads/2010/02/decreto3958.pdf
|
||
-# </a>
|
||
-# )
|
||
# Paraguay changes its DST schedule, postponing the March rule to April and
|
||
# modifying the October date. The decree reads:
|
||
# ...
|
||
@@ -1635,25 +1553,25 @@
|
||
# Paraguay will end DST on 2013-03-24 00:00....
|
||
# http://www.ande.gov.py/interna.php?id=1075
|
||
#
|
||
-# From Carlos Raul Perasso (2013-03-15):
|
||
+# From Carlos Raúl Perasso (2013-03-15):
|
||
# The change in Paraguay is now final. Decree number 10780
|
||
# http://www.presidencia.gov.py/uploads/pdf/presidencia-3b86ff4b691c79d4f5927ca964922ec74772ce857c02ca054a52a37b49afc7fb.pdf
|
||
-# From Carlos Raul Perasso (2014-02-28):
|
||
+# From Carlos Raúl Perasso (2014-02-28):
|
||
# Decree 1264 can be found at:
|
||
# http://www.presidencia.gov.py/archivos/documentos/DECRETO1264_ey9r8zai.pdf
|
||
Rule Para 2013 max - Mar Sun>=22 0:00 0 -
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Asuncion -3:50:40 - LMT 1890
|
||
- -3:50:40 - AMT 1931 Oct 10 # Asuncion Mean Time
|
||
- -4:00 - PYT 1972 Oct # Paraguay Time
|
||
+ -3:50:40 - AMT 1931 Oct 10 # Asunción Mean Time
|
||
+ -4:00 - PYT 1972 Oct # Paraguay Time
|
||
-3:00 - PYT 1974 Apr
|
||
-4:00 Para PY%sT
|
||
|
||
# Peru
|
||
#
|
||
-# <a href="news:xrGmb.39935$gA1.13896113@news4.srv.hcvlny.cv.net">
|
||
-# From Evelyn C. Leeper via Mark Brader (2003-10-26):</a>
|
||
+# From Evelyn C. Leeper via Mark Brader (2003-10-26)
|
||
+# <news:xrGmb.39935$gA1.13896113@news4.srv.hcvlny.cv.net>:
|
||
# When we were in Peru in 1985-1986, they apparently switched over
|
||
# sometime between December 29 and January 3 while we were on the Amazon.
|
||
#
|
||
@@ -1679,7 +1597,7 @@
|
||
|
||
# South Georgia
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
-Zone Atlantic/South_Georgia -2:26:08 - LMT 1890 # Grytviken
|
||
+Zone Atlantic/South_Georgia -2:26:08 - LMT 1890 # Grytviken
|
||
-2:00 - GST # South Georgia Time
|
||
|
||
# South Sandwich Is
|
||
@@ -1689,9 +1607,9 @@
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Paramaribo -3:40:40 - LMT 1911
|
||
-3:40:52 - PMT 1935 # Paramaribo Mean Time
|
||
- -3:40:36 - PMT 1945 Oct # The capital moved?
|
||
+ -3:40:36 - PMT 1945 Oct # The capital moved?
|
||
-3:30 - NEGT 1975 Nov 20 # Dutch Guiana Time
|
||
- -3:30 - SRT 1984 Oct # Suriname Time
|
||
+ -3:30 - SRT 1984 Oct # Suriname Time
|
||
-3:00 - SRT
|
||
|
||
# Trinidad and Tobago
|
||
@@ -1706,7 +1624,7 @@
|
||
Link America/Port_of_Spain America/Guadeloupe
|
||
Link America/Port_of_Spain America/Marigot # St Martin (French part)
|
||
Link America/Port_of_Spain America/Montserrat
|
||
-Link America/Port_of_Spain America/St_Barthelemy
|
||
+Link America/Port_of_Spain America/St_Barthelemy # St Barthélemy
|
||
Link America/Port_of_Spain America/St_Kitts # St Kitts & Nevis
|
||
Link America/Port_of_Spain America/St_Lucia
|
||
Link America/Port_of_Spain America/St_Thomas # Virgin Islands (US)
|
||
@@ -1765,7 +1683,7 @@
|
||
Rule Uruguay 1992 only - Oct 18 0:00 1:00 S
|
||
Rule Uruguay 1993 only - Feb 28 0:00 0 -
|
||
# From Eduardo Cota (2004-09-20):
|
||
-# The uruguayan government has decreed a change in the local time....
|
||
+# The Uruguayan government has decreed a change in the local time....
|
||
# http://www.presidencia.gub.uy/decretos/2004091502.htm
|
||
Rule Uruguay 2004 only - Sep 19 0:00 1:00 S
|
||
# From Steffen Thorsen (2005-03-11):
|
||
@@ -1779,14 +1697,14 @@
|
||
# 02:00 local time, official time in Uruguay will be at GMT -2.
|
||
Rule Uruguay 2005 only - Oct 9 2:00 1:00 S
|
||
Rule Uruguay 2006 only - Mar 12 2:00 0 -
|
||
-# From Jesper Norgaard Welen (2006-09-06):
|
||
+# From Jesper Nørgaard Welen (2006-09-06):
|
||
# http://www.presidencia.gub.uy/_web/decretos/2006/09/CM%20210_08%2006%202006_00001.PDF
|
||
Rule Uruguay 2006 max - Oct Sun>=1 2:00 1:00 S
|
||
Rule Uruguay 2007 max - Mar Sun>=8 2:00 0 -
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28
|
||
- -3:44:44 - MMT 1920 May 1 # Montevideo MT
|
||
- -3:30 Uruguay UY%sT 1942 Dec 14 # Uruguay Time
|
||
+ -3:44:44 - MMT 1920 May 1 # Montevideo MT
|
||
+ -3:30 Uruguay UY%sT 1942 Dec 14 # Uruguay Time
|
||
-3:00 Uruguay UY%sT
|
||
|
||
# Venezuela
|
||
@@ -1794,14 +1712,14 @@
|
||
# From John Stainforth (2007-11-28):
|
||
# ... the change for Venezuela originally expected for 2007-12-31 has
|
||
# been brought forward to 2007-12-09. The official announcement was
|
||
-# published today in the "Gaceta Oficial de la Republica Bolivariana
|
||
-# de Venezuela, numero 38.819" (official document for all laws or
|
||
+# published today in the "Gaceta Oficial de la República Bolivariana
|
||
+# de Venezuela, número 38.819" (official document for all laws or
|
||
# resolution publication)
|
||
# http://www.globovision.com/news.php?nid=72208
|
||
|
||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||
Zone America/Caracas -4:27:44 - LMT 1890
|
||
-4:27:40 - CMT 1912 Feb 12 # Caracas Mean Time?
|
||
- -4:30 - VET 1965 # Venezuela Time
|
||
- -4:00 - VET 2007 Dec 9 03:00
|
||
+ -4:30 - VET 1965 # Venezuela Time
|
||
+ -4:00 - VET 2007 Dec 9 3:00
|
||
-4:30 - VET
|
||
--- ./jdk/make/sun/javazic/tzdata/systemv Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/sun/javazic/tzdata/systemv Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -21,7 +21,6 @@
|
||
# or visit www.oracle.com if you need additional information or have any
|
||
# questions.
|
||
#
|
||
-# <pre>
|
||
# This file is in the public domain, so clarified as of
|
||
# 2009-05-17 by Arthur David Olson.
|
||
|
||
--- ./jdk/make/sun/javazic/tzdata/zone.tab Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/sun/javazic/tzdata/zone.tab Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -21,39 +21,27 @@
|
||
# or visit www.oracle.com if you need additional information or have any
|
||
# questions.
|
||
#
|
||
-# TZ zone descriptions
|
||
+# tz zone descriptions (deprecated version)
|
||
#
|
||
# This file is in the public domain, so clarified as of
|
||
# 2009-05-17 by Arthur David Olson.
|
||
#
|
||
-# From Paul Eggert (2013-08-14):
|
||
+# From Paul Eggert (2014-07-31):
|
||
+# This file is intended as a backward-compatibility aid for older programs.
|
||
+# New programs should use zone1970.tab. This file is like zone1970.tab (see
|
||
+# zone1970.tab's comments), but with the following additional restrictions:
|
||
#
|
||
-# This file contains a table where each row stands for an area that is
|
||
-# the intersection of a region identified by a country code and of a
|
||
-# zone where civil clocks have agreed since 1970. The columns of the
|
||
-# table are as follows:
|
||
+# 1. This file contains only ASCII characters.
|
||
+# 2. The first data column contains exactly one country code.
|
||
#
|
||
-# 1. ISO 3166 2-character country code. See the file 'iso3166.tab'.
|
||
-# 2. Latitude and longitude of the area's principal location
|
||
-# in ISO 6709 sign-degrees-minutes-seconds format,
|
||
-# either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS,
|
||
-# first latitude (+ is north), then longitude (+ is east).
|
||
-# 3. Zone name used in value of TZ environment variable.
|
||
-# Please see the 'Theory' file for how zone names are chosen.
|
||
-# If multiple zones overlap a country, each has a row in the
|
||
-# table, with column 1 being duplicated.
|
||
-# 4. Comments; present if and only if the country has multiple rows.
|
||
-#
|
||
-# Columns are separated by a single tab.
|
||
-# The table is sorted first by country, then an order within the country that
|
||
-# (1) makes some geographical sense, and
|
||
-# (2) puts the most populous areas first, where that does not contradict (1).
|
||
-#
|
||
-# Lines beginning with '#' are comments.
|
||
+# Because of (2), each row stands for an area that is the intersection
|
||
+# of a region identified by a country code and of a zone where civil
|
||
+# clocks have agreed since 1970; this is a narrower definition than
|
||
+# that of zone1970.tab.
|
||
#
|
||
# This table is intended as an aid for users, to help them select time
|
||
-# zone data appropriate for their practical needs. It is not intended
|
||
-# to take or endorse any position on legal or territorial claims.
|
||
+# zone data entries appropriate for their practical needs. It is not
|
||
+# intended to take or endorse any position on legal or territorial claims.
|
||
#
|
||
#country-
|
||
#code coordinates TZ comments
|
||
@@ -72,7 +60,7 @@
|
||
AQ -6835+07758 Antarctica/Davis Davis Station, Vestfold Hills
|
||
AQ -6617+11031 Antarctica/Casey Casey Station, Bailey Peninsula
|
||
AQ -7824+10654 Antarctica/Vostok Vostok Station, Lake Vostok
|
||
-AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Station, Terre Adelie
|
||
+AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Station, Adelie Land
|
||
AQ -690022+0393524 Antarctica/Syowa Syowa Station, E Ongul I
|
||
AQ -720041+0023206 Antarctica/Troll Troll Station, Queen Maud Land
|
||
AR -3436-05827 America/Argentina/Buenos_Aires Buenos Aires (BA, CF)
|
||
@@ -151,7 +139,7 @@
|
||
CA +4823-08915 America/Thunder_Bay Eastern Time - Thunder Bay, Ontario
|
||
CA +6344-06828 America/Iqaluit Eastern Time - east Nunavut - most locations
|
||
CA +6608-06544 America/Pangnirtung Eastern Time - Pangnirtung, Nunavut
|
||
-CA +744144-0944945 America/Resolute Central Standard Time - Resolute, Nunavut
|
||
+CA +744144-0944945 America/Resolute Central Time - Resolute, Nunavut
|
||
CA +484531-0913718 America/Atikokan Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut
|
||
CA +624900-0920459 America/Rankin_Inlet Central Time - central Nunavut
|
||
CA +4953-09709 America/Winnipeg Central Time - Manitoba & west Ontario
|
||
@@ -176,13 +164,10 @@
|
||
CI +0519-00402 Africa/Abidjan
|
||
CK -2114-15946 Pacific/Rarotonga
|
||
CL -3327-07040 America/Santiago most locations
|
||
-CL -2709-10926 Pacific/Easter Easter Island & Sala y Gomez
|
||
+CL -2709-10926 Pacific/Easter Easter Island
|
||
CM +0403+00942 Africa/Douala
|
||
-CN +3114+12128 Asia/Shanghai east China - Beijing, Guangdong, Shanghai, etc.
|
||
-CN +4545+12641 Asia/Harbin Heilongjiang (except Mohe), Jilin
|
||
-CN +2934+10635 Asia/Chongqing central China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc.
|
||
-CN +4348+08735 Asia/Urumqi most of Tibet & Xinjiang
|
||
-CN +3929+07559 Asia/Kashgar west Tibet & Xinjiang
|
||
+CN +3114+12128 Asia/Shanghai Beijing Time
|
||
+CN +4348+08735 Asia/Urumqi Xinjiang Time
|
||
CO +0436-07405 America/Bogota
|
||
CR +0956-08405 America/Costa_Rica
|
||
CU +2308-08222 America/Havana
|
||
@@ -345,7 +330,8 @@
|
||
PF -1732-14934 Pacific/Tahiti Society Islands
|
||
PF -0900-13930 Pacific/Marquesas Marquesas Islands
|
||
PF -2308-13457 Pacific/Gambier Gambier Islands
|
||
-PG -0930+14710 Pacific/Port_Moresby
|
||
+PG -0930+14710 Pacific/Port_Moresby most locations
|
||
+PG -0613+15534 Pacific/Bougainville Bougainville
|
||
PH +1435+12100 Asia/Manila
|
||
PK +2452+06703 Asia/Karachi
|
||
PL +5215+02100 Europe/Warsaw
|
||
@@ -364,24 +350,26 @@
|
||
RO +4426+02606 Europe/Bucharest
|
||
RS +4450+02030 Europe/Belgrade
|
||
RU +5443+02030 Europe/Kaliningrad Moscow-01 - Kaliningrad
|
||
-RU +5545+03735 Europe/Moscow Moscow+00 - west Russia
|
||
+RU +554521+0373704 Europe/Moscow Moscow+00 - west Russia
|
||
+RU +4457+03406 Europe/Simferopol Moscow+00 - Crimea
|
||
RU +4844+04425 Europe/Volgograd Moscow+00 - Caspian Sea
|
||
-RU +5312+05009 Europe/Samara Moscow+00 - Samara, Udmurtia
|
||
-RU +4457+03406 Europe/Simferopol Moscow+00 - Crimea
|
||
+RU +5312+05009 Europe/Samara Moscow+00 (Moscow+01 after 2014-10-26) - Samara, Udmurtia
|
||
RU +5651+06036 Asia/Yekaterinburg Moscow+02 - Urals
|
||
RU +5500+07324 Asia/Omsk Moscow+03 - west Siberia
|
||
RU +5502+08255 Asia/Novosibirsk Moscow+03 - Novosibirsk
|
||
-RU +5345+08707 Asia/Novokuznetsk Moscow+03 - Novokuznetsk
|
||
+RU +5345+08707 Asia/Novokuznetsk Moscow+03 (Moscow+04 after 2014-10-26) - Kemerovo
|
||
RU +5601+09250 Asia/Krasnoyarsk Moscow+04 - Yenisei River
|
||
RU +5216+10420 Asia/Irkutsk Moscow+05 - Lake Baikal
|
||
+RU +5203+11328 Asia/Chita Moscow+06 (Moscow+05 after 2014-10-26) - Zabaykalsky
|
||
RU +6200+12940 Asia/Yakutsk Moscow+06 - Lena River
|
||
RU +623923+1353314 Asia/Khandyga Moscow+06 - Tomponsky, Ust-Maysky
|
||
RU +4310+13156 Asia/Vladivostok Moscow+07 - Amur River
|
||
RU +4658+14242 Asia/Sakhalin Moscow+07 - Sakhalin Island
|
||
RU +643337+1431336 Asia/Ust-Nera Moscow+07 - Oymyakonsky
|
||
-RU +5934+15048 Asia/Magadan Moscow+08 - Magadan
|
||
-RU +5301+15839 Asia/Kamchatka Moscow+08 - Kamchatka
|
||
-RU +6445+17729 Asia/Anadyr Moscow+08 - Bering Sea
|
||
+RU +5934+15048 Asia/Magadan Moscow+08 (Moscow+07 after 2014-10-26) - Magadan
|
||
+RU +6728+15343 Asia/Srednekolymsk Moscow+08 - E Sakha, N Kuril Is
|
||
+RU +5301+15839 Asia/Kamchatka Moscow+08 (Moscow+09 after 2014-10-26) - Kamchatka
|
||
+RU +6445+17729 Asia/Anadyr Moscow+08 (Moscow+09 after 2014-10-26) - Bering Sea
|
||
RW -0157+03004 Africa/Kigali
|
||
SA +2438+04643 Asia/Riyadh
|
||
SB -0932+16012 Pacific/Guadalcanal
|
||
@@ -448,13 +436,13 @@
|
||
US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon
|
||
US +332654-1120424 America/Phoenix Mountain Standard Time - Arizona (except Navajo)
|
||
US +340308-1181434 America/Los_Angeles Pacific Time
|
||
+US +550737-1313435 America/Metlakatla Pacific Standard Time - Annette Island, Alaska
|
||
US +611305-1495401 America/Anchorage Alaska Time
|
||
US +581807-1342511 America/Juneau Alaska Time - Alaska panhandle
|
||
US +571035-1351807 America/Sitka Alaska Time - southeast Alaska panhandle
|
||
US +593249-1394338 America/Yakutat Alaska Time - Alaska panhandle neck
|
||
US +643004-1652423 America/Nome Alaska Time - west Alaska
|
||
US +515248-1763929 America/Adak Aleutian Islands
|
||
-US +550737-1313435 America/Metlakatla Metlakatla Time - Annette Island
|
||
US +211825-1575130 Pacific/Honolulu Hawaii
|
||
UY -3453-05611 America/Montevideo
|
||
UZ +3940+06648 Asia/Samarkand west Uzbekistan
|
||
--- ./jdk/make/sun/security/krb5/Makefile Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/sun/security/krb5/Makefile Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -92,7 +92,7 @@
|
||
OTHER_LDLIBS = $(LIBDL) $(JVMLIB)
|
||
endif
|
||
|
||
-build:
|
||
+all:
|
||
ifeq ($(PLATFORM),windows)
|
||
$(call make-launcher, kinit, sun.security.krb5.internal.tools.Kinit, , )
|
||
$(call make-launcher, klist, sun.security.krb5.internal.tools.Klist, , )
|
||
--- ./jdk/make/tools/src/build/tools/generatecurrencydata/GenerateCurrencyData.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/make/tools/src/build/tools/generatecurrencydata/GenerateCurrencyData.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -281,8 +281,8 @@
|
||
checkCurrencyCode(newCurrency);
|
||
String timeString = currencyInfo.substring(4, length - 4);
|
||
long time = format.parse(timeString).getTime();
|
||
- if (Math.abs(time - System.currentTimeMillis()) > ((long) 10) * 365 * 24 * 60 * 60 * 1000) {
|
||
- throw new RuntimeException("time is more than 10 years from present: " + time);
|
||
+ if (Math.abs(time - System.currentTimeMillis()) > ((long) 20) * 365 * 24 * 60 * 60 * 1000) {
|
||
+ throw new RuntimeException("time is more than 10 years from present: " + time + " " + timeString + " " + currencyInfo);
|
||
}
|
||
specialCaseCutOverTimes[specialCaseCount] = time;
|
||
specialCaseOldCurrencies[specialCaseCount] = oldCurrency;
|
||
--- ./jdk/src/macosx/classes/sun/lwawt/LWWindowPeer.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/macosx/classes/sun/lwawt/LWWindowPeer.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -755,7 +755,7 @@
|
||
public void notifyNCMouseDown() {
|
||
// Ungrab except for a click on a Dialog with the grabbing owner
|
||
if (grabbingWindow != null &&
|
||
- grabbingWindow != getOwnerFrameDialog(this))
|
||
+ !grabbingWindow.isOneOfOwnersOf(this))
|
||
{
|
||
grabbingWindow.ungrab();
|
||
}
|
||
@@ -851,7 +851,7 @@
|
||
|
||
// Ungrab only if this window is not an owned window of the grabbing one.
|
||
if (!isGrabbing() && grabbingWindow != null &&
|
||
- grabbingWindow != getOwnerFrameDialog(this))
|
||
+ !grabbingWindow.isOneOfOwnersOf(this))
|
||
{
|
||
grabbingWindow.ungrab();
|
||
}
|
||
@@ -1321,6 +1321,17 @@
|
||
return !(window instanceof Dialog || window instanceof Frame);
|
||
}
|
||
|
||
+ private boolean isOneOfOwnersOf(LWWindowPeer peer) {
|
||
+ Window owner = (peer != null ? peer.getTarget().getOwner() : null);
|
||
+ while (owner != null) {
|
||
+ if ((LWWindowPeer)owner.getPeer() == this) {
|
||
+ return true;
|
||
+ }
|
||
+ owner = owner.getOwner();
|
||
+ }
|
||
+ return false;
|
||
+ }
|
||
+
|
||
/*
|
||
* Changes focused window on java level.
|
||
*/
|
||
@@ -1352,7 +1363,7 @@
|
||
// - when the opposite (gaining focus) window is an owned/owner window.
|
||
// - for a simple window in any case.
|
||
if (!becomesFocused &&
|
||
- (isGrabbing() || getOwnerFrameDialog(grabbingWindow) == this))
|
||
+ (isGrabbing() || this.isOneOfOwnersOf(grabbingWindow)))
|
||
{
|
||
focusLog.fine("ungrabbing on " + grabbingWindow);
|
||
// ungrab a simple window if its owner looses activation.
|
||
@@ -1369,6 +1380,11 @@
|
||
postEvent(windowEvent);
|
||
}
|
||
|
||
+ /*
|
||
+ * Retrieves the owner of the peer.
|
||
+ * Note: this method returns the owner which can be activated, (i.e. the instance
|
||
+ * of Frame or Dialog may be returned).
|
||
+ */
|
||
static LWWindowPeer getOwnerFrameDialog(LWWindowPeer peer) {
|
||
Window owner = (peer != null ? peer.getTarget().getOwner() : null);
|
||
while (owner != null && !(owner instanceof Frame || owner instanceof Dialog)) {
|
||
--- ./jdk/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -39,7 +39,8 @@
|
||
|
||
private CPlatformResponder responder;
|
||
private static final Object classLock = new Object();
|
||
- private static volatile CEmbeddedFrame focusedWindow;
|
||
+ private static volatile CEmbeddedFrame globalFocusedWindow;
|
||
+ private CEmbeddedFrame browserWindowFocusedApplet;
|
||
private boolean parentWindowActive = true;
|
||
|
||
public CEmbeddedFrame() {
|
||
@@ -98,7 +99,8 @@
|
||
public void handleKeyEvent(int eventType, int modifierFlags, String characters,
|
||
String charsIgnoringMods, boolean isRepeat, short keyCode,
|
||
boolean needsKeyTyped) {
|
||
- responder.handleKeyEvent(eventType, modifierFlags, charsIgnoringMods, keyCode, needsKeyTyped, isRepeat);
|
||
+ responder.handleKeyEvent(eventType, modifierFlags, characters, charsIgnoringMods,
|
||
+ keyCode, needsKeyTyped, isRepeat);
|
||
}
|
||
|
||
// REMIND: delete this method once 'deploy' changes for 7156194 is pushed
|
||
@@ -117,10 +119,10 @@
|
||
synchronized (classLock) {
|
||
// In some cases an applet may not receive the focus lost event
|
||
// from the parent window (see 8012330)
|
||
- focusedWindow = (focused) ? this
|
||
- : ((focusedWindow == this) ? null : focusedWindow);
|
||
+ globalFocusedWindow = (focused) ? this
|
||
+ : ((globalFocusedWindow == this) ? null : globalFocusedWindow);
|
||
}
|
||
- if (focusedWindow == this) {
|
||
+ if (globalFocusedWindow == this) {
|
||
// see bug 8010925
|
||
// we can't put this to handleWindowFocusEvent because
|
||
// it won't be invoced if focuse is moved to a html element
|
||
@@ -150,9 +152,23 @@
|
||
*/
|
||
public void handleWindowFocusEvent(boolean parentWindowActive) {
|
||
this.parentWindowActive = parentWindowActive;
|
||
+ // If several applets are running in different browser's windows, it is necessary to
|
||
+ // detect the switching between the parent windows and update globalFocusedWindow accordingly.
|
||
+ synchronized (classLock) {
|
||
+ if (!parentWindowActive) {
|
||
+ this.browserWindowFocusedApplet = globalFocusedWindow;
|
||
+ }
|
||
+ if (parentWindowActive && globalFocusedWindow != this && isParentWindowChanged()) {
|
||
+ // It looks like we have switched to another browser window, let's restore focus to
|
||
+ // the previously focused applet in this window. If no applets were focused in the
|
||
+ // window, we will set focus to the first applet in the window.
|
||
+ globalFocusedWindow = (this.browserWindowFocusedApplet != null) ? this.browserWindowFocusedApplet
|
||
+ : this;
|
||
+ }
|
||
+ }
|
||
// ignore focus "lost" native request as it may mistakenly
|
||
// deactivate active window (see 8001161)
|
||
- if (focusedWindow == this && parentWindowActive) {
|
||
+ if (globalFocusedWindow == this && parentWindowActive) {
|
||
responder.handleWindowFocusEvent(parentWindowActive, null);
|
||
}
|
||
}
|
||
@@ -160,4 +176,10 @@
|
||
public boolean isParentWindowActive() {
|
||
return parentWindowActive;
|
||
}
|
||
+
|
||
+ private boolean isParentWindowChanged() {
|
||
+ // If globalFocusedWindow is located at inactive parent window or null, we have swithed to
|
||
+ // another window.
|
||
+ return globalFocusedWindow != null ? !globalFocusedWindow.isParentWindowActive() : true;
|
||
+ }
|
||
}
|
||
--- ./jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -126,7 +126,7 @@
|
||
/**
|
||
* Handles key events.
|
||
*/
|
||
- void handleKeyEvent(int eventType, int modifierFlags, String chars,
|
||
+ void handleKeyEvent(int eventType, int modifierFlags, String chars, String charsIgnoringModifiers,
|
||
short keyCode, boolean needsKeyTyped, boolean needsKeyReleased) {
|
||
boolean isFlagsChangedEvent =
|
||
isNpapiCallback ? (eventType == CocoaConstants.NPCocoaEventFlagsChanged) :
|
||
@@ -154,7 +154,10 @@
|
||
testChar = chars.charAt(0);
|
||
}
|
||
|
||
- int[] in = new int[] {testChar, isDeadChar ? 1 : 0, modifierFlags, keyCode};
|
||
+ char testCharIgnoringModifiers = charsIgnoringModifiers != null && charsIgnoringModifiers.length() > 0 ?
|
||
+ charsIgnoringModifiers.charAt(0) : KeyEvent.CHAR_UNDEFINED;
|
||
+
|
||
+ int[] in = new int[] {testCharIgnoringModifiers, isDeadChar ? 1 : 0, modifierFlags, keyCode};
|
||
int[] out = new int[3]; // [jkeyCode, jkeyLocation, deadChar]
|
||
|
||
postsTyped = NSEvent.nsToJavaKeyInfo(in, out);
|
||
--- ./jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -227,7 +227,7 @@
|
||
}
|
||
|
||
private void deliverKeyEvent(NSEvent event) {
|
||
- responder.handleKeyEvent(event.getType(), event.getModifierFlags(),
|
||
+ responder.handleKeyEvent(event.getType(), event.getModifierFlags(), event.getCharacters(),
|
||
event.getCharactersIgnoringModifiers(), event.getKeyCode(), true, false);
|
||
}
|
||
|
||
--- ./jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -118,6 +118,7 @@
|
||
static final int NONACTIVATING = 1 << 24;
|
||
static final int IS_DIALOG = 1 << 25;
|
||
static final int IS_MODAL = 1 << 26;
|
||
+ static final int IS_POPUP = 1 << 27;
|
||
|
||
static final int _STYLE_PROP_BITMASK = DECORATED | TEXTURED | UNIFIED | UTILITY | HUD | SHEET | CLOSEABLE | MINIMIZABLE | RESIZABLE;
|
||
|
||
@@ -308,6 +309,7 @@
|
||
styleBits = SET(styleBits, TEXTURED, false);
|
||
// Popups in applets don't activate applet's process
|
||
styleBits = SET(styleBits, NONACTIVATING, true);
|
||
+ styleBits = SET(styleBits, IS_POPUP, true);
|
||
}
|
||
|
||
if (Window.Type.UTILITY.equals(target.getType())) {
|
||
--- ./jdk/src/macosx/classes/sun/lwawt/macosx/event/NSEvent.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/macosx/classes/sun/lwawt/macosx/event/NSEvent.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -48,12 +48,14 @@
|
||
|
||
// Key event information
|
||
private short keyCode;
|
||
+ private String characters;
|
||
private String charactersIgnoringModifiers;
|
||
|
||
- public NSEvent(int type, int modifierFlags, short keyCode, String charactersIgnoringModifiers) {
|
||
+ public NSEvent(int type, int modifierFlags, short keyCode, String characters, String charactersIgnoringModifiers) {
|
||
this.type = type;
|
||
this.modifierFlags = modifierFlags;
|
||
this.keyCode = keyCode;
|
||
+ this.characters = characters;
|
||
this.charactersIgnoringModifiers = charactersIgnoringModifiers;
|
||
}
|
||
|
||
@@ -120,12 +122,16 @@
|
||
return charactersIgnoringModifiers;
|
||
}
|
||
|
||
+ public String getCharacters() {
|
||
+ return characters;
|
||
+ }
|
||
+
|
||
@Override
|
||
public String toString() {
|
||
return "NSEvent[" + getType() + " ," + getModifierFlags() + " ,"
|
||
+ getClickCount() + " ," + getButtonNumber() + " ," + getX() + " ,"
|
||
+ getY() + " ," + getAbsX() + " ," + getAbsY()+ " ," + getKeyCode() + " ,"
|
||
- + getCharactersIgnoringModifiers() + "]";
|
||
+ + getCharacters() + " ," + getCharactersIgnoringModifiers() + "]";
|
||
}
|
||
|
||
/*
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/src/macosx/classes/sun/nio/ch/SctpChannelImpl.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,150 @@
|
||
+/*
|
||
+ * Copyright (c) 2009, 2014, 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.nio.ch;
|
||
+
|
||
+import java.net.SocketAddress;
|
||
+import java.net.InetAddress;
|
||
+import java.io.IOException;
|
||
+import java.util.Set;
|
||
+import java.nio.ByteBuffer;
|
||
+import java.nio.channels.spi.SelectorProvider;
|
||
+import com.sun.nio.sctp.Association;
|
||
+import com.sun.nio.sctp.MessageInfo;
|
||
+import com.sun.nio.sctp.NotificationHandler;
|
||
+import com.sun.nio.sctp.SctpChannel;
|
||
+import com.sun.nio.sctp.SctpSocketOption;
|
||
+
|
||
+/**
|
||
+ * Unimplemented.
|
||
+ */
|
||
+public class SctpChannelImpl extends SctpChannel
|
||
+{
|
||
+ private static final String message = "SCTP not supported on this platform";
|
||
+
|
||
+ public SctpChannelImpl(SelectorProvider provider) {
|
||
+ super(provider);
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public Association association() {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public SctpChannel bind(SocketAddress local)
|
||
+ throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public SctpChannel bindAddress(InetAddress address)
|
||
+ throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public SctpChannel unbindAddress(InetAddress address)
|
||
+ throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public boolean connect(SocketAddress remote) throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public boolean connect(SocketAddress remote, int maxOutStreams,
|
||
+ int maxInStreams) throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public boolean isConnectionPending() {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public boolean finishConnect() throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public Set<SocketAddress> getAllLocalAddresses()
|
||
+ throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public Set<SocketAddress> getRemoteAddresses()
|
||
+ throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public SctpChannel shutdown() throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public <T> T getOption(SctpSocketOption<T> name)
|
||
+ throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public <T> SctpChannel setOption(SctpSocketOption<T> name, T value)
|
||
+ throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public Set<SctpSocketOption<?>> supportedOptions() {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public <T> MessageInfo receive(ByteBuffer dst, T attachment,
|
||
+ NotificationHandler<T> handler) throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public int send(ByteBuffer src, MessageInfo messageInfo)
|
||
+ throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ protected void implConfigureBlocking(boolean block) throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void implCloseSelectableChannel() throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/src/macosx/classes/sun/nio/ch/SctpMultiChannelImpl.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,137 @@
|
||
+/*
|
||
+ * Copyright (c) 2009, 2014, 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.nio.ch;
|
||
+
|
||
+import java.net.SocketAddress;
|
||
+import java.net.InetAddress;
|
||
+import java.io.IOException;
|
||
+import java.util.Set;
|
||
+import java.nio.ByteBuffer;
|
||
+import java.nio.channels.spi.SelectorProvider;
|
||
+import com.sun.nio.sctp.Association;
|
||
+import com.sun.nio.sctp.SctpChannel;
|
||
+import com.sun.nio.sctp.MessageInfo;
|
||
+import com.sun.nio.sctp.NotificationHandler;
|
||
+import com.sun.nio.sctp.SctpMultiChannel;
|
||
+import com.sun.nio.sctp.SctpSocketOption;
|
||
+
|
||
+/**
|
||
+ * Unimplemented.
|
||
+ */
|
||
+public class SctpMultiChannelImpl extends SctpMultiChannel
|
||
+{
|
||
+ private static final String message = "SCTP not supported on this platform";
|
||
+
|
||
+ public SctpMultiChannelImpl(SelectorProvider provider) {
|
||
+ super(provider);
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public Set<Association> associations() {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public SctpMultiChannel bind(SocketAddress local,
|
||
+ int backlog) throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public SctpMultiChannel bindAddress(InetAddress address)
|
||
+ throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public SctpMultiChannel unbindAddress(InetAddress address)
|
||
+ throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public Set<SocketAddress> getAllLocalAddresses()
|
||
+ throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public Set<SocketAddress> getRemoteAddresses
|
||
+ (Association association) throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public SctpMultiChannel shutdown(Association association)
|
||
+ throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public <T> T getOption(SctpSocketOption<T> name,
|
||
+ Association association) throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public <T> SctpMultiChannel setOption(SctpSocketOption<T> name,
|
||
+ T value, Association association) throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public Set<SctpSocketOption<?>> supportedOptions() {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public <T> MessageInfo receive(ByteBuffer buffer, T attachment,
|
||
+ NotificationHandler<T> handler) throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public int send(ByteBuffer buffer, MessageInfo messageInfo)
|
||
+ throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public SctpChannel branch(Association association)
|
||
+ throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ protected void implConfigureBlocking(boolean block) throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void implCloseSelectableChannel() throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/src/macosx/classes/sun/nio/ch/SctpServerChannelImpl.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,102 @@
|
||
+/*
|
||
+ * Copyright (c) 2009, 2014, 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.nio.ch;
|
||
+
|
||
+import java.net.SocketAddress;
|
||
+import java.net.InetAddress;
|
||
+import java.io.IOException;
|
||
+import java.util.Set;
|
||
+import java.nio.channels.spi.SelectorProvider;
|
||
+import com.sun.nio.sctp.SctpChannel;
|
||
+import com.sun.nio.sctp.SctpServerChannel;
|
||
+import com.sun.nio.sctp.SctpSocketOption;
|
||
+
|
||
+/**
|
||
+ * Unimplemented.
|
||
+ */
|
||
+public class SctpServerChannelImpl extends SctpServerChannel
|
||
+{
|
||
+ private static final String message = "SCTP not supported on this platform";
|
||
+
|
||
+ public SctpServerChannelImpl(SelectorProvider provider) {
|
||
+ super(provider);
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public SctpChannel accept() throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public SctpServerChannel bind(SocketAddress local,
|
||
+ int backlog) throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public SctpServerChannel bindAddress(InetAddress address)
|
||
+ throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public SctpServerChannel unbindAddress(InetAddress address)
|
||
+ throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public Set<SocketAddress> getAllLocalAddresses()
|
||
+ throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public <T> T getOption(SctpSocketOption<T> name) throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public <T> SctpServerChannel setOption(SctpSocketOption<T> name,
|
||
+ T value) throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public Set<SctpSocketOption<?>> supportedOptions() {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ protected void implConfigureBlocking(boolean block) throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void implCloseSelectableChannel() throws IOException {
|
||
+ throw new UnsupportedOperationException(message);
|
||
+ }
|
||
+}
|
||
--- ./jdk/src/macosx/native/sun/awt/AWTView.m Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/macosx/native/sun/awt/AWTView.m Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -421,17 +421,20 @@
|
||
JNIEnv *env = [ThreadUtilities getJNIEnv];
|
||
|
||
jstring characters = NULL;
|
||
+ jstring charactersIgnoringModifiers = NULL;
|
||
if ([event type] != NSFlagsChanged) {
|
||
characters = JNFNSToJavaString(env, [event characters]);
|
||
+ charactersIgnoringModifiers = JNFNSToJavaString(env, [event charactersIgnoringModifiers]);
|
||
}
|
||
|
||
static JNF_CLASS_CACHE(jc_NSEvent, "sun/lwawt/macosx/event/NSEvent");
|
||
- static JNF_CTOR_CACHE(jctor_NSEvent, jc_NSEvent, "(IISLjava/lang/String;)V");
|
||
+ static JNF_CTOR_CACHE(jctor_NSEvent, jc_NSEvent, "(IISLjava/lang/String;Ljava/lang/String;)V");
|
||
jobject jevent = JNFNewObject(env, jctor_NSEvent,
|
||
[event type],
|
||
[event modifierFlags],
|
||
[event keyCode],
|
||
- characters);
|
||
+ characters,
|
||
+ charactersIgnoringModifiers);
|
||
|
||
static JNF_CLASS_CACHE(jc_PlatformView, "sun/lwawt/macosx/CPlatformView");
|
||
static JNF_MEMBER_CACHE(jm_deliverKeyEvent, jc_PlatformView,
|
||
--- ./jdk/src/macosx/native/sun/awt/AWTWindow.m Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/macosx/native/sun/awt/AWTWindow.m Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -307,6 +307,10 @@
|
||
[self adjustGrowBoxWindow];
|
||
} else growBoxWindow = nil;
|
||
|
||
+ if (IS(self.styleBits, IS_POPUP)) {
|
||
+ [self.nsWindow setCollectionBehavior:(1 << 8) /*NSWindowCollectionBehaviorFullScreenAuxiliary*/];
|
||
+ }
|
||
+
|
||
return self;
|
||
}
|
||
|
||
@@ -316,7 +320,8 @@
|
||
|
||
// return id for the topmost window under mouse
|
||
+ (NSInteger) getTopmostWindowUnderMouseID {
|
||
-
|
||
+ NSInteger result = -1;
|
||
+
|
||
NSRect screenRect = [[NSScreen mainScreen] frame];
|
||
NSPoint nsMouseLocation = [NSEvent mouseLocation];
|
||
CGPoint cgMouseLocation = CGPointMake(nsMouseLocation.x, screenRect.size.height - nsMouseLocation.y);
|
||
@@ -330,11 +335,13 @@
|
||
CGRect rect;
|
||
CGRectMakeWithDictionaryRepresentation((CFDictionaryRef)[window objectForKey:(id)kCGWindowBounds], &rect);
|
||
if (CGRectContainsPoint(rect, cgMouseLocation)) {
|
||
- return [[window objectForKey:(id)kCGWindowNumber] integerValue];
|
||
+ result = [[window objectForKey:(id)kCGWindowNumber] integerValue];
|
||
+ break;
|
||
}
|
||
}
|
||
}
|
||
- return -1;
|
||
+ [windows release];
|
||
+ return result;
|
||
}
|
||
|
||
// checks that this window is under the mouse cursor and this point is not overlapped by other windows
|
||
--- ./jdk/src/macosx/native/sun/awt/JavaComponentAccessibility.m Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/macosx/native/sun/awt/JavaComponentAccessibility.m Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -256,11 +256,15 @@
|
||
jsize count = [ignoredKeys count];
|
||
|
||
JNIEnv *env = [ThreadUtilities getJNIEnv];
|
||
- jclass clazz = (*env)->FindClass(env, "java/lang/String");
|
||
- result = (*env)->NewObjectArray(env, count, clazz, NULL); // AWT_THREADING Safe (known object)
|
||
- (*env)->DeleteLocalRef(env, clazz);
|
||
|
||
- NSUInteger i;
|
||
+ static JNF_CLASS_CACHE(jc_String, "java/lang/String");
|
||
+ result = JNFNewObjectArray(env, &jc_String, count);
|
||
+ if (!result) {
|
||
+ NSLog(@"In %s, can't create Java array of String objects", __FUNCTION__);
|
||
+ return;
|
||
+ }
|
||
+
|
||
+ NSInteger i;
|
||
for (i = 0; i < count; i++) {
|
||
jstring jString = JNFNSToJavaString(env, [ignoredKeys objectAtIndex:i]);
|
||
(*env)->SetObjectArrayElement(env, result, i, jString);
|
||
@@ -295,7 +299,7 @@
|
||
jsize arrayLen = (*env)->GetArrayLength(env, jchildrenAndRoles);
|
||
NSMutableArray *children = [NSMutableArray arrayWithCapacity:arrayLen/2]; //childrenAndRoles array contains two elements (child, role) for each child
|
||
|
||
- NSUInteger i;
|
||
+ NSInteger i;
|
||
NSUInteger childIndex = (whichChildren >= 0) ? whichChildren : 0; // if we're getting one particular child, make sure to set its index correctly
|
||
for(i = 0; i < arrayLen; i+=2)
|
||
{
|
||
@@ -391,8 +395,13 @@
|
||
// Get all the other accessibility attributes states we need in one swell foop.
|
||
// javaRole isn't pulled in because we need protected access to AccessibleRole.key
|
||
jbooleanArray attributeStates = JNFCallStaticObjectMethod(env, jm_getInitialAttributeStates, fAccessible, fComponent); // AWT_THREADING Safe (AWTRunLoop)
|
||
- if (attributeStates == NULL) return NULL;
|
||
+ if (attributeStates == NULL) return nil;
|
||
jboolean *attributeStatesArray = (*env)->GetBooleanArrayElements(env, attributeStates, 0);
|
||
+ if (attributeStatesArray == NULL) {
|
||
+ // Note: Java will not be on the stack here so a java exception can't happen and no need to call ExceptionCheck.
|
||
+ NSLog(@"%s failed calling GetBooleanArrayElements", __FUNCTION__);
|
||
+ return nil;
|
||
+ }
|
||
|
||
// if there's a component, it can be enabled and it has a size/position
|
||
if (attributeStatesArray[0]) {
|
||
@@ -1113,7 +1122,9 @@
|
||
JNIEnv *env = [ThreadUtilities getJNIEnv];
|
||
id value = nil;
|
||
|
||
+ NSWindow* hostWindow = [[self->fView window] retain];
|
||
jobject focused = JNFCallStaticObjectMethod(env, jm_getFocusOwner, fComponent); // AWT_THREADING Safe (AWTRunLoop)
|
||
+ [hostWindow release];
|
||
if (focused != NULL) {
|
||
if (JNFIsInstanceOf(env, focused, &sjc_Accessible)) {
|
||
value = [JavaComponentAccessibility createWithAccessible:focused withEnv:env withView:fView];
|
||
@@ -1220,7 +1231,7 @@
|
||
// Go through the tabs and find selAccessible
|
||
_numTabs = [tabs count];
|
||
JavaComponentAccessibility *aTab;
|
||
- NSUInteger i;
|
||
+ NSInteger i;
|
||
for (i = 0; i < _numTabs; i++) {
|
||
aTab = (JavaComponentAccessibility *)[tabs objectAtIndex:i];
|
||
if ([aTab isAccessibleWithEnv:env forAccessible:selAccessible]) {
|
||
@@ -1247,7 +1258,7 @@
|
||
|
||
NSString *tabJavaRole = JNFJavaToNSString(env, JNFGetObjectField(env, jtabJavaRole, sjf_key));
|
||
|
||
- NSUInteger i;
|
||
+ NSInteger i;
|
||
NSUInteger tabIndex = (whichTabs >= 0) ? whichTabs : 0; // if we're getting one particular child, make sure to set its index correctly
|
||
for(i = 0; i < arrayLen; i+=2) {
|
||
jobject jtab = (*env)->GetObjectArrayElement(env, jtabsAndRoles, i);
|
||
--- ./jdk/src/macosx/native/sun/awt/JavaTextAccessibility.m Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/macosx/native/sun/awt/JavaTextAccessibility.m Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -40,6 +40,11 @@
|
||
*/
|
||
NSValue *javaIntArrayToNSRangeValue(JNIEnv* env, jintArray array) {
|
||
jint *values = (*env)->GetIntArrayElements(env, array, 0);
|
||
+ if (values == NULL) {
|
||
+ // Note: Java will not be on the stack here so a java exception can't happen and no need to call ExceptionCheck.
|
||
+ NSLog(@"%s failed calling GetIntArrayElements", __FUNCTION__);
|
||
+ return nil;
|
||
+ };
|
||
NSValue *value = [NSValue valueWithRange:NSMakeRange(values[0], values[1] - values[0])];
|
||
(*env)->ReleaseIntArrayElements(env, array, values, 0);
|
||
return value;
|
||
@@ -285,6 +290,11 @@
|
||
|
||
// We cheat because we know that the array is 4 elements long (x, y, width, height)
|
||
jdouble *values = (*env)->GetDoubleArrayElements(env, axBounds, 0);
|
||
+ if (values == NULL) {
|
||
+ // Note: Java will not be on the stack here so a java exception can't happen and no need to call ExceptionCheck.
|
||
+ NSLog(@"%s failed calling GetDoubleArrayElements", __FUNCTION__);
|
||
+ return nil;
|
||
+ };
|
||
NSRect bounds;
|
||
bounds.origin.x = values[0];
|
||
bounds.origin.y = [[[[self view] window] screen] frame].size.height - values[1] - values[3]; //values[1] is y-coord from top-left of screen. Flip. Account for the height (values[3]) when flipping
|
||
--- ./jdk/src/share/classes/com/sun/crypto/provider/OAEPParameters.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/com/sun/crypto/provider/OAEPParameters.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -106,20 +106,6 @@
|
||
}
|
||
}
|
||
|
||
- private static String convertToStandardName(String internalName) {
|
||
- if (internalName.equals("SHA")) {
|
||
- return "SHA-1";
|
||
- } else if (internalName.equals("SHA256")) {
|
||
- return "SHA-256";
|
||
- } else if (internalName.equals("SHA384")) {
|
||
- return "SHA-384";
|
||
- } else if (internalName.equals("SHA512")) {
|
||
- return "SHA-512";
|
||
- } else {
|
||
- return internalName;
|
||
- }
|
||
- }
|
||
-
|
||
protected void engineInit(byte[] encoded)
|
||
throws IOException {
|
||
DerInputStream der = new DerInputStream(encoded);
|
||
@@ -131,7 +117,7 @@
|
||
DerValue data = datum[i];
|
||
if (data.isContextSpecific((byte) 0x00)) {
|
||
// hash algid
|
||
- mdName = convertToStandardName(AlgorithmId.parse
|
||
+ mdName = AlgorithmId.getStandardDigestName(AlgorithmId.parse
|
||
(data.data.getDerValue()).getName());
|
||
} else if (data.isContextSpecific((byte) 0x01)) {
|
||
// mgf algid
|
||
@@ -141,7 +127,8 @@
|
||
}
|
||
AlgorithmId params = AlgorithmId.parse(
|
||
new DerValue(val.getEncodedParams()));
|
||
- String mgfDigestName = convertToStandardName(params.getName());
|
||
+ String mgfDigestName = AlgorithmId.getStandardDigestName(
|
||
+ params.getName());
|
||
if (mgfDigestName.equals("SHA-1")) {
|
||
mgfSpec = MGF1ParameterSpec.SHA1;
|
||
} else if (mgfDigestName.equals("SHA-256")) {
|
||
--- ./jdk/src/share/classes/com/sun/imageio/plugins/png/PNGMetadata.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/com/sun/imageio/plugins/png/PNGMetadata.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1256,8 +1256,11 @@
|
||
if (name.equals("IHDR")) {
|
||
IHDR_width = getIntAttribute(node, "width");
|
||
IHDR_height = getIntAttribute(node, "height");
|
||
- IHDR_bitDepth = getEnumeratedAttribute(node, "bitDepth",
|
||
- IHDR_bitDepths);
|
||
+ IHDR_bitDepth =
|
||
+ Integer.valueOf(IHDR_bitDepths[
|
||
+ getEnumeratedAttribute(node,
|
||
+ "bitDepth",
|
||
+ IHDR_bitDepths)]);
|
||
IHDR_colorType = getEnumeratedAttribute(node, "colorType",
|
||
IHDR_colorTypeNames);
|
||
IHDR_compressionMethod =
|
||
--- ./jdk/src/share/classes/com/sun/java/swing/SwingUtilities3.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/com/sun/java/swing/SwingUtilities3.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -27,6 +27,8 @@
|
||
|
||
import sun.awt.EventQueueDelegate;
|
||
import sun.awt.AppContext;
|
||
+import sun.awt.SunToolkit;
|
||
+
|
||
import java.util.Collections;
|
||
import java.util.Map;
|
||
import java.util.WeakHashMap;
|
||
@@ -117,8 +119,8 @@
|
||
public static RepaintManager getDelegateRepaintManager(Component
|
||
component) {
|
||
RepaintManager delegate = null;
|
||
- if (Boolean.TRUE == AppContext.getAppContext().get(
|
||
- DELEGATE_REPAINT_MANAGER_KEY)) {
|
||
+ if (Boolean.TRUE == SunToolkit.targetToAppContext(component)
|
||
+ .get(DELEGATE_REPAINT_MANAGER_KEY)) {
|
||
while (delegate == null && component != null) {
|
||
while (component != null
|
||
&& ! (component instanceof JComponent)) {
|
||
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/AnimationController.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/AnimationController.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2006, 2014, 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
|
||
@@ -130,11 +130,14 @@
|
||
//one second seems plausible value
|
||
duration = 1000;
|
||
} else {
|
||
- duration = XPStyle.getXP().getThemeTransitionDuration(
|
||
- c, part,
|
||
- normalizeState(oldState),
|
||
- normalizeState(newState),
|
||
- Prop.TRANSITIONDURATIONS);
|
||
+ XPStyle xp = XPStyle.getXP();
|
||
+ duration = (xp != null)
|
||
+ ? xp.getThemeTransitionDuration(
|
||
+ c, part,
|
||
+ normalizeState(oldState),
|
||
+ normalizeState(newState),
|
||
+ Prop.TRANSITIONDURATIONS)
|
||
+ : 1000;
|
||
}
|
||
controller.startAnimation(c, part, oldState, newState, duration);
|
||
}
|
||
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsComboBoxUI.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsComboBoxUI.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -37,6 +37,7 @@
|
||
import static com.sun.java.swing.plaf.windows.TMSchema.Part;
|
||
import static com.sun.java.swing.plaf.windows.TMSchema.State;
|
||
import static com.sun.java.swing.plaf.windows.XPStyle.Skin;
|
||
+
|
||
import sun.swing.DefaultLookup;
|
||
import sun.swing.StringUIClientPropertyKey;
|
||
|
||
@@ -231,6 +232,9 @@
|
||
|
||
private void paintXPComboBoxBackground(Graphics g, JComponent c) {
|
||
XPStyle xp = XPStyle.getXP();
|
||
+ if (xp == null) {
|
||
+ return;
|
||
+ }
|
||
State state = getXPComboBoxState(c);
|
||
Skin skin = null;
|
||
if (! comboBox.isEditable()
|
||
@@ -400,17 +404,18 @@
|
||
* @return a button which represents the popup control
|
||
*/
|
||
protected JButton createArrowButton() {
|
||
- if (XPStyle.getXP() != null) {
|
||
- return new XPComboBoxButton();
|
||
+ XPStyle xp = XPStyle.getXP();
|
||
+ if (xp != null) {
|
||
+ return new XPComboBoxButton(xp);
|
||
} else {
|
||
return super.createArrowButton();
|
||
}
|
||
}
|
||
|
||
private class XPComboBoxButton extends XPStyle.GlyphButton {
|
||
- public XPComboBoxButton() {
|
||
+ public XPComboBoxButton(XPStyle xp) {
|
||
super(null,
|
||
- (! XPStyle.getXP().isSkinDefined(comboBox, Part.CP_DROPDOWNBUTTONRIGHT))
|
||
+ (! xp.isSkinDefined(comboBox, Part.CP_DROPDOWNBUTTONRIGHT))
|
||
? Part.CP_DROPDOWNBUTTON
|
||
: (comboBox.getComponentOrientation() == ComponentOrientation.RIGHT_TO_LEFT)
|
||
? Part.CP_DROPDOWNBUTTONLEFT
|
||
@@ -423,10 +428,11 @@
|
||
protected State getState() {
|
||
State rv;
|
||
rv = super.getState();
|
||
+ XPStyle xp = XPStyle.getXP();
|
||
if (rv != State.DISABLED
|
||
&& comboBox != null && ! comboBox.isEditable()
|
||
- && XPStyle.getXP().isSkinDefined(comboBox,
|
||
- Part.CP_DROPDOWNBUTTONRIGHT)) {
|
||
+ && xp != null && xp.isSkinDefined(comboBox,
|
||
+ Part.CP_DROPDOWNBUTTONRIGHT)) {
|
||
/*
|
||
* for non editable ComboBoxes Vista seems to have the
|
||
* same glyph for all non DISABLED states
|
||
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1067,16 +1067,9 @@
|
||
|
||
directories.clear();
|
||
|
||
- File[] baseFolders;
|
||
- if (useShellFolder) {
|
||
- baseFolders = AccessController.doPrivileged(new PrivilegedAction<File[]>() {
|
||
- public File[] run() {
|
||
- return (File[]) ShellFolder.get("fileChooserComboBoxFolders");
|
||
- }
|
||
- });
|
||
- } else {
|
||
- baseFolders = fsv.getRoots();
|
||
- }
|
||
+ File[] baseFolders = (useShellFolder)
|
||
+ ? (File[]) ShellFolder.get("fileChooserComboBoxFolders")
|
||
+ : fsv.getRoots();
|
||
directories.addAll(Arrays.asList(baseFolders));
|
||
|
||
// Get the canonical (full) path. This has the side
|
||
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsGraphicsUtils.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsGraphicsUtils.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2000, 2014, 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
|
||
@@ -125,6 +125,9 @@
|
||
static void paintXPText(AbstractButton b, Part part, State state,
|
||
Graphics g, int x, int y, String text, int mnemIndex) {
|
||
XPStyle xp = XPStyle.getXP();
|
||
+ if (xp == null) {
|
||
+ return;
|
||
+ }
|
||
Color textColor = b.getForeground();
|
||
|
||
if (textColor instanceof UIResource) {
|
||
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsIconFactory.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsIconFactory.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1998, 2014, 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
|
||
@@ -613,8 +613,8 @@
|
||
|
||
private static class MenuArrowIcon implements Icon, UIResource, Serializable {
|
||
public void paintIcon(Component c, Graphics g, int x, int y) {
|
||
- if (WindowsMenuItemUI.isVistaPainting()) {
|
||
- XPStyle xp = XPStyle.getXP();
|
||
+ XPStyle xp = XPStyle.getXP();
|
||
+ if (WindowsMenuItemUI.isVistaPainting(xp)) {
|
||
State state = State.NORMAL;
|
||
if (c instanceof JMenuItem) {
|
||
state = ((JMenuItem) c).getModel().isEnabled()
|
||
@@ -647,16 +647,18 @@
|
||
}
|
||
}
|
||
public int getIconWidth() {
|
||
- if (WindowsMenuItemUI.isVistaPainting()) {
|
||
- Skin skin = XPStyle.getXP().getSkin(null, Part.MP_POPUPSUBMENU);
|
||
+ XPStyle xp = XPStyle.getXP();
|
||
+ if (WindowsMenuItemUI.isVistaPainting(xp)) {
|
||
+ Skin skin = xp.getSkin(null, Part.MP_POPUPSUBMENU);
|
||
return skin.getWidth();
|
||
} else {
|
||
return 4;
|
||
}
|
||
}
|
||
public int getIconHeight() {
|
||
- if (WindowsMenuItemUI.isVistaPainting()) {
|
||
- Skin skin = XPStyle.getXP().getSkin(null, Part.MP_POPUPSUBMENU);
|
||
+ XPStyle xp = XPStyle.getXP();
|
||
+ if (WindowsMenuItemUI.isVistaPainting(xp)) {
|
||
+ Skin skin = xp.getSkin(null, Part.MP_POPUPSUBMENU);
|
||
return skin.getHeight();
|
||
} else {
|
||
return 8;
|
||
@@ -682,7 +684,8 @@
|
||
}
|
||
|
||
static int getIconWidth() {
|
||
- return XPStyle.getXP().getSkin(null, Part.MP_POPUPCHECK).getWidth()
|
||
+ XPStyle xp = XPStyle.getXP();
|
||
+ return ((xp != null) ? xp.getSkin(null, Part.MP_POPUPCHECK).getWidth() : 16)
|
||
+ 2 * OFFSET;
|
||
}
|
||
|
||
@@ -745,12 +748,17 @@
|
||
Icon icon = getIcon();
|
||
int height = 0;
|
||
if (icon != null) {
|
||
- height = icon.getIconHeight() + 2 * OFFSET;
|
||
+ height = icon.getIconHeight();
|
||
} else {
|
||
- Skin skin =
|
||
- XPStyle.getXP().getSkin(null, Part.MP_POPUPCHECK);
|
||
- height = skin.getHeight() + 2 * OFFSET;
|
||
+ XPStyle xp = XPStyle.getXP();
|
||
+ if (xp != null) {
|
||
+ Skin skin = xp.getSkin(null, Part.MP_POPUPCHECK);
|
||
+ height = skin.getHeight();
|
||
+ } else {
|
||
+ height = 16;
|
||
+ }
|
||
}
|
||
+ height += 2 * OFFSET;
|
||
return height;
|
||
}
|
||
|
||
@@ -798,14 +806,16 @@
|
||
? State.BULLETDISABLED
|
||
: State.CHECKMARKDISABLED;
|
||
}
|
||
- Skin skin;
|
||
XPStyle xp = XPStyle.getXP();
|
||
- skin = xp.getSkin(c, backgroundPart);
|
||
- skin.paintSkin(g, x, y,
|
||
- getIconWidth(), getIconHeight(), backgroundState);
|
||
- if (icon == null) {
|
||
- skin = xp.getSkin(c, part);
|
||
- skin.paintSkin(g, x + OFFSET, y + OFFSET, state);
|
||
+ if (xp != null) {
|
||
+ Skin skin;
|
||
+ skin = xp.getSkin(c, backgroundPart);
|
||
+ skin.paintSkin(g, x, y,
|
||
+ getIconWidth(), getIconHeight(), backgroundState);
|
||
+ if (icon == null) {
|
||
+ skin = xp.getSkin(c, part);
|
||
+ skin.paintSkin(g, x + OFFSET, y + OFFSET, state);
|
||
+ }
|
||
}
|
||
}
|
||
}
|
||
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsInternalFrameTitlePane.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsInternalFrameTitlePane.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2001, 2014, 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
|
||
@@ -85,14 +85,15 @@
|
||
}
|
||
} else {
|
||
buttonWidth += 2;
|
||
- selectedTitleGradientColor =
|
||
- UIManager.getColor("InternalFrame.activeTitleGradient");
|
||
- notSelectedTitleGradientColor =
|
||
- UIManager.getColor("InternalFrame.inactiveTitleGradient");
|
||
Color activeBorderColor =
|
||
UIManager.getColor("InternalFrame.activeBorderColor");
|
||
setBorder(BorderFactory.createLineBorder(activeBorderColor, 1));
|
||
}
|
||
+ // JDK-8039383: initialize these colors because getXP() may return null when theme is changed
|
||
+ selectedTitleGradientColor =
|
||
+ UIManager.getColor("InternalFrame.activeTitleGradient");
|
||
+ notSelectedTitleGradientColor =
|
||
+ UIManager.getColor("InternalFrame.inactiveTitleGradient");
|
||
}
|
||
|
||
protected void uninstallListeners() {
|
||
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -2400,8 +2400,9 @@
|
||
}
|
||
|
||
public Object getXPValue(UIDefaults table) {
|
||
- Border xpBorder = XPStyle.getXP().getBorder(null, (Part)xpValue);
|
||
- if (extraMargin != null) {
|
||
+ XPStyle xp = XPStyle.getXP();
|
||
+ Border xpBorder = xp != null ? xp.getBorder(null, (Part)xpValue) : null;
|
||
+ if (xpBorder != null && extraMargin != null) {
|
||
return new BorderUIResource.
|
||
CompoundBorderUIResource(xpBorder, extraMargin);
|
||
} else {
|
||
@@ -2417,7 +2418,8 @@
|
||
|
||
public Object getXPValue(UIDefaults table) {
|
||
XPColorValueKey key = (XPColorValueKey)xpValue;
|
||
- return XPStyle.getXP().getColor(key.skin, key.prop, null);
|
||
+ XPStyle xp = XPStyle.getXP();
|
||
+ return xp != null ? xp.getColor(key.skin, key.prop, null) : null;
|
||
}
|
||
|
||
private static class XPColorValueKey {
|
||
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsMenuBarUI.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsMenuBarUI.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -155,8 +155,8 @@
|
||
|
||
@Override
|
||
public void paint(Graphics g, JComponent c) {
|
||
- if (WindowsMenuItemUI.isVistaPainting()) {
|
||
- XPStyle xp = XPStyle.getXP();
|
||
+ XPStyle xp = XPStyle.getXP();
|
||
+ if (WindowsMenuItemUI.isVistaPainting(xp)) {
|
||
Skin skin;
|
||
skin = xp.getSkin(c, Part.MP_BARBACKGROUND);
|
||
int width = c.getWidth();
|
||
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsMenuItemUI.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsMenuItemUI.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -108,8 +108,9 @@
|
||
|
||
static void paintBackground(WindowsMenuItemUIAccessor menuItemUI,
|
||
Graphics g, JMenuItem menuItem, Color bgColor) {
|
||
- assert isVistaPainting();
|
||
- if (isVistaPainting()) {
|
||
+ XPStyle xp = XPStyle.getXP();
|
||
+ assert isVistaPainting(xp);
|
||
+ if (isVistaPainting(xp)) {
|
||
int menuWidth = menuItem.getWidth();
|
||
int menuHeight = menuItem.getHeight();
|
||
if (menuItem.isOpaque()) {
|
||
@@ -118,7 +119,6 @@
|
||
g.fillRect(0,0, menuWidth, menuHeight);
|
||
g.setColor(oldColor);
|
||
}
|
||
- XPStyle xp = XPStyle.getXP();
|
||
Part part = menuItemUI.getPart(menuItem);
|
||
Skin skin = xp.getSkin(menuItem, part);
|
||
skin.paintSkin(g, 0 , 0,
|
||
@@ -170,8 +170,11 @@
|
||
* is it possible that in some theme some Vista parts are not defined while
|
||
* others are?
|
||
*/
|
||
- static boolean isVistaPainting() {
|
||
- XPStyle xp = XPStyle.getXP();
|
||
+ static boolean isVistaPainting(final XPStyle xp) {
|
||
return xp != null && xp.isSkinDefined(null, Part.MP_POPUPITEM);
|
||
}
|
||
+
|
||
+ static boolean isVistaPainting() {
|
||
+ return isVistaPainting(XPStyle.getXP());
|
||
+ }
|
||
}
|
||
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsPopupMenuSeparatorUI.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsPopupMenuSeparatorUI.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2004, 2014, 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
|
||
@@ -50,7 +50,8 @@
|
||
|
||
public void paint(Graphics g, JComponent c) {
|
||
Dimension s = c.getSize();
|
||
- if (WindowsMenuItemUI.isVistaPainting()) {
|
||
+ XPStyle xp = XPStyle.getXP();
|
||
+ if (WindowsMenuItemUI.isVistaPainting(xp)) {
|
||
int x = 1;
|
||
Component parent = c.getParent();
|
||
if (parent instanceof JComponent) {
|
||
@@ -67,7 +68,7 @@
|
||
x += WindowsPopupMenuUI.getGutterWidth();
|
||
}
|
||
}
|
||
- Skin skin = XPStyle.getXP().getSkin(c, Part.MP_POPUPSEPARATOR);
|
||
+ Skin skin = xp.getSkin(c, Part.MP_POPUPSEPARATOR);
|
||
int skinHeight = skin.getHeight();
|
||
int y = (s.height - skinHeight) / 2;
|
||
skin.paintSkin(g, x, y, s.width - x - 1, skinHeight, State.NORMAL);
|
||
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsPopupMenuUI.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsPopupMenuUI.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -194,8 +194,8 @@
|
||
|
||
@Override
|
||
public void paint(Graphics g, JComponent c) {
|
||
- if (WindowsMenuItemUI.isVistaPainting()) {
|
||
- XPStyle xp = XPStyle.getXP();
|
||
+ XPStyle xp = XPStyle.getXP();
|
||
+ if (WindowsMenuItemUI.isVistaPainting(xp)) {
|
||
Skin skin = xp.getSkin(c, Part.MP_POPUPBACKGROUND);
|
||
skin.paintSkin(g, 0, 0, c.getWidth(),c.getHeight(), State.NORMAL);
|
||
int textOffset = getTextOffset(c);
|
||
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsProgressBarUI.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsProgressBarUI.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -317,8 +317,9 @@
|
||
private Rectangle getFullChunkBounds(Rectangle box) {
|
||
boolean vertical = (progressBar.getOrientation() == JProgressBar.VERTICAL);
|
||
XPStyle xp = XPStyle.getXP();
|
||
- int gap = xp.getInt(progressBar, Part.PP_PROGRESS, null,
|
||
- Prop.PROGRESSSPACESIZE, 0);
|
||
+ int gap = (xp != null) ? xp.getInt(progressBar, Part.PP_PROGRESS,
|
||
+ null, Prop.PROGRESSSPACESIZE, 0)
|
||
+ : 0;
|
||
|
||
if (!vertical) {
|
||
int chunksize = box.width+gap;
|
||
@@ -333,6 +334,9 @@
|
||
boolean vertical,
|
||
int bgwidth, int bgheight) {
|
||
XPStyle xp = XPStyle.getXP();
|
||
+ if (xp == null) {
|
||
+ return;
|
||
+ }
|
||
|
||
// create a new graphics to keep drawing surface state
|
||
Graphics2D gfx = (Graphics2D)g.create();
|
||
@@ -391,6 +395,9 @@
|
||
private void paintXPBackground(Graphics g, boolean vertical,
|
||
int barRectWidth, int barRectHeight) {
|
||
XPStyle xp = XPStyle.getXP();
|
||
+ if (xp == null) {
|
||
+ return;
|
||
+ }
|
||
Part part = vertical ? Part.PP_BARVERT : Part.PP_BAR;
|
||
Skin skin = xp.getSkin(progressBar, part);
|
||
|
||
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsSliderUI.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsSliderUI.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -215,7 +215,6 @@
|
||
}
|
||
|
||
private Part getXPThumbPart() {
|
||
- XPStyle xp = XPStyle.getXP();
|
||
Part part;
|
||
boolean vertical = (slider.getOrientation() == JSlider.VERTICAL);
|
||
boolean leftToRight = slider.getComponentOrientation().isLeftToRight();
|
||
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsSpinnerUI.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsSpinnerUI.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -63,6 +63,9 @@
|
||
|
||
private void paintXPBackground(Graphics g, JComponent c) {
|
||
XPStyle xp = XPStyle.getXP();
|
||
+ if (xp == null) {
|
||
+ return;
|
||
+ }
|
||
Skin skin = xp.getSkin(c, Part.EP_EDIT);
|
||
State state = getXPState(c);
|
||
skin.paintSkin(g, 0, 0, c.getWidth(), c.getHeight(), state);
|
||
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsTableHeaderUI.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsTableHeaderUI.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -90,9 +90,10 @@
|
||
this.column = column;
|
||
this.hasRollover = (column == getRolloverColumn());
|
||
if (skin == null) {
|
||
- skin = XPStyle.getXP().getSkin(header, Part.HP_HEADERITEM);
|
||
+ XPStyle xp = XPStyle.getXP();
|
||
+ skin = (xp != null) ? xp.getSkin(header, Part.HP_HEADERITEM) : null;
|
||
}
|
||
- Insets margins = skin.getContentMargin();
|
||
+ Insets margins = (skin != null) ? skin.getContentMargin() : null;
|
||
Border border = null;
|
||
int contentTop = 0;
|
||
int contentLeft = 0;
|
||
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/XPStyle.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/XPStyle.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2002, 2014, 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
|
||
@@ -115,7 +115,7 @@
|
||
}
|
||
}
|
||
}
|
||
- return xp;
|
||
+ return ThemeReader.isXPStyleEnabled() ? xp : null;
|
||
}
|
||
|
||
static boolean isVista() {
|
||
@@ -180,9 +180,10 @@
|
||
* should probably be cached there instead of here.
|
||
*/
|
||
Dimension getDimension(Component c, Part part, State state, Prop prop) {
|
||
- return ThemeReader.getPosition(part.getControlName(c), part.getValue(),
|
||
- State.getValue(part, state),
|
||
- prop.getValue());
|
||
+ Dimension d = ThemeReader.getPosition(part.getControlName(c), part.getValue(),
|
||
+ State.getValue(part, state),
|
||
+ prop.getValue());
|
||
+ return (d != null) ? d : new Dimension();
|
||
}
|
||
|
||
/** Get a named <code>Point</code> (e.g. a location or an offset) value
|
||
@@ -199,11 +200,7 @@
|
||
Dimension d = ThemeReader.getPosition(part.getControlName(c), part.getValue(),
|
||
State.getValue(part, state),
|
||
prop.getValue());
|
||
- if (d != null) {
|
||
- return new Point(d.width, d.height);
|
||
- } else {
|
||
- return null;
|
||
- }
|
||
+ return (d != null) ? new Point(d.width, d.height) : new Point();
|
||
}
|
||
|
||
/** Get a named <code>Insets</code> value from the current style
|
||
@@ -217,9 +214,10 @@
|
||
* The return value is already cached in those places.
|
||
*/
|
||
Insets getMargin(Component c, Part part, State state, Prop prop) {
|
||
- return ThemeReader.getThemeMargins(part.getControlName(c), part.getValue(),
|
||
- State.getValue(part, state),
|
||
- prop.getValue());
|
||
+ Insets insets = ThemeReader.getThemeMargins(part.getControlName(c), part.getValue(),
|
||
+ State.getValue(part, state),
|
||
+ prop.getValue());
|
||
+ return (insets != null) ? insets : new Insets(0, 0, 0, 0);
|
||
}
|
||
|
||
|
||
@@ -505,16 +503,17 @@
|
||
int boundingWidth = 100;
|
||
int boundingHeight = 100;
|
||
|
||
- return ThemeReader.getThemeBackgroundContentMargins(
|
||
+ Insets insets = ThemeReader.getThemeBackgroundContentMargins(
|
||
part.getControlName(null), part.getValue(),
|
||
0, boundingWidth, boundingHeight);
|
||
+ return (insets != null) ? insets : new Insets(0, 0, 0, 0);
|
||
}
|
||
|
||
private int getWidth(State state) {
|
||
if (size == null) {
|
||
size = getPartSize(part, state);
|
||
}
|
||
- return size.width;
|
||
+ return (size != null) ? size.width : 0;
|
||
}
|
||
|
||
int getWidth() {
|
||
@@ -525,7 +524,7 @@
|
||
if (size == null) {
|
||
size = getPartSize(part, state);
|
||
}
|
||
- return size.height;
|
||
+ return (size != null) ? size.height : 0;
|
||
}
|
||
|
||
int getHeight() {
|
||
@@ -582,6 +581,9 @@
|
||
* @param state which state to paint
|
||
*/
|
||
void paintSkin(Graphics g, int dx, int dy, int dw, int dh, State state) {
|
||
+ if (XPStyle.getXP() == null) {
|
||
+ return;
|
||
+ }
|
||
if (ThemeReader.isGetThemeTransitionDurationDefined()
|
||
&& component instanceof JComponent
|
||
&& SwingUtilities.getAncestorOfClass(CellRendererPane.class,
|
||
@@ -607,6 +609,9 @@
|
||
* @param state which state to paint
|
||
*/
|
||
void paintSkinRaw(Graphics g, int dx, int dy, int dw, int dh, State state) {
|
||
+ if (XPStyle.getXP() == null) {
|
||
+ return;
|
||
+ }
|
||
skinPainter.paint(null, g, dx, dy, dw, dh, this, state);
|
||
}
|
||
|
||
@@ -625,6 +630,9 @@
|
||
*/
|
||
void paintSkin(Graphics g, int dx, int dy, int dw, int dh, State state,
|
||
boolean borderFill) {
|
||
+ if (XPStyle.getXP() == null) {
|
||
+ return;
|
||
+ }
|
||
if(borderFill && "borderfill".equals(getTypeEnumName(component, part,
|
||
state, Prop.BGTYPE))) {
|
||
return;
|
||
@@ -679,7 +687,7 @@
|
||
|
||
public GlyphButton(Component parent, Part part) {
|
||
XPStyle xp = getXP();
|
||
- skin = xp.getSkin(parent, part);
|
||
+ skin = xp != null ? xp.getSkin(parent, part) : null;
|
||
setBorder(null);
|
||
setContentAreaFilled(false);
|
||
setMinimumSize(new Dimension(5, 5));
|
||
@@ -704,13 +712,16 @@
|
||
}
|
||
|
||
public void paintComponent(Graphics g) {
|
||
+ if (XPStyle.getXP() == null || skin == null) {
|
||
+ return;
|
||
+ }
|
||
Dimension d = getSize();
|
||
skin.paintSkin(g, 0, 0, d.width, d.height, getState());
|
||
}
|
||
|
||
public void setPart(Component parent, Part part) {
|
||
XPStyle xp = getXP();
|
||
- skin = xp.getSkin(parent, part);
|
||
+ skin = xp != null ? xp.getSkin(parent, part) : null;
|
||
revalidate();
|
||
repaint();
|
||
}
|
||
--- ./jdk/src/share/classes/com/sun/jndi/ldap/BerDecoder.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/com/sun/jndi/ldap/BerDecoder.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -95,6 +95,9 @@
|
||
for( int i = 0; i < lengthbyte; i++) {
|
||
retval = (retval << 8) + (buf[offset++] & 0xff);
|
||
}
|
||
+ if (retval < 0) {
|
||
+ throw new DecodeException("Invalid length bytes");
|
||
+ }
|
||
return retval;
|
||
} else {
|
||
return lengthbyte;
|
||
--- ./jdk/src/share/classes/com/sun/jndi/ldap/Connection.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/com/sun/jndi/ldap/Connection.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1999, 2014, 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
|
||
@@ -464,10 +464,10 @@
|
||
// will be woken up before readTimeout only if reply is
|
||
// available
|
||
ldr.wait(readTimeout);
|
||
- waited = true;
|
||
} else {
|
||
ldr.wait(15 * 1000); // 15 second timeout
|
||
}
|
||
+ waited = true;
|
||
} else {
|
||
break;
|
||
}
|
||
@@ -479,7 +479,7 @@
|
||
}
|
||
|
||
if ((rber == null) && waited) {
|
||
- removeRequest(ldr);
|
||
+ abandonRequest(ldr, null);
|
||
throw new NamingException("LDAP response read timed out, timeout used:"
|
||
+ readTimeout + "ms." );
|
||
|
||
--- ./jdk/src/share/classes/java/awt/Component.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/java/awt/Component.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -3394,7 +3394,7 @@
|
||
(width > 0) && (height > 0)) {
|
||
PaintEvent e = new PaintEvent(this, PaintEvent.UPDATE,
|
||
new Rectangle(x, y, width, height));
|
||
- Toolkit.getEventQueue().postEvent(e);
|
||
+ SunToolkit.postEvent(SunToolkit.targetToAppContext(this), e);
|
||
}
|
||
}
|
||
}
|
||
--- ./jdk/src/share/classes/java/awt/EventQueue.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/java/awt/EventQueue.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -209,6 +209,11 @@
|
||
{
|
||
EventQueue.invokeAndWait(source, r);
|
||
}
|
||
+
|
||
+ @Override
|
||
+ public long getMostRecentEventTime(EventQueue eventQueue) {
|
||
+ return eventQueue.getMostRecentEventTimeImpl();
|
||
+ }
|
||
});
|
||
}
|
||
|
||
--- ./jdk/src/share/classes/java/awt/event/InputMethodEvent.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/java/awt/event/InputMethodEvent.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -25,6 +25,10 @@
|
||
|
||
package java.awt.event;
|
||
|
||
+import sun.awt.AWTAccessor;
|
||
+import sun.awt.AppContext;
|
||
+import sun.awt.SunToolkit;
|
||
+
|
||
import java.awt.AWTEvent;
|
||
import java.awt.Component;
|
||
import java.awt.EventQueue;
|
||
@@ -217,8 +221,10 @@
|
||
public InputMethodEvent(Component source, int id,
|
||
AttributedCharacterIterator text, int committedCharacterCount,
|
||
TextHitInfo caret, TextHitInfo visiblePosition) {
|
||
- this(source, id, EventQueue.getMostRecentEventTime(), text,
|
||
- committedCharacterCount, caret, visiblePosition);
|
||
+ this(source, id,
|
||
+ getMostRecentEventTimeForSource(source),
|
||
+ text, committedCharacterCount,
|
||
+ caret, visiblePosition);
|
||
}
|
||
|
||
/**
|
||
@@ -258,8 +264,9 @@
|
||
*/
|
||
public InputMethodEvent(Component source, int id, TextHitInfo caret,
|
||
TextHitInfo visiblePosition) {
|
||
- this(source, id, EventQueue.getMostRecentEventTime(), null,
|
||
- 0, caret, visiblePosition);
|
||
+ this(source, id,
|
||
+ getMostRecentEventTimeForSource(source),
|
||
+ null, 0, caret, visiblePosition);
|
||
}
|
||
|
||
/**
|
||
@@ -410,7 +417,26 @@
|
||
private void readObject(ObjectInputStream s) throws ClassNotFoundException, IOException {
|
||
s.defaultReadObject();
|
||
if (when == 0) {
|
||
+ // Can't use getMostRecentEventTimeForSource because source is always null during deserialization
|
||
when = EventQueue.getMostRecentEventTime();
|
||
}
|
||
}
|
||
+
|
||
+ /**
|
||
+ * Get the most recent event time in the {@code EventQueue} which the {@code source}
|
||
+ * belongs to.
|
||
+ *
|
||
+ * @param source the source of the event
|
||
+ * @exception IllegalArgumentException if source is null.
|
||
+ * @return most recent event time in the {@code EventQueue}
|
||
+ */
|
||
+ private static long getMostRecentEventTimeForSource(Object source) {
|
||
+ if (source == null) {
|
||
+ // throw the IllegalArgumentException to conform to EventObject spec
|
||
+ throw new IllegalArgumentException("null source");
|
||
+ }
|
||
+ AppContext appContext = SunToolkit.targetToAppContext(source);
|
||
+ EventQueue eventQueue = SunToolkit.getSystemEventQueueImplPP(appContext);
|
||
+ return AWTAccessor.getEventQueueAccessor().getMostRecentEventTime(eventQueue);
|
||
+ }
|
||
}
|
||
--- ./jdk/src/share/classes/java/awt/event/MouseEvent.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/java/awt/event/MouseEvent.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1996, 2008, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1996, 2014, 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
|
||
@@ -758,7 +758,6 @@
|
||
|
||
if (getModifiersEx() != 0) { //There is at least one more button in a pressed state.
|
||
if (id == MouseEvent.MOUSE_RELEASED || id == MouseEvent.MOUSE_CLICKED){
|
||
- System.out.println("MEvent. CASE!");
|
||
shouldExcludeButtonFromExtModifiers = true;
|
||
}
|
||
}
|
||
--- ./jdk/src/share/classes/java/beans/IndexedPropertyDescriptor.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/java/beans/IndexedPropertyDescriptor.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1996, 2014, 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
|
||
@@ -41,8 +41,8 @@
|
||
public class IndexedPropertyDescriptor extends PropertyDescriptor {
|
||
|
||
private Reference<Class> indexedPropertyTypeRef;
|
||
- private Reference<Method> indexedReadMethodRef;
|
||
- private Reference<Method> indexedWriteMethodRef;
|
||
+ private final MethodRef indexedReadMethodRef = new MethodRef();
|
||
+ private final MethodRef indexedWriteMethodRef = new MethodRef();
|
||
|
||
private String indexedReadMethodName;
|
||
private String indexedWriteMethodName;
|
||
@@ -173,11 +173,11 @@
|
||
* May return null if the property isn't indexed or is write-only.
|
||
*/
|
||
public synchronized Method getIndexedReadMethod() {
|
||
- Method indexedReadMethod = getIndexedReadMethod0();
|
||
+ Method indexedReadMethod = this.indexedReadMethodRef.get();
|
||
if (indexedReadMethod == null) {
|
||
Class cls = getClass0();
|
||
if (cls == null ||
|
||
- (indexedReadMethodName == null && indexedReadMethodRef == null)) {
|
||
+ (indexedReadMethodName == null && !this.indexedReadMethodRef.isSet())) {
|
||
// the Indexed readMethod was explicitly set to null.
|
||
return null;
|
||
}
|
||
@@ -213,20 +213,19 @@
|
||
|
||
// the indexed property type is set by the reader.
|
||
setIndexedPropertyType(findIndexedPropertyType(readMethod,
|
||
- getIndexedWriteMethod0()));
|
||
+ this.indexedWriteMethodRef.get()));
|
||
setIndexedReadMethod0(readMethod);
|
||
}
|
||
|
||
private void setIndexedReadMethod0(Method readMethod) {
|
||
+ this.indexedReadMethodRef.set(readMethod);
|
||
if (readMethod == null) {
|
||
indexedReadMethodName = null;
|
||
- indexedReadMethodRef = null;
|
||
return;
|
||
}
|
||
setClass0(readMethod.getDeclaringClass());
|
||
|
||
indexedReadMethodName = readMethod.getName();
|
||
- this.indexedReadMethodRef = getSoftReference(readMethod);
|
||
setTransient(readMethod.getAnnotation(Transient.class));
|
||
}
|
||
|
||
@@ -239,11 +238,11 @@
|
||
* May return null if the property isn't indexed or is read-only.
|
||
*/
|
||
public synchronized Method getIndexedWriteMethod() {
|
||
- Method indexedWriteMethod = getIndexedWriteMethod0();
|
||
+ Method indexedWriteMethod = this.indexedWriteMethodRef.get();
|
||
if (indexedWriteMethod == null) {
|
||
Class cls = getClass0();
|
||
if (cls == null ||
|
||
- (indexedWriteMethodName == null && indexedWriteMethodRef == null)) {
|
||
+ (indexedWriteMethodName == null && !this.indexedWriteMethodRef.isSet())) {
|
||
// the Indexed writeMethod was explicitly set to null.
|
||
return null;
|
||
}
|
||
@@ -297,15 +296,14 @@
|
||
}
|
||
|
||
private void setIndexedWriteMethod0(Method writeMethod) {
|
||
+ this.indexedWriteMethodRef.set(writeMethod);
|
||
if (writeMethod == null) {
|
||
indexedWriteMethodName = null;
|
||
- indexedWriteMethodRef = null;
|
||
return;
|
||
}
|
||
setClass0(writeMethod.getDeclaringClass());
|
||
|
||
indexedWriteMethodName = writeMethod.getName();
|
||
- this.indexedWriteMethodRef = getSoftReference(writeMethod);
|
||
setTransient(writeMethod.getAnnotation(Transient.class));
|
||
}
|
||
|
||
@@ -345,18 +343,6 @@
|
||
: null;
|
||
}
|
||
|
||
- private Method getIndexedReadMethod0() {
|
||
- return (this.indexedReadMethodRef != null)
|
||
- ? this.indexedReadMethodRef.get()
|
||
- : null;
|
||
- }
|
||
-
|
||
- private Method getIndexedWriteMethod0() {
|
||
- return (this.indexedWriteMethodRef != null)
|
||
- ? this.indexedWriteMethodRef.get()
|
||
- : null;
|
||
- }
|
||
-
|
||
private Class findIndexedPropertyType(Method indexedReadMethod,
|
||
Method indexedWriteMethod)
|
||
throws IntrospectionException {
|
||
@@ -488,8 +474,8 @@
|
||
*/
|
||
IndexedPropertyDescriptor(IndexedPropertyDescriptor old) {
|
||
super(old);
|
||
- indexedReadMethodRef = old.indexedReadMethodRef;
|
||
- indexedWriteMethodRef = old.indexedWriteMethodRef;
|
||
+ this.indexedReadMethodRef.set(old.indexedReadMethodRef.get());
|
||
+ this.indexedWriteMethodRef.set(old.indexedWriteMethodRef.get());
|
||
indexedPropertyTypeRef = old.indexedPropertyTypeRef;
|
||
indexedWriteMethodName = old.indexedWriteMethodName;
|
||
indexedReadMethodName = old.indexedReadMethodName;
|
||
@@ -498,7 +484,7 @@
|
||
void updateGenericsFor(Class<?> type) {
|
||
super.updateGenericsFor(type);
|
||
try {
|
||
- setIndexedPropertyType(findIndexedPropertyType(getIndexedReadMethod0(), getIndexedWriteMethod0()));
|
||
+ setIndexedPropertyType(findIndexedPropertyType(this.indexedReadMethodRef.get(), this.indexedWriteMethodRef.get()));
|
||
}
|
||
catch (IntrospectionException exception) {
|
||
setIndexedPropertyType(null);
|
||
@@ -528,7 +514,7 @@
|
||
void appendTo(StringBuilder sb) {
|
||
super.appendTo(sb);
|
||
appendTo(sb, "indexedPropertyType", this.indexedPropertyTypeRef);
|
||
- appendTo(sb, "indexedReadMethod", this.indexedReadMethodRef);
|
||
- appendTo(sb, "indexedWriteMethod", this.indexedWriteMethodRef);
|
||
+ appendTo(sb, "indexedReadMethod", this.indexedReadMethodRef.get());
|
||
+ appendTo(sb, "indexedWriteMethod", this.indexedWriteMethodRef.get());
|
||
}
|
||
}
|
||
--- ./jdk/src/share/classes/java/beans/MethodDescriptor.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/java/beans/MethodDescriptor.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1996, 2014, 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
|
||
@@ -38,7 +38,7 @@
|
||
|
||
public class MethodDescriptor extends FeatureDescriptor {
|
||
|
||
- private Reference<Method> methodRef;
|
||
+ private final MethodRef methodRef = new MethodRef();
|
||
|
||
private String[] paramNames;
|
||
|
||
@@ -79,7 +79,7 @@
|
||
* @return The low-level description of the method
|
||
*/
|
||
public synchronized Method getMethod() {
|
||
- Method method = getMethod0();
|
||
+ Method method = this.methodRef.get();
|
||
if (method == null) {
|
||
Class cls = getClass0();
|
||
String name = getName();
|
||
@@ -112,13 +112,7 @@
|
||
setClass0(method.getDeclaringClass());
|
||
}
|
||
setParams(getParameterTypes(getClass0(), method));
|
||
- this.methodRef = getSoftReference(method);
|
||
- }
|
||
-
|
||
- private Method getMethod0() {
|
||
- return (this.methodRef != null)
|
||
- ? this.methodRef.get()
|
||
- : null;
|
||
+ this.methodRef.set(method);
|
||
}
|
||
|
||
private synchronized void setParams(Class[] param) {
|
||
@@ -173,12 +167,10 @@
|
||
*/
|
||
|
||
MethodDescriptor(MethodDescriptor x, MethodDescriptor y) {
|
||
- super(x,y);
|
||
+ super(x, y);
|
||
|
||
- methodRef = x.methodRef;
|
||
- if (y.methodRef != null) {
|
||
- methodRef = y.methodRef;
|
||
- }
|
||
+ Method method = y.methodRef.get();
|
||
+ this.methodRef.set(null != method ? method : x.methodRef.get());
|
||
params = x.params;
|
||
if (y.params != null) {
|
||
params = y.params;
|
||
@@ -201,7 +193,7 @@
|
||
MethodDescriptor(MethodDescriptor old) {
|
||
super(old);
|
||
|
||
- methodRef = old.methodRef;
|
||
+ this.methodRef.set(old.getMethod());
|
||
params = old.params;
|
||
paramNames = old.paramNames;
|
||
|
||
@@ -215,7 +207,7 @@
|
||
}
|
||
|
||
void appendTo(StringBuilder sb) {
|
||
- appendTo(sb, "method", this.methodRef);
|
||
+ appendTo(sb, "method", this.methodRef.get());
|
||
if (this.parameterDescriptors != null) {
|
||
sb.append("; parameterDescriptors={");
|
||
for (ParameterDescriptor pd : this.parameterDescriptors) {
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/src/share/classes/java/beans/MethodRef.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,87 @@
|
||
+/*
|
||
+ * Copyright (c) 2013, 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 java.beans;
|
||
+
|
||
+import java.lang.ref.SoftReference;
|
||
+import java.lang.ref.WeakReference;
|
||
+import java.lang.reflect.Method;
|
||
+
|
||
+import static sun.reflect.misc.ReflectUtil.isPackageAccessible;
|
||
+
|
||
+final class MethodRef {
|
||
+ private String signature;
|
||
+ private SoftReference<Method> methodRef;
|
||
+ private WeakReference<Class<?>> typeRef;
|
||
+
|
||
+ void set(Method method) {
|
||
+ if (method == null) {
|
||
+ this.signature = null;
|
||
+ this.methodRef = null;
|
||
+ this.typeRef = null;
|
||
+ }
|
||
+ else {
|
||
+ this.signature = method.toGenericString();
|
||
+ this.methodRef = new SoftReference<>(method);
|
||
+ this.typeRef = new WeakReference<Class<?>>(method.getDeclaringClass());
|
||
+ }
|
||
+ }
|
||
+
|
||
+ boolean isSet() {
|
||
+ return this.methodRef != null;
|
||
+ }
|
||
+
|
||
+ Method get() {
|
||
+ if (this.methodRef == null) {
|
||
+ return null;
|
||
+ }
|
||
+ Method method = this.methodRef.get();
|
||
+ if (method == null) {
|
||
+ method = find(this.typeRef.get(), this.signature);
|
||
+ if (method == null) {
|
||
+ this.signature = null;
|
||
+ this.methodRef = null;
|
||
+ this.typeRef = null;
|
||
+ }
|
||
+ else {
|
||
+ this.methodRef = new SoftReference<>(method);
|
||
+ }
|
||
+ }
|
||
+ return isPackageAccessible(method.getDeclaringClass()) ? method : null;
|
||
+ }
|
||
+
|
||
+ private static Method find(Class<?> type, String signature) {
|
||
+ if (type != null) {
|
||
+ for (Method method : type.getMethods()) {
|
||
+ if (type.equals(method.getDeclaringClass())) {
|
||
+ if (method.toGenericString().equals(signature)) {
|
||
+ return method;
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+ return null;
|
||
+ }
|
||
+}
|
||
--- ./jdk/src/share/classes/java/beans/PropertyDescriptor.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/java/beans/PropertyDescriptor.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1996, 2014, 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
|
||
@@ -36,8 +36,8 @@
|
||
public class PropertyDescriptor extends FeatureDescriptor {
|
||
|
||
private Reference<Class> propertyTypeRef;
|
||
- private Reference<Method> readMethodRef;
|
||
- private Reference<Method> writeMethodRef;
|
||
+ private final MethodRef readMethodRef = new MethodRef();
|
||
+ private final MethodRef writeMethodRef = new MethodRef();
|
||
private Reference<Class> propertyEditorClassRef;
|
||
|
||
private boolean bound;
|
||
@@ -68,8 +68,8 @@
|
||
public PropertyDescriptor(String propertyName, Class<?> beanClass)
|
||
throws IntrospectionException {
|
||
this(propertyName, beanClass,
|
||
- Introspector.IS_PREFIX + NameGenerator.capitalize(propertyName),
|
||
- Introspector.SET_PREFIX + NameGenerator.capitalize(propertyName));
|
||
+ Introspector.IS_PREFIX + NameGenerator.capitalize(propertyName),
|
||
+ Introspector.SET_PREFIX + NameGenerator.capitalize(propertyName));
|
||
}
|
||
|
||
/**
|
||
@@ -203,10 +203,10 @@
|
||
* May return null if the property can't be read.
|
||
*/
|
||
public synchronized Method getReadMethod() {
|
||
- Method readMethod = getReadMethod0();
|
||
+ Method readMethod = this.readMethodRef.get();
|
||
if (readMethod == null) {
|
||
Class cls = getClass0();
|
||
- if (cls == null || (readMethodName == null && readMethodRef == null)) {
|
||
+ if (cls == null || (readMethodName == null && !this.readMethodRef.isSet())) {
|
||
// The read method was explicitly set to null.
|
||
return null;
|
||
}
|
||
@@ -246,17 +246,16 @@
|
||
*/
|
||
public synchronized void setReadMethod(Method readMethod)
|
||
throws IntrospectionException {
|
||
+ this.readMethodRef.set(readMethod);
|
||
if (readMethod == null) {
|
||
readMethodName = null;
|
||
- readMethodRef = null;
|
||
return;
|
||
}
|
||
// The property type is determined by the read method.
|
||
- setPropertyType(findPropertyType(readMethod, getWriteMethod0()));
|
||
+ setPropertyType(findPropertyType(readMethod, this.writeMethodRef.get()));
|
||
setClass0(readMethod.getDeclaringClass());
|
||
|
||
readMethodName = readMethod.getName();
|
||
- this.readMethodRef = getSoftReference(readMethod);
|
||
setTransient(readMethod.getAnnotation(Transient.class));
|
||
}
|
||
|
||
@@ -267,10 +266,10 @@
|
||
* May return null if the property can't be written.
|
||
*/
|
||
public synchronized Method getWriteMethod() {
|
||
- Method writeMethod = getWriteMethod0();
|
||
+ Method writeMethod = this.writeMethodRef.get();
|
||
if (writeMethod == null) {
|
||
Class cls = getClass0();
|
||
- if (cls == null || (writeMethodName == null && writeMethodRef == null)) {
|
||
+ if (cls == null || (writeMethodName == null && !this.writeMethodRef.isSet())) {
|
||
// The write method was explicitly set to null.
|
||
return null;
|
||
}
|
||
@@ -316,9 +315,9 @@
|
||
*/
|
||
public synchronized void setWriteMethod(Method writeMethod)
|
||
throws IntrospectionException {
|
||
+ this.writeMethodRef.set(writeMethod);
|
||
if (writeMethod == null) {
|
||
writeMethodName = null;
|
||
- writeMethodRef = null;
|
||
return;
|
||
}
|
||
// Set the property type - which validates the method
|
||
@@ -326,22 +325,9 @@
|
||
setClass0(writeMethod.getDeclaringClass());
|
||
|
||
writeMethodName = writeMethod.getName();
|
||
- this.writeMethodRef = getSoftReference(writeMethod);
|
||
setTransient(writeMethod.getAnnotation(Transient.class));
|
||
}
|
||
|
||
- private Method getReadMethod0() {
|
||
- return (this.readMethodRef != null)
|
||
- ? this.readMethodRef.get()
|
||
- : null;
|
||
- }
|
||
-
|
||
- private Method getWriteMethod0() {
|
||
- return (this.writeMethodRef != null)
|
||
- ? this.writeMethodRef.get()
|
||
- : null;
|
||
- }
|
||
-
|
||
/**
|
||
* Overridden to ensure that a super class doesn't take precedent
|
||
*/
|
||
@@ -618,8 +604,8 @@
|
||
PropertyDescriptor(PropertyDescriptor old) {
|
||
super(old);
|
||
propertyTypeRef = old.propertyTypeRef;
|
||
- readMethodRef = old.readMethodRef;
|
||
- writeMethodRef = old.writeMethodRef;
|
||
+ this.readMethodRef.set(old.readMethodRef.get());
|
||
+ this.writeMethodRef.set(old.writeMethodRef.get());
|
||
propertyEditorClassRef = old.propertyEditorClassRef;
|
||
|
||
writeMethodName = old.writeMethodName;
|
||
@@ -633,7 +619,7 @@
|
||
void updateGenericsFor(Class<?> type) {
|
||
setClass0(type);
|
||
try {
|
||
- setPropertyType(findPropertyType(getReadMethod0(), getWriteMethod0()));
|
||
+ setPropertyType(findPropertyType(this.readMethodRef.get(), this.writeMethodRef.get()));
|
||
}
|
||
catch (IntrospectionException exception) {
|
||
setPropertyType(null);
|
||
@@ -724,8 +710,8 @@
|
||
appendTo(sb, "constrained", this.constrained);
|
||
appendTo(sb, "propertyEditorClass", this.propertyEditorClassRef);
|
||
appendTo(sb, "propertyType", this.propertyTypeRef);
|
||
- appendTo(sb, "readMethod", this.readMethodRef);
|
||
- appendTo(sb, "writeMethod", this.writeMethodRef);
|
||
+ appendTo(sb, "readMethod", this.readMethodRef.get());
|
||
+ appendTo(sb, "writeMethod", this.writeMethodRef.get());
|
||
}
|
||
|
||
private boolean isAssignable(Method m1, Method m2) {
|
||
--- ./jdk/src/share/classes/java/beans/XMLEncoder.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/java/beans/XMLEncoder.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -377,7 +377,7 @@
|
||
Object arg = args[i];
|
||
mark(arg, true);
|
||
}
|
||
- mark(stm.getTarget(), false);
|
||
+ mark(stm.getTarget(), stm instanceof Expression);
|
||
}
|
||
|
||
|
||
--- ./jdk/src/share/classes/java/io/ByteArrayOutputStream.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/java/io/ByteArrayOutputStream.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -94,6 +94,14 @@
|
||
}
|
||
|
||
/**
|
||
+ * The maximum size of array to allocate.
|
||
+ * Some VMs reserve some header words in an array.
|
||
+ * Attempts to allocate larger arrays may result in
|
||
+ * OutOfMemoryError: Requested array size exceeds VM limit
|
||
+ */
|
||
+ private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
|
||
+
|
||
+ /**
|
||
* Increases the capacity to ensure that it can hold at least the
|
||
* number of elements specified by the minimum capacity argument.
|
||
*
|
||
@@ -105,14 +113,19 @@
|
||
int newCapacity = oldCapacity << 1;
|
||
if (newCapacity - minCapacity < 0)
|
||
newCapacity = minCapacity;
|
||
- if (newCapacity < 0) {
|
||
- if (minCapacity < 0) // overflow
|
||
- throw new OutOfMemoryError();
|
||
- newCapacity = Integer.MAX_VALUE;
|
||
- }
|
||
+ if (newCapacity - MAX_ARRAY_SIZE > 0)
|
||
+ newCapacity = hugeCapacity(minCapacity);
|
||
buf = Arrays.copyOf(buf, newCapacity);
|
||
}
|
||
|
||
+ private static int hugeCapacity(int minCapacity) {
|
||
+ if (minCapacity < 0) // overflow
|
||
+ throw new OutOfMemoryError();
|
||
+ return (minCapacity > MAX_ARRAY_SIZE) ?
|
||
+ Integer.MAX_VALUE :
|
||
+ MAX_ARRAY_SIZE;
|
||
+ }
|
||
+
|
||
/**
|
||
* Writes the specified byte to this byte array output stream.
|
||
*
|
||
--- ./jdk/src/share/classes/java/io/File.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/java/io/File.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1891,7 +1891,7 @@
|
||
|
||
String name = prefix + Long.toString(n) + suffix;
|
||
File f = new File(dir, name);
|
||
- if (!name.equals(f.getName())) {
|
||
+ if (!name.equals(f.getName()) || f.isInvalid()) {
|
||
if (System.getSecurityManager() != null)
|
||
throw new IOException("Unable to create temporary file");
|
||
else
|
||
@@ -1981,19 +1981,26 @@
|
||
|
||
File tmpdir = (directory != null) ? directory
|
||
: TempDirectory.location();
|
||
+ SecurityManager sm = System.getSecurityManager();
|
||
File f;
|
||
- try {
|
||
- do {
|
||
- f = TempDirectory.generateFile(prefix, suffix, tmpdir);
|
||
- } while (f.exists());
|
||
- if (!f.createNewFile())
|
||
- throw new IOException("Unable to create temporary file");
|
||
- } catch (SecurityException se) {
|
||
- // don't reveal temporary directory location
|
||
- if (directory == null)
|
||
- throw new SecurityException("Unable to create temporary file");
|
||
- throw se;
|
||
- }
|
||
+ do {
|
||
+ f = TempDirectory.generateFile(prefix, suffix, tmpdir);
|
||
+
|
||
+ if (sm != null) {
|
||
+ try {
|
||
+ sm.checkWrite(f.getPath());
|
||
+ } catch (SecurityException se) {
|
||
+ // don't reveal temporary directory location
|
||
+ if (directory == null)
|
||
+ throw new SecurityException("Unable to create temporary file");
|
||
+ throw se;
|
||
+ }
|
||
+ }
|
||
+ } while ((fs.getBooleanAttributes(f) & FileSystem.BA_EXISTS) != 0);
|
||
+
|
||
+ if (!fs.createFileExclusively(f.getPath()))
|
||
+ throw new IOException("Unable to create temporary file");
|
||
+
|
||
return f;
|
||
}
|
||
|
||
--- ./jdk/src/share/classes/java/lang/ClassValue.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/java/lang/ClassValue.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -489,9 +489,18 @@
|
||
/** Remove an entry. */
|
||
synchronized
|
||
void removeEntry(ClassValue<?> classValue) {
|
||
- // make all cache elements for this guy go stale:
|
||
- if (remove(classValue.identity) != null) {
|
||
+ Entry<?> e = remove(classValue.identity);
|
||
+ if (e == null) {
|
||
+ // Uninitialized, and no pending calls to computeValue. No change.
|
||
+ } else if (e.isPromise()) {
|
||
+ // State is uninitialized, with a pending call to finishEntry.
|
||
+ // Since remove is a no-op in such a state, keep the promise
|
||
+ // by putting it back into the map.
|
||
+ put(classValue.identity, e);
|
||
+ } else {
|
||
+ // In an initialized state. Bump forward, and de-initialize.
|
||
classValue.bumpVersion();
|
||
+ // Make all cache elements for this guy go stale.
|
||
removeStaleEntries(classValue);
|
||
}
|
||
}
|
||
--- ./jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -62,6 +62,7 @@
|
||
//# Conditional mappings
|
||
//# ================================================================================
|
||
new Entry(0x03A3, new char[]{0x03C2}, new char[]{0x03A3}, null, FINAL_CASED), // # GREEK CAPITAL LETTER SIGMA
|
||
+ new Entry(0x0130, new char[]{0x0069, 0x0307}, new char[]{0x0130}, null, 0), // # LATIN CAPITAL LETTER I WITH DOT ABOVE
|
||
|
||
//# ================================================================================
|
||
//# Locale-sensitive mappings
|
||
@@ -77,8 +78,8 @@
|
||
|
||
//# ================================================================================
|
||
//# Turkish and Azeri
|
||
-// new Entry(0x0130, new char[]{0x0069}, new char[]{0x0130}, "tr", 0), // # LATIN CAPITAL LETTER I WITH DOT ABOVE
|
||
-// new Entry(0x0130, new char[]{0x0069}, new char[]{0x0130}, "az", 0), // # LATIN CAPITAL LETTER I WITH DOT ABOVE
|
||
+ new Entry(0x0130, new char[]{0x0069}, new char[]{0x0130}, "tr", 0), // # LATIN CAPITAL LETTER I WITH DOT ABOVE
|
||
+ new Entry(0x0130, new char[]{0x0069}, new char[]{0x0130}, "az", 0), // # LATIN CAPITAL LETTER I WITH DOT ABOVE
|
||
new Entry(0x0307, new char[]{}, new char[]{0x0307}, "tr", AFTER_I), // # COMBINING DOT ABOVE
|
||
new Entry(0x0307, new char[]{}, new char[]{0x0307}, "az", AFTER_I), // # COMBINING DOT ABOVE
|
||
new Entry(0x0049, new char[]{0x0131}, new char[]{0x0049}, "tr", NOT_BEFORE_DOT), // # LATIN CAPITAL LETTER I
|
||
@@ -148,21 +149,25 @@
|
||
|
||
private static char[] lookUpTable(String src, int index, Locale locale, boolean bLowerCasing) {
|
||
HashSet set = (HashSet)entryTable.get(new Integer(src.codePointAt(index)));
|
||
+ char[] ret = null;
|
||
|
||
if (set != null) {
|
||
Iterator iter = set.iterator();
|
||
String currentLang = locale.getLanguage();
|
||
while (iter.hasNext()) {
|
||
Entry entry = (Entry)iter.next();
|
||
- String conditionLang= entry.getLanguage();
|
||
+ String conditionLang = entry.getLanguage();
|
||
if (((conditionLang == null) || (conditionLang.equals(currentLang))) &&
|
||
isConditionMet(src, index, locale, entry.getCondition())) {
|
||
- return (bLowerCasing ? entry.getLowerCase() : entry.getUpperCase());
|
||
+ ret = bLowerCasing ? entry.getLowerCase() : entry.getUpperCase();
|
||
+ if (conditionLang != null) {
|
||
+ break;
|
||
+ }
|
||
}
|
||
}
|
||
}
|
||
|
||
- return null;
|
||
+ return ret;
|
||
}
|
||
|
||
private static boolean isConditionMet(String src, int index, Locale locale, int condition) {
|
||
--- ./jdk/src/share/classes/java/lang/String.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/java/lang/String.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -2459,7 +2459,9 @@
|
||
} else {
|
||
srcCount = 1;
|
||
}
|
||
- if (localeDependent || srcChar == '\u03A3') { // GREEK CAPITAL LETTER SIGMA
|
||
+ if (localeDependent ||
|
||
+ srcChar == '\u03A3' || // GREEK CAPITAL LETTER SIGMA
|
||
+ srcChar == '\u0130') { // LATIN CAPITAL LETTER I WITH DOT ABOVE
|
||
lowerChar = ConditionalSpecialCasing.toLowerCaseEx(this, i, locale);
|
||
} else {
|
||
lowerChar = Character.toLowerCase(srcChar);
|
||
--- ./jdk/src/share/classes/java/net/InetAddress.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/java/net/InetAddress.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1128,7 +1128,7 @@
|
||
// see if it is IPv4 address
|
||
addr = IPAddressUtil.textToNumericFormatV4(host);
|
||
if (addr == null) {
|
||
- // see if it is IPv6 address
|
||
+ // This is supposed to be an IPv6 literal
|
||
// Check if a numeric or string zone id is present
|
||
int pos;
|
||
if ((pos=host.indexOf ("%")) != -1) {
|
||
@@ -1137,7 +1137,9 @@
|
||
ifname = host.substring (pos+1);
|
||
}
|
||
}
|
||
- addr = IPAddressUtil.textToNumericFormatV6(host);
|
||
+ if ((addr = IPAddressUtil.textToNumericFormatV6(host)) == null && host.contains(":")) {
|
||
+ throw new UnknownHostException(host + ": invalid IPv6 address");
|
||
+ }
|
||
} else if (ipv6Expected) {
|
||
// Means an IPv4 litteral between brackets!
|
||
throw new UnknownHostException("["+host+"]");
|
||
@@ -1155,10 +1157,10 @@
|
||
}
|
||
return ret;
|
||
}
|
||
- } else if (ipv6Expected) {
|
||
- // We were expecting an IPv6 Litteral, but got something else
|
||
- throw new UnknownHostException("["+host+"]");
|
||
- }
|
||
+ } else if (ipv6Expected) {
|
||
+ // We were expecting an IPv6 Litteral, but got something else
|
||
+ throw new UnknownHostException("["+host+"]");
|
||
+ }
|
||
return getAllByName0(host, reqAddr, true);
|
||
}
|
||
|
||
--- ./jdk/src/share/classes/java/net/MulticastSocket.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/java/net/MulticastSocket.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1995, 2007, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1995, 2014, 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
|
||
@@ -565,7 +565,7 @@
|
||
public NetworkInterface getNetworkInterface() throws SocketException {
|
||
NetworkInterface ni
|
||
= (NetworkInterface)getImpl().getOption(SocketOptions.IP_MULTICAST_IF2);
|
||
- if (ni.getIndex() == 0) {
|
||
+ if ((ni.getIndex() == 0) || (ni.getIndex() == -1)) {
|
||
InetAddress[] addrs = new InetAddress[1];
|
||
addrs[0] = InetAddress.anyLocalAddress();
|
||
return new NetworkInterface(addrs[0].getHostName(), 0, addrs);
|
||
--- ./jdk/src/share/classes/java/util/CurrencyData.properties Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/java/util/CurrencyData.properties Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
#
|
||
-# Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved.
|
||
+# Copyright (c) 2000, 2014, 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
|
||
@@ -26,10 +26,9 @@
|
||
formatVersion=1
|
||
|
||
# Version of the currency code information in this class.
|
||
-# It is a serial number that accompanies with each amendment, such as
|
||
-# 'MAxxx.doc'
|
||
+# It is a serial number that accompanies with each amendment.
|
||
|
||
-dataVersion=151
|
||
+dataVersion=159
|
||
|
||
# List of all valid ISO 4217 currency codes.
|
||
# To ensure compatibility, do not remove codes.
|
||
@@ -49,11 +48,12 @@
|
||
NIO558-NLG528-NOK578-NPR524-NZD554-OMR512-PAB590-PEN604-PGK598-PHP608-\
|
||
PKR586-PLN985-PTE620-PYG600-QAR634-ROL946-RON946-RSD941-RUB643-RUR810-RWF646-SAR682-\
|
||
SBD090-SCR690-SDD736-SDG938-SEK752-SGD702-SHP654-SIT705-SKK703-SLL694-SOS706-\
|
||
- SRD968-SRG740-STD678-SVC222-SYP760-SZL748-THB764-TJS972-TMM795-TMT934-TND788-TOP776-\
|
||
+ SRD968-SRG740-SSP728-STD678-SVC222-SYP760-SZL748-THB764-TJS972-TMM795-TMT934-TND788-TOP776-\
|
||
TPE626-TRL792-TRY949-TTD780-TWD901-TZS834-UAH980-UGX800-USD840-USN997-USS998-\
|
||
UYU858-UZS860-VEB862-VEF937-VND704-VUV548-WST882-XAF950-XAG961-XAU959-XBA955-\
|
||
XBB956-XBC957-XBD958-XCD951-XDR960-XFO000-XFU000-XOF952-XPD964-XPF953-\
|
||
- XPT962-XSU994-XTS963-XUA965-XXX999-YER886-YUM891-ZAR710-ZMK894-ZWD716-ZWL932-ZWN942-ZWR935
|
||
+ XPT962-XSU994-XTS963-XUA965-XXX999-YER886-YUM891-ZAR710-ZMK894-ZMW967-ZWD716-ZWL932-\
|
||
+ ZWN942-ZWR935
|
||
|
||
|
||
# Mappings from ISO 3166 country codes to ISO 4217 currency codes.
|
||
@@ -71,7 +71,7 @@
|
||
#
|
||
# The table is based on the following web sites:
|
||
# http://www.din.de/gremien/nas/nabd/iso3166ma/codlstp1/db_en.html
|
||
-# http://www.bsi-global.com/iso4217currency
|
||
+# http://www.currency-iso.org/iso_index/iso_tables.htm
|
||
# http://www.cia.gov/cia/publications/factbook/indexgeo.html
|
||
|
||
# AFGHANISTAN
|
||
@@ -105,7 +105,7 @@
|
||
# AUSTRIA
|
||
AT=EUR
|
||
# AZERBAIJAN
|
||
-AZ=AZM;2005-12-31-20-00-00;AZN
|
||
+AZ=AZN
|
||
# BAHAMAS
|
||
BS=BSD
|
||
# BAHRAIN
|
||
@@ -320,7 +320,7 @@
|
||
# LAO PEOPLE'S DEMOCRATIC REPUBLIC
|
||
LA=LAK
|
||
# LATVIA
|
||
-LV=LVL
|
||
+LV=LVL;2013-12-31-22-00-00;EUR
|
||
# LEBANON
|
||
LB=LBP
|
||
# LESOTHO
|
||
@@ -332,7 +332,7 @@
|
||
# LIECHTENSTEIN
|
||
LI=CHF
|
||
# LITHUANIA
|
||
-LT=LTL
|
||
+LT=LTL;2014-12-31-22-00-00;EUR
|
||
# LUXEMBOURG
|
||
LU=EUR
|
||
# MACAU
|
||
@@ -378,7 +378,7 @@
|
||
# MOROCCO
|
||
MA=MAD
|
||
# MOZAMBIQUE
|
||
-MZ=MZM;2006-06-30-22-00-00;MZN
|
||
+MZ=MZN
|
||
# MYANMAR
|
||
MM=MMK
|
||
# NAMIBIA
|
||
@@ -440,7 +440,7 @@
|
||
# REUNION
|
||
RE=EUR
|
||
# ROMANIA
|
||
-RO=ROL;2005-06-30-21-00-00;RON
|
||
+RO=RON
|
||
# RUSSIAN FEDERATION
|
||
RU=RUB
|
||
# RWANDA
|
||
@@ -463,6 +463,8 @@
|
||
WS=WST
|
||
# SAN MARINO
|
||
SM=EUR
|
||
+# SOUTH SUDAN
|
||
+SS=SSP
|
||
# SAO TOME AND PRINCIPE
|
||
ST=STD
|
||
# SAUDI ARABIA
|
||
@@ -532,7 +534,7 @@
|
||
# TUNISIA
|
||
TN=TND
|
||
# TURKEY
|
||
-TR=TRL;2004-12-31-22-00-00;TRY
|
||
+TR=TRY
|
||
# TURKMENISTAN
|
||
TM=TMT
|
||
# TURKS AND CAICOS ISLANDS
|
||
@@ -558,7 +560,7 @@
|
||
# VANUATU
|
||
VU=VUV
|
||
# VENEZUELA
|
||
-VE=VEB;2008-01-01-04-00-00;VEF
|
||
+VE=VEF
|
||
# VIET NAM
|
||
VN=VND
|
||
# VIRGIN ISLANDS, BRITISH
|
||
@@ -572,7 +574,7 @@
|
||
# YEMEN
|
||
YE=YER
|
||
# ZAMBIA
|
||
-ZM=ZMK
|
||
+ZM=ZMW
|
||
# ZIMBABWE
|
||
ZW=ZWL
|
||
|
||
@@ -583,7 +585,7 @@
|
||
minor0=\
|
||
ADP-BEF-BIF-BYB-BYR-CLF-CLP-DJF-ESP-GNF-\
|
||
GRD-ISK-ITL-JPY-KMF-KRW-LUF-MGF-PYG-PTE-RWF-\
|
||
- TPE-TRL-VUV-XAF-XOF-XPF
|
||
+ TPE-TRL-UGX-VND-VUV-XAF-XOF-XPF
|
||
minor1=
|
||
minor3=\
|
||
BHD-IQD-JOD-KWD-LYD-OMR-TND
|
||
--- ./jdk/src/share/classes/java/util/LocaleISOData.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/java/util/LocaleISOData.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2005, 2013, 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
|
||
@@ -433,6 +433,7 @@
|
||
+ "SN" + "SEN" // Senegal, Republic of
|
||
+ "SO" + "SOM" // Somalia, Somali Republic
|
||
+ "SR" + "SUR" // Suriname, Republic of
|
||
+ + "SS" + "SSD" // South Sudan
|
||
+ "ST" + "STP" // Sao Tome and Principe, Democratic Republic of
|
||
+ "SV" + "SLV" // El Salvador, Republic of
|
||
+ "SX" + "SXM" // Sint Maarten (Dutch part)
|
||
--- ./jdk/src/share/classes/javax/accessibility/AccessibleContext.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/javax/accessibility/AccessibleContext.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -25,6 +25,9 @@
|
||
|
||
package javax.accessibility;
|
||
|
||
+import sun.awt.AWTAccessor;
|
||
+import sun.awt.AppContext;
|
||
+
|
||
import java.util.Locale;
|
||
import java.beans.PropertyChangeListener;
|
||
import java.beans.PropertyChangeSupport;
|
||
@@ -79,6 +82,26 @@
|
||
*/
|
||
public abstract class AccessibleContext {
|
||
|
||
+ /**
|
||
+ * The AppContext that should be used to dispatch events for this
|
||
+ * AccessibleContext
|
||
+ */
|
||
+ private volatile AppContext targetAppContext;
|
||
+
|
||
+ static {
|
||
+ AWTAccessor.setAccessibleContextAccessor(new AWTAccessor.AccessibleContextAccessor() {
|
||
+ @Override
|
||
+ public void setAppContext(AccessibleContext accessibleContext, AppContext appContext) {
|
||
+ accessibleContext.targetAppContext = appContext;
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public AppContext getAppContext(AccessibleContext accessibleContext) {
|
||
+ return accessibleContext.targetAppContext;
|
||
+ }
|
||
+ });
|
||
+ }
|
||
+
|
||
/**
|
||
* Constant used to determine when the accessibleName property has
|
||
* changed. The old value in the PropertyChangeEvent will be the old
|
||
--- ./jdk/src/share/classes/javax/swing/JComboBox.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/javax/swing/JComboBox.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1418,6 +1418,28 @@
|
||
}
|
||
|
||
/**
|
||
+ * {@inheritDoc}
|
||
+ */
|
||
+ @Override
|
||
+ protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) {
|
||
+ if (super.processKeyBinding(ks, e, condition, pressed)) {
|
||
+ return true;
|
||
+ }
|
||
+
|
||
+ if (!isEditable() || condition != WHEN_FOCUSED || getEditor() == null
|
||
+ || !Boolean.TRUE.equals(getClientProperty("JComboBox.isTableCellEditor"))) {
|
||
+ return false;
|
||
+ }
|
||
+
|
||
+ Component editorComponent = getEditor().getEditorComponent();
|
||
+ if (editorComponent instanceof JComponent) {
|
||
+ JComponent component = (JComponent) editorComponent;
|
||
+ return component.processKeyBinding(ks, e, WHEN_FOCUSED, pressed);
|
||
+ }
|
||
+ return false;
|
||
+ }
|
||
+
|
||
+ /**
|
||
* Sets the object that translates a keyboard character into a list
|
||
* selection. Typically, the first selection with a matching first
|
||
* character becomes the selected item.
|
||
--- ./jdk/src/share/classes/javax/swing/JComponent.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/javax/swing/JComponent.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -63,6 +63,7 @@
|
||
import static javax.swing.ClientPropertyKey.*;
|
||
import javax.accessibility.*;
|
||
|
||
+import sun.awt.SunToolkit;
|
||
import sun.swing.SwingUtilities2;
|
||
import sun.swing.UIClientPropertyKey;
|
||
|
||
@@ -3989,6 +3990,17 @@
|
||
* @since 1.4
|
||
*/
|
||
public AccessibleKeyBinding getAccessibleKeyBinding() {
|
||
+ // Try to get the linked label's mnemonic if it exists
|
||
+ Object o = getClientProperty(JLabel.LABELED_BY_PROPERTY);
|
||
+ if (o instanceof Accessible){
|
||
+ AccessibleContext ac = ((Accessible) o).getAccessibleContext();
|
||
+ if (ac != null){
|
||
+ AccessibleComponent comp = ac.getAccessibleComponent();
|
||
+ if (! (comp instanceof AccessibleExtendedComponent))
|
||
+ return null;
|
||
+ return ((AccessibleExtendedComponent)comp).getAccessibleKeyBinding();
|
||
+ }
|
||
+ }
|
||
return null;
|
||
}
|
||
} // inner class AccessibleJComponent
|
||
@@ -4790,7 +4802,8 @@
|
||
* @see RepaintManager#addDirtyRegion
|
||
*/
|
||
public void repaint(long tm, int x, int y, int width, int height) {
|
||
- RepaintManager.currentManager(this).addDirtyRegion(this, x, y, width, height);
|
||
+ RepaintManager.currentManager(SunToolkit.targetToAppContext(this))
|
||
+ .addDirtyRegion(this, x, y, width, height);
|
||
}
|
||
|
||
|
||
@@ -4845,7 +4858,7 @@
|
||
// which was causing some people grief.
|
||
return;
|
||
}
|
||
- if (SwingUtilities.isEventDispatchThread()) {
|
||
+ if (SunToolkit.isDispatchThreadForAppContext(this)) {
|
||
invalidate();
|
||
RepaintManager.currentManager(this).addInvalidComponent(this);
|
||
}
|
||
@@ -4867,7 +4880,7 @@
|
||
revalidate();
|
||
}
|
||
};
|
||
- SwingUtilities.invokeLater(callRevalidate);
|
||
+ SunToolkit.executeOnEventHandlerThread(this, callRevalidate);
|
||
}
|
||
}
|
||
|
||
--- ./jdk/src/share/classes/javax/swing/JPopupMenu.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/javax/swing/JPopupMenu.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -735,7 +735,7 @@
|
||
|
||
if (pref == null || pref.width != getWidth() ||
|
||
pref.height != getHeight()) {
|
||
- popup = getPopup();
|
||
+ showPopup();
|
||
} else {
|
||
validate();
|
||
}
|
||
@@ -786,7 +786,7 @@
|
||
|
||
if(b) {
|
||
firePopupMenuWillBecomeVisible();
|
||
- popup = getPopup();
|
||
+ showPopup();
|
||
firePropertyChange("visible", Boolean.FALSE, Boolean.TRUE);
|
||
|
||
|
||
@@ -804,7 +804,7 @@
|
||
}
|
||
|
||
/**
|
||
- * Returns a <code>Popup</code> instance from the
|
||
+ * Retrieves <code>Popup</code> instance from the
|
||
* <code>PopupMenuUI</code> that has had <code>show</code> invoked on
|
||
* it. If the current <code>popup</code> is non-null,
|
||
* this will invoke <code>dispose</code> of it, and then
|
||
@@ -813,7 +813,7 @@
|
||
* This does NOT fire any events, it is up the caller to dispatch
|
||
* the necessary events.
|
||
*/
|
||
- private Popup getPopup() {
|
||
+ private void showPopup() {
|
||
Popup oldPopup = popup;
|
||
|
||
if (oldPopup != null) {
|
||
@@ -837,8 +837,8 @@
|
||
desiredLocationY);
|
||
|
||
popupFactory.setPopupType(PopupFactory.LIGHT_WEIGHT_POPUP);
|
||
+ popup = newPopup;
|
||
newPopup.show();
|
||
- return newPopup;
|
||
}
|
||
|
||
/**
|
||
@@ -867,7 +867,7 @@
|
||
desiredLocationX = x;
|
||
desiredLocationY = y;
|
||
if(popup != null && (x != oldX || y != oldY)) {
|
||
- popup = getPopup();
|
||
+ showPopup();
|
||
}
|
||
}
|
||
|
||
@@ -1024,7 +1024,7 @@
|
||
Dimension newSize = getPreferredSize();
|
||
|
||
if (!oldSize.equals(newSize)) {
|
||
- popup = getPopup();
|
||
+ showPopup();
|
||
}
|
||
}
|
||
}
|
||
--- ./jdk/src/share/classes/javax/swing/JTable.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/javax/swing/JTable.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -4041,7 +4041,7 @@
|
||
}
|
||
// Restore the lead
|
||
int viewLeadIndex = modelSelection.getLeadSelectionIndex();
|
||
- if (viewLeadIndex != -1) {
|
||
+ if (viewLeadIndex != -1 && !modelSelection.isSelectionEmpty()) {
|
||
viewLeadIndex = convertRowIndexToView(viewLeadIndex);
|
||
}
|
||
SwingUtilities2.setLeadAnchorWithoutSelection(
|
||
@@ -6587,8 +6587,8 @@
|
||
TableColumnModelListener, CellEditorListener, PropertyChangeListener,
|
||
AccessibleExtendedTable {
|
||
|
||
- int lastSelectedRow;
|
||
- int lastSelectedCol;
|
||
+ int previousFocusedRow;
|
||
+ int previousFocusedCol;
|
||
|
||
/**
|
||
* AccessibleJTable constructor
|
||
@@ -6603,8 +6603,10 @@
|
||
tcm.addColumnModelListener(this);
|
||
tcm.getSelectionModel().addListSelectionListener(this);
|
||
JTable.this.getModel().addTableModelListener(this);
|
||
- lastSelectedRow = JTable.this.getSelectedRow();
|
||
- lastSelectedCol = JTable.this.getSelectedColumn();
|
||
+ previousFocusedRow = JTable.this.getSelectionModel().
|
||
+ getLeadSelectionIndex();
|
||
+ previousFocusedCol = JTable.this.getColumnModel().
|
||
+ getSelectionModel().getLeadSelectionIndex();
|
||
}
|
||
|
||
// Listeners to track model, etc. changes to as to re-place the other
|
||
@@ -6932,18 +6934,21 @@
|
||
firePropertyChange(AccessibleContext.ACCESSIBLE_SELECTION_PROPERTY,
|
||
Boolean.valueOf(false), Boolean.valueOf(true));
|
||
|
||
- int selectedRow = JTable.this.getSelectedRow();
|
||
- int selectedCol = JTable.this.getSelectedColumn();
|
||
- if (selectedRow != lastSelectedRow ||
|
||
- selectedCol != lastSelectedCol) {
|
||
- Accessible oldA = getAccessibleAt(lastSelectedRow,
|
||
- lastSelectedCol);
|
||
- Accessible newA = getAccessibleAt(selectedRow, selectedCol);
|
||
+ // Using lead selection index to cover both cases: node selected and node
|
||
+ // is focused but not selected (Ctrl+up/down)
|
||
+ int focusedRow = JTable.this.getSelectionModel().getLeadSelectionIndex();
|
||
+ int focusedCol = JTable.this.getColumnModel().getSelectionModel().
|
||
+ getLeadSelectionIndex();
|
||
+
|
||
+ if (focusedRow != previousFocusedRow ||
|
||
+ focusedCol != previousFocusedCol){
|
||
+ Accessible oldA = getAccessibleAt(previousFocusedRow, previousFocusedCol);
|
||
+ Accessible newA = getAccessibleAt(focusedRow, focusedCol);
|
||
firePropertyChange(AccessibleContext.ACCESSIBLE_ACTIVE_DESCENDANT_PROPERTY,
|
||
- oldA, newA);
|
||
- lastSelectedRow = selectedRow;
|
||
- lastSelectedCol = selectedCol;
|
||
- }
|
||
+ oldA, newA);
|
||
+ previousFocusedRow = focusedRow;
|
||
+ previousFocusedCol = focusedCol;
|
||
+ }
|
||
}
|
||
|
||
|
||
--- ./jdk/src/share/classes/javax/swing/JTree.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/javax/swing/JTree.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1662,6 +1662,11 @@
|
||
|
||
leadPath = newPath;
|
||
firePropertyChange(LEAD_SELECTION_PATH_PROPERTY, oldValue, newPath);
|
||
+
|
||
+ if (accessibleContext != null){
|
||
+ ((AccessibleJTree)accessibleContext).
|
||
+ fireActiveDescendantPropertyChange(oldValue, newPath);
|
||
+ }
|
||
}
|
||
|
||
/**
|
||
@@ -4123,23 +4128,6 @@
|
||
*
|
||
*/
|
||
public void valueChanged(TreeSelectionEvent e) {
|
||
- // Fixes 4546503 - JTree is sending incorrect active
|
||
- // descendant events
|
||
- TreePath oldLeadSelectionPath = e.getOldLeadSelectionPath();
|
||
- leadSelectionPath = e.getNewLeadSelectionPath();
|
||
-
|
||
- if (oldLeadSelectionPath != leadSelectionPath) {
|
||
- // Set parent to null so AccessibleJTreeNode computes
|
||
- // its parent.
|
||
- Accessible oldLSA = leadSelectionAccessible;
|
||
- leadSelectionAccessible = (leadSelectionPath != null)
|
||
- ? new AccessibleJTreeNode(JTree.this,
|
||
- leadSelectionPath,
|
||
- null) // parent
|
||
- : null;
|
||
- firePropertyChange(AccessibleContext.ACCESSIBLE_ACTIVE_DESCENDANT_PROPERTY,
|
||
- oldLSA, leadSelectionAccessible);
|
||
- }
|
||
firePropertyChange(AccessibleContext.ACCESSIBLE_SELECTION_PROPERTY,
|
||
Boolean.valueOf(false), Boolean.valueOf(true));
|
||
}
|
||
@@ -4243,6 +4231,35 @@
|
||
}
|
||
}
|
||
|
||
+ /**
|
||
+ * Fire an active descendant property change notification.
|
||
+ * The active descendant is used for objects such as list,
|
||
+ * tree, and table, which may have transient children.
|
||
+ * It notifies screen readers the active child of the component
|
||
+ * has been changed so user can be notified from there.
|
||
+ *
|
||
+ * @param oldPath - lead path of previous active child
|
||
+ * @param newPath - lead path of current active child
|
||
+ *
|
||
+ */
|
||
+ void fireActiveDescendantPropertyChange(TreePath oldPath, TreePath newPath){
|
||
+ if(oldPath != newPath){
|
||
+ Accessible oldLSA = (oldPath != null)
|
||
+ ? new AccessibleJTreeNode(JTree.this,
|
||
+ oldPath,
|
||
+ null)
|
||
+ : null;
|
||
+
|
||
+ Accessible newLSA = (newPath != null)
|
||
+ ? new AccessibleJTreeNode(JTree.this,
|
||
+ newPath,
|
||
+ null)
|
||
+ : null;
|
||
+ firePropertyChange(AccessibleContext.ACCESSIBLE_ACTIVE_DESCENDANT_PROPERTY,
|
||
+ oldLSA, newLSA);
|
||
+ }
|
||
+ }
|
||
+
|
||
|
||
private AccessibleContext getCurrentAccessibleContext() {
|
||
Component c = getCurrentComponent();
|
||
--- ./jdk/src/share/classes/javax/swing/MenuSelectionManager.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/javax/swing/MenuSelectionManager.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -30,6 +30,7 @@
|
||
import javax.swing.event.*;
|
||
|
||
import sun.awt.AppContext;
|
||
+import sun.swing.SwingUtilities2;
|
||
|
||
/**
|
||
* A MenuSelectionManager owns the selection in menu hierarchy.
|
||
@@ -60,6 +61,12 @@
|
||
if (msm == null) {
|
||
msm = new MenuSelectionManager();
|
||
context.put(MENU_SELECTION_MANAGER_KEY, msm);
|
||
+
|
||
+ // installing additional listener if found in the AppContext
|
||
+ Object o = context.get(SwingUtilities2.MENU_SELECTION_MANAGER_LISTENER_KEY);
|
||
+ if (o != null && o instanceof ChangeListener) {
|
||
+ msm.addChangeListener((ChangeListener) o);
|
||
+ }
|
||
}
|
||
|
||
return msm;
|
||
--- ./jdk/src/share/classes/javax/swing/PopupFactory.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/javax/swing/PopupFactory.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -25,10 +25,14 @@
|
||
|
||
package javax.swing;
|
||
|
||
+import sun.awt.EmbeddedFrame;
|
||
+import sun.awt.OSInfo;
|
||
+
|
||
import java.applet.Applet;
|
||
import java.awt.*;
|
||
import java.awt.event.WindowAdapter;
|
||
import java.awt.event.WindowEvent;
|
||
+import java.security.AccessController;
|
||
import java.util.ArrayList;
|
||
import java.util.HashMap;
|
||
import java.util.List;
|
||
@@ -226,7 +230,13 @@
|
||
case MEDIUM_WEIGHT_POPUP:
|
||
return getMediumWeightPopup(owner, contents, ownerX, ownerY);
|
||
case HEAVY_WEIGHT_POPUP:
|
||
- return getHeavyWeightPopup(owner, contents, ownerX, ownerY);
|
||
+ Popup popup = getHeavyWeightPopup(owner, contents, ownerX, ownerY);
|
||
+ if ((AccessController.doPrivileged(OSInfo.getOSTypeAction()) ==
|
||
+ OSInfo.OSType.MACOSX) && (owner != null) &&
|
||
+ (EmbeddedFrame.getAppletIfAncestorOf(owner) != null)) {
|
||
+ ((HeavyWeightPopup)popup).setCacheEnabled(false);
|
||
+ }
|
||
+ return popup;
|
||
}
|
||
return null;
|
||
}
|
||
@@ -294,6 +304,8 @@
|
||
private static final Object heavyWeightPopupCacheKey =
|
||
new StringBuffer("PopupFactory.heavyWeightPopupCache");
|
||
|
||
+ private volatile boolean isCacheEnabled = true;
|
||
+
|
||
/**
|
||
* Returns either a new or recycled <code>Popup</code> containing
|
||
* the specified children.
|
||
@@ -448,12 +460,23 @@
|
||
}
|
||
}
|
||
|
||
+ /**
|
||
+ * Enables or disables cache for current object.
|
||
+ */
|
||
+ void setCacheEnabled(boolean enable) {
|
||
+ isCacheEnabled = enable;
|
||
+ }
|
||
+
|
||
//
|
||
// Popup methods
|
||
//
|
||
public void hide() {
|
||
super.hide();
|
||
- recycleHeavyWeightPopup(this);
|
||
+ if (isCacheEnabled) {
|
||
+ recycleHeavyWeightPopup(this);
|
||
+ } else {
|
||
+ this._dispose();
|
||
+ }
|
||
}
|
||
|
||
/**
|
||
--- ./jdk/src/share/classes/javax/swing/SortingFocusTraversalPolicy.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/javax/swing/SortingFocusTraversalPolicy.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -30,6 +30,11 @@
|
||
import java.util.*;
|
||
import java.awt.FocusTraversalPolicy;
|
||
import sun.util.logging.PlatformLogger;
|
||
+import java.lang.reflect.InvocationTargetException;
|
||
+import java.lang.reflect.Method;
|
||
+import sun.security.action.GetPropertyAction;
|
||
+import java.security.AccessController;
|
||
+import java.security.PrivilegedAction;
|
||
|
||
/**
|
||
* A FocusTraversalPolicy that determines traversal order by sorting the
|
||
@@ -89,6 +94,34 @@
|
||
final private int FORWARD_TRAVERSAL = 0;
|
||
final private int BACKWARD_TRAVERSAL = 1;
|
||
|
||
+ /*
|
||
+ * When true (by default), the legacy merge-sort algo is used to sort an FTP cycle.
|
||
+ * When false, the default (tim-sort) algo is used, which may lead to an exception.
|
||
+ * See: JDK-8048887
|
||
+ */
|
||
+ private static final boolean legacySortingFTPEnabled;
|
||
+ private static final Method legacyMergeSortMethod;
|
||
+
|
||
+ static {
|
||
+ legacySortingFTPEnabled = "true".equals(AccessController.doPrivileged(
|
||
+ new GetPropertyAction("swing.legacySortingFTPEnabled", "true")));
|
||
+ legacyMergeSortMethod = legacySortingFTPEnabled ?
|
||
+ AccessController.doPrivileged(new PrivilegedAction<Method>() {
|
||
+ public Method run() {
|
||
+ try {
|
||
+ Class c = Class.forName("java.util.Arrays");
|
||
+ Method m = c.getDeclaredMethod("legacyMergeSort", new Class[]{Object[].class, Comparator.class});
|
||
+ m.setAccessible(true);
|
||
+ return m;
|
||
+ } catch (ClassNotFoundException | NoSuchMethodException e) {
|
||
+ // using default sorting algo
|
||
+ return null;
|
||
+ }
|
||
+ }
|
||
+ }) :
|
||
+ null;
|
||
+ }
|
||
+
|
||
/**
|
||
* Constructs a SortingFocusTraversalPolicy without a Comparator.
|
||
* Subclasses must set the Comparator using <code>setComparator</code>
|
||
@@ -133,10 +166,32 @@
|
||
private void enumerateAndSortCycle(Container focusCycleRoot, List<Component> cycle) {
|
||
if (focusCycleRoot.isShowing()) {
|
||
enumerateCycle(focusCycleRoot, cycle);
|
||
- Collections.sort(cycle, comparator);
|
||
+ if (!legacySortingFTPEnabled ||
|
||
+ !legacySort(cycle, comparator))
|
||
+ {
|
||
+ Collections.sort(cycle, comparator);
|
||
+ }
|
||
}
|
||
}
|
||
|
||
+ private boolean legacySort(List<Component> l, Comparator<? super Component> c) {
|
||
+ if (legacyMergeSortMethod == null)
|
||
+ return false;
|
||
+
|
||
+ Object[] a = l.toArray();
|
||
+ try {
|
||
+ legacyMergeSortMethod.invoke(null, a, c);
|
||
+ } catch (IllegalAccessException | InvocationTargetException e) {
|
||
+ return false;
|
||
+ }
|
||
+ ListIterator<Component> i = l.listIterator();
|
||
+ for (Object e : a) {
|
||
+ i.next();
|
||
+ i.set((Component)e);
|
||
+ }
|
||
+ return true;
|
||
+ }
|
||
+
|
||
private void enumerateCycle(Container container, List<Component> cycle) {
|
||
if (!(container.isVisible() && container.isDisplayable())) {
|
||
return;
|
||
--- ./jdk/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -941,16 +941,9 @@
|
||
|
||
directories.clear();
|
||
|
||
- File[] baseFolders;
|
||
- if (useShellFolder) {
|
||
- baseFolders = AccessController.doPrivileged(new PrivilegedAction<File[]>() {
|
||
- public File[] run() {
|
||
- return (File[]) ShellFolder.get("fileChooserComboBoxFolders");
|
||
- }
|
||
- });
|
||
- } else {
|
||
- baseFolders = fsv.getRoots();
|
||
- }
|
||
+ File[] baseFolders = (useShellFolder)
|
||
+ ? (File[]) ShellFolder.get("fileChooserComboBoxFolders")
|
||
+ : fsv.getRoots();
|
||
directories.addAll(Arrays.asList(baseFolders));
|
||
|
||
// Get the canonical (full) path. This has the side
|
||
--- ./jdk/src/share/classes/javax/swing/plaf/nimbus/skin.laf Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/javax/swing/plaf/nimbus/skin.laf Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,7 +1,7 @@
|
||
<?xml version="1.0" encoding="UTF-8"?>
|
||
|
||
<!--
|
||
- Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
|
||
+ Copyright (c) 1998, 2014, 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
|
||
@@ -13424,10 +13424,10 @@
|
||
<state stateKeys="Selected">
|
||
<style>
|
||
<textForeground>
|
||
- <matte red="255" green="255" blue="255" alpha="255" uiDefaultParentName="nimbusLightBackground" hueOffset="0.0" saturationOffset="0.0" brightnessOffset="0.0" alphaOffset="0" uiResource="false"/>
|
||
+ <matte red="255" green="255" blue="255" alpha="255" uiDefaultParentName="nimbusLightBackground" hueOffset="0.0" saturationOffset="0.0" brightnessOffset="0.0" alphaOffset="0"/>
|
||
</textForeground>
|
||
<textBackground>
|
||
- <matte red="57" green="105" blue="138" alpha="255" uiDefaultParentName="nimbusSelectionBackground" hueOffset="0.0" saturationOffset="0.0" brightnessOffset="0.0" alphaOffset="0" uiResource="false"/>
|
||
+ <matte red="57" green="105" blue="138" alpha="255" uiDefaultParentName="nimbusSelectionBackground" hueOffset="0.0" saturationOffset="0.0" brightnessOffset="0.0" alphaOffset="0"/>
|
||
</textBackground>
|
||
<background/>
|
||
<inherit-textForeground>false</inherit-textForeground>
|
||
@@ -13453,7 +13453,7 @@
|
||
<style>
|
||
<textForeground/>
|
||
<textBackground>
|
||
- <matte red="57" green="105" blue="138" alpha="255" uiDefaultParentName="nimbusSelectionBackground" hueOffset="0.0" saturationOffset="0.0" brightnessOffset="0.0" alphaOffset="0" uiResource="false"/>
|
||
+ <matte red="57" green="105" blue="138" alpha="255" uiDefaultParentName="nimbusSelectionBackground" hueOffset="0.0" saturationOffset="0.0" brightnessOffset="0.0" alphaOffset="0"/>
|
||
</textBackground>
|
||
<background/>
|
||
<inherit-textBackground>false</inherit-textBackground>
|
||
@@ -13477,7 +13477,7 @@
|
||
<state stateKeys="Disabled">
|
||
<style>
|
||
<textForeground>
|
||
- <matte red="142" green="143" blue="145" alpha="255" uiDefaultParentName="nimbusDisabledText" hueOffset="0.0" saturationOffset="0.0" brightnessOffset="0.0" alphaOffset="0" uiResource="false"/>
|
||
+ <matte red="142" green="143" blue="145" alpha="255" uiDefaultParentName="nimbusDisabledText" hueOffset="0.0" saturationOffset="0.0" brightnessOffset="0.0" alphaOffset="0"/>
|
||
</textForeground>
|
||
<textBackground/>
|
||
<background/>
|
||
@@ -13520,7 +13520,7 @@
|
||
</textForeground>
|
||
<textBackground/>
|
||
<background>
|
||
- <matte red="57" green="105" blue="138" alpha="255" uiDefaultParentName="nimbusSelectionBackground" hueOffset="0.0" saturationOffset="0.0" brightnessOffset="0.0" alphaOffset="0" uiResource="false"/>
|
||
+ <matte red="57" green="105" blue="138" alpha="255" uiDefaultParentName="nimbusSelectionBackground" hueOffset="0.0" saturationOffset="0.0" brightnessOffset="0.0" alphaOffset="0"/>
|
||
</background>
|
||
<inherit-textForeground>false</inherit-textForeground>
|
||
<inherit-background>false</inherit-background>
|
||
--- ./jdk/src/share/classes/javax/swing/text/html/parser/Parser.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/javax/swing/text/html/parser/Parser.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1998, 2014, 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
|
||
@@ -2081,6 +2081,13 @@
|
||
// null end tag.
|
||
endTag(false);
|
||
continue;
|
||
+ } else if (textpos == 0) {
|
||
+ if (!legalElementContext(dtd.pcdata)) {
|
||
+ error("unexpected.pcdata");
|
||
+ }
|
||
+ if (last.breaksFlow()) {
|
||
+ space = false;
|
||
+ }
|
||
}
|
||
break;
|
||
|
||
--- ./jdk/src/share/classes/sun/awt/AWTAccessor.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/awt/AWTAccessor.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -25,6 +25,7 @@
|
||
|
||
package sun.awt;
|
||
|
||
+import javax.accessibility.AccessibleContext;
|
||
import java.awt.*;
|
||
import java.awt.KeyboardFocusManager;
|
||
import java.awt.DefaultKeyboardFocusManager;
|
||
@@ -491,6 +492,11 @@
|
||
*/
|
||
void invokeAndWait(Object source, Runnable r)
|
||
throws InterruptedException, InvocationTargetException;
|
||
+
|
||
+ /**
|
||
+ * Gets most recent event time in the EventQueue
|
||
+ */
|
||
+ long getMostRecentEventTime(EventQueue eventQueue);
|
||
}
|
||
|
||
/*
|
||
@@ -723,6 +729,14 @@
|
||
|
||
|
||
/*
|
||
+ * An accessor object for the AccessibleContext class
|
||
+ */
|
||
+ public interface AccessibleContextAccessor {
|
||
+ void setAppContext(AccessibleContext accessibleContext, AppContext appContext);
|
||
+ AppContext getAppContext(AccessibleContext accessibleContext);
|
||
+ }
|
||
+
|
||
+ /*
|
||
* Accessor instances are initialized in the static initializers of
|
||
* corresponding AWT classes by using setters defined below.
|
||
*/
|
||
@@ -751,6 +765,7 @@
|
||
private static SequencedEventAccessor sequencedEventAccessor;
|
||
private static InvocationEventAccessor invocationEventAccessor;
|
||
private static ToolkitAccessor toolkitAccessor;
|
||
+ private static AccessibleContextAccessor accessibleContextAccessor;
|
||
|
||
/*
|
||
* Set an accessor object for the java.awt.Component class.
|
||
@@ -1177,4 +1192,22 @@
|
||
public static InvocationEventAccessor getInvocationEventAccessor() {
|
||
return invocationEventAccessor;
|
||
}
|
||
+
|
||
+
|
||
+ /*
|
||
+ * Get the accessor object for the javax.accessibility.AccessibleContext class.
|
||
+ */
|
||
+ public static AccessibleContextAccessor getAccessibleContextAccessor() {
|
||
+ if (accessibleContextAccessor == null) {
|
||
+ unsafe.ensureClassInitialized(AccessibleContext.class);
|
||
+ }
|
||
+ return accessibleContextAccessor;
|
||
+ }
|
||
+
|
||
+ /*
|
||
+ * Set the accessor object for the javax.accessibility.AccessibleContext class.
|
||
+ */
|
||
+ public static void setAccessibleContextAccessor(AccessibleContextAccessor accessor) {
|
||
+ AWTAccessor.accessibleContextAccessor = accessor;
|
||
+ }
|
||
}
|
||
--- ./jdk/src/share/classes/sun/awt/AppContext.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/awt/AppContext.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -167,6 +167,9 @@
|
||
*/
|
||
private static volatile AppContext mainAppContext = null;
|
||
|
||
+ private static class GetAppContextLock {};
|
||
+ private final static Object getAppContextLock = new GetAppContextLock();
|
||
+
|
||
/*
|
||
* The hash map associated with this AppContext. A private delegate
|
||
* is used instead of subclassing HashMap so as to avoid all of
|
||
@@ -308,14 +311,16 @@
|
||
// if no contexts have been created yet. This covers standalone apps
|
||
// and excludes applets because by the time applet starts
|
||
// a number of contexts have already been created by the plugin.
|
||
- if (numAppContexts.get() == 0) {
|
||
- if (System.getProperty("javaplugin.version") == null &&
|
||
- System.getProperty("javawebstart.version") == null) {
|
||
- initMainAppContext();
|
||
- } else if (System.getProperty("javafx.version") != null &&
|
||
- threadGroup.getParent() != null) {
|
||
- // Swing inside JavaFX case
|
||
- SunToolkit.createNewAppContext();
|
||
+ synchronized (getAppContextLock) {
|
||
+ if (numAppContexts.get() == 0) {
|
||
+ if (System.getProperty("javaplugin.version") == null &&
|
||
+ System.getProperty("javawebstart.version") == null) {
|
||
+ initMainAppContext();
|
||
+ } else if (System.getProperty("javafx.version") != null &&
|
||
+ threadGroup.getParent() != null) {
|
||
+ // Swing inside JavaFX case
|
||
+ SunToolkit.createNewAppContext();
|
||
+ }
|
||
}
|
||
}
|
||
|
||
--- ./jdk/src/share/classes/sun/awt/SunToolkit.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/awt/SunToolkit.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -378,7 +378,7 @@
|
||
* null or the target can't be found, a null with be returned.
|
||
*/
|
||
public static AppContext targetToAppContext(Object target) {
|
||
- if (target == null || GraphicsEnvironment.isHeadless()) {
|
||
+ if (target == null) {
|
||
return null;
|
||
}
|
||
AppContext context = getAppContext(target);
|
||
@@ -452,12 +452,10 @@
|
||
* via targetToAppContext() above.
|
||
*/
|
||
public static void insertTargetMapping(Object target, AppContext appContext) {
|
||
- if (!GraphicsEnvironment.isHeadless()) {
|
||
- if (!setAppContext(target, appContext)) {
|
||
- // Target is not a Component/MenuComponent, use the private Map
|
||
- // instead.
|
||
- appContextMap.put(target, appContext);
|
||
- }
|
||
+ if (!setAppContext(target, appContext)) {
|
||
+ // Target is not a Component/MenuComponent, use the private Map
|
||
+ // instead.
|
||
+ appContextMap.put(target, appContext);
|
||
}
|
||
}
|
||
|
||
--- ./jdk/src/share/classes/sun/awt/dnd/SunDropTargetContextPeer.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/awt/dnd/SunDropTargetContextPeer.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2000, 2014, 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
|
||
@@ -239,6 +239,13 @@
|
||
|
||
if (localTransferable != null) {
|
||
return localTransferable.getTransferData(df);
|
||
+ } else if (df.isMimeTypeEqual(DataFlavor.javaJVMLocalObjectMimeType)) {
|
||
+ // Workaround to JDK-8024061: Exception thrown when drag and drop
|
||
+ // between two components is executed quickly.
|
||
+ // It is expected localTransferable is not null if javaJVMLocalObjectMimeType
|
||
+ // is used. Executing further results in ClassCastException, so null is
|
||
+ // returned here as no transfer data is available in this case.
|
||
+ return null;
|
||
}
|
||
|
||
if (dropStatus != STATUS_ACCEPT || dropComplete) {
|
||
--- ./jdk/src/share/classes/sun/awt/image/BytePackedRaster.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/awt/image/BytePackedRaster.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1408,10 +1408,10 @@
|
||
}
|
||
}
|
||
|
||
- long lastbit = (long) dataBitOffset
|
||
- + (long) (height - 1) * (long) scanlineStride * 8
|
||
- + (long) (width - 1) * (long) pixelBitStride
|
||
- + (long) pixelBitStride - 1;
|
||
+ int lastbit = (dataBitOffset
|
||
+ + (height-1) * scanlineStride * 8
|
||
+ + (width-1) * pixelBitStride
|
||
+ + pixelBitStride - 1);
|
||
if (lastbit < 0 || lastbit / 8 >= data.length) {
|
||
throw new RasterFormatException("raster dimensions overflow " +
|
||
"array bounds");
|
||
--- ./jdk/src/share/classes/sun/java2d/SunGraphics2D.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/java2d/SunGraphics2D.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -2388,6 +2388,8 @@
|
||
surfaceData = NullSurfaceData.theInstance;
|
||
}
|
||
|
||
+ invalidatePipe();
|
||
+
|
||
// this will recalculate the composite clip
|
||
setDevClip(surfaceData.getBounds());
|
||
|
||
--- ./jdk/src/share/classes/sun/java2d/opengl/OGLSurfaceDataProxy.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/java2d/opengl/OGLSurfaceDataProxy.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -65,7 +65,11 @@
|
||
int w, int h)
|
||
{
|
||
if (cachedData == null) {
|
||
- cachedData = oglgc.createManagedSurface(w, h, transparency);
|
||
+ try {
|
||
+ cachedData = oglgc.createManagedSurface(w, h, transparency);
|
||
+ } catch (OutOfMemoryError er) {
|
||
+ return null;
|
||
+ }
|
||
}
|
||
return cachedData;
|
||
}
|
||
--- ./jdk/src/share/classes/sun/jvmstat/perfdata/monitor/protocol/local/PerfDataFile.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/jvmstat/perfdata/monitor/protocol/local/PerfDataFile.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -233,8 +233,6 @@
|
||
* does not conform to the expected pattern
|
||
*/
|
||
public static int getLocalVmId(File file) {
|
||
- int lvmid = 0;
|
||
-
|
||
try {
|
||
// try 1.4.2 and later format first
|
||
return Integer.parseInt(file.getName());
|
||
@@ -287,31 +285,13 @@
|
||
return tmpDirName + dirNamePrefix + user + File.separator;
|
||
}
|
||
|
||
- /*
|
||
- * this static initializer would not be necessary if the
|
||
- * Solaris java.io.tmpdir property were set to /tmp by default
|
||
- */
|
||
static {
|
||
/*
|
||
- * Why is java.io.tmpdir on Solaris set to "/var/tmp/" when the
|
||
- * HotSpot JVM os:get_temp_path() method returns "/tmp/"
|
||
- *
|
||
- * Why do Solaris and Windows return a string with a trailing
|
||
- * file separator character where as Linix does not? (this change
|
||
- * seems to have occurred sometime during hopper beta)
|
||
+ * For this to work, the target VM and this code need to use
|
||
+ * the same directory. Instead of guessing which directory the
|
||
+ * VM is using, we will ask.
|
||
*/
|
||
- String tmpdir = System.getProperty("java.io.tmpdir");
|
||
-
|
||
- if (tmpdir.compareTo("/var/tmp/") == 0) {
|
||
- /*
|
||
- * shared memory files are created in /tmp. Interestingly,
|
||
- * java.io.tmpdir is set to "/var/tmp/" on Solaris and Linux,
|
||
- * but os::get_temp_directory() is set to "/tmp/" on these
|
||
- * platforms. the java.io.logging packages also makes reference
|
||
- * to java.io.tmpdir.
|
||
- */
|
||
- tmpdir = "/tmp/";
|
||
- }
|
||
+ String tmpdir = sun.misc.VMSupport.getVMTemporaryDirectory();
|
||
|
||
/*
|
||
* Assure that the string returned has a trailing File.separator
|
||
--- ./jdk/src/share/classes/sun/launcher/resources/launcher_de.properties Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/launcher/resources/launcher_de.properties Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
#
|
||
-# Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
|
||
+# Copyright (c) 2007, 2014, 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
|
||
@@ -34,7 +34,7 @@
|
||
java.launcher.ergo.message2 =\ weil die Ausf\u00FChrung auf einem Server-Class-Rechner erfolgt.\n
|
||
|
||
# Translators please note do not translate the options themselves
|
||
-java.launcher.opt.footer =\ -cp <Klassensuchpfad von Verzeichnissen und ZIP-/JAR-Dateien>\n -classpath <Klassensuchpfad von Verzeichnissen und ZIP-/JAR-Dateien>\n Eine durch {0} getrennte Liste mit Verzeichnissen, JAR-Archiven\n und ZIP-Archiven zur Suche nach Klassendateien.\n -D<name>=<value>\n Legt eine Systemeigenschaft fest\n -verbose:[class|gc|jni]\n Aktiviert die Verbose-Ausgabe\n -version Druckt Produktversion und beendet das Programm\n -version:<value>\n Erfordert die angegebene Version zur Ausf\u00FChrung\n -showversion Druckt Produktversion und f\u00E4hrt fort\n -jre-restrict-search | -no-jre-restrict-search\n Bezieht private JREs des Benutzers in Versionssuche ein bzw. schlie\u00DFt sie aus\n -? -help Druckt diese Hilfemeldung\n -X Druckt Hilfe zu Nicht-Standardoptionen\n -ea[:<packagename>...|:<classname>]\n -enableassertions[:<packagename>...|:<classname>]\n Aktiviert Assertionen mit angegebener Granularit\u00E4t\n -da[:<packagename>...|:<classname>]\n -disableassertions[:<packagename>...|:<classname>]\n Deaktiviert Assertionen mit angegebener Granularit\u00E4t\n -esa | -enablesystemassertions\n Aktiviert Systemassertionen\n -dsa | -disablesystemassertions\n Deaktiviert Systemassertionen\n -agentlib:<libname>[=<options>]\n L\u00E4dt native Agent Library <libname>, z.B. -agentlib:hprof\n siehe auch -agentlib:jdwp=help und -agentlib:hprof=help\n -agentpath:<pathname>[=<options>]\n L\u00E4dt native Agent Library nach vollem Pfadnamen\n -javaagent:<jarpath>[=<options>]\n L\u00E4dt Java-Programmiersprachen-Agent, siehe java.lang.instrument\n -splash:<imagepath>\n Zeigt Startbildschirm mit angegebenem Bild\nWeitere Einzelheiten finden Sie unter http://www.oracle.com/technetwork/java/javase/documentation/index.html
|
||
+java.launcher.opt.footer =\ -cp <Klassensuchpfad von Verzeichnissen und ZIP-/JAR-Dateien>\n -classpath <Klassensuchpfad von Verzeichnissen und ZIP-/JAR-Dateien>\n Eine durch {0} getrennte Liste mit Verzeichnissen, JAR-Archiven\n und ZIP-Archiven zur Suche nach Klassendateien.\n -D<name>=<value>\n Legt eine Systemeigenschaft fest\n -verbose:[class|gc|jni]\n Aktiviert die Verbose-Ausgabe\n -version Druckt Produktversion und beendet das Programm\n -version:<value>\n Erfordert die angegebene Version zur Ausf\u00FChrung\n -showversion Druckt Produktversion und f\u00E4hrt fort\n -jre-restrict-search | -no-jre-restrict-search\n Bezieht private JREs des Benutzers in Versionssuche ein bzw. schlie\u00DFt sie aus\n -? -help Druckt diese Hilfemeldung\n -X Druckt Hilfe zu Nicht-Standardoptionen\n -ea[:<packagename>...|:<classname>]\n -enableassertions[:<packagename>...|:<classname>]\n Aktiviert Assertions mit angegebener Granularit\u00E4t\n -da[:<packagename>...|:<classname>]\n -disableassertions[:<packagename>...|:<classname>]\n Deaktiviert Assertions mit angegebener Granularit\u00E4t\n -esa | -enablesystemassertions\n Aktiviert Systemassertionen\n -dsa | -disablesystemassertions\n Deaktiviert Systemassertionen\n -agentlib:<libname>[=<options>]\n L\u00E4dt native Agent Library <libname>, z.B. -agentlib:hprof\n siehe auch -agentlib:jdwp=help und -agentlib:hprof=help\n -agentpath:<pathname>[=<options>]\n L\u00E4dt native Agent Library nach vollem Pfadnamen\n -javaagent:<jarpath>[=<options>]\n L\u00E4dt Java-Programmiersprachen-Agent, siehe java.lang.instrument\n -splash:<imagepath>\n Zeigt Startbildschirm mit angegebenem Bild\nWeitere Einzelheiten finden Sie unter http://www.oracle.com/technetwork/java/javase/documentation/index.html
|
||
|
||
# Translators please note do not translate the options themselves
|
||
java.launcher.X.usage=\ -Xmixed Ausf\u00FChrung im gemischten Modus (Standard)\n -Xint Nur Ausf\u00FChrung im interpretierten Modus\n -Xbootclasspath:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n Legt Suchpfad f\u00FCr Bootstrap-Klassen und Ressourcen fest\n -Xbootclasspath/a:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n H\u00E4ngt an das Ende des Bootstrap Classpath an\n -Xbootclasspath/p:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n Stellt Bootstrap Classpath voran\n -Xdiag Zeigt zus\u00E4tzliche Diagnosemeldungen an\n -Xnoclassgc Deaktiviert Klassen-Garbage Collection\n -Xincgc Aktiviert inkrementelle Garbage Collection\n -Xloggc:<file> Loggt GC-Status in einer Datei mit Zeitstempeln\n -Xbatch Deaktiviert Hintergrundkompilierung\n -Xms<size> Legt anf\u00E4ngliche Java Heap-Gr\u00F6\u00DFe fest\n -Xmx<size> Legt maximale Java Heap-Gr\u00F6\u00DFe fest\n -Xss<size> Legt Java-Threadstackgr\u00F6\u00DFe fest\n -Xprof Gibt CPU-Profiling-Daten aus\n -Xfuture Aktiviert strengste Pr\u00FCfungen, antizipiert zuk\u00FCnftigen Standardwert\n -Xrs Reduziert Verwendung von BS-Signalen durch Java/VM (siehe Dokumentation)\n -Xcheck:jni F\u00FChrt zus\u00E4tzliche Pr\u00FCfungen f\u00FCr JNI-Funktionen durch\n -Xshare:off Kein Versuch, gemeinsame Klassendaten zu verwenden\n -Xshare:auto Verwendet gemeinsame Klassendaten, wenn m\u00F6glich (Standard)\n -Xshare:on Erfordert die Verwendung gemeinsamer Klassendaten, sonst verl\u00E4uft der Vorgang nicht erfolgreich.\n -XshowSettings Zeigt alle Einstellungen und f\u00E4hrt fort\n -XshowSettings:all\n Zeigt alle Einstellungen und f\u00E4hrt fort\n -XshowSettings:vm Zeigt alle VM-bezogenen Einstellungen und f\u00E4hrt fort\n -XshowSettings:properties\n Zeigt alle Eigenschaftseinstellungen und f\u00E4hrt fort\n -XshowSettings:locale\n Zeigt alle gebietsschemabezogenen Einstellungen und f\u00E4hrt fort\n\nDie -X-Optionen sind keine Standardoptionen und k\u00F6nnen ohne Vorank\u00FCndigung ge\u00E4ndert werden.\n
|
||
--- ./jdk/src/share/classes/sun/misc/VMSupport.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/misc/VMSupport.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -97,4 +97,14 @@
|
||
throw new RuntimeException(ioe.getMessage());
|
||
}
|
||
}
|
||
+
|
||
+ /*
|
||
+ * Return the temporary directory that the VM uses for the attach
|
||
+ * and perf data files.
|
||
+ *
|
||
+ * It is important that this directory is well-known and the
|
||
+ * same for all VM instances. It cannot be affected by configuration
|
||
+ * variables such as java.io.tmpdir.
|
||
+ */
|
||
+ public static native String getVMTemporaryDirectory();
|
||
}
|
||
--- ./jdk/src/share/classes/sun/net/www/http/HttpClient.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/net/www/http/HttpClient.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -651,7 +651,9 @@
|
||
// try once more
|
||
openServer();
|
||
if (needsTunneling()) {
|
||
+ MessageHeader origRequests = requests;
|
||
httpuc.doTunneling();
|
||
+ requests = origRequests;
|
||
}
|
||
afterConnect();
|
||
writeRequests(requests, poster);
|
||
@@ -762,7 +764,9 @@
|
||
cachedHttpClient = false;
|
||
openServer();
|
||
if (needsTunneling()) {
|
||
+ MessageHeader origRequests = requests;
|
||
httpuc.doTunneling();
|
||
+ requests = origRequests;
|
||
}
|
||
afterConnect();
|
||
writeRequests(requests, poster);
|
||
--- ./jdk/src/share/classes/sun/net/www/protocol/ftp/FtpURLConnection.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/net/www/protocol/ftp/FtpURLConnection.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -301,7 +301,7 @@
|
||
throw new IOException(fe);
|
||
}
|
||
try {
|
||
- ftp.login(user, password.toCharArray());
|
||
+ ftp.login(user, password == null ? null : password.toCharArray());
|
||
} catch (sun.net.ftp.FtpProtocolException e) {
|
||
ftp.close();
|
||
// Backward compatibility
|
||
--- ./jdk/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -315,6 +315,7 @@
|
||
/* try auth without calling Authenticator. Used for transparent NTLM authentication */
|
||
private boolean tryTransparentNTLMServer = true;
|
||
private boolean tryTransparentNTLMProxy = true;
|
||
+ private boolean useProxyResponseCode = false;
|
||
|
||
/* Used by Windows specific code */
|
||
private Object authObj;
|
||
@@ -2032,6 +2033,14 @@
|
||
if (tryTransparentNTLMProxy) {
|
||
tryTransparentNTLMProxy =
|
||
NTLMAuthenticationProxy.proxy.supportsTransparentAuth;
|
||
+ /* If the platform supports transparent authentication
|
||
+ * then normally it's ok to do transparent auth to a proxy
|
||
+ * because we generally trust proxies (chosen by the user)
|
||
+ * But not in the case of 305 response where the server
|
||
+ * chose it. */
|
||
+ if (tryTransparentNTLMProxy && useProxyResponseCode) {
|
||
+ tryTransparentNTLMProxy = false;
|
||
+ }
|
||
}
|
||
a = null;
|
||
if (tryTransparentNTLMProxy) {
|
||
@@ -2364,6 +2373,10 @@
|
||
requests.set(0, method + " " + getRequestURI()+" " +
|
||
httpVersion, null);
|
||
connected = true;
|
||
+ // need to remember this in case NTLM proxy authentication gets
|
||
+ // used. We can't use transparent authentication when user
|
||
+ // doesn't know about proxy.
|
||
+ useProxyResponseCode = true;
|
||
} else {
|
||
// maintain previous headers, just change the name
|
||
// of the file we're getting
|
||
--- ./jdk/src/share/classes/sun/net/www/protocol/http/NegotiateAuthentication.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/net/www/protocol/http/NegotiateAuthentication.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2005, 2014, 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
|
||
@@ -32,6 +32,7 @@
|
||
import sun.net.www.HeaderParser;
|
||
import sun.misc.BASE64Decoder;
|
||
import sun.misc.BASE64Encoder;
|
||
+import sun.util.logging.PlatformLogger;
|
||
import static sun.net.www.protocol.http.AuthScheme.NEGOTIATE;
|
||
import static sun.net.www.protocol.http.AuthScheme.KERBEROS;
|
||
|
||
@@ -45,6 +46,7 @@
|
||
class NegotiateAuthentication extends AuthenticationInfo {
|
||
|
||
private static final long serialVersionUID = 100L;
|
||
+ private static final PlatformLogger logger = HttpURLConnection.getHttpLogger();
|
||
|
||
final private HttpCallerInfo hci;
|
||
|
||
@@ -80,6 +82,31 @@
|
||
}
|
||
|
||
/**
|
||
+ * Find out if the HttpCallerInfo supports Negotiate protocol.
|
||
+ * @return true if supported
|
||
+ */
|
||
+ public static boolean isSupported(HttpCallerInfo hci) {
|
||
+ ClassLoader loader = null;
|
||
+ try {
|
||
+ loader = Thread.currentThread().getContextClassLoader();
|
||
+ } catch (SecurityException se) {
|
||
+ if (logger.isLoggable(PlatformLogger.Level.FINER)) {
|
||
+ logger.finer("NegotiateAuthentication: " +
|
||
+ "Attempt to get the context class loader failed - " + se);
|
||
+ }
|
||
+ }
|
||
+
|
||
+ if (loader != null) {
|
||
+ // Lock on the class loader instance to avoid the deadlock engaging
|
||
+ // the lock in "ClassLoader.loadClass(String, boolean)" method.
|
||
+ synchronized (loader) {
|
||
+ return isSupportedImpl(hci);
|
||
+ }
|
||
+ }
|
||
+ return isSupportedImpl(hci);
|
||
+ }
|
||
+
|
||
+ /**
|
||
* Find out if the HttpCallerInfo supports Negotiate protocol. In order to
|
||
* find out yes or no, an initialization of a Negotiator object against it
|
||
* is tried. The generated object will be cached under the name of ths
|
||
@@ -90,7 +117,7 @@
|
||
*
|
||
* @return true if supported
|
||
*/
|
||
- synchronized public static boolean isSupported(HttpCallerInfo hci) {
|
||
+ private static synchronized boolean isSupportedImpl(HttpCallerInfo hci) {
|
||
if (supported == null) {
|
||
supported = new HashMap <String, Boolean>();
|
||
cache = new HashMap <String, Negotiator>();
|
||
--- ./jdk/src/share/classes/sun/rmi/transport/Transport.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/rmi/transport/Transport.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1996, 2008, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1996, 2014, 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
|
||
@@ -37,6 +37,10 @@
|
||
import java.rmi.server.RemoteServer;
|
||
import java.rmi.server.ServerNotActiveException;
|
||
import java.security.AccessControlContext;
|
||
+import java.security.AccessController;
|
||
+import java.security.Permissions;
|
||
+import java.security.PrivilegedAction;
|
||
+import java.security.ProtectionDomain;
|
||
import sun.rmi.runtime.Log;
|
||
import sun.rmi.server.Dispatcher;
|
||
import sun.rmi.server.UnicastServerRef;
|
||
@@ -67,6 +71,15 @@
|
||
/** ObjID for DGCImpl */
|
||
private static final ObjID dgcID = new ObjID(ObjID.DGC_ID);
|
||
|
||
+ /** AccessControlContext for setting context ClassLoader */
|
||
+ private static final AccessControlContext SETCCL_ACC;
|
||
+ static {
|
||
+ Permissions perms = new Permissions();
|
||
+ perms.add(new RuntimePermission("setContextClassLoader"));
|
||
+ ProtectionDomain[] pd = { new ProtectionDomain(null, perms) };
|
||
+ SETCCL_ACC = new AccessControlContext(pd);
|
||
+ }
|
||
+
|
||
/**
|
||
* Returns a <I>Channel</I> that generates connections to the
|
||
* endpoint <I>ep</I>. A Channel is an object that creates and
|
||
@@ -116,6 +129,19 @@
|
||
protected abstract void checkAcceptPermission(AccessControlContext acc);
|
||
|
||
/**
|
||
+ * Sets the context class loader for the current thread.
|
||
+ */
|
||
+ private static void setContextClassLoader(final ClassLoader ccl) {
|
||
+ AccessController.doPrivileged(new PrivilegedAction<Void> () {
|
||
+ @Override
|
||
+ public Void run() {
|
||
+ Thread.currentThread().setContextClassLoader(ccl);
|
||
+ return null;
|
||
+ }
|
||
+ }, SETCCL_ACC);
|
||
+ }
|
||
+
|
||
+ /**
|
||
* Service an incoming remote call. When a message arrives on the
|
||
* connection indicating the beginning of a remote call, the
|
||
* threads are required to call the <I>serviceCall</I> method of
|
||
@@ -163,11 +189,10 @@
|
||
target.getAccessControlContext();
|
||
ClassLoader ccl = target.getContextClassLoader();
|
||
|
||
- Thread t = Thread.currentThread();
|
||
- ClassLoader savedCcl = t.getContextClassLoader();
|
||
+ ClassLoader savedCcl = Thread.currentThread().getContextClassLoader();
|
||
|
||
try {
|
||
- t.setContextClassLoader(ccl);
|
||
+ setContextClassLoader(ccl);
|
||
currentTransport.set(this);
|
||
try {
|
||
java.security.AccessController.doPrivileged(
|
||
@@ -182,7 +207,7 @@
|
||
throw (IOException) pae.getException();
|
||
}
|
||
} finally {
|
||
- t.setContextClassLoader(savedCcl);
|
||
+ setContextClassLoader(savedCcl);
|
||
currentTransport.set(null);
|
||
}
|
||
|
||
--- ./jdk/src/share/classes/sun/rmi/transport/tcp/TCPTransport.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/rmi/transport/tcp/TCPTransport.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1996, 2013, 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
|
||
@@ -49,6 +49,9 @@
|
||
import java.rmi.server.UID;
|
||
import java.security.AccessControlContext;
|
||
import java.security.AccessController;
|
||
+import java.security.Permissions;
|
||
+import java.security.PrivilegedAction;
|
||
+import java.security.ProtectionDomain;
|
||
import java.util.ArrayList;
|
||
import java.util.LinkedList;
|
||
import java.util.List;
|
||
@@ -122,6 +125,14 @@
|
||
private static final ThreadLocal<ConnectionHandler>
|
||
threadConnectionHandler = new ThreadLocal<>();
|
||
|
||
+ /** an AccessControlContext with no permissions */
|
||
+ private static final AccessControlContext NOPERMS_ACC;
|
||
+ static {
|
||
+ Permissions perms = new Permissions();
|
||
+ ProtectionDomain[] pd = { new ProtectionDomain(null, perms) };
|
||
+ NOPERMS_ACC = new AccessControlContext(pd);
|
||
+ }
|
||
+
|
||
/** endpoints for this transport */
|
||
private final LinkedList<TCPEndpoint> epList;
|
||
/** number of objects exported on this transport */
|
||
@@ -667,7 +678,13 @@
|
||
t.setName("RMI TCP Connection(" +
|
||
connectionCount.incrementAndGet() +
|
||
")-" + remoteHost);
|
||
- run0();
|
||
+ AccessController.doPrivileged(new PrivilegedAction<Void>() {
|
||
+ @Override
|
||
+ public Void run() {
|
||
+ run0();
|
||
+ return null;
|
||
+ }
|
||
+ }, NOPERMS_ACC);
|
||
} finally {
|
||
t.setName(name);
|
||
}
|
||
--- ./jdk/src/share/classes/sun/security/jgss/GSSHeader.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/jgss/GSSHeader.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -270,6 +270,9 @@
|
||
value <<= 8;
|
||
value += 0x0ff & in.read();
|
||
}
|
||
+ if (value < 0) {
|
||
+ throw new IOException("Invalid length bytes");
|
||
+ }
|
||
}
|
||
return value;
|
||
}
|
||
--- ./jdk/src/share/classes/sun/security/jgss/GSSNameImpl.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/jgss/GSSNameImpl.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -257,6 +257,10 @@
|
||
((0xFF & bytes[pos++]) << 16) |
|
||
((0xFF & bytes[pos++]) << 8) |
|
||
(0xFF & bytes[pos++]));
|
||
+ if (mechPortionLen < 0 || pos > bytes.length - mechPortionLen) {
|
||
+ throw new GSSExceptionImpl(GSSException.BAD_NAME,
|
||
+ "Exported name mech name is corrupted!");
|
||
+ }
|
||
byte[] mechPortion = new byte[mechPortionLen];
|
||
System.arraycopy(bytes, pos, mechPortion, 0, mechPortionLen);
|
||
|
||
--- ./jdk/src/share/classes/sun/security/jgss/wrapper/GSSNameElement.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/jgss/wrapper/GSSNameElement.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -233,6 +233,9 @@
|
||
((0xFF & nameVal[pos++]) << 16) |
|
||
((0xFF & nameVal[pos++]) << 8) |
|
||
(0xFF & nameVal[pos++]));
|
||
+ if (mechPortionLen < 0) {
|
||
+ throw new GSSException(GSSException.BAD_NAME);
|
||
+ }
|
||
byte[] mechPortion = new byte[mechPortionLen];
|
||
System.arraycopy(nameVal, pos, mechPortion, 0, mechPortionLen);
|
||
return mechPortion;
|
||
--- ./jdk/src/share/classes/sun/security/krb5/internal/ccache/CCacheInputStream.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/krb5/internal/ccache/CCacheInputStream.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -123,7 +123,7 @@
|
||
} else {
|
||
type = read(4);
|
||
}
|
||
- length = read(4);
|
||
+ length = readLength4();
|
||
String[] result = new String[length + 1];
|
||
/*
|
||
* DCE includes the principal's realm in the count; the new format
|
||
@@ -132,7 +132,7 @@
|
||
if (version == KRB5_FCC_FVNO_1)
|
||
length--;
|
||
for (int i = 0; i <= length; i++) {
|
||
- namelength = read(4);
|
||
+ namelength = readLength4();
|
||
if (namelength > MAXNAMELENGTH) {
|
||
throw new IOException("Invalid name length in principal name.");
|
||
}
|
||
@@ -182,7 +182,7 @@
|
||
keyType = read(2);
|
||
if (version == KRB5_FCC_FVNO_3)
|
||
read(2); /* keytype recorded twice in fvno 3 */
|
||
- keyLen = read(4);
|
||
+ keyLen = readLength4();
|
||
byte[] bytes = new byte[keyLen];
|
||
for (int i = 0; i < keyLen; i++) {
|
||
bytes[i] = (byte)read();
|
||
@@ -208,12 +208,12 @@
|
||
|
||
HostAddress[] readAddr() throws IOException, KrbApErrException {
|
||
int numAddrs, addrType, addrLength;
|
||
- numAddrs = read(4);
|
||
+ numAddrs = readLength4();
|
||
if (numAddrs > 0) {
|
||
HostAddress[] addrs = new HostAddress[numAddrs];
|
||
for (int i = 0; i < numAddrs; i++) {
|
||
addrType = read(2);
|
||
- addrLength = read(4);
|
||
+ addrLength = readLength4();
|
||
if (!(addrLength == 4 || addrLength == 16)) {
|
||
if (DEBUG) {
|
||
System.out.println("Incorrect address format.");
|
||
@@ -232,13 +232,13 @@
|
||
|
||
AuthorizationDataEntry[] readAuth() throws IOException {
|
||
int num, adtype, adlength;
|
||
- num = read(4);
|
||
+ num = readLength4();
|
||
if (num > 0) {
|
||
AuthorizationDataEntry[] auData = new AuthorizationDataEntry[num];
|
||
byte[] data = null;
|
||
for (int i = 0; i < num; i++) {
|
||
adtype = read(2);
|
||
- adlength = read(4);
|
||
+ adlength = readLength4();
|
||
data = new byte[adlength];
|
||
for (int j = 0; j < adlength; j++) {
|
||
data[j] = (byte)read();
|
||
@@ -252,7 +252,7 @@
|
||
|
||
byte[] readData() throws IOException {
|
||
int length;
|
||
- length = read(4);
|
||
+ length = readLength4();
|
||
if (length == 0) {
|
||
return null;
|
||
} else {
|
||
--- ./jdk/src/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -154,44 +154,44 @@
|
||
throws IOException, KrbException {
|
||
primaryPrincipal = principal;
|
||
primaryRealm = principal.getRealm();
|
||
- CCacheOutputStream cos =
|
||
- new CCacheOutputStream(new FileOutputStream(name));
|
||
- version = KRB5_FCC_FVNO_3;
|
||
- cos.writeHeader(primaryPrincipal, version);
|
||
- cos.close();
|
||
+ try (FileOutputStream fos = new FileOutputStream(name);
|
||
+ CCacheOutputStream cos = new CCacheOutputStream(fos)) {
|
||
+ version = KRB5_FCC_FVNO_3;
|
||
+ cos.writeHeader(primaryPrincipal, version);
|
||
+ }
|
||
load(name);
|
||
}
|
||
|
||
synchronized void load(String name) throws IOException, KrbException {
|
||
PrincipalName p;
|
||
- CCacheInputStream cis =
|
||
- new CCacheInputStream(new FileInputStream(name));
|
||
- version = cis.readVersion();
|
||
- if (version == KRB5_FCC_FVNO_4) {
|
||
- tag = cis.readTag();
|
||
- } else {
|
||
- tag = null;
|
||
- if (version == KRB5_FCC_FVNO_1 || version == KRB5_FCC_FVNO_2) {
|
||
- cis.setNativeByteOrder();
|
||
+ try (FileInputStream fis = new FileInputStream(name);
|
||
+ CCacheInputStream cis = new CCacheInputStream(fis)) {
|
||
+ version = cis.readVersion();
|
||
+ if (version == KRB5_FCC_FVNO_4) {
|
||
+ tag = cis.readTag();
|
||
+ } else {
|
||
+ tag = null;
|
||
+ if (version == KRB5_FCC_FVNO_1 || version == KRB5_FCC_FVNO_2) {
|
||
+ cis.setNativeByteOrder();
|
||
+ }
|
||
+ }
|
||
+ p = cis.readPrincipal(version);
|
||
+
|
||
+ if (primaryPrincipal != null) {
|
||
+ if (!(primaryPrincipal.match(p))) {
|
||
+ throw new IOException("Primary principals don't match.");
|
||
+ }
|
||
+ } else
|
||
+ primaryPrincipal = p;
|
||
+ primaryRealm = primaryPrincipal.getRealm();
|
||
+ credentialsList = new Vector<Credentials>();
|
||
+ while (cis.available() > 0) {
|
||
+ Credentials cred = cis.readCred(version);
|
||
+ if (cred != null) {
|
||
+ credentialsList.addElement(cred);
|
||
+ }
|
||
}
|
||
}
|
||
- p = cis.readPrincipal(version);
|
||
-
|
||
- if (primaryPrincipal != null) {
|
||
- if (!(primaryPrincipal.match(p))) {
|
||
- throw new IOException("Primary principals don't match.");
|
||
- }
|
||
- } else
|
||
- primaryPrincipal = p;
|
||
- primaryRealm = primaryPrincipal.getRealm();
|
||
- credentialsList = new Vector<Credentials> ();
|
||
- while (cis.available() > 0) {
|
||
- Credentials cred = cis.readCred(version);
|
||
- if (cred != null) {
|
||
- credentialsList.addElement(cred);
|
||
- }
|
||
- }
|
||
- cis.close();
|
||
}
|
||
|
||
|
||
@@ -250,16 +250,16 @@
|
||
* Saves the credentials cache file to the disk.
|
||
*/
|
||
public synchronized void save() throws IOException, Asn1Exception {
|
||
- CCacheOutputStream cos
|
||
- = new CCacheOutputStream(new FileOutputStream(cacheName));
|
||
- cos.writeHeader(primaryPrincipal, version);
|
||
- Credentials[] tmp = null;
|
||
- if ((tmp = getCredsList()) != null) {
|
||
- for (int i = 0; i < tmp.length; i++) {
|
||
- cos.addCreds(tmp[i]);
|
||
+ try (FileOutputStream fos = new FileOutputStream(cacheName);
|
||
+ CCacheOutputStream cos = new CCacheOutputStream(fos)) {
|
||
+ cos.writeHeader(primaryPrincipal, version);
|
||
+ Credentials[] tmp = null;
|
||
+ if ((tmp = getCredsList()) != null) {
|
||
+ for (int i = 0; i < tmp.length; i++) {
|
||
+ cos.addCreds(tmp[i]);
|
||
+ }
|
||
}
|
||
}
|
||
- cos.close();
|
||
}
|
||
|
||
boolean match(String[] s1, String[] s2) {
|
||
--- ./jdk/src/share/classes/sun/security/krb5/internal/util/KrbDataInputStream.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/krb5/internal/util/KrbDataInputStream.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -56,15 +56,33 @@
|
||
public KrbDataInputStream(InputStream is){
|
||
super(is);
|
||
}
|
||
+
|
||
+ /**
|
||
+ * Reads a length value which is represented in 4 bytes from
|
||
+ * this input stream. The value must be positive.
|
||
+ * @return the length value represented by this byte array.
|
||
+ * @throws IOException if there are not enough bytes or it represents
|
||
+ * a negative value
|
||
+ */
|
||
+ final public int readLength4() throws IOException {
|
||
+ int len = read(4);
|
||
+ if (len < 0) {
|
||
+ throw new IOException("Invalid encoding");
|
||
+ }
|
||
+ return len;
|
||
+ }
|
||
+
|
||
/**
|
||
* Reads up to the specific number of bytes from this input stream.
|
||
* @param num the number of bytes to be read.
|
||
* @return the int value of this byte array.
|
||
- * @exception IOException.
|
||
+ * @throws IOException if there are not enough bytes
|
||
*/
|
||
- public int read(int num) throws IOException{
|
||
+ public int read(int num) throws IOException {
|
||
byte[] bytes = new byte[num];
|
||
- read(bytes, 0, num);
|
||
+ if (read(bytes, 0, num) != num) {
|
||
+ throw new IOException("Premature end of stream reached");
|
||
+ }
|
||
int result = 0;
|
||
for (int i = 0; i < num; i++) {
|
||
if (bigEndian) {
|
||
--- ./jdk/src/share/classes/sun/security/pkcs/SignerInfo.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/pkcs/SignerInfo.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -273,24 +273,6 @@
|
||
return certList;
|
||
}
|
||
|
||
- // Copied from com.sun.crypto.provider.OAEPParameters.
|
||
- private static String convertToStandardName(String internalName) {
|
||
- if (internalName.equals("SHA")) {
|
||
- return "SHA-1";
|
||
- } else if (internalName.equals("SHA224")) {
|
||
- return "SHA-224";
|
||
- } else if (internalName.equals("SHA256")) {
|
||
- return "SHA-256";
|
||
- } else if (internalName.equals("SHA384")) {
|
||
- return "SHA-384";
|
||
- } else if (internalName.equals("SHA512")) {
|
||
- return "SHA-512";
|
||
- } else {
|
||
- return internalName;
|
||
- }
|
||
- }
|
||
-
|
||
-
|
||
/* Returns null if verify fails, this signerInfo if
|
||
verify succeeds. */
|
||
SignerInfo verify(PKCS7 block, byte[] data)
|
||
@@ -330,7 +312,7 @@
|
||
return null;
|
||
|
||
MessageDigest md = MessageDigest.getInstance(
|
||
- convertToStandardName(digestAlgname));
|
||
+ AlgorithmId.getStandardDigestName(digestAlgname));
|
||
byte[] computedMessageDigest = md.digest(data);
|
||
|
||
if (messageDigest.length != computedMessageDigest.length)
|
||
--- ./jdk/src/share/classes/sun/security/provider/SecureRandom.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/provider/SecureRandom.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1998, 2014, 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
|
||
@@ -29,6 +29,7 @@
|
||
import java.security.MessageDigest;
|
||
import java.security.SecureRandomSpi;
|
||
import java.security.NoSuchAlgorithmException;
|
||
+import java.security.NoSuchProviderException;
|
||
|
||
/**
|
||
* <p>This class provides a crytpographically strong pseudo-random number
|
||
@@ -94,9 +95,19 @@
|
||
*/
|
||
private void init(byte[] seed) {
|
||
try {
|
||
- digest = MessageDigest.getInstance ("SHA");
|
||
- } catch (NoSuchAlgorithmException e) {
|
||
- throw new InternalError("internal error: SHA-1 not available.");
|
||
+ /*
|
||
+ * Use the local SUN implementation to avoid native
|
||
+ * performance overhead.
|
||
+ */
|
||
+ digest = MessageDigest.getInstance("SHA", "SUN");
|
||
+ } catch (NoSuchProviderException | NoSuchAlgorithmException e) {
|
||
+ // Fallback to any available.
|
||
+ try {
|
||
+ digest = MessageDigest.getInstance("SHA");
|
||
+ } catch (NoSuchAlgorithmException exc) {
|
||
+ throw new InternalError(
|
||
+ "internal error: SHA-1 not available.");
|
||
+ }
|
||
}
|
||
|
||
if (seed != null) {
|
||
@@ -258,9 +269,19 @@
|
||
s.defaultReadObject ();
|
||
|
||
try {
|
||
- digest = MessageDigest.getInstance ("SHA");
|
||
- } catch (NoSuchAlgorithmException e) {
|
||
- throw new InternalError("internal error: SHA-1 not available.");
|
||
+ /*
|
||
+ * Use the local SUN implementation to avoid native
|
||
+ * performance overhead.
|
||
+ */
|
||
+ digest = MessageDigest.getInstance("SHA", "SUN");
|
||
+ } catch (NoSuchProviderException | NoSuchAlgorithmException e) {
|
||
+ // Fallback to any available.
|
||
+ try {
|
||
+ digest = MessageDigest.getInstance("SHA");
|
||
+ } catch (NoSuchAlgorithmException exc) {
|
||
+ throw new InternalError(
|
||
+ "internal error: SHA-1 not available.");
|
||
+ }
|
||
}
|
||
}
|
||
}
|
||
--- ./jdk/src/share/classes/sun/security/provider/certpath/ForwardBuilder.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/provider/certpath/ForwardBuilder.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -375,20 +375,22 @@
|
||
boolean add = false;
|
||
for (AccessDescription ad : adList) {
|
||
CertStore cs = URICertStore.getInstance(ad);
|
||
- try {
|
||
- if (certs.addAll((Collection<X509Certificate>)
|
||
- cs.getCertificates(caSelector))) {
|
||
- add = true;
|
||
- if (!searchAllCertStores) {
|
||
- return true;
|
||
+ if (cs != null) {
|
||
+ try {
|
||
+ if (certs.addAll((Collection<X509Certificate>)
|
||
+ cs.getCertificates(caSelector))) {
|
||
+ add = true;
|
||
+ if (!searchAllCertStores) {
|
||
+ return true;
|
||
+ }
|
||
}
|
||
+ } catch (CertStoreException cse) {
|
||
+ if (debug != null) {
|
||
+ debug.println("exception getting certs from CertStore:");
|
||
+ cse.printStackTrace();
|
||
+ }
|
||
+ continue;
|
||
}
|
||
- } catch (CertStoreException cse) {
|
||
- if (debug != null) {
|
||
- debug.println("exception getting certs from CertStore:");
|
||
- cse.printStackTrace();
|
||
- }
|
||
- continue;
|
||
}
|
||
}
|
||
return add;
|
||
--- ./jdk/src/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -234,10 +234,6 @@
|
||
// check trusted certificate's subject
|
||
issuerSelector.setSubject(firstCert.getIssuerX500Principal());
|
||
|
||
- // check the validity period
|
||
- issuerSelector.setValidityPeriod(firstCert.getNotBefore(),
|
||
- firstCert.getNotAfter());
|
||
-
|
||
/*
|
||
* Facilitate certification path construction with authority
|
||
* key identifier and subject key identifier.
|
||
--- ./jdk/src/share/classes/sun/security/smartcardio/CardImpl.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/smartcardio/CardImpl.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2005, 2014, 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
|
||
@@ -26,9 +26,9 @@
|
||
package sun.security.smartcardio;
|
||
|
||
import java.nio.ByteBuffer;
|
||
-
|
||
+import java.security.AccessController;
|
||
+import java.security.PrivilegedAction;
|
||
import javax.smartcardio.*;
|
||
-
|
||
import static sun.security.smartcardio.PCSC.*;
|
||
|
||
/**
|
||
@@ -62,6 +62,19 @@
|
||
// thread holding exclusive access to the card, or null
|
||
private volatile Thread exclusiveThread;
|
||
|
||
+ // used for platform specific logic
|
||
+ private static final boolean isWindows;
|
||
+
|
||
+ static {
|
||
+ final String osName = AccessController.doPrivileged(
|
||
+ new PrivilegedAction<String>() {
|
||
+ @Override public String run() {
|
||
+ return System.getProperty("os.name");
|
||
+ }
|
||
+ });
|
||
+ isWindows = osName.startsWith("Windows");
|
||
+ }
|
||
+
|
||
CardImpl(TerminalImpl terminal, String protocol) throws PCSCException {
|
||
this.terminal = terminal;
|
||
int sharingMode = SCARD_SHARE_SHARED;
|
||
@@ -74,7 +87,12 @@
|
||
connectProtocol = SCARD_PROTOCOL_T1;
|
||
} else if (protocol.equalsIgnoreCase("direct")) {
|
||
// testing
|
||
- connectProtocol = 0;
|
||
+
|
||
+ // MSDN states that the preferred protocol can be zero, but doesn't
|
||
+ // specify whether other values are allowed.
|
||
+ // pcsc-lite implementation expects the preferred protocol to be non zero.
|
||
+ connectProtocol = isWindows ? 0 : SCARD_PROTOCOL_RAW;
|
||
+
|
||
sharingMode = SCARD_SHARE_DIRECT;
|
||
} else {
|
||
throw new IllegalArgumentException("Unsupported protocol " + protocol);
|
||
@@ -237,6 +255,12 @@
|
||
}
|
||
}
|
||
|
||
+ private static final boolean invertReset =
|
||
+ Boolean.parseBoolean(
|
||
+ java.security.AccessController.doPrivileged(
|
||
+ new sun.security.action.GetPropertyAction(
|
||
+ "sun.security.smartcardio.invertCardReset", "true")));
|
||
+
|
||
public void disconnect(boolean reset) throws CardException {
|
||
if (reset) {
|
||
checkSecurity("reset");
|
||
@@ -245,8 +269,12 @@
|
||
return;
|
||
}
|
||
checkExclusive();
|
||
+ // to preserve old behaviour, don't change flag until here
|
||
+ if (invertReset) {
|
||
+ reset = !reset;
|
||
+ }
|
||
try {
|
||
- SCardDisconnect(cardId, (reset ? SCARD_LEAVE_CARD : SCARD_RESET_CARD));
|
||
+ SCardDisconnect(cardId, (reset ? SCARD_RESET_CARD : SCARD_LEAVE_CARD));
|
||
} catch (PCSCException e) {
|
||
throw new CardException("disconnect() failed", e);
|
||
} finally {
|
||
--- ./jdk/src/share/classes/sun/security/ssl/CipherSuite.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/ssl/CipherSuite.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2002, 2014, 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
|
||
@@ -82,6 +82,10 @@
|
||
private final static boolean ALLOW_ECC = Debug.getBooleanProperty
|
||
("com.sun.net.ssl.enableECC", true);
|
||
|
||
+ // preserve the old order of RC4 preference
|
||
+ private final static boolean PRESERVE_RC4 = Debug.getBooleanProperty
|
||
+ ("jdk.tls.preserveRC4CipherSuites", false);
|
||
+
|
||
// Map Integer(id) -> CipherSuite
|
||
// contains all known CipherSuites
|
||
private final static Map<Integer,CipherSuite> idMap;
|
||
@@ -963,16 +967,18 @@
|
||
add("TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
|
||
0x0032, --p, K_DHE_DSS, B_AES_128, T);
|
||
|
||
- add("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
|
||
- 0xC007, --p, K_ECDHE_ECDSA, B_RC4_128, N);
|
||
- add("TLS_ECDHE_RSA_WITH_RC4_128_SHA",
|
||
- 0xC011, --p, K_ECDHE_RSA, B_RC4_128, N);
|
||
- add("SSL_RSA_WITH_RC4_128_SHA",
|
||
- 0x0005, --p, K_RSA, B_RC4_128, N);
|
||
- add("TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
|
||
- 0xC002, --p, K_ECDH_ECDSA, B_RC4_128, N);
|
||
- add("TLS_ECDH_RSA_WITH_RC4_128_SHA",
|
||
- 0xC00C, --p, K_ECDH_RSA, B_RC4_128, N);
|
||
+ if (PRESERVE_RC4) {
|
||
+ add("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
|
||
+ 0xC007, --p, K_ECDHE_ECDSA, B_RC4_128, N);
|
||
+ add("TLS_ECDHE_RSA_WITH_RC4_128_SHA",
|
||
+ 0xC011, --p, K_ECDHE_RSA, B_RC4_128, N);
|
||
+ add("SSL_RSA_WITH_RC4_128_SHA",
|
||
+ 0x0005, --p, K_RSA, B_RC4_128, N);
|
||
+ add("TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
|
||
+ 0xC002, --p, K_ECDH_ECDSA, B_RC4_128, N);
|
||
+ add("TLS_ECDH_RSA_WITH_RC4_128_SHA",
|
||
+ 0xC00C, --p, K_ECDH_RSA, B_RC4_128, N);
|
||
+ }
|
||
|
||
add("TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA",
|
||
0xC008, --p, K_ECDHE_ECDSA, B_3DES, T);
|
||
@@ -989,6 +995,18 @@
|
||
add("SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA",
|
||
0x0013, --p, K_DHE_DSS, B_3DES, N);
|
||
|
||
+ if (!PRESERVE_RC4) {
|
||
+ add("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
|
||
+ 0xC007, --p, K_ECDHE_ECDSA, B_RC4_128, N);
|
||
+ add("TLS_ECDHE_RSA_WITH_RC4_128_SHA",
|
||
+ 0xC011, --p, K_ECDHE_RSA, B_RC4_128, N);
|
||
+ add("SSL_RSA_WITH_RC4_128_SHA",
|
||
+ 0x0005, --p, K_RSA, B_RC4_128, N);
|
||
+ add("TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
|
||
+ 0xC002, --p, K_ECDH_ECDSA, B_RC4_128, N);
|
||
+ add("TLS_ECDH_RSA_WITH_RC4_128_SHA",
|
||
+ 0xC00C, --p, K_ECDH_RSA, B_RC4_128, N);
|
||
+ }
|
||
add("SSL_RSA_WITH_RC4_128_MD5",
|
||
0x0004, --p, K_RSA, B_RC4_128, N);
|
||
|
||
@@ -1008,7 +1026,7 @@
|
||
* 2. If a cipher suite has been obsoleted, we put it at the end of
|
||
* the list.
|
||
* 3. Prefer the stronger bulk cipher, in the order of AES_256,
|
||
- * AES_128, RC-4, 3DES-EDE, DES, RC4_40, DES40, NULL.
|
||
+ * AES_128, 3DES-EDE, RC-4, DES, DES40, RC4_40, NULL.
|
||
* 4. Prefer the stronger MAC algorithm, in the order of SHA384,
|
||
* SHA256, SHA, MD5.
|
||
* 5. Prefer the better performance of key exchange and digital
|
||
@@ -1031,15 +1049,51 @@
|
||
add("TLS_DH_anon_WITH_AES_128_CBC_SHA",
|
||
0x0034, --p, K_DH_ANON, B_AES_128, N);
|
||
|
||
+ if (!PRESERVE_RC4) {
|
||
+ add("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA",
|
||
+ 0xC017, --p, K_ECDH_ANON, B_3DES, T);
|
||
+ add("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA",
|
||
+ 0x001b, --p, K_DH_ANON, B_3DES, N);
|
||
+ }
|
||
+
|
||
add("TLS_ECDH_anon_WITH_RC4_128_SHA",
|
||
0xC016, --p, K_ECDH_ANON, B_RC4_128, N);
|
||
add("SSL_DH_anon_WITH_RC4_128_MD5",
|
||
0x0018, --p, K_DH_ANON, B_RC4_128, N);
|
||
|
||
- add("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA",
|
||
- 0xC017, --p, K_ECDH_ANON, B_3DES, T);
|
||
- add("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA",
|
||
- 0x001b, --p, K_DH_ANON, B_3DES, N);
|
||
+ if (!PRESERVE_RC4) {
|
||
+ // weak cipher suites obsoleted in TLS 1.2
|
||
+ add("SSL_RSA_WITH_DES_CBC_SHA",
|
||
+ 0x0009, --p, K_RSA, B_DES, N, tls12);
|
||
+ add("SSL_DHE_RSA_WITH_DES_CBC_SHA",
|
||
+ 0x0015, --p, K_DHE_RSA, B_DES, N, tls12);
|
||
+ add("SSL_DHE_DSS_WITH_DES_CBC_SHA",
|
||
+ 0x0012, --p, K_DHE_DSS, B_DES, N, tls12);
|
||
+ add("SSL_DH_anon_WITH_DES_CBC_SHA",
|
||
+ 0x001a, --p, K_DH_ANON, B_DES, N, tls12);
|
||
+
|
||
+ // weak cipher suites obsoleted in TLS 1.1
|
||
+ add("SSL_RSA_EXPORT_WITH_RC4_40_MD5",
|
||
+ 0x0003, --p, K_RSA_EXPORT, B_RC4_40, N, tls11);
|
||
+ add("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5",
|
||
+ 0x0017, --p, K_DH_ANON, B_RC4_40, N, tls11);
|
||
+
|
||
+ add("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
|
||
+ 0x0008, --p, K_RSA_EXPORT, B_DES_40, N, tls11);
|
||
+ add("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
|
||
+ 0x0014, --p, K_DHE_RSA, B_DES_40, N, tls11);
|
||
+ add("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA",
|
||
+ 0x0011, --p, K_DHE_DSS, B_DES_40, N, tls11);
|
||
+ add("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
|
||
+ 0x0019, --p, K_DH_ANON, B_DES_40, N, tls11);
|
||
+ }
|
||
+
|
||
+ if (PRESERVE_RC4) {
|
||
+ add("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA",
|
||
+ 0xC017, --p, K_ECDH_ANON, B_3DES, T);
|
||
+ add("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA",
|
||
+ 0x001b, --p, K_DH_ANON, B_3DES, N);
|
||
+ }
|
||
|
||
add("TLS_RSA_WITH_NULL_SHA256",
|
||
0x003b, --p, K_RSA, B_NULL, N, max, tls12, P_SHA256);
|
||
@@ -1058,52 +1112,70 @@
|
||
add("SSL_RSA_WITH_NULL_MD5",
|
||
0x0001, --p, K_RSA, B_NULL, N);
|
||
|
||
- // weak cipher suites obsoleted in TLS 1.2
|
||
- add("SSL_RSA_WITH_DES_CBC_SHA",
|
||
- 0x0009, --p, K_RSA, B_DES, N, tls12);
|
||
- add("SSL_DHE_RSA_WITH_DES_CBC_SHA",
|
||
- 0x0015, --p, K_DHE_RSA, B_DES, N, tls12);
|
||
- add("SSL_DHE_DSS_WITH_DES_CBC_SHA",
|
||
- 0x0012, --p, K_DHE_DSS, B_DES, N, tls12);
|
||
- add("SSL_DH_anon_WITH_DES_CBC_SHA",
|
||
- 0x001a, --p, K_DH_ANON, B_DES, N, tls12);
|
||
+ if (PRESERVE_RC4) {
|
||
+ // weak cipher suites obsoleted in TLS 1.2
|
||
+ add("SSL_RSA_WITH_DES_CBC_SHA",
|
||
+ 0x0009, --p, K_RSA, B_DES, N, tls12);
|
||
+ add("SSL_DHE_RSA_WITH_DES_CBC_SHA",
|
||
+ 0x0015, --p, K_DHE_RSA, B_DES, N, tls12);
|
||
+ add("SSL_DHE_DSS_WITH_DES_CBC_SHA",
|
||
+ 0x0012, --p, K_DHE_DSS, B_DES, N, tls12);
|
||
+ add("SSL_DH_anon_WITH_DES_CBC_SHA",
|
||
+ 0x001a, --p, K_DH_ANON, B_DES, N, tls12);
|
||
|
||
- // weak cipher suites obsoleted in TLS 1.1
|
||
- add("SSL_RSA_EXPORT_WITH_RC4_40_MD5",
|
||
- 0x0003, --p, K_RSA_EXPORT, B_RC4_40, N, tls11);
|
||
- add("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5",
|
||
- 0x0017, --p, K_DH_ANON, B_RC4_40, N, tls11);
|
||
+ // weak cipher suites obsoleted in TLS 1.1
|
||
+ add("SSL_RSA_EXPORT_WITH_RC4_40_MD5",
|
||
+ 0x0003, --p, K_RSA_EXPORT, B_RC4_40, N, tls11);
|
||
+ add("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5",
|
||
+ 0x0017, --p, K_DH_ANON, B_RC4_40, N, tls11);
|
||
|
||
- add("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
|
||
- 0x0008, --p, K_RSA_EXPORT, B_DES_40, N, tls11);
|
||
- add("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
|
||
- 0x0014, --p, K_DHE_RSA, B_DES_40, N, tls11);
|
||
- add("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA",
|
||
- 0x0011, --p, K_DHE_DSS, B_DES_40, N, tls11);
|
||
- add("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
|
||
- 0x0019, --p, K_DH_ANON, B_DES_40, N, tls11);
|
||
+ add("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
|
||
+ 0x0008, --p, K_RSA_EXPORT, B_DES_40, N, tls11);
|
||
+ add("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
|
||
+ 0x0014, --p, K_DHE_RSA, B_DES_40, N, tls11);
|
||
+ add("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA",
|
||
+ 0x0011, --p, K_DHE_DSS, B_DES_40, N, tls11);
|
||
+ add("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
|
||
+ 0x0019, --p, K_DH_ANON, B_DES_40, N, tls11);
|
||
+ }
|
||
|
||
// Supported Kerberos ciphersuites from RFC2712
|
||
+ if (!PRESERVE_RC4) {
|
||
+ add("TLS_KRB5_WITH_3DES_EDE_CBC_SHA",
|
||
+ 0x001f, --p, K_KRB5, B_3DES, N);
|
||
+ add("TLS_KRB5_WITH_3DES_EDE_CBC_MD5",
|
||
+ 0x0023, --p, K_KRB5, B_3DES, N);
|
||
+ }
|
||
add("TLS_KRB5_WITH_RC4_128_SHA",
|
||
0x0020, --p, K_KRB5, B_RC4_128, N);
|
||
add("TLS_KRB5_WITH_RC4_128_MD5",
|
||
0x0024, --p, K_KRB5, B_RC4_128, N);
|
||
- add("TLS_KRB5_WITH_3DES_EDE_CBC_SHA",
|
||
- 0x001f, --p, K_KRB5, B_3DES, N);
|
||
- add("TLS_KRB5_WITH_3DES_EDE_CBC_MD5",
|
||
- 0x0023, --p, K_KRB5, B_3DES, N);
|
||
+ if (PRESERVE_RC4) {
|
||
+ add("TLS_KRB5_WITH_3DES_EDE_CBC_SHA",
|
||
+ 0x001f, --p, K_KRB5, B_3DES, N);
|
||
+ add("TLS_KRB5_WITH_3DES_EDE_CBC_MD5",
|
||
+ 0x0023, --p, K_KRB5, B_3DES, N);
|
||
+ }
|
||
add("TLS_KRB5_WITH_DES_CBC_SHA",
|
||
0x001e, --p, K_KRB5, B_DES, N, tls12);
|
||
add("TLS_KRB5_WITH_DES_CBC_MD5",
|
||
0x0022, --p, K_KRB5, B_DES, N, tls12);
|
||
+ if (!PRESERVE_RC4) {
|
||
+ add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA",
|
||
+ 0x0026, --p, K_KRB5_EXPORT, B_DES_40, N, tls11);
|
||
+ add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5",
|
||
+ 0x0029, --p, K_KRB5_EXPORT, B_DES_40, N, tls11);
|
||
+ }
|
||
add("TLS_KRB5_EXPORT_WITH_RC4_40_SHA",
|
||
0x0028, --p, K_KRB5_EXPORT, B_RC4_40, N, tls11);
|
||
add("TLS_KRB5_EXPORT_WITH_RC4_40_MD5",
|
||
0x002b, --p, K_KRB5_EXPORT, B_RC4_40, N, tls11);
|
||
- add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA",
|
||
- 0x0026, --p, K_KRB5_EXPORT, B_DES_40, N, tls11);
|
||
- add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5",
|
||
- 0x0029, --p, K_KRB5_EXPORT, B_DES_40, N, tls11);
|
||
+ if (PRESERVE_RC4) {
|
||
+ add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA",
|
||
+ 0x0026, --p, K_KRB5_EXPORT, B_DES_40, N, tls11);
|
||
+ add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5",
|
||
+ 0x0029, --p, K_KRB5_EXPORT, B_DES_40, N, tls11);
|
||
+ }
|
||
|
||
/*
|
||
* Other values from the TLS Cipher Suite Registry, as of August 2010.
|
||
--- ./jdk/src/share/classes/sun/security/ssl/ClientHandshaker.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/ssl/ClientHandshaker.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -342,6 +342,13 @@
|
||
break;
|
||
|
||
case HandshakeMessage.ht_finished:
|
||
+ // A ChangeCipherSpec record must have been received prior to
|
||
+ // reception of the Finished message (RFC 5246, 7.4.9).
|
||
+ if (!receivedChangeCipherSpec()) {
|
||
+ fatalSE(Alerts.alert_handshake_failure,
|
||
+ "Received Finished message before ChangeCipherSpec");
|
||
+ }
|
||
+
|
||
this.serverFinished(
|
||
new Finished(protocolVersion, input, cipherSuite));
|
||
break;
|
||
--- ./jdk/src/share/classes/sun/security/ssl/DHCrypt.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/ssl/DHCrypt.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1996, 2014, 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
|
||
@@ -188,7 +188,7 @@
|
||
* the same size as the Diffie-Hellman modulus.
|
||
*/
|
||
SecretKey getAgreedSecret(BigInteger peerPublicValue,
|
||
- boolean keyIsValidated) throws IOException {
|
||
+ boolean keyIsValidated) throws SSLHandshakeException {
|
||
try {
|
||
KeyFactory kf = JsseJce.getKeyFactory("DiffieHellman");
|
||
DHPublicKeySpec spec =
|
||
@@ -211,7 +211,8 @@
|
||
ka.doPhase(publicKey, true);
|
||
return ka.generateSecret("TlsPremasterSecret");
|
||
} catch (GeneralSecurityException e) {
|
||
- throw new RuntimeException("Could not generate secret", e);
|
||
+ throw (SSLHandshakeException) new SSLHandshakeException(
|
||
+ "Could not generate secret").initCause(e);
|
||
}
|
||
}
|
||
|
||
--- ./jdk/src/share/classes/sun/security/ssl/ECDHCrypt.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/ssl/ECDHCrypt.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2006, 2014, 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
|
||
@@ -32,6 +32,7 @@
|
||
import javax.crypto.SecretKey;
|
||
import javax.crypto.KeyAgreement;
|
||
import javax.crypto.spec.*;
|
||
+import javax.net.ssl.SSLHandshakeException;
|
||
|
||
/**
|
||
* Helper class for the ECDH key exchange. It generates the appropriate
|
||
@@ -89,19 +90,20 @@
|
||
}
|
||
|
||
// called by ClientHandshaker with either the server's static or ephemeral public key
|
||
- SecretKey getAgreedSecret(PublicKey peerPublicKey) {
|
||
+ SecretKey getAgreedSecret(PublicKey peerPublicKey) throws SSLHandshakeException {
|
||
try {
|
||
KeyAgreement ka = JsseJce.getKeyAgreement("ECDH");
|
||
ka.init(privateKey);
|
||
ka.doPhase(peerPublicKey, true);
|
||
return ka.generateSecret("TlsPremasterSecret");
|
||
} catch (GeneralSecurityException e) {
|
||
- throw new RuntimeException("Could not generate secret", e);
|
||
+ throw (SSLHandshakeException) new SSLHandshakeException(
|
||
+ "Could not generate secret").initCause(e);
|
||
}
|
||
}
|
||
|
||
// called by ServerHandshaker
|
||
- SecretKey getAgreedSecret(byte[] encodedPoint) {
|
||
+ SecretKey getAgreedSecret(byte[] encodedPoint) throws SSLHandshakeException {
|
||
try {
|
||
ECParameterSpec params = publicKey.getParams();
|
||
ECPoint point = JsseJce.decodePoint(encodedPoint, params.getCurve());
|
||
@@ -109,10 +111,9 @@
|
||
ECPublicKeySpec spec = new ECPublicKeySpec(point, params);
|
||
PublicKey peerPublicKey = kf.generatePublic(spec);
|
||
return getAgreedSecret(peerPublicKey);
|
||
- } catch (GeneralSecurityException e) {
|
||
- throw new RuntimeException("Could not generate secret", e);
|
||
- } catch (java.io.IOException e) {
|
||
- throw new RuntimeException("Could not generate secret", e);
|
||
+ } catch (GeneralSecurityException | java.io.IOException e) {
|
||
+ throw (SSLHandshakeException) new SSLHandshakeException(
|
||
+ "Could not generate secret").initCause(e);
|
||
}
|
||
}
|
||
|
||
--- ./jdk/src/share/classes/sun/security/ssl/Handshaker.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/ssl/Handshaker.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -65,27 +65,27 @@
|
||
ProtocolVersion protocolVersion;
|
||
|
||
// the currently active protocol version during a renegotiation
|
||
- ProtocolVersion activeProtocolVersion;
|
||
+ ProtocolVersion activeProtocolVersion;
|
||
|
||
// security parameters for secure renegotiation.
|
||
- boolean secureRenegotiation;
|
||
- byte[] clientVerifyData;
|
||
- byte[] serverVerifyData;
|
||
+ boolean secureRenegotiation;
|
||
+ byte[] clientVerifyData;
|
||
+ byte[] serverVerifyData;
|
||
|
||
// Is it an initial negotiation or a renegotiation?
|
||
- boolean isInitialHandshake;
|
||
+ boolean isInitialHandshake;
|
||
|
||
// List of enabled protocols
|
||
- private ProtocolList enabledProtocols;
|
||
+ private ProtocolList enabledProtocols;
|
||
|
||
// List of enabled CipherSuites
|
||
- private CipherSuiteList enabledCipherSuites;
|
||
+ private CipherSuiteList enabledCipherSuites;
|
||
|
||
// The endpoint identification protocol
|
||
- String identificationProtocol;
|
||
+ String identificationProtocol;
|
||
|
||
// The cryptographic algorithm constraints
|
||
- private AlgorithmConstraints algorithmConstraints = null;
|
||
+ private AlgorithmConstraints algorithmConstraints = null;
|
||
|
||
// Local supported signature and algorithms
|
||
Collection<SignatureAndHashAlgorithm> localSupportedSignAlgs;
|
||
@@ -94,15 +94,13 @@
|
||
Collection<SignatureAndHashAlgorithm> peerSupportedSignAlgs;
|
||
|
||
/*
|
||
-
|
||
- /*
|
||
* List of active protocols
|
||
*
|
||
* Active protocols is a subset of enabled protocols, and will
|
||
* contain only those protocols that have vaild cipher suites
|
||
* enabled.
|
||
*/
|
||
- private ProtocolList activeProtocols;
|
||
+ private ProtocolList activeProtocols;
|
||
|
||
/*
|
||
* List of active cipher suites
|
||
@@ -110,33 +108,37 @@
|
||
* Active cipher suites is a subset of enabled cipher suites, and will
|
||
* contain only those cipher suites available for the active protocols.
|
||
*/
|
||
- private CipherSuiteList activeCipherSuites;
|
||
+ private CipherSuiteList activeCipherSuites;
|
||
|
||
- private boolean isClient;
|
||
- private boolean needCertVerify;
|
||
+ private boolean isClient;
|
||
+ private boolean needCertVerify;
|
||
|
||
- SSLSocketImpl conn = null;
|
||
- SSLEngineImpl engine = null;
|
||
+ SSLSocketImpl conn = null;
|
||
+ SSLEngineImpl engine = null;
|
||
|
||
- HandshakeHash handshakeHash;
|
||
- HandshakeInStream input;
|
||
- HandshakeOutStream output;
|
||
- int state;
|
||
- SSLContextImpl sslContext;
|
||
- RandomCookie clnt_random, svr_random;
|
||
- SSLSessionImpl session;
|
||
+ HandshakeHash handshakeHash;
|
||
+ HandshakeInStream input;
|
||
+ HandshakeOutStream output;
|
||
+ int state;
|
||
+ SSLContextImpl sslContext;
|
||
+ RandomCookie clnt_random, svr_random;
|
||
+ SSLSessionImpl session;
|
||
|
||
// current CipherSuite. Never null, initially SSL_NULL_WITH_NULL_NULL
|
||
- CipherSuite cipherSuite;
|
||
+ CipherSuite cipherSuite;
|
||
|
||
// current key exchange. Never null, initially K_NULL
|
||
- KeyExchange keyExchange;
|
||
+ KeyExchange keyExchange;
|
||
|
||
- /* True if this session is being resumed (fast handshake) */
|
||
- boolean resumingSession;
|
||
+ // True if this session is being resumed (fast handshake)
|
||
+ boolean resumingSession;
|
||
|
||
- /* True if it's OK to start a new SSL session */
|
||
- boolean enableNewSession;
|
||
+ // True if it's OK to start a new SSL session
|
||
+ boolean enableNewSession;
|
||
+
|
||
+ // True if session keys have been calculated and the caller may receive
|
||
+ // and process a ChangeCipherSpec message
|
||
+ private boolean sessKeysCalculated;
|
||
|
||
// Temporary storage for the individual keys. Set by
|
||
// calculateConnectionKeys() and cleared once the ciphers are
|
||
@@ -161,7 +163,7 @@
|
||
// here instead of using this lock. Consider changing.
|
||
private Object thrownLock = new Object();
|
||
|
||
- /* Class and subclass dynamic debugging support */
|
||
+ // Class and subclass dynamic debugging support
|
||
static final Debug debug = Debug.getInstance("ssl");
|
||
|
||
// By default, disable the unsafe legacy session renegotiation
|
||
@@ -228,6 +230,7 @@
|
||
this.serverVerifyData = serverVerifyData;
|
||
enableNewSession = true;
|
||
invalidated = false;
|
||
+ sessKeysCalculated = false;
|
||
|
||
setCipherSuite(CipherSuite.C_NULL);
|
||
setEnabledProtocols(enabledProtocols);
|
||
@@ -348,6 +351,14 @@
|
||
}
|
||
}
|
||
|
||
+ final boolean receivedChangeCipherSpec() {
|
||
+ if (conn != null) {
|
||
+ return conn.receivedChangeCipherSpec();
|
||
+ } else {
|
||
+ return engine.receivedChangeCipherSpec();
|
||
+ }
|
||
+ }
|
||
+
|
||
String getEndpointIdentificationAlgorithmSE() {
|
||
SSLParameters paras;
|
||
if (conn != null) {
|
||
@@ -456,7 +467,9 @@
|
||
|
||
if (activeProtocols.collection().isEmpty() ||
|
||
activeProtocols.max.v == ProtocolVersion.NONE.v) {
|
||
- throw new SSLHandshakeException("No appropriate protocol");
|
||
+ throw new SSLHandshakeException(
|
||
+ "No appropriate protocol (protocol is disabled or " +
|
||
+ "cipher suites are inappropriate)");
|
||
}
|
||
|
||
if (activeCipherSuites == null) {
|
||
@@ -625,14 +638,24 @@
|
||
ProtocolList getActiveProtocols() {
|
||
if (activeProtocols == null) {
|
||
ArrayList<ProtocolVersion> protocols = new ArrayList<>(4);
|
||
+ EnumSet<CryptoPrimitive> cryptoPrimitives =
|
||
+ EnumSet.<CryptoPrimitive>of(CryptoPrimitive.KEY_AGREEMENT);
|
||
for (ProtocolVersion protocol : enabledProtocols.collection()) {
|
||
+ if (!algorithmConstraints.permits(
|
||
+ cryptoPrimitives, protocol.name, null)) {
|
||
+ if (debug != null && Debug.isOn("verbose")) {
|
||
+ System.out.println(
|
||
+ "Ignoring disabled protocol: " + protocol);
|
||
+ }
|
||
+
|
||
+ continue;
|
||
+ }
|
||
boolean found = false;
|
||
for (CipherSuite suite : enabledCipherSuites.collection()) {
|
||
if (suite.isAvailable() && suite.obsoleted > protocol.v &&
|
||
suite.supported <= protocol.v) {
|
||
if (algorithmConstraints.permits(
|
||
- EnumSet.of(CryptoPrimitive.KEY_AGREEMENT),
|
||
- suite.name, null)) {
|
||
+ cryptoPrimitives, suite.name, null)) {
|
||
protocols.add(protocol);
|
||
found = true;
|
||
break;
|
||
@@ -1140,6 +1163,10 @@
|
||
throw new ProviderException(e);
|
||
}
|
||
|
||
+ // Mark a flag that allows outside entities (like SSLSocket/SSLEngine)
|
||
+ // determine if a ChangeCipherSpec message could be processed.
|
||
+ sessKeysCalculated = true;
|
||
+
|
||
//
|
||
// Dump the connection keys as they're generated.
|
||
//
|
||
@@ -1190,6 +1217,15 @@
|
||
}
|
||
}
|
||
|
||
+ /**
|
||
+ * Return whether or not the Handshaker has derived session keys for
|
||
+ * this handshake. This is used for determining readiness to process
|
||
+ * an incoming ChangeCipherSpec message.
|
||
+ */
|
||
+ boolean sessionKeysCalculated() {
|
||
+ return sessKeysCalculated;
|
||
+ }
|
||
+
|
||
private static void printHex(HexDumpEncoder dump, byte[] bytes) {
|
||
if (bytes == null) {
|
||
System.out.println("(key bytes not available)");
|
||
--- ./jdk/src/share/classes/sun/security/ssl/ProtocolVersion.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/ssl/ProtocolVersion.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -25,6 +25,9 @@
|
||
|
||
package sun.security.ssl;
|
||
|
||
+import java.util.*;
|
||
+import java.security.CryptoPrimitive;
|
||
+
|
||
/**
|
||
* Type safe enum for an SSL/TLS protocol version. Instances are obtained
|
||
* using the static factory methods or by referencing the static members
|
||
@@ -86,6 +89,11 @@
|
||
// Default version for hello messages (SSLv2Hello)
|
||
final static ProtocolVersion DEFAULT_HELLO = FIPS ? TLS10 : SSL30;
|
||
|
||
+ // Available protocols
|
||
+ //
|
||
+ // Including all supported protocols except the disabled ones.
|
||
+ final static Set<ProtocolVersion> availableProtocols;
|
||
+
|
||
// version in 16 bit MSB format as it appears in records and
|
||
// messages, i.e. 0x0301 for TLS 1.0
|
||
public final int v;
|
||
@@ -96,6 +104,25 @@
|
||
// name used in JSSE (e.g. TLSv1 for TLS 1.0)
|
||
final String name;
|
||
|
||
+ // Initialize the available protocols.
|
||
+ static {
|
||
+ Set<ProtocolVersion> protocols = new HashSet<>(5);
|
||
+
|
||
+ ProtocolVersion[] pvs = new ProtocolVersion[] {
|
||
+ SSL20Hello, SSL30, TLS10, TLS11, TLS12};
|
||
+ EnumSet<CryptoPrimitive> cryptoPrimitives =
|
||
+ EnumSet.<CryptoPrimitive>of(CryptoPrimitive.KEY_AGREEMENT);
|
||
+ for (ProtocolVersion p : pvs) {
|
||
+ if (SSLAlgorithmConstraints.DEFAULT_SSL_ONLY.permits(
|
||
+ cryptoPrimitives, p.name, null)) {
|
||
+ protocols.add(p);
|
||
+ }
|
||
+ }
|
||
+
|
||
+ availableProtocols =
|
||
+ Collections.<ProtocolVersion>unmodifiableSet(protocols);
|
||
+ }
|
||
+
|
||
// private
|
||
private ProtocolVersion(int v, String name) {
|
||
this.v = v;
|
||
--- ./jdk/src/share/classes/sun/security/ssl/SSLAlgorithmConstraints.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/ssl/SSLAlgorithmConstraints.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -55,6 +55,14 @@
|
||
|
||
private boolean enabledX509DisabledAlgConstraints = true;
|
||
|
||
+ // the default algorithm constraints
|
||
+ final static AlgorithmConstraints DEFAULT =
|
||
+ new SSLAlgorithmConstraints(null);
|
||
+
|
||
+ // the default SSL only algorithm constraints
|
||
+ final static AlgorithmConstraints DEFAULT_SSL_ONLY =
|
||
+ new SSLAlgorithmConstraints((SSLSocket)null, false);
|
||
+
|
||
SSLAlgorithmConstraints(AlgorithmConstraints algorithmConstraints) {
|
||
userAlgConstraints = algorithmConstraints;
|
||
}
|
||
--- ./jdk/src/share/classes/sun/security/ssl/SSLContextImpl.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/ssl/SSLContextImpl.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -51,10 +51,6 @@
|
||
private X509TrustManager trustManager;
|
||
private SecureRandom secureRandom;
|
||
|
||
- // The default algrithm constraints
|
||
- private AlgorithmConstraints defaultAlgorithmConstraints =
|
||
- new SSLAlgorithmConstraints(null);
|
||
-
|
||
// supported and default protocols
|
||
private ProtocolList defaultServerProtocolList;
|
||
private ProtocolList defaultClientProtocolList;
|
||
@@ -342,7 +338,7 @@
|
||
if (suite.isAvailable() &&
|
||
suite.obsoleted > protocols.min.v &&
|
||
suite.supported <= protocols.max.v) {
|
||
- if (defaultAlgorithmConstraints.permits(
|
||
+ if (SSLAlgorithmConstraints.DEFAULT.permits(
|
||
EnumSet.of(CryptoPrimitive.KEY_AGREEMENT),
|
||
suite.name, null)) {
|
||
suites.add(suite);
|
||
@@ -384,6 +380,22 @@
|
||
}
|
||
}
|
||
|
||
+ static String[] getAvailableProtocols(
|
||
+ ProtocolVersion[] protocolCandidates) {
|
||
+
|
||
+ List<String> availableProtocols = Collections.<String>emptyList();
|
||
+ if (protocolCandidates != null && protocolCandidates.length != 0) {
|
||
+ availableProtocols = new ArrayList<>(protocolCandidates.length);
|
||
+ for (ProtocolVersion p : protocolCandidates) {
|
||
+ if (ProtocolVersion.availableProtocols.contains(p)) {
|
||
+ availableProtocols.add(p.name);
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+
|
||
+ return availableProtocols.toArray(new String[0]);
|
||
+ }
|
||
+
|
||
/*
|
||
* The SSLContext implementation for TLS/SSL algorithm
|
||
*
|
||
@@ -423,28 +435,35 @@
|
||
*/
|
||
private static class ConservativeSSLContext extends SSLContextImpl {
|
||
// parameters
|
||
- private static SSLParameters defaultServerSSLParams;
|
||
- private static SSLParameters defaultClientSSLParams;
|
||
- private static SSLParameters supportedSSLParams;
|
||
+ private static final SSLParameters defaultServerSSLParams;
|
||
+ private static final SSLParameters defaultClientSSLParams;
|
||
+ private static final SSLParameters supportedSSLParams;
|
||
|
||
static {
|
||
+ // supported SSL parameters
|
||
+ supportedSSLParams = new SSLParameters();
|
||
+
|
||
+ // candidates for available protocols
|
||
+ ProtocolVersion[] serverCandidates;
|
||
+ ProtocolVersion[] clientCandidates;
|
||
+
|
||
if (SunJSSE.isFIPS()) {
|
||
- supportedSSLParams = new SSLParameters();
|
||
supportedSSLParams.setProtocols(new String[] {
|
||
ProtocolVersion.TLS10.name,
|
||
ProtocolVersion.TLS11.name,
|
||
ProtocolVersion.TLS12.name
|
||
});
|
||
|
||
- defaultServerSSLParams = supportedSSLParams;
|
||
+ serverCandidates = new ProtocolVersion[] {
|
||
+ ProtocolVersion.TLS10,
|
||
+ ProtocolVersion.TLS11,
|
||
+ ProtocolVersion.TLS12
|
||
+ };
|
||
|
||
- defaultClientSSLParams = new SSLParameters();
|
||
- defaultClientSSLParams.setProtocols(new String[] {
|
||
- ProtocolVersion.TLS10.name
|
||
- });
|
||
-
|
||
+ clientCandidates = new ProtocolVersion[] {
|
||
+ ProtocolVersion.TLS10
|
||
+ };
|
||
} else {
|
||
- supportedSSLParams = new SSLParameters();
|
||
supportedSSLParams.setProtocols(new String[] {
|
||
ProtocolVersion.SSL20Hello.name,
|
||
ProtocolVersion.SSL30.name,
|
||
@@ -453,14 +472,27 @@
|
||
ProtocolVersion.TLS12.name
|
||
});
|
||
|
||
- defaultServerSSLParams = supportedSSLParams;
|
||
+ serverCandidates = new ProtocolVersion[] {
|
||
+ ProtocolVersion.SSL20Hello,
|
||
+ ProtocolVersion.SSL30,
|
||
+ ProtocolVersion.TLS10,
|
||
+ ProtocolVersion.TLS11,
|
||
+ ProtocolVersion.TLS12
|
||
+ };
|
||
|
||
- defaultClientSSLParams = new SSLParameters();
|
||
- defaultClientSSLParams.setProtocols(new String[] {
|
||
- ProtocolVersion.SSL30.name,
|
||
- ProtocolVersion.TLS10.name
|
||
- });
|
||
+ clientCandidates = new ProtocolVersion[] {
|
||
+ ProtocolVersion.SSL30,
|
||
+ ProtocolVersion.TLS10
|
||
+ };
|
||
}
|
||
+
|
||
+ defaultClientSSLParams = new SSLParameters();
|
||
+ defaultClientSSLParams.setProtocols(
|
||
+ getAvailableProtocols(clientCandidates));
|
||
+
|
||
+ defaultServerSSLParams = new SSLParameters();
|
||
+ defaultServerSSLParams.setProtocols(
|
||
+ getAvailableProtocols(serverCandidates));
|
||
}
|
||
|
||
SSLParameters getDefaultServerSSLParams() {
|
||
@@ -651,29 +683,36 @@
|
||
*/
|
||
public static final class TLS11Context extends SSLContextImpl {
|
||
// parameters
|
||
- private static SSLParameters defaultServerSSLParams;
|
||
- private static SSLParameters defaultClientSSLParams;
|
||
- private static SSLParameters supportedSSLParams;
|
||
+ private static final SSLParameters defaultServerSSLParams;
|
||
+ private static final SSLParameters defaultClientSSLParams;
|
||
+ private static final SSLParameters supportedSSLParams;
|
||
|
||
static {
|
||
+ // supported SSL parameters
|
||
+ supportedSSLParams = new SSLParameters();
|
||
+
|
||
+ // candidates for available protocols
|
||
+ ProtocolVersion[] serverCandidates;
|
||
+ ProtocolVersion[] clientCandidates;
|
||
+
|
||
if (SunJSSE.isFIPS()) {
|
||
- supportedSSLParams = new SSLParameters();
|
||
supportedSSLParams.setProtocols(new String[] {
|
||
ProtocolVersion.TLS10.name,
|
||
ProtocolVersion.TLS11.name,
|
||
ProtocolVersion.TLS12.name
|
||
});
|
||
|
||
- defaultServerSSLParams = supportedSSLParams;
|
||
+ serverCandidates = new ProtocolVersion[] {
|
||
+ ProtocolVersion.TLS10,
|
||
+ ProtocolVersion.TLS11,
|
||
+ ProtocolVersion.TLS12
|
||
+ };
|
||
|
||
- defaultClientSSLParams = new SSLParameters();
|
||
- defaultClientSSLParams.setProtocols(new String[] {
|
||
- ProtocolVersion.TLS10.name,
|
||
- ProtocolVersion.TLS11.name
|
||
- });
|
||
-
|
||
+ clientCandidates = new ProtocolVersion[] {
|
||
+ ProtocolVersion.TLS10,
|
||
+ ProtocolVersion.TLS11
|
||
+ };
|
||
} else {
|
||
- supportedSSLParams = new SSLParameters();
|
||
supportedSSLParams.setProtocols(new String[] {
|
||
ProtocolVersion.SSL20Hello.name,
|
||
ProtocolVersion.SSL30.name,
|
||
@@ -682,15 +721,28 @@
|
||
ProtocolVersion.TLS12.name
|
||
});
|
||
|
||
- defaultServerSSLParams = supportedSSLParams;
|
||
+ serverCandidates = new ProtocolVersion[] {
|
||
+ ProtocolVersion.SSL20Hello,
|
||
+ ProtocolVersion.SSL30,
|
||
+ ProtocolVersion.TLS10,
|
||
+ ProtocolVersion.TLS11,
|
||
+ ProtocolVersion.TLS12
|
||
+ };
|
||
|
||
- defaultClientSSLParams = new SSLParameters();
|
||
- defaultClientSSLParams.setProtocols(new String[] {
|
||
- ProtocolVersion.SSL30.name,
|
||
- ProtocolVersion.TLS10.name,
|
||
- ProtocolVersion.TLS11.name
|
||
- });
|
||
+ clientCandidates = new ProtocolVersion[] {
|
||
+ ProtocolVersion.SSL30,
|
||
+ ProtocolVersion.TLS10,
|
||
+ ProtocolVersion.TLS11
|
||
+ };
|
||
}
|
||
+
|
||
+ defaultClientSSLParams = new SSLParameters();
|
||
+ defaultClientSSLParams.setProtocols(
|
||
+ getAvailableProtocols(clientCandidates));
|
||
+
|
||
+ defaultServerSSLParams = new SSLParameters();
|
||
+ defaultServerSSLParams.setProtocols(
|
||
+ getAvailableProtocols(serverCandidates));
|
||
}
|
||
|
||
SSLParameters getDefaultServerSSLParams() {
|
||
@@ -713,30 +765,37 @@
|
||
*/
|
||
public static final class TLS12Context extends SSLContextImpl {
|
||
// parameters
|
||
- private static SSLParameters defaultServerSSLParams;
|
||
- private static SSLParameters defaultClientSSLParams;
|
||
- private static SSLParameters supportedSSLParams;
|
||
+ private static final SSLParameters defaultServerSSLParams;
|
||
+ private static final SSLParameters defaultClientSSLParams;
|
||
+ private static final SSLParameters supportedSSLParams;
|
||
|
||
static {
|
||
+ // supported SSL parameters
|
||
+ supportedSSLParams = new SSLParameters();
|
||
+
|
||
+ // candidates for available protocols
|
||
+ ProtocolVersion[] serverCandidates;
|
||
+ ProtocolVersion[] clientCandidates;
|
||
+
|
||
if (SunJSSE.isFIPS()) {
|
||
- supportedSSLParams = new SSLParameters();
|
||
supportedSSLParams.setProtocols(new String[] {
|
||
ProtocolVersion.TLS10.name,
|
||
ProtocolVersion.TLS11.name,
|
||
ProtocolVersion.TLS12.name
|
||
});
|
||
|
||
- defaultServerSSLParams = supportedSSLParams;
|
||
+ serverCandidates = new ProtocolVersion[] {
|
||
+ ProtocolVersion.TLS10,
|
||
+ ProtocolVersion.TLS11,
|
||
+ ProtocolVersion.TLS12
|
||
+ };
|
||
|
||
- defaultClientSSLParams = new SSLParameters();
|
||
- defaultClientSSLParams.setProtocols(new String[] {
|
||
- ProtocolVersion.TLS10.name,
|
||
- ProtocolVersion.TLS11.name,
|
||
- ProtocolVersion.TLS12.name
|
||
- });
|
||
-
|
||
+ clientCandidates = new ProtocolVersion[] {
|
||
+ ProtocolVersion.TLS10,
|
||
+ ProtocolVersion.TLS11,
|
||
+ ProtocolVersion.TLS12
|
||
+ };
|
||
} else {
|
||
- supportedSSLParams = new SSLParameters();
|
||
supportedSSLParams.setProtocols(new String[] {
|
||
ProtocolVersion.SSL20Hello.name,
|
||
ProtocolVersion.SSL30.name,
|
||
@@ -745,16 +804,29 @@
|
||
ProtocolVersion.TLS12.name
|
||
});
|
||
|
||
- defaultServerSSLParams = supportedSSLParams;
|
||
+ serverCandidates = new ProtocolVersion[] {
|
||
+ ProtocolVersion.SSL20Hello,
|
||
+ ProtocolVersion.SSL30,
|
||
+ ProtocolVersion.TLS10,
|
||
+ ProtocolVersion.TLS11,
|
||
+ ProtocolVersion.TLS12
|
||
+ };
|
||
|
||
- defaultClientSSLParams = new SSLParameters();
|
||
- defaultClientSSLParams.setProtocols(new String[] {
|
||
- ProtocolVersion.SSL30.name,
|
||
- ProtocolVersion.TLS10.name,
|
||
- ProtocolVersion.TLS11.name,
|
||
- ProtocolVersion.TLS12.name
|
||
- });
|
||
+ clientCandidates = new ProtocolVersion[] {
|
||
+ ProtocolVersion.SSL30,
|
||
+ ProtocolVersion.TLS10,
|
||
+ ProtocolVersion.TLS11,
|
||
+ ProtocolVersion.TLS12
|
||
+ };
|
||
}
|
||
+
|
||
+ defaultClientSSLParams = new SSLParameters();
|
||
+ defaultClientSSLParams.setProtocols(
|
||
+ getAvailableProtocols(clientCandidates));
|
||
+
|
||
+ defaultServerSSLParams = new SSLParameters();
|
||
+ defaultServerSSLParams.setProtocols(
|
||
+ getAvailableProtocols(serverCandidates));
|
||
}
|
||
|
||
SSLParameters getDefaultServerSSLParams() {
|
||
--- ./jdk/src/share/classes/sun/security/ssl/SSLEngineImpl.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/ssl/SSLEngineImpl.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2003, 2014, 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
|
||
@@ -215,6 +215,11 @@
|
||
static final byte clauth_required = 2;
|
||
|
||
/*
|
||
+ * Flag indicating that the engine has received a ChangeCipherSpec message.
|
||
+ */
|
||
+ private boolean receivedCCS;
|
||
+
|
||
+ /*
|
||
* Flag indicating if the next record we receive MUST be a Finished
|
||
* message. Temporarily set during the handshake to ensure that
|
||
* a change cipher spec message is followed by a finished message.
|
||
@@ -363,6 +368,7 @@
|
||
*/
|
||
roleIsServer = true;
|
||
connectionState = cs_START;
|
||
+ receivedCCS = false;
|
||
|
||
/*
|
||
* default read and write side cipher and MAC support
|
||
@@ -1006,6 +1012,7 @@
|
||
|
||
if (handshaker.invalidated) {
|
||
handshaker = null;
|
||
+ receivedCCS = false;
|
||
// if state is cs_RENEGOTIATE, revert it to cs_DATA
|
||
if (connectionState == cs_RENEGOTIATE) {
|
||
connectionState = cs_DATA;
|
||
@@ -1024,6 +1031,7 @@
|
||
}
|
||
handshaker = null;
|
||
connectionState = cs_DATA;
|
||
+ receivedCCS = false;
|
||
|
||
// No handshakeListeners here. That's a
|
||
// SSLSocket thing.
|
||
@@ -1063,13 +1071,25 @@
|
||
case Record.ct_change_cipher_spec:
|
||
if ((connectionState != cs_HANDSHAKE
|
||
&& connectionState != cs_RENEGOTIATE)
|
||
- || inputRecord.available() != 1
|
||
+ || !handshaker.sessionKeysCalculated()
|
||
+ || receivedCCS) {
|
||
+ // For the CCS message arriving in the wrong state
|
||
+ fatal(Alerts.alert_unexpected_message,
|
||
+ "illegal change cipher spec msg, conn state = "
|
||
+ + connectionState + ", handshake state = "
|
||
+ + handshaker.state);
|
||
+ } else if (inputRecord.available() != 1
|
||
|| inputRecord.read() != 1) {
|
||
+ // For structural/content issues with the CCS
|
||
fatal(Alerts.alert_unexpected_message,
|
||
- "illegal change cipher spec msg, state = "
|
||
- + connectionState);
|
||
+ "Malformed change cipher spec msg");
|
||
}
|
||
|
||
+ // Once we've received CCS, update the flag.
|
||
+ // If the remote endpoint sends it again in this handshake
|
||
+ // we won't process it.
|
||
+ receivedCCS = true;
|
||
+
|
||
//
|
||
// The first message after a change_cipher_spec
|
||
// record MUST be a "Finished" handshake record,
|
||
@@ -2065,6 +2085,14 @@
|
||
return Thread.currentThread().getName();
|
||
}
|
||
|
||
+ /*
|
||
+ * Returns a boolean indicating whether the ChangeCipherSpec message
|
||
+ * has been received for this handshake.
|
||
+ */
|
||
+ boolean receivedChangeCipherSpec() {
|
||
+ return receivedCCS;
|
||
+ }
|
||
+
|
||
/**
|
||
* Returns a printable representation of this end of the connection.
|
||
*/
|
||
--- ./jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1996, 2014, 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
|
||
@@ -175,6 +175,12 @@
|
||
private volatile int connectionState;
|
||
|
||
/*
|
||
+ * Flag indicating that the engine's handshaker has done the necessary
|
||
+ * steps so the engine may process a ChangeCipherSpec message.
|
||
+ */
|
||
+ private boolean receivedCCS;
|
||
+
|
||
+ /*
|
||
* Flag indicating if the next record we receive MUST be a Finished
|
||
* message. Temporarily set during the handshake to ensure that
|
||
* a change cipher spec message is followed by a finished message.
|
||
@@ -557,6 +563,7 @@
|
||
*/
|
||
roleIsServer = isServer;
|
||
connectionState = cs_START;
|
||
+ receivedCCS = false;
|
||
|
||
/*
|
||
* default read and write side cipher and MAC support
|
||
@@ -1018,6 +1025,7 @@
|
||
|
||
if (handshaker.invalidated) {
|
||
handshaker = null;
|
||
+ receivedCCS = false;
|
||
// if state is cs_RENEGOTIATE, revert it to cs_DATA
|
||
if (connectionState == cs_RENEGOTIATE) {
|
||
connectionState = cs_DATA;
|
||
@@ -1033,6 +1041,7 @@
|
||
handshakeSession = null;
|
||
handshaker = null;
|
||
connectionState = cs_DATA;
|
||
+ receivedCCS = false;
|
||
|
||
//
|
||
// Tell folk about handshake completion, but do
|
||
@@ -1080,13 +1089,24 @@
|
||
case Record.ct_change_cipher_spec:
|
||
if ((connectionState != cs_HANDSHAKE
|
||
&& connectionState != cs_RENEGOTIATE)
|
||
- || r.available() != 1
|
||
- || r.read() != 1) {
|
||
+ || !handshaker.sessionKeysCalculated()
|
||
+ || receivedCCS) {
|
||
+ // For the CCS message arriving in the wrong state
|
||
fatal(Alerts.alert_unexpected_message,
|
||
- "illegal change cipher spec msg, state = "
|
||
- + connectionState);
|
||
+ "illegal change cipher spec msg, conn state = "
|
||
+ + connectionState + ", handshake state = "
|
||
+ + handshaker.state);
|
||
+ } else if (r.available() != 1 || r.read() != 1) {
|
||
+ // For structural/content issues with the CCS
|
||
+ fatal(Alerts.alert_unexpected_message,
|
||
+ "Malformed change cipher spec msg");
|
||
}
|
||
|
||
+ // Once we've received CCS, update the flag.
|
||
+ // If the remote endpoint sends it again in this handshake
|
||
+ // we won't process it.
|
||
+ receivedCCS = true;
|
||
+
|
||
//
|
||
// The first message after a change_cipher_spec
|
||
// record MUST be a "Finished" handshake record,
|
||
@@ -2478,6 +2498,14 @@
|
||
}
|
||
}
|
||
|
||
+ /*
|
||
+ * Returns a boolean indicating whether the ChangeCipherSpec message
|
||
+ * has been received for this handshake.
|
||
+ */
|
||
+ boolean receivedChangeCipherSpec() {
|
||
+ return receivedCCS;
|
||
+ }
|
||
+
|
||
//
|
||
// We allocate a separate thread to deliver handshake completion
|
||
// events. This ensures that the notifications don't block the
|
||
--- ./jdk/src/share/classes/sun/security/ssl/ServerHandshaker.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/ssl/ServerHandshaker.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -240,6 +240,13 @@
|
||
break;
|
||
|
||
case HandshakeMessage.ht_finished:
|
||
+ // A ChangeCipherSpec record must have been received prior to
|
||
+ // reception of the Finished message (RFC 5246, 7.4.9).
|
||
+ if (!receivedChangeCipherSpec()) {
|
||
+ fatalSE(Alerts.alert_handshake_failure,
|
||
+ "Received Finished message before ChangeCipherSpec");
|
||
+ }
|
||
+
|
||
this.clientFinished(
|
||
new Finished(protocolVersion, input, cipherSuite));
|
||
break;
|
||
--- ./jdk/src/share/classes/sun/security/tools/JarSigner.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/tools/JarSigner.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -1547,8 +1547,7 @@
|
||
first = false;
|
||
}
|
||
try {
|
||
- CertPath cp = certificateFactory.generateCertPath(certs);
|
||
- validator.validate(cp, pkixParameters);
|
||
+ validateCertChain(certs);
|
||
} catch (Exception e) {
|
||
if (debug) {
|
||
e.printStackTrace();
|
||
@@ -1859,8 +1858,7 @@
|
||
printCert("", certChain[0], true, null, true);
|
||
|
||
try {
|
||
- CertPath cp = certificateFactory.generateCertPath(Arrays.asList(certChain));
|
||
- validator.validate(cp, pkixParameters);
|
||
+ validateCertChain(Arrays.asList(certChain));
|
||
} catch (Exception e) {
|
||
if (debug) {
|
||
e.printStackTrace();
|
||
@@ -1925,6 +1923,22 @@
|
||
System.exit(1);
|
||
}
|
||
|
||
+ void validateCertChain(List<? extends Certificate> certs) throws Exception {
|
||
+ int cpLen = 0;
|
||
+ out: for (; cpLen<certs.size(); cpLen++) {
|
||
+ for (TrustAnchor ta: pkixParameters.getTrustAnchors()) {
|
||
+ if (ta.getTrustedCert().equals(certs.get(cpLen))) {
|
||
+ break out;
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+ if (cpLen > 0) {
|
||
+ CertPath cp = certificateFactory.generateCertPath(
|
||
+ (cpLen == certs.size())? certs: certs.subList(0, cpLen));
|
||
+ validator.validate(cp, pkixParameters);
|
||
+ }
|
||
+ }
|
||
+
|
||
char[] getPass(String prompt)
|
||
{
|
||
System.err.print(prompt);
|
||
--- ./jdk/src/share/classes/sun/security/util/DerIndefLenConverter.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/util/DerIndefLenConverter.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -156,12 +156,18 @@
|
||
}
|
||
if (isLongForm(lenByte)) {
|
||
lenByte &= LEN_MASK;
|
||
- if (lenByte > 4)
|
||
+ if (lenByte > 4) {
|
||
throw new IOException("Too much data");
|
||
- if ((dataSize - dataPos) < (lenByte + 1))
|
||
+ }
|
||
+ if ((dataSize - dataPos) < (lenByte + 1)) {
|
||
throw new IOException("Too little data");
|
||
- for (int i = 0; i < lenByte; i++)
|
||
+ }
|
||
+ for (int i = 0; i < lenByte; i++) {
|
||
curLen = (curLen << 8) + (data[dataPos++] & 0xff);
|
||
+ }
|
||
+ if (curLen < 0) {
|
||
+ throw new IOException("Invalid length bytes");
|
||
+ }
|
||
} else {
|
||
curLen = (lenByte & LEN_MASK);
|
||
}
|
||
@@ -188,10 +194,15 @@
|
||
}
|
||
if (isLongForm(lenByte)) {
|
||
lenByte &= LEN_MASK;
|
||
- for (int i = 0; i < lenByte; i++)
|
||
+ for (int i = 0; i < lenByte; i++) {
|
||
curLen = (curLen << 8) + (data[dataPos++] & 0xff);
|
||
- } else
|
||
+ }
|
||
+ if (curLen < 0) {
|
||
+ throw new IOException("Invalid length bytes");
|
||
+ }
|
||
+ } else {
|
||
curLen = (lenByte & LEN_MASK);
|
||
+ }
|
||
writeLength(curLen);
|
||
writeValue(curLen);
|
||
}
|
||
--- ./jdk/src/share/classes/sun/security/util/DerInputStream.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/util/DerInputStream.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -566,6 +566,10 @@
|
||
value <<= 8;
|
||
value += 0x0ff & in.read();
|
||
}
|
||
+ if (value < 0) {
|
||
+ throw new IOException("DerInputStream.getLength(): "
|
||
+ + "Invalid length bytes");
|
||
+ }
|
||
}
|
||
return value;
|
||
}
|
||
--- ./jdk/src/share/classes/sun/security/util/SignatureFileVerifier.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/util/SignatureFileVerifier.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -39,6 +39,7 @@
|
||
import sun.misc.BASE64Decoder;
|
||
|
||
import sun.security.jca.Providers;
|
||
+import sun.security.x509.AlgorithmId;
|
||
|
||
public class SignatureFileVerifier {
|
||
|
||
@@ -613,7 +614,8 @@
|
||
throws NoSuchAlgorithmException, SignatureException {
|
||
|
||
MessageDigest md =
|
||
- MessageDigest.getInstance(token.getHashAlgorithm().getName());
|
||
+ MessageDigest.getInstance(AlgorithmId.getStandardDigestName(
|
||
+ token.getHashAlgorithm().getName()));
|
||
|
||
if (!Arrays.equals(token.getHashedMessage(), md.digest(signature))) {
|
||
throw new SignatureException("Signature timestamp (#" +
|
||
--- ./jdk/src/share/classes/sun/security/x509/AlgorithmId.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/x509/AlgorithmId.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -940,4 +940,21 @@
|
||
}
|
||
return null;
|
||
}
|
||
+
|
||
+ // Copied from com.sun.crypto.provider.OAEPParameters.convertToStandardName()
|
||
+ public static String getStandardDigestName(String internalName) {
|
||
+ if (internalName.equals("SHA")) {
|
||
+ return "SHA-1";
|
||
+ } else if (internalName.equals("SHA224")) {
|
||
+ return "SHA-224";
|
||
+ } else if (internalName.equals("SHA256")) {
|
||
+ return "SHA-256";
|
||
+ } else if (internalName.equals("SHA384")) {
|
||
+ return "SHA-384";
|
||
+ } else if (internalName.equals("SHA512")) {
|
||
+ return "SHA-512";
|
||
+ } else {
|
||
+ return internalName;
|
||
+ }
|
||
+ }
|
||
}
|
||
--- ./jdk/src/share/classes/sun/security/x509/CertAndKeyGen.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/security/x509/CertAndKeyGen.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1996, 2009, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1996, 2014, 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
|
||
@@ -156,9 +156,11 @@
|
||
|
||
// publicKey's format must be X.509 otherwise
|
||
// the whole CertGen part of this class is broken.
|
||
- if (!"X.509".equalsIgnoreCase(publicKey.getFormat())) {
|
||
- throw new IllegalArgumentException("publicKey's is not X.509, but "
|
||
- + publicKey.getFormat());
|
||
+ // Allow "X509" in 7u for backwards compatibility.
|
||
+ if (!"X.509".equalsIgnoreCase(publicKey.getFormat()) &&
|
||
+ !"X509".equalsIgnoreCase(publicKey.getFormat())) {
|
||
+ throw new IllegalArgumentException("Public key format is " +
|
||
+ publicKey.getFormat() + ", must be X.509");
|
||
}
|
||
}
|
||
|
||
--- ./jdk/src/share/classes/sun/swing/FilePane.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/swing/FilePane.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1979,6 +1979,7 @@
|
||
return false;
|
||
}
|
||
|
||
+ try {
|
||
if (f instanceof ShellFolder) {
|
||
return ((ShellFolder) f).isFileSystem();
|
||
} else {
|
||
@@ -1994,6 +1995,9 @@
|
||
return true;
|
||
}
|
||
}
|
||
+ } catch (SecurityException e) {
|
||
+ return false;
|
||
+ }
|
||
}
|
||
|
||
/**
|
||
--- ./jdk/src/share/classes/sun/swing/SwingUtilities2.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/swing/SwingUtilities2.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2002, 2014, 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
|
||
@@ -80,6 +80,9 @@
|
||
public static final Object LAF_STATE_KEY =
|
||
new StringBuffer("LookAndFeel State");
|
||
|
||
+ public static final Object MENU_SELECTION_MANAGER_LISTENER_KEY =
|
||
+ new StringBuffer("MenuSelectionManager listener key");
|
||
+
|
||
// Maintain a cache of CACHE_SIZE fonts and the left side bearing
|
||
// of the characters falling into the range MIN_CHAR_INDEX to
|
||
// MAX_CHAR_INDEX. The values in fontCache are created as needed.
|
||
--- ./jdk/src/share/classes/sun/swing/WindowsPlacesBar.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/swing/WindowsPlacesBar.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -81,11 +81,7 @@
|
||
setBackground(bgColor);
|
||
FileSystemView fsv = fc.getFileSystemView();
|
||
|
||
- files = AccessController.doPrivileged(new PrivilegedAction<File[]>() {
|
||
- public File[] run() {
|
||
- return (File[]) ShellFolder.get("fileChooserShortcutPanelFolders");
|
||
- }
|
||
- });
|
||
+ files = (File[]) ShellFolder.get("fileChooserShortcutPanelFolders");
|
||
|
||
buttons = new JToggleButton[files.length];
|
||
buttonGroup = new ButtonGroup();
|
||
--- ./jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -771,16 +771,9 @@
|
||
fireIntervalRemoved(this, 0, oldSize);
|
||
}
|
||
|
||
- File[] baseFolders;
|
||
- if (useShellFolder) {
|
||
- baseFolders = AccessController.doPrivileged(new PrivilegedAction<File[]>() {
|
||
- public File[] run() {
|
||
- return (File[]) ShellFolder.get("fileChooserComboBoxFolders");
|
||
- }
|
||
- });
|
||
- } else {
|
||
- baseFolders = fsv.getRoots();
|
||
- }
|
||
+ File[] baseFolders = (useShellFolder)
|
||
+ ? (File[]) ShellFolder.get("fileChooserComboBoxFolders")
|
||
+ : fsv.getRoots();
|
||
directories.addAll(Arrays.asList(baseFolders));
|
||
|
||
// Get the canonical (full) path. This has the side
|
||
--- ./jdk/src/share/classes/sun/tools/jconsole/resources/messages_ja.properties Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/tools/jconsole/resources/messages_ja.properties Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -103,7 +103,7 @@
|
||
HELP_ABOUT_DIALOG_JAVA_VERSION=Java VM\u30D0\u30FC\u30B8\u30E7\u30F3:<br>{0}
|
||
HELP_ABOUT_DIALOG_MASTHEAD_ACCESSIBLE_NAME=\u30DE\u30B9\u30C8\u30D8\u30C3\u30C9\u56F3\u5F62
|
||
HELP_ABOUT_DIALOG_MASTHEAD_TITLE=JConsole\u306B\u3064\u3044\u3066
|
||
-HELP_ABOUT_DIALOG_TITLE=JConsole: \u8A73\u7D30
|
||
+HELP_ABOUT_DIALOG_TITLE=JConsole: \u60C5\u5831
|
||
HELP_ABOUT_DIALOG_USER_GUIDE_LINK=JConsole\u30E6\u30FC\u30B6\u30FC\u30FB\u30AC\u30A4\u30C9(&U):<br>{0}
|
||
HELP_ABOUT_DIALOG_USER_GUIDE_LINK_URL=http://docs.oracle.com/javase/{0}/docs/technotes/guides/management/jconsole.html
|
||
HELP_MENU_ABOUT_TITLE=JConsole\u306B\u3064\u3044\u3066(&A)
|
||
--- ./jdk/src/share/classes/sun/util/resources/CurrencyNames.properties Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/util/resources/CurrencyNames.properties Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
#
|
||
-# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
|
||
+# Copyright (c) 2005, 2012, 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
|
||
@@ -26,7 +26,7 @@
|
||
#
|
||
# COPYRIGHT AND PERMISSION NOTICE
|
||
#
|
||
-# Copyright (C) 1991-2011 Unicode, Inc. All rights reserved.
|
||
+# Copyright (C) 1991-2012 Unicode, Inc. All rights reserved.
|
||
# Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
|
||
#
|
||
# Permission is hereby granted, free of charge, to any person obtaining
|
||
@@ -226,6 +226,7 @@
|
||
SOS=SOS
|
||
SRD=SRD
|
||
SRG=SRG
|
||
+SSP=SSP
|
||
STD=STD
|
||
SVC=SVC
|
||
SYP=SYP
|
||
@@ -277,6 +278,7 @@
|
||
YUM=YUM
|
||
ZAR=ZAR
|
||
ZMK=ZMK
|
||
+ZMW=ZMW
|
||
ZWD=ZWD
|
||
ZWL=ZWL
|
||
ZWN=ZWN
|
||
@@ -443,6 +445,7 @@
|
||
sos=Somali Shilling
|
||
srd=Surinamese Dollar
|
||
srg=Surinamese Guilder
|
||
+ssp=South Sudanese Pound
|
||
std=S\u00e3o Tom\u00e9 and Pr\u00edncipe Dobra
|
||
svc=Salvadoran Col\u00f3n
|
||
syp=Syrian Pound
|
||
@@ -486,7 +489,9 @@
|
||
xpd=Palladium
|
||
xpf=CFP Franc
|
||
xpt=Platinum
|
||
+xsu=Sucre
|
||
xts=Testing Currency Code
|
||
+xua=ADB Unit of Account
|
||
xxx=Unknown Currency
|
||
yer=Yemeni Rial
|
||
yum=Yugoslavian New Dinar (1994-2002)
|
||
--- ./jdk/src/share/classes/sun/util/resources/CurrencyNames_es_PE.properties Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/util/resources/CurrencyNames_es_PE.properties Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -35,4 +35,4 @@
|
||
# This notice and attribution to Taligent may not be removed.
|
||
# Taligent is a registered trademark of Taligent, Inc.
|
||
|
||
-PEN=S/
|
||
+PEN=S/.
|
||
--- ./jdk/src/share/classes/sun/util/resources/CurrencyNames_lt_LT.properties Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/util/resources/CurrencyNames_lt_LT.properties Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -35,4 +35,5 @@
|
||
# This notice and attribution to Taligent may not be removed.
|
||
# Taligent is a registered trademark of Taligent, Inc.
|
||
|
||
+EUR=\u20AC
|
||
LTL=Lt
|
||
--- ./jdk/src/share/classes/sun/util/resources/CurrencyNames_lv_LV.properties Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/util/resources/CurrencyNames_lv_LV.properties Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -35,4 +35,5 @@
|
||
# This notice and attribution to Taligent may not be removed.
|
||
# Taligent is a registered trademark of Taligent, Inc.
|
||
|
||
+EUR=\u20AC
|
||
LVL=Ls
|
||
--- ./jdk/src/share/classes/sun/util/resources/LocaleNames.properties Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/util/resources/LocaleNames.properties Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1077,6 +1077,7 @@
|
||
SN=Senegal
|
||
SO=Somalia
|
||
SR=Suriname
|
||
+SS=South Sudan
|
||
ST=Sao Tome And Principe
|
||
SV=El Salvador
|
||
SX=Sint Maarten (Dutch part)
|
||
--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -45,8 +45,8 @@
|
||
protected final Object[][] getContents() {
|
||
String ACT[] = new String[] {"Acre Time", "ACT",
|
||
"Acre Summer Time", "ACST"};
|
||
- String ADELAIDE[] = new String[] {"Central Standard Time (South Australia)", "CST",
|
||
- "Central Summer Time (South Australia)", "CST"};
|
||
+ String ADELAIDE[] = new String[] {"Australian Central Standard Time (South Australia)", "ACST",
|
||
+ "Australian Central Daylight Time (South Australia)", "ACDT"};
|
||
String AGT[] = new String[] {"Argentine Time", "ART",
|
||
"Argentine Summer Time", "ARST"};
|
||
String AKST[] = new String[] {"Alaska Standard Time", "AKST",
|
||
@@ -61,10 +61,10 @@
|
||
"Atlantic Daylight Time", "ADT"};
|
||
String BDT[] = new String[] {"Bangladesh Time", "BDT",
|
||
"Bangladesh Summer Time", "BDST"};
|
||
- String BRISBANE[] = new String[] {"Eastern Standard Time (Queensland)", "EST",
|
||
- "Eastern Summer Time (Queensland)", "EST"};
|
||
- String BROKEN_HILL[] = new String[] {"Central Standard Time (South Australia/New South Wales)", "CST",
|
||
- "Central Summer Time (South Australia/New South Wales)", "CST"};
|
||
+ String BRISBANE[] = new String[] {"Australian Eastern Standard Time (Queensland)", "AEST",
|
||
+ "Australian Eastern Daylight Time (Queensland)", "AEDT"};
|
||
+ String BROKEN_HILL[] = new String[] {"Australian Central Standard Time (South Australia/New South Wales)", "ACST",
|
||
+ "Australian Central Daylight Time (South Australia/New South Wales)", "ACDT"};
|
||
String BRT[] = new String[] {"Brasilia Time", "BRT",
|
||
"Brasilia Summer Time", "BRST"};
|
||
String BTT[] = new String[] {"Bhutan Time", "BTT",
|
||
@@ -89,8 +89,8 @@
|
||
"China Daylight Time", "CDT"};
|
||
String CUBA[] = new String[] {"Cuba Standard Time", "CST",
|
||
"Cuba Daylight Time", "CDT"};
|
||
- String DARWIN[] = new String[] {"Central Standard Time (Northern Territory)", "CST",
|
||
- "Central Summer Time (Northern Territory)", "CST"};
|
||
+ String DARWIN[] = new String[] {"Australian Central Standard Time (Northern Territory)", "ACST",
|
||
+ "Australian Central Daylight Time (Northern Territory)", "ACDT"};
|
||
String DUBLIN[] = new String[] {"Greenwich Mean Time", "GMT",
|
||
"Irish Summer Time", "IST"};
|
||
String EAT[] = new String[] {"Eastern African Time", "EAT",
|
||
@@ -103,8 +103,8 @@
|
||
"Eastern Greenland Summer Time", "EGST"};
|
||
String EST[] = new String[] {"Eastern Standard Time", "EST",
|
||
"Eastern Daylight Time", "EDT"};
|
||
- String EST_NSW[] = new String[] {"Eastern Standard Time (New South Wales)", "EST",
|
||
- "Eastern Summer Time (New South Wales)", "EST"};
|
||
+ String EST_NSW[] = new String[] {"Australian Eastern Standard Time (New South Wales)", "AEST",
|
||
+ "Australian Eastern Daylight Time (New South Wales)", "AEDT"};
|
||
String FET[] = new String[] {"Further-eastern European Time", "FET",
|
||
"Further-eastern European Summer Time", "FEST"};
|
||
String GHMT[] = new String[] {"Ghana Mean Time", "GMT",
|
||
@@ -133,10 +133,12 @@
|
||
"India Daylight Time", "IDT"};
|
||
String JST[] = new String[] {"Japan Standard Time", "JST",
|
||
"Japan Daylight Time", "JDT"};
|
||
+ String KRAT[] = new String[] {"Krasnoyarsk Time", "KRAT",
|
||
+ "Krasnoyarsk Summer Time", "KRAST"};
|
||
String KST[] = new String[] {"Korea Standard Time", "KST",
|
||
"Korea Daylight Time", "KDT"};
|
||
String LORD_HOWE[] = new String[] {"Lord Howe Standard Time", "LHST",
|
||
- "Lord Howe Summer Time", "LHST"};
|
||
+ "Lord Howe Daylight Time", "LHDT"};
|
||
String MHT[] = new String[] {"Marshall Islands Time", "MHT",
|
||
"Marshall Islands Summer Time", "MHST"};
|
||
String MSK[] = new String[] {"Moscow Standard Time", "MSK",
|
||
@@ -167,14 +169,14 @@
|
||
"Samoa Daylight Time", "SDT"};
|
||
String SAST[] = new String[] {"South Africa Standard Time", "SAST",
|
||
"South Africa Summer Time", "SAST"};
|
||
+ String IRKT[] = new String[] {"Irkutsk Time", "IRKT",
|
||
+ "Irkutsk Summer Time", "IRKST"};
|
||
String SBT[] = new String[] {"Solomon Is. Time", "SBT",
|
||
"Solomon Is. Summer Time", "SBST"};
|
||
String SGT[] = new String[] {"Singapore Time", "SGT",
|
||
"Singapore Summer Time", "SGST"};
|
||
- String SLST[] = new String[] {"Greenwich Mean Time", "GMT",
|
||
- "Sierra Leone Summer Time", "SLST"};
|
||
- String TASMANIA[] = new String[] {"Eastern Standard Time (Tasmania)", "EST",
|
||
- "Eastern Summer Time (Tasmania)", "EST"};
|
||
+ String TASMANIA[] = new String[] {"Australian Eastern Standard Time (Tasmania)", "AEST",
|
||
+ "Australian Eastern Daylight Time (Tasmania)", "AEDT"};
|
||
String TMT[] = new String[] {"Turkmenistan Time", "TMT",
|
||
"Turkmenistan Summer Time", "TMST"};
|
||
String ULAT[]= new String[] {"Ulaanbaatar Time", "ULAT",
|
||
@@ -183,22 +185,22 @@
|
||
"Coordinated Universal Time", "UTC"};
|
||
String UZT[] = new String[] {"Uzbekistan Time", "UZT",
|
||
"Uzbekistan Summer Time", "UZST"};
|
||
- String VICTORIA[] = new String[] {"Eastern Standard Time (Victoria)", "EST",
|
||
- "Eastern Summer Time (Victoria)", "EST"};
|
||
+ String VICTORIA[] = new String[] {"Australian Eastern Standard Time (Victoria)", "AEST",
|
||
+ "Australian Eastern Daylight Time (Victoria)", "AEDT"};
|
||
String VLAT[] = new String[] {"Vladivostok Time", "VLAT",
|
||
"Vladivostok Summer Time", "VLAST"};
|
||
- String WART[] = new String[] {"Western Argentine Time", "WART",
|
||
- "Western Argentine Summer Time", "WARST"};
|
||
String WAT[] = new String[] {"Western African Time", "WAT",
|
||
"Western African Summer Time", "WAST"};
|
||
String WET[] = new String[] {"Western European Time", "WET",
|
||
"Western European Summer Time", "WEST"};
|
||
String WIT[] = new String[] {"West Indonesia Time", "WIB",
|
||
"West Indonesia Summer Time", "WIST"};
|
||
- String WST_AUS[] = new String[] {"Western Standard Time (Australia)", "WST",
|
||
- "Western Summer Time (Australia)", "WST"};
|
||
- String WST_SAMOA[] = new String[] {"West Samoa Time", "WST",
|
||
+ String WST_AUS[] = new String[] {"Australian Western Standard Time", "AWST",
|
||
+ "Australian Western Daylight Time", "AWDT"};
|
||
+ String WST_SAMOA[] = new String[] {"West Samoa Standard Time", "WSST",
|
||
"West Samoa Daylight Time", "WSDT"};
|
||
+ String XJT[] = new String[] {"Xinjiang Standard Time", "XJT",
|
||
+ "Xinjiang Daylight Time", "XJDT"};
|
||
String YAKT[] = new String[] {"Yakutsk Time", "YAKT",
|
||
"Yakutsk Summer Time", "YAKST"};
|
||
|
||
@@ -262,7 +264,7 @@
|
||
{"Africa/Djibouti", EAT},
|
||
{"Africa/Douala", WAT},
|
||
{"Africa/El_Aaiun", WET},
|
||
- {"Africa/Freetown", SLST},
|
||
+ {"Africa/Freetown", GMT},
|
||
{"Africa/Gaborone", CAT},
|
||
{"Africa/Harare", CAT},
|
||
{"Africa/Johannesburg", SAST},
|
||
@@ -358,7 +360,7 @@
|
||
{"America/Godthab", new String[] {"Western Greenland Time", "WGT",
|
||
"Western Greenland Summer Time", "WGST"}},
|
||
{"America/Goose_Bay", AST},
|
||
- {"America/Grand_Turk", EST},
|
||
+ {"America/Grand_Turk", AST},
|
||
{"America/Grenada", AST},
|
||
{"America/Guadeloupe", AST},
|
||
{"America/Guatemala", CST},
|
||
@@ -401,8 +403,7 @@
|
||
{"America/Mendoza", AGT},
|
||
{"America/Menominee", CST},
|
||
{"America/Merida", CST},
|
||
- {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
|
||
- "Metlakatla Daylight Time", "MeDT"}},
|
||
+ {"America/Metlakatla", PST},
|
||
{"America/Mexico_City", CST},
|
||
{"America/Miquelon", new String[] {"Pierre & Miquelon Standard Time", "PMST",
|
||
"Pierre & Miquelon Daylight Time", "PMDT"}},
|
||
@@ -466,8 +467,8 @@
|
||
"Davis Summer Time", "DAVST"}},
|
||
{"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville Time", "DDUT",
|
||
"Dumont-d'Urville Summer Time", "DDUST"}},
|
||
- {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
|
||
- "Macquarie Island Summer Time", "MIST"}},
|
||
+ {"Antarctica/Macquarie", new String[] {"Macquarie Island Standard Time", "MIST",
|
||
+ "Macquarie Island Daylight Time", "MIDT"}},
|
||
{"Antarctica/Mawson", new String[] {"Mawson Time", "MAWT",
|
||
"Mawson Summer Time", "MAWST"}},
|
||
{"Antarctica/McMurdo", NZST},
|
||
@@ -505,6 +506,7 @@
|
||
{"Asia/Brunei", new String[] {"Brunei Time", "BNT",
|
||
"Brunei Summer Time", "BNST"}},
|
||
{"Asia/Calcutta", IST},
|
||
+ {"Asia/Chita", IRKT},
|
||
{"Asia/Choibalsan", new String[] {"Choibalsan Time", "CHOT",
|
||
"Choibalsan Summer Time", "CHOST"}},
|
||
{"Asia/Chongqing", CTT},
|
||
@@ -525,8 +527,7 @@
|
||
{"Asia/Hong_Kong", HKT},
|
||
{"Asia/Hovd", new String[] {"Hovd Time", "HOVT",
|
||
"Hovd Summer Time", "HOVST"}},
|
||
- {"Asia/Irkutsk", new String[] {"Irkutsk Time", "IRKT",
|
||
- "Irkutsk Summer Time", "IRKST"}},
|
||
+ {"Asia/Irkutsk", IRKT},
|
||
{"Asia/Istanbul", EET},
|
||
{"Asia/Jakarta", WIT},
|
||
{"Asia/Jayapura", new String[] {"East Indonesia Time", "WIT",
|
||
@@ -536,14 +537,13 @@
|
||
{"Asia/Kamchatka", new String[] {"Petropavlovsk-Kamchatski Time", "PETT",
|
||
"Petropavlovsk-Kamchatski Summer Time", "PETST"}},
|
||
{"Asia/Karachi", PKT},
|
||
- {"Asia/Kashgar", CTT},
|
||
+ {"Asia/Kashgar", XJT},
|
||
{"Asia/Kathmandu", NPT},
|
||
{"Asia/Katmandu", NPT},
|
||
{"Asia/Khandyga", new String[] {"Khandyga Time", "YAKT",
|
||
"Khandyga Summer Time", "YAKST"}},
|
||
{"Asia/Kolkata", IST},
|
||
- {"Asia/Krasnoyarsk", new String[] {"Krasnoyarsk Time", "KRAT",
|
||
- "Krasnoyarsk Summer Time", "KRAST"}},
|
||
+ {"Asia/Krasnoyarsk", KRAT},
|
||
{"Asia/Kuala_Lumpur", MYT},
|
||
{"Asia/Kuching", MYT},
|
||
{"Asia/Kuwait", ARAST},
|
||
@@ -556,7 +556,7 @@
|
||
"Philippines Summer Time", "PHST"}},
|
||
{"Asia/Muscat", GST},
|
||
{"Asia/Nicosia", EET},
|
||
- {"Asia/Novokuznetsk", NOVT},
|
||
+ {"Asia/Novokuznetsk", KRAT},
|
||
{"Asia/Novosibirsk", NOVT},
|
||
{"Asia/Oral", new String[] {"Oral Time", "ORAT",
|
||
"Oral Summer Time", "ORAST"}},
|
||
@@ -577,6 +577,8 @@
|
||
{"Asia/Samarkand", UZT},
|
||
{"Asia/Seoul", KST},
|
||
{"Asia/Singapore", SGT},
|
||
+ {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET",
|
||
+ "Srednekolymsk Daylight Time", "SREDT"}},
|
||
{"Asia/Taipei", CTT},
|
||
{"Asia/Tel_Aviv", ISRAEL},
|
||
{"Asia/Tashkent", UZT},
|
||
@@ -588,7 +590,7 @@
|
||
{"Asia/Ujung_Pandang", CIT},
|
||
{"Asia/Ulaanbaatar", ULAT},
|
||
{"Asia/Ulan_Bator", ULAT},
|
||
- {"Asia/Urumqi", CTT},
|
||
+ {"Asia/Urumqi", XJT},
|
||
{"Asia/Ust-Nera", new String[] {"Ust-Nera Time", "VLAT",
|
||
"Ust-Nera Summer Time", "VLAST"}},
|
||
{"Asia/Vientiane", ICT},
|
||
@@ -620,8 +622,8 @@
|
||
{"Australia/Canberra", EST_NSW},
|
||
{"Australia/Currie", EST_NSW},
|
||
{"Australia/Darwin", DARWIN},
|
||
- {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST",
|
||
- "Central Western Summer Time (Australia)", "CWST"}},
|
||
+ {"Australia/Eucla", new String[] {"Australian Central Western Standard Time", "ACWST",
|
||
+ "Australian Central Western Daylight Time", "ACWDT"}},
|
||
{"Australia/Hobart", TASMANIA},
|
||
{"Australia/LHI", LORD_HOWE},
|
||
{"Australia/Lindeman", BRISBANE},
|
||
@@ -687,7 +689,7 @@
|
||
{"Europe/Isle_of_Man", GMTBST},
|
||
{"Europe/Istanbul", EET},
|
||
{"Europe/Jersey", GMTBST},
|
||
- {"Europe/Kaliningrad", FET},
|
||
+ {"Europe/Kaliningrad", EET},
|
||
{"Europe/Kiev", EET},
|
||
{"Europe/Lisbon", WET},
|
||
{"Europe/Ljubljana", CET},
|
||
@@ -696,7 +698,7 @@
|
||
{"Europe/Madrid", CET},
|
||
{"Europe/Malta", CET},
|
||
{"Europe/Mariehamn", EET},
|
||
- {"Europe/Minsk", FET},
|
||
+ {"Europe/Minsk", MSK},
|
||
{"Europe/Monaco", CET},
|
||
{"Europe/Moscow", MSK},
|
||
{"Europe/Nicosia", EET},
|
||
@@ -721,8 +723,7 @@
|
||
{"Europe/Vatican", CET},
|
||
{"Europe/Vienna", CET},
|
||
{"Europe/Vilnius", EET},
|
||
- {"Europe/Volgograd", new String[] {"Volgograd Time", "VOLT",
|
||
- "Volgograd Summer Time", "VOLST"}},
|
||
+ {"Europe/Volgograd", MSK},
|
||
{"Europe/Warsaw", CET},
|
||
{"Europe/Zagreb", CET},
|
||
{"Europe/Zaporozhye", EET},
|
||
@@ -775,6 +776,8 @@
|
||
{"PRT", AST},
|
||
{"Pacific/Apia", WST_SAMOA},
|
||
{"Pacific/Auckland", NZST},
|
||
+ {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST",
|
||
+ "Bougainville Daylight Time", "BST"}},
|
||
{"Pacific/Chatham", CHAST},
|
||
{"Pacific/Chuuk", CHUT},
|
||
{"Pacific/Easter", EASTER},
|
||
--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -45,8 +45,8 @@
|
||
protected final Object[][] getContents() {
|
||
String ACT[] = new String[] {"Acre Normalzeit", "ACT",
|
||
"Acre Sommerzeit", "ACST"};
|
||
- String ADELAIDE[] = new String[] {"Zentrale Normalzeit (S\u00FCdaustralien)", "CST",
|
||
- "Zentrale Sommerzeit (S\u00FCdaustralien)", "CST"};
|
||
+ String ADELAIDE[] = new String[] {"Zentrale Normalzeit (S\u00FCdaustralien)", "ACST",
|
||
+ "Zentrale Sommerzeit (S\u00FCdaustralien)", "ACDT"};
|
||
String AGT[] = new String[] {"Argentinische Zeit", "ART",
|
||
"Argentinische Sommerzeit", "ARST"};
|
||
String AKST[] = new String[] {"Alaska Normalzeit", "AKST",
|
||
@@ -61,10 +61,10 @@
|
||
"Atlantik Sommerzeit", "ADT"};
|
||
String BDT[] = new String[] {"Bangladesch Zeit", "BDT",
|
||
"Bangladesch Sommerzeit", "BDST"};
|
||
- String BRISBANE[] = new String[] {"\u00D6stliche Normalzeit (Queensland)", "EST",
|
||
- "\u00D6stliche Sommerzeit (Queensland)", "EST"};
|
||
- String BROKEN_HILL[] = new String[] {"Zentrale Normalzeit (S\u00FCdaustralien/New South Wales)", "CST",
|
||
- "Zentrale Sommerzeit (S\u00FCdaustralien/New South Wales)", "CST"};
|
||
+ String BRISBANE[] = new String[] {"\u00D6stliche Normalzeit (Queensland)", "AEST",
|
||
+ "\u00D6stliche Sommerzeit (Queensland)", "AEDT"};
|
||
+ String BROKEN_HILL[] = new String[] {"Zentrale Normalzeit (S\u00FCdaustralien/New South Wales)", "ACST",
|
||
+ "Zentrale Sommerzeit (S\u00FCdaustralien/New South Wales)", "ACDT"};
|
||
String BRT[] = new String[] {"Brasilianische Zeit", "BRT",
|
||
"Brasilianische Sommerzeit", "BRST"};
|
||
String BTT[] = new String[] {"Bhutanische Zeit", "BTT",
|
||
@@ -89,8 +89,8 @@
|
||
"Chinesische Sommerzeit", "CDT"};
|
||
String CUBA[] = new String[] {"Kubanische Normalzeit", "CST",
|
||
"Kubanische Sommerzeit", "CDT"};
|
||
- String DARWIN[] = new String[] {"Central Normalzeit (Northern Territory)", "CST",
|
||
- "Zentrale Sommerzeit (Northern Territory)", "CST"};
|
||
+ String DARWIN[] = new String[] {"Zentrale Normalzeit (Northern Territory)", "ACST",
|
||
+ "Zentrale Sommerzeit (Northern Territory)", "ACDT"};
|
||
String DUBLIN[] = new String[] {"Greenwich Zeit", "GMT",
|
||
"Irische Sommerzeit", "IST"};
|
||
String EAT[] = new String[] {"Ostafrikanische Zeit", "EAT",
|
||
@@ -103,8 +103,8 @@
|
||
"Ostgr\u00f6nl\u00e4ndische Sommerzeit", "EGST"};
|
||
String EST[] = new String[] {"\u00d6stliche Normalzeit", "EST",
|
||
"\u00d6stliche Sommerzeit", "EDT"};
|
||
- String EST_NSW[] = new String[] {"Eastern Normalzeit (Neus\u00FCdwales)", "EST",
|
||
- "\u00D6stliche Sommerzeit (New South Wales)", "EST"};
|
||
+ String EST_NSW[] = new String[] {"\u00D6stliche Normalzeit (New South Wales)", "AEST",
|
||
+ "\u00D6stliche Sommerzeit (New South Wales)", "AEDT"};
|
||
String FET[] = new String[] {"Kaliningrader Zeit", "FET",
|
||
"Kaliningrader Sommerzeit", "FEST"};
|
||
String GHMT[] = new String[] {"Ghanaische Normalzeit", "GMT",
|
||
@@ -133,10 +133,12 @@
|
||
"Indische Sommerzeit", "IDT"};
|
||
String JST[] = new String[] {"Japanische Normalzeit", "JST",
|
||
"Japanische Sommerzeit", "JDT"};
|
||
+ String KRAT[] = new String[] {"Krasnojarsker Zeit", "KRAT",
|
||
+ "Krasnojarsker Sommerzeit", "KRAST"};
|
||
String KST[] = new String[] {"Koreanische Normalzeit", "KST",
|
||
"Koreanische Sommerzeit", "KDT"};
|
||
String LORD_HOWE[] = new String[] {"Lord Howe Normalzeit", "LHST",
|
||
- "Lord Howe Sommerzeit", "LHST"};
|
||
+ "Lord Howe Sommerzeit", "LHDT"};
|
||
String MHT[] = new String[] {"Marshallinseln Zeit", "MHT",
|
||
"Marshallinseln Sommerzeit", "MHST"};
|
||
String MSK[] = new String[] {"Moskauer Normalzeit", "MSK",
|
||
@@ -165,16 +167,16 @@
|
||
"Pazifische Sommerzeit", "PDT"};
|
||
String SAMOA[] = new String[] {"Samoa Normalzeit", "SST",
|
||
"Samoa Sommerzeit", "SDT"};
|
||
+ String IRKT[] = new String[] {"Irkutsk Zeit", "IRKT",
|
||
+ "Irkutsk Sommerzeit", "IRKST"};
|
||
String SAST[] = new String[] {"S\u00fcdafrikanische Normalzeit", "SAST",
|
||
"S\u00fcdafrikanische Sommerzeit", "SAST"};
|
||
String SBT[] = new String[] {"Salomoninseln Zeit", "SBT",
|
||
"Salomoninseln Sommerzeit", "SBST"};
|
||
String SGT[] = new String[] {"Singapur Zeit", "SGT",
|
||
"Singapur Sommerzeit", "SGST"};
|
||
- String SLST[] = new String[] {"Greenwich Normalzeit", "GMT",
|
||
- "Sierra Leone Sommerzeit", "SLST"};
|
||
- String TASMANIA[] = new String[] {"\u00D6stliche Normalzeit (Tasmanien)", "EST",
|
||
- "\u00D6stliche Sommerzeit (Tasmanien)", "EST"};
|
||
+ String TASMANIA[] = new String[] {"\u00D6stliche Normalzeit (Tasmanien)", "AEST",
|
||
+ "\u00D6stliche Sommerzeit (Tasmanien)", "AEDT"};
|
||
String TMT[] = new String[] {"Turkmenische Zeit", "TMT",
|
||
"Turkmenische Sommerzeit", "TMST"};
|
||
String ULAT[]= new String[] {"Ulaanbaatar Zeit", "ULAT",
|
||
@@ -183,22 +185,22 @@
|
||
"Koordinierte Universalzeit", "UTC"};
|
||
String UZT[] = new String[] {"Usbekistan Zeit", "UZT",
|
||
"Usbekistan Sommerzeit", "UZST"};
|
||
- String VICTORIA[] = new String[] {"\u00D6stliche Normalzeit (Victoria)", "EST",
|
||
- "\u00D6stliche Sommerzeit (Victoria)", "EST"};
|
||
+ String VICTORIA[] = new String[] {"\u00D6stliche Normalzeit (Victoria)", "AEST",
|
||
+ "\u00D6stliche Sommerzeit (Victoria)", "AEDT"};
|
||
String VLAT[] = new String[] {"Wladiwostok Zeit", "VLAT",
|
||
"Wladiwostok Sommerzeit", "VLAST"};
|
||
- String WART[] = new String[] {"Westargentinische Zeit", "WART",
|
||
- "Westargentinische Sommerzeit", "WARST"};
|
||
String WAT[] = new String[] {"Westafrikanische Zeit", "WAT",
|
||
"Westafrikanische Sommerzeit", "WAST"};
|
||
String WET[] = new String[] {"Westeurop\u00e4ische Zeit", "WEZ",
|
||
"Westeurop\u00e4ische Sommerzeit", "WESZ"};
|
||
String WIT[] = new String[] {"Westindonesische Zeit", "WIB",
|
||
"Westindonesische Sommerzeit", "WIST"};
|
||
- String WST_AUS[] = new String[] {"Westliche Normalzeit (Australien)", "WST",
|
||
- "Westliche Sommerzeit (Australien)", "WST"};
|
||
- String WST_SAMOA[] = new String[] {"West Samoa Zeit", "WST",
|
||
+ String WST_AUS[] = new String[] {"Westliche Normalzeit (Australien)", "AWST",
|
||
+ "Westliche Sommerzeit (Australien)", "AWDT"};
|
||
+ String WST_SAMOA[] = new String[] {"West Samoa Zeit", "WSST",
|
||
"West Samoa Sommerzeit", "WSDT"};
|
||
+ String XJT[] = new String[] {"Chinesische Normalzeit", "XJT",
|
||
+ "Chinesische Sommerzeit", "XJDT"};
|
||
String YAKT[] = new String[] {"Jakutsk Zeit", "YAKT",
|
||
"Jakutsk Sommerzeit", "YAKST"};
|
||
|
||
@@ -262,7 +264,7 @@
|
||
{"Africa/Djibouti", EAT},
|
||
{"Africa/Douala", WAT},
|
||
{"Africa/El_Aaiun", WET},
|
||
- {"Africa/Freetown", SLST},
|
||
+ {"Africa/Freetown", GMT},
|
||
{"Africa/Gaborone", CAT},
|
||
{"Africa/Harare", CAT},
|
||
{"Africa/Johannesburg", SAST},
|
||
@@ -358,7 +360,7 @@
|
||
{"America/Godthab", new String[] {"Westgr\u00f6nl\u00e4ndische Zeit", "WGT",
|
||
"Westgr\u00f6nl\u00e4ndische Sommerzeit", "WGST"}},
|
||
{"America/Goose_Bay", AST},
|
||
- {"America/Grand_Turk", EST},
|
||
+ {"America/Grand_Turk", AST},
|
||
{"America/Grenada", AST},
|
||
{"America/Guadeloupe", AST},
|
||
{"America/Guatemala", CST},
|
||
@@ -401,8 +403,7 @@
|
||
{"America/Mendoza", AGT},
|
||
{"America/Menominee", CST},
|
||
{"America/Merida", CST},
|
||
- {"America/Metlakatla", new String[] {"Metlakatla Normalzeit", "MeST",
|
||
- "Metlakatla Sommerzeit", "MeDT"}},
|
||
+ {"America/Metlakatla", PST},
|
||
{"America/Mexico_City", CST},
|
||
{"America/Miquelon", new String[] {"Pierre & Miquelon Normalzeit", "PMST",
|
||
"Pierre & Miquelon Sommerzeit", "PMDT"}},
|
||
@@ -467,7 +468,7 @@
|
||
{"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville Zeit", "DDUT",
|
||
"Dumont-d'Urville Sommerzeit", "DDUST"}},
|
||
{"Antarctica/Macquarie", new String[] {"Macquarieinsel Zeit", "MIST",
|
||
- "Macquarieinsel Sommerzeit", "MIST"}},
|
||
+ "Macquarieinsel Sommerzeit", "MIDT"}},
|
||
{"Antarctica/Mawson", new String[] {"Mawson Zeit", "MAWT",
|
||
"Mawson Sommerzeit", "MAWST"}},
|
||
{"Antarctica/McMurdo", NZST},
|
||
@@ -505,6 +506,7 @@
|
||
{"Asia/Brunei", new String[] {"Brunei Zeit", "BNT",
|
||
"Brunei Sommerzeit", "BNST"}},
|
||
{"Asia/Calcutta", IST},
|
||
+ {"Asia/Chita", IRKT},
|
||
{"Asia/Choibalsan", new String[] {"Choibalsan Zeit", "CHOT",
|
||
"Choibalsan Sommerzeit", "CHOST"}},
|
||
{"Asia/Chongqing", CTT},
|
||
@@ -525,8 +527,7 @@
|
||
{"Asia/Hong_Kong", HKT},
|
||
{"Asia/Hovd", new String[] {"Hovd Zeit", "HOVT",
|
||
"Hovd Sommerzeit", "HOVST"}},
|
||
- {"Asia/Irkutsk", new String[] {"Irkutsk Zeit", "IRKT",
|
||
- "Irkutsk Sommerzeit", "IRKST"}},
|
||
+ {"Asia/Irkutsk", IRKT},
|
||
{"Asia/Istanbul", EET},
|
||
{"Asia/Jakarta", WIT},
|
||
{"Asia/Jayapura", new String[] {"Ostindonesische Zeit", "WIT",
|
||
@@ -536,14 +537,13 @@
|
||
{"Asia/Kamchatka", new String[] {"Petropawlowsk-Kamtschatkische Zeit", "PETT",
|
||
"Petropawlowsk-Kamtschatkische Sommerzeit", "PETST"}},
|
||
{"Asia/Karachi", PKT},
|
||
- {"Asia/Kashgar", CTT},
|
||
+ {"Asia/Kashgar", XJT},
|
||
{"Asia/Kathmandu", NPT},
|
||
{"Asia/Katmandu", NPT},
|
||
{"Asia/Khandyga", new String[] {"Chandyga Zeit", "YAKT",
|
||
"Chandyga Sommerzeit", "YAKST"}},
|
||
{"Asia/Kolkata", IST},
|
||
- {"Asia/Krasnoyarsk", new String[] {"Krasnojarsker Zeit", "KRAT",
|
||
- "Krasnojarsker Sommerzeit", "KRAST"}},
|
||
+ {"Asia/Krasnoyarsk", KRAT},
|
||
{"Asia/Kuala_Lumpur", MYT},
|
||
{"Asia/Kuching", MYT},
|
||
{"Asia/Kuwait", ARAST},
|
||
@@ -556,7 +556,7 @@
|
||
"Philippinische Sommerzeit", "PHST"}},
|
||
{"Asia/Muscat", GST},
|
||
{"Asia/Nicosia", EET},
|
||
- {"Asia/Novokuznetsk", NOVT},
|
||
+ {"Asia/Novokuznetsk", KRAT},
|
||
{"Asia/Novosibirsk", NOVT},
|
||
{"Asia/Oral", new String[] {"Oral Zeit", "ORAT",
|
||
"Oral Sommerzeit", "ORAST"}},
|
||
@@ -577,6 +577,8 @@
|
||
{"Asia/Samarkand", UZT},
|
||
{"Asia/Seoul", KST},
|
||
{"Asia/Singapore", SGT},
|
||
+ {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET",
|
||
+ "Srednekolymsk Daylight Time", "SREDT"}},
|
||
{"Asia/Taipei", CTT},
|
||
{"Asia/Tel_Aviv", ISRAEL},
|
||
{"Asia/Tashkent", UZT},
|
||
@@ -588,7 +590,7 @@
|
||
{"Asia/Ujung_Pandang", CIT},
|
||
{"Asia/Ulaanbaatar", ULAT},
|
||
{"Asia/Ulan_Bator", ULAT},
|
||
- {"Asia/Urumqi", CTT},
|
||
+ {"Asia/Urumqi", XJT},
|
||
{"Asia/Ust-Nera", new String[] {"Ust-Nera Zeit", "VLAT",
|
||
"Ust-Nera Sommerzeit", "VLAST"}},
|
||
{"Asia/Vientiane", ICT},
|
||
@@ -620,8 +622,8 @@
|
||
{"Australia/Canberra", EST_NSW},
|
||
{"Australia/Currie", EST_NSW},
|
||
{"Australia/Darwin", DARWIN},
|
||
- {"Australia/Eucla", new String[] {"Zentral-Westliche Normalzeit (Australien)", "CWST",
|
||
- "Zentral-Westliche Sommerzeit (Australien)", "CWST"}},
|
||
+ {"Australia/Eucla", new String[] {"Zentral-Westliche Normalzeit (Australien)", "ACWST",
|
||
+ "Zentral-Westliche Sommerzeit (Australien)", "ACWDT"}},
|
||
{"Australia/Hobart", TASMANIA},
|
||
{"Australia/LHI", LORD_HOWE},
|
||
{"Australia/Lindeman", BRISBANE},
|
||
@@ -687,7 +689,7 @@
|
||
{"Europe/Isle_of_Man", GMTBST},
|
||
{"Europe/Istanbul", EET},
|
||
{"Europe/Jersey", GMTBST},
|
||
- {"Europe/Kaliningrad", FET},
|
||
+ {"Europe/Kaliningrad", EET},
|
||
{"Europe/Kiev", EET},
|
||
{"Europe/Lisbon", WET},
|
||
{"Europe/Ljubljana", CET},
|
||
@@ -696,7 +698,7 @@
|
||
{"Europe/Madrid", CET},
|
||
{"Europe/Malta", CET},
|
||
{"Europe/Mariehamn", EET},
|
||
- {"Europe/Minsk", FET},
|
||
+ {"Europe/Minsk", MSK},
|
||
{"Europe/Monaco", CET},
|
||
{"Europe/Moscow", MSK},
|
||
{"Europe/Nicosia", EET},
|
||
@@ -721,8 +723,7 @@
|
||
{"Europe/Vatican", CET},
|
||
{"Europe/Vienna", CET},
|
||
{"Europe/Vilnius", EET},
|
||
- {"Europe/Volgograd", new String[] {"Wolgograder Zeit", "VOLT",
|
||
- "Wolgograder Sommerzeit", "VOLST"}},
|
||
+ {"Europe/Volgograd", MSK},
|
||
{"Europe/Warsaw", CET},
|
||
{"Europe/Zagreb", CET},
|
||
{"Europe/Zaporozhye", EET},
|
||
@@ -775,6 +776,8 @@
|
||
{"PRT", AST},
|
||
{"Pacific/Apia", WST_SAMOA},
|
||
{"Pacific/Auckland", NZST},
|
||
+ {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST",
|
||
+ "Bougainville Daylight Time", "BST"}},
|
||
{"Pacific/Chatham", CHAST},
|
||
{"Pacific/Chuuk", CHUT},
|
||
{"Pacific/Easter", EASTER},
|
||
--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -45,8 +45,8 @@
|
||
protected final Object[][] getContents() {
|
||
String ACT[] = new String[] {"Hora de Acre", "ACT",
|
||
"Hora de verano de Acre", "ACST"};
|
||
- String ADELAIDE[] = new String[] {"Hora est\u00E1ndar Central (Sur de Australia)", "CST",
|
||
- "Hora de verano Central (Sur de Australia)", "CST"};
|
||
+ String ADELAIDE[] = new String[] {"Hora est\u00E1ndar Central (Sur de Australia)", "ACST",
|
||
+ "Hora de verano Central (Sur de Australia)", "ACDT"};
|
||
String AGT[] = new String[] {"Hora de Argentina", "ART",
|
||
"Hora de verano de Argentina", "ARST"};
|
||
String AKST[] = new String[] {"Hora est\u00e1ndar de Alaska", "AKST",
|
||
@@ -61,10 +61,10 @@
|
||
"Hora de verano Atl\u00e1ntico", "ADT"};
|
||
String BDT[] = new String[] {"Hora de Bangladesh", "BDT",
|
||
"Hora de verano de Bangladesh", "BDST"};
|
||
- String BRISBANE[] = new String[] {"Hora est\u00E1ndar del Este (Queensland)", "EST",
|
||
- "Hora est\u00E1ndar de verano del Este (Queensland)", "EST"};
|
||
- String BROKEN_HILL[] = new String[] {"Hora est\u00E1ndar Central (Sur de Australia/Nueva Gales del Sur)", "CST",
|
||
- "Hora de verano Central (Sur de Australia/Nueva Gales del Sur)", "CST"};
|
||
+ String BRISBANE[] = new String[] {"Hora est\u00E1ndar del Este (Queensland)", "AEST",
|
||
+ "Hora est\u00E1ndar de verano del Este (Queensland)", "AEDT"};
|
||
+ String BROKEN_HILL[] = new String[] {"Hora est\u00E1ndar Central (Sur de Australia/Nueva Gales del Sur)", "ACST",
|
||
+ "Hora de verano Central (Sur de Australia/Nueva Gales del Sur)", "ACDT"};
|
||
String BRT[] = new String[] {"Hora de Brasil", "BRT",
|
||
"Hora de verano de Brasil", "BRST"};
|
||
String BTT[] = new String[] {"Hora de But\u00e1n", "BTT",
|
||
@@ -77,8 +77,8 @@
|
||
"Hora de verano de Chatham", "CHADT"};
|
||
String ChST[] = new String[] {"Hora est\u00e1ndar de Chamorro", "ChST",
|
||
"Hora de verano de Chamorro", "ChDT"};
|
||
- String CHUT[] = new String[] {"Chuuk Time", "CHUT",
|
||
- "Chuuk Summer Time", "CHUST"};
|
||
+ String CHUT[] = new String[] {"Hora de Chuuk", "CHUT",
|
||
+ "Hora de verano de Chuuk", "CHUST"};
|
||
String CIT[] = new String[] {"Hora de Indonesia Central", "WITA",
|
||
"Hora de verano de Indonesia Central", "CIST"};
|
||
String CLT[] = new String[] {"Hora de Chile", "CLT",
|
||
@@ -89,8 +89,8 @@
|
||
"Hora de verano de China", "CDT"};
|
||
String CUBA[] = new String[] {"Hora est\u00e1ndar de Cuba", "CST",
|
||
"Hora de verano de Cuba", "CDT"};
|
||
- String DARWIN[] = new String[] {"Hora est\u00E1ndar Central (territorio del Norte)", "CST",
|
||
- "Hora de verano Central (territorio del Norte)", "CST"};
|
||
+ String DARWIN[] = new String[] {"Hora est\u00E1ndar Central (territorio del Norte)", "ACST",
|
||
+ "Hora de verano Central (territorio del Norte)", "ACDT"};
|
||
String DUBLIN[] = new String[] {"Hora del Meridiano de Greenwich", "GMT",
|
||
"Hora de verano de Irlanda", "IST"};
|
||
String EAT[] = new String[] {"Hora de \u00c1frica Oriental", "EAT",
|
||
@@ -103,8 +103,8 @@
|
||
"Hora de verano de Groenlandia Oriental", "EGST"};
|
||
String EST[] = new String[] {"Hora est\u00e1ndar Oriental", "EST",
|
||
"Hora de verano Oriental", "EDT"};
|
||
- String EST_NSW[] = new String[] {"Hora est\u00E1ndar Oriental (Nueva Gales del Sur)", "EST",
|
||
- "Hora de verano Oriental (Nueva Gales del Sur)", "EST"};
|
||
+ String EST_NSW[] = new String[] {"Hora est\u00E1ndar Oriental (Nueva Gales del Sur)", "AEST",
|
||
+ "Hora de verano Oriental (Nueva Gales del Sur)", "AEDT"};
|
||
String FET[] = new String[] {"Hora de Europa m\u00E1s Oriental", "FET",
|
||
"Hora de verano de Europa m\u00E1s Oriental", "FEST"};
|
||
String GHMT[] = new String[] {"Hora central de Ghana", "GMT",
|
||
@@ -133,10 +133,12 @@
|
||
"Hora de verano de India", "IDT"};
|
||
String JST[] = new String[] {"Hora est\u00e1ndar de Jap\u00f3n", "JST",
|
||
"Hora de verano de Jap\u00f3n", "JDT"};
|
||
+ String KRAT[] = new String[] {"Hora de Krasnoyarsk", "KRAT",
|
||
+ "Hora de verano de Krasnoyarsk", "KRAST"};
|
||
String KST[] = new String[] {"Hora est\u00e1ndar de Corea", "KST",
|
||
"Hora de verano de Corea", "KDT"};
|
||
String LORD_HOWE[] = new String[] {"Hora est\u00e1ndar de Lord Howe", "LHST",
|
||
- "Hora de verano de Lord Howe", "LHST"};
|
||
+ "Hora de verano de Lord Howe", "LHDT"};
|
||
String MHT[] = new String[] {"Hora de las Islas Marshall", "MHT",
|
||
"Hora de verano de las Islas Marshall", "MHST"};
|
||
String MSK[] = new String[] {"Hora est\u00e1ndar de Mosc\u00fa", "MSK",
|
||
@@ -159,22 +161,22 @@
|
||
"Hora de verano de Pitcairn", "PDT"};
|
||
String PKT[] = new String[] {"Hora de Pakist\u00e1n", "PKT",
|
||
"Hora de verano de Pakist\u00e1n", "PKST"};
|
||
- String PONT[] = new String[] {"Pohnpei Time", "PONT",
|
||
- "Pohnpei Summer Time", "PONST"};
|
||
+ String PONT[] = new String[] {"Hora de Pohnpei", "PONT",
|
||
+ "Hora de verano de Pohnpei", "PONST"};
|
||
String PST[] = new String[] {"Hora est\u00e1ndar del Pac\u00edfico", "PST",
|
||
"Hora de verano del Pac\u00edfico", "PDT"};
|
||
String SAMOA[] = new String[] {"Hora est\u00e1ndar de Samoa", "SST",
|
||
"Hora de verano de Samoa", "SDT"};
|
||
+ String IRKT[] = new String[] {"Hora de Irkutsk", "IRKT",
|
||
+ "Hora de verano de Irkutsk", "IRKST"};
|
||
String SAST[] = new String[] {"Hora est\u00e1ndar de Sud\u00e1frica", "SAST",
|
||
"Hora de verano de Sud\u00e1frica", "SAST"};
|
||
String SBT[] = new String[] {"Hora de las Islas Solomon", "SBT",
|
||
"Hora de verano de las Islas Solomon", "SBST"};
|
||
String SGT[] = new String[] {"Hora de Singapur", "SGT",
|
||
"Hora de verano de Singapur", "SGST"};
|
||
- String SLST[] = new String[] {"Hora del Meridiano de Greenwich", "GMT",
|
||
- "Hora de verano de Sierra Leona", "SLST"};
|
||
- String TASMANIA[] = new String[] {"Hora est\u00E1ndar del Este (Tasmania)", "EST",
|
||
- "Hora de verano del Este (Tasmania)", "EST"};
|
||
+ String TASMANIA[] = new String[] {"Hora est\u00E1ndar del Este (Tasmania)", "AEST",
|
||
+ "Hora de verano del Este (Tasmania)", "AEDT"};
|
||
String TMT[] = new String[] {"Hora de Turkmenist\u00e1n", "TMT",
|
||
"Hora de verano de Turkmenist\u00e1n", "TMST"};
|
||
String ULAT[]= new String[] {"Hora de Ulan Bator", "ULAT",
|
||
@@ -183,22 +185,22 @@
|
||
"Hora Universal Coordinada", "UTC"};
|
||
String UZT[] = new String[] {"Hora de Uzbekist\u00e1n", "UZT",
|
||
"Hora de verano de Uzbekist\u00e1n", "UZST"};
|
||
- String VICTORIA[] = new String[] {"Hora est\u00E1ndar del Este (Victoria)", "EST",
|
||
- "Hora de verano del Este (Victoria)", "EST"};
|
||
+ String VICTORIA[] = new String[] {"Hora est\u00E1ndar del Este (Victoria)", "AEST",
|
||
+ "Hora de verano del Este (Victoria)", "AEDT"};
|
||
String VLAT[] = new String[] {"Hora de Vladivostok", "VLAT",
|
||
"Hora de verano de Vladivostok", "VLAST"};
|
||
- String WART[] = new String[] {"Hora de Argentina Occidental", "WART",
|
||
- "Hora de verano de Argentina Occidental", "WARST"};
|
||
String WAT[] = new String[] {"Hora de \u00c1frica Occidental", "WAT",
|
||
"Hora de verano de \u00c1frica Occidental", "WAST"};
|
||
String WET[] = new String[] {"Hora de Europa Occidental", "WET",
|
||
"Hora de verano de Europa Occidental", "WEST"};
|
||
String WIT[] = new String[] {"Hora de Indonesia Occidental", "WIB",
|
||
"Indonesia Hora de verano de Indonesia Occidental", "WIST"};
|
||
- String WST_AUS[] = new String[] {"Hora est\u00E1ndar Occidental (Australia)", "WST",
|
||
- "Hora de verano Occidental (Australia)", "WST"};
|
||
- String WST_SAMOA[] = new String[] {"Hora de Samoa Occidental", "WST",
|
||
+ String WST_AUS[] = new String[] {"Hora est\u00E1ndar Occidental (Australia)", "AWST",
|
||
+ "Hora de verano Occidental (Australia)", "AWDT"};
|
||
+ String WST_SAMOA[] = new String[] {"Hora de Samoa Occidental", "WSST",
|
||
"Hora de verano de Samoa Occidental", "WSDT"};
|
||
+ String XJT[] = new String[] {"Hora est\u00e1ndar de China", "XJT",
|
||
+ "Hora de verano de China", "XJDT"};
|
||
String YAKT[] = new String[] {"Hora de Yakutsk", "YAKT",
|
||
"Hora de verano de Yakutsk", "YAKST"};
|
||
|
||
@@ -262,7 +264,7 @@
|
||
{"Africa/Djibouti", EAT},
|
||
{"Africa/Douala", WAT},
|
||
{"Africa/El_Aaiun", WET},
|
||
- {"Africa/Freetown", SLST},
|
||
+ {"Africa/Freetown", GMT},
|
||
{"Africa/Gaborone", CAT},
|
||
{"Africa/Harare", CAT},
|
||
{"Africa/Johannesburg", SAST},
|
||
@@ -358,7 +360,7 @@
|
||
{"America/Godthab", new String[] {"Hora de Groenlandia Occidental", "WGT",
|
||
"Hora de verano de Groenlandia Occidental", "WGST"}},
|
||
{"America/Goose_Bay", AST},
|
||
- {"America/Grand_Turk", EST},
|
||
+ {"America/Grand_Turk", AST},
|
||
{"America/Grenada", AST},
|
||
{"America/Guadeloupe", AST},
|
||
{"America/Guatemala", CST},
|
||
@@ -401,8 +403,7 @@
|
||
{"America/Mendoza", AGT},
|
||
{"America/Menominee", CST},
|
||
{"America/Merida", CST},
|
||
- {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
|
||
- "Metlakatla Daylight Time", "MeDT"}},
|
||
+ {"America/Metlakatla", PST},
|
||
{"America/Mexico_City", CST},
|
||
{"America/Miquelon", new String[] {"Hora est\u00e1ndar de Pierre & Miquelon", "PMST",
|
||
"Hora de verano de Pierre & Miquelon", "PMDT"}},
|
||
@@ -466,8 +467,8 @@
|
||
"Hora de verano de Davis", "DAVST"}},
|
||
{"Antarctica/DumontDUrville", new String[] {"Hora de Dumont-d'Urville", "DDUT",
|
||
"Hora de verano de Dumont-d'Urville", "DDUST"}},
|
||
- {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
|
||
- "Macquarie Island Summer Time", "MIST"}},
|
||
+ {"Antarctica/Macquarie", new String[] {"Hora de Isla Macquarie", "MIST",
|
||
+ "Hora de verano de Isla Macquarie", "MIDT"}},
|
||
{"Antarctica/Mawson", new String[] {"Hora de Mawson", "MAWT",
|
||
"Hora de verano de Mawson", "MAWST"}},
|
||
{"Antarctica/McMurdo", NZST},
|
||
@@ -505,6 +506,7 @@
|
||
{"Asia/Brunei", new String[] {"Hora de Brunei", "BNT",
|
||
"Hora de verano de Brunei", "BNST"}},
|
||
{"Asia/Calcutta", IST},
|
||
+ {"Asia/Chita", IRKT},
|
||
{"Asia/Choibalsan", new String[] {"Hora de Choibalsan", "CHOT",
|
||
"Hora de verano de Choibalsan", "CHOST"}},
|
||
{"Asia/Chongqing", CTT},
|
||
@@ -525,8 +527,7 @@
|
||
{"Asia/Hong_Kong", HKT},
|
||
{"Asia/Hovd", new String[] {"Hora de Hovd", "HOVT",
|
||
"Hora de verano de Hovd", "HOVST"}},
|
||
- {"Asia/Irkutsk", new String[] {"Hora de Irkutsk", "IRKT",
|
||
- "Hora de verano de Irkutsk", "IRKST"}},
|
||
+ {"Asia/Irkutsk", IRKT},
|
||
{"Asia/Istanbul", EET},
|
||
{"Asia/Jakarta", WIT},
|
||
{"Asia/Jayapura", new String[] {"Hora de Indonesia Oriental", "WIT",
|
||
@@ -536,14 +537,13 @@
|
||
{"Asia/Kamchatka", new String[] {"Hora de Petropavlovsk-Kamchatski", "PETT",
|
||
"Hora de verano de Petropavlovsk-Kamchatski", "PETST"}},
|
||
{"Asia/Karachi", PKT},
|
||
- {"Asia/Kashgar", CTT},
|
||
+ {"Asia/Kashgar", XJT},
|
||
{"Asia/Kathmandu", NPT},
|
||
{"Asia/Katmandu", NPT},
|
||
{"Asia/Khandyga", new String[] {"Hora de Khandyga", "YAKT",
|
||
"Hora de verano de Khandyga", "YAKST"}},
|
||
{"Asia/Kolkata", IST},
|
||
- {"Asia/Krasnoyarsk", new String[] {"Hora de Krasnoyarsk", "KRAT",
|
||
- "Hora de verano de Krasnoyarsk", "KRAST"}},
|
||
+ {"Asia/Krasnoyarsk", KRAT},
|
||
{"Asia/Kuala_Lumpur", MYT},
|
||
{"Asia/Kuching", MYT},
|
||
{"Asia/Kuwait", ARAST},
|
||
@@ -556,7 +556,7 @@
|
||
"Hora de verano de Filipinas", "PHST"}},
|
||
{"Asia/Muscat", GST},
|
||
{"Asia/Nicosia", EET},
|
||
- {"Asia/Novokuznetsk", NOVT},
|
||
+ {"Asia/Novokuznetsk", KRAT},
|
||
{"Asia/Novosibirsk", NOVT},
|
||
{"Asia/Oral", new String[] {"Hora de Uralsk", "ORAT",
|
||
"Hora de verano de Uralsk", "ORAST"}},
|
||
@@ -577,6 +577,8 @@
|
||
{"Asia/Samarkand", UZT},
|
||
{"Asia/Seoul", KST},
|
||
{"Asia/Singapore", SGT},
|
||
+ {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET",
|
||
+ "Srednekolymsk Daylight Time", "SREDT"}},
|
||
{"Asia/Taipei", CTT},
|
||
{"Asia/Tel_Aviv", ISRAEL},
|
||
{"Asia/Tashkent", UZT},
|
||
@@ -588,7 +590,7 @@
|
||
{"Asia/Ujung_Pandang", CIT},
|
||
{"Asia/Ulaanbaatar", ULAT},
|
||
{"Asia/Ulan_Bator", ULAT},
|
||
- {"Asia/Urumqi", CTT},
|
||
+ {"Asia/Urumqi", XJT},
|
||
{"Asia/Ust-Nera", new String[] {"Hora de Ust-Nera", "VLAT",
|
||
"Hora de verano de Ust-Nera", "VLAST"}},
|
||
{"Asia/Vientiane", ICT},
|
||
@@ -620,8 +622,8 @@
|
||
{"Australia/Canberra", EST_NSW},
|
||
{"Australia/Currie", EST_NSW},
|
||
{"Australia/Darwin", DARWIN},
|
||
- {"Australia/Eucla", new String[] {"Hora est\u00E1ndar de Australia Central y Occidental", "CWST",
|
||
- "Hora est\u00E1ndar de verano de Australia Central y Occidental", "CWST"}},
|
||
+ {"Australia/Eucla", new String[] {"Hora est\u00E1ndar de Australia Central y Occidental", "ACWST",
|
||
+ "Hora est\u00E1ndar de verano de Australia Central y Occidental", "ACWDT"}},
|
||
{"Australia/Hobart", TASMANIA},
|
||
{"Australia/LHI", LORD_HOWE},
|
||
{"Australia/Lindeman", BRISBANE},
|
||
@@ -687,7 +689,7 @@
|
||
{"Europe/Isle_of_Man", GMTBST},
|
||
{"Europe/Istanbul", EET},
|
||
{"Europe/Jersey", GMTBST},
|
||
- {"Europe/Kaliningrad", FET},
|
||
+ {"Europe/Kaliningrad", EET},
|
||
{"Europe/Kiev", EET},
|
||
{"Europe/Lisbon", WET},
|
||
{"Europe/Ljubljana", CET},
|
||
@@ -696,7 +698,7 @@
|
||
{"Europe/Madrid", CET},
|
||
{"Europe/Malta", CET},
|
||
{"Europe/Mariehamn", EET},
|
||
- {"Europe/Minsk", FET},
|
||
+ {"Europe/Minsk", MSK},
|
||
{"Europe/Monaco", CET},
|
||
{"Europe/Moscow", MSK},
|
||
{"Europe/Nicosia", EET},
|
||
@@ -721,8 +723,7 @@
|
||
{"Europe/Vatican", CET},
|
||
{"Europe/Vienna", CET},
|
||
{"Europe/Vilnius", EET},
|
||
- {"Europe/Volgograd", new String[] {"Hora de Volgogrado", "VOLT",
|
||
- "Hora de verano de Volgogrado", "VOLST"}},
|
||
+ {"Europe/Volgograd", MSK},
|
||
{"Europe/Warsaw", CET},
|
||
{"Europe/Zagreb", CET},
|
||
{"Europe/Zaporozhye", EET},
|
||
@@ -775,6 +776,8 @@
|
||
{"PRT", AST},
|
||
{"Pacific/Apia", WST_SAMOA},
|
||
{"Pacific/Auckland", NZST},
|
||
+ {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST",
|
||
+ "Bougainville Daylight Time", "BST"}},
|
||
{"Pacific/Chatham", CHAST},
|
||
{"Pacific/Chuuk", CHUT},
|
||
{"Pacific/Easter", EASTER},
|
||
--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -45,8 +45,8 @@
|
||
protected final Object[][] getContents() {
|
||
String ACT[] = new String[] {"Heure de l'Acre", "ACT",
|
||
"Heure d'\u00e9t\u00e9 de l'Acre", "ACST"};
|
||
- String ADELAIDE[] = new String[] {"Heure standard d'Australie centrale (Australie du sud)", "CST",
|
||
- "Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud)", "CST"};
|
||
+ String ADELAIDE[] = new String[] {"Heure standard d'Australie centrale (Australie du sud)", "ACST",
|
||
+ "Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud)", "ACDT"};
|
||
String AGT[] = new String[] {"Heure D'Argentine", "ART",
|
||
"Heure d'\u00e9t\u00e9 D'Argentine", "ARST"};
|
||
String AKST[] = new String[] {"Heure normale d'Alaska", "AKST",
|
||
@@ -61,10 +61,10 @@
|
||
"Heure avanc\u00e9e de l'Atlantique", "ADT"};
|
||
String BDT[] = new String[] {"Heure du Bangladesh", "BDT",
|
||
"Heure d'\u00e9t\u00e9 du Bangladesh", "BDST"};
|
||
- String BRISBANE[] = new String[] {"Heure standard d'Australie orientale (Queensland)", "EST",
|
||
- "Heure d'\u00E9t\u00E9 d'Australie orientale (Queensland)", "EST"};
|
||
- String BROKEN_HILL[] = new String[] {"Heure standard d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)", "CST",
|
||
- "Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)", "CST"};
|
||
+ String BRISBANE[] = new String[] {"Heure standard d'Australie orientale (Queensland)", "AEST",
|
||
+ "Heure d'\u00E9t\u00E9 d'Australie orientale (Queensland)", "AEDT"};
|
||
+ String BROKEN_HILL[] = new String[] {"Heure standard d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)", "ACST",
|
||
+ "Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)", "ACDT"};
|
||
String BRT[] = new String[] {"Heure du Br\u00e9sil", "BRT",
|
||
"Heure d'\u00e9t\u00e9 du Br\u00e9sil", "BRST"};
|
||
String BTT[] = new String[] {"Heure du Bhoutan", "BTT",
|
||
@@ -89,8 +89,8 @@
|
||
"Heure avanc\u00e9e de Chine", "CDT"};
|
||
String CUBA[] = new String[] {"Heure standard de Cuba", "CST",
|
||
"Heure d'\u00e9t\u00e9 de Cuba", "CDT"};
|
||
- String DARWIN[] = new String[] {"Heure standard d'Australie centrale (Territoire du Nord)", "CST",
|
||
- "Heure d'\u00E9t\u00E9 d'Australie centrale (Territoire du Nord)", "CST"};
|
||
+ String DARWIN[] = new String[] {"Heure standard d'Australie centrale (Territoire du Nord)", "ACST",
|
||
+ "Heure d'\u00E9t\u00E9 d'Australie centrale (Territoire du Nord)", "ACDT"};
|
||
String DUBLIN[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT",
|
||
"Heure d'\u00e9t\u00e9 irlandaise", "IST"};
|
||
String EAT[] = new String[] {"Heure d'Afrique de l'Est", "EAT",
|
||
@@ -103,8 +103,8 @@
|
||
"Heure d'\u00e9t\u00e9 du Groenland de l'Est", "EGST"};
|
||
String EST[] = new String[] {"Heure normale de l'Est", "EST",
|
||
"Heure avanc\u00e9e de l'Est", "EDT"};
|
||
- String EST_NSW[] = new String[] {"Heure normale de l'Est (Nouvelle-Galles du Sud)", "EST",
|
||
- "Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud)", "EST"};
|
||
+ String EST_NSW[] = new String[] {"Heure normale de l'Est (Nouvelle-Galles du Sud)", "AEST",
|
||
+ "Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud)", "AEDT"};
|
||
String FET[] = new String[] {"Heure d'Europe de l'Est UTC+3", "FET",
|
||
"Heure d'\u00E9t\u00E9 d'Europe de l'Est UTC+3", "FEST"};
|
||
String GHMT[] = new String[] {"Heure du Ghana", "GMT",
|
||
@@ -133,10 +133,12 @@
|
||
"Heure avanc\u00e9e d'Inde", "IDT"};
|
||
String JST[] = new String[] {"Heure normale du Japon", "JST",
|
||
"Heure avanc\u00e9e du Japon", "JDT"};
|
||
+ String KRAT[] = new String[] {"Heure de Krasno\u00efarsk", "KRAT",
|
||
+ "Heure d'\u00e9t\u00e9 de Krasno\u00efarsk", "KRAST"};
|
||
String KST[] = new String[] {"Heure normale de Cor\u00e9e", "KST",
|
||
"Heure avanc\u00e9e de Cor\u00e9e", "KDT"};
|
||
String LORD_HOWE[] = new String[] {"Heure standard de Lord Howe", "LHST",
|
||
- "Heure d'\u00e9t\u00e9 de Lord Howe", "LHST"};
|
||
+ "Heure d'\u00e9t\u00e9 de Lord Howe", "LHDT"};
|
||
String MHT[] = new String[] {"Heure des Iles Marshall", "MHT",
|
||
"Heure d'\u00e9t\u00e9 des Iles Marshall", "MHST"};
|
||
String MSK[] = new String[] {"Heure standard de Moscou", "MSK",
|
||
@@ -165,16 +167,16 @@
|
||
"Heure avanc\u00e9e du Pacifique", "PDT"};
|
||
String SAMOA[] = new String[] {"Heure standard de Samoa", "SST",
|
||
"Heure avanc\u00e9e de Samoa", "SDT"};
|
||
+ String IRKT[] = new String[] {"Heure d'Irkutsk", "IRKT",
|
||
+ "Heure d'\u00e9t\u00e9 d'Irkutsk", "IRKST"};
|
||
String SAST[] = new String[] {"Heure normale d'Afrique du Sud", "SAST",
|
||
"Heure d'\u00e9t\u00e9 d'Afrique du Sud", "SAST"};
|
||
String SBT[] = new String[] {"Heure des \u00celes Salomon", "SBT",
|
||
"Heure d'\u00e9t\u00e9 des \u00celes Salomon", "SBST"};
|
||
String SGT[] = new String[] {"Heure de Singapour", "SGT",
|
||
"Heure d'\u00e9t\u00e9 de Singapour", "SGST"};
|
||
- String SLST[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT",
|
||
- "Heure d'\u00e9t\u00e9 de Sierra Leone", "SLST"};
|
||
- String TASMANIA[] = new String[] {"Heure standard d'Australie orientale (Tasmanie)", "EST",
|
||
- "Heure d'\u00E9t\u00E9 d'Australie orientale (Tasmanie)", "EST"};
|
||
+ String TASMANIA[] = new String[] {"Heure standard d'Australie orientale (Tasmanie)", "AEST",
|
||
+ "Heure d'\u00E9t\u00E9 d'Australie orientale (Tasmanie)", "AEDT"};
|
||
String TMT[] = new String[] {"Heure du Turkm\u00e9nistan", "TMT",
|
||
"Heure d'\u00e9t\u00e9 du Turkm\u00e9nistan", "TMST"};
|
||
String ULAT[]= new String[] {"Heure de l'Ulaanbaatar", "ULAT",
|
||
@@ -183,22 +185,22 @@
|
||
"Temps universel coordonn\u00e9", "UTC"};
|
||
String UZT[] = new String[] {"Heure de l'Ouzb\u00e9kistan", "UZT",
|
||
"Heure d'\u00e9t\u00e9 de l'Ouzb\u00e9kistan", "UZST"};
|
||
- String VICTORIA[] = new String[] {"Heure standard d'Australie orientale (Victoria)", "EST",
|
||
- "Heure d'\u00E9t\u00E9 d'Australie orientale (Victoria)", "EST"};
|
||
+ String VICTORIA[] = new String[] {"Heure standard d'Australie orientale (Victoria)", "AEST",
|
||
+ "Heure d'\u00E9t\u00E9 d'Australie orientale (Victoria)", "AEDT"};
|
||
String VLAT[] = new String[] {"Heure de Vladivostok", "VLAT",
|
||
"Heure d'\u00e9t\u00e9 de Vladivostok", "VLAST"};
|
||
- String WART[] = new String[] {"Heure D'Argentine de l'Ouest", "WART",
|
||
- "Heure d'\u00e9t\u00e9 D'Argentine de l'Ouest", "WARST"};
|
||
String WAT[] = new String[] {"Heure d'Afrique de l'Ouest", "WAT",
|
||
"Heure d'\u00e9t\u00e9 d'Afrique de l'Ouest", "WAST"};
|
||
String WET[] = new String[] {"Heure d'Europe de l'Ouest", "WET",
|
||
"Heure d'\u00e9t\u00e9 d'Europe de l'Ouest", "WEST"};
|
||
String WIT[] = new String[] {"Heure de l'Indon\u00e9sie occidentale", "WIB",
|
||
"Heure d'\u00e9t\u00e9 de l'Indon\u00e9sie occidentale", "WIST"};
|
||
- String WST_AUS[] = new String[] {"Heure normale de l'Ouest (Australie)", "WST",
|
||
- "Heure d'\u00E9t\u00E9 de l'Ouest (Australie)", "WST"};
|
||
- String WST_SAMOA[] = new String[] {"Heure des Samoas occidentales", "WST",
|
||
+ String WST_AUS[] = new String[] {"Heure normale de l'Ouest (Australie)", "AWST",
|
||
+ "Heure d'\u00E9t\u00E9 de l'Ouest (Australie)", "AWDT"};
|
||
+ String WST_SAMOA[] = new String[] {"Heure des Samoas occidentales", "WSST",
|
||
"Heure d'\u00e9t\u00e9 des Samoas occidentales", "WSDT"};
|
||
+ String XJT[] = new String[] {"Heure normale de Chine", "XJT",
|
||
+ "Heure avanc\u00e9e de Chine", "XJDT"};
|
||
String YAKT[] = new String[] {"Heure du Iakoutsk", "YAKT",
|
||
"Heure d'\u00e9t\u00e9 du Iakoutsk", "YAKST"};
|
||
|
||
@@ -262,7 +264,7 @@
|
||
{"Africa/Djibouti", EAT},
|
||
{"Africa/Douala", WAT},
|
||
{"Africa/El_Aaiun", WET},
|
||
- {"Africa/Freetown", SLST},
|
||
+ {"Africa/Freetown", GMT},
|
||
{"Africa/Gaborone", CAT},
|
||
{"Africa/Harare", CAT},
|
||
{"Africa/Johannesburg", SAST},
|
||
@@ -358,7 +360,7 @@
|
||
{"America/Godthab", new String[] {"Heure du Groenland de l'Ouest", "WGT",
|
||
"Heure d'\u00e9t\u00e9 du Groenland de l'Ouest", "WGST"}},
|
||
{"America/Goose_Bay", AST},
|
||
- {"America/Grand_Turk", EST},
|
||
+ {"America/Grand_Turk", AST},
|
||
{"America/Grenada", AST},
|
||
{"America/Guadeloupe", AST},
|
||
{"America/Guatemala", CST},
|
||
@@ -401,8 +403,7 @@
|
||
{"America/Mendoza", AGT},
|
||
{"America/Menominee", CST},
|
||
{"America/Merida", CST},
|
||
- {"America/Metlakatla", new String[] {"Heure normale de Metlakatla", "MeST",
|
||
- "Heure avanc\u00E9e de Metlakatla", "MeDT"}},
|
||
+ {"America/Metlakatla", PST},
|
||
{"America/Mexico_City", CST},
|
||
{"America/Miquelon", new String[] {"Heure normale de Saint-Pierre et Miquelon", "PMST",
|
||
"Heure avanc\u00e9e de Saint-Pierre et Miquelon", "PMDT"}},
|
||
@@ -467,7 +468,7 @@
|
||
{"Antarctica/DumontDUrville", new String[] {"Heure de Dumont-d'Urville", "DDUT",
|
||
"Heure d'\u00e9t\u00e9 de Dumont-d'Urville", "DDUST"}},
|
||
{"Antarctica/Macquarie", new String[] {"Heure de l'Ile Macquarie", "MIST",
|
||
- "Heure d'\u00E9t\u00E9 de l'Ile Macquarie", "MIST"}},
|
||
+ "Heure d'\u00E9t\u00E9 de l'Ile Macquarie", "MIDT"}},
|
||
{"Antarctica/Mawson", new String[] {"Heure de Mawson", "MAWT",
|
||
"Heure d'\u00e9t\u00e9 de Mawson", "MAWST"}},
|
||
{"Antarctica/McMurdo", NZST},
|
||
@@ -505,6 +506,7 @@
|
||
{"Asia/Brunei", new String[] {"Heure du Brunei", "BNT",
|
||
"Heure d'\u00e9t\u00e9 du Brunei", "BNST"}},
|
||
{"Asia/Calcutta", IST},
|
||
+ {"Asia/Chita", IRKT},
|
||
{"Asia/Choibalsan", new String[] {"Heure de Choibalsan", "CHOT",
|
||
"Heure d'\u00e9t\u00e9 de Choibalsan", "CHOST"}},
|
||
{"Asia/Chongqing", CTT},
|
||
@@ -525,8 +527,7 @@
|
||
{"Asia/Hong_Kong", HKT},
|
||
{"Asia/Hovd", new String[] {"Heure de Hovd", "HOVT",
|
||
"Heure d'\u00e9t\u00e9 de Hovd", "HOVST"}},
|
||
- {"Asia/Irkutsk", new String[] {"Heure d'Irkutsk", "IRKT",
|
||
- "Heure d'\u00e9t\u00e9 d'Irkutsk", "IRKST"}},
|
||
+ {"Asia/Irkutsk", IRKT},
|
||
{"Asia/Istanbul", EET},
|
||
{"Asia/Jakarta", WIT},
|
||
{"Asia/Jayapura", new String[] {"Heure d'Indon\u00e9sie orientale", "WIT",
|
||
@@ -536,14 +537,13 @@
|
||
{"Asia/Kamchatka", new String[] {"Heure de Petropavlovsk-Kamchatski", "PETT",
|
||
"Heure d'\u00e9t\u00e9 de Petropavlovsk-Kamchatski", "PETST"}},
|
||
{"Asia/Karachi", PKT},
|
||
- {"Asia/Kashgar", CTT},
|
||
+ {"Asia/Kashgar", XJT},
|
||
{"Asia/Kathmandu", NPT},
|
||
{"Asia/Katmandu", NPT},
|
||
{"Asia/Khandyga", new String[] {"Heure de Khandyga", "YAKT",
|
||
"Heure d'\u00E9t\u00E9 de Khandyga", "YAKST"}},
|
||
{"Asia/Kolkata", IST},
|
||
- {"Asia/Krasnoyarsk", new String[] {"Heure de Krasno\u00efarsk", "KRAT",
|
||
- "Heure d'\u00e9t\u00e9 de Krasno\u00efarsk", "KRAST"}},
|
||
+ {"Asia/Krasnoyarsk", KRAT},
|
||
{"Asia/Kuala_Lumpur", MYT},
|
||
{"Asia/Kuching", MYT},
|
||
{"Asia/Kuwait", ARAST},
|
||
@@ -556,7 +556,7 @@
|
||
"Heure d'\u00e9t\u00e9 des Philippines", "PHST"}},
|
||
{"Asia/Muscat", GST},
|
||
{"Asia/Nicosia", EET},
|
||
- {"Asia/Novokuznetsk", NOVT},
|
||
+ {"Asia/Novokuznetsk", KRAT},
|
||
{"Asia/Novosibirsk", NOVT},
|
||
{"Asia/Oral", new String[] {"Heure d'Oral", "ORAT",
|
||
"Heure d'\u00e9t\u00e9 d'Oral", "ORAST"}},
|
||
@@ -577,6 +577,8 @@
|
||
{"Asia/Samarkand", UZT},
|
||
{"Asia/Seoul", KST},
|
||
{"Asia/Singapore", SGT},
|
||
+ {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET",
|
||
+ "Srednekolymsk Daylight Time", "SREDT"}},
|
||
{"Asia/Taipei", CTT},
|
||
{"Asia/Tel_Aviv", ISRAEL},
|
||
{"Asia/Tashkent", UZT},
|
||
@@ -588,7 +590,7 @@
|
||
{"Asia/Ujung_Pandang", CIT},
|
||
{"Asia/Ulaanbaatar", ULAT},
|
||
{"Asia/Ulan_Bator", ULAT},
|
||
- {"Asia/Urumqi", CTT},
|
||
+ {"Asia/Urumqi", XJT},
|
||
{"Asia/Ust-Nera", new String[] {"Heure d'Ust-Nera", "VLAT",
|
||
"Heure d'\u00E9t\u00E9 d'Ust-Nera", "VLAST"}},
|
||
{"Asia/Vientiane", ICT},
|
||
@@ -620,8 +622,8 @@
|
||
{"Australia/Canberra", EST_NSW},
|
||
{"Australia/Currie", EST_NSW},
|
||
{"Australia/Darwin", DARWIN},
|
||
- {"Australia/Eucla", new String[] {"Heure standard de l'Australie occidentale (centre)", "CWST",
|
||
- "Heure d'\u00E9t\u00E9 de l'Australie occidentale (centre)", "CWST"}},
|
||
+ {"Australia/Eucla", new String[] {"Heure standard de l'Australie occidentale (centre)", "ACWST",
|
||
+ "Heure d'\u00E9t\u00E9 de l'Australie occidentale (centre)", "ACWDT"}},
|
||
{"Australia/Hobart", TASMANIA},
|
||
{"Australia/LHI", LORD_HOWE},
|
||
{"Australia/Lindeman", BRISBANE},
|
||
@@ -687,7 +689,7 @@
|
||
{"Europe/Isle_of_Man", GMTBST},
|
||
{"Europe/Istanbul", EET},
|
||
{"Europe/Jersey", GMTBST},
|
||
- {"Europe/Kaliningrad", FET},
|
||
+ {"Europe/Kaliningrad", EET},
|
||
{"Europe/Kiev", EET},
|
||
{"Europe/Lisbon", WET},
|
||
{"Europe/Ljubljana", CET},
|
||
@@ -696,7 +698,7 @@
|
||
{"Europe/Madrid", CET},
|
||
{"Europe/Malta", CET},
|
||
{"Europe/Mariehamn", EET},
|
||
- {"Europe/Minsk", FET},
|
||
+ {"Europe/Minsk", MSK},
|
||
{"Europe/Monaco", CET},
|
||
{"Europe/Moscow", MSK},
|
||
{"Europe/Nicosia", EET},
|
||
@@ -721,8 +723,7 @@
|
||
{"Europe/Vatican", CET},
|
||
{"Europe/Vienna", CET},
|
||
{"Europe/Vilnius", EET},
|
||
- {"Europe/Volgograd", new String[] {"Heure de Volgograd", "VOLT",
|
||
- "Heure d'\u00e9t\u00e9 de Volgograd", "VOLST"}},
|
||
+ {"Europe/Volgograd", MSK},
|
||
{"Europe/Warsaw", CET},
|
||
{"Europe/Zagreb", CET},
|
||
{"Europe/Zaporozhye", EET},
|
||
@@ -775,6 +776,8 @@
|
||
{"PRT", AST},
|
||
{"Pacific/Apia", WST_SAMOA},
|
||
{"Pacific/Auckland", NZST},
|
||
+ {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST",
|
||
+ "Bougainville Daylight Time", "BST"}},
|
||
{"Pacific/Chatham", CHAST},
|
||
{"Pacific/Chuuk", CHUT},
|
||
{"Pacific/Easter", EASTER},
|
||
--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -45,8 +45,8 @@
|
||
protected final Object[][] getContents() {
|
||
String ACT[] = new String[] {"Ora di Acre", "ACT",
|
||
"Ora estiva di Acre", "ACST"};
|
||
- String ADELAIDE[] = new String[] {"Ora standard centrale (Australia del Sud)", "CST",
|
||
- "Ora estiva centrale (Australia del Sud)", "CST"};
|
||
+ String ADELAIDE[] = new String[] {"Ora standard centrale (Australia del Sud)", "ACST",
|
||
+ "Ora estiva centrale (Australia del Sud)", "ACDT"};
|
||
String AGT[] = new String[] {"Ora dell'Argentina", "ART",
|
||
"Ora estiva dell'Argentina", "ARST"};
|
||
String AKST[] = new String[] {"Ora solare dell'Alaska", "AKST",
|
||
@@ -61,10 +61,10 @@
|
||
"Ora legale dell'Atlantico occidentale", "ADT"};
|
||
String BDT[] = new String[] {"Ora del Bangladesh", "BDT",
|
||
"Ora estiva del Bangladesh", "BDST"};
|
||
- String BRISBANE[] = new String[] {"Ora standard orientale (Queensland)", "EST",
|
||
- "Ora estiva orientale (Queensland)", "EST"};
|
||
- String BROKEN_HILL[] = new String[] {"Ora standard centrale (Australia del Sud/Nuovo Galles del Sud)", "CST",
|
||
- "Ora estiva centrale (Australia del Sud/Nuovo Galles del Sud)", "CST"};
|
||
+ String BRISBANE[] = new String[] {"Ora standard orientale (Queensland)", "AEST",
|
||
+ "Ora estiva orientale (Queensland)", "AEDT"};
|
||
+ String BROKEN_HILL[] = new String[] {"Ora standard centrale (Australia del Sud/Nuovo Galles del Sud)", "ACST",
|
||
+ "Ora estiva centrale (Australia del Sud/Nuovo Galles del Sud)", "ACDT"};
|
||
String BRT[] = new String[] {"Ora del Brasile", "BRT",
|
||
"Ora estiva del Brasile", "BRST"};
|
||
String BTT[] = new String[] {"Ora del Bhutan", "BTT",
|
||
@@ -89,8 +89,8 @@
|
||
"Ora legale della Cina", "CDT"};
|
||
String CUBA[] = new String[] {"Ora solare Cuba", "CST",
|
||
"Ora legale Cuba", "CDT"};
|
||
- String DARWIN[] = new String[] {"Ora standard centrale (Territori del Nord)", "CST",
|
||
- "Ora estiva centrale (Territori del Nord)", "CST"};
|
||
+ String DARWIN[] = new String[] {"Ora standard centrale (Territori del Nord)", "ACST",
|
||
+ "Ora estiva centrale (Territori del Nord)", "ACDT"};
|
||
String DUBLIN[] = new String[] {"Ora media di Greenwich", "GMT",
|
||
"Ora estiva irlandese", "IST"};
|
||
String EAT[] = new String[] {"Ora dell'Africa orientale", "EAT",
|
||
@@ -103,8 +103,8 @@
|
||
"Ora estiva della Groenlandia orientale", "EGST"};
|
||
String EST[] = new String[] {"Ora solare USA orientale", "EST",
|
||
"Ora legale USA orientale", "EDT"};
|
||
- String EST_NSW[] = new String[] {"Ora standard dell'Australia orientale (Nuovo Galles del Sud)", "EST",
|
||
- "Ora estiva dell'Australia orientale (Nuovo Galles del Sud)", "EST"};
|
||
+ String EST_NSW[] = new String[] {"Ora standard dell'Australia orientale (Nuovo Galles del Sud)", "AEST",
|
||
+ "Ora estiva dell'Australia orientale (Nuovo Galles del Sud)", "AEDT"};
|
||
String FET[] = new String[] {"Ora dei paesi europei pi\u00F9 orientali", "FET",
|
||
"Ora estiva dei paesi europei pi\u00F9 orientali", "FEST"};
|
||
String GHMT[] = new String[] {"Ora media del Ghana", "GMT",
|
||
@@ -133,10 +133,12 @@
|
||
"Ora legale dell'India", "IDT"};
|
||
String JST[] = new String[] {"Ora solare del Giappone", "JST",
|
||
"Ora legale del Giappone", "JDT"};
|
||
+ String KRAT[] = new String[] {"Ora di Krasnojarsk", "KRAT",
|
||
+ "Ora estiva di Krasnojarsk", "KRAST"};
|
||
String KST[] = new String[] {"Ora solare della Corea", "KST",
|
||
"Ora legale della Corea", "KDT"};
|
||
String LORD_HOWE[] = new String[] {"Ora standard di Lord Howe", "LHST",
|
||
- "Ora estiva di Lord Howe", "LHST"};
|
||
+ "Ora estiva di Lord Howe", "LHDT"};
|
||
String MHT[] = new String[] {"Ora delle Isole Marshall", "MHT",
|
||
"Ora estiva delle Isole Marshall", "MHST"};
|
||
String MSK[] = new String[] {"Ora standard di Mosca", "MSK",
|
||
@@ -165,16 +167,16 @@
|
||
"Ora legale della costa occidentale USA", "PDT"};
|
||
String SAMOA[] = new String[] {"Ora standard di Samoa", "SST",
|
||
"Ora legale di Samoa", "SDT"};
|
||
+ String IRKT[] = new String[] {"Ora di Irkutsk", "IRKT",
|
||
+ "Ora estiva di Irkutsk", "IRKST"};
|
||
String SAST[] = new String[] {"Ora solare del Sudafrica", "SAST",
|
||
"Ora estiva del Sudafrica", "SAST"};
|
||
String SBT[] = new String[] {"Ora delle Isole Salomone", "SBT",
|
||
"Ora estiva delle Isole Salomone", "SBST"};
|
||
String SGT[] = new String[] {"Ora di Singapore", "SGT",
|
||
"Ora estiva di Singapore", "SGST"};
|
||
- String SLST[] = new String[] {"Ora media di Greenwich", "GMT",
|
||
- "Ora legale della Sierra Leone", "SLST"};
|
||
- String TASMANIA[] = new String[] {"Ora standard orientale (Tasmania)", "EST",
|
||
- "Ora estiva orientale (Tasmania)", "EST"};
|
||
+ String TASMANIA[] = new String[] {"Ora standard orientale (Tasmania)", "AEST",
|
||
+ "Ora estiva orientale (Tasmania)", "AEDT"};
|
||
String TMT[] = new String[] {"Ora del Turkmenistan", "TMT",
|
||
"Ora estiva del Turkmenistan", "TMST"};
|
||
String ULAT[]= new String[] {"Ora di Ulaanbaatar", "ULAT",
|
||
@@ -183,22 +185,22 @@
|
||
"Tempo universale coordinato", "UTC"};
|
||
String UZT[] = new String[] {"Ora dell'Uzbekistan", "UZT",
|
||
"Ora estiva dell'Uzbekistan", "UZST"};
|
||
- String VICTORIA[] = new String[] {"Ora standard orientale (Victoria)", "EST",
|
||
- "Ora estiva orientale (Victoria)", "EST"};
|
||
+ String VICTORIA[] = new String[] {"Ora standard orientale (Victoria)", "AEST",
|
||
+ "Ora estiva orientale (Victoria)", "AEDT"};
|
||
String VLAT[] = new String[] {"Ora di Vladivostok", "VLAT",
|
||
"Ora estiva di Vladivostok", "VLAST"};
|
||
- String WART[] = new String[] {"Ora dell'Argentina occidentale", "WART",
|
||
- "Ora estiva dell'Argentina occidentale", "WARST"};
|
||
String WAT[] = new String[] {"Ora dell'Africa occidentale", "WAT",
|
||
"Ora estiva dell'Africa occidentale", "WAST"};
|
||
String WET[] = new String[] {"Ora dell'Europa occidentale", "WET",
|
||
"Ora estiva dell'Europa occidentale", "WEST"};
|
||
String WIT[] = new String[] {"Ora dell'Indonesia occidentale", "WIB",
|
||
"Ora estiva dell'Indonesia occidentale", "WIST"};
|
||
- String WST_AUS[] = new String[] {"Ora standard dell'Australia occidentale", "WST",
|
||
- "Ora estiva dell'Australia occidentale", "WST"};
|
||
- String WST_SAMOA[] = new String[] {"Ora di Samoa", "WST",
|
||
+ String WST_AUS[] = new String[] {"Ora standard dell'Australia occidentale", "AWST",
|
||
+ "Ora estiva dell'Australia occidentale", "AWDT"};
|
||
+ String WST_SAMOA[] = new String[] {"Ora di Samoa", "WSST",
|
||
"Ora estiva di Samoa", "WSDT"};
|
||
+ String XJT[] = new String[] {"Ora solare della Cina", "XJT",
|
||
+ "Ora legale della Cina", "XJDT"};
|
||
String YAKT[] = new String[] {"Ora di Jakutsk", "YAKT",
|
||
"Ora estiva di Jakutsk", "YAKST"};
|
||
|
||
@@ -262,7 +264,7 @@
|
||
{"Africa/Djibouti", EAT},
|
||
{"Africa/Douala", WAT},
|
||
{"Africa/El_Aaiun", WET},
|
||
- {"Africa/Freetown", SLST},
|
||
+ {"Africa/Freetown", GMT},
|
||
{"Africa/Gaborone", CAT},
|
||
{"Africa/Harare", CAT},
|
||
{"Africa/Johannesburg", SAST},
|
||
@@ -358,7 +360,7 @@
|
||
{"America/Godthab", new String[] {"Ora della Groenlandia occidentale", "WGT",
|
||
"Ora estiva della Groenlandia occidentale", "WGST"}},
|
||
{"America/Goose_Bay", AST},
|
||
- {"America/Grand_Turk", EST},
|
||
+ {"America/Grand_Turk", AST},
|
||
{"America/Grenada", AST},
|
||
{"America/Guadeloupe", AST},
|
||
{"America/Guatemala", CST},
|
||
@@ -401,8 +403,7 @@
|
||
{"America/Mendoza", AGT},
|
||
{"America/Menominee", CST},
|
||
{"America/Merida", CST},
|
||
- {"America/Metlakatla", new String[] {"Ora standard di Metlakatla", "MeST",
|
||
- "Ora legale di Metlakatla", "MeDT"}},
|
||
+ {"America/Metlakatla", PST},
|
||
{"America/Mexico_City", CST},
|
||
{"America/Miquelon", new String[] {"Ora solare di Saint-Pierre e Miquelon", "PMST",
|
||
"Ora legale di Saint-Pierre e Miquelon", "PMDT"}},
|
||
@@ -467,7 +468,7 @@
|
||
{"Antarctica/DumontDUrville", new String[] {"Ora di Dumont-d'Urville", "DDUT",
|
||
"Ora estiva di Dumont-d'Urville", "DDUST"}},
|
||
{"Antarctica/Macquarie", new String[] {"Ora dell'Isola Macquarie", "MIST",
|
||
- "Ora estiva dell'Isola Macquarie", "MIST"}},
|
||
+ "Ora estiva dell'Isola Macquarie", "MIDT"}},
|
||
{"Antarctica/Mawson", new String[] {"Ora di Mawson", "MAWT",
|
||
"Ora estiva di Mawson", "MAWST"}},
|
||
{"Antarctica/McMurdo", NZST},
|
||
@@ -505,6 +506,7 @@
|
||
{"Asia/Brunei", new String[] {"Ora del Brunei", "BNT",
|
||
"Ora estiva del Brunei", "BNST"}},
|
||
{"Asia/Calcutta", IST},
|
||
+ {"Asia/Chita", IRKT},
|
||
{"Asia/Choibalsan", new String[] {"Ora di Choibalsan", "CHOT",
|
||
"Ora estiva di Choibalsan", "CHOST"}},
|
||
{"Asia/Chongqing", CTT},
|
||
@@ -525,8 +527,7 @@
|
||
{"Asia/Hong_Kong", HKT},
|
||
{"Asia/Hovd", new String[] {"Ora di Hovd", "HOVT",
|
||
"Ora estiva di Hovd", "HOVST"}},
|
||
- {"Asia/Irkutsk", new String[] {"Ora di Irkutsk", "IRKT",
|
||
- "Ora estiva di Irkutsk", "IRKST"}},
|
||
+ {"Asia/Irkutsk", IRKT},
|
||
{"Asia/Istanbul", EET},
|
||
{"Asia/Jakarta", WIT},
|
||
{"Asia/Jayapura", new String[] {"Ora dell'Indonesia orientale", "WIT",
|
||
@@ -536,14 +537,13 @@
|
||
{"Asia/Kamchatka", new String[] {"Ora di Petropavlovsk-Kamchatski", "PETT",
|
||
"Ora estiva di Petropavlovsk-Kamchatski", "PETST"}},
|
||
{"Asia/Karachi", PKT},
|
||
- {"Asia/Kashgar", CTT},
|
||
+ {"Asia/Kashgar", XJT},
|
||
{"Asia/Kathmandu", NPT},
|
||
{"Asia/Katmandu", NPT},
|
||
{"Asia/Khandyga", new String[] {"Ora di Khandyga", "YAKT",
|
||
"Ora estiva di Khandyga", "YAKST"}},
|
||
{"Asia/Kolkata", IST},
|
||
- {"Asia/Krasnoyarsk", new String[] {"Ora di Krasnojarsk", "KRAT",
|
||
- "Ora estiva di Krasnojarsk", "KRAST"}},
|
||
+ {"Asia/Krasnoyarsk", KRAT},
|
||
{"Asia/Kuala_Lumpur", MYT},
|
||
{"Asia/Kuching", MYT},
|
||
{"Asia/Kuwait", ARAST},
|
||
@@ -556,7 +556,7 @@
|
||
"Ora estiva delle Filippine", "PHST"}},
|
||
{"Asia/Muscat", GST},
|
||
{"Asia/Nicosia", EET},
|
||
- {"Asia/Novokuznetsk", NOVT},
|
||
+ {"Asia/Novokuznetsk", KRAT},
|
||
{"Asia/Novosibirsk", NOVT},
|
||
{"Asia/Oral", new String[] {"Ora di Oral", "ORAT",
|
||
"Ora estiva di Oral", "ORAST"}},
|
||
@@ -577,6 +577,8 @@
|
||
{"Asia/Samarkand", UZT},
|
||
{"Asia/Seoul", KST},
|
||
{"Asia/Singapore", SGT},
|
||
+ {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET",
|
||
+ "Srednekolymsk Daylight Time", "SREDT"}},
|
||
{"Asia/Taipei", CTT},
|
||
{"Asia/Tel_Aviv", ISRAEL},
|
||
{"Asia/Tashkent", UZT},
|
||
@@ -588,7 +590,7 @@
|
||
{"Asia/Ujung_Pandang", CIT},
|
||
{"Asia/Ulaanbaatar", ULAT},
|
||
{"Asia/Ulan_Bator", ULAT},
|
||
- {"Asia/Urumqi", CTT},
|
||
+ {"Asia/Urumqi", XJT},
|
||
{"Asia/Ust-Nera", new String[] {"Ora di Ust-Nera", "VLAT",
|
||
"Ora estiva di Ust-Nera", "VLAST"}},
|
||
{"Asia/Vientiane", ICT},
|
||
@@ -620,8 +622,8 @@
|
||
{"Australia/Canberra", EST_NSW},
|
||
{"Australia/Currie", EST_NSW},
|
||
{"Australia/Darwin", DARWIN},
|
||
- {"Australia/Eucla", new String[] {"Ora standard Australia centro-occidentale", "CWST",
|
||
- "Ora estiva Australia centro-occidentale", "CWST"}},
|
||
+ {"Australia/Eucla", new String[] {"Ora standard Australia centro-occidentale", "ACWST",
|
||
+ "Ora estiva Australia centro-occidentale", "ACWDT"}},
|
||
{"Australia/Hobart", TASMANIA},
|
||
{"Australia/LHI", LORD_HOWE},
|
||
{"Australia/Lindeman", BRISBANE},
|
||
@@ -687,7 +689,7 @@
|
||
{"Europe/Isle_of_Man", GMTBST},
|
||
{"Europe/Istanbul", EET},
|
||
{"Europe/Jersey", GMTBST},
|
||
- {"Europe/Kaliningrad", FET},
|
||
+ {"Europe/Kaliningrad", EET},
|
||
{"Europe/Kiev", EET},
|
||
{"Europe/Lisbon", WET},
|
||
{"Europe/Ljubljana", CET},
|
||
@@ -696,7 +698,7 @@
|
||
{"Europe/Madrid", CET},
|
||
{"Europe/Malta", CET},
|
||
{"Europe/Mariehamn", EET},
|
||
- {"Europe/Minsk", FET},
|
||
+ {"Europe/Minsk", MSK},
|
||
{"Europe/Monaco", CET},
|
||
{"Europe/Moscow", MSK},
|
||
{"Europe/Nicosia", EET},
|
||
@@ -721,8 +723,7 @@
|
||
{"Europe/Vatican", CET},
|
||
{"Europe/Vienna", CET},
|
||
{"Europe/Vilnius", EET},
|
||
- {"Europe/Volgograd", new String[] {"Ora di Volgograd", "VOLT",
|
||
- "Ora estiva di Volgograd", "VOLST"}},
|
||
+ {"Europe/Volgograd", MSK},
|
||
{"Europe/Warsaw", CET},
|
||
{"Europe/Zagreb", CET},
|
||
{"Europe/Zaporozhye", EET},
|
||
@@ -775,6 +776,8 @@
|
||
{"PRT", AST},
|
||
{"Pacific/Apia", WST_SAMOA},
|
||
{"Pacific/Auckland", NZST},
|
||
+ {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST",
|
||
+ "Bougainville Daylight Time", "BST"}},
|
||
{"Pacific/Chatham", CHAST},
|
||
{"Pacific/Chuuk", CHUT},
|
||
{"Pacific/Easter", EASTER},
|
||
--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -45,8 +45,8 @@
|
||
protected final Object[][] getContents() {
|
||
String ACT[] = new String[] {"\u30a2\u30af\u30ec\u6642\u9593", "ACT",
|
||
"\u30a2\u30af\u30ec\u590f\u6642\u9593", "ACST"};
|
||
- String ADELAIDE[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "CST",
|
||
- "\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "CST"};
|
||
+ String ADELAIDE[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "ACST",
|
||
+ "\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "ACDT"};
|
||
String AGT[] = new String[] {"\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "ART",
|
||
"\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u590f\u6642\u9593", "ARST"};
|
||
String AKST[] = new String[] {"\u30a2\u30e9\u30b9\u30ab\u6a19\u6e96\u6642", "AKST",
|
||
@@ -61,10 +61,10 @@
|
||
"\u5927\u897f\u6d0b\u590f\u6642\u9593", "ADT"};
|
||
String BDT[] = new String[] {"\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5\u6642\u9593", "BDT",
|
||
"\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5\u590f\u6642\u9593", "BDST"};
|
||
- String BRISBANE[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)", "EST",
|
||
- "\u6771\u90E8\u590F\u6642\u9593(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)", "EST"};
|
||
- String BROKEN_HILL[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "CST",
|
||
- "\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "CST"};
|
||
+ String BRISBANE[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)", "AEST",
|
||
+ "\u6771\u90E8\u590F\u6642\u9593(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)", "AEDT"};
|
||
+ String BROKEN_HILL[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "ACST",
|
||
+ "\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "ACDT"};
|
||
String BRT[] = new String[] {"\u30d6\u30e9\u30b8\u30eb\u6642\u9593", "BRT",
|
||
"\u30d6\u30e9\u30b8\u30eb\u590f\u6642\u9593", "BRST"};
|
||
String BTT[] = new String[] {"\u30d6\u30fc\u30bf\u30f3\u6642\u9593", "BTT",
|
||
@@ -89,8 +89,8 @@
|
||
"\u4e2d\u56fd\u590f\u6642\u9593", "CDT"};
|
||
String CUBA[] = new String[] {"\u30ad\u30e5\u30fc\u30d0\u6a19\u6e96\u6642", "CST",
|
||
"\u30ad\u30e5\u30fc\u30d0\u590f\u6642\u9593", "CDT"};
|
||
- String DARWIN[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)", "CST",
|
||
- "\u4E2D\u90E8\u590F\u6642\u9593(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)", "CST"};
|
||
+ String DARWIN[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)", "ACST",
|
||
+ "\u4E2D\u90E8\u590F\u6642\u9593(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)", "ACDT"};
|
||
String DUBLIN[] = new String[] {"\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642", "GMT",
|
||
"\u30a2\u30a4\u30eb\u30e9\u30f3\u30c9\u590f\u6642\u9593", "IST"};
|
||
String EAT[] = new String[] {"\u6771\u30a2\u30d5\u30ea\u30ab\u6642\u9593", "EAT",
|
||
@@ -103,8 +103,8 @@
|
||
"\u6771\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9\u590f\u6642\u9593", "EGST"};
|
||
String EST[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642", "EST",
|
||
"\u6771\u90e8\u590f\u6642\u9593", "EDT"};
|
||
- String EST_NSW[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "EST",
|
||
- "\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "EST"};
|
||
+ String EST_NSW[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "AEST",
|
||
+ "\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "AEDT"};
|
||
String FET[] = new String[] {"\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593", "FET",
|
||
"\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u590F\u6642\u9593", "FEST"};
|
||
String GHMT[] = new String[] {"\u30ac\u30fc\u30ca\u6a19\u6e96\u6642", "GMT",
|
||
@@ -133,10 +133,12 @@
|
||
"\u30a4\u30f3\u30c9\u590f\u6642\u9593", "IDT"};
|
||
String JST[] = new String[] {"\u65e5\u672c\u6a19\u6e96\u6642", "JST",
|
||
"\u65e5\u672c\u590f\u6642\u9593", "JDT"};
|
||
+ String KRAT[] = new String[] {"\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u6642\u9593", "KRAT",
|
||
+ "\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u590f\u6642\u9593", "KRAST"};
|
||
String KST[] = new String[] {"\u97d3\u56fd\u6a19\u6e96\u6642", "KST",
|
||
"\u97d3\u56fd\u590f\u6642\u9593", "KDT"};
|
||
String LORD_HOWE[] = new String[] {"\u30ed\u30fc\u30c9\u30cf\u30a6\u5cf6\u6a19\u6e96\u6642", "LHST",
|
||
- "\u30ed\u30fc\u30c9\u30cf\u30a6\u5cf6\u590f\u6642\u9593", "LHST"};
|
||
+ "\u30ed\u30fc\u30c9\u30cf\u30a6\u5cf6\u590f\u6642\u9593", "LHDT"};
|
||
String MHT[] = new String[] {"\u30de\u30fc\u30b7\u30e3\u30eb\u5cf6\u6642\u9593", "MHT",
|
||
"\u30de\u30fc\u30b7\u30e3\u30eb\u5cf6\u590f\u6642\u9593", "MHST"};
|
||
String MSK[] = new String[] {"\u30e2\u30b9\u30af\u30ef\u6a19\u6e96\u6642", "MSK",
|
||
@@ -165,16 +167,16 @@
|
||
"\u592a\u5e73\u6d0b\u590f\u6642\u9593", "PDT"};
|
||
String SAMOA[] = new String[] {"\u30b5\u30e2\u30a2\u6a19\u6e96\u6642", "SST",
|
||
"\u30b5\u30e2\u30a2\u590f\u6642\u9593", "SDT"};
|
||
+ String IRKT[] = new String[] {"\u30a4\u30eb\u30af\u30fc\u30c4\u30af\u6642\u9593", "IRKT",
|
||
+ "\u30a4\u30eb\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "IRKST"};
|
||
String SAST[] = new String[] {"\u5357\u30a2\u30d5\u30ea\u30ab\u6a19\u6e96\u6642", "SAST",
|
||
"\u5357\u30a2\u30d5\u30ea\u30ab\u590f\u6642\u9593", "SAST"};
|
||
String SBT[] = new String[] {"\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6\u6642\u9593", "SBT",
|
||
"\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6\u590f\u6642\u9593", "SBST"};
|
||
String SGT[] = new String[] {"\u30b7\u30f3\u30ac\u30dd\u30fc\u30eb\u6642\u9593", "SGT",
|
||
"\u30b7\u30f3\u30ac\u30dd\u30fc\u30eb\u590f\u6642\u9593", "SGST"};
|
||
- String SLST[] = new String[] {"\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642", "GMT",
|
||
- "\u30b7\u30a8\u30e9\u30ec\u30aa\u30cd\u590f\u6642\u9593", "SLST"};
|
||
- String TASMANIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30BF\u30B9\u30DE\u30CB\u30A2)", "EST",
|
||
- "\u6771\u90E8\u590F\u6642\u9593(\u30BF\u30B9\u30DE\u30CB\u30A2)", "EST"};
|
||
+ String TASMANIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30BF\u30B9\u30DE\u30CB\u30A2)", "AEST",
|
||
+ "\u6771\u90E8\u590F\u6642\u9593(\u30BF\u30B9\u30DE\u30CB\u30A2)", "AEDT"};
|
||
String TMT[] = new String[] {"\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u6642\u9593", "TMT",
|
||
"\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u590f\u6642\u9593", "TMST"};
|
||
String ULAT[]= new String[] {"\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u6642\u9593", "ULAT",
|
||
@@ -183,22 +185,22 @@
|
||
"\u5354\u5b9a\u4e16\u754c\u6642", "UTC"};
|
||
String UZT[] = new String[] {"\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u6642\u9593", "UZT",
|
||
"\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "UZST"};
|
||
- String VICTORIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30D3\u30AF\u30C8\u30EA\u30A2)", "EST",
|
||
- "\u6771\u90E8\u590F\u6642\u9593(\u30D3\u30AF\u30C8\u30EA\u30A2)", "EST"};
|
||
+ String VICTORIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30D3\u30AF\u30C8\u30EA\u30A2)", "AEST",
|
||
+ "\u6771\u90E8\u590F\u6642\u9593(\u30D3\u30AF\u30C8\u30EA\u30A2)", "AEDT"};
|
||
String VLAT[] = new String[] {"\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u6642\u9593", "VLAT",
|
||
"\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u590f\u6642\u9593", "VLAST"};
|
||
- String WART[] = new String[] {"\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "WART",
|
||
- "\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u590f\u6642\u9593", "WARST"};
|
||
String WAT[] = new String[] {"\u897f\u30a2\u30d5\u30ea\u30ab\u6642\u9593", "WAT",
|
||
"\u897f\u30a2\u30d5\u30ea\u30ab\u590f\u6642\u9593", "WAST"};
|
||
String WET[] = new String[] {"\u897f\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593", "WET",
|
||
"\u897f\u30e8\u30fc\u30ed\u30c3\u30d1\u590f\u6642\u9593", "WEST"};
|
||
String WIT[] = new String[] {"\u897f\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "WIB",
|
||
"\u897f\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u590f\u6642\u9593", "WIST"};
|
||
- String WST_AUS[] = new String[] {"\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "WST",
|
||
- "\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "WST"};
|
||
- String WST_SAMOA[] = new String[] {"\u897f\u30b5\u30e2\u30a2\u6642\u9593", "WST",
|
||
+ String WST_AUS[] = new String[] {"\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "AWST",
|
||
+ "\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "AWDT"};
|
||
+ String WST_SAMOA[] = new String[] {"\u897f\u30b5\u30e2\u30a2\u6642\u9593", "WSST",
|
||
"\u897f\u30b5\u30e2\u30a2\u590f\u6642\u9593", "WSDT"};
|
||
+ String XJT[] = new String[] {"\u4e2d\u56fd\u6a19\u6e96\u6642", "XJT",
|
||
+ "\u4e2d\u56fd\u590f\u6642\u9593", "XJDT"};
|
||
String YAKT[] = new String[] {"\u30e4\u30af\u30fc\u30c4\u30af\u6642\u9593", "YAKT",
|
||
"\u30e4\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "YAKST"};
|
||
|
||
@@ -262,7 +264,7 @@
|
||
{"Africa/Djibouti", EAT},
|
||
{"Africa/Douala", WAT},
|
||
{"Africa/El_Aaiun", WET},
|
||
- {"Africa/Freetown", SLST},
|
||
+ {"Africa/Freetown", GMT},
|
||
{"Africa/Gaborone", CAT},
|
||
{"Africa/Harare", CAT},
|
||
{"Africa/Johannesburg", SAST},
|
||
@@ -358,7 +360,7 @@
|
||
{"America/Godthab", new String[] {"\u897f\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9\u6642\u9593", "WGT",
|
||
"\u897f\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9\u590f\u6642\u9593", "WGST"}},
|
||
{"America/Goose_Bay", AST},
|
||
- {"America/Grand_Turk", EST},
|
||
+ {"America/Grand_Turk", AST},
|
||
{"America/Grenada", AST},
|
||
{"America/Guadeloupe", AST},
|
||
{"America/Guatemala", CST},
|
||
@@ -401,8 +403,7 @@
|
||
{"America/Mendoza", AGT},
|
||
{"America/Menominee", CST},
|
||
{"America/Merida", CST},
|
||
- {"America/Metlakatla", new String[] {"\u30E1\u30C8\u30E9\u30AB\u30C8\u30E9\u6A19\u6E96\u6642\u9593", "MeST",
|
||
- "\u30E1\u30C8\u30E9\u30AB\u30C8\u30E9\u590F\u6642\u9593", "MeDT"}},
|
||
+ {"America/Metlakatla", PST},
|
||
{"America/Mexico_City", CST},
|
||
{"America/Miquelon", new String[] {"\u30b5\u30f3\u30d4\u30a8\u30fc\u30eb\u30fb\u30df\u30af\u30ed\u30f3\u8af8\u5cf6\u6a19\u6e96\u6642", "PMST",
|
||
"\u30b5\u30f3\u30d4\u30a8\u30fc\u30eb\u30fb\u30df\u30af\u30ed\u30f3\u8af8\u5cf6\u590f\u6642\u9593", "PMDT"}},
|
||
@@ -467,7 +468,7 @@
|
||
{"Antarctica/DumontDUrville", new String[] {"\u30c7\u30e5\u30e2\u30f3\u30c7\u30e5\u30eb\u30f4\u30a3\u30eb\u6642\u9593", "DDUT",
|
||
"\u30c7\u30e5\u30e2\u30f3\u30c7\u30e5\u30eb\u30f4\u30a3\u30eb\u590f\u6642\u9593", "DDUST"}},
|
||
{"Antarctica/Macquarie", new String[] {"\u30DE\u30C3\u30B3\u30FC\u30EA\u30FC\u5CF6\u6642\u9593", "MIST",
|
||
- "\u30DE\u30C3\u30B3\u30FC\u30EA\u30FC\u5CF6\u590F\u6642\u9593", "MIST"}},
|
||
+ "\u30DE\u30C3\u30B3\u30FC\u30EA\u30FC\u5CF6\u590F\u6642\u9593", "MIDT"}},
|
||
{"Antarctica/Mawson", new String[] {"\u30e2\u30fc\u30bd\u30f3\u6642\u9593", "MAWT",
|
||
"\u30e2\u30fc\u30bd\u30f3\u590f\u6642\u9593", "MAWST"}},
|
||
{"Antarctica/McMurdo", NZST},
|
||
@@ -505,6 +506,7 @@
|
||
{"Asia/Brunei", new String[] {"\u30d6\u30eb\u30cd\u30a4\u6642\u9593", "BNT",
|
||
"\u30d6\u30eb\u30cd\u30a4\u590f\u6642\u9593", "BNST"}},
|
||
{"Asia/Calcutta", IST},
|
||
+ {"Asia/Chita", IRKT},
|
||
{"Asia/Choibalsan", new String[] {"\u30c1\u30e7\u30a4\u30d0\u30eb\u30b5\u30f3\u6642\u9593", "CHOT",
|
||
"\u30c1\u30e7\u30a4\u30d0\u30eb\u30b5\u30f3\u590f\u6642\u9593", "CHOST"}},
|
||
{"Asia/Chongqing", CTT},
|
||
@@ -525,8 +527,7 @@
|
||
{"Asia/Hong_Kong", HKT},
|
||
{"Asia/Hovd", new String[] {"\u30db\u30d6\u30c9\u6642\u9593", "HOVT",
|
||
"\u30db\u30d6\u30c9\u590f\u6642\u9593", "HOVST"}},
|
||
- {"Asia/Irkutsk", new String[] {"\u30a4\u30eb\u30af\u30fc\u30c4\u30af\u6642\u9593", "IRKT",
|
||
- "\u30a4\u30eb\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "IRKST"}},
|
||
+ {"Asia/Irkutsk", IRKT},
|
||
{"Asia/Istanbul", EET},
|
||
{"Asia/Jakarta", WIT},
|
||
{"Asia/Jayapura", new String[] {"\u6771\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "WIT",
|
||
@@ -536,14 +537,13 @@
|
||
{"Asia/Kamchatka", new String[] {"\u30da\u30c8\u30ed\u30d1\u30d6\u30ed\u30d5\u30b9\u30af\u30ab\u30e0\u30c1\u30e3\u30c4\u30ad\u30fc\u6642\u9593", "PETT",
|
||
"\u30da\u30c8\u30ed\u30d1\u30d6\u30ed\u30d5\u30b9\u30af\u30ab\u30e0\u30c1\u30e3\u30c4\u30ad\u30fc\u590f\u6642\u9593", "PETST"}},
|
||
{"Asia/Karachi", PKT},
|
||
- {"Asia/Kashgar", CTT},
|
||
+ {"Asia/Kashgar", XJT},
|
||
{"Asia/Kathmandu", NPT},
|
||
{"Asia/Katmandu", NPT},
|
||
{"Asia/Khandyga", new String[] {"\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u6642\u9593", "YAKT",
|
||
"\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u590F\u6642\u9593", "YAKST"}},
|
||
{"Asia/Kolkata", IST},
|
||
- {"Asia/Krasnoyarsk", new String[] {"\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u6642\u9593", "KRAT",
|
||
- "\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u590f\u6642\u9593", "KRAST"}},
|
||
+ {"Asia/Krasnoyarsk", KRAT},
|
||
{"Asia/Kuala_Lumpur", MYT},
|
||
{"Asia/Kuching", MYT},
|
||
{"Asia/Kuwait", ARAST},
|
||
@@ -556,7 +556,7 @@
|
||
"\u30d5\u30a3\u30ea\u30d4\u30f3\u590f\u6642\u9593", "PHST"}},
|
||
{"Asia/Muscat", GST},
|
||
{"Asia/Nicosia", EET},
|
||
- {"Asia/Novokuznetsk", NOVT},
|
||
+ {"Asia/Novokuznetsk", KRAT},
|
||
{"Asia/Novosibirsk", NOVT},
|
||
{"Asia/Oral", new String[] {"\u30aa\u30e9\u30eb\u6642\u9593", "ORAT",
|
||
"\u30aa\u30e9\u30eb\u590f\u6642\u9593", "ORAST"}},
|
||
@@ -577,6 +577,8 @@
|
||
{"Asia/Samarkand", UZT},
|
||
{"Asia/Seoul", KST},
|
||
{"Asia/Singapore", SGT},
|
||
+ {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET",
|
||
+ "Srednekolymsk Daylight Time", "SREDT"}},
|
||
{"Asia/Taipei", CTT},
|
||
{"Asia/Tel_Aviv", ISRAEL},
|
||
{"Asia/Tashkent", UZT},
|
||
@@ -588,7 +590,7 @@
|
||
{"Asia/Ujung_Pandang", CIT},
|
||
{"Asia/Ulaanbaatar", ULAT},
|
||
{"Asia/Ulan_Bator", ULAT},
|
||
- {"Asia/Urumqi", CTT},
|
||
+ {"Asia/Urumqi", XJT},
|
||
{"Asia/Ust-Nera", new String[] {"\u30A6\u30B9\u30C1\u30CD\u30E9\u6642\u9593", "VLAT",
|
||
"\u30A6\u30B9\u30C1\u30CD\u30E9\u590F\u6642\u9593", "VLAST"}},
|
||
{"Asia/Vientiane", ICT},
|
||
@@ -620,8 +622,8 @@
|
||
{"Australia/Canberra", EST_NSW},
|
||
{"Australia/Currie", EST_NSW},
|
||
{"Australia/Darwin", DARWIN},
|
||
- {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "CWST",
|
||
- "\u4E2D\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "CWST"}},
|
||
+ {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "ACWST",
|
||
+ "\u4E2D\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "ACWDT"}},
|
||
{"Australia/Hobart", TASMANIA},
|
||
{"Australia/LHI", LORD_HOWE},
|
||
{"Australia/Lindeman", BRISBANE},
|
||
@@ -687,7 +689,7 @@
|
||
{"Europe/Isle_of_Man", GMTBST},
|
||
{"Europe/Istanbul", EET},
|
||
{"Europe/Jersey", GMTBST},
|
||
- {"Europe/Kaliningrad", FET},
|
||
+ {"Europe/Kaliningrad", EET},
|
||
{"Europe/Kiev", EET},
|
||
{"Europe/Lisbon", WET},
|
||
{"Europe/Ljubljana", CET},
|
||
@@ -696,7 +698,7 @@
|
||
{"Europe/Madrid", CET},
|
||
{"Europe/Malta", CET},
|
||
{"Europe/Mariehamn", EET},
|
||
- {"Europe/Minsk", FET},
|
||
+ {"Europe/Minsk", MSK},
|
||
{"Europe/Monaco", CET},
|
||
{"Europe/Moscow", MSK},
|
||
{"Europe/Nicosia", EET},
|
||
@@ -721,8 +723,7 @@
|
||
{"Europe/Vatican", CET},
|
||
{"Europe/Vienna", CET},
|
||
{"Europe/Vilnius", EET},
|
||
- {"Europe/Volgograd", new String[] {"\u30dc\u30eb\u30b4\u30b0\u30e9\u30fc\u30c9\u6642\u9593", "VOLT",
|
||
- "\u30dc\u30eb\u30b4\u30b0\u30e9\u30fc\u30c9\u590f\u6642\u9593", "VOLST"}},
|
||
+ {"Europe/Volgograd", MSK},
|
||
{"Europe/Warsaw", CET},
|
||
{"Europe/Zagreb", CET},
|
||
{"Europe/Zaporozhye", EET},
|
||
@@ -775,6 +776,8 @@
|
||
{"PRT", AST},
|
||
{"Pacific/Apia", WST_SAMOA},
|
||
{"Pacific/Auckland", NZST},
|
||
+ {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST",
|
||
+ "Bougainville Daylight Time", "BST"}},
|
||
{"Pacific/Chatham", CHAST},
|
||
{"Pacific/Chuuk", CHUT},
|
||
{"Pacific/Easter", EASTER},
|
||
--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -45,8 +45,8 @@
|
||
protected final Object[][] getContents() {
|
||
String ACT[] = new String[] {"\uc5d0\uc774\ucee4 \uc2dc\uac04", "ACT",
|
||
"\uc5d0\uc774\ucee4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ACST"};
|
||
- String ADELAIDE[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "CST",
|
||
- "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "CST"};
|
||
+ String ADELAIDE[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "ACST",
|
||
+ "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "ACDT"};
|
||
String AGT[] = new String[] {"\uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "ART",
|
||
"\uc544\ub974\ud5e8\ud2f0\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ARST"};
|
||
String AKST[] = new String[] {"\uc54c\ub798\uc2a4\uce74 \ud45c\uc900\uc2dc", "AKST",
|
||
@@ -61,10 +61,10 @@
|
||
"\ub300\uc11c\uc591 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ADT"};
|
||
String BDT[] = new String[] {"\ubc29\uae00\ub77c\ub370\uc2dc \uc2dc\uac04", "BDT",
|
||
"\ubc29\uae00\ub77c\ub370\uc2dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BDST"};
|
||
- String BRISBANE[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC)", "EST",
|
||
- "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD038\uC990\uB79C\uB4DC)", "EST"};
|
||
- String BROKEN_HILL[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "CST",
|
||
- "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "CST"};
|
||
+ String BRISBANE[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC)", "AEST",
|
||
+ "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD038\uC990\uB79C\uB4DC)", "AEDT"};
|
||
+ String BROKEN_HILL[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "ACST",
|
||
+ "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "ACDT"};
|
||
String BRT[] = new String[] {"\ube0c\ub77c\uc9c8\ub9ac\uc544 \uc2dc\uac04", "BRT",
|
||
"\ube0c\ub77c\uc9c8\ub9ac\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BRST"};
|
||
String BTT[] = new String[] {"\ubd80\ud0c4 \uc2dc\uac04", "BTT",
|
||
@@ -89,8 +89,8 @@
|
||
"\uc911\uad6d \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CDT"};
|
||
String CUBA[] = new String[] {"\ucfe0\ubc14 \ud45c\uc900\uc2dc", "CST",
|
||
"\ucfe0\ubc14 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CDT"};
|
||
- String DARWIN[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED)", "CST",
|
||
- "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBD81\uBD80 \uC9C0\uC5ED)", "CST"};
|
||
+ String DARWIN[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED)", "ACST",
|
||
+ "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBD81\uBD80 \uC9C0\uC5ED)", "ACDT"};
|
||
String DUBLIN[] = new String[] {"\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc", "GMT",
|
||
"\uc544\uc77c\ub79c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IST"};
|
||
String EAT[] = new String[] {"\ub3d9\ubd80 \uc544\ud504\ub9ac\uce74 \uc2dc\uac04", "EAT",
|
||
@@ -103,8 +103,8 @@
|
||
"\ub3d9\ubd80 \uadf8\ub9b0\ub79c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "EGST"};
|
||
String EST[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc", "EST",
|
||
"\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "EDT"};
|
||
- String EST_NSW[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "EST",
|
||
- "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "EST"};
|
||
+ String EST_NSW[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "AEST",
|
||
+ "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "AEDT"};
|
||
String FET[] = new String[] {"\uADF9\uB3D9 \uC720\uB7FD \uD45C\uC900\uC2DC", "FET",
|
||
"\uADF9\uB3D9 \uC720\uB7FD \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "FEST"};
|
||
String GHMT[] = new String[] {"\uac00\ub098 \ud45c\uc900\uc2dc", "GMT",
|
||
@@ -133,10 +133,12 @@
|
||
"\uc778\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IDT"};
|
||
String JST[] = new String[] {"\uc77c\ubcf8 \ud45c\uc900\uc2dc", "JST",
|
||
"\uc77c\ubcf8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "JDT"};
|
||
+ String KRAT[] = new String[] {"\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc2dc\uac04", "KRAT",
|
||
+ "\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "KRAST"};
|
||
String KST[] = new String[] {"\ud55c\uad6d \ud45c\uc900\uc2dc", "KST",
|
||
"\ud55c\uad6d \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "KDT"};
|
||
String LORD_HOWE[] = new String[] {"\ub85c\ub4dc \ud558\uc6b0 \ud45c\uc900\uc2dc", "LHST",
|
||
- "\ub85c\ub4dc \ud558\uc6b0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "LHST"};
|
||
+ "\ub85c\ub4dc \ud558\uc6b0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "LHDT"};
|
||
String MHT[] = new String[] {"\ub9c8\uc15c\uc81c\ub3c4 \uc2dc\uac04", "MHT",
|
||
"\ub9c8\uc15c\uc81c\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MHST"};
|
||
String MSK[] = new String[] {"\ubaa8\uc2a4\ud06c\ubc14 \ud45c\uc900\uc2dc", "MSK",
|
||
@@ -165,16 +167,16 @@
|
||
"\ud0dc\ud3c9\uc591 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PDT"};
|
||
String SAMOA[] = new String[] {"\uc0ac\ubaa8\uc544 \ud45c\uc900\uc2dc", "SST",
|
||
"\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SDT"};
|
||
+ String IRKT[] = new String[] {"\uc774\ub974\ucfe0\uce20\ud06c \uc2dc\uac04", "IRKT",
|
||
+ "\uc774\ub974\ucfe0\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IRKST"};
|
||
String SAST[] = new String[] {"\ub0a8\uc544\ud504\ub9ac\uce74 \ud45c\uc900\uc2dc", "SAST",
|
||
"\ub0a8\uc544\ud504\ub9ac\uce74 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SAST"};
|
||
String SBT[] = new String[] {"\uc194\ub85c\ubaac \uad70\ub3c4 \uc2dc\uac04", "SBT",
|
||
"\uc194\ub85c\ubaac \uad70\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SBST"};
|
||
String SGT[] = new String[] {"\uc2f1\uac00\ud3ec\ub974 \uc2dc\uac04", "SGT",
|
||
"\uc2f1\uac00\ud3ec\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SGST"};
|
||
- String SLST[] = new String[] {"\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc", "GMT",
|
||
- "\uc2dc\uc5d0\ub77c\ub9ac\uc628 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SLST"};
|
||
- String TASMANIA[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)", "EST",
|
||
- "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)", "EST"};
|
||
+ String TASMANIA[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)", "AEST",
|
||
+ "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)", "AEDT"};
|
||
String TMT[] = new String[] {"\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc2dc\uac04", "TMT",
|
||
"\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TMST"};
|
||
String ULAT[]= new String[] {"\uc6b8\ub780\ubc14\ud0c0\ub974 \uc2dc\uac04", "ULAT",
|
||
@@ -183,22 +185,22 @@
|
||
"\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC"};
|
||
String UZT[] = new String[] {"\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc2dc\uac04", "UZT",
|
||
"\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "UZST"};
|
||
- String VICTORIA[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uBE45\uD1A0\uB9AC\uC544)", "EST",
|
||
- "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBE45\uD1A0\uB9AC\uC544)", "EST"};
|
||
+ String VICTORIA[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uBE45\uD1A0\uB9AC\uC544)", "AEST",
|
||
+ "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBE45\uD1A0\uB9AC\uC544)", "AEDT"};
|
||
String VLAT[] = new String[] {"\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc2dc\uac04", "VLAT",
|
||
"\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VLAST"};
|
||
- String WART[] = new String[] {"\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "WART",
|
||
- "\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WARST"};
|
||
String WAT[] = new String[] {"\uc11c\ubd80 \uc544\ud504\ub9ac\uce74 \uc2dc\uac04", "WAT",
|
||
"\uc11c\ubd80 \uc544\ud504\ub9ac\uce74 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WAST"};
|
||
String WET[] = new String[] {"\uc11c\uc720\ub7fd \uc2dc\uac04", "WET",
|
||
"\uc11c\uc720\ub7fd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WEST"};
|
||
String WIT[] = new String[] {"\uc11c\uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "WIB",
|
||
"\uc11c\uc778\ub3c4\ub124\uc2dc\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WIST"};
|
||
- String WST_AUS[] = new String[] {"\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "WST",
|
||
- "\uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "WST"};
|
||
- String WST_SAMOA[] = new String[] {"\uc11c\uc0ac\ubaa8\uc544 \uc2dc\uac04", "WST",
|
||
+ String WST_AUS[] = new String[] {"\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "AWST",
|
||
+ "\uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "AWDT"};
|
||
+ String WST_SAMOA[] = new String[] {"\uc11c\uc0ac\ubaa8\uc544 \uc2dc\uac04", "WSST",
|
||
"\uc11c\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WSDT"};
|
||
+ String XJT[] = new String[] {"\uc911\uad6d \ud45c\uc900\uc2dc", "XJT",
|
||
+ "\uc911\uad6d \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "XJDT"};
|
||
String YAKT[] = new String[] {"\uc57c\uce20\ud06c \uc2dc\uac04", "YAKT",
|
||
"\uc57c\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "YAKST"};
|
||
|
||
@@ -262,7 +264,7 @@
|
||
{"Africa/Djibouti", EAT},
|
||
{"Africa/Douala", WAT},
|
||
{"Africa/El_Aaiun", WET},
|
||
- {"Africa/Freetown", SLST},
|
||
+ {"Africa/Freetown", GMT},
|
||
{"Africa/Gaborone", CAT},
|
||
{"Africa/Harare", CAT},
|
||
{"Africa/Johannesburg", SAST},
|
||
@@ -358,7 +360,7 @@
|
||
{"America/Godthab", new String[] {"\uc11c\ubd80 \uadf8\ub9b0\ub79c\ub4dc \uc2dc\uac04", "WGT",
|
||
"\uc11c\ubd80 \uadf8\ub9b0\ub79c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WGST"}},
|
||
{"America/Goose_Bay", AST},
|
||
- {"America/Grand_Turk", EST},
|
||
+ {"America/Grand_Turk", AST},
|
||
{"America/Grenada", AST},
|
||
{"America/Guadeloupe", AST},
|
||
{"America/Guatemala", CST},
|
||
@@ -401,8 +403,7 @@
|
||
{"America/Mendoza", AGT},
|
||
{"America/Menominee", CST},
|
||
{"America/Merida", CST},
|
||
- {"America/Metlakatla", new String[] {"\uBA54\uD2B8\uB77C\uCE74\uD2B8\uB77C \uD45C\uC900\uC2DC", "MeST",
|
||
- "\uBA54\uD2B8\uB77C\uCE74\uD2B8\uB77C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "MeDT"}},
|
||
+ {"America/Metlakatla", PST},
|
||
{"America/Mexico_City", CST},
|
||
{"America/Miquelon", new String[] {"\ud53c\uc5d0\ub974 \ubbf8\ud06c\ub860 \ud45c\uc900\uc2dc", "PMST",
|
||
"\ud53c\uc5d0\ub974 \ubbf8\ud06c\ub860 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PMDT"}},
|
||
@@ -467,7 +468,7 @@
|
||
{"Antarctica/DumontDUrville", new String[] {"\ub4a4\ubabd \ub4a4\ub974\ube4c \uc2dc\uac04", "DDUT",
|
||
"\ub4a4\ubabd \ub4a4\ub974\ube4c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "DDUST"}},
|
||
{"Antarctica/Macquarie", new String[] {"\uB9E4\uCF70\uB9AC \uC12C \uD45C\uC900\uC2DC", "MIST",
|
||
- "\uB9E4\uCF70\uB9AC \uC12C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "MIST"}},
|
||
+ "\uB9E4\uCF70\uB9AC \uC12C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "MIDT"}},
|
||
{"Antarctica/Mawson", new String[] {"\ubaa8\uc2a8 \uc2dc\uac04", "MAWT",
|
||
"\ubaa8\uc2a8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MAWST"}},
|
||
{"Antarctica/McMurdo", NZST},
|
||
@@ -505,6 +506,7 @@
|
||
{"Asia/Brunei", new String[] {"\ube0c\ub8e8\ub098\uc774 \uc2dc\uac04", "BNT",
|
||
"\ube0c\ub8e8\ub098\uc774 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BNST"}},
|
||
{"Asia/Calcutta", IST},
|
||
+ {"Asia/Chita", IRKT},
|
||
{"Asia/Choibalsan", new String[] {"Choibalsan \uc2dc\uac04", "CHOT",
|
||
"Choibalsan \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CHOST"}},
|
||
{"Asia/Chongqing", CTT},
|
||
@@ -525,8 +527,7 @@
|
||
{"Asia/Hong_Kong", HKT},
|
||
{"Asia/Hovd", new String[] {"Hovd \uc2dc\uac04", "HOVT",
|
||
"Hovd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "HOVST"}},
|
||
- {"Asia/Irkutsk", new String[] {"\uc774\ub974\ucfe0\uce20\ud06c \uc2dc\uac04", "IRKT",
|
||
- "\uc774\ub974\ucfe0\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IRKST"}},
|
||
+ {"Asia/Irkutsk", IRKT},
|
||
{"Asia/Istanbul", EET},
|
||
{"Asia/Jakarta", WIT},
|
||
{"Asia/Jayapura", new String[] {"\ub3d9\ubd80 \uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "WIT",
|
||
@@ -536,14 +537,13 @@
|
||
{"Asia/Kamchatka", new String[] {"\ud398\ud2b8\ub85c\ud30c\ube14\ub85c\ud504\uc2a4\ud06c-\uce84\ucc28\uce20\ud0a4 \uc2dc\uac04", "PETT",
|
||
"\ud398\ud2b8\ub85c\ud30c\ube14\ub85c\ud504\uc2a4\ud06c-\uce84\ucc28\uce20\ud0a4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PETST"}},
|
||
{"Asia/Karachi", PKT},
|
||
- {"Asia/Kashgar", CTT},
|
||
+ {"Asia/Kashgar", XJT},
|
||
{"Asia/Kathmandu", NPT},
|
||
{"Asia/Katmandu", NPT},
|
||
{"Asia/Khandyga", new String[] {"\uD55C\uB514\uAC00 \uD45C\uC900\uC2DC", "YAKT",
|
||
"\uD55C\uB514\uAC00 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "YAKST"}},
|
||
{"Asia/Kolkata", IST},
|
||
- {"Asia/Krasnoyarsk", new String[] {"\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc2dc\uac04", "KRAT",
|
||
- "\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "KRAST"}},
|
||
+ {"Asia/Krasnoyarsk", KRAT},
|
||
{"Asia/Kuala_Lumpur", MYT},
|
||
{"Asia/Kuching", MYT},
|
||
{"Asia/Kuwait", ARAST},
|
||
@@ -556,7 +556,7 @@
|
||
"\ud544\ub9ac\ud540 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PHST"}},
|
||
{"Asia/Muscat", GST},
|
||
{"Asia/Nicosia", EET},
|
||
- {"Asia/Novokuznetsk", NOVT},
|
||
+ {"Asia/Novokuznetsk", KRAT},
|
||
{"Asia/Novosibirsk", NOVT},
|
||
{"Asia/Oral", new String[] {"Oral \ud45c\uc900\uc2dc", "ORAT",
|
||
"Oral \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ORAST"}},
|
||
@@ -577,6 +577,8 @@
|
||
{"Asia/Samarkand", UZT},
|
||
{"Asia/Seoul", KST},
|
||
{"Asia/Singapore", SGT},
|
||
+ {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET",
|
||
+ "Srednekolymsk Daylight Time", "SREDT"}},
|
||
{"Asia/Taipei", CTT},
|
||
{"Asia/Tel_Aviv", ISRAEL},
|
||
{"Asia/Tashkent", UZT},
|
||
@@ -588,7 +590,7 @@
|
||
{"Asia/Ujung_Pandang", CIT},
|
||
{"Asia/Ulaanbaatar", ULAT},
|
||
{"Asia/Ulan_Bator", ULAT},
|
||
- {"Asia/Urumqi", CTT},
|
||
+ {"Asia/Urumqi", XJT},
|
||
{"Asia/Ust-Nera", new String[] {"\uC6B0\uC2A4\uD2F0\uB124\uB77C \uD45C\uC900\uC2DC", "VLAT",
|
||
"\uC6B0\uC2A4\uD2F0\uB124\uB77C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "VLAST"}},
|
||
{"Asia/Vientiane", ICT},
|
||
@@ -620,8 +622,8 @@
|
||
{"Australia/Canberra", EST_NSW},
|
||
{"Australia/Currie", EST_NSW},
|
||
{"Australia/Darwin", DARWIN},
|
||
- {"Australia/Eucla", new String[] {"\uC911\uC559 \uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "CWST",
|
||
- "\uC911\uC559 \uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "CWST"}},
|
||
+ {"Australia/Eucla", new String[] {"\uC911\uC559 \uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "ACWST",
|
||
+ "\uC911\uC559 \uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "ACWDT"}},
|
||
{"Australia/Hobart", TASMANIA},
|
||
{"Australia/LHI", LORD_HOWE},
|
||
{"Australia/Lindeman", BRISBANE},
|
||
@@ -687,7 +689,7 @@
|
||
{"Europe/Isle_of_Man", GMTBST},
|
||
{"Europe/Istanbul", EET},
|
||
{"Europe/Jersey", GMTBST},
|
||
- {"Europe/Kaliningrad", FET},
|
||
+ {"Europe/Kaliningrad", EET},
|
||
{"Europe/Kiev", EET},
|
||
{"Europe/Lisbon", WET},
|
||
{"Europe/Ljubljana", CET},
|
||
@@ -696,7 +698,7 @@
|
||
{"Europe/Madrid", CET},
|
||
{"Europe/Malta", CET},
|
||
{"Europe/Mariehamn", EET},
|
||
- {"Europe/Minsk", FET},
|
||
+ {"Europe/Minsk", MSK},
|
||
{"Europe/Monaco", CET},
|
||
{"Europe/Moscow", MSK},
|
||
{"Europe/Nicosia", EET},
|
||
@@ -721,8 +723,7 @@
|
||
{"Europe/Vatican", CET},
|
||
{"Europe/Vienna", CET},
|
||
{"Europe/Vilnius", EET},
|
||
- {"Europe/Volgograd", new String[] {"\ubcfc\uace0\uadf8\ub77c\ub4dc \uc2dc\uac04", "VOLT",
|
||
- "\ubcfc\uace0\uadf8\ub77c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VOLST"}},
|
||
+ {"Europe/Volgograd", MSK},
|
||
{"Europe/Warsaw", CET},
|
||
{"Europe/Zagreb", CET},
|
||
{"Europe/Zaporozhye", EET},
|
||
@@ -775,6 +776,8 @@
|
||
{"PRT", AST},
|
||
{"Pacific/Apia", WST_SAMOA},
|
||
{"Pacific/Auckland", NZST},
|
||
+ {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST",
|
||
+ "Bougainville Daylight Time", "BST"}},
|
||
{"Pacific/Chatham", CHAST},
|
||
{"Pacific/Chuuk", CHUT},
|
||
{"Pacific/Easter", EASTER},
|
||
--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -45,8 +45,8 @@
|
||
protected final Object[][] getContents() {
|
||
String ACT[] = new String[] {"Fuso hor\u00e1rio do Acre", "ACT",
|
||
"Fuso hor\u00e1rio de ver\u00e3o do Acre", "ACST"};
|
||
- String ADELAIDE[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul)", "CST",
|
||
- "Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul)", "CST"};
|
||
+ String ADELAIDE[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul)", "ACST",
|
||
+ "Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul)", "ACDT"};
|
||
String AGT[] = new String[] {"Fuso hor\u00e1rio da Argentina", "ART",
|
||
"Fuso hor\u00e1rio de ver\u00e3o da Argentina", "ARST"};
|
||
String AKST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Alaska", "AKST",
|
||
@@ -61,10 +61,10 @@
|
||
"Hor\u00e1rio de luz natural do Atl\u00e2ntico", "ADT"};
|
||
String BDT[] = new String[] {"Fuso hor\u00e1rio de Bangladesh", "BDT",
|
||
"Fuso hor\u00e1rio de ver\u00e3o de Bangladesh", "BDST"};
|
||
- String BRISBANE[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Queensland)", "EST",
|
||
- "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Queensland)", "EST"};
|
||
- String BROKEN_HILL[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul)", "CST",
|
||
- "Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul)", "CST"};
|
||
+ String BRISBANE[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Queensland)", "AEST",
|
||
+ "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Queensland)", "AEDT"};
|
||
+ String BROKEN_HILL[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul)", "ACST",
|
||
+ "Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul)", "ACDT"};
|
||
String BRT[] = new String[] {"Fuso hor\u00e1rio de Bras\u00edlia", "BRT",
|
||
"Fuso hor\u00e1rio de ver\u00e3o de Bras\u00edlia", "BRST"};
|
||
String BTT[] = new String[] {"Fuso hor\u00e1rio de But\u00e3o", "BTT",
|
||
@@ -87,8 +87,8 @@
|
||
"Hor\u00e1rio de luz natural da China", "CDT"};
|
||
String CUBA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Cuba", "CST",
|
||
"Hor\u00e1rio de luz natural de Cuba", "CDT"};
|
||
- String DARWIN[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Territ\u00F3rio do Norte)", "CST",
|
||
- "Fuso Hor\u00E1rio de Ver\u00E3o Central (Territ\u00F3rio do Norte)", "CST"};
|
||
+ String DARWIN[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Territ\u00F3rio do Norte)", "ACST",
|
||
+ "Fuso Hor\u00E1rio de Ver\u00E3o Central (Territ\u00F3rio do Norte)", "ACDT"};
|
||
String DUBLIN[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT",
|
||
"Fuso hor\u00e1rio de ver\u00e3o da Irlanda", "IST"};
|
||
String EAT[] = new String[] {"Fuso hor\u00e1rio da \u00c1frica Oriental", "EAT",
|
||
@@ -101,8 +101,8 @@
|
||
"Fuso hor\u00e1rio de ver\u00e3o da Groenl\u00e2ndia Oriental", "EGST"};
|
||
String EST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental", "EST",
|
||
"Hor\u00e1rio de luz natural oriental", "EDT"};
|
||
- String EST_NSW[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul)", "EST",
|
||
- "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul)", "EST"};
|
||
+ String EST_NSW[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul)", "AEST",
|
||
+ "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul)", "AEDT"};
|
||
String FET[] = new String[] {"Hor\u00E1rio do Extremo Leste Europeu (FET)", "FET",
|
||
"Fuso Hor\u00E1rio de Ver\u00E3o do Extremo Leste Europeu", "FEST"};
|
||
String GHMT[] = new String[] {"Fuso hor\u00e1rio do meridiano de Gana", "GMT",
|
||
@@ -131,10 +131,12 @@
|
||
"Hor\u00e1rio de luz natural da \u00cdndia", "IDT"};
|
||
String JST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Jap\u00e3o", "JST",
|
||
"Hor\u00e1rio de luz natural do Jap\u00e3o", "JDT"};
|
||
+ String KRAT[] = new String[] {"Fuso hor\u00e1rio de Krasnoyarsk", "KRAT",
|
||
+ "Fuso hor\u00e1rio de ver\u00e3o de Krasnoyarsk", "KRAST"};
|
||
String KST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da Coreia", "KST",
|
||
"Hor\u00e1rio de luz natural da Coreia", "KDT"};
|
||
String LORD_HOWE[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Lord Howe", "LHST",
|
||
- "Fuso hor\u00e1rio de ver\u00e3o de Lord Howe", "LHST"};
|
||
+ "Fuso hor\u00e1rio de ver\u00e3o de Lord Howe", "LHDT"};
|
||
String MHT[] = new String[] {"Fuso hor\u00e1rio das Ilhas Marshall", "MHT",
|
||
"Fuso hor\u00e1rio de ver\u00e3o das Ilhas Marshall", "MHST"};
|
||
String MSK[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Moscou", "MSK",
|
||
@@ -163,16 +165,16 @@
|
||
"Hor\u00e1rio de luz natural do Pac\u00edfico", "PDT"};
|
||
String SAMOA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Samoa", "SST",
|
||
"Hor\u00e1rio de luz natural de Samoa", "SDT"};
|
||
+ String IRKT[] = new String[] {"Fuso hor\u00e1rio de Irkutsk", "IRKT",
|
||
+ "Fuso hor\u00e1rio de ver\u00e3o de Irkutsk", "IRKST"};
|
||
String SAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da \u00c1frica do Sul", "SAST",
|
||
"Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica do Sul", "SAST"};
|
||
String SBT[] = new String[] {"Fuso hor\u00e1rio das Ilhas Salom\u00e3o", "SBT",
|
||
"Fuso hor\u00e1rio de ver\u00e3o das Ilhas Salom\u00e3o", "SBST"};
|
||
String SGT[] = new String[] {"Fuso hor\u00e1rio de Cingapura", "SGT",
|
||
"Fuso hor\u00e1rio de ver\u00e1 de Cingapura", "SGST"};
|
||
- String SLST[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT",
|
||
- "Fuso hor\u00e1rio de ver\u00e3o de Serra Leoa", "SLST"};
|
||
- String TASMANIA[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Tasm\u00E2nia)", "EST",
|
||
- "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Tasm\u00E2nia)", "EST"};
|
||
+ String TASMANIA[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Tasm\u00E2nia)", "AEST",
|
||
+ "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Tasm\u00E2nia)", "AEDT"};
|
||
String TMT[] = new String[] {"Fuso hor\u00e1rio do Turcomenist\u00e3o", "TMT",
|
||
"Fuso hor\u00e1rio de ver\u00e3o do Turcomenist\u00e3o", "TMST"};
|
||
String TRUT[] = new String[] {"Fuso Hor\u00E1rio de Chuuk", "CHUT",
|
||
@@ -183,22 +185,22 @@
|
||
"Tempo universal coordenado", "UTC"};
|
||
String UZT[] = new String[] {"Fuso hor\u00e1rio do Uzbequist\u00e3o", "UZT",
|
||
"Fuso hor\u00e1rio de ver\u00e3o do Uzbequist\u00e3o", "UZST"};
|
||
- String VICTORIA[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Victoria)", "EST",
|
||
- "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Victoria)", "EST"};
|
||
+ String VICTORIA[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Victoria)", "AEST",
|
||
+ "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Victoria)", "AEDT"};
|
||
String VLAT[] = new String[] {"Fuso hor\u00e1rio de Vladivostok", "VLAT",
|
||
"Fuso hor\u00e1rio de ver\u00e3o de Vladivostok", "VLAST"};
|
||
- String WART[] = new String[] {"Fuso hor\u00e1rio da Argentina Ocidental", "WART",
|
||
- "Fuso hor\u00e1rio de ver\u00e3o da Argentina Ocidental", "WARST"};
|
||
String WAT[] = new String[] {"Fuso hor\u00e1rio da \u00c1frica Ocidental", "WAT",
|
||
"Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica Ocidental", "WAST"};
|
||
String WET[] = new String[] {"Fuso hor\u00e1rio da Europa Ocidental", "WET",
|
||
"Fuso hor\u00e1rio de ver\u00e3o da Europa Ocidental", "WEST"};
|
||
String WIT[] = new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Ocidental", "WIB",
|
||
"Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Ocidental", "WIST"};
|
||
- String WST_AUS[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Ocidental (Austr\u00E1lia)", "WST",
|
||
- "Fuso Hor\u00E1rio de Ver\u00E3o Ocidental (Austr\u00E1lia)", "WST"};
|
||
- String WST_SAMOA[] = new String[] {"Fuso hor\u00e1rio de Samoa Ocidental", "WST",
|
||
+ String WST_AUS[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Ocidental (Austr\u00E1lia)", "AWST",
|
||
+ "Fuso Hor\u00E1rio de Ver\u00E3o Ocidental (Austr\u00E1lia)", "AWDT"};
|
||
+ String WST_SAMOA[] = new String[] {"Fuso hor\u00e1rio de Samoa Ocidental", "WSST",
|
||
"Fuso hor\u00e1rio de ver\u00e3o de Samoa Ocidental", "WSDT"};
|
||
+ String XJT[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da China", "XJT",
|
||
+ "Hor\u00e1rio de luz natural da China", "XJDT"};
|
||
String YAKT[] = new String[] {"Fuso hor\u00e1rio de Yakutsk", "YAKT",
|
||
"Fuso hor\u00e1rio de ver\u00e3o de Yakutsk", "YAKST"};
|
||
|
||
@@ -262,7 +264,7 @@
|
||
{"Africa/Djibouti", EAT},
|
||
{"Africa/Douala", WAT},
|
||
{"Africa/El_Aaiun", WET},
|
||
- {"Africa/Freetown", SLST},
|
||
+ {"Africa/Freetown", GMT},
|
||
{"Africa/Gaborone", CAT},
|
||
{"Africa/Harare", CAT},
|
||
{"Africa/Johannesburg", SAST},
|
||
@@ -358,7 +360,7 @@
|
||
{"America/Godthab", new String[] {"Fuso hor\u00e1rio da Groenl\u00e2ndia Ocidental", "WGT",
|
||
"Fuso hor\u00e1rio de ver\u00e3o da Groenl\u00e2ndia Ocidental", "WGST"}},
|
||
{"America/Goose_Bay", AST},
|
||
- {"America/Grand_Turk", EST},
|
||
+ {"America/Grand_Turk", AST},
|
||
{"America/Grenada", AST},
|
||
{"America/Guadeloupe", AST},
|
||
{"America/Guatemala", CST},
|
||
@@ -401,8 +403,7 @@
|
||
{"America/Mendoza", AGT},
|
||
{"America/Menominee", CST},
|
||
{"America/Merida", CST},
|
||
- {"America/Metlakatla", new String[] {"Hor\u00E1rio Padr\u00E3o de Metlakatla", "MeST",
|
||
- "Hor\u00E1rio de Luz Natural de Metlakatla", "MeDT"}},
|
||
+ {"America/Metlakatla", PST},
|
||
{"America/Mexico_City", CST},
|
||
{"America/Miquelon", new String[] {"Fuso hor\u00e1rio padr\u00e3o de S\u00e3o Pedro e Miquelon", "PMST",
|
||
"Hor\u00e1rio de luz natural de S\u00e3o Pedro e Miquelon", "PMDT"}},
|
||
@@ -467,7 +468,7 @@
|
||
{"Antarctica/DumontDUrville", new String[] {"Fuso hor\u00e1rio de Dumont-d'Urville", "DDUT",
|
||
"Fuso hor\u00e1rio de ver\u00e3o de Dumont-d'Urville", "DDUST"}},
|
||
{"Antarctica/Macquarie", new String[] {"Fuso Hor\u00E1rio da Ilha de Macquarie", "MIST",
|
||
- "Fuso Hor\u00E1rio de Ver\u00E3o da Ilha de Macquarie", "MIST"}},
|
||
+ "Fuso Hor\u00E1rio de Ver\u00E3o da Ilha de Macquarie", "MIDT"}},
|
||
{"Antarctica/Mawson", new String[] {"Fuso hor\u00e1rio de Mawson", "MAWT",
|
||
"Fuso hor\u00e1rio de ver\u00e3o de Mawson", "MAWST"}},
|
||
{"Antarctica/McMurdo", NZST},
|
||
@@ -505,6 +506,7 @@
|
||
{"Asia/Brunei", new String[] {"Fuso hor\u00e1rio de Brunei", "BNT",
|
||
"Fuso hor\u00e1rio de ver\u00e3o de Brunei", "BNST"}},
|
||
{"Asia/Calcutta", IST},
|
||
+ {"Asia/Chita", IRKT},
|
||
{"Asia/Choibalsan", new String[] {"Fuso hor\u00e1rio de Choibalsan", "CHOT",
|
||
"Fuso hor\u00e1rio de ver\u00e3o de Choibalsan", "CHOST"}},
|
||
{"Asia/Chongqing", CTT},
|
||
@@ -525,8 +527,7 @@
|
||
{"Asia/Hong_Kong", HKT},
|
||
{"Asia/Hovd", new String[] {"Fuso hor\u00e1rio de Hovd", "HOVT",
|
||
"Fuso hor\u00e1rio de ver\u00e3o de Hovd", "HOVST"}},
|
||
- {"Asia/Irkutsk", new String[] {"Fuso hor\u00e1rio de Irkutsk", "IRKT",
|
||
- "Fuso hor\u00e1rio de ver\u00e3o de Irkutsk", "IRKST"}},
|
||
+ {"Asia/Irkutsk", IRKT},
|
||
{"Asia/Istanbul", EET},
|
||
{"Asia/Jakarta", WIT},
|
||
{"Asia/Jayapura", new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Oriental", "WIT",
|
||
@@ -536,14 +537,13 @@
|
||
{"Asia/Kamchatka", new String[] {"Fuso hor\u00e1rio de Petropavlovsk-Kamchatski", "PETT",
|
||
"Fuso hor\u00e1rio de ver\u00e3o de Petropavlovsk-Kamchatski", "PETST"}},
|
||
{"Asia/Karachi", PKT},
|
||
- {"Asia/Kashgar", CTT},
|
||
+ {"Asia/Kashgar", XJT},
|
||
{"Asia/Kathmandu", NPT},
|
||
{"Asia/Katmandu", NPT},
|
||
{"Asia/Khandyga", new String[] {"Hor\u00E1rio de Khandyga", "YAKT",
|
||
"Hor\u00E1rio de Ver\u00E3o de Khandyga", "YAKST"}},
|
||
{"Asia/Kolkata", IST},
|
||
- {"Asia/Krasnoyarsk", new String[] {"Fuso hor\u00e1rio de Krasnoyarsk", "KRAT",
|
||
- "Fuso hor\u00e1rio de ver\u00e3o de Krasnoyarsk", "KRAST"}},
|
||
+ {"Asia/Krasnoyarsk", KRAT},
|
||
{"Asia/Kuala_Lumpur", MYT},
|
||
{"Asia/Kuching", MYT},
|
||
{"Asia/Kuwait", ARAST},
|
||
@@ -556,7 +556,7 @@
|
||
"Fuso hor\u00e1rio de ver\u00e3o das Filipinas", "PHST"}},
|
||
{"Asia/Muscat", GST},
|
||
{"Asia/Nicosia", EET},
|
||
- {"Asia/Novokuznetsk", NOVT},
|
||
+ {"Asia/Novokuznetsk", KRAT},
|
||
{"Asia/Novosibirsk", NOVT},
|
||
{"Asia/Oral", new String[] {"Fuso hor\u00e1rio de Uralsk", "ORAT",
|
||
"Fuso hor\u00e1rio de ver\u00e3o de Uralsk", "ORAST"}},
|
||
@@ -577,6 +577,8 @@
|
||
{"Asia/Samarkand", UZT},
|
||
{"Asia/Seoul", KST},
|
||
{"Asia/Singapore", SGT},
|
||
+ {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET",
|
||
+ "Srednekolymsk Daylight Time", "SREDT"}},
|
||
{"Asia/Taipei", CTT},
|
||
{"Asia/Tel_Aviv", ISRAEL},
|
||
{"Asia/Tashkent", UZT},
|
||
@@ -588,7 +590,7 @@
|
||
{"Asia/Ujung_Pandang", CIT},
|
||
{"Asia/Ulaanbaatar", ULAT},
|
||
{"Asia/Ulan_Bator", ULAT},
|
||
- {"Asia/Urumqi", CTT},
|
||
+ {"Asia/Urumqi", XJT},
|
||
{"Asia/Ust-Nera", new String[] {"Hor\u00E1rio de Ust-Nera", "VLAT",
|
||
"Hor\u00E1rio de Ver\u00E3o de Ust-Nera", "VLAST"}},
|
||
{"Asia/Vientiane", ICT},
|
||
@@ -620,8 +622,8 @@
|
||
{"Australia/Canberra", EST_NSW},
|
||
{"Australia/Currie", EST_NSW},
|
||
{"Australia/Darwin", DARWIN},
|
||
- {"Australia/Eucla", new String[] {"Fuso Hor\u00E1rio Ocidental Central (Austr\u00E1lia)", "CWST",
|
||
- "Fuso Hor\u00E1rio de Ver\u00E3o Ocidental Central (Austr\u00E1lia)", "CWST"}},
|
||
+ {"Australia/Eucla", new String[] {"Fuso Hor\u00E1rio Ocidental Central (Austr\u00E1lia)", "ACWST",
|
||
+ "Fuso Hor\u00E1rio de Ver\u00E3o Ocidental Central (Austr\u00E1lia)", "ACWDT"}},
|
||
{"Australia/Hobart", TASMANIA},
|
||
{"Australia/LHI", LORD_HOWE},
|
||
{"Australia/Lindeman", BRISBANE},
|
||
@@ -687,7 +689,7 @@
|
||
{"Europe/Isle_of_Man", GMTBST},
|
||
{"Europe/Istanbul", EET},
|
||
{"Europe/Jersey", GMTBST},
|
||
- {"Europe/Kaliningrad", FET},
|
||
+ {"Europe/Kaliningrad", EET},
|
||
{"Europe/Kiev", EET},
|
||
{"Europe/Lisbon", WET},
|
||
{"Europe/Ljubljana", CET},
|
||
@@ -696,7 +698,7 @@
|
||
{"Europe/Madrid", CET},
|
||
{"Europe/Malta", CET},
|
||
{"Europe/Mariehamn", EET},
|
||
- {"Europe/Minsk", FET},
|
||
+ {"Europe/Minsk", MSK},
|
||
{"Europe/Monaco", CET},
|
||
{"Europe/Moscow", MSK},
|
||
{"Europe/Nicosia", EET},
|
||
@@ -721,8 +723,7 @@
|
||
{"Europe/Vatican", CET},
|
||
{"Europe/Vienna", CET},
|
||
{"Europe/Vilnius", EET},
|
||
- {"Europe/Volgograd", new String[] {"Fuso hor\u00e1rio de Volgogrado", "VOLT",
|
||
- "Fuso hor\u00e1rio de ver\u00e3o de Volgogrado", "VOLST"}},
|
||
+ {"Europe/Volgograd", MSK},
|
||
{"Europe/Warsaw", CET},
|
||
{"Europe/Zagreb", CET},
|
||
{"Europe/Zaporozhye", EET},
|
||
@@ -775,6 +776,8 @@
|
||
{"PRT", AST},
|
||
{"Pacific/Apia", WST_SAMOA},
|
||
{"Pacific/Auckland", NZST},
|
||
+ {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST",
|
||
+ "Bougainville Daylight Time", "BST"}},
|
||
{"Pacific/Chatham", CHAST},
|
||
{"Pacific/Chuuk", TRUT},
|
||
{"Pacific/Easter", EASTER},
|
||
--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -45,8 +45,8 @@
|
||
protected final Object[][] getContents() {
|
||
String ACT[] = new String[] {"Acre, normaltid", "ACT",
|
||
"Acre, sommartid", "ACST"};
|
||
- String ADELAIDE[] = new String[] {"Central standardtid (Sydaustralien)", "CST",
|
||
- "Central sommartid (South Australia)", "CST"};
|
||
+ String ADELAIDE[] = new String[] {"Central standardtid (Sydaustralien)", "ACST",
|
||
+ "Central sommartid (South Australia)", "ACDT"};
|
||
String AGT[] = new String[] {"Argentina, normaltid", "ART",
|
||
"Argentina, sommartid", "ARST"};
|
||
String AKST[] = new String[] {"Alaska, normaltid", "AKST",
|
||
@@ -61,10 +61,10 @@
|
||
"Atlantisk sommartid", "ADT"};
|
||
String BDT[] = new String[] {"Bangladesh, normaltid", "BDT",
|
||
"Bangladesh, sommartid", "BDST"};
|
||
- String BRISBANE[] = new String[] {"\u00D6stlig standardtid (Queensland)", "EST",
|
||
- "\u00D6stlig sommartid (Queensland)", "EST"};
|
||
- String BROKEN_HILL[] = new String[] {"Central standardtid (Sydaustralien)/New South Wales)", "CST",
|
||
- "Central sommartid (South Australia/New South Wales)", "CST"};
|
||
+ String BRISBANE[] = new String[] {"\u00D6stlig standardtid (Queensland)", "AEST",
|
||
+ "\u00D6stlig sommartid (Queensland)", "AEDT"};
|
||
+ String BROKEN_HILL[] = new String[] {"Central standardtid (Sydaustralien/New South Wales)", "ACST",
|
||
+ "Central sommartid (South Australia/New South Wales)", "ACDT"};
|
||
String BRT[] = new String[] {"Brasilien, normaltid", "BRT",
|
||
"Brasilien, sommartid", "BRST"};
|
||
String BTT[] = new String[] {"Bhutan, normaltid", "BTT",
|
||
@@ -89,8 +89,8 @@
|
||
"Kina, sommartid", "CDT"};
|
||
String CUBA[] = new String[] {"Kuba, normaltid", "CST",
|
||
"Kuba, sommartid", "CDT"};
|
||
- String DARWIN[] = new String[] {"Central standardtid (Nordterritoriet)", "CST",
|
||
- "Central sommartid (Nordterritoriet)", "CST"};
|
||
+ String DARWIN[] = new String[] {"Central standardtid (Nordterritoriet)", "ACST",
|
||
+ "Central sommartid (Nordterritoriet)", "ACDT"};
|
||
String DUBLIN[] = new String[] {"Greenwichtid", "GMT",
|
||
"Irland, sommartid", "IST"};
|
||
String EAT[] = new String[] {"\u00d6stafrikansk tid", "EAT",
|
||
@@ -103,8 +103,8 @@
|
||
"\u00d6stgr\u00f6nl\u00e4ndsk sommartid", "EGST"};
|
||
String EST[] = new String[] {"Eastern, normaltid", "EST",
|
||
"Eastern, sommartid", "EDT"};
|
||
- String EST_NSW[] = new String[] {"\u00D6stlig standardtid (New South Wales)", "EST",
|
||
- "\u00D6stlig sommartid (New South Wales)", "EST"};
|
||
+ String EST_NSW[] = new String[] {"\u00D6stlig standardtid (New South Wales)", "AEST",
|
||
+ "\u00D6stlig sommartid (New South Wales)", "AEDT"};
|
||
String FET[] = new String[] {"Kaliningradtid", "FET",
|
||
"\u00D6steuropeisk sommartid", "FEST"};
|
||
String GHMT[] = new String[] {"Ghana, normaltid", "GMT",
|
||
@@ -133,10 +133,12 @@
|
||
"Indien, sommartid", "IDT"};
|
||
String JST[] = new String[] {"Japan, normaltid", "JST",
|
||
"Japan, sommartid", "JDT"};
|
||
+ String KRAT[] = new String[] {"Krasnojarsk, normaltid", "KRAT",
|
||
+ "Krasnojarsk, sommartid", "KRAST"};
|
||
String KST[] = new String[] {"Korea, normaltid", "KST",
|
||
"Korea, sommartid", "KDT"};
|
||
String LORD_HOWE[] = new String[] {"Lord Howe, normaltid", "LHST",
|
||
- "Lord Howe, sommartid", "LHST"};
|
||
+ "Lord Howe, sommartid", "LHDT"};
|
||
String MHT[] = new String[] {"Marshall\u00f6arna, normaltid", "MHT",
|
||
"Marshall\u00f6arna, sommartid", "MHST"};
|
||
String MSK[] = new String[] {"Moskva, normaltid", "MSK",
|
||
@@ -165,16 +167,16 @@
|
||
"Stilla havet, sommartid", "PDT"};
|
||
String SAMOA[] = new String[] {"Samoa, normaltid", "SST",
|
||
"Samoa, sommartid", "SDT"};
|
||
+ String IRKT[] = new String[] {"Irkutsk, normaltid", "IRKT",
|
||
+ "Irkutsk, sommartid", "IRKST"};
|
||
String SAST[] = new String[] {"Sydafrika, normaltid", "SAST",
|
||
"Sydafrika, sommartid", "SAST"};
|
||
String SBT[] = new String[] {"Salomon\u00f6arna, normaltid", "SBT",
|
||
"Salomon\u00f6arna, sommartid", "SBST"};
|
||
String SGT[] = new String[] {"Singapore, normaltid", "SGT",
|
||
"Singapore, sommartid", "SGST"};
|
||
- String SLST[] = new String[] {"Greenwichtid", "GMT",
|
||
- "Sierra Leone, sommartid", "SLST"};
|
||
- String TASMANIA[] = new String[] {"\u00D6stlig standardtid (Tasmania)", "EST",
|
||
- "\u00D6stlig sommartid (Tasmanien)", "EST"};
|
||
+ String TASMANIA[] = new String[] {"\u00D6stlig standardtid (Tasmania)", "AEST",
|
||
+ "\u00D6stlig sommartid (Tasmanien)", "AEDT"};
|
||
String TMT[] = new String[] {"Turkmenistan, normaltid", "TMT",
|
||
"Turkmenistan, sommartid", "TMST"};
|
||
String ULAT[]= new String[] {"Ulaanbaatar, normaltid", "ULAT",
|
||
@@ -183,22 +185,22 @@
|
||
"Koordinerad universell tid", "UTC"};
|
||
String UZT[] = new String[] {"Uzbekistan, normaltid", "UZT",
|
||
"Uzbekistan, sommartid", "UZST"};
|
||
- String VICTORIA[] = new String[] {"\u00D6stlig standardtid (Victoria)", "EST",
|
||
- "\u00D6stlig sommartid (Victoria)", "EST"};
|
||
+ String VICTORIA[] = new String[] {"\u00D6stlig standardtid (Victoria)", "AEST",
|
||
+ "\u00D6stlig sommartid (Victoria)", "AEDT"};
|
||
String VLAT[] = new String[] {"Vladivostok, normaltid", "VLAT",
|
||
"Vladivostok, sommartid", "VLAST"};
|
||
- String WART[] = new String[] {"V\u00e4stargentina, normaltid", "WART",
|
||
- "V\u00e4stargentina, sommartid", "WARST"};
|
||
String WAT[] = new String[] {"V\u00e4stafrikansk tid", "WAT",
|
||
"V\u00e4stafrikansk sommartid", "WAST"};
|
||
String WET[] = new String[] {"V\u00e4steuropeisk tid", "WET",
|
||
"V\u00e4steuropeisk sommartid", "WEST"};
|
||
String WIT[] = new String[] {"V\u00e4stindonesisk tid", "WIB",
|
||
"V\u00e4stindonesisk sommartid", "WIST"};
|
||
- String WST_AUS[] = new String[] {"Western Standard Time (Australien)", "WST",
|
||
- "V\u00E4stlig sommartid (Australien)", "WST"};
|
||
- String WST_SAMOA[] = new String[] {"V\u00e4stsamoansk tid", "WST",
|
||
+ String WST_AUS[] = new String[] {"Western Standard Time (Australien)", "AWST",
|
||
+ "V\u00E4stlig sommartid (Australien)", "AWDT"};
|
||
+ String WST_SAMOA[] = new String[] {"V\u00e4stsamoansk tid", "WSST",
|
||
"V\u00e4stsamoansk sommartid", "WSDT"};
|
||
+ String XJT[] = new String[] {"Kina, normaltid", "XJT",
|
||
+ "Kina, sommartid", "XJDT"};
|
||
String YAKT[] = new String[] {"Jakutsk, normaltid", "YAKT",
|
||
"Jakutsk, sommartid", "YAKST"};
|
||
|
||
@@ -262,7 +264,7 @@
|
||
{"Africa/Djibouti", EAT},
|
||
{"Africa/Douala", WAT},
|
||
{"Africa/El_Aaiun", WET},
|
||
- {"Africa/Freetown", SLST},
|
||
+ {"Africa/Freetown", GMT},
|
||
{"Africa/Gaborone", CAT},
|
||
{"Africa/Harare", CAT},
|
||
{"Africa/Johannesburg", SAST},
|
||
@@ -358,7 +360,7 @@
|
||
{"America/Godthab", new String[] {"V\u00e4stra Gr\u00f6nland, normaltid", "WGT",
|
||
"V\u00e4stra Gr\u00f6nland, sommartid", "WGST"}},
|
||
{"America/Goose_Bay", AST},
|
||
- {"America/Grand_Turk", EST},
|
||
+ {"America/Grand_Turk", AST},
|
||
{"America/Grenada", AST},
|
||
{"America/Guadeloupe", AST},
|
||
{"America/Guatemala", CST},
|
||
@@ -401,8 +403,7 @@
|
||
{"America/Mendoza", AGT},
|
||
{"America/Menominee", CST},
|
||
{"America/Merida", CST},
|
||
- {"America/Metlakatla", new String[] {"Metlakatla, normaltid", "MeST",
|
||
- "Metlakatla, sommartid", "MeDT"}},
|
||
+ {"America/Metlakatla", PST},
|
||
{"America/Mexico_City", CST},
|
||
{"America/Miquelon", new String[] {"Saint-Pierre-et-Miquelon, normaltid", "PMST",
|
||
"Saint-Pierre-et-Miquelon, sommartid", "PMDT"}},
|
||
@@ -467,7 +468,7 @@
|
||
{"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville, normaltid", "DDUT",
|
||
"Dumont-d'Urville, sommartid", "DDUST"}},
|
||
{"Antarctica/Macquarie", new String[] {"Macquarie\u00F6n, normaltid", "MIST",
|
||
- "Macquarie\u00F6n, sommartid", "MIST"}},
|
||
+ "Macquarie\u00F6n, sommartid", "MIDT"}},
|
||
{"Antarctica/Mawson", new String[] {"Mawson, normaltid", "MAWT",
|
||
"Mawson, sommartid", "MAWST"}},
|
||
{"Antarctica/McMurdo", NZST},
|
||
@@ -509,6 +510,7 @@
|
||
"Choibalsan, sommartid", "CHOST"}},
|
||
{"Asia/Chongqing", CTT},
|
||
{"Asia/Chungking", CTT},
|
||
+ {"Asia/Chita", IRKT},
|
||
{"Asia/Colombo", IST},
|
||
{"Asia/Dacca", BDT},
|
||
{"Asia/Dhaka", BDT},
|
||
@@ -525,8 +527,7 @@
|
||
{"Asia/Hong_Kong", HKT},
|
||
{"Asia/Hovd", new String[] {"Hovd, normaltid", "HOVT",
|
||
"Hovd, sommartid", "HOVST"}},
|
||
- {"Asia/Irkutsk", new String[] {"Irkutsk, normaltid", "IRKT",
|
||
- "Irkutsk, sommartid", "IRKST"}},
|
||
+ {"Asia/Irkutsk", IRKT},
|
||
{"Asia/Istanbul", EET},
|
||
{"Asia/Jakarta", WIT},
|
||
{"Asia/Jayapura", new String[] {"\u00d6stindonesisk tid", "WIT",
|
||
@@ -536,14 +537,13 @@
|
||
{"Asia/Kamchatka", new String[] {"Petropavlovsk-Kamtjatka, normaltid", "PETT",
|
||
"Petropavlovsk-Kamtjatka, sommartid", "PETST"}},
|
||
{"Asia/Karachi", PKT},
|
||
- {"Asia/Kashgar", CTT},
|
||
+ {"Asia/Kashgar", XJT},
|
||
{"Asia/Kathmandu", NPT},
|
||
{"Asia/Katmandu", NPT},
|
||
{"Asia/Khandyga", new String[] {"Khandyga, normaltid", "YAKT",
|
||
"Khandyga, sommartid", "YAKST"}},
|
||
{"Asia/Kolkata", IST},
|
||
- {"Asia/Krasnoyarsk", new String[] {"Krasnojarsk, normaltid", "KRAT",
|
||
- "Krasnojarsk, sommartid", "KRAST"}},
|
||
+ {"Asia/Krasnoyarsk", KRAT},
|
||
{"Asia/Kuala_Lumpur", MYT},
|
||
{"Asia/Kuching", MYT},
|
||
{"Asia/Kuwait", ARAST},
|
||
@@ -556,7 +556,7 @@
|
||
"Filippinerna, sommartid", "PHST"}},
|
||
{"Asia/Muscat", GST},
|
||
{"Asia/Nicosia", EET},
|
||
- {"Asia/Novokuznetsk", NOVT},
|
||
+ {"Asia/Novokuznetsk", KRAT},
|
||
{"Asia/Novosibirsk", NOVT},
|
||
{"Asia/Oral", new String[] {"Oral, normaltid", "ORAT",
|
||
"Oral, sommartid", "ORAST"}},
|
||
@@ -577,6 +577,8 @@
|
||
{"Asia/Samarkand", UZT},
|
||
{"Asia/Seoul", KST},
|
||
{"Asia/Singapore", SGT},
|
||
+ {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET",
|
||
+ "Srednekolymsk Daylight Time", "SREDT"}},
|
||
{"Asia/Taipei", CTT},
|
||
{"Asia/Tel_Aviv", ISRAEL},
|
||
{"Asia/Tashkent", UZT},
|
||
@@ -588,7 +590,7 @@
|
||
{"Asia/Ujung_Pandang", CIT},
|
||
{"Asia/Ulaanbaatar", ULAT},
|
||
{"Asia/Ulan_Bator", ULAT},
|
||
- {"Asia/Urumqi", CTT},
|
||
+ {"Asia/Urumqi", XJT},
|
||
{"Asia/Ust-Nera", new String[] {"Ust-Nera, normaltid", "VLAT",
|
||
"Ust-Nera, sommartid", "VLAST"}},
|
||
{"Asia/Vientiane", ICT},
|
||
@@ -620,8 +622,8 @@
|
||
{"Australia/Canberra", EST_NSW},
|
||
{"Australia/Currie", EST_NSW},
|
||
{"Australia/Darwin", DARWIN},
|
||
- {"Australia/Eucla", new String[] {"Central v\u00E4stlig normaltid (Australien)", "CWST",
|
||
- "Central v\u00E4stlig sommartid (Australien)", "CWST"}},
|
||
+ {"Australia/Eucla", new String[] {"Central v\u00E4stlig normaltid (Australien)", "ACWST",
|
||
+ "Central v\u00E4stlig sommartid (Australien)", "ACWDT"}},
|
||
{"Australia/Hobart", TASMANIA},
|
||
{"Australia/LHI", LORD_HOWE},
|
||
{"Australia/Lindeman", BRISBANE},
|
||
@@ -687,7 +689,7 @@
|
||
{"Europe/Isle_of_Man", GMTBST},
|
||
{"Europe/Istanbul", EET},
|
||
{"Europe/Jersey", GMTBST},
|
||
- {"Europe/Kaliningrad", FET},
|
||
+ {"Europe/Kaliningrad", EET},
|
||
{"Europe/Kiev", EET},
|
||
{"Europe/Lisbon", WET},
|
||
{"Europe/Ljubljana", CET},
|
||
@@ -696,7 +698,7 @@
|
||
{"Europe/Madrid", CET},
|
||
{"Europe/Malta", CET},
|
||
{"Europe/Mariehamn", EET},
|
||
- {"Europe/Minsk", FET},
|
||
+ {"Europe/Minsk", MSK},
|
||
{"Europe/Monaco", CET},
|
||
{"Europe/Moscow", MSK},
|
||
{"Europe/Nicosia", EET},
|
||
@@ -721,8 +723,7 @@
|
||
{"Europe/Vatican", CET},
|
||
{"Europe/Vienna", CET},
|
||
{"Europe/Vilnius", EET},
|
||
- {"Europe/Volgograd", new String[] {"Volgograd-tid", "VOLT",
|
||
- "Volgograd, sommartid", "VOLST"}},
|
||
+ {"Europe/Volgograd", MSK},
|
||
{"Europe/Warsaw", CET},
|
||
{"Europe/Zagreb", CET},
|
||
{"Europe/Zaporozhye", EET},
|
||
@@ -775,6 +776,8 @@
|
||
{"PRT", AST},
|
||
{"Pacific/Apia", WST_SAMOA},
|
||
{"Pacific/Auckland", NZST},
|
||
+ {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST",
|
||
+ "Bougainville Daylight Time", "BST"}},
|
||
{"Pacific/Chatham", CHAST},
|
||
{"Pacific/Chuuk", CHUT},
|
||
{"Pacific/Easter", EASTER},
|
||
--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -45,8 +45,8 @@
|
||
protected final Object[][] getContents() {
|
||
String ACT[] = new String[] {"Acre \u65f6\u95f4", "ACT",
|
||
"Acre \u590f\u4ee4\u65f6", "ACST"};
|
||
- String ADELAIDE[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A)", "CST",
|
||
- "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A)", "CST"};
|
||
+ String ADELAIDE[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A)", "ACST",
|
||
+ "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A)", "ACDT"};
|
||
String AGT[] = new String[] {"\u963f\u6839\u5ef7\u65f6\u95f4", "ART",
|
||
"\u963f\u6839\u5ef7\u590f\u4ee4\u65f6", "ARST"};
|
||
String AKST[] = new String[] {"\u963f\u62c9\u65af\u52a0\u6807\u51c6\u65f6\u95f4", "AKST",
|
||
@@ -61,10 +61,10 @@
|
||
"\u5927\u897f\u6d0b\u590f\u4ee4\u65f6", "ADT"};
|
||
String BDT[] = new String[] {"\u5b5f\u52a0\u62c9\u65f6\u95f4", "BDT",
|
||
"\u5b5f\u52a0\u62c9\u590f\u4ee4\u65f6", "BDST"};
|
||
- String BRISBANE[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u6606\u58EB\u5170)", "EST",
|
||
- "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u6606\u58EB\u5170)", "EST"};
|
||
- String BROKEN_HILL[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)", "CST",
|
||
- "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)", "CST"};
|
||
+ String BRISBANE[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u6606\u58EB\u5170)", "AEST",
|
||
+ "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u6606\u58EB\u5170)", "AEDT"};
|
||
+ String BROKEN_HILL[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)", "ACST",
|
||
+ "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)", "ACDT"};
|
||
String BRT[] = new String[] {"\u5df4\u897f\u5229\u4e9a\u65f6\u95f4", "BRT",
|
||
"\u5df4\u897f\u5229\u4e9a\u590f\u4ee4\u65f6", "BRST"};
|
||
String BTT[] = new String[] {"\u4e0d\u4e39\u65f6\u95f4", "BTT",
|
||
@@ -89,8 +89,8 @@
|
||
"\u4e2d\u56fd\u590f\u4ee4\u65f6", "CDT"};
|
||
String CUBA[] = new String[] {"\u53e4\u5df4\u6807\u51c6\u65f6\u95f4", "CST",
|
||
"\u53e4\u5df4\u590f\u4ee4\u65f6", "CDT"};
|
||
- String DARWIN[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5317\u9886\u5730)", "CST",
|
||
- "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5317\u9886\u5730)", "CST"};
|
||
+ String DARWIN[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5317\u9886\u5730)", "ACST",
|
||
+ "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5317\u9886\u5730)", "ACDT"};
|
||
String DUBLIN[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u65f6\u95f4", "GMT",
|
||
"\u7231\u5c14\u5170\u590f\u4ee4\u65f6", "IST"};
|
||
String EAT[] = new String[] {"\u4e1c\u975e\u65f6\u95f4", "EAT",
|
||
@@ -103,8 +103,8 @@
|
||
"\u4e1c\u683c\u6797\u5c9b\u590f\u4ee4\u65f6", "EGST"};
|
||
String EST[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4", "EST",
|
||
"\u4e1c\u90e8\u590f\u4ee4\u65f6", "EDT"};
|
||
- String EST_NSW[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)", "EST",
|
||
- "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF)", "EST"};
|
||
+ String EST_NSW[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)", "AEST",
|
||
+ "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF)", "AEDT"};
|
||
String FET[] = new String[] {"\u8FDC\u4E1C\u6B27\u65F6\u95F4", "FET",
|
||
"\u8FDC\u4E1C\u6B27\u590F\u4EE4\u65F6", "FEST"};
|
||
String GHMT[] = new String[] {"\u52a0\u7eb3\u65f6\u95f4", "GMT",
|
||
@@ -133,10 +133,12 @@
|
||
"\u5370\u5ea6\u590f\u4ee4\u65f6", "IDT"};
|
||
String JST[] = new String[] {"\u65e5\u672c\u6807\u51c6\u65f6\u95f4", "JST",
|
||
"\u65e5\u672c\u590f\u4ee4\u65f6", "JDT"};
|
||
+ String KRAT[] = new String[] {"\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u65f6\u95f4", "KRAT",
|
||
+ "\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u590f\u4ee4\u65f6", "KRAST"};
|
||
String KST[] = new String[] {"\u97e9\u56fd\u6807\u51c6\u65f6\u95f4", "KST",
|
||
"\u97e9\u56fd\u590f\u4ee4\u65f6", "KDT"};
|
||
String LORD_HOWE[] = new String[] {"\u8c6a\u516c\u6807\u51c6\u65f6\u95f4", "LHST",
|
||
- "\u8c6a\u516c\u590f\u4ee4\u65f6", "LHST"};
|
||
+ "\u8c6a\u516c\u590f\u4ee4\u65f6", "LHDT"};
|
||
String MHT[] = new String[] {"\u9a6c\u7ecd\u5c14\u7fa4\u5c9b\u65f6\u95f4", "MHT",
|
||
"\u9a6c\u7ecd\u5c14\u7fa4\u5c9b\u590f\u4ee4\u65f6", "MHST"};
|
||
String MSK[] = new String[] {"\u83ab\u65af\u79d1\u6807\u51c6\u65f6\u95f4", "MSK",
|
||
@@ -165,16 +167,16 @@
|
||
"\u592a\u5e73\u6d0b\u590f\u4ee4\u65f6", "PDT"};
|
||
String SAMOA[] = new String[] {"\u8428\u6469\u4e9a\u7fa4\u5c9b\u6807\u51c6\u65f6\u95f4", "SST",
|
||
"\u8428\u6469\u4e9a\u7fa4\u5c9b\u590f\u4ee4\u65f6", "SDT"};
|
||
+ String IRKT[] = new String[] {"\u4f0a\u5c14\u5e93\u6b21\u514b\u65f6\u95f4", "IRKT",
|
||
+ "\u4f0a\u5c14\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "IRKST"};
|
||
String SAST[] = new String[] {"\u5357\u975e\u6807\u51c6\u65f6\u95f4", "SAST",
|
||
"\u5357\u975e\u590f\u4ee4\u65f6", "SAST"};
|
||
String SBT[] = new String[] {"\u6240\u7f57\u95e8\u7fa4\u5c9b\u65f6\u95f4", "SBT",
|
||
"\u6240\u7f57\u95e8\u7fa4\u5c9b\u590f\u4ee4\u65f6", "SBST"};
|
||
String SGT[] = new String[] {"\u65b0\u52a0\u5761\u65f6\u95f4", "SGT",
|
||
"\u65b0\u52a0\u5761\u590f\u4ee4\u65f6", "SGST"};
|
||
- String SLST[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u65f6\u95f4", "GMT",
|
||
- "\u585e\u62c9\u5229\u6602\u590f\u4ee4\u65f6", "SLST"};
|
||
- String TASMANIA[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)", "EST",
|
||
- "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)", "EST"};
|
||
+ String TASMANIA[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)", "AEST",
|
||
+ "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)", "AEDT"};
|
||
String TMT[] = new String[] {"\u571f\u5e93\u66fc\u65f6\u95f4", "TMT",
|
||
"\u571f\u5e93\u66fc\u590f\u4ee4\u65f6", "TMST"};
|
||
String ULAT[]= new String[] {"\u5e93\u4f26\u65f6\u95f4", "ULAT",
|
||
@@ -183,22 +185,22 @@
|
||
"\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC"};
|
||
String UZT[] = new String[] {"\u4e4c\u5179\u522b\u514b\u65af\u5766\u65f6\u95f4", "UZT",
|
||
"\u4e4c\u5179\u522b\u514b\u65af\u5766\u590f\u4ee4\u65f6", "UZST"};
|
||
- String VICTORIA[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u7EF4\u591A\u5229\u4E9A)", "EST",
|
||
- "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u7EF4\u591A\u5229\u4E9A)", "EST"};
|
||
+ String VICTORIA[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u7EF4\u591A\u5229\u4E9A)", "AEST",
|
||
+ "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u7EF4\u591A\u5229\u4E9A)", "AEDT"};
|
||
String VLAT[] = new String[] {"\u6d77\u53c2\u5d34\u65f6\u95f4", "VLAT",
|
||
"\u6d77\u53c2\u5d34\u590f\u4ee4\u65f6", "VLAST"};
|
||
- String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u65f6\u95f4", "WART",
|
||
- "\u897f\u963f\u6839\u5ef7\u590f\u4ee4\u65f6", "WARST"};
|
||
String WAT[] = new String[] {"\u897f\u975e\u65f6\u95f4", "WAT",
|
||
"\u897f\u975e\u590f\u4ee4\u65f6", "WAST"};
|
||
String WET[] = new String[] {"\u897f\u6b27\u65f6\u95f4", "WET",
|
||
"\u897f\u6b27\u590f\u4ee4\u65f6", "WEST"};
|
||
String WIT[] = new String[] {"\u897f\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "WIB",
|
||
"\u897f\u5370\u5ea6\u5c3c\u897f\u4e9a\u590f\u4ee4\u65f6", "WIST"};
|
||
- String WST_AUS[] = new String[] {"\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)", "WST",
|
||
- "\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A)", "WST"};
|
||
- String WST_SAMOA[] = new String[] {"\u897f\u8428\u6469\u4e9a\u65f6\u95f4", "WST",
|
||
+ String WST_AUS[] = new String[] {"\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)", "AWST",
|
||
+ "\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A)", "AWDT"};
|
||
+ String WST_SAMOA[] = new String[] {"\u897f\u8428\u6469\u4e9a\u65f6\u95f4", "WSST",
|
||
"\u897f\u8428\u6469\u4e9a\u590f\u4ee4\u65f6", "WSDT"};
|
||
+ String XJT[] = new String[] {"\u4e2d\u56fd\u6807\u51c6\u65f6\u95f4", "XJT",
|
||
+ "\u4e2d\u56fd\u590f\u4ee4\u65f6", "XJDT"};
|
||
String YAKT[] = new String[] {"\u4e9a\u5e93\u6b21\u514b\u65f6\u95f4", "YAKT",
|
||
"\u4e9a\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "YAKST"};
|
||
|
||
@@ -262,7 +264,7 @@
|
||
{"Africa/Djibouti", EAT},
|
||
{"Africa/Douala", WAT},
|
||
{"Africa/El_Aaiun", WET},
|
||
- {"Africa/Freetown", SLST},
|
||
+ {"Africa/Freetown", GMT},
|
||
{"Africa/Gaborone", CAT},
|
||
{"Africa/Harare", CAT},
|
||
{"Africa/Johannesburg", SAST},
|
||
@@ -358,7 +360,7 @@
|
||
{"America/Godthab", new String[] {"\u897f\u683c\u6797\u5170\u5c9b\u65f6\u95f4", "WGT",
|
||
"\u897f\u683c\u6797\u5170\u5c9b\u590f\u4ee4\u65f6", "WGST"}},
|
||
{"America/Goose_Bay", AST},
|
||
- {"America/Grand_Turk", EST},
|
||
+ {"America/Grand_Turk", AST},
|
||
{"America/Grenada", AST},
|
||
{"America/Guadeloupe", AST},
|
||
{"America/Guatemala", CST},
|
||
@@ -401,8 +403,7 @@
|
||
{"America/Mendoza", AGT},
|
||
{"America/Menominee", CST},
|
||
{"America/Merida", CST},
|
||
- {"America/Metlakatla", new String[] {"\u6885\u7279\u62C9\u5361\u7279\u62C9\u6807\u51C6\u65F6\u95F4", "MeST",
|
||
- "\u6885\u7279\u62C9\u5361\u7279\u62C9\u590F\u4EE4\u65F6", "MeDT"}},
|
||
+ {"America/Metlakatla", PST},
|
||
{"America/Mexico_City", CST},
|
||
{"America/Miquelon", new String[] {"\u76ae\u57c3\u5c14\u5c9b\u53ca\u5bc6\u514b\u9686\u5c9b\u6807\u51c6\u65f6\u95f4", "PMST",
|
||
"\u76ae\u57c3\u5c14\u5c9b\u53ca\u5bc6\u514b\u9686\u5c9b\u590f\u4ee4\u65f6", "PMDT"}},
|
||
@@ -467,7 +468,7 @@
|
||
{"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville \u65f6\u95f4", "DDUT",
|
||
"Dumont-d'Urville \u590f\u4ee4\u65f6", "DDUST"}},
|
||
{"Antarctica/Macquarie", new String[] {"\u9EA6\u5938\u91CC\u5C9B\u65F6\u95F4", "MIST",
|
||
- "\u9EA6\u5938\u91CC\u5C9B\u590F\u4EE4\u65F6", "MIST"}},
|
||
+ "\u9EA6\u5938\u91CC\u5C9B\u590F\u4EE4\u65F6", "MIDT"}},
|
||
{"Antarctica/Mawson", new String[] {"\u83ab\u68ee\u65f6\u95f4", "MAWT",
|
||
"\u83ab\u68ee\u590f\u4ee4\u65f6", "MAWST"}},
|
||
{"Antarctica/McMurdo", NZST},
|
||
@@ -505,6 +506,7 @@
|
||
{"Asia/Brunei", new String[] {"\u6587\u83b1\u65f6\u95f4", "BNT",
|
||
"\u6587\u83b1\u590f\u4ee4\u65f6", "BNST"}},
|
||
{"Asia/Calcutta", IST},
|
||
+ {"Asia/Chita", IRKT},
|
||
{"Asia/Choibalsan", new String[] {"Choibalsan \u65f6\u95f4", "CHOT",
|
||
"Choibalsan \u590f\u4ee4\u65f6", "CHOST"}},
|
||
{"Asia/Chongqing", CTT},
|
||
@@ -525,8 +527,7 @@
|
||
{"Asia/Hong_Kong", HKT},
|
||
{"Asia/Hovd", new String[] {"\u79d1\u5e03\u591a\u65f6\u95f4", "HOVT",
|
||
"\u79d1\u5e03\u591a\u590f\u4ee4\u65f6", "HOVST"}},
|
||
- {"Asia/Irkutsk", new String[] {"\u4f0a\u5c14\u5e93\u6b21\u514b\u65f6\u95f4", "IRKT",
|
||
- "\u4f0a\u5c14\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "IRKST"}},
|
||
+ {"Asia/Irkutsk", IRKT},
|
||
{"Asia/Istanbul", EET},
|
||
{"Asia/Jakarta", WIT},
|
||
{"Asia/Jayapura", new String[] {"\u4e1c\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "WIT",
|
||
@@ -536,14 +537,13 @@
|
||
{"Asia/Kamchatka", new String[] {"\u5f7c\u5f97\u7f57\u5df4\u752b\u6d1b\u592b\u65af\u514b\u65f6\u95f4", "PETT",
|
||
"\u5f7c\u5f97\u7f57\u5df4\u752b\u6d1b\u592b\u65af\u514b\u590f\u4ee4\u65f6", "PETST"}},
|
||
{"Asia/Karachi", PKT},
|
||
- {"Asia/Kashgar", CTT},
|
||
+ {"Asia/Kashgar", XJT},
|
||
{"Asia/Kathmandu", NPT},
|
||
{"Asia/Katmandu", NPT},
|
||
{"Asia/Khandyga", new String[] {"\u6C49\u5FB7\u52A0\u65F6\u95F4", "YAKT",
|
||
"\u6C49\u5FB7\u52A0\u590F\u4EE4\u65F6", "YAKST"}},
|
||
{"Asia/Kolkata", IST},
|
||
- {"Asia/Krasnoyarsk", new String[] {"\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u65f6\u95f4", "KRAT",
|
||
- "\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u590f\u4ee4\u65f6", "KRAST"}},
|
||
+ {"Asia/Krasnoyarsk", KRAT},
|
||
{"Asia/Kuala_Lumpur", MYT},
|
||
{"Asia/Kuching", MYT},
|
||
{"Asia/Kuwait", ARAST},
|
||
@@ -556,7 +556,7 @@
|
||
"\u83f2\u5f8b\u5bbe\u590f\u4ee4\u65f6", "PHST"}},
|
||
{"Asia/Muscat", GST},
|
||
{"Asia/Nicosia", EET},
|
||
- {"Asia/Novokuznetsk", NOVT},
|
||
+ {"Asia/Novokuznetsk", KRAT},
|
||
{"Asia/Novosibirsk", NOVT},
|
||
{"Asia/Oral", new String[] {"Oral \u65f6\u95f4", "ORAT",
|
||
"Oral \u590f\u4ee4\u65f6", "ORAST"}},
|
||
@@ -577,6 +577,8 @@
|
||
{"Asia/Samarkand", UZT},
|
||
{"Asia/Seoul", KST},
|
||
{"Asia/Singapore", SGT},
|
||
+ {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET",
|
||
+ "Srednekolymsk Daylight Time", "SREDT"}},
|
||
{"Asia/Taipei", CTT},
|
||
{"Asia/Tel_Aviv", ISRAEL},
|
||
{"Asia/Tashkent", UZT},
|
||
@@ -588,7 +590,7 @@
|
||
{"Asia/Ujung_Pandang", CIT},
|
||
{"Asia/Ulaanbaatar", ULAT},
|
||
{"Asia/Ulan_Bator", ULAT},
|
||
- {"Asia/Urumqi", CTT},
|
||
+ {"Asia/Urumqi", XJT},
|
||
{"Asia/Ust-Nera", new String[] {"\u4E4C\u65AF\u5B63\u6D85\u62C9\u65F6\u95F4", "VLAT",
|
||
"\u4E4C\u65AF\u5B63\u6D85\u62C9\u590F\u4EE4\u65F6", "VLAST"}},
|
||
{"Asia/Vientiane", ICT},
|
||
@@ -620,8 +622,8 @@
|
||
{"Australia/Canberra", EST_NSW},
|
||
{"Australia/Currie", EST_NSW},
|
||
{"Australia/Darwin", DARWIN},
|
||
- {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)", "CWST",
|
||
- "\u4E2D\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A)", "CWST"}},
|
||
+ {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)", "ACWST",
|
||
+ "\u4E2D\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A)", "ACWDT"}},
|
||
{"Australia/Hobart", TASMANIA},
|
||
{"Australia/LHI", LORD_HOWE},
|
||
{"Australia/Lindeman", BRISBANE},
|
||
@@ -687,7 +689,7 @@
|
||
{"Europe/Isle_of_Man", GMTBST},
|
||
{"Europe/Istanbul", EET},
|
||
{"Europe/Jersey", GMTBST},
|
||
- {"Europe/Kaliningrad", FET},
|
||
+ {"Europe/Kaliningrad", EET},
|
||
{"Europe/Kiev", EET},
|
||
{"Europe/Lisbon", WET},
|
||
{"Europe/Ljubljana", CET},
|
||
@@ -696,7 +698,7 @@
|
||
{"Europe/Madrid", CET},
|
||
{"Europe/Malta", CET},
|
||
{"Europe/Mariehamn", EET},
|
||
- {"Europe/Minsk", FET},
|
||
+ {"Europe/Minsk", MSK},
|
||
{"Europe/Monaco", CET},
|
||
{"Europe/Moscow", MSK},
|
||
{"Europe/Nicosia", EET},
|
||
@@ -721,8 +723,7 @@
|
||
{"Europe/Vatican", CET},
|
||
{"Europe/Vienna", CET},
|
||
{"Europe/Vilnius", EET},
|
||
- {"Europe/Volgograd", new String[] {"\u4f0f\u5c14\u52a0\u683c\u52d2\u65f6\u95f4", "VOLT",
|
||
- "\u4f0f\u5c14\u52a0\u683c\u52d2\u590f\u4ee4\u65f6", "VOLST"}},
|
||
+ {"Europe/Volgograd", MSK},
|
||
{"Europe/Warsaw", CET},
|
||
{"Europe/Zagreb", CET},
|
||
{"Europe/Zaporozhye", EET},
|
||
@@ -775,6 +776,8 @@
|
||
{"PRT", AST},
|
||
{"Pacific/Apia", WST_SAMOA},
|
||
{"Pacific/Auckland", NZST},
|
||
+ {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST",
|
||
+ "Bougainville Daylight Time", "BST"}},
|
||
{"Pacific/Chatham", CHAST},
|
||
{"Pacific/Chuuk", CHUT},
|
||
{"Pacific/Easter", EASTER},
|
||
--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -45,8 +45,8 @@
|
||
protected final Object[][] getContents() {
|
||
String ACT[] = new String[] {"Acre \u6642\u9593", "ACT",
|
||
"Acre \u590f\u4ee4\u6642\u9593", "ACST"};
|
||
- String ADELAIDE[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8)", "CST",
|
||
- "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340)", "CST"};
|
||
+ String ADELAIDE[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8)", "ACST",
|
||
+ "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340)", "ACDT"};
|
||
String AGT[] = new String[] {"\u963f\u6839\u5ef7\u6642\u9593", "ART",
|
||
"\u963f\u6839\u5ef7\u590f\u4ee4\u6642\u9593", "ARST"};
|
||
String AKST[] = new String[] {"\u963f\u62c9\u65af\u52a0\u6a19\u6e96\u6642\u9593", "AKST",
|
||
@@ -61,10 +61,10 @@
|
||
"\u5927\u897f\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "ADT"};
|
||
String BDT[] = new String[] {"\u5b5f\u52a0\u62c9\u6642\u9593", "BDT",
|
||
"\u5b5f\u52a0\u62c9\u590f\u4ee4\u6642\u9593", "BDST"};
|
||
- String BRISBANE[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u6606\u58EB\u862D)", "EST",
|
||
- "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u6606\u58EB\u862D)", "EST"};
|
||
- String BROKEN_HILL[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF)", "CST",
|
||
- "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF)", "CST"};
|
||
+ String BRISBANE[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u6606\u58EB\u862D)", "AEST",
|
||
+ "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u6606\u58EB\u862D)", "AEDT"};
|
||
+ String BROKEN_HILL[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF)", "ACST",
|
||
+ "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF)", "ACDT"};
|
||
String BRT[] = new String[] {"\u5df4\u897f\u5229\u4e9e\u6642\u9593", "BRT",
|
||
"\u5df4\u897f\u5229\u4e9e\u590f\u4ee4\u6642\u9593", "BRST"};
|
||
String BTT[] = new String[] {"\u4e0d\u4e39\u6642\u9593", "BTT",
|
||
@@ -89,8 +89,8 @@
|
||
"\u4e2d\u570b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CDT"};
|
||
String CUBA[] = new String[] {"\u53e4\u5df4\u6a19\u6e96\u6642\u9593", "CST",
|
||
"\u53e4\u5df4\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CDT"};
|
||
- String DARWIN[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340)", "CST",
|
||
- "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340)", "CST"};
|
||
+ String DARWIN[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340)", "ACST",
|
||
+ "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340)", "ACDT"};
|
||
String DUBLIN[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u5e73\u5747\u6642\u9593", "GMT",
|
||
"\u611b\u723e\u862d\u590f\u4ee4\u6642\u9593", "IST"};
|
||
String EAT[] = new String[] {"\u6771\u975e\u6642\u9593", "EAT",
|
||
@@ -103,8 +103,8 @@
|
||
"\u6771\u683c\u6797\u5cf6\u590f\u4ee4\u6642\u9593", "EGST"};
|
||
String EST[] = new String[] {"\u6771\u65b9\u6a19\u6e96\u6642\u9593", "EST",
|
||
"\u6771\u65b9\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "EDT"};
|
||
- String EST_NSW[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)", "EST",
|
||
- "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)", "EST"};
|
||
+ String EST_NSW[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)", "AEST",
|
||
+ "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)", "AEDT"};
|
||
String FET[] = new String[] {"\u6771\u6B50\u5167\u9678\u6642\u9593", "FET",
|
||
"\u6771\u6B50\u5167\u9678\u590F\u4EE4\u6642\u9593", "FEST"};
|
||
String GHMT[] = new String[] {"\u8fe6\u7d0d\u5e73\u5747\u6642\u9593", "GMT",
|
||
@@ -133,10 +133,12 @@
|
||
"\u5370\u5ea6\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "IDT"};
|
||
String JST[] = new String[] {"\u65e5\u672c\u6a19\u6e96\u6642\u9593", "JST",
|
||
"\u65e5\u672c\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "JDT"};
|
||
+ String KRAT[] = new String[] {"\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u6642\u9593", "KRAT",
|
||
+ "\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u590f\u4ee4\u6642\u9593", "KRAST"};
|
||
String KST[] = new String[] {"\u97d3\u570b\u6a19\u6e96\u6642\u9593", "KST",
|
||
"\u97d3\u570b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "KDT"};
|
||
String LORD_HOWE[] = new String[] {"\u8c6a\u52f3\u7235\u5cf6\u6a19\u6e96\u6642\u9593", "LHST",
|
||
- "\u8c6a\u52f3\u7235\u5cf6\u590f\u4ee4\u6642\u9593", "LHST"};
|
||
+ "\u8c6a\u52f3\u7235\u5cf6\u590f\u4ee4\u6642\u9593", "LHDT"};
|
||
String MHT[] = new String[] {"\u99ac\u7d39\u723e\u7fa4\u5cf6\u6642\u9593", "MHT",
|
||
"\u99ac\u7d39\u723e\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "MHST"};
|
||
String MSK[] = new String[] {"\u83ab\u65af\u79d1\u6a19\u6e96\u6642\u9593", "MSK",
|
||
@@ -165,16 +167,16 @@
|
||
"\u592a\u5e73\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PDT"};
|
||
String SAMOA[] = new String[] {"\u85a9\u6469\u4e9e\u6a19\u6e96\u6642\u9593", "SST",
|
||
"\u85a9\u6469\u4e9e\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "SDT"};
|
||
+ String IRKT[] = new String[] {"Irkutsk \u6642\u9593", "IRKT",
|
||
+ "Irkutsk \u590f\u4ee4\u6642\u9593", "IRKST"};
|
||
String SAST[] = new String[] {"\u5357\u975e\u6a19\u6e96\u6642\u9593", "SAST",
|
||
"\u5357\u975e\u590f\u4ee4\u6642\u9593", "SAST"};
|
||
String SBT[] = new String[] {"\u6240\u7f85\u9580\u7fa4\u5cf6\u6642\u9593", "SBT",
|
||
"\u6240\u7f85\u9580\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "SBST"};
|
||
String SGT[] = new String[] {"\u65b0\u52a0\u5761\u6642\u9593", "SGT",
|
||
"\u65b0\u52a0\u5761\u590f\u4ee4\u6642\u9593", "SGST"};
|
||
- String SLST[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u5e73\u5747\u6642\u9593", "GMT",
|
||
- "\u7345\u5b50\u5c71\u590f\u4ee4\u6642\u9593", "SLST"};
|
||
- String TASMANIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6)", "EST",
|
||
- "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6)", "EST"};
|
||
+ String TASMANIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6)", "AEST",
|
||
+ "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6)", "AEDT"};
|
||
String TMT[] = new String[] {"\u571f\u5eab\u66fc\u6642\u9593", "TMT",
|
||
"\u571f\u5eab\u66fc\u590f\u4ee4\u6642\u9593", "TMST"};
|
||
String ULAT[]= new String[] {"\u5eab\u502b\u6642\u9593", "ULAT",
|
||
@@ -183,22 +185,22 @@
|
||
"\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC"};
|
||
String UZT[] = new String[] {"\u70cf\u8332\u5225\u514b\u65af\u5766\u6642\u9593", "UZT",
|
||
"\u70cf\u8332\u5225\u514b\u65af\u5766\u590f\u4ee4\u6642\u9593", "UZST"};
|
||
- String VICTORIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6)", "EST",
|
||
- "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6)", "EST"};
|
||
+ String VICTORIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6)", "AEST",
|
||
+ "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6)", "AEDT"};
|
||
String VLAT[] = new String[] {"\u6d77\u53c3\u5d34\u6642\u9593", "VLAT",
|
||
"\u6d77\u53c3\u5d34\u590f\u4ee4\u6642\u9593", "VLAST"};
|
||
- String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u6642\u9593", "WART",
|
||
- "\u897f\u963f\u6839\u5ef7\u590f\u4ee4\u6642\u9593", "WARST"};
|
||
String WAT[] = new String[] {"\u897f\u975e\u6642\u9593", "WAT",
|
||
"\u897f\u975e\u590f\u4ee4\u6642\u9593", "WAST"};
|
||
String WET[] = new String[] {"\u897f\u6b50\u6642\u9593", "WET",
|
||
"\u897f\u6b50\u590f\u4ee4\u6642\u9593", "WEST"};
|
||
String WIT[] = new String[] {"\u897f\u5370\u5c3c\u6642\u9593", "WIB",
|
||
"\u897f\u5370\u5c3c\u590f\u4ee4\u6642\u9593", "WIST"};
|
||
- String WST_AUS[] = new String[] {"\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "WST",
|
||
- "\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "WST"};
|
||
- String WST_SAMOA[] = new String[] {"\u897f\u85a9\u6469\u4e9e\u6642\u9593", "WST",
|
||
+ String WST_AUS[] = new String[] {"\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "AWST",
|
||
+ "\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "AWDT"};
|
||
+ String WST_SAMOA[] = new String[] {"\u897f\u85a9\u6469\u4e9e\u6642\u9593", "WSST",
|
||
"\u897f\u85a9\u6469\u4e9e\u590f\u4ee4\u6642\u9593", "WSDT"};
|
||
+ String XJT[] = new String[] {"\u4e2d\u570b\u6a19\u6e96\u6642\u9593", "XJT",
|
||
+ "\u4e2d\u570b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "XJDT"};
|
||
String YAKT[] = new String[] {"\u4e9e\u5eab\u6b21\u514b\u6642\u9593", "YAKT",
|
||
"\u4e9e\u5eab\u6b21\u514b\u590f\u4ee4\u6642\u9593", "YAKST"};
|
||
|
||
@@ -262,7 +264,7 @@
|
||
{"Africa/Djibouti", EAT},
|
||
{"Africa/Douala", WAT},
|
||
{"Africa/El_Aaiun", WET},
|
||
- {"Africa/Freetown", SLST},
|
||
+ {"Africa/Freetown", GMT},
|
||
{"Africa/Gaborone", CAT},
|
||
{"Africa/Harare", CAT},
|
||
{"Africa/Johannesburg", SAST},
|
||
@@ -358,7 +360,7 @@
|
||
{"America/Godthab", new String[] {"\u897f\u683c\u6797\u862d\u5cf6\u6642\u9593", "WGT",
|
||
"\u897f\u683c\u6797\u862d\u5cf6\u590f\u4ee4\u6642\u9593", "WGST"}},
|
||
{"America/Goose_Bay", AST},
|
||
- {"America/Grand_Turk", EST},
|
||
+ {"America/Grand_Turk", AST},
|
||
{"America/Grenada", AST},
|
||
{"America/Guadeloupe", AST},
|
||
{"America/Guatemala", CST},
|
||
@@ -401,8 +403,7 @@
|
||
{"America/Mendoza", AGT},
|
||
{"America/Menominee", CST},
|
||
{"America/Merida", CST},
|
||
- {"America/Metlakatla", new String[] {"\u6885\u7279\u62C9\u5361\u7279\u62C9\u6A19\u6E96\u6642\u9593", "MeST",
|
||
- "\u6885\u7279\u62C9\u5361\u7279\u62C9\u65E5\u5149\u7BC0\u7D04\u6642\u9593", "MeDT"}},
|
||
+ {"America/Metlakatla", PST},
|
||
{"America/Mexico_City", CST},
|
||
{"America/Miquelon", new String[] {"\u76ae\u57c3\u723e\u5cf6\u53ca\u5bc6\u514b\u9686\u5cf6\u6a19\u6e96\u6642\u9593", "PMST",
|
||
"\u76ae\u57c3\u723e\u5cf6\u53ca\u5bc6\u514b\u9686\u5cf6\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PMDT"}},
|
||
@@ -467,7 +468,7 @@
|
||
{"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville \u6642\u9593", "DDUT",
|
||
"Dumont-d'Urville \u590f\u4ee4\u6642\u9593", "DDUST"}},
|
||
{"Antarctica/Macquarie", new String[] {"\u9EA5\u5938\u5229\u5CF6\u6642\u9593", "MIST",
|
||
- "\u9EA5\u5938\u5229\u5CF6\u590F\u4EE4\u6642\u9593", "MIST"}},
|
||
+ "\u9EA5\u5938\u5229\u5CF6\u590F\u4EE4\u6642\u9593", "MIDT"}},
|
||
{"Antarctica/Mawson", new String[] {"\u83ab\u68ee\u6642\u9593", "MAWT",
|
||
"\u83ab\u68ee\u590f\u4ee4\u6642\u9593", "MAWST"}},
|
||
{"Antarctica/McMurdo", NZST},
|
||
@@ -505,6 +506,7 @@
|
||
{"Asia/Brunei", new String[] {"\u6c76\u840a\u6642\u9593", "BNT",
|
||
"\u6c76\u840a\u590f\u4ee4\u6642\u9593", "BNST"}},
|
||
{"Asia/Calcutta", IST},
|
||
+ {"Asia/Chita", IRKT},
|
||
{"Asia/Choibalsan", new String[] {"\u5de7\u5df4\u5c71 (Choibalsan) \u6642\u9593", "CHOT",
|
||
"\u5de7\u5df4\u5c71 (Choibalsan) \u590f\u4ee4\u6642\u9593", "CHOST"}},
|
||
{"Asia/Chongqing", CTT},
|
||
@@ -525,8 +527,7 @@
|
||
{"Asia/Hong_Kong", HKT},
|
||
{"Asia/Hovd", new String[] {"\u4faf\u5fb7 (Hovd) \u6642\u9593", "HOVT",
|
||
"\u4faf\u5fb7 (Hovd) \u590f\u4ee4\u6642\u9593", "HOVST"}},
|
||
- {"Asia/Irkutsk", new String[] {"Irkutsk \u6642\u9593", "IRKT",
|
||
- "Irkutsk \u590f\u4ee4\u6642\u9593", "IRKST"}},
|
||
+ {"Asia/Irkutsk", IRKT},
|
||
{"Asia/Istanbul", EET},
|
||
{"Asia/Jakarta", WIT},
|
||
{"Asia/Jayapura", new String[] {"\u6771\u5370\u5ea6\u5c3c\u897f\u4e9e\u6642\u9593", "WIT",
|
||
@@ -536,14 +537,13 @@
|
||
{"Asia/Kamchatka", new String[] {"Petropavlovsk-Kamchatski \u6642\u9593", "PETT",
|
||
"Petropavlovsk-Kamchatski \u590f\u4ee4\u6642\u9593", "PETST"}},
|
||
{"Asia/Karachi", PKT},
|
||
- {"Asia/Kashgar", CTT},
|
||
+ {"Asia/Kashgar", XJT},
|
||
{"Asia/Kathmandu", NPT},
|
||
{"Asia/Katmandu", NPT},
|
||
{"Asia/Khandyga", new String[] {"\u6F22\u5730\u52A0 (Khandyga) \u6642\u9593", "YAKT",
|
||
"\u6F22\u5730\u52A0 (Khandyga) \u590F\u4EE4\u6642\u9593", "YAKST"}},
|
||
{"Asia/Kolkata", IST},
|
||
- {"Asia/Krasnoyarsk", new String[] {"\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u6642\u9593", "KRAT",
|
||
- "\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u590f\u4ee4\u6642\u9593", "KRAST"}},
|
||
+ {"Asia/Krasnoyarsk", KRAT},
|
||
{"Asia/Kuala_Lumpur", MYT},
|
||
{"Asia/Kuching", MYT},
|
||
{"Asia/Kuwait", ARAST},
|
||
@@ -556,7 +556,7 @@
|
||
"\u83f2\u5f8b\u8cd3\u590f\u4ee4\u6642\u9593", "PHST"}},
|
||
{"Asia/Muscat", GST},
|
||
{"Asia/Nicosia", EET},
|
||
- {"Asia/Novokuznetsk", NOVT},
|
||
+ {"Asia/Novokuznetsk", KRAT},
|
||
{"Asia/Novosibirsk", NOVT},
|
||
{"Asia/Oral", new String[] {"\u6b50\u4f5b\u6642\u9593", "ORAT",
|
||
"\u6b50\u4f5b\u590f\u4ee4\u6642\u9593", "ORAST"}},
|
||
@@ -577,6 +577,8 @@
|
||
{"Asia/Samarkand", UZT},
|
||
{"Asia/Seoul", KST},
|
||
{"Asia/Singapore", SGT},
|
||
+ {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET",
|
||
+ "Srednekolymsk Daylight Time", "SREDT"}},
|
||
{"Asia/Taipei", new String[] {"\u53f0\u7063\u6a19\u6e96\u6642\u9593", "TST",
|
||
"\u53f0\u7063\u590f\u4ee4\u6642\u9593", "TDT"}},
|
||
{"Asia/Tel_Aviv", ISRAEL},
|
||
@@ -589,7 +591,7 @@
|
||
{"Asia/Ujung_Pandang", CIT},
|
||
{"Asia/Ulaanbaatar", ULAT},
|
||
{"Asia/Ulan_Bator", ULAT},
|
||
- {"Asia/Urumqi", CTT},
|
||
+ {"Asia/Urumqi", XJT},
|
||
{"Asia/Ust-Nera", new String[] {"\u70CF\u65AF\u5167\u62C9 (Ust-Nera) \u6642\u9593", "VLAT",
|
||
"\u70CF\u65AF\u5167\u62C9 (Ust-Nera) \u590F\u4EE4\u6642\u9593", "VLAST"}},
|
||
{"Asia/Vientiane", ICT},
|
||
@@ -621,8 +623,8 @@
|
||
{"Australia/Canberra", EST_NSW},
|
||
{"Australia/Currie", EST_NSW},
|
||
{"Australia/Darwin", DARWIN},
|
||
- {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "CWST",
|
||
- "\u4E2D\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "CWST"}},
|
||
+ {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "ACWST",
|
||
+ "\u4E2D\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "ACWDT"}},
|
||
{"Australia/Hobart", TASMANIA},
|
||
{"Australia/LHI", LORD_HOWE},
|
||
{"Australia/Lindeman", BRISBANE},
|
||
@@ -688,7 +690,7 @@
|
||
{"Europe/Isle_of_Man", GMTBST},
|
||
{"Europe/Istanbul", EET},
|
||
{"Europe/Jersey", GMTBST},
|
||
- {"Europe/Kaliningrad", FET},
|
||
+ {"Europe/Kaliningrad", EET},
|
||
{"Europe/Kiev", EET},
|
||
{"Europe/Lisbon", WET},
|
||
{"Europe/Ljubljana", CET},
|
||
@@ -697,7 +699,7 @@
|
||
{"Europe/Madrid", CET},
|
||
{"Europe/Malta", CET},
|
||
{"Europe/Mariehamn", EET},
|
||
- {"Europe/Minsk", FET},
|
||
+ {"Europe/Minsk", MSK},
|
||
{"Europe/Monaco", CET},
|
||
{"Europe/Moscow", MSK},
|
||
{"Europe/Nicosia", EET},
|
||
@@ -722,8 +724,7 @@
|
||
{"Europe/Vatican", CET},
|
||
{"Europe/Vienna", CET},
|
||
{"Europe/Vilnius", EET},
|
||
- {"Europe/Volgograd", new String[] {"\u4f0f\u723e\u52a0\u683c\u52d2\u6642\u9593", "VOLT",
|
||
- "\u4f0f\u723e\u52a0\u683c\u52d2\u590f\u4ee4\u6642\u9593", "VOLST"}},
|
||
+ {"Europe/Volgograd", MSK},
|
||
{"Europe/Warsaw", CET},
|
||
{"Europe/Zagreb", CET},
|
||
{"Europe/Zaporozhye", EET},
|
||
@@ -776,6 +777,8 @@
|
||
{"PRT", AST},
|
||
{"Pacific/Apia", WST_SAMOA},
|
||
{"Pacific/Auckland", NZST},
|
||
+ {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST",
|
||
+ "Bougainville Daylight Time", "BST"}},
|
||
{"Pacific/Chatham", CHAST},
|
||
{"Pacific/Chuuk", CHUT},
|
||
{"Pacific/Easter", EASTER},
|
||
--- ./jdk/src/share/instrument/Reentrancy.c Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/instrument/Reentrancy.c Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -130,6 +130,7 @@
|
||
error = confirmingTLSSet ( jvmtienv,
|
||
thread,
|
||
JPLIS_CURRENTLY_INSIDE_TOKEN);
|
||
+ check_phase_ret_false(error);
|
||
jplis_assert(error == JVMTI_ERROR_NONE);
|
||
if ( error != JVMTI_ERROR_NONE ) {
|
||
result = JNI_FALSE;
|
||
@@ -158,6 +159,7 @@
|
||
error = confirmingTLSSet( jvmtienv,
|
||
thread,
|
||
JPLIS_CURRENTLY_OUTSIDE_TOKEN);
|
||
+ check_phase_ret(error);
|
||
jplis_assert(error == JVMTI_ERROR_NONE);
|
||
|
||
}
|
||
--- ./jdk/src/share/javavm/export/jvm.h Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/javavm/export/jvm.h Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1320,6 +1320,9 @@
|
||
JNIEXPORT jobject JNICALL
|
||
JVM_InitAgentProperties(JNIEnv *env, jobject agent_props);
|
||
|
||
+JNIEXPORT jstring JNICALL
|
||
+JVM_GetTemporaryDirectory(JNIEnv *env);
|
||
+
|
||
/* Generics reflection support.
|
||
*
|
||
* Returns information about the given class's EnclosingMethod
|
||
--- ./jdk/src/share/lib/security/java.security-linux Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/lib/security/java.security-linux Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -412,8 +412,12 @@
|
||
#
|
||
# In some environments, certain algorithms or key lengths may be undesirable
|
||
# when using SSL/TLS. This section describes the mechanism for disabling
|
||
-# algorithms during SSL/TLS security parameters negotiation, including cipher
|
||
-# suites selection, peer authentication and key exchange mechanisms.
|
||
+# algorithms during SSL/TLS security parameters negotiation, including
|
||
+# protocol version negotiation, cipher suites selection, peer authentication
|
||
+# and key exchange mechanisms.
|
||
+#
|
||
+# Disabled algorithms will not be negotiated for SSL/TLS connections, even
|
||
+# if they are enabled explicitly in an application.
|
||
#
|
||
# For PKI-based peer authentication and key exchange mechanisms, this list
|
||
# of disabled algorithms will also be checked during certification path
|
||
@@ -428,4 +432,5 @@
|
||
# It is not guaranteed to be examined and used by other implementations.
|
||
#
|
||
# Example:
|
||
-# jdk.tls.disabledAlgorithms=MD5, SHA1, DSA, RSA keySize < 2048
|
||
+# jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048
|
||
+jdk.tls.disabledAlgorithms=SSLv3
|
||
--- ./jdk/src/share/lib/security/java.security-macosx Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/lib/security/java.security-macosx Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -417,8 +417,12 @@
|
||
#
|
||
# In some environments, certain algorithms or key lengths may be undesirable
|
||
# when using SSL/TLS. This section describes the mechanism for disabling
|
||
-# algorithms during SSL/TLS security parameters negotiation, including cipher
|
||
-# suites selection, peer authentication and key exchange mechanisms.
|
||
+# algorithms during SSL/TLS security parameters negotiation, including
|
||
+# protocol version negotiation, cipher suites selection, peer authentication
|
||
+# and key exchange mechanisms.
|
||
+#
|
||
+# Disabled algorithms will not be negotiated for SSL/TLS connections, even
|
||
+# if they are enabled explicitly in an application.
|
||
#
|
||
# For PKI-based peer authentication and key exchange mechanisms, this list
|
||
# of disabled algorithms will also be checked during certification path
|
||
@@ -433,4 +437,5 @@
|
||
# It is not guaranteed to be examined and used by other implementations.
|
||
#
|
||
# Example:
|
||
-# jdk.tls.disabledAlgorithms=MD5, SHA1, DSA, RSA keySize < 2048
|
||
+# jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048
|
||
+jdk.tls.disabledAlgorithms=SSLv3
|
||
--- ./jdk/src/share/lib/security/java.security-solaris Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/lib/security/java.security-solaris Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -416,8 +416,12 @@
|
||
#
|
||
# In some environments, certain algorithms or key lengths may be undesirable
|
||
# when using SSL/TLS. This section describes the mechanism for disabling
|
||
-# algorithms during SSL/TLS security parameters negotiation, including cipher
|
||
-# suites selection, peer authentication and key exchange mechanisms.
|
||
+# algorithms during SSL/TLS security parameters negotiation, including
|
||
+# protocol version negotiation, cipher suites selection, peer authentication
|
||
+# and key exchange mechanisms.
|
||
+#
|
||
+# Disabled algorithms will not be negotiated for SSL/TLS connections, even
|
||
+# if they are enabled explicitly in an application.
|
||
#
|
||
# For PKI-based peer authentication and key exchange mechanisms, this list
|
||
# of disabled algorithms will also be checked during certification path
|
||
@@ -432,4 +436,5 @@
|
||
# It is not guaranteed to be examined and used by other implementations.
|
||
#
|
||
# Example:
|
||
-# jdk.tls.disabledAlgorithms=MD5, SHA1, DSA, RSA keySize < 2048
|
||
+# jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048
|
||
+jdk.tls.disabledAlgorithms=SSLv3
|
||
--- ./jdk/src/share/lib/security/java.security-windows Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/lib/security/java.security-windows Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -417,8 +417,12 @@
|
||
#
|
||
# In some environments, certain algorithms or key lengths may be undesirable
|
||
# when using SSL/TLS. This section describes the mechanism for disabling
|
||
-# algorithms during SSL/TLS security parameters negotiation, including cipher
|
||
-# suites selection, peer authentication and key exchange mechanisms.
|
||
+# algorithms during SSL/TLS security parameters negotiation, including
|
||
+# protocol version negotiation, cipher suites selection, peer authentication
|
||
+# and key exchange mechanisms.
|
||
+#
|
||
+# Disabled algorithms will not be negotiated for SSL/TLS connections, even
|
||
+# if they are enabled explicitly in an application.
|
||
#
|
||
# For PKI-based peer authentication and key exchange mechanisms, this list
|
||
# of disabled algorithms will also be checked during certification path
|
||
@@ -433,4 +437,5 @@
|
||
# It is not guaranteed to be examined and used by other implementations.
|
||
#
|
||
# Example:
|
||
-# jdk.tls.disabledAlgorithms=MD5, SHA1, DSA, RSA keySize < 2048
|
||
+# jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048
|
||
+jdk.tls.disabledAlgorithms=SSLv3
|
||
--- ./jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -583,6 +583,8 @@
|
||
LEReferenceTo<ChainSubClassRuleTable>
|
||
chainSubClassRuleTable(chainSubClassSetTable, success, chainSubClassRuleTableOffset);
|
||
le_uint16 backtrackGlyphCount = SWAPW(chainSubClassRuleTable->backtrackGlyphCount);
|
||
+ LEReferenceToArrayOf<le_uint16> backtrackClassArray(base, success, chainSubClassRuleTable->backtrackClassArray, backtrackGlyphCount);
|
||
+ if( LE_FAILURE(success) ) { return 0; }
|
||
le_uint16 inputGlyphCount = SWAPW(chainSubClassRuleTable->backtrackClassArray[backtrackGlyphCount]) - 1;
|
||
LEReferenceToArrayOf<le_uint16> inputClassArray(base, success, &chainSubClassRuleTable->backtrackClassArray[backtrackGlyphCount + 1],inputGlyphCount+2); // +2 for the lookaheadGlyphCount count
|
||
le_uint16 lookaheadGlyphCount = SWAPW(inputClassArray.getObject(inputGlyphCount, success));
|
||
@@ -599,8 +601,6 @@
|
||
}
|
||
|
||
tempIterator.prev();
|
||
- LEReferenceToArrayOf<le_uint16> backtrackClassArray(base, success, chainSubClassRuleTable->backtrackClassArray, backtrackGlyphCount);
|
||
- if( LE_FAILURE(success) ) { return 0; }
|
||
if (! matchGlyphClasses(backtrackClassArray, backtrackGlyphCount,
|
||
&tempIterator, backtrackClassDefinitionTable, success, TRUE)) {
|
||
continue;
|
||
--- ./jdk/src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -45,6 +45,9 @@
|
||
le_int32 coverageIndex = getGlyphCoverage(base, glyphID, success);
|
||
le_uint16 eeCount = SWAPW(entryExitCount);
|
||
|
||
+ LEReferenceToArrayOf<EntryExitRecord>
|
||
+ entryExitRecordsArrayRef(base, success, entryExitRecords, coverageIndex);
|
||
+
|
||
if (coverageIndex < 0 || coverageIndex >= eeCount || LE_FAILURE(success)) {
|
||
glyphIterator->setCursiveGlyph();
|
||
return 0;
|
||
--- ./jdk/src/share/native/sun/font/layout/Features.cpp Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/native/sun/font/layout/Features.cpp Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -40,6 +40,9 @@
|
||
|
||
LEReferenceTo<FeatureTable> FeatureListTable::getFeatureTable(const LETableReference &base, le_uint16 featureIndex, LETag *featureTag, LEErrorCode &success) const
|
||
{
|
||
+ LEReferenceToArrayOf<FeatureRecord>
|
||
+ featureRecordArrayRef(base, success, featureRecordArray, featureIndex);
|
||
+
|
||
if (featureIndex >= SWAPW(featureCount) || LE_FAILURE(success)) {
|
||
return LEReferenceTo<FeatureTable>();
|
||
}
|
||
--- ./jdk/src/share/native/sun/font/layout/LETableReference.h Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/native/sun/font/layout/LETableReference.h Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -471,7 +471,12 @@
|
||
#endif
|
||
|
||
const T& getObject(le_uint32 i, LEErrorCode &success) const {
|
||
- return *getAlias(i,success);
|
||
+ const T *ret = getAlias(i, success);
|
||
+ if (LE_FAILURE(success) || ret==NULL) {
|
||
+ return *(new T(0));
|
||
+ } else {
|
||
+ return *ret;
|
||
+ }
|
||
}
|
||
|
||
/**
|
||
--- ./jdk/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -64,6 +64,9 @@
|
||
LEReferenceTo<LigatureTable> ligTable(ligSetTable, success, ligTableOffset);
|
||
if(LE_FAILURE(success)) { return 0; }
|
||
le_uint16 compCount = SWAPW(ligTable->compCount) - 1;
|
||
+ LEReferenceToArrayOf<TTGlyphID>
|
||
+ componentArrayRef(base, success, ligTable->componentArray, compCount);
|
||
+ if (LE_FAILURE(success)) { return 0; }
|
||
le_int32 startPosition = glyphIterator->getCurrStreamPosition();
|
||
TTGlyphID ligGlyph = SWAPW(ligTable->ligGlyph);
|
||
le_uint16 comp;
|
||
--- ./jdk/src/share/native/sun/font/layout/MultipleSubstSubtables.cpp Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/native/sun/font/layout/MultipleSubstSubtables.cpp Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -61,6 +61,8 @@
|
||
|
||
le_int32 coverageIndex = getGlyphCoverage(base, glyph, success);
|
||
le_uint16 seqCount = SWAPW(sequenceCount);
|
||
+ LEReferenceToArrayOf<Offset>
|
||
+ sequenceTableOffsetArrayRef(base, success, sequenceTableOffsetArray, seqCount);
|
||
|
||
if (LE_FAILURE(success)) {
|
||
return 0;
|
||
--- ./jdk/src/share/native/sun/misc/VMSupport.c Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/native/sun/misc/VMSupport.c Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -53,3 +53,9 @@
|
||
}
|
||
return (*InitAgentProperties_fp)(env, props);
|
||
}
|
||
+
|
||
+JNIEXPORT jstring JNICALL
|
||
+Java_sun_misc_VMSupport_getVMTemporaryDirectory(JNIEnv *env, jclass cls)
|
||
+{
|
||
+ return JVM_GetTemporaryDirectory(env);
|
||
+}
|
||
--- ./jdk/src/share/native/sun/security/smartcardio/pcsc.c Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/native/sun/security/smartcardio/pcsc.c Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2005, 2014, 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
|
||
@@ -64,17 +64,32 @@
|
||
|
||
#define J2PCSC_EXCEPTION_NAME "sun/security/smartcardio/PCSCException"
|
||
|
||
+void throwOutOfMemoryError(JNIEnv *env, const char *msg) {
|
||
+ jclass cls = (*env)->FindClass(env, "java/lang/OutOfMemoryError");
|
||
+
|
||
+ if (cls != NULL) /* Otherwise an exception has already been thrown */
|
||
+ (*env)->ThrowNew(env, cls, msg);
|
||
+
|
||
+}
|
||
+
|
||
void throwPCSCException(JNIEnv* env, LONG code) {
|
||
jclass pcscClass;
|
||
jmethodID constructor;
|
||
jthrowable pcscException;
|
||
|
||
pcscClass = (*env)->FindClass(env, J2PCSC_EXCEPTION_NAME);
|
||
- assert(pcscClass != NULL);
|
||
+ if (pcscClass == NULL) {
|
||
+ return;
|
||
+ }
|
||
constructor = (*env)->GetMethodID(env, pcscClass, "<init>", "(I)V");
|
||
- assert(constructor != NULL);
|
||
- pcscException = (jthrowable) (*env)->NewObject(env, pcscClass, constructor, (jint)code);
|
||
- (*env)->Throw(env, pcscException);
|
||
+ if (constructor == NULL) {
|
||
+ return;
|
||
+ }
|
||
+ pcscException = (jthrowable) (*env)->NewObject(env, pcscClass,
|
||
+ constructor, (jint)code);
|
||
+ if (pcscException != NULL) {
|
||
+ (*env)->Throw(env, pcscException);
|
||
+ }
|
||
}
|
||
|
||
jboolean handleRV(JNIEnv* env, LONG code) {
|
||
@@ -93,7 +108,7 @@
|
||
JNIEXPORT jlong JNICALL Java_sun_security_smartcardio_PCSC_SCardEstablishContext
|
||
(JNIEnv *env, jclass thisClass, jint dwScope)
|
||
{
|
||
- SCARDCONTEXT context;
|
||
+ SCARDCONTEXT context = 0;
|
||
LONG rv;
|
||
dprintf("-establishContext\n");
|
||
rv = CALL_SCardEstablishContext(dwScope, NULL, NULL, &context);
|
||
@@ -110,7 +125,7 @@
|
||
jobjectArray pcsc_multi2jstring(JNIEnv *env, char *spec) {
|
||
jobjectArray result;
|
||
jclass stringClass;
|
||
- char *cp, **tab;
|
||
+ char *cp, **tab = NULL;
|
||
jstring js;
|
||
int cnt = 0;
|
||
|
||
@@ -121,6 +136,10 @@
|
||
}
|
||
|
||
tab = (char **)malloc(cnt * sizeof(char *));
|
||
+ if (tab == NULL) {
|
||
+ throwOutOfMemoryError(env, NULL);
|
||
+ return NULL;
|
||
+ }
|
||
|
||
cnt = 0;
|
||
cp = spec;
|
||
@@ -130,12 +149,26 @@
|
||
}
|
||
|
||
stringClass = (*env)->FindClass(env, "java/lang/String");
|
||
- assert(stringClass != NULL);
|
||
+ if (stringClass == NULL) {
|
||
+ free(tab);
|
||
+ return NULL;
|
||
+ }
|
||
|
||
result = (*env)->NewObjectArray(env, cnt, stringClass, NULL);
|
||
- while (cnt-- > 0) {
|
||
- js = (*env)->NewStringUTF(env, tab[cnt]);
|
||
- (*env)->SetObjectArrayElement(env, result, cnt, js);
|
||
+ if (result != NULL) {
|
||
+ while (cnt-- > 0) {
|
||
+ js = (*env)->NewStringUTF(env, tab[cnt]);
|
||
+ if ((*env)->ExceptionCheck(env)) {
|
||
+ free(tab);
|
||
+ return NULL;
|
||
+ }
|
||
+ (*env)->SetObjectArrayElement(env, result, cnt, js);
|
||
+ if ((*env)->ExceptionCheck(env)) {
|
||
+ free(tab);
|
||
+ return NULL;
|
||
+ }
|
||
+ (*env)->DeleteLocalRef(env, js);
|
||
+ }
|
||
}
|
||
free(tab);
|
||
return result;
|
||
@@ -146,8 +179,8 @@
|
||
{
|
||
SCARDCONTEXT context = (SCARDCONTEXT)jContext;
|
||
LONG rv;
|
||
- LPTSTR mszReaders;
|
||
- DWORD size;
|
||
+ LPTSTR mszReaders = NULL;
|
||
+ DWORD size = 0;
|
||
jobjectArray result;
|
||
|
||
dprintf1("-context: %x\n", context);
|
||
@@ -157,13 +190,20 @@
|
||
}
|
||
dprintf1("-size: %d\n", size);
|
||
|
||
- mszReaders = malloc(size);
|
||
- rv = CALL_SCardListReaders(context, NULL, mszReaders, &size);
|
||
- if (handleRV(env, rv)) {
|
||
- free(mszReaders);
|
||
- return NULL;
|
||
+ if (size) {
|
||
+ mszReaders = malloc(size);
|
||
+ if (mszReaders == NULL) {
|
||
+ throwOutOfMemoryError(env, NULL);
|
||
+ return NULL;
|
||
+ }
|
||
+
|
||
+ rv = CALL_SCardListReaders(context, NULL, mszReaders, &size);
|
||
+ if (handleRV(env, rv)) {
|
||
+ free(mszReaders);
|
||
+ return NULL;
|
||
+ }
|
||
+ dprintf1("-String: %s\n", mszReaders);
|
||
}
|
||
- dprintf1("-String: %s\n", mszReaders);
|
||
|
||
result = pcsc_multi2jstring(env, mszReaders);
|
||
free(mszReaders);
|
||
@@ -177,10 +217,13 @@
|
||
SCARDCONTEXT context = (SCARDCONTEXT)jContext;
|
||
LONG rv;
|
||
LPCTSTR readerName;
|
||
- SCARDHANDLE card;
|
||
- DWORD proto;
|
||
+ SCARDHANDLE card = 0;
|
||
+ DWORD proto = 0;
|
||
|
||
readerName = (*env)->GetStringUTFChars(env, jReaderName, NULL);
|
||
+ if (readerName == NULL) {
|
||
+ return 0;
|
||
+ }
|
||
rv = CALL_SCardConnect(context, readerName, jShareMode, jPreferredProtocols, &card, &proto);
|
||
(*env)->ReleaseStringUTFChars(env, jReaderName, readerName);
|
||
dprintf1("-cardhandle: %x\n", card);
|
||
@@ -210,6 +253,9 @@
|
||
sendPci.cbPciLength = sizeof(SCARD_IO_REQUEST);
|
||
|
||
sbuf = (unsigned char *) ((*env)->GetByteArrayElements(env, jBuf, NULL));
|
||
+ if (sbuf == NULL) {
|
||
+ return NULL;
|
||
+ }
|
||
rv = CALL_SCardTransmit(card, &sendPci, sbuf + ofs, len, NULL, rbuf, &rlen);
|
||
(*env)->ReleaseByteArrayElements(env, jBuf, (jbyte *)sbuf, JNI_ABORT);
|
||
|
||
@@ -218,7 +264,12 @@
|
||
}
|
||
|
||
jOut = (*env)->NewByteArray(env, rlen);
|
||
- (*env)->SetByteArrayRegion(env, jOut, 0, rlen, (jbyte *)rbuf);
|
||
+ if (jOut != NULL) {
|
||
+ (*env)->SetByteArrayRegion(env, jOut, 0, rlen, (jbyte *)rbuf);
|
||
+ if ((*env)->ExceptionCheck(env)) {
|
||
+ return NULL;
|
||
+ }
|
||
+ }
|
||
return jOut;
|
||
}
|
||
|
||
@@ -231,10 +282,10 @@
|
||
DWORD readerLen = READERNAME_BUFFER_SIZE;
|
||
unsigned char atr[ATR_BUFFER_SIZE];
|
||
DWORD atrLen = ATR_BUFFER_SIZE;
|
||
- DWORD state;
|
||
- DWORD protocol;
|
||
+ DWORD state = 0;
|
||
+ DWORD protocol = 0;
|
||
jbyteArray jArray;
|
||
- jbyte tmp;
|
||
+ jbyte status[2];
|
||
|
||
rv = CALL_SCardStatus(card, readerName, &readerLen, &state, &protocol, atr, &atrLen);
|
||
if (handleRV(env, rv)) {
|
||
@@ -245,13 +296,19 @@
|
||
dprintf1("-protocol: %d\n", protocol);
|
||
|
||
jArray = (*env)->NewByteArray(env, atrLen);
|
||
+ if (jArray == NULL) {
|
||
+ return NULL;
|
||
+ }
|
||
(*env)->SetByteArrayRegion(env, jArray, 0, atrLen, (jbyte *)atr);
|
||
-
|
||
- tmp = (jbyte)state;
|
||
- (*env)->SetByteArrayRegion(env, jStatus, 0, 1, &tmp);
|
||
- tmp = (jbyte)protocol;
|
||
- (*env)->SetByteArrayRegion(env, jStatus, 1, 1, &tmp);
|
||
-
|
||
+ if ((*env)->ExceptionCheck(env)) {
|
||
+ return NULL;
|
||
+ }
|
||
+ status[0] = (jbyte) state;
|
||
+ status[1] = (jbyte) protocol;
|
||
+ (*env)->SetByteArrayRegion(env, jStatus, 0, 2, status);
|
||
+ if ((*env)->ExceptionCheck(env)) {
|
||
+ return NULL;
|
||
+ }
|
||
return jArray;
|
||
}
|
||
|
||
@@ -274,36 +331,78 @@
|
||
SCARDCONTEXT context = (SCARDCONTEXT)jContext;
|
||
LONG rv;
|
||
int readers = (*env)->GetArrayLength(env, jReaderNames);
|
||
- SCARD_READERSTATE *readerState = malloc(readers * sizeof(SCARD_READERSTATE));
|
||
+ SCARD_READERSTATE *readerState;
|
||
int i;
|
||
- jintArray jEventState;
|
||
- int *currentState = (*env)->GetIntArrayElements(env, jCurrentState, NULL);
|
||
+ jintArray jEventState = NULL;
|
||
+ int *currentState = NULL;
|
||
+ const char *readerName;
|
||
+
|
||
+ readerState = calloc(readers, sizeof(SCARD_READERSTATE));
|
||
+ if (readerState == NULL && readers > 0) {
|
||
+ throwOutOfMemoryError(env, NULL);
|
||
+ return NULL;
|
||
+ }
|
||
+
|
||
+ currentState = (*env)->GetIntArrayElements(env, jCurrentState, NULL);
|
||
+ if (currentState == NULL) {
|
||
+ free(readerState);
|
||
+ return NULL;
|
||
+ }
|
||
+
|
||
+ for (i = 0; i < readers; i++) {
|
||
+ readerState[i].szReader = NULL;
|
||
+ }
|
||
|
||
for (i = 0; i < readers; i++) {
|
||
jobject jReaderName = (*env)->GetObjectArrayElement(env, jReaderNames, i);
|
||
- readerState[i].szReader = (*env)->GetStringUTFChars(env, jReaderName, NULL);
|
||
+ if ((*env)->ExceptionCheck(env)) {
|
||
+ goto cleanup;
|
||
+ }
|
||
+ readerName = (*env)->GetStringUTFChars(env, jReaderName, NULL);
|
||
+ if (readerName == NULL) {
|
||
+ goto cleanup;
|
||
+ }
|
||
+ readerState[i].szReader = strdup(readerName);
|
||
+ (*env)->ReleaseStringUTFChars(env, jReaderName, readerName);
|
||
+ if (readerState[i].szReader == NULL) {
|
||
+ throwOutOfMemoryError(env, NULL);
|
||
+ goto cleanup;
|
||
+ }
|
||
readerState[i].pvUserData = NULL;
|
||
readerState[i].dwCurrentState = currentState[i];
|
||
readerState[i].dwEventState = SCARD_STATE_UNAWARE;
|
||
readerState[i].cbAtr = 0;
|
||
+ (*env)->DeleteLocalRef(env, jReaderName);
|
||
}
|
||
- (*env)->ReleaseIntArrayElements(env, jCurrentState, currentState, JNI_ABORT);
|
||
|
||
- rv = CALL_SCardGetStatusChange(context, (DWORD)jTimeout, readerState, readers);
|
||
+ if (readers > 0) {
|
||
+ rv = CALL_SCardGetStatusChange(context, (DWORD)jTimeout, readerState, readers);
|
||
+ if (handleRV(env, rv)) {
|
||
+ goto cleanup;
|
||
+ }
|
||
+ }
|
||
|
||
jEventState = (*env)->NewIntArray(env, readers);
|
||
+ if (jEventState == NULL) {
|
||
+ goto cleanup;
|
||
+ }
|
||
for (i = 0; i < readers; i++) {
|
||
jint eventStateTmp;
|
||
- jobject jReaderName = (*env)->GetObjectArrayElement(env, jReaderNames, i);
|
||
dprintf3("-reader status %s: 0x%X, 0x%X\n", readerState[i].szReader,
|
||
readerState[i].dwCurrentState, readerState[i].dwEventState);
|
||
- (*env)->ReleaseStringUTFChars(env, jReaderName, readerState[i].szReader);
|
||
eventStateTmp = (jint)readerState[i].dwEventState;
|
||
(*env)->SetIntArrayRegion(env, jEventState, i, 1, &eventStateTmp);
|
||
+ if ((*env)->ExceptionCheck(env)) {
|
||
+ jEventState = NULL;
|
||
+ goto cleanup;
|
||
+ }
|
||
+ }
|
||
+cleanup:
|
||
+ (*env)->ReleaseIntArrayElements(env, jCurrentState, currentState, JNI_ABORT);
|
||
+ for (i = 0; i < readers; i++) {
|
||
+ free((char *)readerState[i].szReader);
|
||
}
|
||
free(readerState);
|
||
-
|
||
- handleRV(env, rv);
|
||
return jEventState;
|
||
}
|
||
|
||
@@ -336,13 +435,18 @@
|
||
{
|
||
SCARDHANDLE card = (SCARDHANDLE)jCard;
|
||
LONG rv;
|
||
- jbyte* sendBuffer = (*env)->GetByteArrayElements(env, jSendBuffer, NULL);
|
||
+ jbyte* sendBuffer;
|
||
jint sendBufferLength = (*env)->GetArrayLength(env, jSendBuffer);
|
||
jbyte receiveBuffer[MAX_STACK_BUFFER_SIZE];
|
||
jint receiveBufferLength = MAX_STACK_BUFFER_SIZE;
|
||
ULONG returnedLength = 0;
|
||
jbyteArray jReceiveBuffer;
|
||
|
||
+ sendBuffer = (*env)->GetByteArrayElements(env, jSendBuffer, NULL);
|
||
+ if (sendBuffer == NULL) {
|
||
+ return NULL;
|
||
+ }
|
||
+
|
||
#ifdef J2PCSC_DEBUG
|
||
{
|
||
int k;
|
||
@@ -375,7 +479,12 @@
|
||
#endif
|
||
|
||
jReceiveBuffer = (*env)->NewByteArray(env, returnedLength);
|
||
+ if (jReceiveBuffer == NULL) {
|
||
+ return NULL;
|
||
+ }
|
||
(*env)->SetByteArrayRegion(env, jReceiveBuffer, 0, returnedLength, receiveBuffer);
|
||
-
|
||
+ if ((*env)->ExceptionCheck(env)) {
|
||
+ return NULL;
|
||
+ }
|
||
return jReceiveBuffer;
|
||
}
|
||
--- ./jdk/src/share/npt/utf.c Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/share/npt/utf.c Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -390,7 +390,7 @@
|
||
|
||
/* ================================================================= */
|
||
|
||
-#if 1 /* Test program */
|
||
+#ifdef COMPILE_WITH_UTF_TEST /* Test program */
|
||
|
||
/*
|
||
* Convert any byte array into a printable string.
|
||
--- ./jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -308,47 +308,39 @@
|
||
ProcessPipeInputStream(int fd) {
|
||
super(new FileInputStream(newFileDescriptor(fd)));
|
||
}
|
||
-
|
||
- private InputStream drainInputStream(InputStream in)
|
||
+ private static byte[] drainInputStream(InputStream in)
|
||
throws IOException {
|
||
int n = 0;
|
||
int j;
|
||
byte[] a = null;
|
||
- synchronized (closeLock) {
|
||
- if (buf == null) // asynchronous close()?
|
||
- return null; // discard
|
||
- j = in.available();
|
||
+ while ((j = in.available()) > 0) {
|
||
+ a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j);
|
||
+ n += in.read(a, n, j);
|
||
}
|
||
- while (j > 0) {
|
||
- a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j);
|
||
- synchronized (closeLock) {
|
||
- if (buf == null) // asynchronous close()?
|
||
- return null; // discard
|
||
- n += in.read(a, n, j);
|
||
- j = in.available();
|
||
- }
|
||
- }
|
||
- return (a == null) ?
|
||
- ProcessBuilder.NullInputStream.INSTANCE :
|
||
- new ByteArrayInputStream(n == a.length ? a : Arrays.copyOf(a, n));
|
||
+ return (a == null || n == a.length) ? a : Arrays.copyOf(a, n);
|
||
}
|
||
|
||
/** Called by the process reaper thread when the process exits. */
|
||
synchronized void processExited() {
|
||
- try {
|
||
- InputStream in = this.in;
|
||
- if (in != null) {
|
||
- InputStream stragglers = drainInputStream(in);
|
||
- in.close();
|
||
- this.in = stragglers;
|
||
- }
|
||
- } catch (IOException ignored) { }
|
||
+ synchronized (closeLock) {
|
||
+ try {
|
||
+ InputStream in = this.in;
|
||
+ // this stream is closed if and only if: in == null
|
||
+ if (in != null) {
|
||
+ byte[] stragglers = drainInputStream(in);
|
||
+ in.close();
|
||
+ this.in = (stragglers == null) ?
|
||
+ ProcessBuilder.NullInputStream.INSTANCE :
|
||
+ new ByteArrayInputStream(stragglers);
|
||
+ }
|
||
+ } catch (IOException ignored) {}
|
||
+ }
|
||
}
|
||
|
||
@Override
|
||
public void close() throws IOException {
|
||
// BufferedInputStream#close() is not synchronized unlike most other methods.
|
||
- // Synchronizing helps avoid racing with drainInputStream().
|
||
+ // Synchronizing helps avoid race with processExited().
|
||
synchronized (closeLock) {
|
||
super.close();
|
||
}
|
||
--- ./jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -310,47 +310,39 @@
|
||
ProcessPipeInputStream(int fd) {
|
||
super(new FileInputStream(newFileDescriptor(fd)));
|
||
}
|
||
-
|
||
- private InputStream drainInputStream(InputStream in)
|
||
+ private static byte[] drainInputStream(InputStream in)
|
||
throws IOException {
|
||
int n = 0;
|
||
int j;
|
||
byte[] a = null;
|
||
- synchronized (closeLock) {
|
||
- if (buf == null) // asynchronous close()?
|
||
- return null; // discard
|
||
- j = in.available();
|
||
+ while ((j = in.available()) > 0) {
|
||
+ a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j);
|
||
+ n += in.read(a, n, j);
|
||
}
|
||
- while (j > 0) {
|
||
- a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j);
|
||
- synchronized (closeLock) {
|
||
- if (buf == null) // asynchronous close()?
|
||
- return null; // discard
|
||
- n += in.read(a, n, j);
|
||
- j = in.available();
|
||
- }
|
||
- }
|
||
- return (a == null) ?
|
||
- ProcessBuilder.NullInputStream.INSTANCE :
|
||
- new ByteArrayInputStream(n == a.length ? a : Arrays.copyOf(a, n));
|
||
+ return (a == null || n == a.length) ? a : Arrays.copyOf(a, n);
|
||
}
|
||
|
||
/** Called by the process reaper thread when the process exits. */
|
||
synchronized void processExited() {
|
||
- try {
|
||
- InputStream in = this.in;
|
||
- if (in != null) {
|
||
- InputStream stragglers = drainInputStream(in);
|
||
- in.close();
|
||
- this.in = stragglers;
|
||
- }
|
||
- } catch (IOException ignored) { }
|
||
+ synchronized (closeLock) {
|
||
+ try {
|
||
+ InputStream in = this.in;
|
||
+ // this stream is closed if and only if: in == null
|
||
+ if (in != null) {
|
||
+ byte[] stragglers = drainInputStream(in);
|
||
+ in.close();
|
||
+ this.in = (stragglers == null) ?
|
||
+ ProcessBuilder.NullInputStream.INSTANCE :
|
||
+ new ByteArrayInputStream(stragglers);
|
||
+ }
|
||
+ } catch (IOException ignored) {}
|
||
+ }
|
||
}
|
||
|
||
@Override
|
||
public void close() throws IOException {
|
||
// BufferedInputStream#close() is not synchronized unlike most other methods.
|
||
- // Synchronizing helps avoid racing with drainInputStream().
|
||
+ // Synchronizing helps avoid race with processExited().
|
||
synchronized (closeLock) {
|
||
super.close();
|
||
}
|
||
--- ./jdk/src/solaris/classes/sun/awt/X11/XBaseWindow.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/solaris/classes/sun/awt/X11/XBaseWindow.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1001,6 +1001,13 @@
|
||
switch (xev.get_type()) {
|
||
case XConstants.ButtonPress:
|
||
if (buttonState == 0) {
|
||
+ XWindowPeer parent = getToplevelXWindow();
|
||
+ // See 6385277, 6981400.
|
||
+ if (parent != null && parent.isFocusableWindow()) {
|
||
+ // A click in a client area drops the actual focused window retaining.
|
||
+ parent.setActualFocusedWindow(null);
|
||
+ parent.requestWindowFocus(xbe.get_time(), true);
|
||
+ }
|
||
XAwtState.setAutoGrabWindow(this);
|
||
}
|
||
break;
|
||
--- ./jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -605,33 +605,6 @@
|
||
|
||
}
|
||
|
||
- public void handleButtonPressRelease(XEvent xev) {
|
||
- /*
|
||
- * Fix for 6385277.
|
||
- * We request focus on simple Window by click in order
|
||
- * to make it behave like Frame/Dialog in this case and also to unify
|
||
- * the behaviour with what we have on MS Windows.
|
||
- * handleJavaMouseEvent() would be more suitable place to do this
|
||
- * but we want Swing to have this functionality also.
|
||
- */
|
||
- if (xev.get_type() == XConstants.ButtonPress) {
|
||
- final XWindowPeer parentXWindow = getParentTopLevel();
|
||
- Window parentWindow = (Window)parentXWindow.getTarget();
|
||
- if (parentXWindow.isFocusableWindow() && parentXWindow.isSimpleWindow() &&
|
||
- XKeyboardFocusManagerPeer.getInstance().getCurrentFocusedWindow() != parentWindow)
|
||
- {
|
||
- postEvent(new InvocationEvent(parentWindow, new Runnable() {
|
||
- public void run() {
|
||
- // Request focus on the EDT of 'parentWindow' because
|
||
- // XDecoratedPeer.requestWindowFocus() calls client code.
|
||
- parentXWindow.requestXFocus();
|
||
- }
|
||
- }));
|
||
- }
|
||
- }
|
||
- super.handleButtonPressRelease(xev);
|
||
- }
|
||
-
|
||
public Dimension getMinimumSize() {
|
||
return target.getSize();
|
||
}
|
||
--- ./jdk/src/solaris/classes/sun/awt/X11/XWindow.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/solaris/classes/sun/awt/X11/XWindow.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -455,6 +455,7 @@
|
||
ColorModel cm = getColorModel();
|
||
int pixel = PixelConverter.instance.rgbToPixel(c.getRGB(), cm);
|
||
XlibWrapper.XSetWindowBackground(XToolkit.getDisplay(), getContentWindow(), pixel);
|
||
+ XlibWrapper.XClearWindow(XToolkit.getDisplay(), getContentWindow());
|
||
}
|
||
finally {
|
||
XToolkit.awtUnlock();
|
||
--- ./jdk/src/solaris/classes/sun/awt/windows/ThemeReader.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/solaris/classes/sun/awt/windows/ThemeReader.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2004, 2014, 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
|
||
@@ -41,6 +41,10 @@
|
||
return false;
|
||
}
|
||
|
||
+ public static boolean isXPStyleEnabled() {
|
||
+ return false;
|
||
+ }
|
||
+
|
||
public static void paintBackground(int[] buffer, String widget,
|
||
int part, int state, int x, int y, int w, int h, int stride) {
|
||
}
|
||
--- ./jdk/src/solaris/classes/sun/nio/fs/UnixPath.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/solaris/classes/sun/nio/fs/UnixPath.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -482,7 +482,7 @@
|
||
@Override
|
||
public Path normalize() {
|
||
final int count = getNameCount();
|
||
- if (count == 0)
|
||
+ if (count == 0 || isEmpty())
|
||
return this;
|
||
|
||
boolean[] ignore = new boolean[count]; // true => ignore name
|
||
--- ./jdk/src/solaris/native/java/lang/UNIXProcess_md.c Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/solaris/native/java/lang/UNIXProcess_md.c Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -602,9 +602,9 @@
|
||
*/
|
||
assert(prog != NULL && argBlock != NULL);
|
||
if ((phelperpath = getBytes(env, helperpath)) == NULL) goto Catch;
|
||
- if ((pprog = getBytes(env, prog)) == NULL) goto Catch;
|
||
- if ((pargBlock = getBytes(env, argBlock)) == NULL) goto Catch;
|
||
- if ((c->argv = NEW(const char *, argc + 3)) == NULL) goto Catch;
|
||
+ if ((pprog = getBytes(env, prog)) == NULL) goto Catch;
|
||
+ if ((pargBlock = getBytes(env, argBlock)) == NULL) goto Catch;
|
||
+ if ((c->argv = NEW(const char *, argc + 3)) == NULL) goto Catch;
|
||
c->argv[0] = pprog;
|
||
c->argc = argc + 2;
|
||
initVectorFromBlock(c->argv+1, pargBlock, argc);
|
||
@@ -693,10 +693,11 @@
|
||
closeSafely(childenv[0]);
|
||
closeSafely(childenv[1]);
|
||
|
||
- releaseBytes(env, prog, pprog);
|
||
- releaseBytes(env, argBlock, pargBlock);
|
||
- releaseBytes(env, envBlock, penvBlock);
|
||
- releaseBytes(env, dir, c->pdir);
|
||
+ releaseBytes(env, helperpath, phelperpath);
|
||
+ releaseBytes(env, prog, pprog);
|
||
+ releaseBytes(env, argBlock, pargBlock);
|
||
+ releaseBytes(env, envBlock, penvBlock);
|
||
+ releaseBytes(env, dir, c->pdir);
|
||
|
||
free(c->argv);
|
||
free(c->envv);
|
||
--- ./jdk/src/solaris/native/java/net/NetworkInterface.c Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/solaris/native/java/net/NetworkInterface.c Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2000, 2014, 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
|
||
@@ -530,9 +530,14 @@
|
||
jboolean isCopy;
|
||
int ret = -1;
|
||
int sock;
|
||
- const char* name_utf;
|
||
+ const char* name_utf = NULL;
|
||
|
||
- name_utf = (*env)->GetStringUTFChars(env, name, &isCopy);
|
||
+ if (name != NULL) {
|
||
+ name_utf = (*env)->GetStringUTFChars(env, name, &isCopy);
|
||
+ } else {
|
||
+ JNU_ThrowNullPointerException(env, "network interface name is NULL");
|
||
+ return ret;
|
||
+ }
|
||
|
||
if ((sock =openSocketWithFallback(env, name_utf)) < 0) {
|
||
(*env)->ReleaseStringUTFChars(env, name, name_utf);
|
||
@@ -555,7 +560,12 @@
|
||
const char* name_utf;
|
||
int flags = 0;
|
||
|
||
- name_utf = (*env)->GetStringUTFChars(env, name, &isCopy);
|
||
+ if (name != NULL) {
|
||
+ name_utf = (*env)->GetStringUTFChars(env, name, &isCopy);
|
||
+ } else {
|
||
+ JNU_ThrowNullPointerException(env, "network interface name is NULL");
|
||
+ return -1;
|
||
+ }
|
||
|
||
if ((sock = openSocketWithFallback(env, name_utf)) < 0) {
|
||
(*env)->ReleaseStringUTFChars(env, name, name_utf);
|
||
@@ -1026,6 +1036,7 @@
|
||
*/
|
||
|
||
#ifdef AF_INET6
|
||
+// unused arg ifname and struct if2
|
||
static int openSocketWithFallback(JNIEnv *env, const char *ifname){
|
||
int sock;
|
||
struct ifreq if2;
|
||
@@ -1261,9 +1272,14 @@
|
||
|
||
static int getMTU(JNIEnv *env, int sock, const char *ifname) {
|
||
struct ifreq if2;
|
||
+ memset((char *) &if2, 0, sizeof(if2));
|
||
|
||
- memset((char *) &if2, 0, sizeof(if2));
|
||
- strcpy(if2.ifr_name, ifname);
|
||
+ if (ifname != NULL) {
|
||
+ strcpy(if2.ifr_name, ifname);
|
||
+ } else {
|
||
+ JNU_ThrowNullPointerException(env, "network interface name is NULL");
|
||
+ return -1;
|
||
+ }
|
||
|
||
if (ioctl(sock, SIOCGIFMTU, (char *)&if2) < 0) {
|
||
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFMTU failed");
|
||
--- ./jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1997, 2014, 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
|
||
@@ -1625,10 +1625,12 @@
|
||
static jmethodID ni_ctrID;
|
||
static jfieldID ni_indexID;
|
||
static jfieldID ni_addrsID;
|
||
+ static jfieldID ni_nameID;
|
||
|
||
jobjectArray addrArray;
|
||
jobject addr;
|
||
jobject ni;
|
||
+ jobject ni_name;
|
||
|
||
struct in_addr in;
|
||
struct in_addr *inP = ∈
|
||
@@ -1691,6 +1693,8 @@
|
||
ni_addrsID = (*env)->GetFieldID(env, c, "addrs",
|
||
"[Ljava/net/InetAddress;");
|
||
CHECK_NULL_RETURN(ni_addrsID, NULL);
|
||
+ ni_nameID = (*env)->GetFieldID(env, c,"name", "Ljava/lang/String;");
|
||
+ CHECK_NULL_RETURN(ni_nameID, NULL);
|
||
ni_class = (*env)->NewGlobalRef(env, c);
|
||
CHECK_NULL_RETURN(ni_class, NULL);
|
||
}
|
||
@@ -1712,6 +1716,9 @@
|
||
CHECK_NULL_RETURN(addrArray, NULL);
|
||
(*env)->SetObjectArrayElement(env, addrArray, 0, addr);
|
||
(*env)->SetObjectField(env, ni, ni_addrsID, addrArray);
|
||
+ if (ni_name != NULL) {
|
||
+ (*env)->SetObjectField(env, ni, ni_nameID, ni_name);
|
||
+ }
|
||
return ni;
|
||
}
|
||
|
||
@@ -1728,14 +1735,16 @@
|
||
static jfieldID ni_indexID;
|
||
static jfieldID ni_addrsID;
|
||
static jclass ia_class;
|
||
+ static jfieldID ni_nameID;
|
||
static jmethodID ia_anyLocalAddressID;
|
||
|
||
- int index;
|
||
+ int index = 0;
|
||
int len = sizeof(index);
|
||
|
||
jobjectArray addrArray;
|
||
jobject addr;
|
||
jobject ni;
|
||
+ jobject ni_name;
|
||
|
||
#ifdef __linux__
|
||
/*
|
||
@@ -1775,6 +1784,8 @@
|
||
"anyLocalAddress",
|
||
"()Ljava/net/InetAddress;");
|
||
CHECK_NULL_RETURN(ia_anyLocalAddressID, NULL);
|
||
+ ni_nameID = (*env)->GetFieldID(env, c,"name", "Ljava/lang/String;");
|
||
+ CHECK_NULL_RETURN(ni_nameID, NULL);
|
||
ni_class = (*env)->NewGlobalRef(env, c);
|
||
CHECK_NULL_RETURN(ni_class, NULL);
|
||
}
|
||
@@ -1835,6 +1846,10 @@
|
||
CHECK_NULL_RETURN(addrArray, NULL);
|
||
(*env)->SetObjectArrayElement(env, addrArray, 0, addr);
|
||
(*env)->SetObjectField(env, ni, ni_addrsID, addrArray);
|
||
+ ni_name = (*env)->NewStringUTF(env, "");
|
||
+ if (ni_name != NULL) {
|
||
+ (*env)->SetObjectField(env, ni, ni_nameID, ni_name);
|
||
+ }
|
||
return ni;
|
||
}
|
||
#endif
|
||
--- ./jdk/src/solaris/native/java/util/TimeZone_md.c Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/solaris/native/java/util/TimeZone_md.c Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -172,7 +172,6 @@
|
||
break;
|
||
}
|
||
if ((fd = open(pathname, O_RDONLY)) == -1) {
|
||
- fd = 0;
|
||
break;
|
||
}
|
||
if (read(fd, dbuf, size) != (ssize_t) size) {
|
||
@@ -188,7 +187,7 @@
|
||
free((void *) dbuf);
|
||
dbuf = NULL;
|
||
(void) close(fd);
|
||
- fd = 0;
|
||
+ fd = -1;
|
||
}
|
||
free((void *) pathname);
|
||
pathname = NULL;
|
||
@@ -203,7 +202,7 @@
|
||
if (pathname != NULL) {
|
||
free((void *) pathname);
|
||
}
|
||
- if (fd != 0) {
|
||
+ if (fd != -1) {
|
||
(void) close(fd);
|
||
}
|
||
if (dbuf != NULL) {
|
||
--- ./jdk/src/solaris/native/sun/security/smartcardio/MUSCLE/pcsclite.h Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/solaris/native/sun/security/smartcardio/MUSCLE/pcsclite.h Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -62,6 +62,8 @@
|
||
|
||
#define MAX_ATR_SIZE 33 /* Maximum ATR size */
|
||
|
||
+#ifndef __APPLE__
|
||
+
|
||
typedef struct
|
||
{
|
||
const char *szReader;
|
||
@@ -73,9 +75,6 @@
|
||
}
|
||
SCARD_READERSTATE_A;
|
||
|
||
-typedef SCARD_READERSTATE_A SCARD_READERSTATE, *PSCARD_READERSTATE_A,
|
||
- *LPSCARD_READERSTATE_A;
|
||
-
|
||
typedef struct _SCARD_IO_REQUEST
|
||
{
|
||
unsigned long dwProtocol; /* Protocol identifier */
|
||
@@ -83,6 +82,33 @@
|
||
}
|
||
SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;
|
||
|
||
+#else // __APPLE__
|
||
+
|
||
+#pragma pack(1)
|
||
+typedef struct
|
||
+{
|
||
+ const char *szReader;
|
||
+ void *pvUserData;
|
||
+ uint32_t dwCurrentState;
|
||
+ uint32_t dwEventState;
|
||
+ uint32_t cbAtr;
|
||
+ unsigned char rgbAtr[MAX_ATR_SIZE];
|
||
+}
|
||
+SCARD_READERSTATE_A;
|
||
+
|
||
+typedef struct _SCARD_IO_REQUEST
|
||
+{
|
||
+ uint32_t dwProtocol; /* Protocol identifier */
|
||
+ uint32_t cbPciLength; /* Protocol Control Inf Length */
|
||
+}
|
||
+SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;
|
||
+#pragma pack()
|
||
+
|
||
+#endif // __APPLE__
|
||
+
|
||
+typedef SCARD_READERSTATE_A SCARD_READERSTATE, *PSCARD_READERSTATE_A,
|
||
+ *LPSCARD_READERSTATE_A;
|
||
+
|
||
typedef const SCARD_IO_REQUEST *LPCSCARD_IO_REQUEST;
|
||
|
||
extern SCARD_IO_REQUEST g_rgSCardT0Pci, g_rgSCardT1Pci,
|
||
--- ./jdk/src/solaris/native/sun/security/smartcardio/pcsc_md.c Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/solaris/native/sun/security/smartcardio/pcsc_md.c Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2005, 2014, 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
|
||
@@ -32,8 +32,6 @@
|
||
|
||
#include <winscard.h>
|
||
|
||
-#include <jni_util.h>
|
||
-
|
||
#include "sun_security_smartcardio_PlatformPCSC.h"
|
||
|
||
#include "pcsc_md.h"
|
||
@@ -50,12 +48,40 @@
|
||
FPTR_SCardEndTransaction scardEndTransaction;
|
||
FPTR_SCardControl scardControl;
|
||
|
||
+/*
|
||
+ * Throws a Java Exception by name
|
||
+ */
|
||
+void throwByName(JNIEnv *env, const char *name, const char *msg)
|
||
+{
|
||
+ jclass cls = (*env)->FindClass(env, name);
|
||
+
|
||
+ if (cls != 0) /* Otherwise an exception has already been thrown */
|
||
+ (*env)->ThrowNew(env, cls, msg);
|
||
+}
|
||
+
|
||
+/*
|
||
+ * Throws java.lang.NullPointerException
|
||
+ */
|
||
+void throwNullPointerException(JNIEnv *env, const char *msg)
|
||
+{
|
||
+ throwByName(env, "java/lang/NullPointerException", msg);
|
||
+}
|
||
+
|
||
+/*
|
||
+ * Throws java.io.IOException
|
||
+ */
|
||
+void throwIOException(JNIEnv *env, const char *msg)
|
||
+{
|
||
+ throwByName(env, "java/io/IOException", msg);
|
||
+}
|
||
+
|
||
+
|
||
void *findFunction(JNIEnv *env, void *hModule, char *functionName) {
|
||
void *fAddress = dlsym(hModule, functionName);
|
||
if (fAddress == NULL) {
|
||
char errorMessage[256];
|
||
snprintf(errorMessage, sizeof(errorMessage), "Symbol not found: %s", functionName);
|
||
- JNU_ThrowNullPointerException(env, errorMessage);
|
||
+ throwNullPointerException(env, errorMessage);
|
||
return NULL;
|
||
}
|
||
return fAddress;
|
||
@@ -64,21 +90,56 @@
|
||
JNIEXPORT void JNICALL Java_sun_security_smartcardio_PlatformPCSC_initialize
|
||
(JNIEnv *env, jclass thisClass, jstring jLibName) {
|
||
const char *libName = (*env)->GetStringUTFChars(env, jLibName, NULL);
|
||
+ if (libName == NULL) {
|
||
+ throwNullPointerException(env, "PCSC library name is null");
|
||
+ return;
|
||
+ }
|
||
hModule = dlopen(libName, RTLD_LAZY);
|
||
(*env)->ReleaseStringUTFChars(env, jLibName, libName);
|
||
|
||
if (hModule == NULL) {
|
||
- JNU_ThrowIOException(env, dlerror());
|
||
+ throwIOException(env, dlerror());
|
||
return;
|
||
}
|
||
scardEstablishContext = (FPTR_SCardEstablishContext)findFunction(env, hModule, "SCardEstablishContext");
|
||
+ if ((*env)->ExceptionCheck(env)) {
|
||
+ return;
|
||
+ }
|
||
scardConnect = (FPTR_SCardConnect) findFunction(env, hModule, "SCardConnect");
|
||
+ if ((*env)->ExceptionCheck(env)) {
|
||
+ return;
|
||
+ }
|
||
scardDisconnect = (FPTR_SCardDisconnect) findFunction(env, hModule, "SCardDisconnect");
|
||
+ if ((*env)->ExceptionCheck(env)) {
|
||
+ return;
|
||
+ }
|
||
scardStatus = (FPTR_SCardStatus) findFunction(env, hModule, "SCardStatus");
|
||
+ if ((*env)->ExceptionCheck(env)) {
|
||
+ return;
|
||
+ }
|
||
scardGetStatusChange = (FPTR_SCardGetStatusChange) findFunction(env, hModule, "SCardGetStatusChange");
|
||
+ if ((*env)->ExceptionCheck(env)) {
|
||
+ return;
|
||
+ }
|
||
scardTransmit = (FPTR_SCardTransmit) findFunction(env, hModule, "SCardTransmit");
|
||
+ if ((*env)->ExceptionCheck(env)) {
|
||
+ return;
|
||
+ }
|
||
scardListReaders = (FPTR_SCardListReaders) findFunction(env, hModule, "SCardListReaders");
|
||
+ if ((*env)->ExceptionCheck(env)) {
|
||
+ return;
|
||
+ }
|
||
scardBeginTransaction = (FPTR_SCardBeginTransaction)findFunction(env, hModule, "SCardBeginTransaction");
|
||
+ if ((*env)->ExceptionCheck(env)) {
|
||
+ return;
|
||
+ }
|
||
scardEndTransaction = (FPTR_SCardEndTransaction) findFunction(env, hModule, "SCardEndTransaction");
|
||
+ if ((*env)->ExceptionCheck(env)) {
|
||
+ return;
|
||
+ }
|
||
+#ifndef __APPLE__
|
||
scardControl = (FPTR_SCardControl) findFunction(env, hModule, "SCardControl");
|
||
+#else
|
||
+ scardControl = (FPTR_SCardControl) findFunction(env, hModule, "SCardControl132");
|
||
+#endif // __APPLE__
|
||
}
|
||
--- ./jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -253,7 +253,7 @@
|
||
if (file == null) {
|
||
file = getDesktop();
|
||
}
|
||
- return file;
|
||
+ return checkFile(file);
|
||
} else if (key.equals("roots")) {
|
||
// Should be "History" and "Desktop" ?
|
||
if (roots == null) {
|
||
@@ -264,11 +264,11 @@
|
||
roots = (File[])super.get(key);
|
||
}
|
||
}
|
||
- return roots;
|
||
+ return checkFiles(roots);
|
||
} else if (key.equals("fileChooserComboBoxFolders")) {
|
||
Win32ShellFolder2 desktop = getDesktop();
|
||
|
||
- if (desktop != null) {
|
||
+ if (desktop != null && checkFile(desktop) != null) {
|
||
ArrayList<File> folders = new ArrayList<File>();
|
||
Win32ShellFolder2 drives = getDrives();
|
||
|
||
@@ -279,7 +279,7 @@
|
||
|
||
folders.add(desktop);
|
||
// Add all second level folders
|
||
- File[] secondLevelFolders = desktop.listFiles();
|
||
+ File[] secondLevelFolders = checkFiles(desktop.listFiles());
|
||
Arrays.sort(secondLevelFolders);
|
||
for (File secondLevelFolder : secondLevelFolders) {
|
||
Win32ShellFolder2 folder = (Win32ShellFolder2) secondLevelFolder;
|
||
@@ -287,7 +287,7 @@
|
||
folders.add(folder);
|
||
// Add third level for "My Computer"
|
||
if (folder.equals(drives)) {
|
||
- File[] thirdLevelFolders = folder.listFiles();
|
||
+ File[] thirdLevelFolders = checkFiles(folder.listFiles());
|
||
if (thirdLevelFolders != null && thirdLevelFolders.length > 0) {
|
||
List<File> thirdLevelFoldersList = Arrays.asList(thirdLevelFolders);
|
||
|
||
@@ -297,7 +297,7 @@
|
||
}
|
||
}
|
||
}
|
||
- return folders.toArray(new File[folders.size()]);
|
||
+ return checkFiles(folders);
|
||
} else {
|
||
return super.get(key);
|
||
}
|
||
@@ -334,7 +334,7 @@
|
||
}
|
||
}
|
||
}
|
||
- return folders.toArray(new File[folders.size()]);
|
||
+ return checkFiles(folders);
|
||
} else if (key.startsWith("fileChooserIcon ")) {
|
||
String name = key.substring(key.indexOf(" ") + 1);
|
||
|
||
@@ -380,6 +380,47 @@
|
||
return null;
|
||
}
|
||
|
||
+ private File checkFile(File file) {
|
||
+ SecurityManager sm = System.getSecurityManager();
|
||
+ return (sm == null || file == null) ? file : checkFile(file, sm);
|
||
+ }
|
||
+
|
||
+ private File checkFile(File file, SecurityManager sm) {
|
||
+ try {
|
||
+ sm.checkRead(file.getPath());
|
||
+ return file;
|
||
+ } catch (SecurityException se) {
|
||
+ return null;
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private File[] checkFiles(File[] files) {
|
||
+ SecurityManager sm = System.getSecurityManager();
|
||
+ if (sm == null || files == null || files.length == 0) {
|
||
+ return files;
|
||
+ }
|
||
+ return checkFiles(Arrays.asList(files), sm);
|
||
+ }
|
||
+
|
||
+ private File[] checkFiles(List<File> files) {
|
||
+ SecurityManager sm = System.getSecurityManager();
|
||
+ if (sm == null || files.isEmpty()) {
|
||
+ return files.toArray(new File[files.size()]);
|
||
+ }
|
||
+ return checkFiles(files, sm);
|
||
+ }
|
||
+
|
||
+ private File[] checkFiles(List<File> files, SecurityManager sm) {
|
||
+ List<File> checkedFiles = new ArrayList<File>(files.size());
|
||
+ for (File file: files) {
|
||
+ if(checkFile(file, sm) != null){
|
||
+ checkedFiles.add(file);
|
||
+ }
|
||
+ }
|
||
+
|
||
+ return checkedFiles.toArray(new File[checkedFiles.size()]);
|
||
+ }
|
||
+
|
||
/**
|
||
* Does <code>dir</code> represent a "computer" such as a node on the network, or
|
||
* "My Computer" on the desktop.
|
||
--- ./jdk/src/windows/classes/sun/awt/windows/ThemeReader.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/windows/classes/sun/awt/windows/ThemeReader.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2004, 2014, 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
|
||
@@ -58,6 +58,8 @@
|
||
private static final Lock writeLock = readWriteLock.writeLock();
|
||
private static volatile boolean valid = false;
|
||
|
||
+ static volatile boolean xpStyleEnabled;
|
||
+
|
||
static void flush() {
|
||
// Could be called on Toolkit thread, so do not try to aquire locks
|
||
// to avoid deadlock with theme initialization
|
||
@@ -66,6 +68,10 @@
|
||
|
||
public native static boolean isThemed();
|
||
|
||
+ public static boolean isXPStyleEnabled() {
|
||
+ return xpStyleEnabled;
|
||
+ }
|
||
+
|
||
// this should be called only with writeLock held
|
||
private static Long getThemeImpl(String widget) {
|
||
Long theme = widgetToTheme.get(widget);
|
||
--- ./jdk/src/windows/classes/sun/awt/windows/WToolkit.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/windows/classes/sun/awt/windows/WToolkit.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -36,6 +36,7 @@
|
||
import java.beans.PropertyChangeListener;
|
||
import java.security.AccessController;
|
||
import java.security.PrivilegedAction;
|
||
+import sun.awt.AppContext;
|
||
import sun.awt.AWTAutoShutdown;
|
||
import sun.awt.AppContext;
|
||
import sun.awt.SunToolkit;
|
||
@@ -70,6 +71,9 @@
|
||
|
||
private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.windows.WToolkit");
|
||
|
||
+ // Desktop property which specifies whether XP visual styles are in effect
|
||
+ public static final String XPSTYLE_THEME_ACTIVE = "win.xpstyle.themeActive";
|
||
+
|
||
static GraphicsConfiguration config;
|
||
|
||
// System clipboard.
|
||
@@ -829,7 +833,7 @@
|
||
private synchronized void lazilyInitWProps() {
|
||
if (wprops == null) {
|
||
wprops = new WDesktopProperties(this);
|
||
- updateProperties();
|
||
+ updateProperties(wprops.getProperties());
|
||
}
|
||
}
|
||
|
||
@@ -864,27 +868,41 @@
|
||
* Windows doesn't always send WM_SETTINGCHANGE when it should.
|
||
*/
|
||
private void windowsSettingChange() {
|
||
+ // JDK-8039383: Have to update the value of XPSTYLE_THEME_ACTIVE property
|
||
+ // as soon as possible to prevent NPE and other errors because theme data
|
||
+ // has become unavailable.
|
||
+ final Map<String, Object> props = getWProps();
|
||
+ if (props == null) {
|
||
+ // props has not been initialized, so we have nothing to update
|
||
+ return;
|
||
+ }
|
||
+
|
||
+ updateXPStyleEnabled(props.get(XPSTYLE_THEME_ACTIVE));
|
||
+
|
||
if (AppContext.getAppContext() == null) {
|
||
// We cannot post the update to any EventQueue. Listeners will
|
||
// be called on EDTs by DesktopPropertyChangeSupport
|
||
- updateProperties();
|
||
+ updateProperties(props);
|
||
} else {
|
||
+ // Cannot update on Toolkit thread.
|
||
+ // DesktopPropertyChangeSupport will call listeners on Toolkit
|
||
+ // thread if it has AppContext (standalone mode)
|
||
EventQueue.invokeLater(new Runnable() {
|
||
@Override
|
||
public void run() {
|
||
- updateProperties();
|
||
+ updateProperties(props);
|
||
}
|
||
});
|
||
}
|
||
}
|
||
|
||
- private synchronized void updateProperties() {
|
||
- if (null == wprops) {
|
||
- // wprops has not been initialized, so we have nothing to update
|
||
+ private synchronized void updateProperties(final Map<String, Object> props) {
|
||
+ if (null == props) {
|
||
return;
|
||
}
|
||
|
||
- Map<String, Object> props = wprops.getProperties();
|
||
+ updateXPStyleEnabled(props.get(XPSTYLE_THEME_ACTIVE));
|
||
+
|
||
for (String propName : props.keySet()) {
|
||
Object val = props.get(propName);
|
||
if (log.isLoggable(PlatformLogger.FINER)) {
|
||
@@ -1013,6 +1031,14 @@
|
||
|
||
private native synchronized int getNumberOfButtonsImpl();
|
||
|
||
+ private synchronized Map<String, Object> getWProps() {
|
||
+ return (wprops != null) ? wprops.getProperties() : null;
|
||
+ }
|
||
+
|
||
+ private void updateXPStyleEnabled(final Object dskProp) {
|
||
+ ThemeReader.xpStyleEnabled = Boolean.TRUE.equals(dskProp);
|
||
+ }
|
||
+
|
||
@Override
|
||
public int getNumberOfButtons(){
|
||
if (numberOfButtons == 0) {
|
||
--- ./jdk/src/windows/native/java/net/NetworkInterface.c Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/windows/native/java/net/NetworkInterface.c Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -175,7 +175,7 @@
|
||
int count;
|
||
netif *netifP;
|
||
DWORD i;
|
||
- int lo=0, eth=0, tr=0, fddi=0, ppp=0, sl=0, net=0, wlen=0;
|
||
+ int lo=0, eth=0, tr=0, fddi=0, ppp=0, sl=0, wlan=0, net=0, wlen=0;
|
||
|
||
/*
|
||
* Ask the IP Helper library to enumerate the adapters
|
||
@@ -215,15 +215,15 @@
|
||
*/
|
||
switch (ifrowP->dwType) {
|
||
case MIB_IF_TYPE_ETHERNET:
|
||
- sprintf(dev_name, "eth%d", eth++);
|
||
+ _snprintf_s(dev_name, 8, _TRUNCATE, "eth%d", eth++);
|
||
break;
|
||
|
||
case MIB_IF_TYPE_TOKENRING:
|
||
- sprintf(dev_name, "tr%d", tr++);
|
||
+ _snprintf_s(dev_name, 8, _TRUNCATE, "tr%d", tr++);
|
||
break;
|
||
|
||
case MIB_IF_TYPE_FDDI:
|
||
- sprintf(dev_name, "fddi%d", fddi++);
|
||
+ _snprintf_s(dev_name, 8, _TRUNCATE, "fddi%d", fddi++);
|
||
break;
|
||
|
||
case MIB_IF_TYPE_LOOPBACK:
|
||
@@ -231,20 +231,24 @@
|
||
if (lo > 0) {
|
||
continue;
|
||
}
|
||
- strcpy(dev_name, "lo");
|
||
+ strncpy_s(dev_name, 8, "lo", _TRUNCATE);
|
||
lo++;
|
||
break;
|
||
|
||
case MIB_IF_TYPE_PPP:
|
||
- sprintf(dev_name, "ppp%d", ppp++);
|
||
+ _snprintf_s(dev_name, 8, _TRUNCATE, "ppp%d", ppp++);
|
||
break;
|
||
|
||
case MIB_IF_TYPE_SLIP:
|
||
- sprintf(dev_name, "sl%d", sl++);
|
||
+ _snprintf_s(dev_name, 8, _TRUNCATE, "sl%d", sl++);
|
||
+ break;
|
||
+
|
||
+ case IF_TYPE_IEEE80211:
|
||
+ _snprintf_s(dev_name, 8, _TRUNCATE, "wlan%d", wlan++);
|
||
break;
|
||
|
||
default:
|
||
- sprintf(dev_name, "net%d", net++);
|
||
+ _snprintf_s(dev_name, 8, _TRUNCATE, "net%d", net++);
|
||
}
|
||
|
||
/*
|
||
@@ -409,6 +413,7 @@
|
||
case MIB_IF_TYPE_TOKENRING:
|
||
case MIB_IF_TYPE_FDDI:
|
||
case MIB_IF_TYPE_LOOPBACK:
|
||
+ case IF_TYPE_IEEE80211:
|
||
/**
|
||
* Contrary to what it seems to indicate, dwBCastAddr doesn't
|
||
* contain the broadcast address but 0 or 1 depending on whether
|
||
@@ -856,7 +861,7 @@
|
||
MIB_IFROW *ifRowP;
|
||
ifRowP = getIF(index);
|
||
if (ifRowP != NULL) {
|
||
- ret = ifRowP->dwAdminStatus == 1 &&
|
||
+ ret = ifRowP->dwAdminStatus == MIB_IF_ADMIN_STATUS_UP &&
|
||
(ifRowP->dwOperStatus == MIB_IF_OPER_STATUS_OPERATIONAL ||
|
||
ifRowP->dwOperStatus == MIB_IF_OPER_STATUS_CONNECTED);
|
||
free(ifRowP);
|
||
@@ -949,6 +954,7 @@
|
||
case MIB_IF_TYPE_ETHERNET:
|
||
case MIB_IF_TYPE_TOKENRING:
|
||
case MIB_IF_TYPE_FDDI:
|
||
+ case IF_TYPE_IEEE80211:
|
||
len = ifRowP->dwPhysAddrLen;
|
||
ret = (*env)->NewByteArray(env, len);
|
||
if (!IS_NULL(ret)) {
|
||
--- ./jdk/src/windows/native/java/net/NetworkInterface.h Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/windows/native/java/net/NetworkInterface.h Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -88,4 +88,9 @@
|
||
|
||
int enumInterfaces(JNIEnv *env, netif **netifPP);
|
||
|
||
+// Windows Visa (and later) only.....
|
||
+#ifndef IF_TYPE_IEEE80211
|
||
+#define IF_TYPE_IEEE80211 71
|
||
#endif
|
||
+
|
||
+#endif
|
||
--- ./jdk/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -43,6 +43,7 @@
|
||
#include "java_net_SocketOptions.h"
|
||
#include "java_net_NetworkInterface.h"
|
||
|
||
+#include "NetworkInterface.h"
|
||
#include "jvm.h"
|
||
#include "jni_util.h"
|
||
#include "net_util.h"
|
||
@@ -1638,6 +1639,33 @@
|
||
return (*env)->GetIntField(env, nif, ni_indexID);
|
||
}
|
||
|
||
+static int isAdapterIpv6Enabled(JNIEnv *env, int index) {
|
||
+ netif *ifList, *curr;
|
||
+ int ipv6Enabled = 0;
|
||
+ if (getAllInterfacesAndAddresses (env, &ifList) < 0) {
|
||
+ return ipv6Enabled;
|
||
+ }
|
||
+
|
||
+ /* search by index */
|
||
+ curr = ifList;
|
||
+ while (curr != NULL) {
|
||
+ if (index == curr->index) {
|
||
+ break;
|
||
+ }
|
||
+ curr = curr->next;
|
||
+ }
|
||
+
|
||
+ /* if found ipv6Index != 0 then interface is configured with IPV6 */
|
||
+ if ((curr != NULL) && (curr->ipv6Index !=0)) {
|
||
+ ipv6Enabled = 1;
|
||
+ }
|
||
+
|
||
+ /* release the interface list */
|
||
+ free_netif(ifList);
|
||
+
|
||
+ return ipv6Enabled;
|
||
+}
|
||
+
|
||
/*
|
||
* Sets the multicast interface.
|
||
*
|
||
@@ -1697,7 +1725,6 @@
|
||
struct in_addr in;
|
||
|
||
in.s_addr = htonl(getInetAddress_addr(env, value));
|
||
-
|
||
if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF,
|
||
(const char*)&in, sizeof(in)) < 0) {
|
||
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
|
||
@@ -1728,19 +1755,20 @@
|
||
}
|
||
index = (*env)->GetIntField(env, value, ni_indexID);
|
||
|
||
- if (setsockopt(fd1, IPPROTO_IPV6, IPV6_MULTICAST_IF,
|
||
+ if ( isAdapterIpv6Enabled(env, index) != 0 ) {
|
||
+ if (setsockopt(fd1, IPPROTO_IPV6, IPV6_MULTICAST_IF,
|
||
(const char*)&index, sizeof(index)) < 0) {
|
||
- if (errno == EINVAL && index > 0) {
|
||
- JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
|
||
- "IPV6_MULTICAST_IF failed (interface has IPv4 "
|
||
- "address only?)");
|
||
- } else {
|
||
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
|
||
+ if (errno == EINVAL && index > 0) {
|
||
+ JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
|
||
+ "IPV6_MULTICAST_IF failed (interface has IPv4 "
|
||
+ "address only?)");
|
||
+ } else {
|
||
+ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
|
||
"Error setting socket option");
|
||
+ }
|
||
+ return;
|
||
}
|
||
- return;
|
||
}
|
||
-
|
||
/* If there are any IPv4 addresses on this interface then
|
||
* repeat the operation on the IPv4 fd */
|
||
|
||
@@ -1791,7 +1819,6 @@
|
||
char c;
|
||
} optval;
|
||
int ipv6_supported = ipv6_available();
|
||
-
|
||
fd = getFD(env, this);
|
||
|
||
if (ipv6_supported) {
|
||
@@ -1892,42 +1919,21 @@
|
||
}
|
||
|
||
/*
|
||
- * Return the multicast interface:
|
||
*
|
||
- * SocketOptions.IP_MULTICAST_IF
|
||
- * IPv4: Query IPPROTO_IP/IP_MULTICAST_IF
|
||
- * Create InetAddress
|
||
- * IP_MULTICAST_IF returns struct ip_mreqn on 2.2
|
||
- * kernel but struct in_addr on 2.4 kernel
|
||
- * IPv6: Query IPPROTO_IPV6 / IPV6_MULTICAST_IF or
|
||
- * obtain from impl is Linux 2.2 kernel
|
||
- * If index == 0 return InetAddress representing
|
||
- * anyLocalAddress.
|
||
- * If index > 0 query NetworkInterface by index
|
||
- * and returns addrs[0]
|
||
+ * called by getMulticastInterface to retrieve a NetworkInterface
|
||
+ * configured for IPv4.
|
||
+ * The ipv4Mode parameter, is a closet boolean, which allows for a NULL return,
|
||
+ * or forces the creation of a NetworkInterface object with null data.
|
||
+ * It relates to its calling context in getMulticastInterface.
|
||
+ * ipv4Mode == 1, the context is IPV4 processing only.
|
||
+ * ipv4Mode == 0, the context is IPV6 processing
|
||
*
|
||
- * SocketOptions.IP_MULTICAST_IF2
|
||
- * IPv4: Query IPPROTO_IP/IP_MULTICAST_IF
|
||
- * Query NetworkInterface by IP address and
|
||
- * return the NetworkInterface that the address
|
||
- * is bound too.
|
||
- * IPv6: Query IPPROTO_IPV6 / IPV6_MULTICAST_IF
|
||
- * (except Linux .2 kernel)
|
||
- * Query NetworkInterface by index and
|
||
- * return NetworkInterface.
|
||
*/
|
||
-jobject getMulticastInterface(JNIEnv *env, jobject this, int fd, int fd1, jint opt) {
|
||
- jboolean isIPV4 = !ipv6_available() || fd1 == -1;
|
||
-
|
||
- /*
|
||
- * IPv4 implementation
|
||
- */
|
||
- if (isIPV4) {
|
||
+static jobject getIPv4NetworkInterface (JNIEnv *env, jobject this, int fd, jint opt, int ipv4Mode) {
|
||
static jclass inet4_class;
|
||
static jmethodID inet4_ctrID;
|
||
|
||
- static jclass ni_class;
|
||
- static jmethodID ni_ctrID;
|
||
+ static jclass ni_class; static jmethodID ni_ctrID;
|
||
static jfieldID ni_indexID;
|
||
static jfieldID ni_addrsID;
|
||
|
||
@@ -1938,7 +1944,6 @@
|
||
struct in_addr in;
|
||
struct in_addr *inP = ∈
|
||
int len = sizeof(struct in_addr);
|
||
-
|
||
if (getsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF,
|
||
(char *)inP, &len) < 0) {
|
||
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
|
||
@@ -1990,24 +1995,58 @@
|
||
if (ni) {
|
||
return ni;
|
||
}
|
||
+ if (ipv4Mode) {
|
||
+ ni = (*env)->NewObject(env, ni_class, ni_ctrID, 0);
|
||
+ CHECK_NULL_RETURN(ni, NULL);
|
||
|
||
- /*
|
||
- * The address doesn't appear to be bound at any known
|
||
- * NetworkInterface. Therefore we construct a NetworkInterface
|
||
- * with this address.
|
||
- */
|
||
- ni = (*env)->NewObject(env, ni_class, ni_ctrID, 0);
|
||
- CHECK_NULL_RETURN(ni, NULL);
|
||
+ (*env)->SetIntField(env, ni, ni_indexID, -1);
|
||
+ addrArray = (*env)->NewObjectArray(env, 1, inet4_class, NULL);
|
||
+ CHECK_NULL_RETURN(addrArray, NULL);
|
||
+ (*env)->SetObjectArrayElement(env, addrArray, 0, addr);
|
||
+ (*env)->SetObjectField(env, ni, ni_addrsID, addrArray);
|
||
+ } else {
|
||
+ ni = NULL;
|
||
+ }
|
||
+ return ni;
|
||
+}
|
||
|
||
- (*env)->SetIntField(env, ni, ni_indexID, -1);
|
||
- addrArray = (*env)->NewObjectArray(env, 1, inet4_class, NULL);
|
||
- CHECK_NULL_RETURN(addrArray, NULL);
|
||
- (*env)->SetObjectArrayElement(env, addrArray, 0, addr);
|
||
- (*env)->SetObjectField(env, ni, ni_addrsID, addrArray);
|
||
- return ni;
|
||
+/*
|
||
+ * Return the multicast interface:
|
||
+ *
|
||
+ * SocketOptions.IP_MULTICAST_IF
|
||
+ * IPv4: Query IPPROTO_IP/IP_MULTICAST_IF
|
||
+ * Create InetAddress
|
||
+ * IP_MULTICAST_IF returns struct ip_mreqn on 2.2
|
||
+ * kernel but struct in_addr on 2.4 kernel
|
||
+ * IPv6: Query IPPROTO_IPV6 / IPV6_MULTICAST_IF or
|
||
+ * obtain from impl is Linux 2.2 kernel
|
||
+ * If index == 0 return InetAddress representing
|
||
+ * anyLocalAddress.
|
||
+ * If index > 0 query NetworkInterface by index
|
||
+ * and returns addrs[0]
|
||
+ *
|
||
+ * SocketOptions.IP_MULTICAST_IF2
|
||
+ * IPv4: Query IPPROTO_IP/IP_MULTICAST_IF
|
||
+ * Query NetworkInterface by IP address and
|
||
+ * return the NetworkInterface that the address
|
||
+ * is bound too.
|
||
+ * IPv6: Query IPPROTO_IPV6 / IPV6_MULTICAST_IF
|
||
+ * (except Linux .2 kernel)
|
||
+ * Query NetworkInterface by index and
|
||
+ * return NetworkInterface.
|
||
+ */
|
||
+jobject getMulticastInterface(JNIEnv *env, jobject this, int fd, int fd1, jint opt) {
|
||
+ jboolean isIPV4 = !ipv6_available() || fd1 == -1;
|
||
+
|
||
+ /*
|
||
+ * IPv4 implementation
|
||
+ */
|
||
+ if (isIPV4) {
|
||
+ jobject netObject = NULL; // return is either an addr or a netif
|
||
+ netObject = getIPv4NetworkInterface(env, this, fd, opt, 1);
|
||
+ return netObject;
|
||
}
|
||
|
||
-
|
||
/*
|
||
* IPv6 implementation
|
||
*/
|
||
@@ -2097,6 +2136,13 @@
|
||
|
||
addr = (*env)->GetObjectArrayElement(env, addrArray, 0);
|
||
return addr;
|
||
+ } else if (index == 0) { // index == 0 typically means IPv6 not configured on the interfaces
|
||
+ // falling back to treat interface as configured for IPv4
|
||
+ jobject netObject = NULL;
|
||
+ netObject = getIPv4NetworkInterface(env, this, fd, opt, 0);
|
||
+ if (netObject != NULL) {
|
||
+ return netObject;
|
||
+ }
|
||
}
|
||
|
||
/*
|
||
@@ -2121,6 +2167,8 @@
|
||
}
|
||
return NULL;
|
||
}
|
||
+
|
||
+
|
||
/*
|
||
* Returns relevant info as a jint.
|
||
*
|
||
--- ./jdk/src/windows/native/java/net/TwoStacksPlainSocketImpl.c Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/windows/native/java/net/TwoStacksPlainSocketImpl.c Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -576,6 +576,7 @@
|
||
{
|
||
/* fields on this */
|
||
jint port;
|
||
+ jint scope;
|
||
jint timeout = (*env)->GetIntField(env, this, psi_timeoutID);
|
||
jobject fdObj = (*env)->GetObjectField(env, this, psi_fdID);
|
||
jobject fd1Obj = (*env)->GetObjectField(env, this, psi_fd1ID);
|
||
@@ -751,9 +752,12 @@
|
||
return;
|
||
}
|
||
setInet6Address_ipaddress(env, socketAddressObj, (const char *)&him.him6.sin6_addr);
|
||
-
|
||
setInetAddress_family(env, socketAddressObj, IPv6);
|
||
- setInet6Address_scopeid(env, socketAddressObj, him.him6.sin6_scope_id);
|
||
+ scope = him.him6.sin6_scope_id;
|
||
+ (*env)->SetIntField(env, socketAddressObj, ia6_scopeidID, scope);
|
||
+ if(scope>0) {
|
||
+ (*env)->SetBooleanField(env, socketAddressObj, ia6_scopeidsetID, JNI_TRUE);
|
||
+ }
|
||
}
|
||
/* fields common to AF_INET and AF_INET6 */
|
||
|
||
--- ./jdk/src/windows/native/sun/security/krb5/NativeCreds.c Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/windows/native/sun/security/krb5/NativeCreds.c Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2000, 2014, 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
|
||
@@ -397,7 +397,7 @@
|
||
jobject ticketFlags, startTime, endTime, krbCreds = NULL;
|
||
jobject authTime, renewTillTime, hostAddresses = NULL;
|
||
KERB_EXTERNAL_TICKET *msticket;
|
||
- int found_in_cache = 0;
|
||
+ int found = 0;
|
||
FILETIME Now, EndTime, LocalEndTime;
|
||
|
||
int i, netypes;
|
||
@@ -485,7 +485,7 @@
|
||
if (CompareFileTime(&Now, &LocalEndTime) < 0) {
|
||
for (i=0; i<netypes; i++) {
|
||
if (etypes[i] == msticket->SessionKey.KeyType) {
|
||
- found_in_cache = 1;
|
||
+ found = 1;
|
||
if (native_debug) {
|
||
printf("LSA: Valid etype found: %d\n", etypes[i]);
|
||
}
|
||
@@ -495,7 +495,7 @@
|
||
}
|
||
}
|
||
|
||
- if (!found_in_cache) {
|
||
+ if (!found) {
|
||
if (native_debug) {
|
||
printf("LSA: MS TGT in cache is invalid/not supported; request new ticket\n");
|
||
}
|
||
@@ -538,6 +538,13 @@
|
||
|
||
// got the native MS Kerberos TGT
|
||
msticket = &(pTicketResponse->Ticket);
|
||
+ if (msticket->SessionKey.KeyType != etypes[i]) {
|
||
+ if (native_debug) {
|
||
+ printf("LSA: Response etype is %d for %d. Retry.\n", msticket->SessionKey.KeyType, etypes[i]);
|
||
+ }
|
||
+ continue;
|
||
+ }
|
||
+ found = 1;
|
||
break;
|
||
}
|
||
}
|
||
@@ -590,6 +597,10 @@
|
||
PUCHAR Value;
|
||
} KERB_CRYPTO_KEY, *PKERB_CRYPTO_KEY;
|
||
|
||
+ if (!found) {
|
||
+ break;
|
||
+ }
|
||
+
|
||
*/
|
||
// Build a com.sun.security.krb5.Ticket
|
||
ticket = BuildTicket(env, msticket->EncodedTicket,
|
||
--- ./jdk/src/windows/native/sun/windows/awt_Component.cpp Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/windows/native/sun/windows/awt_Component.cpp Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -491,7 +491,12 @@
|
||
* member is referred in the GetClassName method of AwtLabel class.
|
||
* So m_peerObject member must be set here.
|
||
*/
|
||
- m_peerObject = env->NewGlobalRef(peer);
|
||
+ if (m_peerObject == NULL) {
|
||
+ m_peerObject = env->NewGlobalRef(peer);
|
||
+ } else {
|
||
+ assert(env->IsSameObject(m_peerObject, peer));
|
||
+ }
|
||
+
|
||
RegisterClass();
|
||
|
||
jobject target = env->GetObjectField(peer, AwtObject::targetID);
|
||
@@ -2126,19 +2131,7 @@
|
||
}
|
||
|
||
jlong getMessageTimeUTC() {
|
||
- return windowsToUTC(getMessageTimeWindows());
|
||
- }
|
||
-
|
||
- // If calling order of GetTickCount and JVM_CurrentTimeMillis
|
||
- // is swapped, it would sometimes give different result.
|
||
- // Anyway, we would not always have determinism
|
||
- // and sortedness of time conversion here (due to Windows's
|
||
- // timers peculiarities). Having some euristic algorithm might
|
||
- // help here.
|
||
- jlong windowsToUTC(DWORD windowsTime) {
|
||
- jlong offset = ::GetTickCount() - windowsTime;
|
||
- jlong jvm_time = ::JVM_CurrentTimeMillis(NULL, 0);
|
||
- return jvm_time - offset;
|
||
+ return ::JVM_CurrentTimeMillis(NULL, 0);
|
||
}
|
||
} //TimeHelper
|
||
|
||
@@ -3561,7 +3554,7 @@
|
||
|
||
|
||
SendKeyEventToFocusOwner(java_awt_event_KeyEvent_KEY_PRESSED,
|
||
- TimeHelper::windowsToUTC(msg.time), jkey, character,
|
||
+ TimeHelper::getMessageTimeUTC(), jkey, character,
|
||
modifiers, keyLocation, (jlong)wkey, &msg);
|
||
|
||
// bugid 4724007: Windows does not create a WM_CHAR for the Del key
|
||
@@ -3571,7 +3564,7 @@
|
||
// for Java - we don't want Windows trying to process it).
|
||
if (jkey == java_awt_event_KeyEvent_VK_DELETE) {
|
||
SendKeyEventToFocusOwner(java_awt_event_KeyEvent_KEY_TYPED,
|
||
- TimeHelper::windowsToUTC(msg.time),
|
||
+ TimeHelper::getMessageTimeUTC(),
|
||
java_awt_event_KeyEvent_VK_UNDEFINED,
|
||
character, modifiers,
|
||
java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, (jlong)0);
|
||
@@ -3603,7 +3596,7 @@
|
||
UpdateDynPrimaryKeymap(wkey, jkey, keyLocation, modifiers);
|
||
|
||
SendKeyEventToFocusOwner(java_awt_event_KeyEvent_KEY_RELEASED,
|
||
- TimeHelper::windowsToUTC(msg.time), jkey, character,
|
||
+ TimeHelper::getMessageTimeUTC(), jkey, character,
|
||
modifiers, keyLocation, (jlong)wkey, &msg);
|
||
return mrConsume;
|
||
}
|
||
@@ -3648,7 +3641,7 @@
|
||
|
||
jint modifiers = GetJavaModifiers();
|
||
SendKeyEventToFocusOwner(java_awt_event_KeyEvent_KEY_TYPED,
|
||
- TimeHelper::windowsToUTC(msg.time),
|
||
+ TimeHelper::getMessageTimeUTC(),
|
||
java_awt_event_KeyEvent_VK_UNDEFINED,
|
||
unicodeChar, modifiers,
|
||
java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, (jlong)0,
|
||
@@ -3717,7 +3710,7 @@
|
||
InitMessage(&msg, message, character,
|
||
MAKELPARAM(repCnt, flags));
|
||
SendKeyEventToFocusOwner(java_awt_event_KeyEvent_KEY_TYPED,
|
||
- TimeHelper::windowsToUTC(msg.time),
|
||
+ TimeHelper::getMessageTimeUTC(),
|
||
java_awt_event_KeyEvent_VK_UNDEFINED,
|
||
unicodeChar, modifiers,
|
||
java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, (jlong)0,
|
||
--- ./jdk/src/windows/native/sun/windows/awt_TrayIcon.cpp Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/windows/native/sun/windows/awt_TrayIcon.cpp Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -325,7 +325,7 @@
|
||
|
||
MsgRouting AwtTrayIcon::WmMouseDown(UINT flags, int x, int y, int button)
|
||
{
|
||
- jlong now = TimeHelper::windowsToUTC(::GetTickCount());
|
||
+ jlong now = TimeHelper::getMessageTimeUTC();
|
||
jint javaModif = AwtComponent::GetJavaModifiers();
|
||
|
||
if (lastClickTrIc == this &&
|
||
@@ -361,14 +361,14 @@
|
||
MSG msg;
|
||
AwtComponent::InitMessage(&msg, lastMessage, flags, MAKELPARAM(x, y), x, y);
|
||
|
||
- SendMouseEvent(java_awt_event_MouseEvent_MOUSE_RELEASED, TimeHelper::windowsToUTC(::GetTickCount()),
|
||
+ SendMouseEvent(java_awt_event_MouseEvent_MOUSE_RELEASED, TimeHelper::getMessageTimeUTC(),
|
||
x, y, AwtComponent::GetJavaModifiers(), clickCount,
|
||
(AwtComponent::GetButton(button) == java_awt_event_MouseEvent_BUTTON3 ?
|
||
TRUE : FALSE), AwtComponent::GetButton(button), &msg);
|
||
|
||
if ((m_mouseButtonClickAllowed & AwtComponent::GetButtonMK(button)) != 0) { // No up-button in the drag-state
|
||
SendMouseEvent(java_awt_event_MouseEvent_MOUSE_CLICKED,
|
||
- TimeHelper::windowsToUTC(::GetTickCount()), x, y, AwtComponent::GetJavaModifiers(),
|
||
+ TimeHelper::getMessageTimeUTC(), x, y, AwtComponent::GetJavaModifiers(),
|
||
clickCount, JNI_FALSE, AwtComponent::GetButton(button));
|
||
}
|
||
m_mouseButtonClickAllowed &= ~AwtComponent::GetButtonMK(button); // Exclude the up-button from the drag-state
|
||
@@ -395,7 +395,7 @@
|
||
if ((flags & ALL_MK_BUTTONS) != 0) {
|
||
m_mouseButtonClickAllowed = 0;
|
||
} else {
|
||
- SendMouseEvent(java_awt_event_MouseEvent_MOUSE_MOVED, TimeHelper::windowsToUTC(::GetTickCount()), x, y,
|
||
+ SendMouseEvent(java_awt_event_MouseEvent_MOUSE_MOVED, TimeHelper::getMessageTimeUTC(), x, y,
|
||
AwtComponent::GetJavaModifiers(), 0, JNI_FALSE,
|
||
java_awt_event_MouseEvent_NOBUTTON, &msg);
|
||
}
|
||
@@ -408,7 +408,7 @@
|
||
if (AwtComponent::GetJavaModifiers() & java_awt_event_InputEvent_BUTTON1_DOWN_MASK) {
|
||
MSG msg;
|
||
AwtComponent::InitMessage(&msg, lastMessage, flags, MAKELPARAM(x, y), x, y);
|
||
- SendActionEvent(java_awt_event_ActionEvent_ACTION_PERFORMED, TimeHelper::windowsToUTC(::GetTickCount()),
|
||
+ SendActionEvent(java_awt_event_ActionEvent_ACTION_PERFORMED, TimeHelper::getMessageTimeUTC(),
|
||
AwtComponent::GetJavaModifiers(), &msg);
|
||
}
|
||
return mrConsume;
|
||
@@ -417,14 +417,14 @@
|
||
MsgRouting AwtTrayIcon::WmKeySelect(UINT flags, int x, int y)
|
||
{
|
||
static jlong lastKeySelectTime = 0;
|
||
- jlong now = TimeHelper::windowsToUTC(::GetTickCount());
|
||
+ jlong now = TimeHelper::getMessageTimeUTC();
|
||
|
||
// If a user selects a notify icon with the ENTER key,
|
||
// Shell 5.0 sends double NIN_KEYSELECT notification.
|
||
if (lastKeySelectTime != now) {
|
||
MSG msg;
|
||
AwtComponent::InitMessage(&msg, lastMessage, flags, MAKELPARAM(x, y), x, y);
|
||
- SendActionEvent(java_awt_event_ActionEvent_ACTION_PERFORMED, TimeHelper::windowsToUTC(::GetTickCount()),
|
||
+ SendActionEvent(java_awt_event_ActionEvent_ACTION_PERFORMED, TimeHelper::getMessageTimeUTC(),
|
||
AwtComponent::GetJavaModifiers(), &msg);
|
||
}
|
||
lastKeySelectTime = now;
|
||
@@ -441,7 +441,7 @@
|
||
if (clickCount == 2) {
|
||
MSG msg;
|
||
AwtComponent::InitMessage(&msg, lastMessage, flags, MAKELPARAM(x, y), x, y);
|
||
- SendActionEvent(java_awt_event_ActionEvent_ACTION_PERFORMED, TimeHelper::windowsToUTC(::GetTickCount()),
|
||
+ SendActionEvent(java_awt_event_ActionEvent_ACTION_PERFORMED, TimeHelper::getMessageTimeUTC(),
|
||
AwtComponent::GetJavaModifiers(), &msg);
|
||
}
|
||
return mrConsume;
|
||
--- ./jdk/src/windows/transport/shmem/shmem_md.c Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/src/windows/transport/shmem/shmem_md.c Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 1999, 2014, 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
|
||
@@ -30,6 +30,11 @@
|
||
#include "sysShmem.h"
|
||
#include "shmemBase.h" /* for exitTransportWithError */
|
||
|
||
+/* Use THIS_FILE when it is available. */
|
||
+#ifndef THIS_FILE
|
||
+ #define THIS_FILE __FILE__
|
||
+#endif
|
||
+
|
||
/*
|
||
* These functions are not completely universal. For now, they are used
|
||
* exclusively for Jbug's shared memory transport mechanism. They have
|
||
--- ./jdk/test/ProblemList.txt Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/ProblemList.txt Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -384,9 +384,6 @@
|
||
|
||
# jdk_tools
|
||
|
||
-# 6461635
|
||
-com/sun/tools/attach/BasicTests.sh generic-all
|
||
-
|
||
# Filed 6986875
|
||
sun/tools/jps/jps-Vvml.sh generic-all
|
||
|
||
@@ -396,10 +393,6 @@
|
||
# 7132203
|
||
sun/jvmstat/monitor/MonitoredVm/CR6672135.java generic-all
|
||
|
||
-# 8001118
|
||
-sun/tools/jcmd/jcmd-f.sh generic-all
|
||
-sun/tools/jcmd/jcmd-help-help.sh generic-all
|
||
-
|
||
# 7175775
|
||
sun/tools/jinfo/Basic.sh macosx-all
|
||
|
||
@@ -444,9 +437,6 @@
|
||
# Problems on windows, jmap.exe hangs? (these run jmap), fails on Solaris 10 x86
|
||
java/util/concurrent/locks/Lock/TimedAcquireLeak.java generic-all
|
||
|
||
-# 7041639, Solaris DSA keypair generation bug
|
||
-java/util/TimeZone/TimeZoneDatePermissionCheck.sh solaris-all
|
||
-
|
||
# 8026772: test/sun/util/resources/TimeZone/Bug6317929.java failing
|
||
sun/util/resources/TimeZone/Bug6317929.java generic-all
|
||
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/com/sun/corba/5036554/JavaBug.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,37 @@
|
||
+/*
|
||
+ * Copyright (c) 2013, 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.
|
||
+ *
|
||
+ * 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 bug;
|
||
+
|
||
+public class JavaBug {
|
||
+ public static void main(String[] args) {
|
||
+ try {
|
||
+ org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);
|
||
+ org.omg.CORBA.Any any = orb.create_any();
|
||
+ myStringHelper.insert(any, "hello");
|
||
+ System.out.println("Any: " + myStringHelper.extract(any));
|
||
+ } catch( Exception e ) {
|
||
+ e.printStackTrace();
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/com/sun/corba/5036554/README Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,77 @@
|
||
+/*
|
||
+ * Copyright (c) 2013, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+Bug # 5036554 unmarshal error on CORBA alias type in CORBA any
|
||
+
|
||
+Platform : ALL
|
||
+
|
||
+Testcase directory : <.../corba>
|
||
+
|
||
+Test Procedure : <STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
|
||
+Step 1: create a file bug.idl with the following content:
|
||
+
|
||
+// IDL file bug.idl
|
||
+module bug {
|
||
+ typedef string myString;
|
||
+};
|
||
+
|
||
+Step 2: Translate bug.idl with the command: idlj bug.idl
|
||
+This will create the file bug/myStringHelper.java
|
||
+
|
||
+Step 3:
|
||
+Create the file JavaBug.java in directory bug with the following content:
|
||
+
|
||
+// Java file JavaBug.java
|
||
+package bug;
|
||
+
|
||
+public class JavaBug {
|
||
+ public static void main(String[] args) {
|
||
+ try {
|
||
+ org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);
|
||
+ org.omg.CORBA.Any any = orb.create_any();
|
||
+ myStringHelper.insert(any, "hello");
|
||
+ System.out.println("Any: " + myStringHelper.extract(any));
|
||
+ } catch( Exception e ) {
|
||
+ e.printStackTrace();
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+Step 4:
|
||
+Compile all java files with the command: javac -d . bug\*.java
|
||
+
|
||
+Step 5:
|
||
+Execute the program with the command: java -cp . bug/JavaBug
|
||
+
|
||
+Step 6: Note the null pointer exception in the the output!
|
||
+
|
||
+
|
||
+Without Fix behaviour : <java.lang.NullPointerException
|
||
+ at com.sun.corba.se.internal.corba.TCUtility.unmarshalIn(TCUtility.java:290)
|
||
+ at com.sun.corba.se.internal.corba.AnyImpl.read_value(AnyImpl.java:561)
|
||
+ at bug.myStringHelper.insert(myStringHelper.java:20)
|
||
+ at bug.JavaBug.main(JavaBug.java:8)>
|
||
+
|
||
+With Fix behaviour : <The output message printed on the console: "Any: hello">
|
||
+
|
||
+Other Comments : <Test case is automated.>
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/com/sun/corba/5036554/TestCorbaBug.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,112 @@
|
||
+#!/bin/sh
|
||
+#
|
||
+# Copyright (c) 2013, 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.
|
||
+#
|
||
+# 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.
|
||
+#
|
||
+
|
||
+# @test
|
||
+# @bug 5036554 6357706
|
||
+# @summary unmarshal error on CORBA alias type in CORBA any
|
||
+# @run shell TestCorbaBug.sh
|
||
+
|
||
+if [ "${TESTSRC}" = "" ]
|
||
+then TESTSRC=.
|
||
+fi
|
||
+
|
||
+if [ "${TESTJAVA}" = "" ]
|
||
+then
|
||
+ PARENT=`dirname \`which java\``
|
||
+ TESTJAVA=`dirname ${PARENT}`
|
||
+ echo "TESTJAVA not set, selecting " ${TESTJAVA}
|
||
+ echo "If this is incorrect, try setting the variable manually."
|
||
+fi
|
||
+
|
||
+if [ "${TESTCLASSES}" = "" ]
|
||
+then
|
||
+ echo "TESTCLASSES not set. Test cannot execute. Failed."
|
||
+ exit 1
|
||
+fi
|
||
+
|
||
+# set platform-dependent variables
|
||
+OS=`uname -s`
|
||
+case "$OS" in
|
||
+ SunOS | Linux | Darwin )
|
||
+ PS=":"
|
||
+ FS="/"
|
||
+ ;;
|
||
+ CYGWIN* )
|
||
+ PS=";"
|
||
+ FS="/"
|
||
+ ;;
|
||
+ Windows* )
|
||
+ PS=";"
|
||
+ FS="\\"
|
||
+ ;;
|
||
+ * )
|
||
+ echo "Unrecognized system!"
|
||
+ exit 1;
|
||
+ ;;
|
||
+esac
|
||
+
|
||
+CLASSPATH=.${PS}${TESTCLASSES}; export CLASSPATH
|
||
+
|
||
+THIS_DIR=`pwd`
|
||
+
|
||
+${TESTJAVA}${FS}bin${FS}java -version
|
||
+
|
||
+mkdir bug
|
||
+
|
||
+cp ${TESTSRC}${FS}bug.idl .
|
||
+${TESTJAVA}${FS}bin${FS}idlj bug.idl
|
||
+
|
||
+cp ${TESTSRC}${FS}JavaBug.java bug
|
||
+
|
||
+chmod -fR 777 bug
|
||
+
|
||
+${TESTJAVA}${FS}bin${FS}javac -d . bug${FS}*.java
|
||
+
|
||
+${TESTJAVA}${FS}bin${FS}java -cp . bug/JavaBug > test.out 2>&1
|
||
+
|
||
+grep "NullPointerException" test.out
|
||
+
|
||
+ERROR=$?
|
||
+
|
||
+cat test.out
|
||
+
|
||
+if [ $ERROR = 0 ]
|
||
+then
|
||
+ echo "Test Failed"
|
||
+ exit 1
|
||
+fi
|
||
+
|
||
+grep "Any: hello" test.out
|
||
+
|
||
+STATUS=$?
|
||
+
|
||
+if [ $STATUS = 0 ]
|
||
+then
|
||
+ echo "Test Passed"
|
||
+ exit 0
|
||
+else
|
||
+ echo "Invalid output"
|
||
+ cat test.out
|
||
+ exit 2
|
||
+fi
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/com/sun/corba/5036554/bug.idl Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,4 @@
|
||
+// IDL file bug.idl
|
||
+module bug {
|
||
+ typedef string myString;
|
||
+};
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/com/sun/corba/se/impl/io/CustomOutputStream.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,192 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+import java.io.Serializable;
|
||
+
|
||
+import org.omg.CORBA.Any;
|
||
+import org.omg.CORBA.TypeCode;
|
||
+import org.omg.CORBA.Principal;
|
||
+import org.omg.CORBA_2_3.portable.OutputStream;
|
||
+import org.omg.CORBA_2_3.portable.InputStream;
|
||
+
|
||
+public class CustomOutputStream extends OutputStream {
|
||
+
|
||
+ @Override
|
||
+ public void write_value(Serializable value, Class clz) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public InputStream create_input_stream() {
|
||
+ return null;
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_boolean(boolean value) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_char(char value) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_wchar(char value) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_octet(byte value) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_short(short value) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_ushort(short value) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_long(int value) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_ulong(int value) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_longlong(long value) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_ulonglong(long value) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_float(float value) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_double(double value) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_string(String value) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_wstring(String value) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_boolean_array(boolean[] value, int offset,
|
||
+ int length) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_char_array(char[] value, int offset,
|
||
+ int length) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_wchar_array(char[] value, int offset,
|
||
+ int length) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_octet_array(byte[] value, int offset,
|
||
+ int length) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_short_array(short[] value, int offset,
|
||
+ int length) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_ushort_array(short[] value, int offset,
|
||
+ int length) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_long_array(int[] value, int offset,
|
||
+ int length) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_ulong_array(int[] value, int offset,
|
||
+ int length) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_longlong_array(long[] value, int offset,
|
||
+ int length) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_ulonglong_array(long[] value, int offset,
|
||
+ int length) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_float_array(float[] value, int offset,
|
||
+ int length) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_double_array(double[] value, int offset,
|
||
+ int length) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_Object(org.omg.CORBA.Object value) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_TypeCode(TypeCode value) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_any(Any value) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_Principal(Principal value) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write(int b) throws java.io.IOException {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_fixed(java.math.BigDecimal value) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void write_Context(org.omg.CORBA.Context ctx,
|
||
+ org.omg.CORBA.ContextList contexts) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public org.omg.CORBA.ORB orb() {
|
||
+ return null;
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/com/sun/corba/se/impl/io/HookPutFieldsTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,42 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 7095856
|
||
+ * @summary OutputStreamHook doesn't handle null values
|
||
+ */
|
||
+
|
||
+import java.net.InetAddress;
|
||
+import javax.rmi.CORBA.Util;
|
||
+import javax.rmi.CORBA.ValueHandler;
|
||
+
|
||
+public class HookPutFieldsTest {
|
||
+
|
||
+ public static void main(String[] args ) throws Exception {
|
||
+ CustomOutputStream os = new CustomOutputStream();
|
||
+ InetAddress a = InetAddress.getByAddress(null, new byte[] {1,2,3,4});
|
||
+ ValueHandler vh = Util.createValueHandler();
|
||
+ vh.writeValue(os, a);
|
||
+ }
|
||
+}
|
||
--- ./jdk/test/com/sun/jndi/ldap/LdapTimeoutTest.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/com/sun/jndi/ldap/LdapTimeoutTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2011, 2014, 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
|
||
@@ -64,11 +64,12 @@
|
||
env.put(Context.SECURITY_PRINCIPAL, "user");
|
||
env.put(Context.SECURITY_CREDENTIALS, "password");
|
||
|
||
- env.put("com.sun.jndi.ldap.connect.timeout", "10");
|
||
- env.put("com.sun.jndi.ldap.read.timeout", "3000");
|
||
-
|
||
InitialContext ctx = null;
|
||
try {
|
||
+ new LdapTimeoutTest().deadServerNoTimeout(env);
|
||
+
|
||
+ env.put("com.sun.jndi.ldap.connect.timeout", "10");
|
||
+ env.put("com.sun.jndi.ldap.read.timeout", "3000");
|
||
new LdapTimeoutTest().ldapReadTimeoutTest(env, false);
|
||
new LdapTimeoutTest().ldapReadTimeoutTest(env, true);
|
||
new LdapTimeoutTest().simpleAuthConnectTest(env);
|
||
@@ -84,7 +85,7 @@
|
||
void ldapReadTimeoutTest(Hashtable env, boolean ssl) {
|
||
InitialContext ctx = null;
|
||
if (ssl) env.put(Context.SECURITY_PROTOCOL, "ssl");
|
||
- ScheduledFuture killer = killSwitch();
|
||
+ ScheduledFuture killer = killSwitch(5000);
|
||
long start = System.nanoTime();
|
||
try {
|
||
ctx = new InitialDirContext(env);
|
||
@@ -112,7 +113,7 @@
|
||
|
||
void simpleAuthConnectTest(Hashtable env) {
|
||
InitialContext ctx = null;
|
||
- ScheduledFuture killer = killSwitch();
|
||
+ ScheduledFuture killer = killSwitch(5000);
|
||
long start = System.nanoTime();
|
||
try {
|
||
ctx = new InitialDirContext(env);
|
||
@@ -139,6 +140,32 @@
|
||
}
|
||
}
|
||
|
||
+ void deadServerNoTimeout(Hashtable env) {
|
||
+ InitialContext ctx = null;
|
||
+ ScheduledFuture killer = killSwitch(30000);
|
||
+ long start = System.nanoTime();
|
||
+ try {
|
||
+ ctx = new InitialDirContext(env);
|
||
+ SearchControls scl = new SearchControls();
|
||
+ scl.setSearchScope(SearchControls.SUBTREE_SCOPE);
|
||
+ NamingEnumeration<SearchResult> answer = ((InitialDirContext)ctx)
|
||
+ .search("ou=People,o=JNDITutorial", "(objectClass=*)", scl);
|
||
+ // shouldn't reach here
|
||
+ fail();
|
||
+ } catch (NamingException e) {
|
||
+ long end = System.nanoTime();
|
||
+ if (TimeUnit.NANOSECONDS.toMillis(end - start) < 14000) {
|
||
+ System.err.println("fail: timeout should be at least 15 seconds, actual time: "
|
||
+ + TimeUnit.NANOSECONDS.toMillis(end - start));
|
||
+ fail();
|
||
+ } else {
|
||
+ pass();
|
||
+ }
|
||
+ } finally {
|
||
+ if (!shutItDown(killer, ctx)) fail();
|
||
+ }
|
||
+ }
|
||
+
|
||
boolean shutItDown(ScheduledFuture killer, InitialContext ctx) {
|
||
killer.cancel(true);
|
||
try {
|
||
@@ -149,15 +176,15 @@
|
||
}
|
||
}
|
||
|
||
- ScheduledFuture killSwitch() {
|
||
+ ScheduledFuture killSwitch(int ms) {
|
||
final Thread current = Thread.currentThread();
|
||
return LdapTimeoutTest.pool.schedule(new Callable<Void>() {
|
||
public Void call() throws Exception {
|
||
System.err.println("Fail: killSwitch()");
|
||
- current.interrupt();
|
||
+ System.exit(0);
|
||
return null;
|
||
}
|
||
- }, 5000, TimeUnit.MILLISECONDS);
|
||
+ }, ms, TimeUnit.MILLISECONDS);
|
||
}
|
||
|
||
static class Server extends Thread {
|
||
--- ./jdk/test/com/sun/tools/attach/AgentSetup.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
@@ -1,45 +0,0 @@
|
||
-#!/bin/sh
|
||
-
|
||
-#
|
||
-# Copyright (c) 2005, 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.
|
||
-#
|
||
-# 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.
|
||
-#
|
||
-
|
||
-
|
||
-#
|
||
-#
|
||
-# Agent set - creates Agent.jar, BadAgent.jar and RedefineAgent.jar in ${TESTCLASSES}
|
||
-
|
||
-$JAVAC -d "${TESTCLASSES}" "${TESTSRC}"/Agent.java "${TESTSRC}"/BadAgent.java "${TESTSRC}"/RedefineAgent.java
|
||
-
|
||
-$JAR -cfm "${TESTCLASSES}"/Agent.jar "${TESTSRC}"/agent.mf \
|
||
- -C "${TESTCLASSES}" Agent.class
|
||
-
|
||
-$JAR -cfm "${TESTCLASSES}"/BadAgent.jar "${TESTSRC}"/badagent.mf \
|
||
- -C "${TESTCLASSES}" BadAgent.class
|
||
-
|
||
-$JAR -cfm "${TESTCLASSES}"/RedefineAgent.jar "${TESTSRC}"/redefineagent.mf \
|
||
- -C "${TESTCLASSES}" RedefineAgent.class
|
||
-
|
||
-agent="${TESTCLASSES}${FS}Agent.jar"
|
||
-badagent="${TESTCLASSES}${FS}BadAgent.jar"
|
||
-redefineagent="${TESTCLASSES}${FS}RedefineAgent.jar"
|
||
-
|
||
--- ./jdk/test/com/sun/tools/attach/Application.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/com/sun/tools/attach/Application.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -22,25 +22,39 @@
|
||
*/
|
||
|
||
/*
|
||
- *
|
||
- *
|
||
* A simple "Application" used by the Attach API unit tests. This application is
|
||
* launched by the test. It binds to a random port and shuts down when somebody
|
||
* connects to that port.
|
||
+ * Used port and pid are written both to stdout and to a specified file.
|
||
*/
|
||
import java.net.Socket;
|
||
import java.net.ServerSocket;
|
||
+import java.io.PrintWriter;
|
||
+import jdk.testlibrary.ProcessTools;
|
||
|
||
public class Application {
|
||
public static void main(String args[]) throws Exception {
|
||
// bind to a random port
|
||
+ if (args.length < 1) {
|
||
+ System.err.println("First argument should be path to output file.");
|
||
+ }
|
||
+ String outFileName = args[0];
|
||
+
|
||
ServerSocket ss = new ServerSocket(0);
|
||
int port = ss.getLocalPort();
|
||
+ int pid = ProcessTools.getProcessId();
|
||
|
||
- // signal test that we are started - do not remove this line!!
|
||
- System.out.println(port);
|
||
+ System.out.println("shutdownPort=" + port);
|
||
+ System.out.println("pid=" + pid);
|
||
System.out.flush();
|
||
|
||
+ try (PrintWriter writer = new PrintWriter(outFileName)) {
|
||
+ writer.println("shutdownPort=" + port);
|
||
+ writer.println("pid=" + pid);
|
||
+ writer.println("done");
|
||
+ writer.flush();
|
||
+ }
|
||
+
|
||
// wait for test harness to connect
|
||
Socket s = ss.accept();
|
||
s.close();
|
||
--- ./jdk/test/com/sun/tools/attach/ApplicationSetup.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
@@ -1,83 +0,0 @@
|
||
-#!/bin/sh
|
||
-
|
||
-#
|
||
-# Copyright (c) 2005, 2011, 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.
|
||
-#
|
||
-# 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.
|
||
-#
|
||
-
|
||
-
|
||
-#
|
||
-#
|
||
-# Application Setup - creates ${TESTCLASSES}/Application.jar and the following
|
||
-# procedures:
|
||
-# startApplication - starts target application
|
||
-# stopApplication $1 - stops application via TCP shutdown port $1
|
||
-
|
||
-$JAVAC -d "${TESTCLASSES}" "${TESTSRC}"/Application.java "${TESTSRC}"/Shutdown.java
|
||
-$JAR -cfm "${TESTCLASSES}"/Application.jar "${TESTSRC}"/application.mf \
|
||
- -C "${TESTCLASSES}" Application.class
|
||
-
|
||
-OUTPUTFILE=${TESTCLASSES}/Application.out
|
||
-rm -f ${OUTPUTFILE}
|
||
-
|
||
-startApplication()
|
||
-{
|
||
- # put all output from the app into ${OUTPUTFILE}
|
||
- ${JAVA} $1 $2 $3 -jar "${TESTCLASSES}"/Application.jar > ${OUTPUTFILE} 2>&1 &
|
||
- pid="$!"
|
||
-
|
||
- # MKS creates an intermediate shell to launch ${JAVA} so
|
||
- # ${pid} is not the actual pid. We have put in a small sleep
|
||
- # to give the intermediate shell process time to launch the
|
||
- # "java" process.
|
||
- if [ "$OS" = "Windows" ]; then
|
||
- sleep 2
|
||
- if [ "${isCygwin}" = "true" ] ; then
|
||
- realpid=`ps -p ${pid} | tail -1 | awk '{print $4;}'`
|
||
- else
|
||
- realpid=`ps -o pid,ppid,comm|grep ${pid}|grep "java"|cut -c1-6`
|
||
- fi
|
||
- pid=${realpid}
|
||
- fi
|
||
-
|
||
- echo "Waiting for Application to initialize..."
|
||
- attempts=0
|
||
- while true; do
|
||
- sleep 1
|
||
- port=`tail -1 ${OUTPUTFILE} | sed -e 's@\\r@@g' `
|
||
- if [ ! -z "$port" ]; then
|
||
- # In case of errors wait time for output to be flushed
|
||
- sleep 1
|
||
- cat ${OUTPUTFILE}
|
||
- break
|
||
- fi
|
||
- attempts=`expr $attempts + 1`
|
||
- echo "Waiting $attempts second(s) ..."
|
||
- done
|
||
- echo "Application is process $pid, shutdown port is $port"
|
||
- return $port
|
||
-}
|
||
-
|
||
-stopApplication()
|
||
-{
|
||
- $JAVA -classpath "${TESTCLASSES}" Shutdown $1
|
||
-}
|
||
-
|
||
--- ./jdk/test/com/sun/tools/attach/BasicTests.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/com/sun/tools/attach/BasicTests.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2005, 2011, 2013 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
|
||
@@ -21,127 +21,223 @@
|
||
* questions.
|
||
*/
|
||
|
||
-/*
|
||
- *
|
||
- *
|
||
- * Unit test for Attach API. Attaches to the given VM and performs a number
|
||
- * unit tests.
|
||
- */
|
||
import com.sun.tools.attach.*;
|
||
import java.net.ServerSocket;
|
||
import java.net.Socket;
|
||
import java.io.IOException;
|
||
import java.util.Properties;
|
||
import java.util.List;
|
||
+import java.io.File;
|
||
+import jdk.testlibrary.OutputAnalyzer;
|
||
+import jdk.testlibrary.JDKToolLauncher;
|
||
+import jdk.testlibrary.ProcessTools;
|
||
+import jdk.testlibrary.ProcessThread;
|
||
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 6173612 6273707 6277253 6335921 6348630 6342019 6381757
|
||
+ * @summary Basic unit tests for the VM attach mechanism.
|
||
+ * @library /lib/testlibrary
|
||
+ * @run build Agent BadAgent RedefineAgent Application Shutdown RedefineDummy RunnerUtil
|
||
+ * @run main BasicTests
|
||
+ *
|
||
+ * This test will perform a number of basic attach tests.
|
||
+ */
|
||
public class BasicTests {
|
||
- public static void main(String args[]) throws Exception {
|
||
- String pid = args[0];
|
||
- String agent = args[1];
|
||
- String badagent = args[2];
|
||
- String redefineagent = args[3];
|
||
|
||
- System.out.println(" - Attaching to application ...");
|
||
- VirtualMachine vm = VirtualMachine.attach(pid);
|
||
+ /*
|
||
+ * The actual test is in the nested class TestMain.
|
||
+ * The responsibility of this class is to:
|
||
+ * 1. Build all needed jars.
|
||
+ * 2. Start the Application class in a separate process.
|
||
+ * 3. Find the pid and shutdown port of the running Application.
|
||
+ * 4. Launches the tests in nested class TestMain that will attach to the Application.
|
||
+ * 5. Shut down the Application.
|
||
+ */
|
||
+ public static void main(String args[]) throws Throwable {
|
||
+ final String pidFile = "TestsBasic.Application.pid";
|
||
+ ProcessThread processThread = null;
|
||
+ RunnerUtil.ProcessInfo info = null;
|
||
+ try {
|
||
+ buildJars();
|
||
+ processThread = RunnerUtil.startApplication(pidFile);
|
||
+ info = RunnerUtil.readProcessInfo(pidFile);
|
||
+ runTests(info.pid);
|
||
+ } catch (Throwable t) {
|
||
+ System.out.println("TestBasic got unexpected exception: " + t);
|
||
+ t.printStackTrace();
|
||
+ throw t;
|
||
+ } finally {
|
||
+ // Make sure the Application process is stopped.
|
||
+ RunnerUtil.stopApplication(info.shutdownPort, processThread);
|
||
+ }
|
||
+ }
|
||
|
||
- // Test 1 - read the system properties from the target VM and
|
||
- // check that property is set
|
||
- System.out.println(" - Test: system properties in target VM");
|
||
- Properties props = vm.getSystemProperties();
|
||
- String value = props.getProperty("attach.test");
|
||
- if (value == null || !value.equals("true")) {
|
||
- throw new RuntimeException("attach.test property not set");
|
||
+ /**
|
||
+ * Runs the actual tests in nested class TestMain.
|
||
+ * The reason for running the tests in a separate process
|
||
+ * is that we need to modify the class path.
|
||
+ */
|
||
+ private static void runTests(int pid) throws Throwable {
|
||
+ final String sep = File.separator;
|
||
+
|
||
+ // Need to add jdk/lib/tools.jar to classpath.
|
||
+ String classpath =
|
||
+ System.getProperty("test.class.path", "") + File.pathSeparator +
|
||
+ System.getProperty("test.jdk", ".") + sep + "lib" + sep + "tools.jar";
|
||
+ String testClassDir = System.getProperty("test.classes", "") + sep;
|
||
+
|
||
+ // Argumenta : -classpath cp BasicTests$TestMain pid agent badagent redefineagent
|
||
+ String[] args = {
|
||
+ "-classpath",
|
||
+ classpath,
|
||
+ "BasicTests$TestMain",
|
||
+ Integer.toString(pid),
|
||
+ testClassDir + "Agent.jar",
|
||
+ testClassDir + "BadAgent.jar",
|
||
+ testClassDir + "RedefineAgent.jar" };
|
||
+ OutputAnalyzer output = ProcessTools.executeTestJvm(args);
|
||
+ output.shouldHaveExitValue(0);
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * Will build all jars needed by the tests.
|
||
+ */
|
||
+ private static void buildJars() throws Throwable {
|
||
+ String[] jars = {"Agent", "BadAgent", "RedefineAgent", "Application" };
|
||
+ for (String jar : jars) {
|
||
+ buildJar(jar);
|
||
}
|
||
- System.out.println(" - attach.test property set as expected");
|
||
+ }
|
||
|
||
- // Test 1a - read the agent properties from the target VM.
|
||
- // By default, the agent property contains "sun.java.command",
|
||
- // "sun.jvm.flags", and "sun.jvm.args".
|
||
- // Just sanity check - make sure not empty.
|
||
- System.out.println(" - Test: agent properties in target VM");
|
||
- props = vm.getAgentProperties();
|
||
- if (props == null || props.size() == 0) {
|
||
- throw new RuntimeException("Agent properties is empty");
|
||
- }
|
||
- System.out.println(" - agent properties non-empty as expected");
|
||
+ /**
|
||
+ * Will build a jar with the given name.
|
||
+ * Class file and manifest must already exist.
|
||
+ * @param jarName Name of the jar.
|
||
+ */
|
||
+ private static void buildJar(String jarName) throws Throwable {
|
||
+ String testClasses = System.getProperty("test.classes", "?");
|
||
+ String testSrc = System.getProperty("test.src", "?");
|
||
+ String jar = String.format("%s/%s.jar", testClasses, jarName);
|
||
+ String manifest = String.format("%s/%s.mf", testSrc, jarName.toLowerCase());
|
||
+ String clazz = String.format("%s.class", jarName);
|
||
|
||
- // Test 2 - attempt to load an agent that does not exist
|
||
- System.out.println(" - Test: Load an agent that does not exist");
|
||
- try {
|
||
- vm.loadAgent("SilverBullet.jar");
|
||
- } catch (AgentLoadException x) {
|
||
- System.out.println(" - AgentLoadException thrown as expected!");
|
||
- }
|
||
+ // Arguments to the jar command has this format:
|
||
+ // "-cfm TESTCLASSES/Agent.jar TESTSRC/agent.mf -C TESTCLASSES Agent.class"
|
||
+ RunnerUtil.createJar("-cfm", jar, manifest, "-C", testClasses, clazz);
|
||
+ }
|
||
|
||
- // Test 3 - load an "bad" agent (agentmain throws an exception)
|
||
- System.out.println(" - Test: Load a bad agent");
|
||
- System.out.println("INFO: This test will cause error messages "
|
||
- + "to appear in the application log about SilverBullet.jar "
|
||
- + "not being found and an agent failing to start.");
|
||
- try {
|
||
- vm.loadAgent(badagent);
|
||
- throw new RuntimeException(
|
||
- "AgentInitializationException not thrown as expected!");
|
||
- } catch (AgentInitializationException x) {
|
||
- System.out.println(
|
||
- " - AgentInitializationException thrown as expected!");
|
||
- }
|
||
+ /**
|
||
+ * This is the actual test. It will attach to the running Application
|
||
+ * and perform a number of basic attach tests.
|
||
+ */
|
||
+ public static class TestMain {
|
||
+ public static void main(String args[]) throws Exception {
|
||
+ String pid = args[0];
|
||
+ String agent = args[1];
|
||
+ String badagent = args[2];
|
||
+ String redefineagent = args[3];
|
||
|
||
- // Test 4 - detach from the VM and attempt a load (should throw IOE)
|
||
- System.out.println(" - Test: Detach from VM");
|
||
- System.out.println("INFO: This test will cause error messages "
|
||
- + "to appear in the application log about a BadAgent including "
|
||
- + "a RuntimeException and an InvocationTargetException.");
|
||
- vm.detach();
|
||
- try {
|
||
- vm.loadAgent(agent);
|
||
- throw new RuntimeException("loadAgent did not throw an exception!!");
|
||
- } catch (IOException ioe) {
|
||
- System.out.println(" - IOException as expected");
|
||
- }
|
||
+ System.out.println(" - Attaching to application ...");
|
||
+ VirtualMachine vm = VirtualMachine.attach(pid);
|
||
|
||
- // Test 5 - functional "end-to-end" test.
|
||
- // Create a listener socket. Load Agent.jar into the target VM passing
|
||
- // it the port number of our listener. When agent loads it should connect
|
||
- // back to the tool.
|
||
+ // Test 1 - read the system properties from the target VM and
|
||
+ // check that property is set
|
||
+ System.out.println(" - Test: system properties in target VM");
|
||
+ Properties props = vm.getSystemProperties();
|
||
+ String value = props.getProperty("attach.test");
|
||
+ if (value == null || !value.equals("true")) {
|
||
+ throw new RuntimeException("attach.test property not set");
|
||
+ }
|
||
+ System.out.println(" - attach.test property set as expected");
|
||
|
||
- System.out.println(" - Re-attaching to application ...");
|
||
- vm = VirtualMachine.attach(pid);
|
||
+ // Test 1a - read the agent properties from the target VM.
|
||
+ // By default, the agent property contains "sun.java.command",
|
||
+ // "sun.jvm.flags", and "sun.jvm.args".
|
||
+ // Just sanity check - make sure not empty.
|
||
+ System.out.println(" - Test: agent properties in target VM");
|
||
+ props = vm.getAgentProperties();
|
||
+ if (props == null || props.size() == 0) {
|
||
+ throw new RuntimeException("Agent properties is empty");
|
||
+ }
|
||
+ System.out.println(" - agent properties non-empty as expected");
|
||
|
||
- System.out.println(" - Test: End-to-end connection with agent");
|
||
+ // Test 2 - attempt to load an agent that does not exist
|
||
+ System.out.println(" - Test: Load an agent that does not exist");
|
||
+ try {
|
||
+ vm.loadAgent("SilverBullet.jar");
|
||
+ } catch (AgentLoadException x) {
|
||
+ System.out.println(" - AgentLoadException thrown as expected!");
|
||
+ }
|
||
|
||
- ServerSocket ss = new ServerSocket(0);
|
||
- int port = ss.getLocalPort();
|
||
+ // Test 3 - load an "bad" agent (agentmain throws an exception)
|
||
+ System.out.println(" - Test: Load a bad agent");
|
||
+ System.out.println("INFO: This test will cause error messages "
|
||
+ + "to appear in the application log about SilverBullet.jar "
|
||
+ + "not being found and an agent failing to start.");
|
||
+ try {
|
||
+ vm.loadAgent(badagent);
|
||
+ throw new RuntimeException(
|
||
+ "AgentInitializationException not thrown as expected!");
|
||
+ } catch (AgentInitializationException x) {
|
||
+ System.out.println(
|
||
+ " - AgentInitializationException thrown as expected!");
|
||
+ }
|
||
|
||
- System.out.println(" - Loading Agent.jar into target VM ...");
|
||
- vm.loadAgent(agent, Integer.toString(port));
|
||
+ // Test 4 - detach from the VM and attempt a load (should throw IOE)
|
||
+ System.out.println(" - Test: Detach from VM");
|
||
+ System.out.println("INFO: This test will cause error messages "
|
||
+ + "to appear in the application log about a BadAgent including "
|
||
+ + "a RuntimeException and an InvocationTargetException.");
|
||
+ vm.detach();
|
||
+ try {
|
||
+ vm.loadAgent(agent);
|
||
+ throw new RuntimeException("loadAgent did not throw an exception!!");
|
||
+ } catch (IOException ioe) {
|
||
+ System.out.println(" - IOException as expected");
|
||
+ }
|
||
|
||
- System.out.println(" - Waiting for agent to connect back to tool ...");
|
||
- Socket s = ss.accept();
|
||
- System.out.println(" - Connected to agent.");
|
||
+ // Test 5 - functional "end-to-end" test.
|
||
+ // Create a listener socket. Load Agent.jar into the target VM passing
|
||
+ // it the port number of our listener. When agent loads it should connect
|
||
+ // back to the tool.
|
||
|
||
- // Test 5b - functional "end-to-end" test.
|
||
- // Now with an agent that does redefine.
|
||
+ System.out.println(" - Re-attaching to application ...");
|
||
+ vm = VirtualMachine.attach(pid);
|
||
|
||
- System.out.println(" - Re-attaching to application ...");
|
||
- vm = VirtualMachine.attach(pid);
|
||
+ System.out.println(" - Test: End-to-end connection with agent");
|
||
|
||
- System.out.println(" - Test: End-to-end connection with RedefineAgent");
|
||
+ ServerSocket ss = new ServerSocket(0);
|
||
+ int port = ss.getLocalPort();
|
||
|
||
- ServerSocket ss2 = new ServerSocket(0);
|
||
- int port2 = ss2.getLocalPort();
|
||
+ System.out.println(" - Loading Agent.jar into target VM ...");
|
||
+ vm.loadAgent(agent, Integer.toString(port));
|
||
|
||
- System.out.println(" - Loading RedefineAgent.jar into target VM ...");
|
||
- vm.loadAgent(redefineagent, Integer.toString(port2));
|
||
+ System.out.println(" - Waiting for agent to connect back to tool ...");
|
||
+ Socket s = ss.accept();
|
||
+ System.out.println(" - Connected to agent.");
|
||
|
||
- System.out.println(" - Waiting for RedefineAgent to connect back to tool ...");
|
||
- Socket s2 = ss2.accept();
|
||
- System.out.println(" - Connected to RedefineAgent.");
|
||
+ // Test 5b - functional "end-to-end" test.
|
||
+ // Now with an agent that does redefine.
|
||
|
||
- // Test 6 - list method should list the target VM
|
||
- System.out.println(" - Test: VirtualMachine.list");
|
||
- List<VirtualMachineDescriptor> l = VirtualMachine.list();
|
||
- if (!l.isEmpty()) {
|
||
+ System.out.println(" - Re-attaching to application ...");
|
||
+ vm = VirtualMachine.attach(pid);
|
||
+
|
||
+ System.out.println(" - Test: End-to-end connection with RedefineAgent");
|
||
+
|
||
+ ServerSocket ss2 = new ServerSocket(0);
|
||
+ int port2 = ss2.getLocalPort();
|
||
+
|
||
+ System.out.println(" - Loading RedefineAgent.jar into target VM ...");
|
||
+ vm.loadAgent(redefineagent, Integer.toString(port2));
|
||
+
|
||
+ System.out.println(" - Waiting for RedefineAgent to connect back to tool ...");
|
||
+ Socket s2 = ss2.accept();
|
||
+ System.out.println(" - Connected to RedefineAgent.");
|
||
+
|
||
+ // Test 6 - list method should list the target VM
|
||
+ System.out.println(" - Test: VirtualMachine.list");
|
||
+ List<VirtualMachineDescriptor> l = VirtualMachine.list();
|
||
boolean found = false;
|
||
for (VirtualMachineDescriptor vmd: l) {
|
||
if (vmd.id().equals(pid)) {
|
||
@@ -154,27 +250,26 @@
|
||
} else {
|
||
throw new RuntimeException(pid + " not found in VM list");
|
||
}
|
||
+
|
||
+ // test 7 - basic hashCode/equals tests
|
||
+ System.out.println(" - Test: hashCode/equals");
|
||
+
|
||
+ VirtualMachine vm1 = VirtualMachine.attach(pid);
|
||
+ VirtualMachine vm2 = VirtualMachine.attach(pid);
|
||
+ if (!vm1.equals(vm2)) {
|
||
+ throw new RuntimeException("virtual machines are not equal");
|
||
+ }
|
||
+ if (vm.hashCode() != vm.hashCode()) {
|
||
+ throw new RuntimeException("virtual machine hashCodes not equal");
|
||
+ }
|
||
+ System.out.println(" - hashCode/equals okay");
|
||
+
|
||
+ // ---
|
||
+ System.out.println(" - Cleaning up...");
|
||
+ s.close();
|
||
+ ss.close();
|
||
+ s2.close();
|
||
+ ss2.close();
|
||
}
|
||
-
|
||
- // test 7 - basic hashCode/equals tests
|
||
- System.out.println(" - Test: hashCode/equals");
|
||
-
|
||
- VirtualMachine vm1 = VirtualMachine.attach(pid);
|
||
- VirtualMachine vm2 = VirtualMachine.attach(pid);
|
||
- if (!vm1.equals(vm2)) {
|
||
- throw new RuntimeException("virtual machines are not equal");
|
||
- }
|
||
- if (vm.hashCode() != vm.hashCode()) {
|
||
- throw new RuntimeException("virtual machine hashCodes not equal");
|
||
- }
|
||
- System.out.println(" - hashCode/equals okay");
|
||
-
|
||
-
|
||
- // ---
|
||
- System.out.println(" - Cleaning up...");
|
||
- s.close();
|
||
- ss.close();
|
||
- s2.close();
|
||
- ss2.close();
|
||
}
|
||
}
|
||
--- ./jdk/test/com/sun/tools/attach/BasicTests.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
@@ -1,86 +0,0 @@
|
||
-#!/bin/sh
|
||
-
|
||
-#
|
||
-# Copyright (c) 2005, 2011, 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.
|
||
-#
|
||
-# 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.
|
||
-#
|
||
-
|
||
-
|
||
-# @test
|
||
-# @bug 6173612 6273707 6277253 6335921 6348630 6342019 6381757
|
||
-# @summary Basic unit tests for the VM attach mechanism.
|
||
-#
|
||
-# @build BasicTests
|
||
-# @run shell BasicTests.sh
|
||
-
|
||
-if [ "${TESTSRC}" = "" ]
|
||
-then
|
||
- echo "TESTSRC not set. Test cannot execute. Failed."
|
||
- exit 1
|
||
-fi
|
||
-
|
||
-# Windows 2000 is a problem here, so we skip it, see 6962615
|
||
-osrev=`uname -a`
|
||
-if [ "`echo ${osrev} | grep 'CYGWIN[^ ]*-5\.0'`" != "" ] ; then
|
||
- echo "Treating as a pass, not testing Windows 2000"
|
||
- exit 0
|
||
-fi
|
||
-if [ "`echo ${osrev} | grep 'Windows'`" != "" ] ; then
|
||
- if [ "`echo ${osrev} | grep '5 00'`" != "" ] ; then
|
||
- echo "Treating as a pass, not testing Windows 2000"
|
||
- exit 0
|
||
- fi
|
||
-fi
|
||
-
|
||
-. ${TESTSRC}/CommonSetup.sh
|
||
-. ${TESTSRC}/ApplicationSetup.sh
|
||
-. ${TESTSRC}/AgentSetup.sh
|
||
-
|
||
-startApplication -Dattach.test=true
|
||
-# pid = process-id, port = shutdown port
|
||
-
|
||
-failures=0
|
||
-
|
||
-echo "Running tests ..."
|
||
-
|
||
-$JAVA -classpath "${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar" \
|
||
- BasicTests $pid $agent $badagent $redefineagent 2>&1
|
||
-if [ $? != 0 ]; then failures=`expr $failures + 1`; fi
|
||
-
|
||
-stopApplication $port
|
||
-
|
||
-# Add these info messages to $OUTPUTFILE just in case someone
|
||
-# looks at it and wonders about the failures. We have to do
|
||
-# this after the application is stopped because it is writing
|
||
-# to $OUTPUTFILE.
|
||
-(
|
||
-echo ""
|
||
-echo "INFO: Test 2 will cause error messages about SilverBullet.jar" \
|
||
- "and an agent failing to start."
|
||
-echo "INFO: Test 3 will cause error messages about BadAgent" \
|
||
- "including a RuntimeException and an InvocationTargetException."
|
||
-) >> ${OUTPUTFILE}
|
||
-
|
||
-if [ $failures = 0 ];
|
||
- then echo "All tests passed.";
|
||
- else echo "$failures test(s) failed:"; cat ${OUTPUTFILE};
|
||
-fi
|
||
-exit $failures
|
||
--- ./jdk/test/com/sun/tools/attach/CommonSetup.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
@@ -1,81 +0,0 @@
|
||
-#!/bin/sh
|
||
-
|
||
-#
|
||
-# Copyright (c) 2005, 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.
|
||
-#
|
||
-# 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.
|
||
-#
|
||
-
|
||
-
|
||
-#
|
||
-#
|
||
-# Common setup for the Attach API unit tests. Setups up the following variables:
|
||
-#
|
||
-# PS - path sep.
|
||
-# FS - file sep.
|
||
-# JAVA - java cmd.
|
||
-# JAVAC - javac cmd.
|
||
-# JAR - jar cmd.
|
||
-
|
||
-OS=`uname -s`
|
||
-case "$OS" in
|
||
- SunOS | Linux | Darwin )
|
||
- PS=":"
|
||
- FS="/"
|
||
- ;;
|
||
- Windows* )
|
||
- PS=";"
|
||
- OS="Windows"
|
||
- FS="\\"
|
||
- ;;
|
||
- CYGWIN* )
|
||
- PS=";"
|
||
- OS="Windows"
|
||
- FS="\\"
|
||
- isCygwin=true
|
||
- ;;
|
||
- * )
|
||
- echo "Unrecognized system!"
|
||
- exit 1;
|
||
- ;;
|
||
-esac
|
||
-
|
||
-if [ "${TESTJAVA}" = "" ]
|
||
-then
|
||
- echo "TESTJAVA not set. Test cannot execute. Failed."
|
||
- exit 1
|
||
-fi
|
||
-
|
||
-if [ "${TESTSRC}" = "" ]
|
||
-then
|
||
- echo "TESTSRC not set. Test cannot execute. Failed."
|
||
- exit 1
|
||
-fi
|
||
-
|
||
-if [ "${TESTCLASSES}" = "" ]
|
||
-then
|
||
- echo "TESTCLASSES not set. Test cannot execute. Failed."
|
||
- exit 1
|
||
-fi
|
||
-
|
||
-JAVA="${TESTJAVA}/bin/java"
|
||
-JAVAC="${TESTJAVA}/bin/javac"
|
||
-JAR="${TESTJAVA}/bin/jar"
|
||
-
|
||
--- ./jdk/test/com/sun/tools/attach/PermissionTest.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/com/sun/tools/attach/PermissionTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2005, 2013 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
|
||
@@ -21,39 +21,119 @@
|
||
* questions.
|
||
*/
|
||
|
||
-/*
|
||
- *
|
||
- *
|
||
- * Unit test for Attach API - this checks that a SecurityException is thrown as
|
||
- * expected.
|
||
- */
|
||
import com.sun.tools.attach.VirtualMachine;
|
||
import com.sun.tools.attach.AttachNotSupportedException;
|
||
import java.util.Properties;
|
||
+import java.io.File;
|
||
+import jdk.testlibrary.OutputAnalyzer;
|
||
+import jdk.testlibrary.ProcessTools;
|
||
+import jdk.testlibrary.ProcessThread;
|
||
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 6173612 6273707 6277253 6335921 6348630 6342019 6381757
|
||
+ * @summary Basic unit tests for the VM attach mechanism.
|
||
+ * @library /lib/testlibrary
|
||
+ * @run build Application Shutdown
|
||
+ * @run main PermissionTest
|
||
+ *
|
||
+ * Unit test for Attach API -
|
||
+ * this checks that a SecurityException is thrown as expected.
|
||
+ */
|
||
public class PermissionTest {
|
||
- public static void main(String args[]) throws Exception {
|
||
- SecurityManager sm = System.getSecurityManager();
|
||
- if (sm == null) {
|
||
- throw new RuntimeException("Test configuration error - no security manager set");
|
||
+
|
||
+ /*
|
||
+ * The actual test is in the nested class TestMain.
|
||
+ * The responsibility of this class is to:
|
||
+ * 1. Start the Application class in a separate process.
|
||
+ * 2. Find the pid and shutdown port of the running Application.
|
||
+ * 3. Run the tests in TstMain that will attach to the Application.
|
||
+ * 4. Shut down the Application.
|
||
+ */
|
||
+ public static void main(String args[]) throws Throwable {
|
||
+ final String pidFile ="TestPermission.Application.pid";
|
||
+ ProcessThread processThread = null;
|
||
+ RunnerUtil.ProcessInfo info = null;
|
||
+ try {
|
||
+ processThread = RunnerUtil.startApplication(pidFile);
|
||
+ info = RunnerUtil.readProcessInfo(pidFile);
|
||
+ runTests(info.pid);
|
||
+ } catch (Throwable t) {
|
||
+ System.out.println("TestPermission got unexpected exception: " + t);
|
||
+ t.printStackTrace();
|
||
+ throw t;
|
||
+ } finally {
|
||
+ // Make sure the Application process is stopped.
|
||
+ RunnerUtil.stopApplication(info.shutdownPort, processThread);
|
||
}
|
||
+ }
|
||
|
||
- String pid = args[0];
|
||
- boolean shouldFail = Boolean.parseBoolean(args[1]);
|
||
+ /**
|
||
+ * Runs the actual test the nested class TestMain.
|
||
+ * The test is run in a separate process because we need to add to the classpath.
|
||
+ */
|
||
+ private static void runTests(int pid) throws Throwable {
|
||
+ final String sep = File.separator;
|
||
|
||
- try {
|
||
- VirtualMachine.attach(pid).detach();
|
||
- if (shouldFail) {
|
||
- throw new RuntimeException("SecurityException should be thrown");
|
||
+ // Need to add jdk/lib/tools.jar to classpath.
|
||
+ String classpath =
|
||
+ System.getProperty("test.class.path", "") + File.pathSeparator +
|
||
+ System.getProperty("test.jdk", ".") + sep + "lib" + sep + "tools.jar";
|
||
+ String testSrc = System.getProperty("test.src", "") + sep;
|
||
+
|
||
+ // Use a policy that will NOT allow attach. Test will verify exception.
|
||
+ String[] args = {
|
||
+ "-classpath",
|
||
+ classpath,
|
||
+ "-Djava.security.manager",
|
||
+ String.format("-Djava.security.policy=%sjava.policy.deny", testSrc),
|
||
+ "PermissionTest$TestMain",
|
||
+ Integer.toString(pid),
|
||
+ "true" };
|
||
+ OutputAnalyzer output = ProcessTools.executeTestJvm(args);
|
||
+ output.shouldHaveExitValue(0);
|
||
+
|
||
+ // Use a policy that will allow attach.
|
||
+ args = new String[] {
|
||
+ "-classpath",
|
||
+ classpath,
|
||
+ "-Djava.security.manager",
|
||
+ String.format("-Djava.security.policy=%sjava.policy.allow", testSrc),
|
||
+ "PermissionTest$TestMain",
|
||
+ Integer.toString(pid),
|
||
+ "false" };
|
||
+ output = ProcessTools.executeTestJvm(args);
|
||
+ output.shouldHaveExitValue(0);
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * This is the actual test code. It will attach to the Application and verify
|
||
+ * that we get a SecurityException when that is expected.
|
||
+ */
|
||
+ public static class TestMain {
|
||
+ public static void main(String args[]) throws Exception {
|
||
+ SecurityManager sm = System.getSecurityManager();
|
||
+ if (sm == null) {
|
||
+ throw new RuntimeException("Test configuration error - no security manager set");
|
||
}
|
||
- System.out.println(" - attached to target VM as expected.");
|
||
- } catch (Exception x) {
|
||
- // AttachNotSupportedException thrown when no providers can be loaded
|
||
- if (shouldFail && ((x instanceof AttachNotSupportedException) ||
|
||
- (x instanceof SecurityException))) {
|
||
- System.out.println(" - exception thrown as expected.");
|
||
- } else {
|
||
- throw x;
|
||
+
|
||
+ String pid = args[0];
|
||
+ boolean shouldFail = Boolean.parseBoolean(args[1]);
|
||
+
|
||
+ try {
|
||
+ VirtualMachine.attach(pid).detach();
|
||
+ if (shouldFail) {
|
||
+ throw new RuntimeException("SecurityException should be thrown");
|
||
+ }
|
||
+ System.out.println(" - attached to target VM as expected.");
|
||
+ } catch (Exception x) {
|
||
+ // AttachNotSupportedException thrown when no providers can be loaded
|
||
+ if (shouldFail && ((x instanceof AttachNotSupportedException) ||
|
||
+ (x instanceof SecurityException))) {
|
||
+ System.out.println(" - exception thrown as expected.");
|
||
+ } else {
|
||
+ throw x;
|
||
+ }
|
||
}
|
||
}
|
||
}
|
||
--- ./jdk/test/com/sun/tools/attach/PermissionTests.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
@@ -1,72 +0,0 @@
|
||
-#!/bin/sh
|
||
-
|
||
-#
|
||
-# Copyright (c) 2005, 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.
|
||
-#
|
||
-# 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.
|
||
-#
|
||
-
|
||
-
|
||
-# @test
|
||
-# @bug 6173612
|
||
-# @summary Security manager and permission tests for Attach API
|
||
-#
|
||
-# @build PermissionTest
|
||
-# @run shell PermissionTests.sh
|
||
-
|
||
-if [ "${TESTSRC}" = "" ]
|
||
-then
|
||
- echo "TESTSRC not set. Test cannot execute. Failed."
|
||
- exit 1
|
||
-fi
|
||
-
|
||
-. ${TESTSRC}/CommonSetup.sh
|
||
-. ${TESTSRC}/ApplicationSetup.sh
|
||
-
|
||
-failures=0
|
||
-
|
||
-# Start target VM
|
||
-startApplication
|
||
-# pid = process-id, port = shutdown port
|
||
-
|
||
-echo "Deny test"
|
||
-# deny
|
||
-$JAVA -classpath "${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar" \
|
||
- -Djava.security.manager \
|
||
- -Djava.security.policy=${TESTSRC}/java.policy.deny \
|
||
- PermissionTest $pid true 2>&1
|
||
-if [ $? != 0 ]; then failures=`expr $failures + 1`; fi
|
||
-
|
||
-# allow
|
||
-echo "Allow test"
|
||
-$JAVA -classpath "${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar" \
|
||
- -Djava.security.manager \
|
||
- -Djava.security.policy=${TESTSRC}/java.policy.allow \
|
||
- PermissionTest $pid false 2>&1
|
||
-if [ $? != 0 ]; then failures=`expr $failures + 1`; fi
|
||
-
|
||
-# Stop target VM
|
||
-stopApplication $port
|
||
-
|
||
-if [ $failures = 0 ];
|
||
- then echo "All tests passed.";
|
||
- else echo "$failures test(s) failed:"; cat ${OUTPUTFILE};
|
||
-fi
|
||
-exit $failures
|
||
--- ./jdk/test/com/sun/tools/attach/ProviderTest.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/com/sun/tools/attach/ProviderTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2005, 2013 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
|
||
@@ -21,24 +21,98 @@
|
||
* questions.
|
||
*/
|
||
|
||
-/*
|
||
- *
|
||
- *
|
||
- * Unit test for Attach API. Attaches to the given VM and performs a number
|
||
- * unit tests.
|
||
- */
|
||
+import java.io.File;
|
||
+import jdk.testlibrary.OutputAnalyzer;
|
||
+import jdk.testlibrary.JDKToolLauncher;
|
||
+import jdk.testlibrary.ProcessTools;
|
||
import com.sun.tools.attach.VirtualMachine;
|
||
import com.sun.tools.attach.spi.AttachProvider;
|
||
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 6173612 6273707 6277253 6335921 6348630 6342019 6381757
|
||
+ * @summary Basic unit tests for the VM attach mechanism.
|
||
+ * @library /lib/testlibrary
|
||
+ * @run build SimpleProvider
|
||
+ * @run main ProviderTest
|
||
+ *
|
||
+ * The test will attach and detach to/from the running Application.
|
||
+ */
|
||
public class ProviderTest {
|
||
- public static void main(String args[]) throws Exception {
|
||
- // deal with internal builds where classes are loaded from the
|
||
- // 'classes' directory rather than rt.jar
|
||
- ClassLoader cl = AttachProvider.class.getClassLoader();
|
||
- if (cl != ClassLoader.getSystemClassLoader()) {
|
||
- System.out.println("Attach API not loaded by system class loader - test skipped");
|
||
- return;
|
||
+
|
||
+ /*
|
||
+ * The actual tests are in the nested class TestMain below.
|
||
+ * The responsibility of this class is to:
|
||
+ * 1. Build the needed jar.
|
||
+ * 2. Run tests in ProviderTest.TestMain.
|
||
+ */
|
||
+ public static void main(String args[]) throws Throwable {
|
||
+ try {
|
||
+ buildJar();
|
||
+ runTests();
|
||
+ } catch (Throwable t) {
|
||
+ System.out.println("TestProvider got unexpected exception: " + t);
|
||
+ t.printStackTrace();
|
||
+ throw t;
|
||
}
|
||
- VirtualMachine.attach("simple:1234").detach();
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * Runs the actual tests in the nested class TestMain.
|
||
+ * We need to run the tests in a separate process,
|
||
+ * because we need to add to the classpath.
|
||
+ */
|
||
+ private static void runTests() throws Throwable {
|
||
+ final String sep = File.separator;
|
||
+ String testClassPath = System.getProperty("test.class.path", "");
|
||
+ String testClasses = System.getProperty("test.classes", "") + sep;
|
||
+ String jdkLib = System.getProperty("test.jdk", ".") + sep + "lib" + sep;
|
||
+
|
||
+ // Need to add SimpleProvider.jar and tools.jar to classpath.
|
||
+ String classpath =
|
||
+ testClassPath + File.pathSeparator +
|
||
+ testClasses + "SimpleProvider.jar" + File.pathSeparator +
|
||
+ jdkLib + "tools.jar";
|
||
+
|
||
+ String[] args = {
|
||
+ "-classpath",
|
||
+ classpath,
|
||
+ "ProviderTest$TestMain" };
|
||
+ OutputAnalyzer output = ProcessTools.executeTestJvm(args);
|
||
+ output.shouldHaveExitValue(0);
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * Will build the SimpleProvider.jar.
|
||
+ */
|
||
+ private static void buildJar() throws Throwable {
|
||
+ final String sep = File.separator;
|
||
+ String testClasses = System.getProperty("test.classes", "?") + sep;
|
||
+ String testSrc = System.getProperty("test.src", "?") + sep;
|
||
+ String serviceDir = "META-INF" + sep + "services" + sep;
|
||
+
|
||
+ RunnerUtil.createJar(
|
||
+ "-cf", testClasses + "SimpleProvider.jar",
|
||
+ "-C", testClasses, "SimpleProvider.class",
|
||
+ "-C", testClasses, "SimpleVirtualMachine.class",
|
||
+ "-C", testSrc,
|
||
+ serviceDir + "com.sun.tools.attach.spi.AttachProvider");
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * This is the actual test code that attaches to the running Application.
|
||
+ * This class is run in a separate process.
|
||
+ */
|
||
+ public static class TestMain {
|
||
+ public static void main(String args[]) throws Exception {
|
||
+ // deal with internal builds where classes are loaded from the
|
||
+ // 'classes' directory rather than rt.jar
|
||
+ ClassLoader cl = AttachProvider.class.getClassLoader();
|
||
+ if (cl != ClassLoader.getSystemClassLoader()) {
|
||
+ System.out.println("Attach API not loaded by system class loader - test skipped");
|
||
+ return;
|
||
+ }
|
||
+ VirtualMachine.attach("simple:1234").detach();
|
||
+ }
|
||
}
|
||
}
|
||
--- ./jdk/test/com/sun/tools/attach/ProviderTests.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
@@ -1,51 +0,0 @@
|
||
-#
|
||
-# Copyright (c) 2005, 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.
|
||
-#
|
||
-# 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.
|
||
-#
|
||
-
|
||
-# @test
|
||
-# @bug 6173612
|
||
-# @summary AttachProvider unit tests
|
||
-#
|
||
-# @build ProviderTest SimpleProvider
|
||
-# @run shell ProviderTests.sh
|
||
-
|
||
-if [ "${TESTSRC}" = "" ]
|
||
-then
|
||
- echo "TESTSRC not set. Test cannot execute. Failed."
|
||
- exit 1
|
||
-fi
|
||
-
|
||
-. ${TESTSRC}/CommonSetup.sh
|
||
-
|
||
-echo "Creating JAR file ..."
|
||
-
|
||
-$JAR -cf ${TESTCLASSES}/SimpleProvider.jar \
|
||
- -C ${TESTCLASSES} SimpleProvider.class \
|
||
- -C ${TESTCLASSES} SimpleVirtualMachine.class \
|
||
- -C "${TESTSRC}" META-INF/services/com.sun.tools.attach.spi.AttachProvider
|
||
-
|
||
-echo "Running test ..."
|
||
-
|
||
-$JAVA -classpath \
|
||
- "${TESTCLASSES}${PS}${TESTCLASSES}/SimpleProvider.jar${PS}${TESTJAVA}/lib/tools.jar" \
|
||
- ProviderTest
|
||
-
|
||
--- ./jdk/test/com/sun/tools/attach/RedefineAgent.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/com/sun/tools/attach/RedefineAgent.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -43,15 +43,15 @@
|
||
public class RedefineAgent implements ClassFileTransformer {
|
||
|
||
static byte[] classfilebytes;
|
||
- static final String targetName = "java.math.BigInteger";
|
||
- static final String targetNameSlashes = "java/math/BigInteger";
|
||
+ static final String targetName = "RedefineDummy";
|
||
+ static final String targetNameSlashes = "RedefineDummy";
|
||
static boolean gotRedefineTransform = false;
|
||
|
||
// test transform and capture class bytes for redefine
|
||
public byte[] transform(ClassLoader loader,
|
||
String className,
|
||
Class<?> classBeingRedefined,
|
||
- ProtectionDomain protectionDomain,
|
||
+ ProtectionDomain protectionDomain,
|
||
byte[] classfileBuffer) {
|
||
if (className.equals(targetNameSlashes)) {
|
||
if (classBeingRedefined == null) {
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/com/sun/tools/attach/RedefineDummy.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,31 @@
|
||
+/*
|
||
+ * Copyright (c) 2013, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * Simple dummy class used to test class retransform.
|
||
+ */
|
||
+public class RedefineDummy {
|
||
+ public String toString() {
|
||
+ return "RedefineDummy";
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/com/sun/tools/attach/RunnerUtil.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,195 @@
|
||
+/*
|
||
+ * Copyright (c) 2013, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+import java.io.IOException;
|
||
+import java.io.File;
|
||
+import java.nio.file.Files;
|
||
+import java.util.Arrays;
|
||
+import java.util.regex.Pattern;
|
||
+import java.util.regex.Matcher;
|
||
+
|
||
+import jdk.testlibrary.OutputAnalyzer;
|
||
+import jdk.testlibrary.ProcessTools;
|
||
+import jdk.testlibrary.Utils;
|
||
+import jdk.testlibrary.ProcessThread;
|
||
+
|
||
+/*
|
||
+ * Utility functions for test runners.
|
||
+ * (Test runner = class that launch a test)
|
||
+ */
|
||
+public class RunnerUtil {
|
||
+
|
||
+ /**
|
||
+ * The Application process must be run concurrently with our tests since
|
||
+ * the tests will attach to the Application.
|
||
+ * We will run the Application process in a separate thread.
|
||
+ *
|
||
+ * The Application must be started with flag "-Xshare:off" for the Retransform
|
||
+ * test in TestBasics to pass on all platforms.
|
||
+ *
|
||
+ * The Application will write its pid and shutdownPort in the given outFile.
|
||
+ */
|
||
+ public static ProcessThread startApplication(String outFile, String... additionalOpts) throws Throwable {
|
||
+ String classpath = System.getProperty("test.class.path", ".");
|
||
+ String[] myArgs = concat(additionalOpts, new String [] { "-Dattach.test=true", "-classpath", classpath, "Application", outFile });
|
||
+ String[] args = Utils.addTestJavaOpts(myArgs);
|
||
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(args);
|
||
+ ProcessThread pt = new ProcessThread("runApplication", pb);
|
||
+ pt.start();
|
||
+ return pt;
|
||
+ }
|
||
+
|
||
+ public static String[] concat(String[] a, String[] b) {
|
||
+ if (a == null) {
|
||
+ return b;
|
||
+ }
|
||
+ if (b == null) {
|
||
+ return a;
|
||
+ }
|
||
+ int aLen = a.length;
|
||
+ int bLen = b.length;
|
||
+ String[] c = new String[aLen + bLen];
|
||
+ System.arraycopy(a, 0, c, 0, aLen);
|
||
+ System.arraycopy(b, 0, c, aLen, bLen);
|
||
+ return c;
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * Will stop the running Application.
|
||
+ * First tries to shutdown nicely by connecting to the shut down port.
|
||
+ * If that fails, the process will be killed hard with stopProcess().
|
||
+ *
|
||
+ * If the nice shutdown fails, then an Exception is thrown and the test should fail.
|
||
+ *
|
||
+ * @param port The shut down port.
|
||
+ * @param processThread The process to stop.
|
||
+ */
|
||
+ public static void stopApplication(int port, ProcessThread processThread) throws Throwable {
|
||
+ if (processThread == null) {
|
||
+ System.out.println("RunnerUtil.stopApplication ignored since proc is null");
|
||
+ return;
|
||
+ }
|
||
+ try {
|
||
+ System.out.println("RunnerUtil.stopApplication waiting to for shutdown");
|
||
+ OutputAnalyzer output = ProcessTools.executeTestJvm(
|
||
+ "-classpath",
|
||
+ System.getProperty("test.class.path", "."),
|
||
+ "Shutdown",
|
||
+ Integer.toString(port));
|
||
+ // Verify that both the Shutdown command and the Application finished ok.
|
||
+ output.shouldHaveExitValue(0);
|
||
+ processThread.joinAndThrow();
|
||
+ processThread.getOutput().shouldHaveExitValue(0);
|
||
+ } catch (Throwable t) {
|
||
+ System.out.println("RunnerUtil.stopApplication failed. Will kill it hard: " + t);
|
||
+ processThread.stopProcess();
|
||
+ throw t;
|
||
+ }
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * Creates a jar file.
|
||
+ * @param args Command to the jar tool.
|
||
+ */
|
||
+ public static void createJar(String... args) {
|
||
+ System.out.println("Running: jar " + Arrays.toString(args));
|
||
+ sun.tools.jar.Main jar = new sun.tools.jar.Main(System.out, System.err, "jar");
|
||
+ if (!jar.run(args)) {
|
||
+ throw new RuntimeException("jar failed: args=" + Arrays.toString(args));
|
||
+ }
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * Read process info for the running Application.
|
||
+ * The Application writes its info to a file with this format:
|
||
+ * shutdownPort=42994
|
||
+ * pid=19597
|
||
+ * done
|
||
+ *
|
||
+ * The final "done" is used to make sure the complete file has been written
|
||
+ * before we try to read it.
|
||
+ * This function will wait until the file is available.
|
||
+ *
|
||
+ * @param filename Path to file to read.
|
||
+ * @return The ProcessInfo containing pid and shutdownPort.
|
||
+ */
|
||
+ public static ProcessInfo readProcessInfo(String filename) throws Throwable {
|
||
+ System.out.println("Reading port and pid from file: " + filename);
|
||
+ File file = new File(filename);
|
||
+ String content = null;
|
||
+
|
||
+ // Read file or wait for it to be created.
|
||
+ while (true) {
|
||
+ content = readFile(file);
|
||
+ if (content != null && content.indexOf("done") >= 0) {
|
||
+ break;
|
||
+ }
|
||
+ Thread.sleep(100);
|
||
+ }
|
||
+
|
||
+ ProcessInfo info = new ProcessInfo();
|
||
+ // search for a line with format: key=nnn
|
||
+ Pattern pattern = Pattern.compile("(\\w*)=([0-9]+)\\r?\\n");
|
||
+ Matcher matcher = pattern.matcher(content);
|
||
+ while (matcher.find()) {
|
||
+ String key = matcher.group(1);
|
||
+ int value = Integer.parseInt(matcher.group(2));
|
||
+ if ("pid".equals(key)) {
|
||
+ info.pid = value;
|
||
+ } else if ("shutdownPort".equals(key)) {
|
||
+ info.shutdownPort = value;
|
||
+ }
|
||
+ }
|
||
+ System.out.println("processInfo.pid:" + info.pid);
|
||
+ System.out.println("processInfo.shutdownPort:" + info.shutdownPort);
|
||
+ return info;
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * Read the content of a file.
|
||
+ * @param file The file to read.
|
||
+ * @return The file content or null if file does not exists.
|
||
+ */
|
||
+ public static String readFile(File file) throws IOException {
|
||
+ if (!file.exists()) {
|
||
+ return null;
|
||
+ }
|
||
+ try {
|
||
+ byte[] bytes = Files.readAllBytes(file.toPath());
|
||
+ String content = new String(bytes);
|
||
+ return content;
|
||
+ } catch (IOException e) {
|
||
+ e.printStackTrace();
|
||
+ throw e;
|
||
+ }
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * Helper class with info of the running Application.
|
||
+ */
|
||
+ public static class ProcessInfo {
|
||
+ public int pid = -1;
|
||
+ public int shutdownPort = -1;
|
||
+ }
|
||
+
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/com/sun/tools/attach/TempDirTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,169 @@
|
||
+/*
|
||
+ * Copyright (c) 2014 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+import com.sun.tools.attach.*;
|
||
+
|
||
+import java.nio.file.Files;
|
||
+import java.nio.file.Path;
|
||
+import java.util.Properties;
|
||
+import java.util.List;
|
||
+import java.io.File;
|
||
+
|
||
+import jdk.testlibrary.OutputAnalyzer;
|
||
+import jdk.testlibrary.ProcessTools;
|
||
+import jdk.testlibrary.ProcessThread;
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 8033104
|
||
+ * @summary Test to make sure attach and jvmstat works correctly when java.io.tmpdir is set
|
||
+ * @library /lib/testlibrary
|
||
+ * @run build Application Shutdown RunnerUtil
|
||
+ * @run main/timeout=10 TempDirTest
|
||
+ */
|
||
+
|
||
+public class TempDirTest {
|
||
+
|
||
+ public static void main(String args[]) throws Throwable {
|
||
+
|
||
+ Path clientTmpDir = Files.createTempDirectory("TempDirTest-client");
|
||
+ clientTmpDir.toFile().deleteOnExit();
|
||
+ Path targetTmpDir = Files.createTempDirectory("TempDirTest-target");
|
||
+ targetTmpDir.toFile().deleteOnExit();
|
||
+
|
||
+ // run the test with all possible combinations of setting java.io.tmpdir
|
||
+ runExperiment(null, null);
|
||
+ runExperiment(clientTmpDir, null);
|
||
+ runExperiment(clientTmpDir, targetTmpDir);
|
||
+ runExperiment(null, targetTmpDir);
|
||
+
|
||
+ }
|
||
+
|
||
+ private static int counter = 0;
|
||
+
|
||
+ /*
|
||
+ * The actual test is in the nested class TestMain.
|
||
+ * The responsibility of this class is to:
|
||
+ * 1. Start the Application class in a separate process.
|
||
+ * 2. Find the pid and shutdown port of the running Application.
|
||
+ * 3. Launches the tests in nested class TestMain that will attach to the Application.
|
||
+ * 4. Shut down the Application.
|
||
+ */
|
||
+ public static void runExperiment(Path clientTmpDir, Path targetTmpDir) throws Throwable {
|
||
+
|
||
+ System.out.print("### Running tests with overridden tmpdir for");
|
||
+ System.out.print(" client: " + (clientTmpDir == null ? "no" : "yes"));
|
||
+ System.out.print(" target: " + (targetTmpDir == null ? "no" : "yes"));
|
||
+ System.out.println(" ###");
|
||
+
|
||
+ final String pidFile = "TempDirTest.Application.pid-" + counter++;
|
||
+ ProcessThread processThread = null;
|
||
+ RunnerUtil.ProcessInfo info = null;
|
||
+ try {
|
||
+ String[] tmpDirArg = null;
|
||
+ if (targetTmpDir != null) {
|
||
+ tmpDirArg = new String[] {"-Djava.io.tmpdir=" + targetTmpDir};
|
||
+ }
|
||
+ processThread = RunnerUtil.startApplication(pidFile, tmpDirArg);
|
||
+ info = RunnerUtil.readProcessInfo(pidFile);
|
||
+ launchTests(info.pid, clientTmpDir);
|
||
+ } catch (Throwable t) {
|
||
+ System.out.println("TempDirTest got unexpected exception: " + t);
|
||
+ t.printStackTrace();
|
||
+ throw t;
|
||
+ } finally {
|
||
+ // Make sure the Application process is stopped.
|
||
+ RunnerUtil.stopApplication(info.shutdownPort, processThread);
|
||
+ }
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * Runs the actual tests in nested class TestMain.
|
||
+ * The reason for running the tests in a separate process
|
||
+ * is that we need to modify the class path and
|
||
+ * the -Djava.io.tmpdir property.
|
||
+ */
|
||
+ private static void launchTests(int pid, Path clientTmpDir) throws Throwable {
|
||
+ final String sep = File.separator;
|
||
+
|
||
+ // Need to add jdk/lib/tools.jar to classpath.
|
||
+ String classpath =
|
||
+ System.getProperty("test.class.path", "") + File.pathSeparator +
|
||
+ System.getProperty("test.jdk", ".") + sep + "lib" + sep + "tools.jar";
|
||
+
|
||
+ String[] tmpDirArg = null;
|
||
+ if (clientTmpDir != null) {
|
||
+ tmpDirArg = new String [] {"-Djava.io.tmpdir=" + clientTmpDir};
|
||
+ }
|
||
+
|
||
+ // Arguments : [-Djava.io.tmpdir=] -classpath cp TempDirTest$TestMain pid
|
||
+ String[] args = RunnerUtil.concat(
|
||
+ tmpDirArg,
|
||
+ new String[] {
|
||
+ "-classpath",
|
||
+ classpath,
|
||
+ "TempDirTest$TestMain",
|
||
+ Integer.toString(pid) });
|
||
+ OutputAnalyzer output = ProcessTools.executeTestJvm(args);
|
||
+ output.shouldHaveExitValue(0);
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * This is the actual test. It will attach to the running Application
|
||
+ * and perform a number of basic attach tests.
|
||
+ */
|
||
+ public static class TestMain {
|
||
+ public static void main(String args[]) throws Exception {
|
||
+ String pid = args[0];
|
||
+
|
||
+ // Test 1 - list method should list the target VM
|
||
+ System.out.println(" - Test: VirtualMachine.list");
|
||
+ List<VirtualMachineDescriptor> l = VirtualMachine.list();
|
||
+ boolean found = false;
|
||
+ for (VirtualMachineDescriptor vmd: l) {
|
||
+ if (vmd.id().equals(pid)) {
|
||
+ found = true;
|
||
+ break;
|
||
+ }
|
||
+ }
|
||
+ if (found) {
|
||
+ System.out.println(" - " + pid + " found.");
|
||
+ } else {
|
||
+ throw new RuntimeException(pid + " not found in VM list");
|
||
+ }
|
||
+
|
||
+ // Test 2 - try to attach and verify connection
|
||
+
|
||
+ System.out.println(" - Attaching to application ...");
|
||
+ VirtualMachine vm = VirtualMachine.attach(pid);
|
||
+
|
||
+ System.out.println(" - Test: system properties in target VM");
|
||
+ Properties props = vm.getSystemProperties();
|
||
+ String value = props.getProperty("attach.test");
|
||
+ if (value == null || !value.equals("true")) {
|
||
+ throw new RuntimeException("attach.test property not set");
|
||
+ }
|
||
+ System.out.println(" - attach.test property set as expected");
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- ./jdk/test/com/sun/tools/attach/java.policy.allow Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/com/sun/tools/attach/java.policy.allow Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -13,7 +13,6 @@
|
||
permission java.lang.RuntimePermission "accessClassInPackage.sun.jvmstat.monitor";
|
||
permission java.lang.RuntimePermission "loadLibrary.attach";
|
||
permission java.util.PropertyPermission "sun.jvmstat.*", "read";
|
||
- permission java.util.PropertyPermission "java.io.tmpdir", "read";
|
||
|
||
/* to read configuration file in META-INF/services, and write/delete .attach_pid<pid> */
|
||
permission java.io.FilePermission "<<ALL FILES>>", "read,write,delete";
|
||
--- ./jdk/test/com/sun/tools/attach/java.policy.deny Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/com/sun/tools/attach/java.policy.deny Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -11,7 +11,6 @@
|
||
permission java.lang.RuntimePermission "accessClassInPackage.sun.tools.attach";
|
||
permission java.lang.RuntimePermission "loadLibrary.attach";
|
||
permission java.util.PropertyPermission "sun.jvmstat.*", "read";
|
||
- permission java.util.PropertyPermission "java.io.tmpdir", "read";
|
||
|
||
/* to read configuration file in META-INF/services, and write/delete .attach_pid<pid> */
|
||
permission java.io.FilePermission "<<ALL FILES>>", "read,write,delete";
|
||
--- ./jdk/test/demo/zipfs/basic.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/demo/zipfs/basic.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -40,7 +40,7 @@
|
||
|
||
OS=`uname -s`
|
||
case "$OS" in
|
||
- Windows_* )
|
||
+ Windows_* | CYGWIN* )
|
||
CLASSPATH="${TESTCLASSES};${ZIPFS}"
|
||
;;
|
||
* )
|
||
--- ./jdk/test/java/awt/FileDialog/SaveFileNameOverrideTest/SaveFileNameOverrideTest.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/java/awt/FileDialog/SaveFileNameOverrideTest/SaveFileNameOverrideTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,6 +1,29 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
/*
|
||
test
|
||
- @bug 6998877
|
||
+ @bug 6998877 8022531
|
||
@summary After double-click on the folder names, FileNameOverrideTest FAILED
|
||
@author Sergey.Bylokhov@oracle.com area=awt.filedialog
|
||
@library ../../regtesthelpers
|
||
@@ -36,7 +59,8 @@
|
||
|
||
String[] instructions = {
|
||
"1) Click on 'Show File Dialog' button. A file dialog will come up.",
|
||
- "2) Double-click on '" + clickDirName + "' and click OK.",
|
||
+ "2) Double-click on '" + clickDirName + "' and click a confirmation",
|
||
+ " button, it can be 'OK', 'Save' or any other platform-dependent name.",
|
||
"3) See result of the test below"
|
||
};
|
||
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/awt/Focus/8044614/TestApplet.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,34 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+import java.applet.Applet;
|
||
+import java.awt.TextField;
|
||
+
|
||
+public class TestApplet extends Applet {
|
||
+ TextField textField = null;
|
||
+
|
||
+ public void init() {
|
||
+ textField = new TextField(25);
|
||
+ add(textField);
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/awt/Focus/8044614/applet1.html Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,37 @@
|
||
+<!--
|
||
+ Copyright (c) 2014, 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.
|
||
+
|
||
+ 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.
|
||
+-->
|
||
+
|
||
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||
+<html lang="en">
|
||
+<head>
|
||
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||
+ <title>First Applet</title>
|
||
+</head>
|
||
+ <body>
|
||
+ <applet
|
||
+ code="TestApplet.class"
|
||
+ width="400"
|
||
+ height="200"/>
|
||
+ </applet>
|
||
+ </body>
|
||
+</html>
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/awt/Focus/8044614/applet2.html Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,37 @@
|
||
+<!--
|
||
+ Copyright (c) 2014, 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.
|
||
+
|
||
+ 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.
|
||
+-->
|
||
+
|
||
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||
+<html lang="en">
|
||
+<head>
|
||
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||
+ <title>Second Applet</title>
|
||
+</head>
|
||
+ <body>
|
||
+ <applet
|
||
+ code="TestApplet.class"
|
||
+ width="400"
|
||
+ height="200"/>
|
||
+ </applet>
|
||
+ </body>
|
||
+</html>
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/awt/Focus/8044614/bug8044614.html Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,36 @@
|
||
+<!--
|
||
+ Copyright (c) 2014, 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.
|
||
+
|
||
+ 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.
|
||
+-->
|
||
+
|
||
+<html>
|
||
+<head>
|
||
+<title>bug8044614</title>
|
||
+</head>
|
||
+<body>
|
||
+
|
||
+<h1>bug8044614</h1>
|
||
+
|
||
+<p> See the dialog box (usually in upper left corner) for instructions</p>
|
||
+
|
||
+<APPLET CODE="bug8044614.class" WIDTH=200 HEIGHT=200></APPLET>
|
||
+</body>
|
||
+</html>
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/awt/Focus/8044614/bug8044614.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,56 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 8044614
|
||
+ * @summary Tests focus transfer between applets in different browser windows
|
||
+ * @author Dmitry Markov
|
||
+ * @library ../../regtesthelpers
|
||
+ * @build Sysout
|
||
+ * @run applet/manual=yesno bug8044614.html
|
||
+ */
|
||
+
|
||
+import javax.swing.JApplet;
|
||
+
|
||
+import test.java.awt.regtesthelpers.Sysout;
|
||
+
|
||
+public class bug8044614 extends JApplet {
|
||
+ public void init() {
|
||
+ String[] instructions = {
|
||
+ "(1) Go to the test directory test/java/awt/Focus/8044614",
|
||
+ "(2) Compile source file: javac TestApplet.java",
|
||
+ "(3) Open the \"main.html\" file in the browser",
|
||
+ "(4) Click the \"Start First Applet\" link to open the first applet window",
|
||
+ "(5) Wait for the applet to start (press \"Run\" to any security alerts that appears)",
|
||
+ "(6) Enter \"Hello\" to the text field",
|
||
+ "(7) Click the \"Start Second Applet)\" link to open the second applet window",
|
||
+ "(8) Wait for the applet to start (press \"Run\" to any security alerts that appears)",
|
||
+ "(9) Enter \"World\" to the text field",
|
||
+ "(10) Go back to the first applet and make sure you can enter some text to the text field"
|
||
+ };
|
||
+
|
||
+ Sysout.createDialogWithInstructions(instructions);
|
||
+ }
|
||
+}
|
||
+
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/awt/Focus/8044614/main.html Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,46 @@
|
||
+<!--
|
||
+ Copyright (c) 2014, 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.
|
||
+
|
||
+ 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.
|
||
+-->
|
||
+
|
||
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||
+<html lang="en">
|
||
+<head>
|
||
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||
+ <title>Applet Focus Bug main window</title>
|
||
+ <script language="JavaScript">
|
||
+ function openWindow(strURL, strWindowName, strWindowFeatures) {
|
||
+ var win = window.open(strURL, strWindowName, strWindowFeatures);
|
||
+ }
|
||
+ </script>
|
||
+
|
||
+</head>
|
||
+ <body>
|
||
+ <table>
|
||
+ <tr>
|
||
+ <td><a href="javascript:openWindow('applet1.html', '', 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=400, height=400, top=0, left=0, hide=no')">Start First Applet</a></td>
|
||
+ </tr>
|
||
+ <tr>
|
||
+ <td><a href="javascript:openWindow('applet2.html', '', 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=400, height=400, top=0, left=350, hide=no')">Start Second Applet</a></td>
|
||
+ </tr>
|
||
+ </table>
|
||
+ </body>
|
||
+</html>
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/awt/Focus/NPEInKFMOnButtonClickInDialogTest/NPEInKFMOnButtonClickInDialogTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,135 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/* @test
|
||
+ @bug 8061954
|
||
+ @summary Button does not get the focus on a mouse click, and NPE is thrown in KFM
|
||
+ @author Anton Litvinov
|
||
+*/
|
||
+
|
||
+import java.awt.Container;
|
||
+import java.awt.FlowLayout;
|
||
+import java.awt.Frame;
|
||
+import java.awt.Point;
|
||
+import java.awt.Robot;
|
||
+import java.awt.Toolkit;
|
||
+import java.awt.event.InputEvent;
|
||
+import javax.swing.JButton;
|
||
+import javax.swing.JDialog;
|
||
+import javax.swing.SwingUtilities;
|
||
+
|
||
+import sun.awt.OSInfo;
|
||
+import sun.awt.SunToolkit;
|
||
+
|
||
+public class NPEInKFMOnButtonClickInDialogTest {
|
||
+ private static Frame frame = null;
|
||
+ private static JDialog dialog = null;
|
||
+ private static JButton cancelBtn = null;
|
||
+ private static Point clickPoint = null;
|
||
+ private static volatile Boolean cancelBtnIsFocused = null;
|
||
+
|
||
+ public static void main(String[] args) {
|
||
+ OSInfo.OSType osType = OSInfo.getOSType();
|
||
+ if ((osType != OSInfo.OSType.LINUX) && (osType != OSInfo.OSType.SOLARIS)) {
|
||
+ System.out.println("This test is only for Linux OS and Solaris OS.");
|
||
+ return;
|
||
+ }
|
||
+
|
||
+ ThreadGroup mainThreadGroup = Thread.currentThread().getThreadGroup();
|
||
+ Thread t = new Thread(new ThreadGroup(mainThreadGroup, "TestThreadGroup"), new Runnable() {
|
||
+ public void run() {
|
||
+ try {
|
||
+ SunToolkit.createNewAppContext();
|
||
+ doTest();
|
||
+ } catch (Exception e) {
|
||
+ e.printStackTrace();
|
||
+ }
|
||
+ }
|
||
+ });
|
||
+ t.start();
|
||
+
|
||
+ try {
|
||
+ t.join();
|
||
+ } catch (InterruptedException ie) {
|
||
+ ie.printStackTrace();
|
||
+ }
|
||
+
|
||
+ if (cancelBtnIsFocused == null) {
|
||
+ throw new RuntimeException("Test failed for an unknown reason, look at error log.");
|
||
+ } else if (cancelBtnIsFocused.booleanValue() == false) {
|
||
+ throw new RuntimeException("'Cancel' button did not become a focus owner.");
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private static void doTest() throws Exception {
|
||
+ final SunToolkit toolkit = (SunToolkit)Toolkit.getDefaultToolkit();
|
||
+ final Robot robot = new Robot();
|
||
+ robot.setAutoDelay(50);
|
||
+
|
||
+ try {
|
||
+ frame = new Frame("Frame of NPEInKFMOnButtonClickInDialogTest");
|
||
+ frame.setSize(100, 100);
|
||
+ frame.setVisible(true);
|
||
+ toolkit.realSync();
|
||
+
|
||
+ SwingUtilities.invokeAndWait(new Runnable() {
|
||
+ public void run() {
|
||
+ dialog = new JDialog(frame,
|
||
+ "Dialog of NPEInKFMOnButtonClickInDialogTest", false);
|
||
+ Container content = dialog.getContentPane();
|
||
+ content.setLayout(new FlowLayout());
|
||
+ content.add(new JButton("Run"));
|
||
+ content.add(cancelBtn = new JButton("Cancel"));
|
||
+ dialog.pack();
|
||
+ dialog.setVisible(true);
|
||
+ }
|
||
+ });
|
||
+ toolkit.realSync();
|
||
+
|
||
+ SwingUtilities.invokeAndWait(new Runnable() {
|
||
+ public void run() {
|
||
+ Point p = cancelBtn.getLocationOnScreen();
|
||
+ clickPoint = new Point(p.x + cancelBtn.getWidth() / 2,
|
||
+ p.y + cancelBtn.getHeight() / 2);
|
||
+ }
|
||
+ });
|
||
+ robot.mouseMove(clickPoint.x, clickPoint.y);
|
||
+ robot.mousePress(InputEvent.BUTTON1_MASK);
|
||
+ robot.mouseRelease(InputEvent.BUTTON1_MASK);
|
||
+ toolkit.realSync();
|
||
+
|
||
+ SwingUtilities.invokeAndWait(new Runnable() {
|
||
+ public void run() {
|
||
+ cancelBtnIsFocused = cancelBtn.isFocusOwner();
|
||
+ }
|
||
+ });
|
||
+ } finally {
|
||
+ if (dialog != null) {
|
||
+ dialog.dispose();
|
||
+ }
|
||
+ if (frame != null) {
|
||
+ frame.dispose();
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/awt/Focus/SortingFPT/JDK8048887.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,132 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ @test
|
||
+ @bug 8048887
|
||
+ @summary Tests SortingFTP for an exception caused by the tim-sort algo.
|
||
+ @author anton.tarasov: area=awt.focus
|
||
+ @run main JDK8040632
|
||
+*/
|
||
+
|
||
+import javax.swing.JFrame;
|
||
+import javax.swing.JPanel;
|
||
+import javax.swing.SwingUtilities;
|
||
+import java.awt.Dimension;
|
||
+import java.awt.Color;
|
||
+import java.awt.GridBagLayout;
|
||
+import java.awt.GridBagConstraints;
|
||
+import java.awt.event.WindowAdapter;
|
||
+import java.awt.event.WindowEvent;
|
||
+import java.util.concurrent.CountDownLatch;
|
||
+import java.util.concurrent.TimeUnit;
|
||
+
|
||
+public class JDK8048887 {
|
||
+
|
||
+ static volatile boolean passed = true;
|
||
+
|
||
+ public static void main(String[] args) {
|
||
+ JDK8048887 app = new JDK8048887();
|
||
+ app.start();
|
||
+ }
|
||
+
|
||
+ public void start() {
|
||
+ final CountDownLatch latch = new CountDownLatch(1);
|
||
+
|
||
+ SwingUtilities.invokeLater(() -> {
|
||
+ // Catch the original exception which sounds like:
|
||
+ // java.lang.IllegalArgumentException: Comparison method violates its general contract!
|
||
+ Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
|
||
+ public void uncaughtException(Thread t, Throwable e) {
|
||
+ e.printStackTrace();
|
||
+ if (e instanceof IllegalArgumentException) {
|
||
+ passed = false;
|
||
+ latch.countDown();
|
||
+ }
|
||
+ }
|
||
+ });
|
||
+
|
||
+ TestDialog d = new TestDialog();
|
||
+ // It's expected that the dialog is focused on start.
|
||
+ // The listener is called after the FTP completes processing and the bug is reproduced or not.
|
||
+ d.addWindowFocusListener(new WindowAdapter() {
|
||
+ public void windowGainedFocus(WindowEvent e) {
|
||
+ latch.countDown();
|
||
+ }
|
||
+ });
|
||
+ d.setVisible(true);
|
||
+ });
|
||
+
|
||
+ try {
|
||
+ latch.await(5, TimeUnit.SECONDS);
|
||
+ } catch (InterruptedException e) {
|
||
+ e.printStackTrace();
|
||
+ }
|
||
+
|
||
+ if (passed)
|
||
+ System.out.println("Test passed.");
|
||
+ else
|
||
+ throw new RuntimeException("Test failed!");
|
||
+ }
|
||
+}
|
||
+
|
||
+class TestDialog extends JFrame {
|
||
+
|
||
+ // The layout of the components reproduces the transitivity issue
|
||
+ // with SortingFocusTraversalPolicy relying on the tim-sort algo.
|
||
+
|
||
+ private static int[] Xs = new int[] {71, 23, 62, 4, 79, 39, 34, 9, 84, 58, 30, 34, 38, 15, 69, 10, 44, 95, 70, 54,
|
||
+ 44, 62, 77, 64, 70, 83, 31, 48, 96, 54, 40, 3, 60, 58, 3, 20, 94, 54, 26, 19, 48, 47, 12, 70, 86, 43, 71, 97, 19,
|
||
+ 69, 90, 22, 43, 76, 10, 60, 29, 49, 9, 9, 15, 73, 85, 80, 81, 35, 87, 43, 17, 57, 38, 44, 29, 86, 96, 15, 57, 26,
|
||
+ 27, 78, 26, 87, 43, 6, 4, 16, 57, 99, 32, 86, 96, 5, 50, 69, 12, 4, 36, 84, 71, 60, 22, 46, 11, 44, 87, 3, 23, 14,
|
||
+ 43, 25, 32, 44, 11, 18, 77, 2, 51, 87, 88, 53, 69, 37, 14, 10, 25, 73, 39, 33, 91, 51, 96, 9, 74, 66, 70, 42, 72,
|
||
+ 7, 82, 40, 91, 33, 83, 54, 33, 50, 83, 1, 81, 32, 66, 11, 75, 56, 53, 45, 1, 69, 46, 31, 79, 58, 12, 20, 92, 49,
|
||
+ 50, 90, 33, 8, 43, 93, 72, 78, 9, 56, 84, 60, 30, 39, 33, 88, 84, 56, 49, 47, 4, 90, 57, 6, 23, 96, 37, 88, 22, 79,
|
||
+ 35, 80, 45, 55};
|
||
+
|
||
+ public TestDialog() {
|
||
+ JPanel panel = new JPanel(new GridBagLayout());
|
||
+ GridBagConstraints gbc = new GridBagConstraints();
|
||
+ for (int i=0; i < Xs.length; i++) {
|
||
+ gbc.gridx = Xs[i];
|
||
+ gbc.gridy = 100 - gbc.gridx;
|
||
+ panel.add(new MyComponent(), gbc);
|
||
+ }
|
||
+ getRootPane().getContentPane().add(panel);
|
||
+ pack();
|
||
+ }
|
||
+
|
||
+ public static class MyComponent extends JPanel {
|
||
+ private final static Dimension SIZE = new Dimension(1,1);
|
||
+
|
||
+ public MyComponent() {
|
||
+ setBackground(Color.BLACK);
|
||
+ setOpaque(true);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public Dimension getPreferredSize() {
|
||
+ return SIZE;
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/awt/List/ListGarbageCollectionTest/AwtListGarbageCollectionTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,72 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/**
|
||
+ * @test
|
||
+ * @bug 8040076
|
||
+ * @summary AwtList not garbage collected
|
||
+ * @run main/othervm -Xmx100m AwtListGarbageCollectionTest
|
||
+ */
|
||
+
|
||
+import java.awt.*;
|
||
+import java.awt.event.WindowAdapter;
|
||
+import java.awt.event.WindowEvent;
|
||
+import java.lang.ref.WeakReference;
|
||
+
|
||
+public class AwtListGarbageCollectionTest {
|
||
+ public static void main(String[] args) {
|
||
+ Frame frame = new Frame("List leak test");
|
||
+ try {
|
||
+ test(frame);
|
||
+ } finally {
|
||
+ frame.dispose();
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private static void test(Frame frame) {
|
||
+ WeakReference<List> weakListRef = null;
|
||
+ try {
|
||
+ frame.setSize(300, 200);
|
||
+ frame.setVisible(true);
|
||
+
|
||
+ List strongListRef = new List();
|
||
+ frame.add(strongListRef);
|
||
+ strongListRef.setMultipleMode(true);
|
||
+ frame.remove(strongListRef);
|
||
+ weakListRef = new WeakReference<List>(strongListRef);
|
||
+ strongListRef = null;
|
||
+
|
||
+ //make out of memory to force gc
|
||
+ String veryLongString = new String(new char[100]);
|
||
+ while (true) {
|
||
+ veryLongString += veryLongString;
|
||
+ }
|
||
+ } catch (OutOfMemoryError e) {
|
||
+ if (weakListRef == null) {
|
||
+ throw new RuntimeException("Weak list ref wasn't created");
|
||
+ } else if (weakListRef.get() != null) {
|
||
+ throw new RuntimeException("List wasn't garbage collected");
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/awt/Mouse/MouseComboBoxTest/MouseComboBoxTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,138 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 8032872
|
||
+ * @summary Tests JComboBox selection via the mouse
|
||
+ * @author Dmitry Markov
|
||
+ */
|
||
+import sun.awt.SunToolkit;
|
||
+
|
||
+import javax.swing.*;
|
||
+import javax.swing.plaf.basic.BasicComboPopup;
|
||
+import javax.swing.plaf.basic.ComboPopup;
|
||
+import javax.swing.plaf.metal.MetalComboBoxUI;
|
||
+import javax.swing.plaf.metal.MetalLookAndFeel;
|
||
+import java.awt.*;
|
||
+import java.awt.event.InputEvent;
|
||
+import java.awt.event.KeyEvent;
|
||
+
|
||
+public class MouseComboBoxTest {
|
||
+ private static final String[] items = {"One", "Two", "Three", "Four", "Five"};
|
||
+
|
||
+ private static SunToolkit toolkit = null;
|
||
+ private static Robot robot = null;
|
||
+ private static JFrame frame = null;
|
||
+ private static JComboBox comboBox = null;
|
||
+ private static MyComboBoxUI comboBoxUI = null;
|
||
+
|
||
+ public static void main(String[] args) throws Exception {
|
||
+ toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
|
||
+ robot = new Robot();
|
||
+ robot.setAutoDelay(50);
|
||
+
|
||
+ UIManager.setLookAndFeel(new MetalLookAndFeel());
|
||
+ SwingUtilities.invokeAndWait(new Runnable() {
|
||
+ @Override
|
||
+ public void run() {
|
||
+ createAndShowGUI();
|
||
+ }
|
||
+ });
|
||
+ toolkit.realSync();
|
||
+
|
||
+ for (int i = 0; i < items.length; i++) {
|
||
+ // Open popup
|
||
+ robot.keyPress(KeyEvent.VK_DOWN);
|
||
+ robot.keyRelease(KeyEvent.VK_DOWN);
|
||
+ toolkit.realSync();
|
||
+
|
||
+ Point point = getItemPointToClick(i);
|
||
+ robot.mouseMove(point.x, point.y);
|
||
+ robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
|
||
+ robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
|
||
+ toolkit.realSync();
|
||
+
|
||
+ if (i != getSelectedIndex()) {
|
||
+ throw new RuntimeException("Test Failed! Incorrect value of selected index = " + getSelectedIndex() +
|
||
+ ", expected value = " + i);
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private static Point getItemPointToClick(final int item) throws Exception {
|
||
+ final Point[] result = new Point[1];
|
||
+
|
||
+ SwingUtilities.invokeAndWait(new Runnable() {
|
||
+ @Override
|
||
+ public void run() {
|
||
+ BasicComboPopup popup = (BasicComboPopup)comboBoxUI.getComboPopup();
|
||
+ Point point = popup.getLocationOnScreen();
|
||
+ Dimension size = popup.getSize();
|
||
+
|
||
+ int step = size.height / items.length;
|
||
+ point.x += size.width / 2;
|
||
+ point.y += step / 2 + step * item;
|
||
+ result[0] = point;
|
||
+ }
|
||
+ });
|
||
+ return result[0];
|
||
+ }
|
||
+
|
||
+ private static int getSelectedIndex() throws Exception {
|
||
+ final int[] result = new int[1];
|
||
+
|
||
+ SwingUtilities.invokeAndWait(new Runnable() {
|
||
+ @Override
|
||
+ public void run() {
|
||
+ result[0] = comboBox.getSelectedIndex();
|
||
+ }
|
||
+ });
|
||
+ return result[0];
|
||
+ }
|
||
+
|
||
+ private static void createAndShowGUI() {
|
||
+ frame = new JFrame("MouseComboBoxTest");
|
||
+
|
||
+ comboBox = new JComboBox(items);
|
||
+ comboBox.setEditable(true);
|
||
+ comboBoxUI = new MyComboBoxUI();
|
||
+ comboBox.setUI(comboBoxUI);
|
||
+
|
||
+ frame.pack();
|
||
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||
+ frame.setVisible(true);
|
||
+
|
||
+ JWindow window = new JWindow(frame);
|
||
+ window.add(comboBox);
|
||
+ window.pack();
|
||
+ window.setVisible(true);
|
||
+ }
|
||
+
|
||
+ private static class MyComboBoxUI extends MetalComboBoxUI {
|
||
+ public ComboPopup getComboPopup() {
|
||
+ return popup;
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/awt/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,84 @@
|
||
+/*
|
||
+ * Copyright (c) 2013, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+import java.awt.AWTException;
|
||
+import java.awt.Color;
|
||
+import java.awt.Frame;
|
||
+import java.awt.Graphics;
|
||
+import java.awt.Point;
|
||
+import java.awt.Robot;
|
||
+import java.awt.Toolkit;
|
||
+import java.awt.Window;
|
||
+
|
||
+import sun.awt.SunToolkit;
|
||
+
|
||
+/**
|
||
+ * @test
|
||
+ * @bug 8001472
|
||
+ * @summary Background of the window should not depend from the paint()/update()
|
||
+ * @author Sergey Bylokhov
|
||
+ */
|
||
+public final class BackgroundIsNotUpdated extends Window {
|
||
+
|
||
+ public BackgroundIsNotUpdated(final Frame owner) {
|
||
+ super(owner);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void paint(final Graphics ignored) {
|
||
+ // Intentionally left blank
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void update(final Graphics ignored) {
|
||
+ // Intentionally left blank
|
||
+ }
|
||
+
|
||
+ public static void main(final String[] args) throws AWTException {
|
||
+ final Window window = new BackgroundIsNotUpdated(null);
|
||
+ window.setSize(300, 300);
|
||
+ window.setLocationRelativeTo(null);
|
||
+ window.setVisible(true);
|
||
+ sleep();
|
||
+ window.setBackground(Color.GREEN);
|
||
+ sleep();
|
||
+ final Robot robot = new Robot();
|
||
+ robot.setAutoDelay(200);
|
||
+ Point point = window.getLocationOnScreen();
|
||
+ Color color = robot.getPixelColor(point.x + window.getWidth() / 2,
|
||
+ point.y + window.getHeight() / 2);
|
||
+ window.dispose();
|
||
+ if (!color.equals(Color.GREEN)) {
|
||
+ throw new RuntimeException(
|
||
+ "Expected: " + Color.GREEN + " , Actual: " + color);
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private static void sleep() {
|
||
+ try {
|
||
+ ((SunToolkit) Toolkit.getDefaultToolkit()).realSync();
|
||
+ Thread.sleep(1000);
|
||
+ } catch (InterruptedException ignored) {
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- ./jdk/test/java/awt/Window/Grab/GrabTest.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/java/awt/Window/Grab/GrabTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2012, 2014, 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
|
||
@@ -40,7 +40,10 @@
|
||
public class GrabTest {
|
||
private static Frame f;
|
||
private static Frame f1;
|
||
+ private static Frame frame;
|
||
private static Window w;
|
||
+ private static Window window1;
|
||
+ private static Window window2;
|
||
private static Button b;
|
||
|
||
private static Robot robot;
|
||
@@ -98,6 +101,15 @@
|
||
f.setVisible(true);
|
||
w.setVisible(true);
|
||
|
||
+ frame = new Frame();
|
||
+ window1 = new Window(frame);
|
||
+ window1.setBounds(0, 0, 100, 100);
|
||
+ window1.setBackground(Color.blue);
|
||
+
|
||
+ window2 = new Window(window1);
|
||
+ window2.setBounds(0, 0, 50, 50);
|
||
+ window2.setBackground(Color.green);
|
||
+
|
||
tk = (sun.awt.SunToolkit)Toolkit.getDefaultToolkit();
|
||
|
||
try {
|
||
@@ -175,7 +187,7 @@
|
||
|
||
// 6. Check that press on the outside area causes ungrab
|
||
Point loc = f.getLocationOnScreen();
|
||
- robot.mouseMove(loc.x + 100, loc.y + f.getSize().height + 1);
|
||
+ robot.mouseMove(loc.x + 100, loc.y + f.getSize().height + 10);
|
||
Util.waitForIdle(robot);
|
||
robot.mousePress(InputEvent.BUTTON1_MASK);
|
||
robot.delay(50);
|
||
@@ -196,6 +208,24 @@
|
||
passed = false;
|
||
System.err.println("Failure: [7] Window disposal didn't cause ungrab");
|
||
}
|
||
+ ungrabbed = false;
|
||
+
|
||
+
|
||
+ // 8. Check that mouse click on subwindow does not cause ungrab
|
||
+ frame.setVisible(true);
|
||
+ window1.setVisible(true);
|
||
+ window2.setVisible(true);
|
||
+ Util.waitForIdle(robot);
|
||
+
|
||
+ tk.grab(window1);
|
||
+
|
||
+ Util.clickOnComp(window2, robot);
|
||
+ Util.waitForIdle(robot);
|
||
+
|
||
+ if (ungrabbed) {
|
||
+ passed = false;
|
||
+ System.err.println("Failure: [8] Press on the subwindow caused ungrab");
|
||
+ }
|
||
|
||
if (passed) {
|
||
System.out.println("Test passed.");
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/awt/event/InputEvent/EventWhenTest/EventWhenTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,132 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+import sun.awt.SunToolkit;
|
||
+
|
||
+import java.awt.*;
|
||
+import java.awt.event.AWTEventListener;
|
||
+import java.awt.event.InputEvent;
|
||
+import java.awt.event.KeyEvent;
|
||
+import java.awt.event.MouseEvent;
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 8046495
|
||
+ * @summary Verifies that mouse/key events has always increasing 'when' timestamps
|
||
+ * @author Anton Nashatyrev
|
||
+ * @run main EventWhenTest
|
||
+ */
|
||
+public class EventWhenTest {
|
||
+
|
||
+ private static volatile int eventsCount = 0;
|
||
+ private static volatile boolean failed = false;
|
||
+
|
||
+ static {
|
||
+ Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
|
||
+ long lastWhen = 0;
|
||
+
|
||
+ @Override
|
||
+ public void eventDispatched(AWTEvent event) {
|
||
+ long curWhen;
|
||
+ if (event instanceof KeyEvent) {
|
||
+ curWhen = ((KeyEvent) event).getWhen();
|
||
+ } else if (event instanceof MouseEvent) {
|
||
+ curWhen = ((MouseEvent) event).getWhen();
|
||
+ } else {
|
||
+ return;
|
||
+ }
|
||
+
|
||
+ eventsCount++;
|
||
+
|
||
+ if (curWhen < lastWhen) {
|
||
+ System.err.println("FAILED: " + curWhen + " < " + lastWhen +
|
||
+ " for " + event);
|
||
+ failed = true;
|
||
+ } else {
|
||
+ lastWhen = curWhen;
|
||
+ }
|
||
+ }
|
||
+ }, AWTEvent.KEY_EVENT_MASK | AWTEvent.MOUSE_EVENT_MASK);
|
||
+ }
|
||
+
|
||
+ public static void main(String[] args) throws Exception {
|
||
+
|
||
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
|
||
+ Frame frame = new Frame();
|
||
+
|
||
+ try {
|
||
+ Button b = new Button("Button");
|
||
+ frame.setBounds(300, 300, 300, 300);
|
||
+ frame.add(b);
|
||
+ frame.setVisible(true);
|
||
+ toolkit.realSync();
|
||
+
|
||
+ Robot robot = new Robot();
|
||
+ robot.mouseMove((int)frame.getLocationOnScreen().getX() + 150,
|
||
+ (int)frame.getLocationOnScreen().getY() + 150);
|
||
+
|
||
+ eventsCount = 0;
|
||
+ System.out.println("Clicking mouse...");
|
||
+ for (int i = 0; i < 300 && !failed; i++) {
|
||
+ robot.mousePress(InputEvent.BUTTON1_MASK);
|
||
+ robot.mouseRelease(InputEvent.BUTTON1_MASK);
|
||
+ Thread.sleep(10);
|
||
+ b.setLabel("Click: " + i);
|
||
+ }
|
||
+
|
||
+ if (eventsCount == 0) {
|
||
+ throw new RuntimeException("No events were received");
|
||
+ }
|
||
+
|
||
+ if (failed) {
|
||
+ throw new RuntimeException("Test failed.");
|
||
+ }
|
||
+ System.out.println("Clicking mouse done: " + eventsCount + " events.");
|
||
+
|
||
+ b.requestFocusInWindow();
|
||
+ toolkit.realSync();
|
||
+
|
||
+ eventsCount = 0;
|
||
+ System.out.println("Typing a key...");
|
||
+ for (int i = 0; i < 300 && !failed; i++) {
|
||
+ robot.keyPress(KeyEvent.VK_A);
|
||
+ robot.keyRelease(KeyEvent.VK_A);
|
||
+ Thread.sleep(10);
|
||
+ b.setLabel("Type: " + i);
|
||
+ }
|
||
+ System.out.println("Key typing done: " + eventsCount + " events.");
|
||
+
|
||
+ if (eventsCount == 0) {
|
||
+ throw new RuntimeException("No events were received");
|
||
+ }
|
||
+
|
||
+ if (failed) {
|
||
+ throw new RuntimeException("Test failed.");
|
||
+ }
|
||
+
|
||
+ System.out.println("Success!");
|
||
+ } finally {
|
||
+ frame.dispose();
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- ./jdk/test/java/awt/event/KeyEvent/SwallowKeyEvents/SwallowKeyEvents.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/java/awt/event/KeyEvent/SwallowKeyEvents/SwallowKeyEvents.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2012, 2014, 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
|
||
@@ -23,7 +23,7 @@
|
||
|
||
/*
|
||
@test
|
||
- @bug 7154072
|
||
+ @bug 7154072 7161320
|
||
@summary Tests that key events with modifiers are not swallowed.
|
||
@author anton.tarasov: area=awt.focus
|
||
@library ../../../regtesthelpers
|
||
@@ -49,6 +49,11 @@
|
||
static Robot r;
|
||
|
||
public static void main(String[] args) {
|
||
+ if (sun.awt.OSInfo.getOSType() == sun.awt.OSInfo.OSType.WINDOWS) {
|
||
+ System.out.println("Skipped. Test not for MS Windows.");
|
||
+ return;
|
||
+ }
|
||
+
|
||
f.add(t);
|
||
f.pack();
|
||
f.setVisible(true);
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/awt/im/8041990/bug8041990.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,120 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+
|
||
+/*
|
||
+ @test
|
||
+ @bug 8041990
|
||
+ @summary Language specific keys does not work in applets when opened outside the browser
|
||
+ @author Petr Pchelko
|
||
+*/
|
||
+
|
||
+import sun.awt.SunToolkit;
|
||
+
|
||
+import javax.swing.*;
|
||
+import java.awt.*;
|
||
+import java.awt.event.InputMethodEvent;
|
||
+import java.awt.font.TextHitInfo;
|
||
+import java.text.AttributedString;
|
||
+import java.util.concurrent.CountDownLatch;
|
||
+import java.util.concurrent.atomic.AtomicReference;
|
||
+
|
||
+public class bug8041990 {
|
||
+ private static JFrame frame;
|
||
+ private static JComponent component;
|
||
+
|
||
+ public static void main(String[] args) throws Exception {
|
||
+ ThreadGroup stubTG = new ThreadGroup(getRootThreadGroup(), "Stub Thread Group");
|
||
+ ThreadGroup swingTG = new ThreadGroup(getRootThreadGroup(), "SwingTG");
|
||
+ try {
|
||
+ Thread stubThread = new Thread(stubTG, new Runnable() {
|
||
+ public void run() {
|
||
+ SunToolkit.createNewAppContext();
|
||
+ }
|
||
+ });
|
||
+ stubThread.start();
|
||
+ stubThread.join();
|
||
+
|
||
+ final CountDownLatch startSwingLatch = new CountDownLatch(1);
|
||
+ new Thread(swingTG, new Runnable() {
|
||
+ public void run() {
|
||
+ SunToolkit.createNewAppContext();
|
||
+ SwingUtilities.invokeLater(new Runnable() {
|
||
+ public void run() {
|
||
+ frame = new JFrame();
|
||
+ component = new JLabel("Test Text");
|
||
+ frame.add(component);
|
||
+ frame.setBounds(100, 100, 100, 100);
|
||
+ frame.setVisible(true);
|
||
+ startSwingLatch.countDown();
|
||
+ }
|
||
+ });
|
||
+ }
|
||
+ }).start();
|
||
+ startSwingLatch.await();
|
||
+
|
||
+ final AtomicReference<Exception> caughtException = new AtomicReference<>();
|
||
+ Thread checkThread = new Thread(getRootThreadGroup(), new Runnable() {
|
||
+ public void run() {
|
||
+ try {
|
||
+ // If the bug is present this will throw exception
|
||
+ new InputMethodEvent(component,
|
||
+ InputMethodEvent.CARET_POSITION_CHANGED,
|
||
+ TextHitInfo.leading(0),
|
||
+ TextHitInfo.trailing(0));
|
||
+ } catch (Exception e) {
|
||
+ caughtException.set(e);
|
||
+ }
|
||
+ }
|
||
+ });
|
||
+ checkThread.start();
|
||
+ checkThread.join();
|
||
+
|
||
+ if (caughtException.get() != null) {
|
||
+ throw new RuntimeException("Failed. Caught exception!", caughtException.get());
|
||
+ }
|
||
+ } finally {
|
||
+ new Thread(swingTG, new Runnable() {
|
||
+ public void run() {
|
||
+ SwingUtilities.invokeLater(new Runnable() {
|
||
+ public void run() {
|
||
+ if (frame != null) {
|
||
+ frame.dispose();
|
||
+ }
|
||
+ }
|
||
+ });
|
||
+ }
|
||
+ }).start();
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private static ThreadGroup getRootThreadGroup() {
|
||
+ ThreadGroup currentTG = Thread.currentThread().getThreadGroup();
|
||
+ ThreadGroup parentTG = currentTG.getParent();
|
||
+ while (parentTG != null) {
|
||
+ currentTG = parentTG;
|
||
+ parentTG = currentTG.getParent();
|
||
+ }
|
||
+ return currentTG;
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/beans/Introspector/Test7172865.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,162 @@
|
||
+/*
|
||
+ * Copyright (c) 2013, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+import java.beans.IndexedPropertyDescriptor;
|
||
+import java.beans.MethodDescriptor;
|
||
+import java.beans.PropertyDescriptor;
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 7172854 7172865
|
||
+ * @summary Tests that cached methods are not lost
|
||
+ * @author Sergey Malenkov
|
||
+ */
|
||
+
|
||
+public class Test7172865 {
|
||
+ public static void main(String[] args) throws Exception {
|
||
+ int errors = 0;
|
||
+
|
||
+ MethodDescriptor md = new MethodDescriptor(Test7172865.class.getMethod("getGood"));
|
||
+
|
||
+ errors += test(PropertyDescriptor.class, "good", true);
|
||
+ PropertyDescriptor pdGoodString = new PropertyDescriptor("good", Test7172865.class, "getGood", "setGood");
|
||
+ PropertyDescriptor pdGoodMethod = new PropertyDescriptor("good",
|
||
+ Test7172865.class.getMethod("getGood"),
|
||
+ Test7172865.class.getMethod("setGood", args.getClass()));
|
||
+
|
||
+ errors += test(PropertyDescriptor.class, "bad", false);
|
||
+ PropertyDescriptor pdBadString = new PropertyDescriptor("bad", Test7172865.class, "getBad", null);
|
||
+ PropertyDescriptor pdBadMethod = new PropertyDescriptor("bad",
|
||
+ Test7172865.class.getMethod("getBad"),
|
||
+ Test7172865.class.getMethod("setBad", args.getClass()));
|
||
+
|
||
+ errors += test(IndexedPropertyDescriptor.class, "good", true);
|
||
+ IndexedPropertyDescriptor ipdGoodString = new IndexedPropertyDescriptor("good", Test7172865.class, "getGood", "setGood", "getGood", "setGood");
|
||
+ IndexedPropertyDescriptor ipdGoodMethod = new IndexedPropertyDescriptor("good",
|
||
+ Test7172865.class.getMethod("getGood"),
|
||
+ Test7172865.class.getMethod("setGood", args.getClass()),
|
||
+ Test7172865.class.getMethod("getGood", Integer.TYPE),
|
||
+ Test7172865.class.getMethod("setGood", Integer.TYPE, String.class));
|
||
+
|
||
+ errors += test(IndexedPropertyDescriptor.class, "bad", false);
|
||
+ IndexedPropertyDescriptor ipdBadString = new IndexedPropertyDescriptor("bad", Test7172865.class, "getBad", null, "getBad", null);
|
||
+ IndexedPropertyDescriptor ipdBadMethod = new IndexedPropertyDescriptor("bad",
|
||
+ Test7172865.class.getMethod("getBad"),
|
||
+ Test7172865.class.getMethod("setBad", args.getClass()),
|
||
+ Test7172865.class.getMethod("getBad", Integer.TYPE),
|
||
+ Test7172865.class.getMethod("setBad", Integer.TYPE, String.class));
|
||
+
|
||
+ for (int i = 1; i <= 2; i++) {
|
||
+ System.out.println("STEP: " + i);
|
||
+ errors += test("md", null != md.getMethod());
|
||
+
|
||
+ errors += test("pdGoodString", pdGoodString, true, true);
|
||
+ errors += test("pdGoodMethod", pdGoodMethod, true, true);
|
||
+
|
||
+ errors += test("pdBadString", pdBadString, true, false);
|
||
+ errors += test("pdBadMethod", pdBadMethod, true, true);
|
||
+
|
||
+ errors += test("ipdGoodString", ipdGoodString, true, true, true, true);
|
||
+ errors += test("ipdGoodMethod", ipdGoodMethod, true, true, true, true);
|
||
+
|
||
+ errors += test("ipdBadString", ipdBadString, true, false, true, false);
|
||
+ errors += test("ipdBadMethod", ipdBadMethod, true, true, true, true);
|
||
+
|
||
+ try {
|
||
+ int[] array = new int[1024];
|
||
+ while (true) {
|
||
+ array = new int[array.length << 1];
|
||
+ }
|
||
+ }
|
||
+ catch (OutOfMemoryError error) {
|
||
+ System.gc();
|
||
+ }
|
||
+ }
|
||
+ if (errors > 0) {
|
||
+ throw new Error("found " + errors + " errors");
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private static int test(Class<?> type, String property, boolean value) {
|
||
+ String message = type.getSimpleName() + "(" + property + ") ";
|
||
+ try {
|
||
+ type.getConstructor(String.class, Class.class).newInstance(property, Test7172865.class);
|
||
+ message += "passed";
|
||
+ }
|
||
+ catch (Exception exception) {
|
||
+ message += "failed";
|
||
+ value = !value;
|
||
+ }
|
||
+ if (value) {
|
||
+ message += " as expected";
|
||
+ }
|
||
+ System.out.println(message);
|
||
+ return value ? 0 : 1;
|
||
+ }
|
||
+
|
||
+ private static int test(String message, boolean value) {
|
||
+ System.out.println(message + ": " + (value ? "passed" : "failed"));
|
||
+ return value ? 0 : 1;
|
||
+ }
|
||
+
|
||
+ private static int test(String message, PropertyDescriptor pd, boolean rm, boolean wm) {
|
||
+ return test(message + ".Read", rm == (null != pd.getReadMethod()))
|
||
+ + test(message + ".Write", wm == (null != pd.getWriteMethod()));
|
||
+ }
|
||
+
|
||
+ private static int test(String message, IndexedPropertyDescriptor ipd, boolean rm, boolean wm, boolean irm, boolean iwm) {
|
||
+ return test(message, ipd, rm, wm)
|
||
+ + test(message + ".IndexedRead", irm == (null != ipd.getIndexedReadMethod()))
|
||
+ + test(message + ".IndexedWrite", iwm == (null != ipd.getIndexedWriteMethod()));
|
||
+ }
|
||
+
|
||
+ public String[] getGood() {
|
||
+ return null;
|
||
+ }
|
||
+
|
||
+ public String getGood(int index) {
|
||
+ return null;
|
||
+ }
|
||
+
|
||
+ public void setGood(String[] good) {
|
||
+ }
|
||
+
|
||
+ public void setGood(int index, String value) {
|
||
+ }
|
||
+
|
||
+ public String[] getBad() {
|
||
+ return null;
|
||
+ }
|
||
+
|
||
+ public String getBad(int index) {
|
||
+ return null;
|
||
+ }
|
||
+
|
||
+ public Test7172865 setBad(String[] bad) {
|
||
+ return null;
|
||
+ }
|
||
+
|
||
+ public Test7172865 setBad(int index, String value) {
|
||
+ return null;
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/beans/XMLEncoder/Test8016545.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,106 @@
|
||
+/*
|
||
+ * Copyright (c) 2013, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 8016545
|
||
+ * @summary Tests beans with predefined fields
|
||
+ * @author Sergey Malenkov
|
||
+ */
|
||
+
|
||
+public class Test8016545 extends AbstractTest {
|
||
+ public static void main(String[] args) {
|
||
+ new Test8016545().test(true);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ protected Object getObject() {
|
||
+ Bean bean = new Bean();
|
||
+ bean.setUndefined(Boolean.FALSE);
|
||
+ Info info = new Info();
|
||
+ info.setEnabled(Boolean.TRUE);
|
||
+ info.setID(1);
|
||
+ bean.setInfo(info);
|
||
+ return bean;
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ protected Object getAnotherObject() {
|
||
+ Bean bean = new Bean();
|
||
+ bean.setUndefined(Boolean.TRUE);
|
||
+ bean.getInfo().setEnabled(Boolean.FALSE);
|
||
+ bean.getInfo().setID(2);
|
||
+ return bean;
|
||
+ }
|
||
+
|
||
+ public static class Bean {
|
||
+ private Info info = new Info(); // predefined
|
||
+ private Boolean defined = Boolean.TRUE;
|
||
+ private Boolean undefined;
|
||
+
|
||
+ public Info getInfo() {
|
||
+ return this.info;
|
||
+ }
|
||
+
|
||
+ public void setInfo(Info info) {
|
||
+ this.info = info;
|
||
+ }
|
||
+
|
||
+ public Boolean getDefined() {
|
||
+ return this.defined;
|
||
+ }
|
||
+
|
||
+ public void setDefined(Boolean defined) {
|
||
+ this.defined = defined;
|
||
+ }
|
||
+
|
||
+ public Boolean getUndefined() {
|
||
+ return this.undefined;
|
||
+ }
|
||
+
|
||
+ public void setUndefined(Boolean undefined) {
|
||
+ this.undefined = undefined;
|
||
+ }
|
||
+ }
|
||
+
|
||
+ public static class Info {
|
||
+ private Integer id;
|
||
+ private Boolean enabled;
|
||
+
|
||
+ public Integer getID() {
|
||
+ return this.id;
|
||
+ }
|
||
+
|
||
+ public void setID(Integer id) {
|
||
+ this.id = id;
|
||
+ }
|
||
+
|
||
+ public Boolean getEnabled() {
|
||
+ return this.enabled;
|
||
+ }
|
||
+
|
||
+ public void setEnabled(Boolean enabled) {
|
||
+ this.enabled = enabled;
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/io/ByteArrayOutputStream/MaxCapacity.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,65 @@
|
||
+/*
|
||
+ * Copyright (c) 2014 Google Inc. 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @ignore This test has huge memory requirements
|
||
+ * @run main/timeout=1800/othervm -Xmx8g MaxCapacity
|
||
+ * @bug 8055949
|
||
+ * @summary Check that we can write (almost) Integer.MAX_VALUE bytes
|
||
+ * to a ByteArrayOutputStream.
|
||
+ * @author Martin Buchholz
|
||
+ */
|
||
+import java.io.ByteArrayOutputStream;
|
||
+
|
||
+public class MaxCapacity {
|
||
+ public static void main(String[] args) {
|
||
+ long maxHeap = Runtime.getRuntime().maxMemory();
|
||
+ if (maxHeap < 3L * Integer.MAX_VALUE) {
|
||
+ System.out.printf("Skipping test; max memory %sM too small%n",
|
||
+ maxHeap/(1024*1024));
|
||
+ return;
|
||
+ }
|
||
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||
+ for (long n = 0; ; n++) {
|
||
+ try {
|
||
+ baos.write((byte)'x');
|
||
+ } catch (Throwable t) {
|
||
+ // check data integrity while we're here
|
||
+ byte[] bytes = baos.toByteArray();
|
||
+ if (bytes.length != n)
|
||
+ throw new AssertionError("wrong length");
|
||
+ if (bytes[0] != 'x' ||
|
||
+ bytes[bytes.length - 1] != 'x')
|
||
+ throw new AssertionError("wrong contents");
|
||
+
|
||
+ long gap = Integer.MAX_VALUE - n;
|
||
+ System.out.printf("gap=%dM %d%n", gap/(1024*1024), gap);
|
||
+ if (gap > 1024)
|
||
+ throw t;
|
||
+ // t.printStackTrace();
|
||
+ break;
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/io/File/CheckPermission.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,379 @@
|
||
+/*
|
||
+ * Copyright (c) 2013, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/* @test
|
||
+ * @bug 8017212
|
||
+ * @summary Examine methods in File.java that access the file system do the
|
||
+ * right permission check when a security manager exists.
|
||
+ * @author Dan Xu
|
||
+ */
|
||
+
|
||
+import java.io.File;
|
||
+import java.io.FilenameFilter;
|
||
+import java.io.FileFilter;
|
||
+import java.io.IOException;
|
||
+import java.security.Permission;
|
||
+import java.util.ArrayList;
|
||
+import java.util.EnumMap;
|
||
+import java.util.EnumSet;
|
||
+import java.util.HashSet;
|
||
+import java.util.List;
|
||
+import java.util.Map;
|
||
+import java.util.Set;
|
||
+
|
||
+public class CheckPermission {
|
||
+
|
||
+ private static final String CHECK_PERMISSION_TEST = "CheckPermissionTest";
|
||
+
|
||
+ public enum FileOperation {
|
||
+ READ, WRITE, DELETE, EXEC
|
||
+ }
|
||
+
|
||
+ static class Checks {
|
||
+ private List<Permission> permissionsChecked = new ArrayList<>();
|
||
+ private Set<String> propertiesChecked = new HashSet<>();
|
||
+
|
||
+ private Map<FileOperation, List<String>> fileOperationChecked =
|
||
+ new EnumMap<>(FileOperation.class);
|
||
+
|
||
+ List<Permission> permissionsChecked() {
|
||
+ return permissionsChecked;
|
||
+ }
|
||
+
|
||
+ Set<String> propertiesChecked() {
|
||
+ return propertiesChecked;
|
||
+ }
|
||
+
|
||
+ List<String> fileOperationChecked(FileOperation op) {
|
||
+ return fileOperationChecked.get(op);
|
||
+ }
|
||
+
|
||
+ void addFileOperation(FileOperation op, String file) {
|
||
+ List<String> opList = fileOperationChecked.get(op);
|
||
+ if (opList == null) {
|
||
+ opList = new ArrayList<>();
|
||
+ fileOperationChecked.put(op, opList);
|
||
+ }
|
||
+ opList.add(file);
|
||
+ }
|
||
+ }
|
||
+
|
||
+ static ThreadLocal<Checks> myChecks = new ThreadLocal<>();
|
||
+
|
||
+ static void prepare() {
|
||
+ myChecks.set(new Checks());
|
||
+ }
|
||
+
|
||
+ static class LoggingSecurityManager extends SecurityManager {
|
||
+ static void install() {
|
||
+ System.setSecurityManager(new LoggingSecurityManager());
|
||
+ }
|
||
+
|
||
+ private void checkFileOperation(FileOperation op, String file) {
|
||
+ Checks checks = myChecks.get();
|
||
+ if (checks != null)
|
||
+ checks.addFileOperation(op, file);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void checkRead(String file) {
|
||
+ checkFileOperation(FileOperation.READ, file);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void checkWrite(String file) {
|
||
+ checkFileOperation(FileOperation.WRITE, file);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void checkDelete(String file) {
|
||
+ checkFileOperation(FileOperation.DELETE, file);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void checkExec(String file) {
|
||
+ checkFileOperation(FileOperation.EXEC, file);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void checkPermission(Permission perm) {
|
||
+ Checks checks = myChecks.get();
|
||
+ if (checks != null)
|
||
+ checks.permissionsChecked().add(perm);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void checkPropertyAccess(String key) {
|
||
+ Checks checks = myChecks.get();
|
||
+ if (checks != null)
|
||
+ checks.propertiesChecked().add(key);
|
||
+ }
|
||
+ }
|
||
+
|
||
+ static void assertCheckPermission(Class<? extends Permission> type,
|
||
+ String name)
|
||
+ {
|
||
+ for (Permission perm : myChecks.get().permissionsChecked()) {
|
||
+ if (type.isInstance(perm) && perm.getName().equals(name))
|
||
+ return;
|
||
+ }
|
||
+ throw new RuntimeException(type.getName() + "(\"" + name
|
||
+ + "\") not checked");
|
||
+ }
|
||
+
|
||
+ static void assertCheckPropertyAccess(String key) {
|
||
+ if (!myChecks.get().propertiesChecked().contains(key))
|
||
+ throw new RuntimeException("Property " + key + " not checked");
|
||
+ }
|
||
+
|
||
+ static void assertChecked(File file, List<String> list) {
|
||
+ if (list != null && !list.isEmpty()) {
|
||
+ for (String path : list) {
|
||
+ if (path.equals(file.getPath()))
|
||
+ return;
|
||
+ }
|
||
+ }
|
||
+ throw new RuntimeException("Access not checked");
|
||
+ }
|
||
+
|
||
+ static void assertNotChecked(File file, List<String> list) {
|
||
+ if (list != null && !list.isEmpty()) {
|
||
+ for (String path : list) {
|
||
+ if (path.equals(file.getPath()))
|
||
+ throw new RuntimeException("Access checked");
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+
|
||
+ static void assertCheckOperation(File file, Set<FileOperation> ops) {
|
||
+ for (FileOperation op : ops)
|
||
+ assertChecked(file, myChecks.get().fileOperationChecked(op));
|
||
+ }
|
||
+
|
||
+ static void assertNotCheckOperation(File file, Set<FileOperation> ops) {
|
||
+ for (FileOperation op : ops)
|
||
+ assertNotChecked(file, myChecks.get().fileOperationChecked(op));
|
||
+ }
|
||
+
|
||
+ static void assertOnlyCheckOperation(File file,
|
||
+ EnumSet<FileOperation> ops)
|
||
+ {
|
||
+ assertCheckOperation(file, ops);
|
||
+ assertNotCheckOperation(file, EnumSet.complementOf(ops));
|
||
+ }
|
||
+
|
||
+ static File testFile, another;
|
||
+
|
||
+ static void setup() {
|
||
+ testFile = new File(CHECK_PERMISSION_TEST + System.currentTimeMillis());
|
||
+ if (testFile.exists()) {
|
||
+ testFile.delete();
|
||
+ }
|
||
+
|
||
+ another = new File(CHECK_PERMISSION_TEST + "Another"
|
||
+ + System.currentTimeMillis());
|
||
+ if (another.exists()) {
|
||
+ another.delete();
|
||
+ }
|
||
+
|
||
+ LoggingSecurityManager.install();
|
||
+ }
|
||
+
|
||
+ public static void main(String[] args) throws IOException {
|
||
+ setup();
|
||
+
|
||
+ prepare();
|
||
+ testFile.canRead();
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
|
||
+
|
||
+ prepare();
|
||
+ testFile.canWrite();
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
|
||
+
|
||
+ prepare();
|
||
+ testFile.exists();
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
|
||
+
|
||
+ prepare();
|
||
+ testFile.isDirectory();
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
|
||
+
|
||
+ prepare();
|
||
+ testFile.isFile();
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
|
||
+
|
||
+ prepare();
|
||
+ testFile.isHidden();
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
|
||
+
|
||
+ prepare();
|
||
+ testFile.lastModified();
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
|
||
+
|
||
+ prepare();
|
||
+ testFile.length();
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
|
||
+
|
||
+ prepare();
|
||
+ testFile.createNewFile();
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
|
||
+
|
||
+ prepare();
|
||
+ testFile.list();
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
|
||
+
|
||
+ prepare();
|
||
+ testFile.list(new FilenameFilter() {
|
||
+ @Override
|
||
+ public boolean accept(File dir, String name) {
|
||
+ return false;
|
||
+ }
|
||
+ });
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
|
||
+
|
||
+ prepare();
|
||
+ testFile.listFiles();
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
|
||
+
|
||
+ prepare();
|
||
+ testFile.listFiles(new FilenameFilter() {
|
||
+ @Override
|
||
+ public boolean accept(File dir, String name) {
|
||
+ return false;
|
||
+ }
|
||
+ });
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
|
||
+
|
||
+ prepare();
|
||
+ testFile.listFiles(new FileFilter() {
|
||
+ @Override
|
||
+ public boolean accept(File file) {
|
||
+ return false;
|
||
+ }
|
||
+ });
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
|
||
+
|
||
+ prepare();
|
||
+ testFile.mkdir();
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
|
||
+
|
||
+ if (testFile.exists()) {
|
||
+ prepare();
|
||
+ testFile.mkdirs();
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
|
||
+ }
|
||
+
|
||
+ if (!another.exists()) {
|
||
+ prepare();
|
||
+ another.mkdirs();
|
||
+ assertOnlyCheckOperation(another,
|
||
+ EnumSet.of(FileOperation.READ, FileOperation.WRITE));
|
||
+ }
|
||
+
|
||
+ prepare();
|
||
+ another.delete();
|
||
+ assertOnlyCheckOperation(another, EnumSet.of(FileOperation.DELETE));
|
||
+
|
||
+ prepare();
|
||
+ boolean renRst = testFile.renameTo(another);
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
|
||
+ assertOnlyCheckOperation(another, EnumSet.of(FileOperation.WRITE));
|
||
+
|
||
+ if (renRst) {
|
||
+ if (testFile.exists())
|
||
+ throw new RuntimeException(testFile + " is already renamed to "
|
||
+ + another);
|
||
+ testFile = another;
|
||
+ }
|
||
+
|
||
+ prepare();
|
||
+ testFile.setLastModified(0);
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
|
||
+
|
||
+ prepare();
|
||
+ testFile.setReadOnly();
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
|
||
+
|
||
+ prepare();
|
||
+ testFile.setWritable(true, true);
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
|
||
+
|
||
+ prepare();
|
||
+ testFile.setWritable(true);
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
|
||
+
|
||
+ prepare();
|
||
+ testFile.setReadable(true, true);
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
|
||
+
|
||
+ prepare();
|
||
+ testFile.setReadable(true);
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
|
||
+
|
||
+ prepare();
|
||
+ testFile.setExecutable(true, true);
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
|
||
+
|
||
+ prepare();
|
||
+ testFile.setExecutable(true);
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.WRITE));
|
||
+
|
||
+ prepare();
|
||
+ testFile.canExecute();
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.EXEC));
|
||
+
|
||
+ prepare();
|
||
+ testFile.getTotalSpace();
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
|
||
+ assertCheckPermission(RuntimePermission.class,
|
||
+ "getFileSystemAttributes");
|
||
+
|
||
+ prepare();
|
||
+ testFile.getFreeSpace();
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
|
||
+ assertCheckPermission(RuntimePermission.class,
|
||
+ "getFileSystemAttributes");
|
||
+
|
||
+ prepare();
|
||
+ testFile.getUsableSpace();
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.READ));
|
||
+ assertCheckPermission(RuntimePermission.class,
|
||
+ "getFileSystemAttributes");
|
||
+
|
||
+ prepare();
|
||
+ File tmpFile = File.createTempFile(CHECK_PERMISSION_TEST, null);
|
||
+ assertOnlyCheckOperation(tmpFile, EnumSet.of(FileOperation.WRITE));
|
||
+ tmpFile.delete();
|
||
+ assertCheckOperation(tmpFile, EnumSet.of(FileOperation.DELETE));
|
||
+
|
||
+ prepare();
|
||
+ tmpFile = File.createTempFile(CHECK_PERMISSION_TEST, null, null);
|
||
+ assertOnlyCheckOperation(tmpFile, EnumSet.of(FileOperation.WRITE));
|
||
+ tmpFile.delete();
|
||
+ assertCheckOperation(tmpFile, EnumSet.of(FileOperation.DELETE));
|
||
+
|
||
+ prepare();
|
||
+ testFile.deleteOnExit();
|
||
+ assertOnlyCheckOperation(testFile, EnumSet.of(FileOperation.DELETE));
|
||
+ }
|
||
+}
|
||
--- ./jdk/test/java/io/File/NulFile.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/java/io/File/NulFile.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -612,8 +612,13 @@
|
||
try {
|
||
File.createTempFile(prefix, suffix, directory);
|
||
} catch (IOException ex) {
|
||
- if (ExceptionMsg.equals(ex.getMessage()))
|
||
+ String err = "Unable to create temporary file";
|
||
+ if (err.equals(ex.getMessage()))
|
||
exceptionThrown = true;
|
||
+ else {
|
||
+ throw new RuntimeException("Get IOException with message, "
|
||
+ + ex.getMessage() + ", expect message, "+ err);
|
||
+ }
|
||
}
|
||
}
|
||
if (!exceptionThrown) {
|
||
--- ./jdk/test/java/io/File/createTempFile/SpecialTempFile.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/java/io/File/createTempFile/SpecialTempFile.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -23,9 +23,8 @@
|
||
|
||
/*
|
||
* @test
|
||
- * @bug 8013827 8011950 8025128
|
||
+ * @bug 8013827 8011950 8017212 8025128
|
||
* @summary Check whether File.createTempFile can handle special parameters
|
||
- * on Windows platforms
|
||
* @author Dan Xu
|
||
*/
|
||
|
||
@@ -35,7 +34,7 @@
|
||
public class SpecialTempFile {
|
||
|
||
private static void test(String name, String[] prefix, String[] suffix,
|
||
- boolean expectedException) throws IOException
|
||
+ boolean exceptionExpected) throws IOException
|
||
{
|
||
if (prefix == null || suffix == null
|
||
|| prefix.length != suffix.length)
|
||
@@ -44,14 +43,13 @@
|
||
}
|
||
|
||
final String exceptionMsg = "Unable to create temporary file";
|
||
+ String[] dirs = { null, "." };
|
||
|
||
for (int i = 0; i < prefix.length; i++) {
|
||
boolean exceptionThrown = false;
|
||
File f = null;
|
||
|
||
- String[] dirs = { null, "." };
|
||
-
|
||
- for (String dir : dirs ) {
|
||
+ for (String dir: dirs) {
|
||
System.out.println("In test " + name +
|
||
", creating temp file with prefix, " +
|
||
prefix[i] + ", suffix, " + suffix[i] +
|
||
@@ -63,7 +61,7 @@
|
||
else
|
||
f = File.createTempFile(prefix[i], suffix[i], new File(dir));
|
||
} catch (IOException e) {
|
||
- if (expectedException) {
|
||
+ if (exceptionExpected) {
|
||
if (e.getMessage().startsWith(exceptionMsg))
|
||
exceptionThrown = true;
|
||
else
|
||
@@ -74,13 +72,23 @@
|
||
}
|
||
}
|
||
|
||
- if (expectedException && (!exceptionThrown || f != null))
|
||
+ if (exceptionExpected && (!exceptionThrown || f != null))
|
||
throw new RuntimeException("IOException is expected");
|
||
}
|
||
}
|
||
}
|
||
|
||
public static void main(String[] args) throws Exception {
|
||
+ // Common test
|
||
+ final String name = "SpecialTempFile";
|
||
+ File f = new File(System.getProperty("java.io.tmpdir"), name);
|
||
+ if (!f.exists()) {
|
||
+ f.createNewFile();
|
||
+ }
|
||
+ String[] nulPre = { name + "\u0000" };
|
||
+ String[] nulSuf = { ".test" };
|
||
+ test("NulName", nulPre, nulSuf, true);
|
||
+
|
||
// Test JDK-8025128
|
||
String[] goodPre = { "///..///", "/foo" };
|
||
String[] goodSuf = { ".temp", ".tmp" };
|
||
@@ -91,6 +99,7 @@
|
||
String[] slashSuf = { "///..///..", "///..///..", "///..///.." };
|
||
test("SlashedName", slashPre, slashSuf, true);
|
||
|
||
+ // Windows tests
|
||
if (!System.getProperty("os.name").startsWith("Windows"))
|
||
return;
|
||
|
||
--- ./jdk/test/java/lang/ClassLoader/Assert.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/java/lang/ClassLoader/Assert.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -23,6 +23,21 @@
|
||
|
||
#
|
||
|
||
+OS=`uname -s`
|
||
+case "$OS" in
|
||
+ SunOS | Linux | Darwin )
|
||
+ FS="/"
|
||
+ CHMOD="${FS}bin${FS}chmod"
|
||
+ ;;
|
||
+ Windows* | CYGWIN* )
|
||
+ CHMOD="chmod"
|
||
+ ;;
|
||
+ * )
|
||
+ echo "Unrecognized system!"
|
||
+ exit 1;
|
||
+ ;;
|
||
+esac
|
||
+
|
||
if [ "${TESTSRC}" = "" ]
|
||
then
|
||
echo "TESTSRC not set. Test cannot execute. Failed."
|
||
@@ -46,6 +61,7 @@
|
||
cp ${TESTSRC}/Assert.java .
|
||
cp -R ${TESTSRC}/package1 .
|
||
cp -R ${TESTSRC}/package2 .
|
||
+${CHMOD} -R u+w *
|
||
|
||
${TESTJAVA}/bin/javac Assert.java
|
||
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/lang/ProcessBuilder/CloseRace.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,182 @@
|
||
+/*
|
||
+ * Copyright (c) 2013, 2014 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/**
|
||
+ * @test
|
||
+ * @bug 8024521
|
||
+ * @summary Closing ProcessPipeInputStream at the time the process exits is racy
|
||
+ * and leads to data corruption. Run this test manually (as
|
||
+ * an ordinary java program) with -Xmx8M to repro bug 8024521.
|
||
+ * @run main/othervm -Xmx8M -Dtest.duration=2 CloseRace
|
||
+ */
|
||
+
|
||
+import java.io.*;
|
||
+import java.util.ArrayList;
|
||
+import java.util.List;
|
||
+import java.util.Map;
|
||
+import java.util.concurrent.CountDownLatch;
|
||
+
|
||
+public class CloseRace {
|
||
+ private static final String BIG_FILE = "bigfile";
|
||
+
|
||
+ private static final int[] procFDs = new int[6];
|
||
+
|
||
+ /** default value sufficient to repro bug 8024521. */
|
||
+ private static final int testDurationSeconds
|
||
+ = Integer.getInteger("test.duration", 600);
|
||
+
|
||
+ private static final CountDownLatch threadsStarted
|
||
+ = new CountDownLatch(2);
|
||
+
|
||
+ static boolean fdInUse(int i) {
|
||
+ return new File("/proc/self/fd/" + i).exists();
|
||
+ }
|
||
+
|
||
+ static boolean[] procFDsInUse() {
|
||
+ boolean[] inUse = new boolean[procFDs.length];
|
||
+ for (int i = 0; i < procFDs.length; i++)
|
||
+ inUse[i] = fdInUse(procFDs[i]);
|
||
+ return inUse;
|
||
+ }
|
||
+
|
||
+ static int count(boolean[] bits) {
|
||
+ int count = 0;
|
||
+ for (int i = 0; i < bits.length; i++)
|
||
+ count += bits[i] ? 1 : 0;
|
||
+ return count;
|
||
+ }
|
||
+
|
||
+ static void dumpAllStacks() {
|
||
+ System.err.println("Start of dump");
|
||
+ final Map<Thread, StackTraceElement[]> allStackTraces
|
||
+ = Thread.getAllStackTraces();
|
||
+ for (Thread thread : allStackTraces.keySet()) {
|
||
+ System.err.println("Thread " + thread.getName());
|
||
+ for (StackTraceElement element : allStackTraces.get(thread))
|
||
+ System.err.println("\t" + element);
|
||
+ }
|
||
+ System.err.println("End of dump");
|
||
+ }
|
||
+
|
||
+ public static void main(String args[]) throws Exception {
|
||
+ if (!(new File("/proc/self/fd").isDirectory()))
|
||
+ return;
|
||
+
|
||
+ // Catch Errors from process reaper
|
||
+ Thread.setDefaultUncaughtExceptionHandler(
|
||
+ new Thread.UncaughtExceptionHandler() {
|
||
+ @Override
|
||
+ public void uncaughtException(Thread t, Throwable e) {
|
||
+ e.printStackTrace();
|
||
+ System.exit(1);
|
||
+ }
|
||
+ });
|
||
+
|
||
+ try (RandomAccessFile f = new RandomAccessFile(BIG_FILE, "rw")) {
|
||
+ f.setLength(Runtime.getRuntime().maxMemory()); // provoke OOME
|
||
+ }
|
||
+
|
||
+ for (int i = 0, j = 0; j < procFDs.length; i++)
|
||
+ if (!fdInUse(i))
|
||
+ procFDs[j++] = i;
|
||
+
|
||
+ Thread[] threads = {
|
||
+ new Thread(new OpenLoop()),
|
||
+ new Thread(new ExecLoop()),
|
||
+ };
|
||
+ for (Thread thread : threads)
|
||
+ thread.start();
|
||
+
|
||
+ threadsStarted.await();
|
||
+ Thread.sleep(testDurationSeconds * 1000);
|
||
+
|
||
+ for (Thread thread : threads)
|
||
+ thread.interrupt();
|
||
+ for (Thread thread : threads) {
|
||
+ thread.join(10_000);
|
||
+ if (thread.isAlive()) {
|
||
+ dumpAllStacks();
|
||
+ throw new Error("At least one child thread ("
|
||
+ + thread.getName()
|
||
+ + ") failed to finish gracefully");
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+
|
||
+ static class OpenLoop implements Runnable {
|
||
+ public void run() {
|
||
+ threadsStarted.countDown();
|
||
+ while (!Thread.interrupted()) {
|
||
+ try {
|
||
+ // wait for ExecLoop to finish creating process
|
||
+ do {
|
||
+ if (Thread.interrupted())
|
||
+ return;
|
||
+ } while (count(procFDsInUse()) != 3);
|
||
+ List<InputStream> iss = new ArrayList<>(4);
|
||
+
|
||
+ // eat up three "holes" (closed ends of pipe fd pairs)
|
||
+ for (int i = 0; i < 3; i++)
|
||
+ iss.add(new FileInputStream(BIG_FILE));
|
||
+ do {
|
||
+ if (Thread.interrupted())
|
||
+ return;
|
||
+ } while (count(procFDsInUse()) == procFDs.length);
|
||
+ // hopefully this will racily occupy empty fd slot
|
||
+ iss.add(new FileInputStream(BIG_FILE));
|
||
+ Thread.sleep(1); // Widen race window
|
||
+ for (InputStream is : iss)
|
||
+ is.close();
|
||
+ } catch (InterruptedException e) {
|
||
+ break;
|
||
+ } catch (Exception e) {
|
||
+ throw new Error(e);
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+
|
||
+ static class ExecLoop implements Runnable {
|
||
+ public void run() {
|
||
+ threadsStarted.countDown();
|
||
+ ProcessBuilder builder = new ProcessBuilder("/bin/true");
|
||
+ while (!Thread.interrupted()) {
|
||
+ try {
|
||
+ // wait for OpenLoop to finish
|
||
+ do {
|
||
+ if (Thread.interrupted())
|
||
+ return;
|
||
+ } while (count(procFDsInUse()) > 0);
|
||
+ Process process = builder.start();
|
||
+ InputStream is = process.getInputStream();
|
||
+ process.waitFor();
|
||
+ is.close();
|
||
+ } catch (InterruptedException e) {
|
||
+ break;
|
||
+ } catch (Exception e) {
|
||
+ throw new Error(e);
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- ./jdk/test/java/lang/Runtime/exec/CloseRace.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
@@ -1,146 +0,0 @@
|
||
-/*
|
||
- * Copyright (c) 2013, 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.
|
||
- *
|
||
- * 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.
|
||
- */
|
||
-
|
||
-/**
|
||
- * @test
|
||
- * @bug 8024521
|
||
- * @summary Closing ProcessPipeInputStream at the time the process exits is racy
|
||
- * and leads to the data corruption.
|
||
- * @library /lib/testlibrary
|
||
- * @run main/othervm/timeout=80 CloseRace
|
||
- */
|
||
-
|
||
-/**
|
||
- * This test has a little chance to catch the race during the given default
|
||
- * time gap of 20 seconds. To increase the time gap, set the system property
|
||
- * CloseRaceTimeGap=N to the number of seconds.
|
||
- * Jtreg's timeoutFactor should also be set appropriately.
|
||
- *
|
||
- * For example, to run the test for 10 minutes:
|
||
- * > jtreg \
|
||
- * -testjdk:$(PATH_TO_TESTED_JDK) \
|
||
- * -timeoutFactor:10 \
|
||
- * -DCloseRaceTimeGap=600 \
|
||
- * $(PATH_TO_TESTED_JDK_SOURCE)/test/java/lang/Runtime/exec/CloseRace.java
|
||
- */
|
||
-
|
||
-import java.io.*;
|
||
-import java.nio.file.Files;
|
||
-import java.nio.file.Path;
|
||
-import java.nio.file.Paths;
|
||
-import java.util.ArrayList;
|
||
-import java.util.Arrays;
|
||
-import java.util.LinkedList;
|
||
-import java.util.List;
|
||
-import jdk.testlibrary.OutputAnalyzer;
|
||
-import static jdk.testlibrary.ProcessTools.*;
|
||
-
|
||
-public class CloseRace {
|
||
-
|
||
- public static void main(String args[]) throws Exception {
|
||
- ProcessBuilder pb = createJavaProcessBuilder("-Xmx64M", "CloseRace$Child",
|
||
- System.getProperty("CloseRaceTimeGap", "20"));
|
||
- OutputAnalyzer oa = new OutputAnalyzer(pb.start());
|
||
- oa.stderrShouldNotContain("java.lang.OutOfMemoryError");
|
||
- }
|
||
-
|
||
- public static class Child {
|
||
- private static final String BIG_FILE = "bigfile";
|
||
- private static final String SMALL_FILE = "smallfile";
|
||
- private static int timeGap = 20; // seconds
|
||
-
|
||
- public static void main(String args[]) throws Exception {
|
||
- if (args.length > 0) {
|
||
- try {
|
||
- timeGap = Integer.parseInt(args[0]);
|
||
- timeGap = Math.max(timeGap, 10);
|
||
- timeGap = Math.min(timeGap, 10 * 60 * 60); // no more than 10 hours
|
||
- } catch (NumberFormatException ignore) {}
|
||
- }
|
||
- try (RandomAccessFile f = new RandomAccessFile(BIG_FILE, "rw")) {
|
||
- f.setLength(1024 * 1024 * 1024); // 1 Gb, greater than max heap size
|
||
- }
|
||
- try (FileOutputStream fs = new FileOutputStream(SMALL_FILE);
|
||
- PrintStream ps = new PrintStream(fs)) {
|
||
- for (int i = 0; i < 128; ++i)
|
||
- ps.println("line of text");
|
||
- }
|
||
-
|
||
- List<Thread> threads = new LinkedList<>();
|
||
- for (int i = 0; i < 99; ++i) {
|
||
- Thread t = new Thread (new OpenLoop());
|
||
- t.start();
|
||
- threads.add(t);
|
||
- }
|
||
- Thread t2 = new Thread (new ExecLoop());
|
||
- t2.start();
|
||
- threads.add(t2);
|
||
-
|
||
- Thread.sleep(timeGap);
|
||
-
|
||
- for (Thread t : threads) {
|
||
- t.interrupt();
|
||
- t.join();
|
||
- }
|
||
- }
|
||
-
|
||
- private static class OpenLoop implements Runnable {
|
||
- public void run() {
|
||
- final Path bigFilePath = Paths.get(BIG_FILE);
|
||
- while (!Thread.interrupted()) {
|
||
- try (InputStream in = Files.newInputStream(bigFilePath)) {
|
||
- // Widen the race window by sleeping 1ms
|
||
- Thread.sleep(1);
|
||
- } catch (InterruptedException e) {
|
||
- break;
|
||
- } catch (Exception e) {
|
||
- System.err.println(e);
|
||
- }
|
||
- }
|
||
- }
|
||
- }
|
||
-
|
||
- private static class ExecLoop implements Runnable {
|
||
- public void run() {
|
||
- List<String> command = new ArrayList<>(
|
||
- Arrays.asList("/bin/cat", SMALL_FILE));
|
||
- while (!Thread.interrupted()) {
|
||
- try {
|
||
- ProcessBuilder builder = new ProcessBuilder(command);
|
||
- final Process process = builder.start();
|
||
- InputStream is = process.getInputStream();
|
||
- InputStreamReader isr = new InputStreamReader(is);
|
||
- BufferedReader br = new BufferedReader(isr);
|
||
- while (br.readLine() != null) {}
|
||
- process.waitFor();
|
||
- isr.close();
|
||
- } catch (InterruptedException e) {
|
||
- break;
|
||
- } catch (Exception e) {
|
||
- System.err.println(e);
|
||
- }
|
||
- }
|
||
- }
|
||
- }
|
||
- }
|
||
-}
|
||
--- ./jdk/test/java/lang/String/ToLowerCase.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/java/lang/String/ToLowerCase.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2003, 2014 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
|
||
@@ -23,7 +23,7 @@
|
||
|
||
/*
|
||
@test
|
||
- @bug 4217441 4533872 4900935 8020037
|
||
+ @bug 4217441 4533872 4900935 8020037 8041791
|
||
@summary toLowerCase should lower-case Greek Sigma correctly depending
|
||
on the context (final/non-final). Also it should handle
|
||
Locale specific (lt, tr, and az) lowercasings and supplementary
|
||
@@ -72,8 +72,10 @@
|
||
// I-dot tests
|
||
test("\u0130", turkish, "i");
|
||
test("\u0130", az, "i");
|
||
- test("\u0130", lt, "i");
|
||
- test("\u0130", Locale.US, "i");
|
||
+ test("\u0130", lt, "\u0069\u0307");
|
||
+ test("\u0130", Locale.US, "\u0069\u0307");
|
||
+ test("\u0130", Locale.JAPAN, "\u0069\u0307");
|
||
+ test("\u0130", Locale.ROOT, "\u0069\u0307");
|
||
|
||
// Remove dot_above in the sequence I + dot_above (Turkish and Azeri)
|
||
test("I\u0307", turkish, "i");
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/lang/instrument/DaemonThread/DummyAgent.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,46 @@
|
||
+/*
|
||
+ * Copyright 2014 Goldman Sachs.
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+import java.lang.instrument.ClassFileTransformer;
|
||
+import java.lang.instrument.IllegalClassFormatException;
|
||
+import java.lang.instrument.Instrumentation;
|
||
+import java.security.ProtectionDomain;
|
||
+
|
||
+public class DummyAgent implements ClassFileTransformer {
|
||
+ @Override
|
||
+ public byte[] transform(ClassLoader loader, String className,
|
||
+ Class<?> classBeingRedefined, ProtectionDomain protectionDomain,
|
||
+ byte[] classfileBuffer) throws IllegalClassFormatException {
|
||
+
|
||
+ /* The Daemon Thread bug is timing dependent and you want the transform method
|
||
+ * to return ASAP - so just return the buffer will be fine
|
||
+ */
|
||
+ return classfileBuffer;
|
||
+ }
|
||
+
|
||
+ public static void premain(String agentArgs, Instrumentation inst) {
|
||
+ inst.addTransformer(new DummyAgent(), false);
|
||
+ }
|
||
+
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/lang/instrument/DaemonThread/DummyClass.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,27 @@
|
||
+/*
|
||
+ * Copyright 2014 Goldman Sachs.
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/* Just a dummy class for loading */
|
||
+public class DummyClass {
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/lang/instrument/DaemonThread/TestDaemonThread.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,72 @@
|
||
+/*
|
||
+ * Copyright 2014 Goldman Sachs.
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+/* @test
|
||
+ * @bug 7142035
|
||
+ * @summary Assert in java.lang.instrument agents during shutdown when classloading occurs after shutdown
|
||
+ * @library /lib/testlibrary
|
||
+ *
|
||
+ * @build DummyAgent DummyClass TestDaemonThreadLauncher TestDaemonThread
|
||
+ * @run shell ../MakeJAR3.sh DummyAgent
|
||
+ * @run main TestDaemonThreadLauncher /timeout=240
|
||
+ *
|
||
+ */
|
||
+import java.io.File;
|
||
+import java.net.URL;
|
||
+import java.net.URLClassLoader;
|
||
+
|
||
+public class TestDaemonThread implements Runnable{
|
||
+ File classpath;
|
||
+
|
||
+ public TestDaemonThread(File classpath) {
|
||
+ this.classpath = classpath;
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void run() {
|
||
+
|
||
+
|
||
+ try {
|
||
+ URL u = this.getClass().getClassLoader().getResource("DummyClass.class");
|
||
+ String path = u.getPath();
|
||
+ String parent = u.getPath().substring(0, path.lastIndexOf('/')+1);
|
||
+ URL parentURL = new URL(u, parent);
|
||
+ System.out.println(parentURL);
|
||
+ /* Load lots of class by creating multiple classloaders */
|
||
+ for(;;) {
|
||
+ ClassLoader cl = new URLClassLoader(new URL[] {parentURL}, null);
|
||
+ cl.loadClass("DummyClass");
|
||
+ }
|
||
+ } catch (Exception e) {
|
||
+ e.printStackTrace();
|
||
+ }
|
||
+ }
|
||
+
|
||
+ public static void main(String[] args) throws Exception {
|
||
+ Thread t = new Thread(new TestDaemonThread(new File(args[0])));
|
||
+ /* The important part of the bug is that a Daemon thread can continue to load classes after shutdown */
|
||
+ t.setDaemon(true);
|
||
+ t.start();
|
||
+ Thread.sleep(200);
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/lang/instrument/DaemonThread/TestDaemonThreadLauncher.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,44 @@
|
||
+/*
|
||
+ * Copyright 2014 Goldman Sachs.
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+
|
||
+import jdk.testlibrary.JDKToolLauncher;
|
||
+import jdk.testlibrary.OutputAnalyzer;
|
||
+import jdk.testlibrary.ProcessTools;
|
||
+
|
||
+import java.io.IOException;
|
||
+import java.nio.file.Path;
|
||
+
|
||
+public class TestDaemonThreadLauncher {
|
||
+
|
||
+ private static ProcessBuilder processBuilder = new ProcessBuilder();
|
||
+
|
||
+ public static void main(String args[]) throws Exception {
|
||
+ for(int i=0; i<50; i++) {
|
||
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-javaagent:DummyAgent.jar", "TestDaemonThread", ".");
|
||
+ OutputAnalyzer analyzer = new OutputAnalyzer(pb.start());
|
||
+ analyzer.shouldNotContain("ASSERTION FAILED");
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/java/net/MulticastSocket/SetGetNetworkInterfaceTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,125 @@
|
||
+/*
|
||
+ * Copyright (c) 2013, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 6458027
|
||
+ * @summary Disabling IPv6 on a specific network interface causes problems.
|
||
+ *
|
||
+ */
|
||
+
|
||
+import java.io.IOException;
|
||
+import java.net.InetAddress;
|
||
+import java.net.MulticastSocket;
|
||
+import java.net.NetworkInterface;
|
||
+import java.net.SocketException;
|
||
+import java.util.Arrays;
|
||
+import java.util.Enumeration;
|
||
+
|
||
+
|
||
+public class SetGetNetworkInterfaceTest {
|
||
+
|
||
+ public static void main(String[] args) throws Exception {
|
||
+
|
||
+ boolean passed = true;
|
||
+ try {
|
||
+ MulticastSocket ms = new MulticastSocket();
|
||
+ Enumeration<NetworkInterface> networkInterfaces = NetworkInterface
|
||
+ .getNetworkInterfaces();
|
||
+ while (networkInterfaces.hasMoreElements()) {
|
||
+ NetworkInterface netIf = networkInterfaces.nextElement();
|
||
+ if (isNetworkInterfaceTestable(netIf)) {
|
||
+ printNetIfDetails(netIf);
|
||
+ ms.setNetworkInterface(netIf);
|
||
+ NetworkInterface msNetIf = ms.getNetworkInterface();
|
||
+ if (netIf.equals(msNetIf)) {
|
||
+ System.out.println(" OK");
|
||
+ } else {
|
||
+ System.out.println("FAILED!!!");
|
||
+ printNetIfDetails(msNetIf);
|
||
+ passed = false;
|
||
+ }
|
||
+ System.out.println("------------------");
|
||
+ }
|
||
+ }
|
||
+ } catch (IOException e) {
|
||
+ e.printStackTrace();
|
||
+ passed = false;
|
||
+ }
|
||
+ if (!passed) {
|
||
+ throw new RuntimeException("Test Fail");
|
||
+ }
|
||
+ System.out.println("Test passed ");
|
||
+ }
|
||
+
|
||
+ private static boolean isNetworkInterfaceTestable(NetworkInterface netIf) throws Exception {
|
||
+ System.out.println("checking netif == " + netIf.getName());
|
||
+ return (netIf.isUp() && netIf.supportsMulticast() && isIpAddrAvailable(netIf));
|
||
+ }
|
||
+
|
||
+ private static boolean isIpAddrAvailable (NetworkInterface netIf) {
|
||
+ boolean ipAddrAvailable = false;
|
||
+ byte[] nullIpAddr = {'0', '0', '0', '0'};
|
||
+ byte[] testIpAddr = null;
|
||
+
|
||
+ Enumeration<InetAddress> ipAddresses = netIf.getInetAddresses();
|
||
+ while (ipAddresses.hasMoreElements()) {
|
||
+ InetAddress testAddr = ipAddresses.nextElement();
|
||
+ testIpAddr = testAddr.getAddress();
|
||
+ if ((testIpAddr != null) && (!Arrays.equals(testIpAddr, nullIpAddr))) {
|
||
+ ipAddrAvailable = true;
|
||
+ break;
|
||
+ } else {
|
||
+ System.out.println("ignore netif " + netIf.getName());
|
||
+ }
|
||
+ }
|
||
+ return ipAddrAvailable;
|
||
+ }
|
||
+
|
||
+ private static void printNetIfDetails(NetworkInterface ni)
|
||
+ throws SocketException {
|
||
+ System.out.println("Name " + ni.getName() + " index " + ni.getIndex());
|
||
+ Enumeration<InetAddress> en = ni.getInetAddresses();
|
||
+ while (en.hasMoreElements()) {
|
||
+ System.out.println(" InetAdress: " + en.nextElement());
|
||
+ }
|
||
+ System.out.println("HardwareAddress: " + createMacAddrString(ni));
|
||
+ System.out.println("loopback: " + ni.isLoopback() + "; pointToPoint: "
|
||
+ + ni.isPointToPoint() + "; virtual: " + ni.isVirtual()
|
||
+ + "; MTU: " + ni.getMTU());
|
||
+ }
|
||
+
|
||
+ private static String createMacAddrString(NetworkInterface netIf)
|
||
+ throws SocketException {
|
||
+ byte[] macAddr = netIf.getHardwareAddress();
|
||
+ StringBuilder sb = new StringBuilder();
|
||
+ if (macAddr != null) {
|
||
+ for (int i = 0; i < macAddr.length; i++) {
|
||
+ sb.append(String.format("%02X%s", macAddr[i],
|
||
+ (i < macAddr.length - 1) ? "-" : ""));
|
||
+ }
|
||
+ }
|
||
+ return sb.toString();
|
||
+ }
|
||
+}
|
||
--- ./jdk/test/java/net/NetworkInterface/UniqueMacAddressesTest.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/java/net/NetworkInterface/UniqueMacAddressesTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -118,11 +118,14 @@
|
||
NetworkInterface netIf = null;
|
||
while (nis.hasMoreElements()) {
|
||
netIf = (NetworkInterface) nis.nextElement();
|
||
- macAddr = netIf.getHardwareAddress();
|
||
- if (macAddr != null) {
|
||
- System.out
|
||
- .println("Adding NetworkInterface " + netIf.getName());
|
||
- networkInterfaceList.add(netIf);
|
||
+ if (netIf.isUp()) {
|
||
+ macAddr = netIf.getHardwareAddress();
|
||
+ if (macAddr != null) {
|
||
+ System.out.println("Adding NetworkInterface "
|
||
+ + netIf.getName() + " with mac address "
|
||
+ + createMacAddressString(netIf));
|
||
+ networkInterfaceList.add(netIf);
|
||
+ }
|
||
}
|
||
}
|
||
}
|
||
--- ./jdk/test/java/net/ipv6tests/BadIPv6Addresses.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/java/net/ipv6tests/BadIPv6Addresses.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -23,7 +23,7 @@
|
||
|
||
/*
|
||
* @test
|
||
- * @bug 4742177
|
||
+ * @bug 4742177 8019834
|
||
* @summary Re-test IPv6 (and specifically MulticastSocket) with latest Linux & USAGI code
|
||
*/
|
||
import java.net.*;
|
||
--- ./jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -36,7 +36,7 @@
|
||
case "$OS" in
|
||
SunOS | Linux | Darwin ) ;;
|
||
# Skip locale test for Windows
|
||
- Windows* )
|
||
+ Windows* | CYGWIN* )
|
||
echo "Passed"; exit 0 ;;
|
||
* ) echo "Unrecognized system!" ; exit 1 ;;
|
||
esac
|
||
--- ./jdk/test/java/nio/file/Path/PathOps.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/java/nio/file/Path/PathOps.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -22,7 +22,7 @@
|
||
*/
|
||
|
||
/* @test
|
||
- * @bug 4313887 6838333 6925932 7006126
|
||
+ * @bug 4313887 6838333 6925932 7006126 8037945
|
||
* @summary Unit test for java.nio.file.Path path operations
|
||
*/
|
||
|
||
@@ -899,6 +899,8 @@
|
||
.normalize("foo");
|
||
test("/foo")
|
||
.normalize("/foo");
|
||
+ test("")
|
||
+ .normalize("");
|
||
test(".")
|
||
.normalize("");
|
||
test("..")
|
||
--- ./jdk/test/java/rmi/registry/readTest/readTest.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/java/rmi/registry/readTest/readTest.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -37,11 +37,13 @@
|
||
SunOS | Linux | Darwin )
|
||
PS=":"
|
||
FS="/"
|
||
+ CHMOD="${FS}bin${FS}chmod"
|
||
FILEURL="file:"
|
||
;;
|
||
Windows* )
|
||
PS=";"
|
||
FS="\\"
|
||
+ CHMOD="chmod"
|
||
FILEURL="file:/"
|
||
if [ "$VER" -eq "5" ]; then
|
||
ARGS="-Djdk.net.ephemeralPortRange.low=1024 -Djdk.net.ephemeralPortRange.high=65000"
|
||
@@ -51,6 +53,7 @@
|
||
CYGWIN* )
|
||
PS=";"
|
||
FS="/"
|
||
+ CHMOD="chmod"
|
||
FILEURL="file:/"
|
||
if [ "${VER}" -eq "5" ]; then
|
||
ARGS="-Djdk.net.ephemeralPortRange.low=1024 -Djdk.net.ephemeralPortRange.high=65000"
|
||
@@ -65,6 +68,7 @@
|
||
|
||
TEST_CLASSPATH=.$PS${TESTCLASSPATH:-$TESTCLASSES}
|
||
cp -r ${TESTSRC}${FS}* .
|
||
+${CHMOD} -R u+w *
|
||
${TESTJAVA}${FS}bin${FS}javac testPkg${FS}*java
|
||
${TESTJAVA}${FS}bin${FS}javac -cp $TEST_CLASSPATH readTest.java
|
||
|
||
--- ./jdk/test/java/util/Currency/ValidateISO4217.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/java/util/Currency/ValidateISO4217.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2007, 2012, 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
|
||
@@ -22,7 +22,7 @@
|
||
*/
|
||
/*
|
||
* @test
|
||
- * @bug 4691089 4819436 4942982 5104960 6544471 6627549 7066203
|
||
+ * @bug 4691089 4819436 4942982 5104960 6544471 6627549 7066203 7195759
|
||
* @summary Validate ISO 4217 data for Currency class.
|
||
*/
|
||
|
||
@@ -92,7 +92,7 @@
|
||
|
||
/* Codes that are obsolete, do not have related country */
|
||
static final String otherCodes =
|
||
- "ADP-AFA-ATS-AYM-BEF-BGL-BOV-BYB-CLF-CUC-CYP-DEM-EEK-ESP-FIM-FRF-GRD-GWP-IEP-ITL-LUF-MGF-MTL-MXV-NLG-PTE-RUR-SDD-SIT-SKK-SRG-TMM-TPE-TRL-VEF-USN-USS-XAG-XAU-XBA-XBB-XBC-XBD-XDR-XFO-XFU-XPD-XPT-XSU-XTS-XUA-XXX-YUM-ZWD-ZWN-ZWR";
|
||
+ "ADP-AFA-ATS-AYM-AZM-BEF-BGL-BOV-BYB-CLF-CUC-CYP-DEM-EEK-ESP-FIM-FRF-GHC-GRD-GWP-IEP-ITL-LUF-MGF-MTL-MXV-MZM-NLG-PTE-ROL-RUR-SDD-SIT-SKK-SRG-TMM-TPE-TRL-VEF-USN-USS-VEB-XAG-XAU-XBA-XBB-XBC-XBD-XDR-XFO-XFU-XPD-XPT-XSU-XTS-XUA-XXX-YUM-ZMK-ZWD-ZWN-ZWR";
|
||
|
||
static boolean err = false;
|
||
|
||
--- ./jdk/test/java/util/Currency/tablea1.txt Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/java/util/Currency/tablea1.txt Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,12 +1,12 @@
|
||
#
|
||
#
|
||
-# Based on BSi's ISO4217 data - "TABLE A1.doc" + amendments up until MA151.doc
|
||
-# (As of 7 April 2011)
|
||
+# Amendments up until ISO 4217 AMENDMENT NUMBER 159
|
||
+# (As of 15 August 2014)
|
||
#
|
||
|
||
# Version
|
||
FILEVERSION=1
|
||
-DATAVERSION=151
|
||
+DATAVERSION=159
|
||
|
||
# ISO 4217 currency data
|
||
AF AFN 971 2
|
||
@@ -23,7 +23,7 @@
|
||
AU AUD 36 2
|
||
AT EUR 978 2
|
||
# MA 129
|
||
-AZ AZM 31 2 2005-12-31-20-00-00 AZN 944 2
|
||
+AZ AZN 944 2
|
||
BS BSD 44 2
|
||
BH BHD 48 3
|
||
BD BDT 50 2
|
||
@@ -96,7 +96,7 @@
|
||
GM GMD 270 2
|
||
GE GEL 981 2
|
||
DE EUR 978 2
|
||
-GH GHC 288 2 2007-07-01-00-00-00 GHS 936 2
|
||
+GH GHS 936 2
|
||
GI GIP 292 2
|
||
GR EUR 978 2
|
||
GL DKK 208 2
|
||
@@ -135,14 +135,14 @@
|
||
KW KWD 414 3
|
||
KG KGS 417 2
|
||
LA LAK 418 2
|
||
-LV LVL 428 2
|
||
+LV LVL 428 2 2013-12-31-22-00-00 EUR 978 2
|
||
LB LBP 422 2
|
||
#LS ZAR 710 2
|
||
LS LSL 426 2
|
||
LR LRD 430 2
|
||
LY LYD 434 3
|
||
LI CHF 756 2
|
||
-LT LTL 440 2
|
||
+LT LTL 440 2 2014-12-31-22-00-00 EUR 978 2
|
||
LU EUR 978 2
|
||
MO MOP 446 2
|
||
MK MKD 807 2
|
||
@@ -166,7 +166,7 @@
|
||
MS XCD 951 2
|
||
MA MAD 504 2
|
||
# MA 130
|
||
-MZ MZM 508 2 2006-06-30-22-00-00 MZN 943 2
|
||
+MZ MZN 943 2
|
||
MM MMK 104 2
|
||
# MA 134
|
||
ME EUR 978 2
|
||
@@ -200,7 +200,7 @@
|
||
PR USD 840 2
|
||
QA QAR 634 2
|
||
RE EUR 978 2
|
||
-RO ROL 946 2 2005-06-30-21-00-00 RON 946 2
|
||
+RO RON 946 2
|
||
RU RUB 643 2
|
||
RW RWF 646 0
|
||
SH SHP 654 2
|
||
@@ -227,6 +227,7 @@
|
||
SB SBD 90 2
|
||
SO SOS 706 2
|
||
ZA ZAR 710 2
|
||
+SS SSP 728 2
|
||
ES EUR 978 2
|
||
LK LKR 144 2
|
||
SD SDG 938 2
|
||
@@ -255,7 +256,7 @@
|
||
TM TMT 934 2
|
||
TC USD 840 2
|
||
TV AUD 36 2
|
||
-UG UGX 800 2
|
||
+UG UGX 800 0
|
||
UA UAH 980 2
|
||
AE AED 784 2
|
||
GB GBP 826 2
|
||
@@ -266,14 +267,14 @@
|
||
UY UYU 858 2
|
||
UZ UZS 860 2
|
||
VU VUV 548 0
|
||
-VE VEB 862 2 2008-01-01-04-00-00 VEF 937 2
|
||
-VN VND 704 2
|
||
+VE VEF 937 2
|
||
+VN VND 704 0
|
||
VG USD 840 2
|
||
VI USD 840 2
|
||
WF XPF 953 0
|
||
EH MAD 504 2
|
||
YE YER 886 2
|
||
-ZM ZMK 894 2
|
||
+ZM ZMW 967 2
|
||
ZW ZWL 932 2
|
||
#XAU XAU 959
|
||
#XBA XBA 955
|
||
--- ./jdk/test/java/util/Locale/LocaleTest.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/java/util/Locale/LocaleTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -25,7 +25,7 @@
|
||
* @bug 4052404 4052440 4084688 4092475 4101316 4105828 4107014 4107953 4110613
|
||
* 4118587 4118595 4122371 4126371 4126880 4135316 4135752 4139504 4139940 4143951
|
||
* 4147315 4147317 4147552 4335196 4778440 4940539 5010672 6475525 6544471 6627549
|
||
- * 6786276 7066203
|
||
+ * 6786276 7066203 7085757
|
||
* @summary test Locales
|
||
*/
|
||
/*
|
||
@@ -440,8 +440,8 @@
|
||
String[] spotCheck2 = { "US", "CA", "GB", "FR", "DE", "IT", "JP", "KR", "CN", "TW", "TH" };
|
||
|
||
|
||
- if (test.length != 249)
|
||
- errln("Expected getISOCountries to return 249 countries; it returned " + test.length);
|
||
+ if (test.length != 250)
|
||
+ errln("Expected getISOCountries to return 250 countries; it returned " + test.length);
|
||
else {
|
||
for (int i = 0; i < spotCheck2.length; i++) {
|
||
int j;
|
||
--- ./jdk/test/java/util/TimeZone/TimeZoneDatePermissionCheck.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/java/util/TimeZone/TimeZoneDatePermissionCheck.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -36,6 +36,7 @@
|
||
${TESTJAVA}/bin/keytool -genkeypair -alias testcert \
|
||
-keystore ${TESTCLASSES}/timezonedatetest.store \
|
||
-storepass testpass -validity 360 \
|
||
+ -keyalg rsa \
|
||
-dname "cn=Mark Wildebeest, ou=FreeSoft, o=Red Hat, c=NL" \
|
||
-keypass testpass
|
||
|
||
--- ./jdk/test/java/util/jar/JarInputStream/ExtraFileInMetaInf.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/java/util/jar/JarInputStream/ExtraFileInMetaInf.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -49,7 +49,7 @@
|
||
new File("ks").delete();
|
||
sun.security.tools.KeyTool.main(
|
||
("-keystore ks -storepass changeit -keypass changeit " +
|
||
- "-alias a -dname CN=A -genkeypair").split(" "));
|
||
+ "-keyalg rsa -alias a -dname CN=A -genkeypair").split(" "));
|
||
sun.security.tools.JarSigner.main(
|
||
"-keystore ks -storepass changeit x.jar a".split(" "));
|
||
|
||
--- ./jdk/test/java/util/logging/ParentLoggersTest.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/java/util/logging/ParentLoggersTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -40,7 +40,9 @@
|
||
static final String LOGGER_NAME_1 = PARENT_NAME_1 + ".myLogger";
|
||
static final String LOGGER_NAME_2 = PARENT_NAME_2 + ".myBar.myLogger";
|
||
|
||
- static final List<String> initialLoggerNames = new ArrayList<String>();
|
||
+ static final List<String> initialLoggerNames = new ArrayList<>();
|
||
+ static final List<Logger> createdLoggers = new ArrayList<>();
|
||
+
|
||
public static void main(String args[]) throws Exception {
|
||
// cache the initial set of loggers before this test begins
|
||
// to add any loggers
|
||
@@ -51,7 +53,7 @@
|
||
if (!defaultLoggers.contains(logger)) {
|
||
initialLoggerNames.add(logger);
|
||
}
|
||
- };
|
||
+ }
|
||
|
||
String tstSrc = System.getProperty(TST_SRC_PROP);
|
||
File fname = new File(tstSrc, LM_PROP_FNAME);
|
||
@@ -69,7 +71,7 @@
|
||
}
|
||
|
||
public static List<String> getDefaultLoggerNames() {
|
||
- List<String> expectedLoggerNames = new ArrayList<String>();
|
||
+ List<String> expectedLoggerNames = new ArrayList<>();
|
||
|
||
// LogManager always creates two loggers:
|
||
expectedLoggerNames.add(""); // root logger: ""
|
||
@@ -83,56 +85,41 @@
|
||
*/
|
||
public static boolean checkLoggers() {
|
||
String failMsg = "# checkLoggers: getLoggerNames() returned unexpected loggers";
|
||
- Vector<String> expectedLoggerNames = new Vector<String>(getDefaultLoggerNames());
|
||
+ List<String> expectedLoggerNames = new ArrayList<>(getDefaultLoggerNames());
|
||
|
||
// Create the logger LOGGER_NAME_1
|
||
- Logger logger1 = Logger.getLogger(LOGGER_NAME_1);
|
||
- expectedLoggerNames.addElement(PARENT_NAME_1);
|
||
- expectedLoggerNames.addElement(LOGGER_NAME_1);
|
||
+ createdLoggers.add(Logger.getLogger(LOGGER_NAME_1));
|
||
+ expectedLoggerNames.add(PARENT_NAME_1);
|
||
+ expectedLoggerNames.add(LOGGER_NAME_1);
|
||
|
||
// Create the logger LOGGER_NAME_2
|
||
- Logger logger2 = Logger.getLogger(LOGGER_NAME_2);
|
||
- expectedLoggerNames.addElement(PARENT_NAME_2);
|
||
- expectedLoggerNames.addElement(LOGGER_NAME_2);
|
||
+ createdLoggers.add(Logger.getLogger(LOGGER_NAME_2));
|
||
+ expectedLoggerNames.add(PARENT_NAME_2);
|
||
+ expectedLoggerNames.add(LOGGER_NAME_2);
|
||
|
||
Enumeration<String> returnedLoggersEnum = logMgr.getLoggerNames();
|
||
- Vector<String> returnedLoggerNames = new Vector<String>(0);
|
||
+ List<String> returnedLoggerNames = new ArrayList<>(0);
|
||
while (returnedLoggersEnum.hasMoreElements()) {
|
||
String logger = returnedLoggersEnum.nextElement();
|
||
if (!initialLoggerNames.contains(logger)) {
|
||
// filter out the loggers that have been added before this test runs
|
||
- returnedLoggerNames.addElement(logger);
|
||
+ returnedLoggerNames.add(logger);
|
||
}
|
||
-
|
||
- };
|
||
-
|
||
+ }
|
||
+ System.out.println(returnedLoggerNames);
|
||
return checkNames(expectedLoggerNames, returnedLoggerNames, failMsg);
|
||
}
|
||
|
||
// Returns boolean values: PASSED or FAILED
|
||
- private static boolean checkNames(Vector<String> expNames,
|
||
- Vector<String> retNames,
|
||
+ private static boolean checkNames(List<String> expNames,
|
||
+ List<String> retNames,
|
||
String failMsg) {
|
||
boolean status = PASSED;
|
||
|
||
if (expNames.size() != retNames.size()) {
|
||
status = FAILED;
|
||
- } else {
|
||
- boolean checked[] = new boolean[retNames.size()];
|
||
- for (int i = 0; i < expNames.size(); i++) {
|
||
- int j = 0;
|
||
- for (; j < retNames.size(); j++) {
|
||
- if (!checked[j] &&
|
||
- expNames.elementAt(i).equals(retNames.elementAt(j))) {
|
||
- checked[j] = true;
|
||
- break;
|
||
- }
|
||
- }
|
||
- if (j >= retNames.size()) {
|
||
- status = FAILED;
|
||
- break;
|
||
- }
|
||
- }
|
||
+ } else if (!new HashSet<>(expNames).equals(new HashSet<>(retNames))) {
|
||
+ status = FAILED;
|
||
}
|
||
if (!status) {
|
||
printFailMsg(expNames, retNames, failMsg);
|
||
@@ -140,25 +127,25 @@
|
||
return status;
|
||
}
|
||
|
||
- private static void printFailMsg(Vector<String> expNames,
|
||
- Vector<String> retNames,
|
||
+ private static void printFailMsg(List<String> expNames,
|
||
+ List<String> retNames,
|
||
String failMsg) {
|
||
out.println();
|
||
out.println(failMsg);
|
||
- if (expNames.size() == 0) {
|
||
+ if (expNames.isEmpty()) {
|
||
out.println("# there are NO expected logger names");
|
||
} else {
|
||
out.println("# expected logger names (" + expNames.size() + "):");
|
||
for (int i = 0; i < expNames.size(); i++) {
|
||
- out.println(" expNames[" + i + "] = " + expNames.elementAt(i));
|
||
+ out.println(" expNames[" + i + "] = " + expNames.get(i));
|
||
}
|
||
}
|
||
- if (retNames.size() == 0) {
|
||
+ if (retNames.isEmpty()) {
|
||
out.println("# there are NO returned logger names");
|
||
} else {
|
||
out.println("# returned logger names (" + retNames.size() + "):");
|
||
for (int i = 0; i < retNames.size(); i++) {
|
||
- out.println(" retNames[" + i + "] = " + retNames.elementAt(i));
|
||
+ out.println(" retNames[" + i + "] = " + retNames.get(i));
|
||
}
|
||
}
|
||
}
|
||
--- ./jdk/test/java/util/logging/TestLoggerBundleSync.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/java/util/logging/TestLoggerBundleSync.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -190,8 +190,10 @@
|
||
final static class MyHandler extends Handler {
|
||
volatile ResourceBundle rb;
|
||
volatile String rbName;
|
||
+ volatile int count = 0;
|
||
@Override
|
||
public synchronized void publish(LogRecord record) {
|
||
+ count++;
|
||
rb = record.getResourceBundle();
|
||
rbName = record.getResourceBundleName();
|
||
}
|
||
@@ -227,23 +229,51 @@
|
||
Logger ll = Logger.getLogger(l.getName()+".bie.bye");
|
||
ResourceBundle hrb;
|
||
String hrbName;
|
||
+ if (handler.getLevel() != Level.FINEST) {
|
||
+ throw new RuntimeException("Handler level is not finest: "
|
||
+ + handler.getLevel());
|
||
+ }
|
||
+ final int countBefore = handler.count;
|
||
ll.setLevel(Level.FINEST);
|
||
ll.addHandler(handler);
|
||
ll.fine("dummy");
|
||
ll.removeHandler(handler);
|
||
+ final int countAfter = handler.count;
|
||
+ if (countBefore == countAfter) {
|
||
+ throw new RuntimeException("Handler not called for "
|
||
+ + ll.getName() + "("+ countAfter +")");
|
||
+ }
|
||
hrb = handler.rb;
|
||
hrbName = handler.rbName;
|
||
if (name != null) {
|
||
+ // if name is not null, then it implies that it
|
||
+ // won't change, since setResourceBundle() cannot
|
||
+ // replace a non null name.
|
||
+ // Since we never set the resource bundle on 'll',
|
||
+ // then ll must inherit its resource bundle [name]
|
||
+ // from l - and therefor we should find it in
|
||
+ // handler.rb/handler.rbName
|
||
if (!name.equals(hrbName)) {
|
||
throw new RuntimeException("Unexpected bundle name: "
|
||
- +hrb.getClass().getName());
|
||
+ +hrbName);
|
||
}
|
||
+ // here we know that hrbName is not null so hrb
|
||
+ // should not be null either.
|
||
if (!name.equals(hrb.getClass().getName())) {
|
||
throw new RuntimeException("Unexpected bundle name: "
|
||
+hrb.getClass().getName());
|
||
}
|
||
}
|
||
|
||
+ // Make sure to refer to 'l' explicitly in order to
|
||
+ // prevent eager garbage collecting before the end of
|
||
+ // the test (JDK-8030192)
|
||
+ if (!ll.getName().startsWith(l.getName())) {
|
||
+ throw new RuntimeException("Logger " + ll.getName()
|
||
+ + "does not start with expected prefix "
|
||
+ + l.getName());
|
||
+ }
|
||
+
|
||
getRBcount.incrementAndGet();
|
||
if (!goOn) break;
|
||
Thread.sleep(1);
|
||
--- ./jdk/test/java/util/zip/ZipFile/ReadZip.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/java/util/zip/ZipFile/ReadZip.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -63,6 +63,8 @@
|
||
Files.copy(Paths.get(System.getProperty("test.src", ""), "input.zip"),
|
||
newZip.toPath(), StandardCopyOption.REPLACE_EXISTING);
|
||
|
||
+ newZip.setWritable(true);
|
||
+
|
||
// pad some bytes
|
||
try (OutputStream os = Files.newOutputStream(newZip.toPath(),
|
||
StandardOpenOption.APPEND)) {
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/imageio/plugins/png/PngDitDepthTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,74 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+* @test
|
||
+* @bug 4991647
|
||
+* @summary PNGMetadata.getAsTree() sets bitDepth to invalid value
|
||
+* @run main PngDitDepthTest
|
||
+*/
|
||
+
|
||
+import org.w3c.dom.Node;
|
||
+
|
||
+import javax.imageio.ImageIO;
|
||
+import javax.imageio.ImageTypeSpecifier;
|
||
+import javax.imageio.ImageWriter;
|
||
+import javax.imageio.metadata.IIOInvalidTreeException;
|
||
+import javax.imageio.metadata.IIOMetadata;
|
||
+import java.awt.image.ColorModel;
|
||
+import java.awt.image.SampleModel;
|
||
+import java.util.Iterator;
|
||
+
|
||
+public class PngDitDepthTest {
|
||
+
|
||
+ public static void main(String[] args) throws IIOInvalidTreeException {
|
||
+
|
||
+ // getting the writer for the png format
|
||
+ Iterator iter = ImageIO.getImageWritersByFormatName("png");
|
||
+ ImageWriter writer = (ImageWriter) iter.next();
|
||
+
|
||
+ // creating a color model
|
||
+ ColorModel colorModel = ColorModel.getRGBdefault();
|
||
+
|
||
+ // creating a sample model
|
||
+ SampleModel sampleModel = colorModel.createCompatibleSampleModel(640, 480);
|
||
+
|
||
+ // creating a default metadata object
|
||
+ IIOMetadata metaData = writer.getDefaultImageMetadata(new ImageTypeSpecifier(colorModel, sampleModel), null);
|
||
+ String formatName = metaData.getNativeMetadataFormatName();
|
||
+
|
||
+ // first call
|
||
+ Node metaDataNode = metaData.getAsTree(formatName);
|
||
+ try {
|
||
+ metaData.setFromTree(formatName, metaDataNode);
|
||
+ } catch (Exception ex) {
|
||
+ ex.printStackTrace();
|
||
+ }
|
||
+
|
||
+ // second call (bitdepht is already set to an invalid value)
|
||
+ metaDataNode = metaData.getAsTree(formatName);
|
||
+
|
||
+ metaData.setFromTree(formatName, metaDataNode);
|
||
+
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/swing/JComboBox/8032878/bug8032878.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,136 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/* @test
|
||
+ * @bug 8032878
|
||
+ * @summary Checks that JComboBox as JTable cell editor processes key events
|
||
+ * even where setSurrendersFocusOnKeystroke flag in JTable is false and
|
||
+ * that it does not lose the first key press where the flag is true.
|
||
+ * @library ../../regtesthelpers
|
||
+ * @build Util
|
||
+ * @author Alexey Ivanov
|
||
+ */
|
||
+
|
||
+import java.awt.*;
|
||
+import java.awt.event.KeyEvent;
|
||
+import javax.swing.*;
|
||
+import javax.swing.text.JTextComponent;
|
||
+
|
||
+import sun.awt.SunToolkit;
|
||
+
|
||
+public class bug8032878 implements Runnable {
|
||
+ private static final String ONE = "one";
|
||
+ private static final String TWO = "two";
|
||
+ private static final String THREE = "three";
|
||
+
|
||
+ private static final String EXPECTED = "one123";
|
||
+
|
||
+ private final Robot robot;
|
||
+
|
||
+ private JFrame frame;
|
||
+ private JComboBox cb;
|
||
+
|
||
+ private volatile boolean surrender;
|
||
+ private volatile String text;
|
||
+
|
||
+ public static void main(String[] args) throws Exception {
|
||
+ final bug8032878 test = new bug8032878();
|
||
+
|
||
+ test.test(false);
|
||
+ test.test(true);
|
||
+ }
|
||
+
|
||
+ public bug8032878() throws AWTException {
|
||
+ robot = new Robot();
|
||
+ robot.setAutoDelay(100);
|
||
+ }
|
||
+
|
||
+ private void setupUI() {
|
||
+ frame = new JFrame();
|
||
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||
+
|
||
+ JTable table = new JTable(new String[][] {{ONE}, {TWO}, {THREE}},
|
||
+ new String[] { "#"});
|
||
+ table.setSurrendersFocusOnKeystroke(surrender);
|
||
+
|
||
+ cb = new JComboBox(new String[]{ONE, TWO, THREE});
|
||
+ cb.setEditable(true);
|
||
+ DefaultCellEditor comboEditor = new DefaultCellEditor(cb);
|
||
+ comboEditor.setClickCountToStart(1);
|
||
+ table.getColumnModel().getColumn(0).setCellEditor(comboEditor);
|
||
+ frame.add(table);
|
||
+
|
||
+ frame.pack();
|
||
+ frame.setVisible(true);
|
||
+ }
|
||
+
|
||
+ private void test(final boolean flag) throws Exception {
|
||
+ try {
|
||
+ surrender = flag;
|
||
+ SwingUtilities.invokeAndWait(this);
|
||
+
|
||
+ runTest();
|
||
+ checkResult();
|
||
+ } finally {
|
||
+ if (frame != null) {
|
||
+ frame.dispose();
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private void runTest() throws Exception {
|
||
+ realSync();
|
||
+ // Select 'one'
|
||
+ Util.hitKeys(robot, KeyEvent.VK_TAB);
|
||
+ realSync();
|
||
+ Util.hitKeys(robot, KeyEvent.VK_1);
|
||
+ Util.hitKeys(robot, KeyEvent.VK_2);
|
||
+ Util.hitKeys(robot, KeyEvent.VK_3);
|
||
+ Util.hitKeys(robot, KeyEvent.VK_ENTER);
|
||
+ realSync();
|
||
+ }
|
||
+
|
||
+ private void checkResult() throws Exception {
|
||
+ SwingUtilities.invokeAndWait(new Runnable() {
|
||
+ public void run() {
|
||
+ text = ((JTextComponent) cb.getEditor().getEditorComponent()).getText();
|
||
+ }
|
||
+ });
|
||
+ if (text.equals(EXPECTED)) {
|
||
+ System.out.println("Test with surrender = " + surrender + " passed");
|
||
+ } else {
|
||
+ System.out.println("Test with surrender = " + surrender + " failed");
|
||
+ throw new RuntimeException("Expected value in JComboBox editor '" +
|
||
+ EXPECTED + "' but found '" + text + "'.");
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private static void realSync() {
|
||
+ ((SunToolkit) (Toolkit.getDefaultToolkit())).realSync();
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void run() {
|
||
+ setupUI();
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/swing/JComponent/8043610/bug8043610.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,122 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+
|
||
+/*
|
||
+ @test
|
||
+ @bug 8043610
|
||
+ @summary Tests that JComponent invalidate, revalidate and repaint methods could
|
||
+ be called from any thread
|
||
+ @author Petr Pchelko
|
||
+*/
|
||
+
|
||
+import sun.awt.SunToolkit;
|
||
+
|
||
+import javax.swing.*;
|
||
+import java.awt.*;
|
||
+import java.util.concurrent.CountDownLatch;
|
||
+import java.util.concurrent.atomic.AtomicReference;
|
||
+
|
||
+public class bug8043610 {
|
||
+ private static volatile JFrame frame;
|
||
+ private static volatile JComponent component;
|
||
+
|
||
+ public static void main(String[] args) throws Exception {
|
||
+ ThreadGroup stubTG = new ThreadGroup(getRootThreadGroup(), "Stub Thread Group");
|
||
+ ThreadGroup swingTG = new ThreadGroup(getRootThreadGroup(), "SwingTG");
|
||
+ try {
|
||
+ Thread stubThread = new Thread(stubTG, new Runnable() {
|
||
+ @Override
|
||
+ public void run() {
|
||
+ SunToolkit.createNewAppContext();
|
||
+ }
|
||
+ });
|
||
+ stubThread.start();
|
||
+ stubThread.join();
|
||
+
|
||
+ final CountDownLatch startSwingLatch = new CountDownLatch(1);
|
||
+ new Thread(swingTG, new Runnable() {
|
||
+ @Override
|
||
+ public void run() {
|
||
+ SunToolkit.createNewAppContext();
|
||
+ SwingUtilities.invokeLater(new Runnable() {
|
||
+ @Override
|
||
+ public void run() {
|
||
+ frame = new JFrame();
|
||
+ component = new JLabel("Test Text");
|
||
+ frame.add(component);
|
||
+ frame.setBounds(100, 100, 100, 100);
|
||
+ frame.setVisible(true);
|
||
+ startSwingLatch.countDown();
|
||
+ }
|
||
+ });
|
||
+ }
|
||
+ }).start();
|
||
+ startSwingLatch.await();
|
||
+
|
||
+ final AtomicReference<Exception> caughtException = new AtomicReference<>();
|
||
+ Thread checkThread = new Thread(getRootThreadGroup(), new Runnable() {
|
||
+ @Override
|
||
+ public void run() {
|
||
+ try {
|
||
+ component.invalidate();
|
||
+ component.revalidate();
|
||
+ component.repaint(new Rectangle(0, 0, 0, 0));
|
||
+ } catch (Exception e) {
|
||
+ caughtException.set(e);
|
||
+ }
|
||
+ }
|
||
+ });
|
||
+ checkThread.start();
|
||
+ checkThread.join();
|
||
+
|
||
+ if (caughtException.get() != null) {
|
||
+ throw new RuntimeException("Failed. Caught exception!", caughtException.get());
|
||
+ }
|
||
+ } finally {
|
||
+ new Thread(swingTG, new Runnable() {
|
||
+ @Override
|
||
+ public void run() {
|
||
+ SwingUtilities.invokeLater(new Runnable() {
|
||
+ @Override
|
||
+ public void run() {
|
||
+ if (frame != null) {
|
||
+ frame.dispose();
|
||
+ }
|
||
+ }
|
||
+ });
|
||
+ }
|
||
+ }).start();
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private static ThreadGroup getRootThreadGroup() {
|
||
+ ThreadGroup currentTG = Thread.currentThread().getThreadGroup();
|
||
+ ThreadGroup parentTG = currentTG.getParent();
|
||
+ while (parentTG != null) {
|
||
+ currentTG = parentTG;
|
||
+ parentTG = currentTG.getParent();
|
||
+ }
|
||
+ return currentTG;
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/swing/JFileChooser/8046391/bug8046391.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,63 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 8046391
|
||
+ * @summary JFileChooser hangs if displayed in Windows L&F
|
||
+ * @author Alexey Ivanov
|
||
+ * @run main/othervm/timeout=10 bug8046391
|
||
+*/
|
||
+
|
||
+import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
|
||
+import sun.awt.OSInfo;
|
||
+import sun.awt.OSInfo.OSType;
|
||
+
|
||
+import javax.swing.JFileChooser;
|
||
+import javax.swing.SwingUtilities;
|
||
+import javax.swing.UIManager;
|
||
+import javax.swing.UnsupportedLookAndFeelException;
|
||
+
|
||
+public class bug8046391 {
|
||
+
|
||
+ public static void main(String[] args) throws Exception {
|
||
+ OSType type = OSInfo.getOSType();
|
||
+ if (type != OSType.WINDOWS) {
|
||
+ System.out.println("This test is for Windows only... skipping!");
|
||
+ return;
|
||
+ }
|
||
+
|
||
+ SwingUtilities.invokeAndWait(() -> {
|
||
+ try {
|
||
+ UIManager.setLookAndFeel(new WindowsLookAndFeel());
|
||
+ } catch (UnsupportedLookAndFeelException e) {
|
||
+ e.printStackTrace();
|
||
+ }
|
||
+ System.out.println("Creating JFileChooser...");
|
||
+ JFileChooser fileChooser = new JFileChooser();
|
||
+ System.out.println("Test passed: chooser = " + fileChooser);
|
||
+ });
|
||
+ // Test fails if creating JFileChooser hangs
|
||
+ }
|
||
+
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/swing/JFileChooser/8062561/bug8062561.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,213 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+import java.awt.Robot;
|
||
+import java.awt.event.KeyEvent;
|
||
+import java.io.File;
|
||
+import java.io.IOException;
|
||
+import java.io.InputStream;
|
||
+import java.io.PrintWriter;
|
||
+import java.util.concurrent.TimeUnit;
|
||
+import javax.swing.JFileChooser;
|
||
+import javax.swing.SwingUtilities;
|
||
+import javax.swing.filechooser.FileSystemView;
|
||
+
|
||
+/**
|
||
+ * @test
|
||
+ * @bug 8062561
|
||
+ * @summary File system view returns null default directory
|
||
+ * @run main/othervm bug8062561 GENERATE_POLICY
|
||
+ * @run main/othervm/policy=security.policy bug8062561 CHECK_DEFAULT_DIR run
|
||
+ */
|
||
+public class bug8062561 {
|
||
+
|
||
+ private static final String POLICY_FILE = "security2.policy";
|
||
+ private static volatile boolean fileChooserIsShown = false;
|
||
+
|
||
+ public static void main(String[] args) throws Exception {
|
||
+
|
||
+ String test = args[0];
|
||
+
|
||
+ if ("GENERATE_POLICY".equals(test)) {
|
||
+ generatePolicyFile();
|
||
+ } else if ("CHECK_DEFAULT_DIR".equals(test)) {
|
||
+ checkDefaultDirectory();
|
||
+ } else if ("CHECK_FILE_CHOOSER".equals(test)) {
|
||
+ checkFileChooser();
|
||
+ } else {
|
||
+ throw new RuntimeException("Wrong argument!");
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private static void checkDefaultDirectory() {
|
||
+ if (System.getSecurityManager() == null) {
|
||
+ throw new RuntimeException("Security manager is not set!");
|
||
+ }
|
||
+
|
||
+ File defaultDirectory = FileSystemView.getFileSystemView().
|
||
+ getDefaultDirectory();
|
||
+ if (defaultDirectory != null) {
|
||
+ throw new RuntimeException("File system default directory is null!");
|
||
+ }
|
||
+ }
|
||
+ private static volatile JFileChooser fileChooser;
|
||
+
|
||
+ private static void checkFileChooser() throws Exception {
|
||
+ if (System.getSecurityManager() == null) {
|
||
+ throw new RuntimeException("Security manager is not set!");
|
||
+ }
|
||
+
|
||
+ Robot robot = new Robot();
|
||
+ robot.setAutoDelay(50);
|
||
+
|
||
+ SwingUtilities.invokeLater(new Runnable() {
|
||
+
|
||
+ public void run() {
|
||
+ fileChooser = new JFileChooser();
|
||
+ fileChooser.showOpenDialog(null);
|
||
+ fileChooserIsShown = true;
|
||
+ System.out.println("Start file chooser: " + fileChooserIsShown);
|
||
+ }
|
||
+ });
|
||
+
|
||
+ long time = System.currentTimeMillis();
|
||
+ while (fileChooser == null) {
|
||
+ if (System.currentTimeMillis() - time >= 5000) {
|
||
+ System.exit(1);
|
||
+ }
|
||
+ Thread.sleep(500);
|
||
+ }
|
||
+
|
||
+ Thread.sleep(500);
|
||
+ robot.keyPress(KeyEvent.VK_ESCAPE);
|
||
+ robot.keyRelease(KeyEvent.VK_ESCAPE);
|
||
+ System.exit(0);
|
||
+ }
|
||
+
|
||
+ private static void generatePolicyFile() throws Exception {
|
||
+ if (System.getSecurityManager() != null) {
|
||
+ throw new RuntimeException("Security manager should be null!");
|
||
+ }
|
||
+
|
||
+ String osName = System.getProperty("os.name");
|
||
+ System.out.println("os name: " + osName);
|
||
+ if (!osName.startsWith("Windows")) {
|
||
+ return;
|
||
+ }
|
||
+ System.out.println("after OS Check!");
|
||
+
|
||
+ File defaultDirectory = FileSystemView.getFileSystemView().
|
||
+ getDefaultDirectory();
|
||
+
|
||
+ if (defaultDirectory == null) {
|
||
+ throw new RuntimeException("Default directory is null!");
|
||
+ }
|
||
+
|
||
+ File policyFile = new File(POLICY_FILE);
|
||
+ if (!policyFile.exists()) {
|
||
+ policyFile.createNewFile();
|
||
+ }
|
||
+
|
||
+ PrintWriter writer = new PrintWriter(policyFile, "UTF-8");
|
||
+ writer.println("grant {");
|
||
+ String documents = defaultDirectory.getCanonicalPath();
|
||
+ documents = documents.replace('\\', '/');
|
||
+ // user.dir permission
|
||
+ writer.print(" permission java.util.PropertyPermission");
|
||
+ writer.print(" \"user.dir\",");
|
||
+ writer.println(" \"read\";");
|
||
+ // Documents permission
|
||
+ writer.print(" permission java.io.FilePermission");
|
||
+ writer.print(" \"" + documents + "\",");
|
||
+ writer.println(" \"read\";");
|
||
+ // Desktop permission
|
||
+ writer.print(" permission java.io.FilePermission");
|
||
+ writer.print(" \"" + documents.replace("Documents", "Desktop") + "\",");
|
||
+ writer.println(" \"read\";");
|
||
+ // robot permission // "java.awt.AWTPermission" "createRobot"
|
||
+ writer.print(" permission java.awt.AWTPermission");
|
||
+ writer.println(" \"createRobot\";");
|
||
+ writer.println("};");
|
||
+ writer.close();
|
||
+
|
||
+ performTest();
|
||
+ }
|
||
+
|
||
+ private static void performTest() throws Exception {
|
||
+ String javaPath = System.getProperty("java.home", "");
|
||
+ String command = javaPath + File.separator + "bin" + File.separator + "java"
|
||
+ + " -Djava.security.manager -Djava.security.policy=" + POLICY_FILE
|
||
+ + " bug8062561 CHECK_FILE_CHOOSER";
|
||
+ System.out.println(command);
|
||
+ int processExit = 0;
|
||
+
|
||
+ Process process = Runtime.getRuntime().exec(command);
|
||
+
|
||
+ try {
|
||
+ processExit = process.waitFor();
|
||
+ } catch (IllegalThreadStateException e) {
|
||
+ throw new RuntimeException(e);
|
||
+ }
|
||
+ System.out.println("[RESULT] : "
|
||
+ + "The sub process has cleanly exited : PASS");
|
||
+
|
||
+ InputStream errorStream = process.getErrorStream();
|
||
+ System.out.println("========= Child process stderr ========");
|
||
+ boolean exception = dumpStream(errorStream);
|
||
+ if (exception) {
|
||
+ throw new RuntimeException("[RESULT] :"
|
||
+ + " Exception in child process : FAIL");
|
||
+ }
|
||
+ System.out.println("=======================================");
|
||
+
|
||
+ InputStream processInputStream = process.getInputStream();
|
||
+ System.out.println("========= Child process output ========");
|
||
+ dumpStream(processInputStream);
|
||
+ System.out.println("=======================================");
|
||
+
|
||
+ if (processExit != 0) {
|
||
+ System.out.println("process exit: " + processExit);
|
||
+ process.destroy();
|
||
+ throw new RuntimeException("[RESULT] : "
|
||
+ + "The sub process has not exited : FAIL");
|
||
+ }
|
||
+ }
|
||
+
|
||
+ public static boolean dumpStream(InputStream in) throws IOException {
|
||
+ String tempString;
|
||
+ int count = in.available();
|
||
+ boolean exception = false;
|
||
+ while (count > 0) {
|
||
+ byte[] b = new byte[count];
|
||
+ in.read(b);
|
||
+ tempString = new String(b);
|
||
+ if (!exception) {
|
||
+ exception = tempString.indexOf("Exception") != -1;
|
||
+ }
|
||
+ System.out.println(tempString);
|
||
+ count = in.available();
|
||
+ }
|
||
+
|
||
+ return exception;
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/swing/JFileChooser/8062561/security.policy Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,5 @@
|
||
+grant {
|
||
+
|
||
+ permission java.util.PropertyPermission "user.home", "read";
|
||
+ permission java.util.PropertyPermission "user.dir", "read";
|
||
+};
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/swing/JFileChooser/8062561/security2.policy Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,1 @@
|
||
+// Autogenerated file
|
||
\ No newline at end of file
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/swing/JPopupMenu/7160604/bug7160604.html Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,30 @@
|
||
+<!--
|
||
+ Copyright (c) 2013, 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.
|
||
+
|
||
+ 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.
|
||
+-->
|
||
+
|
||
+<html>
|
||
+<body>
|
||
+<applet code="bug7160604.class" width=400 height=100></applet>
|
||
+Click on the top-bar and combo-box more than once.
|
||
+Make sure popup menu and drop-down list have a border and their items are drawn properly.
|
||
+</body>
|
||
+</html>
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/swing/JPopupMenu/7160604/bug7160604.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,90 @@
|
||
+/*
|
||
+ * Copyright (c) 2013, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/* @test
|
||
+ @bug 7160604
|
||
+ @summary Using non-opaque windows - popups are initially not painted correctly
|
||
+ @author Oleg Pekhovskiy
|
||
+ @run applet/manual=yesno bug7160604.html
|
||
+*/
|
||
+
|
||
+import javax.swing.AbstractAction;
|
||
+import javax.swing.BorderFactory;
|
||
+import javax.swing.JApplet;
|
||
+import javax.swing.JComboBox;
|
||
+import javax.swing.JLabel;
|
||
+import javax.swing.JMenuItem;
|
||
+import javax.swing.JPanel;
|
||
+import javax.swing.JPopupMenu;
|
||
+import javax.swing.JWindow;
|
||
+import javax.swing.SwingUtilities;
|
||
+import java.awt.BorderLayout;
|
||
+import java.awt.Color;
|
||
+import java.awt.event.ActionEvent;
|
||
+import java.awt.event.MouseAdapter;
|
||
+import java.awt.event.MouseEvent;
|
||
+
|
||
+public class bug7160604 extends JApplet {
|
||
+
|
||
+ public void init() {
|
||
+ SwingUtilities.invokeLater(new Runnable() {
|
||
+ @Override
|
||
+ public void run() {
|
||
+ final JWindow window = new JWindow();
|
||
+ window.setLocation(200, 200);
|
||
+ window.setSize(300, 300);
|
||
+
|
||
+ final JLabel label = new JLabel("...click to invoke JPopupMenu");
|
||
+ label.setOpaque(true);
|
||
+ final JPanel contentPane = new JPanel(new BorderLayout());
|
||
+ contentPane.setBorder(BorderFactory.createLineBorder(Color.RED));
|
||
+ window.setContentPane(contentPane);
|
||
+ contentPane.add(label, BorderLayout.NORTH);
|
||
+
|
||
+ final JComboBox comboBox = new JComboBox(new Object[]{"1", "2", "3", "4"});
|
||
+ contentPane.add(comboBox, BorderLayout.SOUTH);
|
||
+
|
||
+ final JPopupMenu jPopupMenu = new JPopupMenu();
|
||
+
|
||
+ jPopupMenu.add("string");
|
||
+ jPopupMenu.add(new AbstractAction("action") {
|
||
+ @Override
|
||
+ public void actionPerformed(final ActionEvent e) {
|
||
+ }
|
||
+ });
|
||
+ jPopupMenu.add(new JLabel("label"));
|
||
+ jPopupMenu.add(new JMenuItem("MenuItem"));
|
||
+ label.addMouseListener(new MouseAdapter() {
|
||
+ @Override
|
||
+ public void mouseReleased(final MouseEvent e) {
|
||
+ jPopupMenu.show(label, 0, 0);
|
||
+ }
|
||
+ });
|
||
+
|
||
+ window.setBackground(new Color(0, 0, 0, 0));
|
||
+
|
||
+ window.setVisible(true);
|
||
+ }
|
||
+ });
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/swing/JTable/8032874/bug8032874.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,145 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/* @test
|
||
+ * @bug 8032874
|
||
+ * @summary Test whether ArrayIndexOutOfBoundsException is thrown or not,
|
||
+ * once selected row is removed from JTable with Sorter and Filter
|
||
+ * @author Dmitry Markov
|
||
+ * @run main bug8032874
|
||
+ */
|
||
+
|
||
+import java.awt.*;
|
||
+import java.util.ArrayList;
|
||
+import java.util.List;
|
||
+
|
||
+import javax.swing.*;
|
||
+import javax.swing.table.AbstractTableModel;
|
||
+import javax.swing.table.TableRowSorter;
|
||
+
|
||
+import sun.awt.SunToolkit;
|
||
+
|
||
+public class bug8032874 {
|
||
+ private static final int ROW_COUNT = 5;
|
||
+ private static JTable table;
|
||
+ private static TestTableModel tableModel;
|
||
+
|
||
+ public static void main(String args[]) throws Exception {
|
||
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
|
||
+
|
||
+ SwingUtilities.invokeAndWait(new Runnable() {
|
||
+ @Override
|
||
+ public void run() {
|
||
+ createAndShowUI();
|
||
+ }
|
||
+ });
|
||
+ toolkit.realSync();
|
||
+
|
||
+ SwingUtilities.invokeAndWait(new Runnable() {
|
||
+ @Override
|
||
+ public void run() {
|
||
+ table.getRowSorter().toggleSortOrder(0);
|
||
+ table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
|
||
+ table.setRowSelectionInterval(1, 2);
|
||
+ }
|
||
+ });
|
||
+ toolkit.realSync();
|
||
+
|
||
+ SwingUtilities.invokeAndWait(new Runnable() {
|
||
+ @Override
|
||
+ public void run() {
|
||
+ for (int i = 0; i < ROW_COUNT; i++) {
|
||
+ tableModel.remove(0);
|
||
+ table.getRowSorter().toggleSortOrder(0);
|
||
+ }
|
||
+ }
|
||
+ });
|
||
+ }
|
||
+
|
||
+ public static void createAndShowUI() {
|
||
+ try {
|
||
+ UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
|
||
+ } catch (Exception e) {
|
||
+ throw new RuntimeException(e);
|
||
+ }
|
||
+
|
||
+ JFrame frame = new JFrame("bug8032874");
|
||
+ frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
|
||
+
|
||
+ JPanel panel = new JPanel();
|
||
+ panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
|
||
+
|
||
+ tableModel = new TestTableModel();
|
||
+ table = new JTable(tableModel);
|
||
+ table.setSurrendersFocusOnKeystroke(true);
|
||
+
|
||
+ final TableRowSorter<TestTableModel> rowSorter = new TableRowSorter<TestTableModel>(tableModel);
|
||
+ rowSorter.setRowFilter(new RowFilter<TestTableModel, Integer>() {
|
||
+ @Override
|
||
+ public boolean include(Entry<? extends TestTableModel, ? extends Integer> entry) {
|
||
+ return entry.getIdentifier() % 2 == 0;
|
||
+ }
|
||
+ });
|
||
+ table.setRowSorter(rowSorter);
|
||
+
|
||
+ JScrollPane jScrollPane = new JScrollPane(table);
|
||
+ panel.add(jScrollPane);
|
||
+
|
||
+ frame.setContentPane(panel);
|
||
+ frame.setSize(new Dimension(800, 600));
|
||
+ frame.setVisible(true);
|
||
+ }
|
||
+
|
||
+ private static class TestTableModel extends AbstractTableModel {
|
||
+ private final List<Integer> data;
|
||
+
|
||
+ public TestTableModel() {
|
||
+ data = new ArrayList<Integer>();
|
||
+
|
||
+ for (int i = 0; i < ROW_COUNT; i++) {
|
||
+ data.add(i);
|
||
+ }
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public int getRowCount() {
|
||
+ return data.size();
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public int getColumnCount() {
|
||
+ return 1;
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public Object getValueAt(int rowIndex, int columnIndex) {
|
||
+ return data.get(rowIndex);
|
||
+ }
|
||
+
|
||
+ public void remove(int row) {
|
||
+ data.remove(row);
|
||
+ fireTableRowsDeleted(row, row);
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/swing/JTextField/8036819/bug8036819.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,132 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @library ../../regtesthelpers
|
||
+ * @build Util
|
||
+ * @bug 8036819
|
||
+ * @summary JAB: mnemonics not read for textboxes
|
||
+ * @author Vivi An
|
||
+ * @run main bug8036819
|
||
+ */
|
||
+
|
||
+import javax.swing.*;
|
||
+import javax.swing.event.*;
|
||
+import java.awt.event.*;
|
||
+import java.awt.*;
|
||
+import sun.awt.SunToolkit;
|
||
+import javax.accessibility.*;
|
||
+
|
||
+public class bug8036819 {
|
||
+
|
||
+ public static volatile Boolean passed = false;
|
||
+
|
||
+ public static void main(String args[]) throws Throwable {
|
||
+ SwingUtilities.invokeAndWait(new Runnable() {
|
||
+ public void run() {
|
||
+ createAndShowGUI();
|
||
+ }
|
||
+ });
|
||
+
|
||
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
|
||
+ toolkit.realSync();
|
||
+
|
||
+ Robot robo = new Robot();
|
||
+ robo.setAutoDelay(300);
|
||
+
|
||
+ // Using mnemonic key to focus on the textfield
|
||
+ Util.hitMnemonics(robo, KeyEvent.VK_P);
|
||
+ toolkit.realSync();
|
||
+
|
||
+ if (!passed){
|
||
+ throw new RuntimeException("Test failed.");
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private static void createAndShowGUI() {
|
||
+ JFrame mainFrame = new JFrame("bug 8036819");
|
||
+
|
||
+ JLabel usernameLabel = new JLabel("Username: ");
|
||
+ JTextField usernameField = new JTextField(20);
|
||
+ usernameLabel.setDisplayedMnemonic(KeyEvent.VK_U);
|
||
+ usernameLabel.setLabelFor(usernameField);
|
||
+
|
||
+ JLabel pwdLabel = new JLabel("Password: ");
|
||
+ final JTextField pwdField = new JTextField(20);
|
||
+ pwdLabel.setDisplayedMnemonic(KeyEvent.VK_P);
|
||
+ pwdLabel.setLabelFor(pwdField);
|
||
+
|
||
+ pwdField.addKeyListener(
|
||
+ new KeyListener(){
|
||
+ @Override
|
||
+ public void keyPressed(KeyEvent keyEvent) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void keyTyped(KeyEvent keyEvent) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void keyReleased(KeyEvent keyEvent){
|
||
+ JComponent comp = (JComponent) pwdField;
|
||
+ AccessibleContext ac = comp.getAccessibleContext();
|
||
+ AccessibleExtendedComponent aec = (AccessibleExtendedComponent)ac.getAccessibleComponent();
|
||
+ AccessibleKeyBinding akb = aec.getAccessibleKeyBinding();
|
||
+ if (akb != null){
|
||
+ int count = akb.getAccessibleKeyBindingCount();
|
||
+ if (count != 1){
|
||
+ passed = false;
|
||
+ return;
|
||
+ }
|
||
+
|
||
+ // there is 1 accessible key for the text field
|
||
+ System.out.println("Retrieved AccessibleKeyBinding for textfield " + count);
|
||
+
|
||
+ // the key code is KeyEvent.VK_P
|
||
+ Object o = akb.getAccessibleKeyBinding(0);
|
||
+ if (o instanceof KeyStroke){
|
||
+ javax.swing.KeyStroke key = (javax.swing.KeyStroke)o;
|
||
+ System.out.println("keystroke is " + key.getKeyCode());
|
||
+ if (key.getKeyCode() == KeyEvent.VK_P)
|
||
+ passed = true;
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+ );
|
||
+
|
||
+ mainFrame.getContentPane().add(usernameLabel);
|
||
+ mainFrame.getContentPane().add(usernameField);
|
||
+ mainFrame.getContentPane().add(pwdLabel);
|
||
+ mainFrame.getContentPane().add(pwdField);
|
||
+
|
||
+ mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||
+ mainFrame.setLayout(new FlowLayout(FlowLayout.LEFT));
|
||
+
|
||
+ mainFrame.setSize(200, 200);
|
||
+ mainFrame.setLocation(200, 200);
|
||
+ mainFrame.setVisible(true);
|
||
+ mainFrame.toFront();
|
||
+ }
|
||
+ }
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/swing/PopupFactory/8048506/bug8048506.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,65 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 8048506
|
||
+ * @summary Tests that popup with null-owner does not throw NPE
|
||
+ * @author Dmitry Markov
|
||
+ */
|
||
+
|
||
+import javax.swing.*;
|
||
+import javax.swing.plaf.metal.MetalLookAndFeel;
|
||
+
|
||
+public class bug8048506 {
|
||
+
|
||
+ public static void main(String[] args) throws Exception {
|
||
+ UIManager.setLookAndFeel(new MetalLookAndFeel());
|
||
+
|
||
+ SwingUtilities.invokeAndWait(new Runnable() {
|
||
+ @Override
|
||
+ public void run() {
|
||
+ createAndShowGUI();
|
||
+ }
|
||
+ });
|
||
+ System.out.println("The test passed");
|
||
+ }
|
||
+
|
||
+ private static void createAndShowGUI() {
|
||
+ JFrame frame = new JFrame("bug8048506");
|
||
+ frame.setSize(400, 400);
|
||
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||
+ frame.setVisible(true);
|
||
+
|
||
+ PopupFactory factory = PopupFactory.getSharedInstance();
|
||
+
|
||
+ // Create and show popup with owner
|
||
+ Popup popup1 = factory.getPopup(frame, new JLabel("Popup with owner"), 100, 100);
|
||
+ popup1.show();
|
||
+
|
||
+ //Create and show popup without owner
|
||
+ Popup popup2 = factory.getPopup(null, new JLabel("Popup without owner"), 200, 200);
|
||
+ popup2.show();
|
||
+ }
|
||
+}
|
||
+
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/swing/plaf/nimbus/8041725/bug8041725.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,82 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/* @test
|
||
+ @bug 8041725
|
||
+ @summary JList selection colors are not UIResource instances in Nimbus L&F
|
||
+ @author Anton Litvinov
|
||
+*/
|
||
+
|
||
+import java.awt.*;
|
||
+import javax.swing.*;
|
||
+import javax.swing.plaf.*;
|
||
+import javax.swing.plaf.nimbus.*;
|
||
+
|
||
+public class bug8041725 {
|
||
+ public static void main(String[] args) throws Exception {
|
||
+ UIManager.setLookAndFeel(new NimbusLookAndFeel());
|
||
+ SwingUtilities.invokeAndWait(new Runnable() {
|
||
+ @Override
|
||
+ public void run() {
|
||
+ JFrame frame = new JFrame("bug8041725");
|
||
+ frame.setSize(200, 200);
|
||
+ JList list = new JList(new String[]{"Item1", "Item2", "Item3"});
|
||
+ frame.getContentPane().add(list);
|
||
+ frame.pack();
|
||
+ frame.setVisible(true);
|
||
+
|
||
+ System.err.println("Test #1: No items are selected, list is enabled.");
|
||
+ testSelectionColors(list);
|
||
+
|
||
+ System.err.println("Test #2: No items are selected, list is disabled.");
|
||
+ list.setEnabled(false);
|
||
+ testSelectionColors(list);
|
||
+
|
||
+ System.err.println("Test #3: One item is selected, list is disabled.");
|
||
+ list.setSelectedIndex(0);
|
||
+ testSelectionColors(list);
|
||
+
|
||
+ System.err.println("Test #4: One item is selected, list is enabled.");
|
||
+ list.setEnabled(true);
|
||
+ testSelectionColors(list);
|
||
+
|
||
+ frame.dispose();
|
||
+ }
|
||
+ });
|
||
+ }
|
||
+
|
||
+ private static void testSelectionColors(JList list) {
|
||
+ Color selBackColor = list.getSelectionBackground();
|
||
+ if (!(selBackColor instanceof UIResource)) {
|
||
+ throw new RuntimeException(String.format(
|
||
+ "JList.getSelectionBackground() returned instance of '%s' instead of UIResource.",
|
||
+ selBackColor.getClass()));
|
||
+ }
|
||
+ Color selForeColor = list.getSelectionForeground();
|
||
+ if (!(selForeColor instanceof UIResource)) {
|
||
+ throw new RuntimeException(String.format(
|
||
+ "JList.getSelectionForeground() returned instance of '%s' instead of UIResource.",
|
||
+ selForeColor.getClass()));
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/swing/text/GlyphView/4984669/bug4984669.html Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,30 @@
|
||
+<html>
|
||
+<!--
|
||
+ Copyright (c) 2014, 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.
|
||
+
|
||
+ 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.
|
||
+-->
|
||
+<body>
|
||
+<applet code="bug4984669.class" width=300 height=300></applet>
|
||
+The four lines printed above in a bold typeface should all be underlined.
|
||
+It is a bug if any of these lines is underlined only partially.
|
||
+The very first line should not be underlined at all.
|
||
+</body>
|
||
+</html>
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/swing/text/GlyphView/4984669/bug4984669.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,55 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/* @test
|
||
+ @bug 4984669 8002148
|
||
+ @summary Tests HTML underlining
|
||
+ @author Peter Zhelezniakov
|
||
+ @run applet/manual=yesno bug4984669.html
|
||
+*/
|
||
+import javax.swing.*;
|
||
+import javax.swing.text.*;
|
||
+
|
||
+public class bug4984669 extends JApplet
|
||
+{
|
||
+ public void init() {
|
||
+ JEditorPane pane = new JEditorPane();
|
||
+ this.getContentPane().add(new JScrollPane(pane));
|
||
+ pane.setEditorKit(new StyledEditorKit());
|
||
+
|
||
+ try {
|
||
+ pane.getDocument().insertString(0,"12 \n",null);
|
||
+ MutableAttributeSet attrs = new SimpleAttributeSet();
|
||
+
|
||
+ StyleConstants.setFontSize(attrs, 36);
|
||
+ StyleConstants.setBold(attrs, true);
|
||
+ StyleConstants.setUnderline(attrs, true);
|
||
+ pane.getDocument().insertString(6, "aa\n", attrs);
|
||
+ pane.getDocument().insertString(9, "bbb\n", attrs);
|
||
+ pane.getDocument().insertString(13, "cccc\n", attrs);
|
||
+ pane.getDocument().insertString(18, "ddddd\n", attrs);
|
||
+ } catch (Exception e) {
|
||
+ throw new Error("Failed: Unexpected Exception", e);
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- ./jdk/test/javax/swing/text/StyledEditorKit/8016833/bug8016833.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/javax/swing/text/StyledEditorKit/8016833/bug8016833.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -190,9 +190,9 @@
|
||
// not too wide
|
||
assertTrue(out3.getWidth() * 0.8 < out2.getWidth());
|
||
// not too low
|
||
- assertTrue(out3.getY() - (out1.getY() + out2.getHeight()) < 3);
|
||
+ assertTrue(out3.getY() - (out1.getY() + out2.getHeight() - 1) < 4);
|
||
// not too high
|
||
- assertTrue(out3.getY() - (out1.getY() + out2.getHeight()) > 0);
|
||
+ assertTrue(out3.getY() - (out1.getY() + out2.getHeight() - 1) > 0);
|
||
}
|
||
|
||
void testStrikthrough() {
|
||
@@ -217,7 +217,7 @@
|
||
// not too wide
|
||
assertTrue(out3.getWidth() * 0.8 < out2.getWidth());
|
||
// not too low
|
||
- assertTrue(out3.getY() - (out1.getY() + out2.getHeight()) < 0);
|
||
+ assertTrue(out3.getY() - (out1.getY() + out2.getHeight() - 1) < 0);
|
||
// not too high
|
||
assertTrue(out3.getY() - out1.getY() > 1);
|
||
}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/swing/text/html/parser/Parser/8028616/bug8028616.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,77 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 8028616
|
||
+ * @summary Tests correct parsing of the text with leading slash (/)
|
||
+ * @author Dmitry Markov
|
||
+ */
|
||
+
|
||
+import javax.swing.text.html.HTMLDocument;
|
||
+import javax.swing.text.html.HTMLEditorKit;
|
||
+import java.io.StringReader;
|
||
+
|
||
+public class bug8028616 {
|
||
+ private static final String text = "/ at start is bad";
|
||
+ private static Object lock = new Object();
|
||
+ private static boolean isCallbackInvoked = false;
|
||
+ private static Exception exception = null;
|
||
+
|
||
+ public static void main(String[] args) throws Exception {
|
||
+ ParserCB cb = new ParserCB();
|
||
+ HTMLEditorKit htmlKit = new HTMLEditorKit();
|
||
+ HTMLDocument htmlDoc = (HTMLDocument) htmlKit.createDefaultDocument();
|
||
+
|
||
+ htmlDoc.getParser().parse(new StringReader(text), cb, true);
|
||
+
|
||
+ synchronized (lock) {
|
||
+ if (!isCallbackInvoked) {
|
||
+ lock.wait(5000);
|
||
+ }
|
||
+ }
|
||
+
|
||
+ if (!isCallbackInvoked) {
|
||
+ throw new RuntimeException("Test Failed: ParserCallback.handleText() is not invoked for text - " + text);
|
||
+ }
|
||
+
|
||
+ if (exception != null) {
|
||
+ throw exception;
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private static class ParserCB extends HTMLEditorKit.ParserCallback {
|
||
+ @Override
|
||
+ public void handleText(char[] data, int pos) {
|
||
+ synchronized (lock) {
|
||
+ if (!text.equals(new String(data)) || pos != 0) {
|
||
+ exception = new RuntimeException(
|
||
+ "Test Failed: the data passed to ParserCallback.handleText() does not meet the expectation");
|
||
+ }
|
||
+ isCallbackInvoked = true;
|
||
+ lock.notifyAll();
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/bind/marshal/8036981/Good.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,94 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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 testjaxbcontext;
|
||
+
|
||
+import org.w3c.dom.Element;
|
||
+import javax.xml.bind.annotation.XmlAccessType;
|
||
+import javax.xml.bind.annotation.XmlAccessorType;
|
||
+import javax.xml.bind.annotation.XmlAnyElement;
|
||
+import javax.xml.bind.annotation.XmlType;
|
||
+import java.util.ArrayList;
|
||
+import java.util.List;
|
||
+
|
||
+/**
|
||
+ * <p>
|
||
+ * Java class for Good complex type.
|
||
+ *
|
||
+ * <p>
|
||
+ * The following schema fragment specifies the expected content contained within
|
||
+ * this class.
|
||
+ *
|
||
+ * <pre>
|
||
+ * <complexType name="Good">
|
||
+ * <complexContent>
|
||
+ * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||
+ * <sequence>
|
||
+ * <any processContents='skip' maxOccurs="70"/>
|
||
+ * </sequence>
|
||
+ * </restriction>
|
||
+ * </complexContent>
|
||
+ * </complexType>
|
||
+ * </pre>
|
||
+ *
|
||
+ *
|
||
+ */
|
||
+@XmlAccessorType(XmlAccessType.FIELD)
|
||
+@XmlType(name = "Good", propOrder = {
|
||
+ "any"
|
||
+})
|
||
+public class Good {
|
||
+
|
||
+ @XmlAnyElement
|
||
+ protected List<Element> any;
|
||
+
|
||
+ /**
|
||
+ * Gets the value of the any property.
|
||
+ *
|
||
+ * <p>
|
||
+ * This accessor method returns a reference to the live list, not a
|
||
+ * snapshot. Therefore any modification you make to the returned list will
|
||
+ * be present inside the JAXB object. This is why there is not a
|
||
+ * <CODE>set</CODE> method for the any property.
|
||
+ *
|
||
+ * <p>
|
||
+ * For example, to add a new item, do as follows:
|
||
+ * <pre>
|
||
+ * getAny().add(newItem);
|
||
+ * </pre>
|
||
+ *
|
||
+ *
|
||
+ * <p>
|
||
+ * Objects of the following type(s) are allowed in the list
|
||
+ * {@link org.w3c.dom.Element }
|
||
+ *
|
||
+ *
|
||
+ */
|
||
+ public List<Element> getAny() {
|
||
+ if (any == null) {
|
||
+ any = new ArrayList<Element>();
|
||
+ }
|
||
+ return this.any;
|
||
+ }
|
||
+
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/bind/marshal/8036981/Main.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,104 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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 testjaxbcontext;
|
||
+
|
||
+import javax.xml.bind.annotation.*;
|
||
+
|
||
+/**
|
||
+ * <p>
|
||
+ * Java class for main complex type.
|
||
+ *
|
||
+ * <p>
|
||
+ * The following schema fragment specifies the expected content contained within
|
||
+ * this class.
|
||
+ *
|
||
+ * <pre>
|
||
+ * <complexType name="main">
|
||
+ * <complexContent>
|
||
+ * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||
+ * <sequence>
|
||
+ * <element name="Root" type="{}Root"/>
|
||
+ * <element name="Good" type="{}Good"/>
|
||
+ * </sequence>
|
||
+ * </restriction>
|
||
+ * </complexContent>
|
||
+ * </complexType>
|
||
+ * </pre>
|
||
+ *
|
||
+ *
|
||
+ */
|
||
+@XmlAccessorType(XmlAccessType.FIELD)
|
||
+@XmlType(name = "main", propOrder = {
|
||
+ "root",
|
||
+ "good"
|
||
+})
|
||
+@XmlRootElement
|
||
+public class Main {
|
||
+
|
||
+ @XmlElement(name = "Root", required = true)
|
||
+ protected Root root;
|
||
+ @XmlElement(name = "Good", required = true)
|
||
+ protected Good good;
|
||
+
|
||
+ /**
|
||
+ * Gets the value of the root property.
|
||
+ *
|
||
+ * @return possible object is {@link Root }
|
||
+ *
|
||
+ */
|
||
+ public Root getRoot() {
|
||
+ return root;
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * Sets the value of the root property.
|
||
+ *
|
||
+ * @param value allowed object is {@link Root }
|
||
+ *
|
||
+ */
|
||
+ public void setRoot(Root value) {
|
||
+ this.root = value;
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * Gets the value of the good property.
|
||
+ *
|
||
+ * @return possible object is {@link Good }
|
||
+ *
|
||
+ */
|
||
+ public Good getGood() {
|
||
+ return good;
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * Sets the value of the good property.
|
||
+ *
|
||
+ * @param value allowed object is {@link Good }
|
||
+ *
|
||
+ */
|
||
+ public void setGood(Good value) {
|
||
+ this.good = value;
|
||
+ }
|
||
+
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/bind/marshal/8036981/ObjectFactory.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,74 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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 testjaxbcontext;
|
||
+
|
||
+import javax.xml.bind.annotation.XmlRegistry;
|
||
+
|
||
+/**
|
||
+ * This object contains factory methods for each Java content interface and Java
|
||
+ * element interface generated in the generated package.
|
||
+ * <p>
|
||
+ * An ObjectFactory allows you to programatically construct new instances of the
|
||
+ * Java representation for XML content. The Java representation of XML content
|
||
+ * can consist of schema derived interfaces and classes representing the binding
|
||
+ * of schema type definitions, element declarations and model groups. Factory
|
||
+ * methods for each of these are provided in this class.
|
||
+ *
|
||
+ */
|
||
+@XmlRegistry
|
||
+public class ObjectFactory {
|
||
+
|
||
+ /**
|
||
+ * Create a new ObjectFactory that can be used to create new instances of
|
||
+ * schema derived classes for package: generated
|
||
+ *
|
||
+ */
|
||
+ public ObjectFactory() {
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * Create an instance of {@link Root }
|
||
+ *
|
||
+ */
|
||
+ public Root createRoot() {
|
||
+ return new Root();
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * Create an instance of {@link Good }
|
||
+ *
|
||
+ */
|
||
+ public Good createGood() {
|
||
+ return new Good();
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * Create an instance of {@link Main }
|
||
+ *
|
||
+ */
|
||
+ public Main createMain() {
|
||
+ return new Main();
|
||
+ }
|
||
+
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/bind/marshal/8036981/Root.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,91 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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 testjaxbcontext;
|
||
+
|
||
+import javax.xml.bind.annotation.*;
|
||
+import java.util.ArrayList;
|
||
+import java.util.List;
|
||
+
|
||
+/**
|
||
+ * <p>
|
||
+ * Java class for Root complex type.
|
||
+ *
|
||
+ * <p>
|
||
+ * The following schema fragment specifies the expected content contained within
|
||
+ * this class.
|
||
+ *
|
||
+ * <pre>
|
||
+ * <complexType name="Root">
|
||
+ * <complexContent>
|
||
+ * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||
+ * <sequence>
|
||
+ * <any processContents='skip' maxOccurs="70"/>
|
||
+ * </sequence>
|
||
+ * </restriction>
|
||
+ * </complexContent>
|
||
+ * </complexType>
|
||
+ * </pre>
|
||
+ *
|
||
+ *
|
||
+ */
|
||
+@XmlAccessorType(XmlAccessType.FIELD)
|
||
+@XmlType(name = "Root", propOrder = {
|
||
+ "content"
|
||
+})
|
||
+public class Root {
|
||
+
|
||
+ @XmlMixed
|
||
+ @XmlAnyElement
|
||
+ protected List<Object> content;
|
||
+
|
||
+ /**
|
||
+ * Gets the value of the content property.
|
||
+ *
|
||
+ * <p>
|
||
+ * This accessor method returns a reference to the live list, not a
|
||
+ * snapshot. Therefore any modification you make to the returned list will
|
||
+ * be present inside the JAXB object. This is why there is not a
|
||
+ * <CODE>set</CODE> method for the content property.
|
||
+ *
|
||
+ * <p>
|
||
+ * For example, to add a new item, do as follows:
|
||
+ * <pre>
|
||
+ * getContent().add(newItem);
|
||
+ * </pre>
|
||
+ *
|
||
+ *
|
||
+ * <p>
|
||
+ * Objects of the following type(s) are allowed in the list {@link org.w3c.dom.Element }
|
||
+ * {@link String }
|
||
+ *
|
||
+ *
|
||
+ */
|
||
+ public List<Object> getContent() {
|
||
+ if (content == null) {
|
||
+ content = new ArrayList<Object>();
|
||
+ }
|
||
+ return this.content;
|
||
+ }
|
||
+
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/bind/marshal/8036981/Test.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,67 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test Test.java
|
||
+ * @bug 8036981
|
||
+ * @summary JAXB not preserving formatting during unmarshalling/marshalling
|
||
+ * @compile Good.java Main.java ObjectFactory.java Root.java
|
||
+ * @run main/othervm Test
|
||
+ */
|
||
+
|
||
+import javax.xml.bind.JAXBContext;
|
||
+import javax.xml.bind.Marshaller;
|
||
+import javax.xml.bind.Unmarshaller;
|
||
+import java.io.File;
|
||
+import java.io.StringWriter;
|
||
+
|
||
+/**
|
||
+ * Test for marshalling and unmarshalling mixed and unmixed content
|
||
+ */
|
||
+public class Test {
|
||
+
|
||
+ private static final String EXPECTED = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><main><Root>\n" +
|
||
+ " <SomeTag>\n" +
|
||
+ " <AChildTag>\n" +
|
||
+ " <AnotherChildTag/>\n" +
|
||
+ " <AnotherChildTag/>\n" +
|
||
+ " </AChildTag>\n" +
|
||
+ " </SomeTag>\n" +
|
||
+ " </Root><Good><VeryGood><TheBest><MegaSuper/><MegaSuper/>\n" +
|
||
+ " </TheBest>\n" +
|
||
+ " </VeryGood></Good></main>";
|
||
+
|
||
+ public static void main(String[] args) throws Exception {
|
||
+ JAXBContext jc = JAXBContext.newInstance("testjaxbcontext");
|
||
+ Unmarshaller u = jc.createUnmarshaller();
|
||
+ Object result = u.unmarshal(new File(System.getProperty("test.src", ".") + "/test.xml"));
|
||
+ StringWriter sw = new StringWriter();
|
||
+ Marshaller m = jc.createMarshaller();
|
||
+ m.marshal(result, sw);
|
||
+ System.out.println("Expected:" + EXPECTED);
|
||
+ System.out.println("Observed:" + sw.toString());
|
||
+ if (!EXPECTED.equals(sw.toString())) {
|
||
+ throw new Exception("Unmarshal/Marshal generates different content");
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/bind/marshal/8036981/test.xml Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,19 @@
|
||
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||
+<main>
|
||
+ <Root>
|
||
+ <SomeTag>
|
||
+ <AChildTag>
|
||
+ <AnotherChildTag/>
|
||
+ <AnotherChildTag/>
|
||
+ </AChildTag>
|
||
+ </SomeTag>
|
||
+ </Root>
|
||
+ <Good>
|
||
+ <VeryGood>
|
||
+ <TheBest>
|
||
+ <MegaSuper/>
|
||
+ <MegaSuper/>
|
||
+ </TheBest>
|
||
+ </VeryGood>
|
||
+ </Good>
|
||
+</main>
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/bind/xjc/8029837/PreParseGrammarTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,58 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 8029837
|
||
+ * @summary Test simulates the partial call to xjc ant task that fails with
|
||
+ * NullPointer exception
|
||
+ * @run main/othervm PreParseGrammarTest
|
||
+ */
|
||
+
|
||
+import com.sun.org.apache.xerces.internal.parsers.XMLGrammarPreparser;
|
||
+import com.sun.org.apache.xerces.internal.xni.XNIException;
|
||
+import com.sun.org.apache.xerces.internal.xni.grammars.Grammar;
|
||
+import com.sun.org.apache.xerces.internal.xni.grammars.XMLGrammarDescription;
|
||
+import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource;
|
||
+import java.io.BufferedInputStream;
|
||
+import java.io.File;
|
||
+import java.io.FileInputStream;
|
||
+import java.io.FileNotFoundException;
|
||
+import java.io.IOException;
|
||
+import java.io.InputStream;
|
||
+
|
||
+public class PreParseGrammarTest {
|
||
+
|
||
+ public static void main(String[] args) throws FileNotFoundException, XNIException, IOException {
|
||
+ File xsdf = new File(System.getProperty("test.src", ".") + "/test.xsd");
|
||
+ InputStream is = new BufferedInputStream(new FileInputStream(xsdf));
|
||
+ XMLInputSource xis = new XMLInputSource(null, null, null, is, null);
|
||
+ XMLGrammarPreparser gp = new XMLGrammarPreparser();
|
||
+ gp.registerPreparser(XMLGrammarDescription.XML_SCHEMA, null);
|
||
+ //The NullPointerException is observed on next call during ant task
|
||
+ // execution
|
||
+ Grammar res = gp.preparseGrammar(XMLGrammarDescription.XML_SCHEMA, xis);
|
||
+ System.out.println("Grammar preparsed successfully:" + res);
|
||
+ return;
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/bind/xjc/8029837/test.xsd Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,4 @@
|
||
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||
+ <xsd:element name="root">
|
||
+ </xsd:element>
|
||
+</xsd:schema>
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/jaxp/common/8032908/TestFunc.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,33 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+import org.w3c.dom.Node;
|
||
+
|
||
+public class TestFunc {
|
||
+
|
||
+ public static String test(Node node) {
|
||
+ String s = node.getTextContent();
|
||
+ return s;
|
||
+ }
|
||
+
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/jaxp/common/8032908/XSLT.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,55 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/**
|
||
+ * @test
|
||
+ * @bug 8032908
|
||
+ * @summary Test if Node.getTextContent() function correctly returns children
|
||
+ * content
|
||
+ * @compile TestFunc.java XSLT.java
|
||
+ * @run main/othervm XSLT
|
||
+ */
|
||
+import java.io.ByteArrayOutputStream;
|
||
+import javax.xml.transform.Transformer;
|
||
+import javax.xml.transform.TransformerException;
|
||
+import javax.xml.transform.TransformerFactory;
|
||
+import javax.xml.transform.stream.StreamResult;
|
||
+import javax.xml.transform.stream.StreamSource;
|
||
+
|
||
+public class XSLT {
|
||
+
|
||
+ static final String XMLTOTRANSFORM = "/in.xml";
|
||
+ static final String XSLTRANSFORMER = "/test.xsl";
|
||
+ static final String EXPECTEDRESULT = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>ABCDEFG";
|
||
+
|
||
+ public static void main(String[] args) throws TransformerException {
|
||
+ ByteArrayOutputStream resStream = new ByteArrayOutputStream();
|
||
+ TransformerFactory trf = TransformerFactory.newInstance();
|
||
+ Transformer tr = trf.newTransformer(new StreamSource(System.getProperty("test.src", ".") + XSLTRANSFORMER));
|
||
+ tr.transform(new StreamSource(System.getProperty("test.src", ".") + XMLTOTRANSFORM), new StreamResult(resStream));
|
||
+ System.out.println("Transformation completed. Result:" + resStream.toString());
|
||
+ if (!resStream.toString().equals(EXPECTEDRESULT)) {
|
||
+ throw new RuntimeException("Incorrect transformation result");
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/jaxp/common/8032908/in.xml Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,2 @@
|
||
+<?xml version="1.0" encoding="UTF-8"?>
|
||
+<root><elem><level2_0>ABCD</level2_0><level2_1>EFG</level2_1></elem></root>
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/jaxp/common/8032908/test.xsl Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,8 @@
|
||
+<?xml version="1.0" encoding="UTF-8"?>
|
||
+<xsl:transform exclude-result-prefixes="cscdt_ufunc" version="1.0"
|
||
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||
+ xmlns:cscdt_ufunc="http://xml.apache.org/xalan/java">
|
||
+ <xsl:template match="elem">
|
||
+ <xsl:value-of select="cscdt_ufunc:TestFunc.test(.)" />
|
||
+ </xsl:template>
|
||
+</xsl:transform>
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/jaxp/testng/TEST.properties Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,3 @@
|
||
+# This file identifies root(s) of the test-ng hierarchy.
|
||
+
|
||
+TestNG.dirs = .
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/jaxp/testng/parse/XMLEntityScannerLoad.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,75 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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 parse;
|
||
+
|
||
+import java.io.ByteArrayInputStream;
|
||
+import java.io.IOException;
|
||
+import javax.xml.parsers.DocumentBuilderFactory;
|
||
+import javax.xml.parsers.ParserConfigurationException;
|
||
+
|
||
+import static org.testng.Assert.assertEquals;
|
||
+import org.testng.annotations.DataProvider;
|
||
+import org.testng.annotations.Test;
|
||
+import org.w3c.dom.Document;
|
||
+import org.xml.sax.SAXException;
|
||
+
|
||
+/**
|
||
+ * JDK-8059327: XML parser returns corrupt attribute value
|
||
+ * https://bugs.openjdk.java.net/browse/JDK-8059327
|
||
+ *
|
||
+ * Also:
|
||
+ * JDK-8061550: XMLEntityScanner can corrupt corrupt content during parsing
|
||
+ * https://bugs.openjdk.java.net/browse/JDK-8061550
|
||
+ *
|
||
+ * @Summary: verify that the character cache in XMLEntityScanner is reset properly
|
||
+ */
|
||
+
|
||
+public class XMLEntityScannerLoad {
|
||
+
|
||
+ @Test(dataProvider = "xmls")
|
||
+ public void test(String xml) throws SAXException, IOException, ParserConfigurationException {
|
||
+ Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ChunkInputStream(xml));
|
||
+ String value = d.getDocumentElement().getAttribute("a1");
|
||
+ assertEquals(value, "w");
|
||
+ }
|
||
+
|
||
+ static class ChunkInputStream extends ByteArrayInputStream {
|
||
+ ChunkInputStream(String xml) {
|
||
+ super(xml.getBytes());
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public synchronized int read(byte[] b, int off, int len) {
|
||
+ return super.read(b, off, 7);
|
||
+ }
|
||
+ }
|
||
+
|
||
+ @DataProvider(name = "xmls")
|
||
+ private Object[][] xmls() {
|
||
+ return new Object[][] {
|
||
+ {"<?xml version=\"1.0\"?><element a1=\"w\" a2=\"""\"/>"},
|
||
+ {"<?xml version=\"1.1\"?><element a1=\"w\" a2=\"""\"/>"}
|
||
+ };
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/jaxp/validation/8049514/FeaturePropagationTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,71 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+
|
||
+/**
|
||
+ * @test
|
||
+ * @bug 8049514
|
||
+ * @summary verifies that feature set on the factory is propagated properly
|
||
+ * to the validator
|
||
+ * @run main/othervm FeaturePropagationTest
|
||
+ */
|
||
+
|
||
+
|
||
+import java.io.ByteArrayInputStream;
|
||
+import java.io.InputStreamReader;
|
||
+import javax.xml.XMLConstants;
|
||
+import javax.xml.transform.stream.StreamSource;
|
||
+import javax.xml.validation.*;
|
||
+
|
||
+/**
|
||
+ * JDK-8049514
|
||
+ *
|
||
+ * FEATURE_SECURE_PROCESSING can not be turned off on a validator through
|
||
+ * SchemaFactory
|
||
+ */
|
||
+public class FeaturePropagationTest {
|
||
+
|
||
+ static String xsd = "<?xml version='1.0'?>\n" + "<schema xmlns='http://www.w3.org/2001/XMLSchema'\n"
|
||
+ + " xmlns:test='jaxp13_test'\n"
|
||
+ + " targetNamespace='jaxp13_test'\n"
|
||
+ + " elementFormDefault='qualified'>\n"
|
||
+ + " <element name='test' type='string'/>\n"
|
||
+ + "</schema>\n";
|
||
+
|
||
+ public static void main(String[] args) throws Exception {
|
||
+ InputStreamReader reader = new InputStreamReader(new ByteArrayInputStream(xsd.getBytes()));
|
||
+ StreamSource xsdSource = new StreamSource(reader);
|
||
+
|
||
+ SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
|
||
+ schemaFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, false);
|
||
+ Schema schema = null;
|
||
+ schema = schemaFactory.newSchema(xsdSource);
|
||
+
|
||
+ Validator validator = schema.newValidator();
|
||
+
|
||
+ if (validator.getFeature(XMLConstants.FEATURE_SECURE_PROCESSING)) {
|
||
+ throw new RuntimeException("Feature set on the factory is not inherited!");
|
||
+ }
|
||
+
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/ws/8033113/Organization_List.wsdl Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,99 @@
|
||
+<?xml version="1.0" encoding="UTF-8"?>
|
||
+<!--
|
||
+ Copyright (c) 2014, 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.
|
||
+
|
||
+ 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.
|
||
+-->
|
||
+<wsdl:definitions targetNamespace="urn:Organization_List" xmlns:s0="urn:Organization_List" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||
+ <wsdl:types>
|
||
+ <xsd:schema elementFormDefault="qualified" targetNamespace="urn:Organization_List">
|
||
+ <xsd:element name="OpGetList" type="s0:GetListInputMap"/>
|
||
+ <xsd:complexType name="GetListInputMap">
|
||
+ <xsd:sequence>
|
||
+ <xsd:element name="Qualification" type="xsd:string"/>
|
||
+ </xsd:sequence>
|
||
+ </xsd:complexType>
|
||
+ <xsd:element name="OpGetListResponse" type="s0:GetListOutputMap"/>
|
||
+ <xsd:complexType name="GetListOutputMap">
|
||
+ <xsd:sequence>
|
||
+ <xsd:element maxOccurs="unbounded" name="getListValues">
|
||
+ <xsd:complexType>
|
||
+ <xsd:sequence>
|
||
+ <xsd:element name="Organization_Name" type="xsd:string"/>
|
||
+ </xsd:sequence>
|
||
+ </xsd:complexType>
|
||
+ </xsd:element>
|
||
+ </xsd:sequence>
|
||
+ </xsd:complexType>
|
||
+ <xsd:element name="AuthenticationInfo" type="s0:AuthenticationInfo"/>
|
||
+ <xsd:complexType name="AuthenticationInfo">
|
||
+ <xsd:sequence>
|
||
+ <xsd:element name="userName" type="xsd:string"/>
|
||
+ <xsd:element name="password" type="xsd:string"/>
|
||
+ <xsd:element minOccurs="0" name="authentication" type="xsd:string"/>
|
||
+ <xsd:element minOccurs="0" name="locale" type="xsd:string"/>
|
||
+ <xsd:element minOccurs="0" name="timeZone" type="xsd:string"/>
|
||
+ </xsd:sequence>
|
||
+ </xsd:complexType>
|
||
+ </xsd:schema>
|
||
+ </wsdl:types>
|
||
+
|
||
+ <wsdl:message name="ARAuthenticate">
|
||
+ <wsdl:part element="s0:AuthenticationInfo" name="param"/>
|
||
+ </wsdl:message>
|
||
+
|
||
+ <wsdl:message name="OpGetListSoapIn">
|
||
+ <wsdl:part element="s0:OpGetList" name="param"/>
|
||
+ </wsdl:message>
|
||
+
|
||
+ <wsdl:message name="OpGetListSoapOut">
|
||
+ <wsdl:part element="s0:OpGetListResponse" name="param"/>
|
||
+ </wsdl:message>
|
||
+
|
||
+ <wsdl:portType name="Organization_ListPortType">
|
||
+ <wsdl:operation name="OpGetList">
|
||
+ <wsdl:input message="s0:OpGetListSoapIn"/>
|
||
+ <wsdl:output message="s0:OpGetListSoapOut"/>
|
||
+ </wsdl:operation>
|
||
+ </wsdl:portType>
|
||
+
|
||
+ <wsdl:binding name="Organization_ListSoapBinding" type="s0:Organization_ListPortType">
|
||
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
|
||
+ <wsdl:operation name="OpGetList">
|
||
+ <soap:operation soapAction="urn:Organization_List/OpGetList" style="document"/>
|
||
+ <wsdl:input>
|
||
+ <soap:header message="s0:ARAuthenticate" part="param" use="literal">
|
||
+ </soap:header>
|
||
+ <soap:body use="literal"/>
|
||
+ </wsdl:input>
|
||
+ <wsdl:output>
|
||
+ <soap:body use="literal"/>
|
||
+ </wsdl:output>
|
||
+ </wsdl:operation>
|
||
+ </wsdl:binding>
|
||
+
|
||
+ <wsdl:service name="Organization_ListService">
|
||
+ <wsdl:port binding="s0:Organization_ListSoapBinding" name="Organization_ListSoap">
|
||
+ <soap:address location="http://bogus:9080/URL"/>
|
||
+ </wsdl:port>
|
||
+ </wsdl:service>
|
||
+
|
||
+</wsdl:definitions>
|
||
+
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/ws/8033113/WsImportTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,152 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 8033113
|
||
+ * @summary wsimport fails on WSDL:header parameter name customization
|
||
+ * @run main/othervm WsImportTest
|
||
+ */
|
||
+
|
||
+import java.io.InputStreamReader;
|
||
+import java.io.IOException;
|
||
+import java.io.BufferedReader;
|
||
+import java.io.File;
|
||
+import java.nio.file.Files;
|
||
+import java.nio.file.FileVisitResult;
|
||
+import java.nio.file.Path;
|
||
+import java.nio.file.Paths;
|
||
+import java.nio.file.SimpleFileVisitor;
|
||
+import java.nio.file.attribute.BasicFileAttributes;
|
||
+
|
||
+import static java.nio.file.FileVisitResult.*;
|
||
+
|
||
+public class WsImportTest {
|
||
+
|
||
+ public static void main(String[] args) throws IOException {
|
||
+
|
||
+ String wsimport = getWsImport();
|
||
+ String customization = getWSDLFilePath("customization.xml");
|
||
+ String wsdl = getWSDLFilePath("Organization_List.wsdl");
|
||
+
|
||
+ try {
|
||
+ log("Importing wsdl: " + wsdl);
|
||
+ String[] wsargs = {
|
||
+ wsimport,
|
||
+ "-keep",
|
||
+ "-verbose",
|
||
+ "-extension",
|
||
+ "-XadditionalHeaders",
|
||
+ "-Xdebug",
|
||
+ "-b",
|
||
+ customization,
|
||
+ wsdl
|
||
+ };
|
||
+
|
||
+ ProcessBuilder pb = new ProcessBuilder(wsargs);
|
||
+ pb.redirectErrorStream(true);
|
||
+ Process p = pb.start();
|
||
+ logOutput(p);
|
||
+ int result = p.waitFor();
|
||
+ p.destroy();
|
||
+
|
||
+ if (result != 0) {
|
||
+ fail("WsImport failed. TEST FAILED.");
|
||
+ } else {
|
||
+ log("Test PASSED.");
|
||
+ }
|
||
+
|
||
+ } catch (Exception e) {
|
||
+ e.printStackTrace();
|
||
+ fail(e.getMessage());
|
||
+ } finally {
|
||
+ deleteGeneratedFiles();
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private static void fail(String message) {
|
||
+ throw new RuntimeException(message);
|
||
+ }
|
||
+
|
||
+ private static void log(String msg) {
|
||
+ System.out.println(msg);
|
||
+ }
|
||
+
|
||
+ private static void logOutput(Process p) throws IOException {
|
||
+ BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
|
||
+ String s = r.readLine();
|
||
+ while (s != null) {
|
||
+ log(s.trim());
|
||
+ s = r.readLine();
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private static void deleteGeneratedFiles() {
|
||
+ Path p = Paths.get("generated");
|
||
+ if (Files.exists(p)) {
|
||
+ try {
|
||
+ Files.walkFileTree(p, new SimpleFileVisitor<Path>() {
|
||
+ @Override
|
||
+ public FileVisitResult visitFile(Path file,
|
||
+ BasicFileAttributes attrs) throws IOException {
|
||
+
|
||
+ Files.delete(file);
|
||
+ return CONTINUE;
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public FileVisitResult postVisitDirectory(Path dir,
|
||
+ IOException exc) throws IOException {
|
||
+
|
||
+ if (exc == null) {
|
||
+ Files.delete(dir);
|
||
+ return CONTINUE;
|
||
+ } else {
|
||
+ throw exc;
|
||
+ }
|
||
+ }
|
||
+ });
|
||
+ } catch (IOException ioe) {
|
||
+ ioe.printStackTrace();
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private static String getWSDLFilePath(String filename) {
|
||
+ String testSrc = System.getProperty("test.src");
|
||
+ if (testSrc == null) testSrc = ".";
|
||
+ return Paths.get(testSrc).resolve(filename).toString();
|
||
+ }
|
||
+
|
||
+ private static String getWsImport() {
|
||
+ String javaHome = System.getProperty("java.home");
|
||
+ if (javaHome.endsWith("jre")) {
|
||
+ javaHome = new File(javaHome).getParent();
|
||
+ }
|
||
+ String wsimport = javaHome + File.separator + "bin" + File.separator + "wsimport";
|
||
+ if (System.getProperty("os.name").startsWith("Windows")) {
|
||
+ wsimport = wsimport.concat(".exe");
|
||
+ }
|
||
+ return wsimport;
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/ws/8033113/customization.xml Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,45 @@
|
||
+<!--
|
||
+ Copyright (c) 2014, 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.
|
||
+
|
||
+ 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.
|
||
+-->
|
||
+<jaxws:bindings wsdlLocation="./Organization_List.wsdl" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
|
||
+ <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
|
||
+ <jaxws:bindings node="wsdl:definitions/wsdl:binding[@name='Organization_ListSoapBinding']/wsdl:operation[@name='OpGetList']">
|
||
+ <jaxws:parameter part="wsdl:definitions/wsdl:message[@name='ARAuthenticate']/wsdl:part[@name='param']" name="authParam"/>
|
||
+ <jaxws:parameter part="wsdl:definitions/wsdl:message[@name='OpGetListSoapIn']/wsdl:part[@name='param']" name="inParam"/>
|
||
+ <jaxws:parameter part="wsdl:definitions/wsdl:message[@name='OpGetListSoapOut']/wsdl:part[@name='param']" name="outParam"/>
|
||
+ </jaxws:bindings>
|
||
+</jaxws:bindings>
|
||
+
|
||
+<!--wsdl:message definitions from WSDL whose part names we are trying to override...
|
||
+
|
||
+ <wsdl:message name="ARAuthenticate">
|
||
+ <wsdl:part element="s0:AuthenticationInfo" name="param"/>
|
||
+ </wsdl:message>
|
||
+
|
||
+ <wsdl:message name="OpGetListSoapIn">
|
||
+ <wsdl:part element="s0:OpGetList" name="param"/>
|
||
+ </wsdl:message>
|
||
+
|
||
+ <wsdl:message name="OpGetListSoapOut">
|
||
+ <wsdl:part element="s0:OpGetListResponse" name="param"/>
|
||
+ </wsdl:message>
|
||
+-->
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/ws/8043129/MailTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,148 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 8043129
|
||
+ * @summary JAF initialisation in SAAJ clashing with the one in javax.mail
|
||
+ * @author mkos
|
||
+ * @library javax.mail.jar
|
||
+ * @build MailTest
|
||
+ * @run main MailTest
|
||
+ */
|
||
+
|
||
+import javax.activation.CommandMap;
|
||
+import javax.activation.MailcapCommandMap;
|
||
+import javax.mail.BodyPart;
|
||
+import javax.mail.Message;
|
||
+import javax.mail.MessagingException;
|
||
+import javax.mail.Multipart;
|
||
+import javax.mail.Session;
|
||
+import javax.mail.internet.InternetAddress;
|
||
+import javax.mail.internet.MimeBodyPart;
|
||
+import javax.mail.internet.MimeMessage;
|
||
+import javax.mail.internet.MimeMultipart;
|
||
+import javax.xml.soap.AttachmentPart;
|
||
+import javax.xml.soap.MessageFactory;
|
||
+import javax.xml.soap.SOAPException;
|
||
+import javax.xml.soap.SOAPMessage;
|
||
+import java.io.ByteArrayOutputStream;
|
||
+import java.io.IOException;
|
||
+import java.util.Properties;
|
||
+
|
||
+public class MailTest {
|
||
+
|
||
+ String host = null;
|
||
+ String user = "";
|
||
+ String password = null;
|
||
+ String from = null;
|
||
+ String to = null;
|
||
+
|
||
+ public static void main(String[] args) {
|
||
+ MailTest t = new MailTest();
|
||
+
|
||
+ t.user = "somebody@somewhere.com";
|
||
+ t.from = "somebody@somewhere.com";
|
||
+ t.to = "somebody@somewhere.com";
|
||
+
|
||
+ t.user = "somebody@somewhere.com";
|
||
+ t.password = "somepassword";
|
||
+ t.host = "somehost";
|
||
+
|
||
+ t.sendMail(); //this works
|
||
+
|
||
+ t.addSoapAttachement();
|
||
+ t.sendMail(); //after addAttachmentPart to soapmessage it do not work
|
||
+
|
||
+ // workaroundJAFSetup();
|
||
+ // t.sendMail(); //after workaround works again
|
||
+ }
|
||
+
|
||
+ void addSoapAttachement() {
|
||
+ try {
|
||
+ MessageFactory messageFactory = MessageFactory.newInstance();
|
||
+ SOAPMessage message = messageFactory.createMessage();
|
||
+ AttachmentPart a = message.createAttachmentPart();
|
||
+ a.setContentType("binary/octet-stream");
|
||
+ message.addAttachmentPart(a);
|
||
+ } catch (SOAPException e) {
|
||
+ e.printStackTrace();
|
||
+ }
|
||
+ }
|
||
+
|
||
+ void sendMail() {
|
||
+
|
||
+ try {
|
||
+ Properties props = new Properties();
|
||
+ props.put("mail.smtp.host", host);
|
||
+ props.put("mail.smtp.auth", "true");
|
||
+
|
||
+ Session session = Session.getInstance(props);
|
||
+ session.setDebug(true);
|
||
+
|
||
+ // Define message
|
||
+ MimeMessage message = new MimeMessage(session);
|
||
+ message.setFrom(new InternetAddress(from));
|
||
+ message.addRecipients(Message.RecipientType.TO, to);
|
||
+ message.setSubject("this is a multipart test");
|
||
+
|
||
+ Multipart multipart = new MimeMultipart();
|
||
+
|
||
+ BodyPart messageBodyPart1 = new MimeBodyPart();
|
||
+ messageBodyPart1.setText("please send also this Content\n ciao!");
|
||
+ multipart.addBodyPart(messageBodyPart1);
|
||
+
|
||
+ BodyPart messageBodyPart2 = new MimeBodyPart();
|
||
+ messageBodyPart2.setContent("<b>please</b> send also this Content <br>ciao!", "text/html; charset=UTF-8");
|
||
+ multipart.addBodyPart(messageBodyPart2);
|
||
+
|
||
+ message.setContent(multipart);
|
||
+
|
||
+ /*
|
||
+ Transport tr = session.getTransport("smtp");
|
||
+ tr.connect(host,user, password);
|
||
+ tr.sendMessage(message,InternetAddress.parse(to));
|
||
+ tr.close();
|
||
+ */
|
||
+
|
||
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||
+ message.writeTo(baos);
|
||
+ String output = baos.toString();
|
||
+ System.out.println("output = " + output);
|
||
+ if (output.contains("also this Content")) {
|
||
+ System.out.println("Test PASSED.");
|
||
+ } else {
|
||
+ System.out.println("Test FAILED, missing content.");
|
||
+ throw new IllegalStateException("Test FAILED, missing content.");
|
||
+ }
|
||
+ } catch (MessagingException ignored) {
|
||
+ } catch (IOException ignored) {
|
||
+ }
|
||
+ }
|
||
+
|
||
+ // this is how the error can be worked around ...
|
||
+ static void workaroundJAFSetup() {
|
||
+ MailcapCommandMap mailMap = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
|
||
+ mailMap.addMailcap("multipart/mixed;;x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
|
||
+ }
|
||
+}
|
||
Binary file test/javax/xml/ws/8043129/javax.mail.jar has changed
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/ws/xsanymixed/CopyingResponse.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,35 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+
|
||
+import org.somewhere.ws.EchoRequest;
|
||
+import org.somewhere.ws.EchoResponse;
|
||
+
|
||
+public class CopyingResponse extends EchoResponse {
|
||
+
|
||
+ public CopyingResponse() {}
|
||
+
|
||
+ public CopyingResponse(EchoRequest request) {
|
||
+ content = request.getContent();
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/ws/xsanymixed/ServiceImpl.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,54 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+import org.somewhere.ws.EchoRequest;
|
||
+import org.somewhere.ws.EchoResponse;
|
||
+import org.somewhere.ws.TestPort;
|
||
+
|
||
+import java.util.ArrayList;
|
||
+
|
||
+import javax.jws.WebService;
|
||
+import javax.xml.namespace.QName;
|
||
+
|
||
+
|
||
+/**
|
||
+ * Simple Webservice implementation just copying xml part as is
|
||
+ * from incoming request into outgoing response
|
||
+ */
|
||
+@WebService(
|
||
+ endpointInterface = "org.somewhere.ws.TestPort",
|
||
+ targetNamespace = "http://ws.somewhere.org/",
|
||
+ serviceName = "TestService",
|
||
+ portName = "TestPort")
|
||
+public class ServiceImpl implements TestPort {
|
||
+
|
||
+ public static final QName PORT_NAME = new QName("http://ws.somewhere.org/", "TestPort");
|
||
+ public static final QName SERVICE_NAME = new QName("http://ws.somewhere.org/", "TestService");
|
||
+
|
||
+ @Override
|
||
+ public EchoResponse echo(EchoRequest request) {
|
||
+ System.err.println( "request.getContent="+(ArrayList)(request.getContent()));
|
||
+ return new CopyingResponse(request);
|
||
+ }
|
||
+
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/ws/xsanymixed/Test.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,197 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 8036981 8038966 8051441
|
||
+ * @summary the content of xs:any content:mixed should remain as is,
|
||
+ * no white space changes and no changes to namespace prefixes
|
||
+ * @run shell compile-wsdl.sh
|
||
+ * @run main/othervm Test
|
||
+ */
|
||
+
|
||
+import com.sun.net.httpserver.HttpServer;
|
||
+import java.io.IOException;
|
||
+import java.io.StringReader;
|
||
+import java.io.StringWriter;
|
||
+import java.net.InetSocketAddress;
|
||
+import java.net.URL;
|
||
+import java.nio.file.FileVisitResult;
|
||
+import static java.nio.file.FileVisitResult.CONTINUE;
|
||
+import java.nio.file.Files;
|
||
+import java.nio.file.Path;
|
||
+import java.nio.file.Paths;
|
||
+import java.nio.file.SimpleFileVisitor;
|
||
+import java.nio.file.attribute.BasicFileAttributes;
|
||
+import javax.xml.transform.Source;
|
||
+import javax.xml.transform.Transformer;
|
||
+import javax.xml.transform.TransformerException;
|
||
+import javax.xml.transform.TransformerFactory;
|
||
+import javax.xml.transform.stream.StreamResult;
|
||
+import javax.xml.transform.stream.StreamSource;
|
||
+import javax.xml.ws.Dispatch;
|
||
+import javax.xml.ws.Endpoint;
|
||
+import javax.xml.ws.Service;
|
||
+
|
||
+public class Test {
|
||
+
|
||
+ private static HttpServer httpServer;
|
||
+ private static Endpoint endpoint;
|
||
+ private static final String NL = System.getProperty("line.separator");
|
||
+
|
||
+ private static final String XS_ANY_MIXED_PART =
|
||
+ "<AppHdr xmlns=\"urn:head.001\">" + NL +
|
||
+ " <Fr>" + NL + NL +
|
||
+ "<FIId xmlns=\"urn:head.009\">" + NL + NL +
|
||
+ " any" + NL +
|
||
+ " white" + NL +
|
||
+ " space" + NL + NL +
|
||
+ " <FinInstnId>... and" + NL + NL +
|
||
+ " NO namespace prefixes!!!" + NL + NL +
|
||
+ " </FinInstnId>" + NL + NL +
|
||
+ " </FIId>" + NL +
|
||
+ "</Fr>" + NL +
|
||
+ "</AppHdr>";
|
||
+
|
||
+ private static final String XML_REQUEST = "<soap:Envelope " +
|
||
+ "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
|
||
+ "xmlns:ws=\"http://ws.somewhere.org/\">" +
|
||
+ "<soap:Header/><soap:Body>" +
|
||
+ "<ws:echoRequest>" + NL +
|
||
+ XS_ANY_MIXED_PART + NL +
|
||
+ "</ws:echoRequest>" +
|
||
+ "</soap:Body></soap:Envelope>";
|
||
+
|
||
+ private static String deployWebservice() throws IOException {
|
||
+ // Manually create HttpServer here using ephemeral address for port
|
||
+ // so as to not end up with attempt to bind to an in-use port
|
||
+ httpServer = HttpServer.create(new InetSocketAddress(0), 0);
|
||
+ httpServer.start();
|
||
+
|
||
+ endpoint = Endpoint.create(new ServiceImpl());
|
||
+ endpoint.publish(httpServer.createContext("/wservice"));
|
||
+
|
||
+ String wsdlAddress = "http://localhost:" + httpServer.getAddress().getPort() + "/wservice?wsdl";
|
||
+ log("address = " + wsdlAddress);
|
||
+ return wsdlAddress;
|
||
+ }
|
||
+
|
||
+ private static void stopWebservice() {
|
||
+ if (endpoint != null && endpoint.isPublished()) {
|
||
+ endpoint.stop();
|
||
+ }
|
||
+ if (httpServer != null) {
|
||
+ httpServer.stop(0);
|
||
+ }
|
||
+ }
|
||
+
|
||
+ public static void main(String[] args) throws IOException, TransformerException {
|
||
+
|
||
+ try {
|
||
+ String address = deployWebservice();
|
||
+ Service service = Service.create(new URL(address), ServiceImpl.SERVICE_NAME);
|
||
+
|
||
+ log( "PORT="+ServiceImpl.PORT_NAME+" service="+service);
|
||
+ Dispatch<Source> d = service.createDispatch(ServiceImpl.PORT_NAME, Source.class, Service.Mode.MESSAGE);
|
||
+ Source response = d.invoke(new StreamSource(new StringReader(XML_REQUEST)));
|
||
+
|
||
+ log( "reponse="+response );
|
||
+ String resultXml = toString(response);
|
||
+
|
||
+ log("= request ======== \n");
|
||
+ log(XML_REQUEST);
|
||
+ log("= result ========= \n");
|
||
+ log(resultXml);
|
||
+ log("\n==================");
|
||
+
|
||
+ boolean xsAnyMixedPartSame = resultXml.contains(XS_ANY_MIXED_PART);
|
||
+ log("resultXml.contains(XS_ANY_PART) = " + xsAnyMixedPartSame);
|
||
+ if (!xsAnyMixedPartSame) {
|
||
+ fail("The xs:any content=mixed part is supposed to be same in request and response.");
|
||
+ throw new RuntimeException();
|
||
+ }
|
||
+
|
||
+ log("TEST PASSED");
|
||
+ } finally {
|
||
+ stopWebservice();
|
||
+
|
||
+ // if you need to debug or explore wsdl generation result
|
||
+ // comment this line out:
|
||
+ deleteGeneratedFiles();
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private static String toString(Source response) throws TransformerException, IOException {
|
||
+ TransformerFactory transformerFactory = TransformerFactory.newInstance();
|
||
+ Transformer transformer = transformerFactory.newTransformer();
|
||
+ StreamResult xmlOutput = new StreamResult(new StringWriter());
|
||
+ transformer.transform(response, xmlOutput);
|
||
+ return xmlOutput.getWriter().toString();
|
||
+ }
|
||
+
|
||
+ private static void fail(String message) {
|
||
+ log("TEST FAILED.");
|
||
+ throw new RuntimeException(message);
|
||
+ }
|
||
+
|
||
+ private static void log(String msg) {
|
||
+ System.out.println(msg);
|
||
+ }
|
||
+
|
||
+ private static void deleteGeneratedFiles() {
|
||
+ Path p = Paths.get("..", "classes", "javax", "xml", "ws", "xsanymixed", "org");
|
||
+ System.out.println("performing cleanup, deleting wsdl compilation result: " + p.toFile().getAbsolutePath());
|
||
+ if (Files.exists(p)) {
|
||
+ try {
|
||
+ Files.walkFileTree(p, new SimpleFileVisitor<Path>() {
|
||
+ @Override
|
||
+ public FileVisitResult visitFile(
|
||
+ Path file,
|
||
+ BasicFileAttributes attrs) throws IOException {
|
||
+
|
||
+ System.out.println("deleting file [" + file.toFile().getAbsoluteFile() + "]");
|
||
+ Files.delete(file);
|
||
+ return CONTINUE;
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public FileVisitResult postVisitDirectory(
|
||
+ Path dir,
|
||
+ IOException exc) throws IOException {
|
||
+
|
||
+ System.out.println("deleting dir [" + dir.toFile().getAbsoluteFile() + "]");
|
||
+ if (exc == null) {
|
||
+ Files.delete(dir);
|
||
+ return CONTINUE;
|
||
+ } else {
|
||
+ throw exc;
|
||
+ }
|
||
+ }
|
||
+ });
|
||
+ } catch (IOException ioe) {
|
||
+ ioe.printStackTrace();
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/ws/xsanymixed/compile-wsdl.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,36 @@
|
||
+#! /bin/sh
|
||
+
|
||
+#
|
||
+# Copyright (c) 2014, 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.
|
||
+#
|
||
+# 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.
|
||
+#
|
||
+
|
||
+#
|
||
+
|
||
+if [ "x$TESTJAVA" = x ]; then
|
||
+ TESTJAVA=$1; shift
|
||
+ TESTCLASSES=.
|
||
+fi
|
||
+
|
||
+echo "compiling [test-service.wsdl] wsdl ..."
|
||
+$TESTJAVA/bin/wsimport -keep -d ${TESTCLASSES} ${TESTSRC}/service.wsdl
|
||
+
|
||
+echo "WSDL compiled. Main test class Test.java can be compiled now."
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/javax/xml/ws/xsanymixed/service.wsdl Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,87 @@
|
||
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||
+<!--
|
||
+ Copyright (c) 2014, 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.
|
||
+
|
||
+ 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.
|
||
+-->
|
||
+<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
|
||
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
|
||
+ xmlns:tns="http://ws.somewhere.org/"
|
||
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||
+ xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
|
||
+ name="TestService"
|
||
+ targetNamespace="http://ws.somewhere.org/">
|
||
+
|
||
+ <types>
|
||
+ <xsd:schema targetNamespace="http://ws.somewhere.org/" version="1.0"
|
||
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://ws.somewhere.org/">
|
||
+
|
||
+ <xsd:element type="tns:echoRequest" name="echoRequest"/>
|
||
+ <xsd:element type="tns:echoResponse" name="echoResponse"/>
|
||
+
|
||
+ <xsd:complexType name="echoRequest" mixed="true">
|
||
+ <xsd:sequence>
|
||
+ <xsd:any namespace="##any" processContents="skip" minOccurs="1" maxOccurs="10"/>
|
||
+ </xsd:sequence>
|
||
+ </xsd:complexType>
|
||
+
|
||
+ <xsd:complexType name="echoResponse" mixed="true">
|
||
+ <xsd:sequence>
|
||
+ <xsd:any namespace="##any" processContents="skip" minOccurs="1" maxOccurs="10"/>
|
||
+ </xsd:sequence>
|
||
+ </xsd:complexType>
|
||
+ </xsd:schema>
|
||
+ </types>
|
||
+
|
||
+ <message name="echoRequest">
|
||
+ <part element="tns:echoRequest" name="parameters"/>
|
||
+ </message>
|
||
+ <message name="echoResponse">
|
||
+ <part element="tns:echoResponse" name="parameters"/>
|
||
+ </message>
|
||
+
|
||
+ <portType name="TestPort">
|
||
+ <operation name="echo">
|
||
+ <input message="tns:echoRequest" wsam:Action="http://ws.somewhere.org/tester/echoRequest"/>
|
||
+ <output message="tns:echoResponse" wsam:Action="http://ws.somewhere.org/tester/echoResponse"/>
|
||
+ </operation>
|
||
+ </portType>
|
||
+
|
||
+ <binding name="TestServicePortBinding" type="tns:TestPort">
|
||
+ <soap:binding style="document"
|
||
+ transport="http://schemas.xmlsoap.org/soap/http"/>
|
||
+
|
||
+ <operation name="echo">
|
||
+ <soap:operation soapAction=""/>
|
||
+ <input>
|
||
+ <soap:body use="literal"/>
|
||
+ </input>
|
||
+ <output>
|
||
+ <soap:body use="literal"/>
|
||
+ </output>
|
||
+ </operation>
|
||
+ </binding>
|
||
+
|
||
+ <service name="TestService">
|
||
+ <port binding="tns:TestServicePortBinding" name="TestPort">
|
||
+ <soap:address location="http://localhost/ws/tester"/>
|
||
+ </port>
|
||
+ </service>
|
||
+</definitions>
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/sun/awt/AppContext/MultiThread/MultiThreadTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,100 @@
|
||
+/*
|
||
+ * Copyright (c) 2013, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 8019623
|
||
+ * @summary Tests that AppContext.getAppContext() works correctly in multi-threads scenario.
|
||
+ * @author Leonid Romanov
|
||
+ */
|
||
+
|
||
+import sun.awt.AppContext;
|
||
+
|
||
+public class MultiThreadTest {
|
||
+ private static final int NUM_THREADS = 2;
|
||
+
|
||
+ private static AppContextGetter[] getters = new AppContextGetter[NUM_THREADS];
|
||
+
|
||
+ public static void main(String[] args) {
|
||
+ createAndStartThreads();
|
||
+ compareAppContexts();
|
||
+ }
|
||
+
|
||
+ private static void createAndStartThreads() {
|
||
+ ThreadGroup systemGroup = getSystemThreadGroup();
|
||
+ for (int i = 0; i < NUM_THREADS; ++i) {
|
||
+ ThreadGroup tg = new ThreadGroup(systemGroup, "AppContextGetter" + i);
|
||
+ getters[i] = new AppContextGetter(tg);
|
||
+ }
|
||
+
|
||
+ for (int i = 0; i < NUM_THREADS; ++i) {
|
||
+ getters[i].start();
|
||
+ }
|
||
+
|
||
+ for (int i = 0; i < NUM_THREADS; ++i) {
|
||
+ try {
|
||
+ getters[i].join();
|
||
+ } catch (InterruptedException e) {
|
||
+ // ignore
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private static ThreadGroup getSystemThreadGroup() {
|
||
+ ThreadGroup currentThreadGroup =
|
||
+ Thread.currentThread().getThreadGroup();
|
||
+ ThreadGroup parentThreadGroup = currentThreadGroup.getParent();
|
||
+ while (parentThreadGroup != null) {
|
||
+ currentThreadGroup = parentThreadGroup;
|
||
+ parentThreadGroup = currentThreadGroup.getParent();
|
||
+ }
|
||
+
|
||
+ return currentThreadGroup;
|
||
+ }
|
||
+
|
||
+ private static void compareAppContexts() {
|
||
+ AppContext ctx = getters[0].getAppContext();
|
||
+ for (int i = 1; i < NUM_THREADS; ++i) {
|
||
+ if (!ctx.equals(getters[i].getAppContext())) {
|
||
+ throw new RuntimeException("Unexpected AppContexts difference, could be a race condition");
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private static class AppContextGetter extends Thread {
|
||
+ private AppContext appContext;
|
||
+
|
||
+ public AppContextGetter(ThreadGroup tg) {
|
||
+ super(tg, tg.getName());
|
||
+ }
|
||
+
|
||
+ AppContext getAppContext() {
|
||
+ return appContext;
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void run() {
|
||
+ appContext = AppContext.getAppContext();
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/sun/awt/dnd/8024061/bug8024061.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,357 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/* @test
|
||
+ * @bug 8024061
|
||
+ * @summary Checks that no exception is thrown if dragGestureRecognized
|
||
+ * takes a while to complete.
|
||
+ */
|
||
+import sun.awt.OSInfo;
|
||
+import sun.awt.OSInfo.OSType;
|
||
+import sun.awt.SunToolkit;
|
||
+
|
||
+import java.awt.*;
|
||
+import java.awt.datatransfer.DataFlavor;
|
||
+import java.awt.datatransfer.Transferable;
|
||
+import java.awt.datatransfer.UnsupportedFlavorException;
|
||
+import java.awt.dnd.DnDConstants;
|
||
+import java.awt.dnd.DragGestureEvent;
|
||
+import java.awt.dnd.DragGestureListener;
|
||
+import java.awt.dnd.DragSource;
|
||
+import java.awt.dnd.DragSourceDragEvent;
|
||
+import java.awt.dnd.DragSourceDropEvent;
|
||
+import java.awt.dnd.DragSourceEvent;
|
||
+import java.awt.dnd.DragSourceListener;
|
||
+import java.awt.dnd.DropTarget;
|
||
+import java.awt.dnd.DropTargetDragEvent;
|
||
+import java.awt.dnd.DropTargetDropEvent;
|
||
+import java.awt.dnd.DropTargetEvent;
|
||
+import java.awt.dnd.DropTargetListener;
|
||
+import java.awt.event.InputEvent;
|
||
+
|
||
+import java.io.IOException;
|
||
+import java.lang.reflect.InvocationTargetException;
|
||
+import java.util.concurrent.CountDownLatch;
|
||
+import java.util.concurrent.TimeUnit;
|
||
+
|
||
+import javax.swing.*;
|
||
+
|
||
+/**
|
||
+ * If dragGestureRecognized() takes a while to complete and if user performs a drag quickly,
|
||
+ * an exception is thrown from DropTargetListener.dragEnter when it calls
|
||
+ * DropTargetDragEvent.getTransferable().
|
||
+ * <p>
|
||
+ * This class introduces a delay in dragGestureRecognized() to cause the exception.
|
||
+ */
|
||
+public class bug8024061 {
|
||
+ private static final DataFlavor DropObjectFlavor;
|
||
+ private static final int DELAY = 1000;
|
||
+
|
||
+ private final DnDPanel panel1 = new DnDPanel(Color.yellow);
|
||
+ private final DnDPanel panel2 = new DnDPanel(Color.pink);
|
||
+ private final JFrame frame;
|
||
+
|
||
+ private static final CountDownLatch lock = new CountDownLatch(1);
|
||
+ private static volatile Exception dragEnterException = null;
|
||
+
|
||
+ static {
|
||
+ DataFlavor flavor = null;
|
||
+ try {
|
||
+ flavor = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType);
|
||
+ } catch (ClassNotFoundException e) {
|
||
+ e.printStackTrace();
|
||
+ }
|
||
+ DropObjectFlavor = flavor;
|
||
+ }
|
||
+
|
||
+ bug8024061() {
|
||
+ frame = new JFrame("DnDWithRobot");
|
||
+ frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
|
||
+
|
||
+ Dimension d = new Dimension(100, 100);
|
||
+
|
||
+ panel1.setPreferredSize(d);
|
||
+ panel2.setPreferredSize(d);
|
||
+
|
||
+ Container content = frame.getContentPane();
|
||
+ content.setLayout(new GridLayout(1, 2, 5, 5));
|
||
+ content.add(panel1);
|
||
+ content.add(panel2);
|
||
+
|
||
+ frame.pack();
|
||
+
|
||
+ DropObject drop = new DropObject();
|
||
+ drop.place(panel1, new Point(10, 10));
|
||
+ frame.setVisible(true);
|
||
+ }
|
||
+
|
||
+ public static void main(String[] args) throws AWTException, InvocationTargetException, InterruptedException {
|
||
+ OSType type = OSInfo.getOSType();
|
||
+ if (type != OSType.LINUX && type != OSType.SOLARIS) {
|
||
+ System.out.println("This test is for Linux and Solaris only... " +
|
||
+ "skipping!");
|
||
+ return;
|
||
+ }
|
||
+
|
||
+ final bug8024061[] dnd = {null};
|
||
+ SwingUtilities.invokeAndWait(new Runnable() {
|
||
+ @Override
|
||
+ public void run() {
|
||
+ dnd[0] = new bug8024061();
|
||
+ }
|
||
+ });
|
||
+ final Robot robot = new Robot();
|
||
+ robot.setAutoDelay(10);
|
||
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
|
||
+ toolkit.realSync();
|
||
+
|
||
+ JFrame frame = dnd[0].frame;
|
||
+ Point point = frame.getLocationOnScreen();
|
||
+ Point here = new Point(point.x + 35, point.y + 45);
|
||
+ Point there = new Point(point.x + 120, point.y + 45);
|
||
+ here.x += 25;
|
||
+ robot.mouseMove(here.x, here.y);
|
||
+ robot.mousePress(InputEvent.BUTTON1_MASK);
|
||
+ while (here.x < there.x) {
|
||
+ here.x += 20;
|
||
+ robot.mouseMove(here.x, here.y);
|
||
+ System.out.println("x = " + here.x);
|
||
+ }
|
||
+ robot.mouseRelease(InputEvent.BUTTON1_MASK);
|
||
+ toolkit.realSync();
|
||
+ robot.mousePress(InputEvent.BUTTON1_MASK);
|
||
+ robot.mouseRelease(InputEvent.BUTTON1_MASK);
|
||
+ System.out.println("finished");
|
||
+
|
||
+ try {
|
||
+ if (lock.await(5, TimeUnit.SECONDS)) {
|
||
+ if (dragEnterException == null) {
|
||
+ System.out.println("Test passed.");
|
||
+ } else {
|
||
+ System.out.println("Test failed.");
|
||
+ dragEnterException.printStackTrace();
|
||
+ throw new RuntimeException(dragEnterException);
|
||
+ }
|
||
+ } else {
|
||
+ System.out.println("Test failed. Timeout reached");
|
||
+ throw new RuntimeException("Timed out waiting for dragEnter()");
|
||
+ }
|
||
+ } finally {
|
||
+ frame.dispose();
|
||
+ }
|
||
+ }
|
||
+
|
||
+ class DropObject implements Transferable {
|
||
+ DnDPanel panel;
|
||
+ Color color = Color.CYAN;
|
||
+ int width = 50;
|
||
+ int height = 50;
|
||
+ int x;
|
||
+ int y;
|
||
+
|
||
+ void draw(Graphics2D g) {
|
||
+ Color savedColor = g.getColor();
|
||
+ g.setColor(color);
|
||
+ g.fillRect(x, y, width, height);
|
||
+ g.setColor(Color.lightGray);
|
||
+ g.drawRect(x, y, width, height);
|
||
+ g.setColor(savedColor);
|
||
+ }
|
||
+
|
||
+ boolean contains(int x, int y) {
|
||
+ return (x > this.x && x < this.x + width)
|
||
+ && (y > this.y && y < this.y + height);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public DataFlavor[] getTransferDataFlavors() {
|
||
+ return new DataFlavor[]{DropObjectFlavor};
|
||
+ }
|
||
+
|
||
+ void place(DnDPanel panel, Point location) {
|
||
+ if (panel != this.panel) {
|
||
+ x = location.x;
|
||
+ y = location.y;
|
||
+ if (this.panel != null) {
|
||
+ this.panel.setDropObject(null);
|
||
+ this.panel.repaint();
|
||
+ }
|
||
+ this.panel = panel;
|
||
+ this.panel.setDropObject(this);
|
||
+ this.panel.repaint();
|
||
+ }
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public boolean isDataFlavorSupported(DataFlavor flavor) {
|
||
+ return DropObjectFlavor.equals(flavor);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public Object getTransferData(DataFlavor flavor)
|
||
+ throws UnsupportedFlavorException, IOException {
|
||
+ if (isDataFlavorSupported(flavor)) {
|
||
+ return this;
|
||
+ } else {
|
||
+ throw new UnsupportedFlavorException(flavor);
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+
|
||
+ class DnDPanel extends JPanel {
|
||
+ DropObject dropObject;
|
||
+ final DragSource dragSource;
|
||
+ final DropTarget dropTarget;
|
||
+ final Color color;
|
||
+ final DragGestureListener dgListener;
|
||
+ final DragSourceListener dsListener;
|
||
+ final DropTargetListener dtListener;
|
||
+
|
||
+ DnDPanel(Color color) {
|
||
+ this.color = color;
|
||
+ this.dragSource = DragSource.getDefaultDragSource();
|
||
+ dgListener = new DragGestureListener() {
|
||
+ @Override
|
||
+ public void dragGestureRecognized(DragGestureEvent dge) {
|
||
+ Point location = dge.getDragOrigin();
|
||
+ if (dropObject != null && dropObject.contains(location.x, location.y)) {
|
||
+ dragSource.startDrag(dge, DragSource.DefaultCopyNoDrop, dropObject, dsListener);
|
||
+ try {
|
||
+ Thread.sleep(DELAY);
|
||
+ } catch (InterruptedException e) {
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+ };
|
||
+
|
||
+ dsListener = new DragSourceListener() {
|
||
+ @Override
|
||
+ public void dragEnter(DragSourceDragEvent dsde) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void dragOver(DragSourceDragEvent dsde) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void dropActionChanged(DragSourceDragEvent dsde) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void dragExit(DragSourceEvent dse) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void dragDropEnd(DragSourceDropEvent dsde) {
|
||
+ }
|
||
+ };
|
||
+
|
||
+ dtListener = new DropTargetListener() {
|
||
+ @Override
|
||
+ public void dragEnter(DropTargetDragEvent dtde) {
|
||
+ if (dropObject != null) {
|
||
+ dtde.rejectDrag();
|
||
+ return;
|
||
+ }
|
||
+ dtde.acceptDrag(DnDConstants.ACTION_MOVE);
|
||
+ try {
|
||
+ Transferable t = dtde.getTransferable();
|
||
+ Object data = t.getTransferData(DropObjectFlavor);
|
||
+ if (data != null) {
|
||
+ throw new Exception("getTransferData returned non-null");
|
||
+ }
|
||
+ } catch (Exception e) {
|
||
+ dragEnterException = e;
|
||
+ e.printStackTrace();
|
||
+ } finally {
|
||
+ lock.countDown();
|
||
+ }
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void dragOver(DropTargetDragEvent dtde) {
|
||
+ if (dropObject != null) {
|
||
+ dtde.rejectDrag();
|
||
+ return;
|
||
+ }
|
||
+ dtde.acceptDrag(DnDConstants.ACTION_MOVE);
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void dropActionChanged(DropTargetDragEvent dtde) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void dragExit(DropTargetEvent dte) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void drop(DropTargetDropEvent dtde) {
|
||
+ if (dropObject != null) {
|
||
+ dtde.rejectDrop();
|
||
+ return;
|
||
+ }
|
||
+ try {
|
||
+ dtde.acceptDrop(DnDConstants.ACTION_MOVE);
|
||
+ Transferable t = dtde.getTransferable();
|
||
+ DropObject dropObject = (DropObject) t.getTransferData(DropObjectFlavor);
|
||
+ Point location = dtde.getLocation();
|
||
+ dropObject.place(DnDPanel.this, location);
|
||
+ dtde.dropComplete(true);
|
||
+ } catch (Exception e) {
|
||
+ e.printStackTrace();
|
||
+ }
|
||
+
|
||
+ }
|
||
+ };
|
||
+
|
||
+ dragSource.createDefaultDragGestureRecognizer(this,
|
||
+ DnDConstants.ACTION_MOVE, dgListener);
|
||
+
|
||
+ dropTarget = new DropTarget(this, DnDConstants.ACTION_MOVE, dtListener, true);
|
||
+
|
||
+ }
|
||
+
|
||
+ public void paintComponent(Graphics g) {
|
||
+ super.paintComponent(g);
|
||
+ Color savedColor = g.getColor();
|
||
+ g.setColor(color);
|
||
+ g.fillRect(0, 0, getWidth(), getHeight());
|
||
+ g.setColor(savedColor);
|
||
+ if (dropObject != null) {
|
||
+ dropObject.draw((Graphics2D) g);
|
||
+ }
|
||
+ }
|
||
+
|
||
+ void setDropObject(DropObject dropObject) {
|
||
+ this.dropObject = dropObject;
|
||
+ }
|
||
+
|
||
+ DropObject findDropObject(int x, int y) {
|
||
+ if (dropObject != null && dropObject.contains(x, y)) {
|
||
+ return dropObject;
|
||
+ }
|
||
+ return null;
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/sun/java2d/DrawXORModeTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,110 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 8036022
|
||
+ * @summary Test verifies that drawing shapes with XOR composite
|
||
+ * does not trigger an InternalError in GDI surface data.
|
||
+ * @run main/othervm -Dsun.java2d.d3d=True DrawXORModeTest
|
||
+ */
|
||
+import java.awt.BasicStroke;
|
||
+import java.awt.Color;
|
||
+import java.awt.Component;
|
||
+import java.awt.Dimension;
|
||
+import java.awt.Frame;
|
||
+import java.awt.Graphics;
|
||
+import java.awt.Graphics2D;
|
||
+import java.awt.Stroke;
|
||
+import java.awt.geom.Line2D;
|
||
+import java.util.concurrent.CountDownLatch;
|
||
+
|
||
+public class DrawXORModeTest extends Component {
|
||
+
|
||
+ public static void main(String[] args) {
|
||
+ final DrawXORModeTest c = new DrawXORModeTest();
|
||
+
|
||
+ final Frame f = new Frame("XOR mode test");
|
||
+ f.add(c);
|
||
+ f.pack();
|
||
+
|
||
+ f.setVisible(true);
|
||
+
|
||
+ try {
|
||
+ c.checkResult();
|
||
+ } finally {
|
||
+ f.dispose();
|
||
+ }
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void paint(Graphics g) {
|
||
+ if (g == null || !(g instanceof Graphics2D)) {
|
||
+ return;
|
||
+ }
|
||
+ g.setColor(Color.white);
|
||
+ g.setXORMode(Color.black);
|
||
+ Graphics2D dg = (Graphics2D) g;
|
||
+ Stroke stroke = new BasicStroke(1, BasicStroke.CAP_BUTT,
|
||
+ BasicStroke.JOIN_MITER,
|
||
+ 10.0f,
|
||
+ new float[]{1.0f, 1.0f},
|
||
+ 0.0f);
|
||
+ dg.setStroke(stroke);
|
||
+ try {
|
||
+ dg.draw(new Line2D.Float(10, 10, 20, 20));
|
||
+ } catch (Throwable e) {
|
||
+ synchronized (this) {
|
||
+ theError = e;
|
||
+ }
|
||
+ } finally {
|
||
+ didDraw.countDown();
|
||
+ }
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public Dimension getPreferredSize() {
|
||
+ return new Dimension(400, 100);
|
||
+ }
|
||
+
|
||
+ public void checkResult() {
|
||
+ try {
|
||
+ didDraw.await();
|
||
+ } catch (InterruptedException e) {
|
||
+ }
|
||
+
|
||
+ synchronized (this) {
|
||
+ if (theError != null) {
|
||
+ System.out.println("Error: " + theError);
|
||
+
|
||
+ throw new RuntimeException("Test FAILED.");
|
||
+ }
|
||
+ }
|
||
+ System.out.println("Test PASSED.");
|
||
+
|
||
+ }
|
||
+
|
||
+ private Throwable theError = null;
|
||
+
|
||
+ private final CountDownLatch didDraw = new CountDownLatch(1);
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/sun/java2d/OpenGL/DrawHugeImageTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,108 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 8040617
|
||
+ * @summary Test verifies that an attempt to get an accelerated copy of
|
||
+ * a huge buffered image does not result in an OOME.
|
||
+ *
|
||
+ * @run main DrawHugeImageTest
|
||
+ */
|
||
+
|
||
+import java.awt.Color;
|
||
+import java.awt.Graphics2D;
|
||
+import java.awt.GraphicsConfiguration;
|
||
+import java.awt.GraphicsEnvironment;
|
||
+import java.awt.image.BufferedImage;
|
||
+import java.awt.image.VolatileImage;
|
||
+
|
||
+public class DrawHugeImageTest {
|
||
+ // we have to render the BI source several times in order
|
||
+ // to get an accelerated copy to be used.
|
||
+ static {
|
||
+ System.setProperty("sun.java2d.accthreshold", "1");
|
||
+ }
|
||
+ private static final int max_rendering_count = 5;
|
||
+
|
||
+ private static final Color srcColor = Color.red;
|
||
+ private static final Color dstColor = Color.blue;
|
||
+
|
||
+ public static void main(String[] args) {
|
||
+ BufferedImage src = createSrc();
|
||
+
|
||
+ VolatileImage dst = createDst();
|
||
+ System.out.println("Dst: " + dst);
|
||
+ boolean status;
|
||
+ int count = max_rendering_count;
|
||
+
|
||
+ do {
|
||
+ System.out.println("render image: " + (max_rendering_count - count));
|
||
+ status = render(src, dst);
|
||
+
|
||
+ } while (status && count-- > 0);
|
||
+
|
||
+ if (!status || count > 0) {
|
||
+ throw new RuntimeException("Test failed: " + count);
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private static boolean render(BufferedImage src, VolatileImage dst) {
|
||
+ int cnt = 5;
|
||
+ do {
|
||
+ Graphics2D g = dst.createGraphics();
|
||
+ g.setColor(dstColor);
|
||
+ g.fillRect(0, 0, dst.getWidth(), dst.getHeight());
|
||
+ g.drawImage(src, 0, 0, null);
|
||
+ g.dispose();
|
||
+ } while (dst.contentsLost() && (--cnt > 0));
|
||
+
|
||
+ if (cnt == 0) {
|
||
+ System.err.println("Test failed: unable to render to volatile destination");
|
||
+ return false;
|
||
+ }
|
||
+
|
||
+ BufferedImage s = dst.getSnapshot();
|
||
+
|
||
+ return s.getRGB(1,1) == srcColor.getRGB();
|
||
+ }
|
||
+
|
||
+ private static BufferedImage createSrc() {
|
||
+ final int w = 20000;
|
||
+ final int h = 5;
|
||
+
|
||
+ BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_3BYTE_BGR);
|
||
+ Graphics2D g = img.createGraphics();
|
||
+ g.setColor(srcColor);
|
||
+ g.fillRect(0, 0, w, h);
|
||
+ g.dispose();
|
||
+
|
||
+ return img;
|
||
+ }
|
||
+
|
||
+ private static VolatileImage createDst() {
|
||
+ GraphicsConfiguration gc =
|
||
+ GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
|
||
+
|
||
+ return gc.createCompatibleVolatileImage(200, 200);
|
||
+ }
|
||
+}
|
||
--- ./jdk/test/sun/net/ftp/FtpURL.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/net/ftp/FtpURL.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -483,7 +483,7 @@
|
||
|
||
// Now let's check the URL handler
|
||
|
||
- url = new URL("ftp://user2:@localhost:" + port + "/%2Fusr/bin;type=d");
|
||
+ url = new URL("ftp://user2@localhost:" + port + "/%2Fusr/bin;type=d");
|
||
con = url.openConnection();
|
||
in = new BufferedReader(new InputStreamReader(con.getInputStream()));
|
||
do {
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/sun/net/www/http/HttpClient/B8025710.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,409 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+import java.io.*;
|
||
+import java.net.*;
|
||
+import java.security.*;
|
||
+import java.security.cert.X509Certificate;
|
||
+import java.util.ArrayList;
|
||
+import java.util.concurrent.atomic.AtomicBoolean;
|
||
+import java.util.regex.Matcher;
|
||
+import java.util.regex.Pattern;
|
||
+import javax.net.ServerSocketFactory;
|
||
+import javax.net.SocketFactory;
|
||
+import javax.net.ssl.*;
|
||
+
|
||
+/**
|
||
+ * @test
|
||
+ * @bug 8025710
|
||
+ * @summary Proxied https connection reuse by HttpClient can send CONNECT to the server
|
||
+ */
|
||
+public class B8025710 {
|
||
+
|
||
+ private final static AtomicBoolean connectInServer = new AtomicBoolean();
|
||
+ private static final String keystorefile =
|
||
+ System.getProperty("test.src", "./")
|
||
+ + "/../../../../../sun/security/ssl/etc/keystore";
|
||
+ private static final String passphrase = "passphrase";
|
||
+
|
||
+ public static void main(String[] args) throws Exception {
|
||
+ new B8025710().runTest();
|
||
+
|
||
+ if (connectInServer.get())
|
||
+ throw new RuntimeException("TEST FAILED: server got proxy header");
|
||
+ else
|
||
+ System.out.println("TEST PASSED");
|
||
+ }
|
||
+
|
||
+ private void runTest() throws Exception {
|
||
+ ProxyServer proxyServer = new ProxyServer();
|
||
+ HttpServer httpServer = new HttpServer();
|
||
+ httpServer.start();
|
||
+ proxyServer.start();
|
||
+
|
||
+ URL url = new URL("https", InetAddress.getLocalHost().getHostName(),
|
||
+ httpServer.getPort(), "/");
|
||
+
|
||
+ Proxy proxy = new Proxy(Proxy.Type.HTTP, proxyServer.getAddress());
|
||
+
|
||
+ HttpsURLConnection.setDefaultSSLSocketFactory(createTestSSLSocketFactory());
|
||
+
|
||
+ // Make two connections. The bug occurs when the second request is made
|
||
+ for (int i = 0; i < 2; i++) {
|
||
+ System.out.println("Client: Requesting " + url.toExternalForm()
|
||
+ + " via " + proxy.toString()
|
||
+ + " (attempt " + (i + 1) + " of 2)");
|
||
+
|
||
+ HttpsURLConnection connection =
|
||
+ (HttpsURLConnection) url.openConnection(proxy);
|
||
+
|
||
+ connection.setRequestMethod("POST");
|
||
+ connection.setDoInput(true);
|
||
+ connection.setDoOutput(true);
|
||
+ connection.setRequestProperty("User-Agent", "Test/1.0");
|
||
+ connection.getOutputStream().write("Hello, world!".getBytes("UTF-8"));
|
||
+
|
||
+ if (connection.getResponseCode() != 200) {
|
||
+ System.err.println("Client: Unexpected response code "
|
||
+ + connection.getResponseCode());
|
||
+ break;
|
||
+ }
|
||
+
|
||
+ String response = readLine(connection.getInputStream());
|
||
+ if (!"Hi!".equals(response)) {
|
||
+ System.err.println("Client: Unexpected response body: "
|
||
+ + response);
|
||
+ }
|
||
+ }
|
||
+ httpServer.close();
|
||
+ proxyServer.close();
|
||
+ httpServer.join();
|
||
+ proxyServer.join();
|
||
+ }
|
||
+
|
||
+ class ProxyServer extends Thread implements Closeable {
|
||
+
|
||
+ private final ServerSocket proxySocket;
|
||
+ private final Pattern connectLinePattern =
|
||
+ Pattern.compile("^CONNECT ([^: ]+):([0-9]+) HTTP/[0-9.]+$");
|
||
+ private final String PROXY_RESPONSE =
|
||
+ "HTTP/1.0 200 Connection Established\r\n"
|
||
+ + "Proxy-Agent: TestProxy/1.0\r\n"
|
||
+ + "\r\n";
|
||
+
|
||
+ ProxyServer() throws Exception {
|
||
+ super("ProxyServer Thread");
|
||
+
|
||
+ // Create the http proxy server socket
|
||
+ proxySocket = ServerSocketFactory.getDefault().createServerSocket();
|
||
+ proxySocket.bind(new InetSocketAddress(InetAddress.getLocalHost(), 0));
|
||
+ }
|
||
+
|
||
+ public SocketAddress getAddress() { return proxySocket.getLocalSocketAddress(); }
|
||
+
|
||
+ @Override
|
||
+ public void close() throws IOException {
|
||
+ proxySocket.close();
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void run() {
|
||
+ ArrayList<Thread> threads = new ArrayList<>();
|
||
+ int connectionCount = 0;
|
||
+ try {
|
||
+ while (connectionCount++ < 2) {
|
||
+ final Socket clientSocket = proxySocket.accept();
|
||
+ final int proxyConnectionCount = connectionCount;
|
||
+ System.out.println("Proxy: NEW CONNECTION "
|
||
+ + proxyConnectionCount);
|
||
+
|
||
+ Thread t = new Thread("ProxySocket" + proxyConnectionCount) {
|
||
+ @Override
|
||
+ public void run() {
|
||
+ try {
|
||
+ String firstLine =
|
||
+ readHeader(clientSocket.getInputStream());
|
||
+
|
||
+ Matcher connectLineMatcher =
|
||
+ connectLinePattern.matcher(firstLine);
|
||
+ if (!connectLineMatcher.matches()) {
|
||
+ System.out.println("Proxy: Unexpected"
|
||
+ + " request to the proxy: "
|
||
+ + firstLine);
|
||
+ return;
|
||
+ }
|
||
+
|
||
+ String host = connectLineMatcher.group(1);
|
||
+ String portStr = connectLineMatcher.group(2);
|
||
+ int port = Integer.parseInt(portStr);
|
||
+
|
||
+ Socket serverSocket = SocketFactory.getDefault()
|
||
+ .createSocket(host, port);
|
||
+
|
||
+ clientSocket.getOutputStream()
|
||
+ .write(PROXY_RESPONSE.getBytes("UTF-8"));
|
||
+
|
||
+ ProxyTunnel copyToClient =
|
||
+ new ProxyTunnel(serverSocket, clientSocket);
|
||
+ ProxyTunnel copyToServer =
|
||
+ new ProxyTunnel(clientSocket, serverSocket);
|
||
+
|
||
+ copyToClient.start();
|
||
+ copyToServer.start();
|
||
+
|
||
+ copyToClient.join();
|
||
+ // here copyToClient.close() would not provoke the
|
||
+ // bug ( since it would trigger the retry logic in
|
||
+ // HttpURLConnction.writeRequests ), so close only
|
||
+ // the output to get the connection in this state.
|
||
+ clientSocket.shutdownOutput();
|
||
+
|
||
+ try {
|
||
+ Thread.sleep(3000);
|
||
+ } catch (InterruptedException ignored) { }
|
||
+
|
||
+ // now close all connections to finish the test
|
||
+ copyToServer.close();
|
||
+ copyToClient.close();
|
||
+ } catch (IOException | NumberFormatException
|
||
+ | InterruptedException e) {
|
||
+ e.printStackTrace();
|
||
+ }
|
||
+ }
|
||
+ };
|
||
+ threads.add(t);
|
||
+ t.start();
|
||
+ }
|
||
+ for (Thread t: threads)
|
||
+ t.join();
|
||
+ } catch (IOException | InterruptedException e) {
|
||
+ e.printStackTrace();
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * This inner class provides unidirectional data flow through the sockets
|
||
+ * by continuously copying bytes from the input socket onto the output
|
||
+ * socket, until both sockets are open and EOF has not been received.
|
||
+ */
|
||
+ class ProxyTunnel extends Thread {
|
||
+ private final Socket sockIn;
|
||
+ private final Socket sockOut;
|
||
+ private final InputStream input;
|
||
+ private final OutputStream output;
|
||
+
|
||
+ public ProxyTunnel(Socket sockIn, Socket sockOut) throws IOException {
|
||
+ super("ProxyTunnel");
|
||
+ this.sockIn = sockIn;
|
||
+ this.sockOut = sockOut;
|
||
+ input = sockIn.getInputStream();
|
||
+ output = sockOut.getOutputStream();
|
||
+ }
|
||
+
|
||
+ public void run() {
|
||
+ byte[] buf = new byte[8192];
|
||
+ int bytesRead;
|
||
+
|
||
+ try {
|
||
+ while ((bytesRead = input.read(buf)) >= 0) {
|
||
+ output.write(buf, 0, bytesRead);
|
||
+ output.flush();
|
||
+ }
|
||
+ } catch (IOException ignored) {
|
||
+ close();
|
||
+ }
|
||
+ }
|
||
+
|
||
+ public void close() {
|
||
+ try {
|
||
+ if (!sockIn.isClosed())
|
||
+ sockIn.close();
|
||
+ if (!sockOut.isClosed())
|
||
+ sockOut.close();
|
||
+ } catch (IOException ignored) { }
|
||
+ }
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * the server thread
|
||
+ */
|
||
+ class HttpServer extends Thread implements Closeable {
|
||
+
|
||
+ private final ServerSocket serverSocket;
|
||
+ private final SSLSocketFactory sslSocketFactory;
|
||
+ private final String serverResponse =
|
||
+ "HTTP/1.1 200 OK\r\n"
|
||
+ + "Content-Type: text/plain\r\n"
|
||
+ + "Content-Length: 3\r\n"
|
||
+ + "\r\n"
|
||
+ + "Hi!";
|
||
+ private int connectionCount = 0;
|
||
+
|
||
+ HttpServer() throws Exception {
|
||
+ super("HttpServer Thread");
|
||
+
|
||
+ KeyStore ks = KeyStore.getInstance("JKS");
|
||
+ ks.load(new FileInputStream(keystorefile), passphrase.toCharArray());
|
||
+ KeyManagerFactory factory = KeyManagerFactory.getInstance("SunX509");
|
||
+ factory.init(ks, passphrase.toCharArray());
|
||
+ SSLContext ctx = SSLContext.getInstance("TLS");
|
||
+ ctx.init(factory.getKeyManagers(), null, null);
|
||
+
|
||
+ sslSocketFactory = ctx.getSocketFactory();
|
||
+
|
||
+ // Create the server that the test wants to connect to via the proxy
|
||
+ serverSocket = ServerSocketFactory.getDefault().createServerSocket();
|
||
+ serverSocket.bind(new InetSocketAddress(InetAddress.getLocalHost(), 0));
|
||
+ }
|
||
+
|
||
+ public int getPort() { return serverSocket.getLocalPort(); }
|
||
+
|
||
+ @Override
|
||
+ public void close() throws IOException { serverSocket.close(); }
|
||
+
|
||
+ @Override
|
||
+ public void run() {
|
||
+ try {
|
||
+ while (connectionCount++ < 2) {
|
||
+ Socket socket = serverSocket.accept();
|
||
+ System.out.println("Server: NEW CONNECTION "
|
||
+ + connectionCount);
|
||
+
|
||
+ SSLSocket sslSocket = (SSLSocket) sslSocketFactory
|
||
+ .createSocket(socket,null, getPort(), false);
|
||
+ sslSocket.setUseClientMode(false);
|
||
+ sslSocket.startHandshake();
|
||
+
|
||
+ String firstLine = readHeader(sslSocket.getInputStream());
|
||
+ if (firstLine != null && firstLine.contains("CONNECT")) {
|
||
+ System.out.println("Server: BUG! HTTP CONNECT"
|
||
+ + " encountered: " + firstLine);
|
||
+ connectInServer.set(true);
|
||
+ }
|
||
+
|
||
+ // write the success response, the request body is not read.
|
||
+ // close only output and keep input open.
|
||
+ OutputStream out = sslSocket.getOutputStream();
|
||
+ out.write(serverResponse.getBytes("UTF-8"));
|
||
+ socket.shutdownOutput();
|
||
+ }
|
||
+ } catch (IOException e) {
|
||
+ e.printStackTrace();
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * read the header and return only the first line.
|
||
+ *
|
||
+ * @param inputStream the stream to read from
|
||
+ * @return the first line of the stream
|
||
+ * @throws IOException if reading failed
|
||
+ */
|
||
+ private static String readHeader(InputStream inputStream)
|
||
+ throws IOException {
|
||
+ String line;
|
||
+ String firstLine = null;
|
||
+ while ((line = readLine(inputStream)) != null && line.length() > 0) {
|
||
+ if (firstLine == null) {
|
||
+ firstLine = line;
|
||
+ }
|
||
+ }
|
||
+
|
||
+ return firstLine;
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * read a line from stream.
|
||
+ *
|
||
+ * @param inputStream the stream to read from
|
||
+ * @return the line
|
||
+ * @throws IOException if reading failed
|
||
+ */
|
||
+ private static String readLine(InputStream inputStream)
|
||
+ throws IOException {
|
||
+ final StringBuilder line = new StringBuilder();
|
||
+ int ch;
|
||
+ while ((ch = inputStream.read()) != -1) {
|
||
+ if (ch == '\r') {
|
||
+ continue;
|
||
+ }
|
||
+
|
||
+ if (ch == '\n') {
|
||
+ break;
|
||
+ }
|
||
+
|
||
+ line.append((char) ch);
|
||
+ }
|
||
+
|
||
+ return line.toString();
|
||
+ }
|
||
+
|
||
+ private SSLSocketFactory createTestSSLSocketFactory() {
|
||
+
|
||
+ HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
|
||
+ @Override
|
||
+ public boolean verify(String hostname, SSLSession sslSession) {
|
||
+ // ignore the cert's CN; it's not important to this test
|
||
+ return true;
|
||
+ }
|
||
+ });
|
||
+
|
||
+ // Set up the socket factory to use a trust manager that trusts all
|
||
+ // certs, since trust validation isn't important to this test
|
||
+ final TrustManager[] trustAllCertChains = new TrustManager[] {
|
||
+ new X509TrustManager() {
|
||
+ @Override
|
||
+ public X509Certificate[] getAcceptedIssuers() {
|
||
+ return null;
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void checkClientTrusted(X509Certificate[] certs,
|
||
+ String authType) {
|
||
+ }
|
||
+
|
||
+ @Override
|
||
+ public void checkServerTrusted(X509Certificate[] certs,
|
||
+ String authType) {
|
||
+ }
|
||
+ }
|
||
+ };
|
||
+
|
||
+ final SSLContext sc;
|
||
+ try {
|
||
+ sc = SSLContext.getInstance("TLS");
|
||
+ } catch (NoSuchAlgorithmException e) {
|
||
+ throw new RuntimeException(e);
|
||
+ }
|
||
+
|
||
+ try {
|
||
+ sc.init(null, trustAllCertChains, new java.security.SecureRandom());
|
||
+ } catch (KeyManagementException e) {
|
||
+ throw new RuntimeException(e);
|
||
+ }
|
||
+
|
||
+ return sc.getSocketFactory();
|
||
+ }
|
||
+}
|
||
--- ./jdk/test/sun/net/www/protocol/jar/jarbug/run.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/net/www/protocol/jar/jarbug/run.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -34,14 +34,17 @@
|
||
SunOS | Linux | Darwin )
|
||
PS=":"
|
||
FS="/"
|
||
+ CHMOD="${FS}bin${FS}chmod"
|
||
;;
|
||
Windows* )
|
||
PS=";"
|
||
FS="\\"
|
||
+ CHMOD="chmod"
|
||
;;
|
||
CYGWIN* )
|
||
PS=";"
|
||
FS="/"
|
||
+ CHMOD="chmod"
|
||
#
|
||
# javac does not like /cygdrive produced by `pwd`.
|
||
#
|
||
@@ -59,6 +62,7 @@
|
||
mkdir -p ${DEST}${FS}jar1
|
||
cd ${TESTSRC}${FS}etc${FS}jar1
|
||
cp -r . ${DEST}${FS}jar1
|
||
+${CHMOD} -R u+w ${DEST}${FS}jar1
|
||
${TESTJAVA}${FS}bin${FS}javac -d ${DEST}${FS}jar1 \
|
||
${TESTSRC}${FS}src${FS}jar1${FS}LoadResourceBundle.java
|
||
${TESTJAVA}${FS}bin${FS}javac -d ${DEST}${FS}jar1 \
|
||
--- ./jdk/test/sun/security/ec/TestEC.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/ec/TestEC.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -30,7 +30,7 @@
|
||
* @library ../pkcs11/sslecc
|
||
* @library ../../../java/security/testlibrary
|
||
* @compile -XDignore.symbol.file TestEC.java
|
||
- * @run main TestEC
|
||
+ * @run main/othervm TestEC
|
||
*/
|
||
|
||
import java.security.Provider;
|
||
@@ -53,6 +53,10 @@
|
||
public class TestEC {
|
||
|
||
public static void main(String[] args) throws Exception {
|
||
+ // reset the security property to make sure that the algorithms
|
||
+ // and keys used in this test are not disabled.
|
||
+ Security.setProperty("jdk.tls.disabledAlgorithms", "");
|
||
+
|
||
ProvidersSnapshot snapshot = ProvidersSnapshot.create();
|
||
try {
|
||
main0(args);
|
||
--- ./jdk/test/sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -28,6 +28,7 @@
|
||
* @author Andreas Sterbenz
|
||
* @library ..
|
||
* @library ../../../../java/security/testlibrary
|
||
+ * @run main/othervm ClientJSSEServerJSSE
|
||
*/
|
||
|
||
import java.security.*;
|
||
@@ -37,6 +38,10 @@
|
||
private static String[] cmdArgs;
|
||
|
||
public static void main(String[] args) throws Exception {
|
||
+ // reset the security property to make sure that the algorithms
|
||
+ // and keys used in this test are not disabled.
|
||
+ Security.setProperty("jdk.tls.disabledAlgorithms", "");
|
||
+
|
||
cmdArgs = args;
|
||
main(new ClientJSSEServerJSSE());
|
||
}
|
||
--- ./jdk/test/sun/security/pkcs12/PKCS12SameKeyId.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/pkcs12/PKCS12SameKeyId.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -59,7 +59,7 @@
|
||
for (int i=0; i<SIZE; i++) {
|
||
System.err.print(".");
|
||
String cmd = "-keystore " + JKSFILE
|
||
- + " -storepass changeit -keypass changeit "
|
||
+ + " -storepass changeit -keypass changeit -keyalg rsa "
|
||
+ "-genkeypair -alias p" + i + " -dname CN=" + i;
|
||
KeyTool.main(cmd.split(" "));
|
||
}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/sun/security/provider/certpath/PKIXCertPathValidator/Validity.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,134 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+
|
||
+/**
|
||
+ * @test
|
||
+ * @bug 8021804
|
||
+ * @summary CertPath should validate even if the validity period of the
|
||
+ * root cert does not include the validity period of a subordinate
|
||
+ * cert.
|
||
+ */
|
||
+
|
||
+import java.io.ByteArrayInputStream;
|
||
+import java.security.cert.*;
|
||
+import java.util.ArrayList;
|
||
+import java.util.Date;
|
||
+import java.util.HashSet;
|
||
+import java.util.Set;
|
||
+
|
||
+public class Validity {
|
||
+
|
||
+ /*
|
||
+ * Subject: OU=TestOrg, CN=TestCA
|
||
+ * Issuer: OU=TestOrg, CN=TestCA
|
||
+ * Validity
|
||
+ * Not Before: Feb 26 21:33:55 2014 GMT
|
||
+ Not After : Feb 26 21:33:55 2024 GMT
|
||
+ * Version 1
|
||
+ */
|
||
+ static String CACertStr =
|
||
+ "-----BEGIN CERTIFICATE-----\n" +
|
||
+ "MIIBvTCCASYCCQCQRiTo4lBCFjANBgkqhkiG9w0BAQUFADAjMRAwDgYDVQQLDAdU\n" +
|
||
+ "ZXN0T3JnMQ8wDQYDVQQDDAZUZXN0Q0EwHhcNMTQwMjI2MjEzMzU1WhcNMjQwMjI2\n" +
|
||
+ "MjEzMzU1WjAjMRAwDgYDVQQLDAdUZXN0T3JnMQ8wDQYDVQQDDAZUZXN0Q0EwgZ8w\n" +
|
||
+ "DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOtKS4ZrsM3ansd61ZxitcrN0w184I+A\n" +
|
||
+ "z0kyrSP1eMtlam+cC2U91NpTz11FYV4XUfBhqqxaXW043AWTUer8pS90Pt4sCrUX\n" +
|
||
+ "COx1+QA1M3ZhbZ4sTM7XQ90JbGaBJ/sEza9mlQP7hQ2yQO/hATKbP6J5qvgG2sT2\n" +
|
||
+ "S2WYjEgwNwmFAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAQ/CXEpnx2WY4LJtv4jwE\n" +
|
||
+ "4jIVirur3pdzV5oBhPyqqHMsyhQBkukCfX7uD7L5wN1+xuM81DfANpIxlnUfybp5\n" +
|
||
+ "CpjcmktLpmyK4kJ6XnSd2blbLOIpsr9x6FqxPxpVDlyw/ySHYrIG/GZdsLHgmzGn\n" +
|
||
+ "B06jeYzH8OLf879VxAxSsPc=\n" +
|
||
+ "-----END CERTIFICATE-----";
|
||
+
|
||
+ /*
|
||
+ * Subject: OU=TestOrg, CN=TestEE0
|
||
+ * Issuer: OU=TestOrg, CN=TestCA
|
||
+ * Validity
|
||
+ * Not Before: Feb 26 22:55:12 2014 GMT
|
||
+ * Not After : Feb 25 22:55:12 2025 GMT
|
||
+ * Version 1
|
||
+ */
|
||
+ static String EECertStr =
|
||
+ "-----BEGIN CERTIFICATE-----\n" +
|
||
+ "MIIBtjCCAR8CAQQwDQYJKoZIhvcNAQEFBQAwIzEQMA4GA1UECwwHVGVzdE9yZzEP\n" +
|
||
+ "MA0GA1UEAwwGVGVzdENBMB4XDTE0MDIyNjIyNTUxMloXDTI1MDIyNTIyNTUxMlow\n" +
|
||
+ "JDEQMA4GA1UECwwHVGVzdE9yZzEQMA4GA1UEAwwHVGVzdEVFMDCBnzANBgkqhkiG\n" +
|
||
+ "9w0BAQEFAAOBjQAwgYkCgYEAt8xz9W3ruCTHjSOtTX6cxsUZ0nRP6EavEfzgcOYh\n" +
|
||
+ "CXGA0gr+viSHq3c2vQBxiRny2hm5rLcqpPo+2OxZtw/ajxfyrV6d/r8YyQLBvyl3\n" +
|
||
+ "xdCZdOkG1DCM1oFAQDaSRt9wN5Zm5kyg7uMig5Y4L45fP9Yee4x6Xyh36qYbsR89\n" +
|
||
+ "rFMCAwEAATANBgkqhkiG9w0BAQUFAAOBgQDZrPqSo08va1m9TOWOztTuWilGdjK/\n" +
|
||
+ "2Ed2WXg8utIpy6uAV+NaOYtHQ7ULQBVRNmwg9nKghbVbh+E/xpoihjl1x7OXass4\n" +
|
||
+ "TbwXA5GKFIFpNtDvATQ/QQZoCuCzw1FW/mH0Q7UEQ/9/iJdDad6ebkapeMwtj/8B\n" +
|
||
+ "s2IZV7s85CEOXw==\n" +
|
||
+ "-----END CERTIFICATE-----";
|
||
+
|
||
+ public static void main(String[] args) throws Exception {
|
||
+
|
||
+ String[] certStrs = {EECertStr};
|
||
+ String[] trustedCertStrs = {CACertStr};
|
||
+ runTest(certStrs, trustedCertStrs);
|
||
+
|
||
+ System.out.println("Test passed.");
|
||
+ }
|
||
+
|
||
+ private static void runTest(String[] certStrs,
|
||
+ String[] trustedCertStrs)
|
||
+ throws Exception {
|
||
+
|
||
+ CertificateFactory cf = CertificateFactory.getInstance("X509");
|
||
+
|
||
+ // Generate the CertPath from the certs named in certStrs
|
||
+ ArrayList<X509Certificate> certs = new ArrayList<>();
|
||
+ for (String certStr : certStrs) {
|
||
+ certs.add(generateCert(certStr, cf));
|
||
+ }
|
||
+ CertPath cp = cf.generateCertPath(certs);
|
||
+
|
||
+ // Generate the set of Trust Anchors from the certs named in
|
||
+ // trustedCertStrs
|
||
+ Set<TrustAnchor> trustAnchors = new HashSet<>();
|
||
+ for (String trustedCertStr : trustedCertStrs) {
|
||
+ TrustAnchor ta = new TrustAnchor(generateCert(trustedCertStr, cf),
|
||
+ null);
|
||
+ trustAnchors.add(ta);
|
||
+ }
|
||
+ PKIXParameters params = new PKIXParameters(trustAnchors);
|
||
+ params.setDate(new Date(114, 3, 1)); // 2014-03-01
|
||
+ params.setRevocationEnabled(false);
|
||
+
|
||
+ // Attempt to validate the CertPath. If no exception thrown, successful.
|
||
+ CertPathValidator cpv = CertPathValidator.getInstance("PKIX");
|
||
+ cpv.validate(cp, params);
|
||
+ System.out.println("CertPath validation successful.");
|
||
+ }
|
||
+
|
||
+ private static X509Certificate generateCert(String certStr,
|
||
+ CertificateFactory cf)
|
||
+ throws Exception {
|
||
+ ByteArrayInputStream stream
|
||
+ = new ByteArrayInputStream(certStr.getBytes());
|
||
+ return (X509Certificate) cf.generateCertificate(stream);
|
||
+
|
||
+ }
|
||
+}
|
||
--- ./jdk/test/sun/security/smartcardio/TestAll.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/smartcardio/TestAll.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -40,6 +40,7 @@
|
||
TestMultiplePresent.class,
|
||
TestPresent.class,
|
||
TestTransmit.class,
|
||
+ TestDirect.class,
|
||
};
|
||
|
||
public static void main(String[] args) throws Exception {
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/sun/security/smartcardio/TestDirect.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,48 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/**
|
||
+ * @test
|
||
+ * @bug 8046343
|
||
+ * @summary Make sure that direct protocol is available
|
||
+ * @run main/manual TestDirect
|
||
+ */
|
||
+
|
||
+// This test requires special hardware.
|
||
+
|
||
+import javax.smartcardio.Card;
|
||
+import javax.smartcardio.CardTerminal;
|
||
+import javax.smartcardio.CardTerminals;
|
||
+import javax.smartcardio.TerminalFactory;
|
||
+
|
||
+public class TestDirect {
|
||
+ public static void main(String[] args) throws Exception {
|
||
+ TerminalFactory terminalFactory = TerminalFactory.getDefault();
|
||
+ CardTerminals cardTerminals = terminalFactory.terminals();
|
||
+ CardTerminal cardTerminal = cardTerminals.list().get(0);
|
||
+ Card card = cardTerminal.connect("DIRECT");
|
||
+ card.disconnect(true);
|
||
+
|
||
+ System.out.println("OK.");
|
||
+ }
|
||
+}
|
||
--- ./jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ProtocolVersion/HttpsProtocols.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ProtocolVersion/HttpsProtocols.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -32,6 +32,7 @@
|
||
import java.io.*;
|
||
import java.net.*;
|
||
import javax.net.ssl.*;
|
||
+import java.security.Security;
|
||
|
||
public class HttpsProtocols implements HostnameVerifier {
|
||
|
||
@@ -177,6 +178,10 @@
|
||
volatile Exception clientException = null;
|
||
|
||
public static void main(String[] args) throws Exception {
|
||
+ // reset the security property to make sure that the algorithms
|
||
+ // and keys used in this test are not disabled.
|
||
+ Security.setProperty("jdk.tls.disabledAlgorithms", "");
|
||
+
|
||
String keyFilename =
|
||
System.getProperty("test.src", "./") + "/" + pathToStores +
|
||
"/" + keyStoreFile;
|
||
--- ./jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/DelegatedTaskWrongException.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/DelegatedTaskWrongException.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -25,7 +25,7 @@
|
||
* @test
|
||
* @bug 4969459
|
||
* @summary Delegated tasks are not reflecting the subclasses of SSLException
|
||
- *
|
||
+ * @run main/othervm DelegatedTaskWrongException
|
||
*/
|
||
|
||
import javax.net.ssl.*;
|
||
@@ -110,6 +110,9 @@
|
||
}
|
||
|
||
public static void main(String args[]) throws Exception {
|
||
+ // reset the security property to make sure that the algorithms
|
||
+ // and keys used in this test are not disabled.
|
||
+ Security.setProperty("jdk.tls.disabledAlgorithms", "");
|
||
|
||
DelegatedTaskWrongException test;
|
||
|
||
--- ./jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/testEnabledProtocols.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/testEnabledProtocols.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -122,6 +122,10 @@
|
||
volatile Exception clientException = null;
|
||
|
||
public static void main(String[] args) throws Exception {
|
||
+ // reset the security property to make sure that the algorithms
|
||
+ // and keys used in this test are not disabled.
|
||
+ Security.setProperty("jdk.tls.disabledAlgorithms", "");
|
||
+
|
||
String keyFilename =
|
||
System.getProperty("test.src", "./") + "/" + pathToStores +
|
||
"/" + keyStoreFile;
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/sun/security/ssl/sanity/ciphersuites/CipherSuitesInOldOrder.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,236 @@
|
||
+/*
|
||
+ * Copyright (c) 2012, 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 7174244 8043200 8050158
|
||
+ * @summary NPE in Krb5ProxyImpl.getServerKeys()
|
||
+ *
|
||
+ * SunJSSE does not support dynamic system properties, no way to re-use
|
||
+ * system properties in samevm/agentvm mode.
|
||
+ * @run main/othervm -Djdk.tls.preserveRC4CipherSuites=true CipherSuitesInOldOrder
|
||
+ */
|
||
+
|
||
+import java.util.*;
|
||
+import javax.net.ssl.*;
|
||
+
|
||
+public class CipherSuitesInOldOrder {
|
||
+
|
||
+ // supported ciphersuites
|
||
+ private final static List<String> supportedCipherSuites =
|
||
+ Arrays.<String>asList(
|
||
+ "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384",
|
||
+ "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384",
|
||
+ "TLS_RSA_WITH_AES_256_CBC_SHA256",
|
||
+ "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384",
|
||
+ "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384",
|
||
+ "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256",
|
||
+ "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256",
|
||
+ "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
|
||
+ "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
|
||
+ "TLS_RSA_WITH_AES_256_CBC_SHA",
|
||
+ "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA",
|
||
+ "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA",
|
||
+ "TLS_DHE_RSA_WITH_AES_256_CBC_SHA",
|
||
+ "TLS_DHE_DSS_WITH_AES_256_CBC_SHA",
|
||
+ "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
|
||
+ "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
|
||
+ "TLS_RSA_WITH_AES_128_CBC_SHA256",
|
||
+ "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256",
|
||
+ "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256",
|
||
+ "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256",
|
||
+ "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256",
|
||
+ "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
|
||
+ "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
|
||
+ "TLS_RSA_WITH_AES_128_CBC_SHA",
|
||
+ "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA",
|
||
+ "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA",
|
||
+ "TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
|
||
+ "TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
|
||
+ "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
|
||
+ "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
|
||
+ "SSL_RSA_WITH_RC4_128_SHA",
|
||
+ "TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
|
||
+ "TLS_ECDH_RSA_WITH_RC4_128_SHA",
|
||
+ "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA",
|
||
+ "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA",
|
||
+ "SSL_RSA_WITH_3DES_EDE_CBC_SHA",
|
||
+ "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA",
|
||
+ "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA",
|
||
+ "SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA",
|
||
+ "SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA",
|
||
+ "SSL_RSA_WITH_RC4_128_MD5",
|
||
+
|
||
+ "TLS_EMPTY_RENEGOTIATION_INFO_SCSV",
|
||
+
|
||
+ "TLS_DH_anon_WITH_AES_256_CBC_SHA256",
|
||
+ "TLS_ECDH_anon_WITH_AES_256_CBC_SHA",
|
||
+ "TLS_DH_anon_WITH_AES_256_CBC_SHA",
|
||
+ "TLS_DH_anon_WITH_AES_128_CBC_SHA256",
|
||
+ "TLS_ECDH_anon_WITH_AES_128_CBC_SHA",
|
||
+ "TLS_DH_anon_WITH_AES_128_CBC_SHA",
|
||
+ "TLS_ECDH_anon_WITH_RC4_128_SHA",
|
||
+ "SSL_DH_anon_WITH_RC4_128_MD5",
|
||
+ "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA",
|
||
+ "SSL_DH_anon_WITH_3DES_EDE_CBC_SHA",
|
||
+ "TLS_RSA_WITH_NULL_SHA256",
|
||
+ "TLS_ECDHE_ECDSA_WITH_NULL_SHA",
|
||
+ "TLS_ECDHE_RSA_WITH_NULL_SHA",
|
||
+ "SSL_RSA_WITH_NULL_SHA",
|
||
+ "TLS_ECDH_ECDSA_WITH_NULL_SHA",
|
||
+ "TLS_ECDH_RSA_WITH_NULL_SHA",
|
||
+ "TLS_ECDH_anon_WITH_NULL_SHA",
|
||
+ "SSL_RSA_WITH_NULL_MD5",
|
||
+ "SSL_RSA_WITH_DES_CBC_SHA",
|
||
+ "SSL_DHE_RSA_WITH_DES_CBC_SHA",
|
||
+ "SSL_DHE_DSS_WITH_DES_CBC_SHA",
|
||
+ "SSL_DH_anon_WITH_DES_CBC_SHA",
|
||
+ "SSL_RSA_EXPORT_WITH_RC4_40_MD5",
|
||
+ "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5",
|
||
+ "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
|
||
+ "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
|
||
+ "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA",
|
||
+ "SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
|
||
+ "TLS_KRB5_WITH_RC4_128_SHA",
|
||
+ "TLS_KRB5_WITH_RC4_128_MD5",
|
||
+ "TLS_KRB5_WITH_3DES_EDE_CBC_SHA",
|
||
+ "TLS_KRB5_WITH_3DES_EDE_CBC_MD5",
|
||
+ "TLS_KRB5_WITH_DES_CBC_SHA",
|
||
+ "TLS_KRB5_WITH_DES_CBC_MD5",
|
||
+ "TLS_KRB5_EXPORT_WITH_RC4_40_SHA",
|
||
+ "TLS_KRB5_EXPORT_WITH_RC4_40_MD5",
|
||
+ "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA",
|
||
+ "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5"
|
||
+ );
|
||
+
|
||
+ private final static String[] protocols = {
|
||
+ "", "SSL", "TLS", "SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2"
|
||
+ };
|
||
+
|
||
+
|
||
+ public static void main(String[] args) throws Exception {
|
||
+ // show all of the supported cipher suites
|
||
+ showSuites(supportedCipherSuites.toArray(new String[0]),
|
||
+ "All supported cipher suites");
|
||
+
|
||
+ for (String protocol : protocols) {
|
||
+ System.out.println("//");
|
||
+ System.out.println("// " +
|
||
+ "Testing for SSLContext of " + protocol);
|
||
+ System.out.println("//");
|
||
+ checkForProtocols(protocol);
|
||
+ }
|
||
+ }
|
||
+
|
||
+ public static void checkForProtocols(String protocol) throws Exception {
|
||
+ SSLContext context;
|
||
+ if (protocol.isEmpty()) {
|
||
+ context = SSLContext.getDefault();
|
||
+ } else {
|
||
+ context = SSLContext.getInstance(protocol);
|
||
+ context.init(null, null, null);
|
||
+ }
|
||
+
|
||
+ // check the order of default cipher suites of SSLContext
|
||
+ SSLParameters parameters = context.getDefaultSSLParameters();
|
||
+ checkSuites(parameters.getCipherSuites(),
|
||
+ "Default cipher suites in SSLContext");
|
||
+
|
||
+ // check the order of supported cipher suites of SSLContext
|
||
+ parameters = context.getSupportedSSLParameters();
|
||
+ checkSuites(parameters.getCipherSuites(),
|
||
+ "Supported cipher suites in SSLContext");
|
||
+
|
||
+
|
||
+ //
|
||
+ // Check the cipher suites order of SSLEngine
|
||
+ //
|
||
+ SSLEngine engine = context.createSSLEngine();
|
||
+
|
||
+ // check the order of endabled cipher suites
|
||
+ String[] ciphers = engine.getEnabledCipherSuites();
|
||
+ checkSuites(ciphers,
|
||
+ "Enabled cipher suites in SSLEngine");
|
||
+
|
||
+ // check the order of supported cipher suites
|
||
+ ciphers = engine.getSupportedCipherSuites();
|
||
+ checkSuites(ciphers,
|
||
+ "Supported cipher suites in SSLEngine");
|
||
+
|
||
+ //
|
||
+ // Check the cipher suites order of SSLSocket
|
||
+ //
|
||
+ SSLSocketFactory factory = context.getSocketFactory();
|
||
+ try (SSLSocket socket = (SSLSocket)factory.createSocket()) {
|
||
+
|
||
+ // check the order of endabled cipher suites
|
||
+ ciphers = socket.getEnabledCipherSuites();
|
||
+ checkSuites(ciphers,
|
||
+ "Enabled cipher suites in SSLSocket");
|
||
+
|
||
+ // check the order of supported cipher suites
|
||
+ ciphers = socket.getSupportedCipherSuites();
|
||
+ checkSuites(ciphers,
|
||
+ "Supported cipher suites in SSLSocket");
|
||
+ }
|
||
+
|
||
+ //
|
||
+ // Check the cipher suites order of SSLServerSocket
|
||
+ //
|
||
+ SSLServerSocketFactory serverFactory = context.getServerSocketFactory();
|
||
+ try (SSLServerSocket serverSocket =
|
||
+ (SSLServerSocket)serverFactory.createServerSocket()) {
|
||
+ // check the order of endabled cipher suites
|
||
+ ciphers = serverSocket.getEnabledCipherSuites();
|
||
+ checkSuites(ciphers,
|
||
+ "Enabled cipher suites in SSLServerSocket");
|
||
+
|
||
+ // check the order of supported cipher suites
|
||
+ ciphers = serverSocket.getSupportedCipherSuites();
|
||
+ checkSuites(ciphers,
|
||
+ "Supported cipher suites in SSLServerSocket");
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private static void checkSuites(String[] suites, String title) {
|
||
+ showSuites(suites, title);
|
||
+
|
||
+ int loc = -1;
|
||
+ int index = 0;
|
||
+ for (String suite : suites) {
|
||
+ index = supportedCipherSuites.indexOf(suite);
|
||
+ if (index <= loc) {
|
||
+ throw new RuntimeException(suite + " is not in order");
|
||
+ }
|
||
+
|
||
+ loc = index;
|
||
+ }
|
||
+ }
|
||
+
|
||
+ private static void showSuites(String[] suites, String title) {
|
||
+ System.out.println(title + "[" + suites.length + "]:");
|
||
+ for (String suite : suites) {
|
||
+ System.out.println(" " + suite);
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- ./jdk/test/sun/security/ssl/sanity/ciphersuites/CipherSuitesInOrder.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/ssl/sanity/ciphersuites/CipherSuitesInOrder.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,5 +1,5 @@
|
||
/*
|
||
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||
+ * Copyright (c) 2012, 2014, 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
|
||
@@ -23,7 +23,7 @@
|
||
|
||
/*
|
||
* @test
|
||
- * @bug 7174244
|
||
+ * @bug 7174244 8043200
|
||
* @summary NPE in Krb5ProxyImpl.getServerKeys()
|
||
*
|
||
* SunJSSE does not support dynamic system properties, no way to re-use
|
||
@@ -67,11 +67,6 @@
|
||
"TLS_ECDH_RSA_WITH_AES_128_CBC_SHA",
|
||
"TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
|
||
"TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
|
||
- "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
|
||
- "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
|
||
- "SSL_RSA_WITH_RC4_128_SHA",
|
||
- "TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
|
||
- "TLS_ECDH_RSA_WITH_RC4_128_SHA",
|
||
"TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA",
|
||
"TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA",
|
||
"SSL_RSA_WITH_3DES_EDE_CBC_SHA",
|
||
@@ -79,6 +74,11 @@
|
||
"TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA",
|
||
"SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA",
|
||
"SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA",
|
||
+ "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
|
||
+ "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
|
||
+ "SSL_RSA_WITH_RC4_128_SHA",
|
||
+ "TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
|
||
+ "TLS_ECDH_RSA_WITH_RC4_128_SHA",
|
||
"SSL_RSA_WITH_RC4_128_MD5",
|
||
|
||
"TLS_EMPTY_RENEGOTIATION_INFO_SCSV",
|
||
@@ -89,18 +89,10 @@
|
||
"TLS_DH_anon_WITH_AES_128_CBC_SHA256",
|
||
"TLS_ECDH_anon_WITH_AES_128_CBC_SHA",
|
||
"TLS_DH_anon_WITH_AES_128_CBC_SHA",
|
||
+ "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA",
|
||
+ "SSL_DH_anon_WITH_3DES_EDE_CBC_SHA",
|
||
"TLS_ECDH_anon_WITH_RC4_128_SHA",
|
||
"SSL_DH_anon_WITH_RC4_128_MD5",
|
||
- "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA",
|
||
- "SSL_DH_anon_WITH_3DES_EDE_CBC_SHA",
|
||
- "TLS_RSA_WITH_NULL_SHA256",
|
||
- "TLS_ECDHE_ECDSA_WITH_NULL_SHA",
|
||
- "TLS_ECDHE_RSA_WITH_NULL_SHA",
|
||
- "SSL_RSA_WITH_NULL_SHA",
|
||
- "TLS_ECDH_ECDSA_WITH_NULL_SHA",
|
||
- "TLS_ECDH_RSA_WITH_NULL_SHA",
|
||
- "TLS_ECDH_anon_WITH_NULL_SHA",
|
||
- "SSL_RSA_WITH_NULL_MD5",
|
||
"SSL_RSA_WITH_DES_CBC_SHA",
|
||
"SSL_DHE_RSA_WITH_DES_CBC_SHA",
|
||
"SSL_DHE_DSS_WITH_DES_CBC_SHA",
|
||
@@ -111,16 +103,24 @@
|
||
"SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
|
||
"SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA",
|
||
"SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
|
||
+ "TLS_RSA_WITH_NULL_SHA256",
|
||
+ "TLS_ECDHE_ECDSA_WITH_NULL_SHA",
|
||
+ "TLS_ECDHE_RSA_WITH_NULL_SHA",
|
||
+ "SSL_RSA_WITH_NULL_SHA",
|
||
+ "TLS_ECDH_ECDSA_WITH_NULL_SHA",
|
||
+ "TLS_ECDH_RSA_WITH_NULL_SHA",
|
||
+ "TLS_ECDH_anon_WITH_NULL_SHA",
|
||
+ "SSL_RSA_WITH_NULL_MD5",
|
||
+ "TLS_KRB5_WITH_3DES_EDE_CBC_SHA",
|
||
+ "TLS_KRB5_WITH_3DES_EDE_CBC_MD5",
|
||
"TLS_KRB5_WITH_RC4_128_SHA",
|
||
"TLS_KRB5_WITH_RC4_128_MD5",
|
||
- "TLS_KRB5_WITH_3DES_EDE_CBC_SHA",
|
||
- "TLS_KRB5_WITH_3DES_EDE_CBC_MD5",
|
||
"TLS_KRB5_WITH_DES_CBC_SHA",
|
||
"TLS_KRB5_WITH_DES_CBC_MD5",
|
||
+ "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA",
|
||
+ "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5",
|
||
"TLS_KRB5_EXPORT_WITH_RC4_40_SHA",
|
||
- "TLS_KRB5_EXPORT_WITH_RC4_40_MD5",
|
||
- "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA",
|
||
- "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5"
|
||
+ "TLS_KRB5_EXPORT_WITH_RC4_40_MD5"
|
||
);
|
||
|
||
private final static String[] protocols = {
|
||
--- ./jdk/test/sun/security/ssl/sanity/interop/CipherTest.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/ssl/sanity/interop/CipherTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -394,6 +394,10 @@
|
||
|
||
public static void main(PeerFactory peerFactory, String[] args)
|
||
throws Exception {
|
||
+ // reset the security property to make sure that the algorithms
|
||
+ // and keys used in this test are not disabled.
|
||
+ Security.setProperty("jdk.tls.disabledAlgorithms", "");
|
||
+
|
||
long time = System.currentTimeMillis();
|
||
String relPath;
|
||
if ((args != null) && (args.length > 0) && args[0].equals("sh")) {
|
||
--- ./jdk/test/sun/security/ssl/sanity/interop/ClientJSSEServerJSSE.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/ssl/sanity/interop/ClientJSSEServerJSSE.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -29,9 +29,15 @@
|
||
* @run main/othervm/timeout=300 ClientJSSEServerJSSE
|
||
*/
|
||
|
||
+import java.security.Security;
|
||
+
|
||
public class ClientJSSEServerJSSE {
|
||
|
||
public static void main(String[] args) throws Exception {
|
||
+ // reset the security property to make sure that the algorithms
|
||
+ // and keys used in this test are not disabled.
|
||
+ Security.setProperty("jdk.tls.disabledAlgorithms", "");
|
||
+
|
||
CipherTest.main(new JSSEFactory(), args);
|
||
}
|
||
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/sun/security/tools/jarsigner/TimestampAlg.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,156 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/**
|
||
+ * @test
|
||
+ * @bug 8049480
|
||
+ * @summary Current versions of Java can't verify jars signed and timestamped with Java 9
|
||
+ */
|
||
+
|
||
+import java.io.InputStream;
|
||
+import java.nio.file.Files;
|
||
+import java.nio.file.Paths;
|
||
+import java.util.jar.JarEntry;
|
||
+import java.util.jar.JarFile;
|
||
+
|
||
+public class TimestampAlg {
|
||
+
|
||
+ public static void main(String[] args) throws Exception {
|
||
+ // This is a very simple jar file signed by JDK 9 with a timestamp
|
||
+ // using the SHA-256 message digest algorithm.
|
||
+ String var =
|
||
+ "504b0304140008080800c28ee844000000000000000000000000140000004d45" +
|
||
+ "54412d494e462f4d414e49464553542e4d4615cd4d0b82301c80f1fb60df61c7" +
|
||
+ "42666a9928749846f4aa8924745cf9d716b6c59c48df3ebd3e87df73e152d4d0" +
|
||
+ "195a82ee849211716d07a344033750d1f83785d076e830b8be1fb80e15d28096" +
|
||
+ "bca535ef4c058fbe21b34cf3670b2451faab3437a333c708a3947f20220ca362" +
|
||
+ "cfa8e7afe95634e32b22af821df2d6786d5ff637cf3abfe3f05e4190a42779b5" +
|
||
+ "76470532cbd56a798105db4cd01f504b07082c3740c69c000000a6000000504b" +
|
||
+ "0304140008080800c28ee8440000000000000000000000000f0000004d455441" +
|
||
+ "2d494e462f4f4c442e534675cf416f823018c6f13b09dfa1c7ed50575014493c" +
|
||
+ "80bae8a6a091383db6f082955a595b86ecd34fb3db92dd9ed32fff67c74b494d" +
|
||
+ "a300ef41697e9501727ac4b6768b10bbde10cf7809dae03595bcf81d5ce2d018" +
|
||
+ "c5596340072872bdecd02554f17c70f16fc730cfb4a8c6b0ad934fdfb6d0e854" +
|
||
+ "fbb794ecd52eeecbe5e45f394071bd9ef30c34131f87a3e956c561efb0938e56" +
|
||
+ "b7573d5c6cd3599bbe2ddd28acfafe9d992aa006721c758fe2718fe0b6753c6f" +
|
||
+ "e410cca50125a9c005d52607d694e82951341380a657555f1535f7a3cfb6655b" +
|
||
+ "31bd4080c2bf55016a98a8f2512948f7e5968dfbbe495fcca6383bdfe753a467" +
|
||
+ "90ca41a297861544cd270fe807504b0708521a35550201000048010000504b03" +
|
||
+ "04140008080800c28ee844000000000000000000000000100000004d4554412d" +
|
||
+ "494e462f4f4c442e52534185947b38d37d1fc7fdb61923530eb39e688622a77e" +
|
||
+ "5b666ab9939c9544c831ee39d42c9511e576d8c8b9876745b5743b5414268718" +
|
||
+ "b969548e95d61c2224b47423a648393d73dd5d4fe5b9afe7f9f3f3b9deefeff5" +
|
||
+ "bd3e9ff7e7053210ba708476bc55fc6719400292c340a8800cc4460800e06441" +
|
||
+ "1938c23bde0af083c22080b81828fd5d08e430200f4006a41664003772a01000" +
|
||
+ "028145a66e3cba6af9a601a44516246e1d2805873ac1a0f2d093545f70b3920c" +
|
||
+ "ce00248246e04ec20e02e8262a09200e6ff0adfc2f3d0350fbf149d12fa00c40" +
|
||
+ "564cd497823000406cb4ef6571fdec06c95a370fde860e89425861e16e0b19a1" +
|
||
+ "4c6c4f52d6102dd3a6bf45e740d9a0bed342ee5e832885fa1a979dc7e6161253" +
|
||
+ "4c2cda0362e5ec02ae440e44e80c56bffc4ab4f349f3b1f6bddae8c2979fca4b" +
|
||
+ "5e7e46ac2fa529481dd8d750a26dcd7d74deb8dde7fc70c072465af0a1e359af" +
|
||
+ "4cf4b1aaa14fc4238cee096ca3133575d52179a7e7da8990f6ed5da71ca84c37" +
|
||
+ "2d3117c356b1ac2cdde3c8600ead44f8878b2f8f10831f4d5d590a28d95b316c" +
|
||
+ "cf456277a83533e12ea42a14c8fc05da6b2483b74ab7c4e70a2dd60f417d2f97" +
|
||
+ "3359bb233e3d6b5ab60202e7bd7b4fd7f228febd1f0403b0c62f4190b69264bf" +
|
||
+ "72426589ab516d00040a880137b0200654114d4d050943c11490e82d88b38ecd" +
|
||
+ "26a42c027cd749ffe67955e7d9357b81aece4e877d49ee62b8afeed7a755fa9e" +
|
||
+ "786d6edc5d7e5ae3603e5d6e39d0cbc74300c35eb354282842a183159763c67a" +
|
||
+ "35b0b1ac1929e7b8ad510da5aa454d5eb3034cf11d27f594326384873f7c8949" +
|
||
+ "1a7f4a3cfccb892faf873c621292bd597072cdcd732d1ee7490e611ec28c90f9" +
|
||
+ "81bbd71ef0e4b50c4e93869c9af8c9d3d154169bbf8dff7aa706ebac1f6d2589" +
|
||
+ "8078532a9867e31d7f576365bc0c6c132fb7719b58d88ebcf438715768aea361" +
|
||
+ "f7017f614acfaf465e6d794b84e317b2937d66a8f5cea13666d541cce02705a8" +
|
||
+ "cef2d6d2f69b96ac88fec9998228a7c1d96d09c315b29797ecda02250dc7383a" +
|
||
+ "6f2bf75b0f17d48c07afa48c640d3478dd3ad18963c0712003ae27ca3a885a9b" +
|
||
+ "bcef71fef1027e8e228c01885dede0446717674996f8f413f59a5c3f91a001c0" +
|
||
+ "b632f78891424ce58a58df39727a6cc492ea4c94d5f23f6ad1276561d6eb057f" +
|
||
+ "befab3e5baff5dec50224a891fb49c29ab6cd6cab3f7731d097fc3d65e949b33" +
|
||
+ "b7a578f0b379e47a98c0a91b5fb0ce685952a78afc5cfa0e373df4a035c15132" +
|
||
+ "bb62a6387ad8caaadab680b8a169805e49b69e5ad8409de9b7079b6def2af45a" +
|
||
+ "dada5e7cdee4b5359892d1803dfc765dd18849fd0bf44b64866ed654fc117ea6" +
|
||
+ "5e6b1922eff99b73f0c77257e994d307defc9a29cedd1ac7be68a626d6edf96e" +
|
||
+ "c692bdf22ee792369dd535a0dfa7d711396996f692895df223eaaa5f47414f45" +
|
||
+ "b2c3b39d65772575c5cf4a437319b00990011b834b7f1b0c623d048963c07a44" +
|
||
+ "4dfe4f60813d12b5b87f0b16ea0f6e0096e30973075d454238d411260ee2d6a8" +
|
||
+ "61aa68a6bb3119ab837aaa39abd612eab39f9da4665c977e0cff019201a19384" +
|
||
+ "d3222b5a160ffe07340620c10d220998e65d3431411e13916b4e44ae191143fa" +
|
||
+ "be91cb1605ff6d2db96470d220e2af3c40f6ed5d032ee2cfe022bafd240fa1fd" +
|
||
+ "5f6e3567dd9071543e381b57bdd80cb1575a376abcc947495167e61e6e32a1ae" +
|
||
+ "93d416c8bc197b6bda347e6bcc6553839ed0a78d7ac28d57f2f7f8cd857d14e4" +
|
||
+ "497caa1cd34e1829aa7574aa3984ad39934e765598bdf0356c31a8f5c4a316d6" +
|
||
+ "c6beedf3add584c5769a6901a7836d3b32e3a03c58c739a6969e0260a002f463" +
|
||
+ "2773e84174c7faa41086e0d5d0ceaefc4df5a443d4e8af8a462dd67181ce11be" +
|
||
+ "a6ef64ce907252a0d0e6f03ef467e6763c244c48574856017d294607d3f87d5b" +
|
||
+ "0eb9eba2c60dc6c70dddfb837914babf172574ef99a4bb1e361353de4d95c576" +
|
||
+ "c494e1e9bce62d4fd08ad5e731691d1895636525bb79d76b2f1ce07d1604aa95" +
|
||
+ "8d9dfc8b5b6ee01110b3ca2d75181a44c528300ede3c612715c04d7baf786a18" +
|
||
+ "87b5f95861180fa256055b006005b67aa0923a70405c5c022af903f0187b3458" +
|
||
+ "748cc0bdfeac15adcb7029a17883d0f5ef80573caa61574bb66747bc61aae3ca" +
|
||
+ "0c3fe8bcd223d54fd7f5a2270843f9559a99f76aff45d965ba91374fa05a706f" +
|
||
+ "479416999389d4e29eb74a1984a30face935fd2118a580a3cd5a6567c2e21e92" +
|
||
+ "bb358c54822aaa049a8f47712889ee4507ae4ffd150ba50f444f99701c49fa97" +
|
||
+ "72edc44e69cfcda9cffc9f75c49fdb6b28b9699a2567289979dfd42664626232" +
|
||
+ "75b682be2baf3856623e37bb47c15e3e8e084771e4f3e7b53265efbc48e616cd" +
|
||
+ "ed18c4a546de3f5bd793857c9c7a99615161b7cdcca53fa1d4c119a33bb150a4" +
|
||
+ "6e4996450724eed76ae3d2dbc02f147228353241beba27e585a3dd556b8e5c2e" +
|
||
+ "5f4a3328fd214663223ec27d4fb134873a85630026a204ee5e059ee29a807f3f" +
|
||
+ "82ffcd3b2437cc1bf95a6813dec5195b38cd227002c6f5f53dcd1212f7182038" +
|
||
+ "9877b7ddf1ff2c0c65993b9524d3b41eca82ded2b951471c871b741fddd9fdc7" +
|
||
+ "70a79bb91c3d91f3a9aa8f880ec22099418c65654a7e3a25c4d8925e98e1e390" +
|
||
+ "1437e8767c9debf521e5c93ad5026ab8e5ef9696983ba6d0335e17de6ba65747" +
|
||
+ "91a0fb6ecdf20bde55874082a7f19b4332ddbba24d4eb98a9b0e55e4294f37be" +
|
||
+ "edd62a3e3ebccf8ded49f3a029fa76becf3389a386d2d62faca4f85cbb643489" +
|
||
+ "2e2abfd66dbe727f4fe28d8f8d551e0f8f4c8eda346c66d1bc6fa7a68eabdfb7" +
|
||
+ "0d0a34e65910bba73413ad8680dfaa473753ae9e2fd032d8f6cc66d19c57e679" +
|
||
+ "7fcc33cce8df504b0708267c480f1b08000030090000504b0304140008080800" +
|
||
+ "b78ee844000000000000000000000000090004004d4554412d494e462ffeca00" +
|
||
+ "000300504b0708000000000200000000000000504b0304140008080800b78ee8" +
|
||
+ "440000000000000000000000000100000041f3cb2fc9c8cc4be70200504b0708" +
|
||
+ "3c0a34d30a00000008000000504b01021400140008080800c28ee8442c3740c6" +
|
||
+ "9c000000a60000001400000000000000000000000000000000004d4554412d49" +
|
||
+ "4e462f4d414e49464553542e4d46504b01021400140008080800c28ee844521a" +
|
||
+ "355502010000480100000f00000000000000000000000000de0000004d455441" +
|
||
+ "2d494e462f4f4c442e5346504b01021400140008080800c28ee844267c480f1b" +
|
||
+ "0800003009000010000000000000000000000000001d0200004d4554412d494e" +
|
||
+ "462f4f4c442e525341504b01021400140008080800b78ee84400000000020000" +
|
||
+ "00000000000900040000000000000000000000760a00004d4554412d494e462f" +
|
||
+ "feca0000504b01021400140008080800b78ee8443c0a34d30a00000008000000" +
|
||
+ "0100000000000000000000000000b30a000041504b0506000000000500050027" +
|
||
+ "010000ec0a00000000";
|
||
+ byte[] data = new byte[var.length()/2];
|
||
+ for (int i=0; i<data.length; i++) {
|
||
+ data[i] = Integer.valueOf(var.substring(2*i,2*i+2), 16).byteValue();
|
||
+ }
|
||
+ Files.write(Paths.get("x.jar"), data);
|
||
+
|
||
+ try (JarFile jf = new JarFile("x.jar")) {
|
||
+ JarEntry je = jf.getJarEntry("A");
|
||
+ try (InputStream is = jf.getInputStream(je)) {
|
||
+ is.read(new byte[10]);
|
||
+ }
|
||
+ if (je.getCertificates().length != 1) {
|
||
+ throw new Exception();
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- ./jdk/test/sun/security/tools/jarsigner/TimestampCheck.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/tools/jarsigner/TimestampCheck.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -188,7 +188,7 @@
|
||
DerOutputStream tstInfo2 = new DerOutputStream();
|
||
tstInfo2.putOctetString(tstInfo.toByteArray());
|
||
|
||
- Signature sig = Signature.getInstance("SHA1withDSA");
|
||
+ Signature sig = Signature.getInstance("SHA1withRSA");
|
||
sig.initSign((PrivateKey)(ks.getKey(
|
||
alias, "changeit".toCharArray())));
|
||
sig.update(tstInfo.toByteArray());
|
||
@@ -205,7 +205,7 @@
|
||
SignerInfo signerInfo = new SignerInfo(
|
||
new X500Name(signer.getIssuerX500Principal().getName()),
|
||
signer.getSerialNumber(),
|
||
- aid, AlgorithmId.get("DSA"), sig.sign());
|
||
+ aid, AlgorithmId.get("RSA"), sig.sign());
|
||
|
||
SignerInfo[] signerInfos = {signerInfo};
|
||
PKCS7 p7 =
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./jdk/test/sun/security/tools/jarsigner/certpolicy.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -0,0 +1,79 @@
|
||
+#
|
||
+# Copyright (c) 2014, 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.
|
||
+#
|
||
+# 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.
|
||
+#
|
||
+
|
||
+# @test
|
||
+# @bug 8036709
|
||
+# @summary Java 7 jarsigner displays warning about cert policy tree
|
||
+#
|
||
+# @run shell certpolicy.sh
|
||
+#
|
||
+
|
||
+if [ "${TESTJAVA}" = "" ] ; then
|
||
+ JAVAC_CMD=`which javac`
|
||
+ TESTJAVA=`dirname $JAVAC_CMD`/..
|
||
+fi
|
||
+
|
||
+KT="$TESTJAVA/bin/keytool $TESTTOOLVMOPTS \
|
||
+ -keypass changeit -storepass changeit -keystore ks -keyalg rsa"
|
||
+JS="$TESTJAVA/bin/jarsigner $TESTTOOLVMOPTS -storepass changeit -keystore ks"
|
||
+JAR="$TESTJAVA/bin/jar $TESTTOOLVMOPTS"
|
||
+
|
||
+rm ks 2> /dev/null
|
||
+$KT -genkeypair -alias ca -dname CN=CA -ext bc
|
||
+$KT -genkeypair -alias int -dname CN=Int
|
||
+$KT -genkeypair -alias ee -dname CN=EE
|
||
+
|
||
+# CertificatePolicies [[PolicyId: [1.2.3]], [PolicyId: [1.2.4]]]
|
||
+# PolicyConstraints: [Require: 0; Inhibit: unspecified]
|
||
+$KT -certreq -alias int | \
|
||
+ $KT -gencert -rfc -alias ca \
|
||
+ -ext 2.5.29.32="30 0C 30 04 06 02 2A 03 30 04 06 02 2A 04" \
|
||
+ -ext "2.5.29.36=30 03 80 01 00" -ext bc | \
|
||
+ $KT -import -alias int
|
||
+
|
||
+# CertificatePolicies [[PolicyId: [1.2.3]]]
|
||
+$KT -certreq -alias ee | \
|
||
+ $KT -gencert -rfc -alias int \
|
||
+ -ext 2.5.29.32="30 06 30 04 06 02 2A 03" | \
|
||
+ $KT -import -alias ee
|
||
+
|
||
+$KT -export -alias ee -rfc > cc
|
||
+$KT -export -alias int -rfc >> cc
|
||
+$KT -export -alias ca -rfc >> cc
|
||
+
|
||
+$KT -delete -alias int
|
||
+
|
||
+ERR=''
|
||
+$JAR cvf a.jar cc
|
||
+
|
||
+# Make sure the certchain in the signed jar contains all 3 certs
|
||
+$JS -strict -certchain cc a.jar ee -debug || ERR="sign"
|
||
+$JS -strict -verify a.jar -debug || ERR="$ERR verify"
|
||
+
|
||
+if [ "$ERR" = "" ]; then
|
||
+ echo "Success"
|
||
+ exit 0
|
||
+else
|
||
+ echo "Failed: $ERR"
|
||
+ exit 1
|
||
+fi
|
||
--- ./jdk/test/sun/security/tools/jarsigner/checkusage.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/tools/jarsigner/checkusage.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -45,7 +45,7 @@
|
||
;;
|
||
esac
|
||
|
||
-KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit"
|
||
+KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keyalg rsa"
|
||
JAR=$TESTJAVA${FS}bin${FS}jar
|
||
JARSIGNER="$TESTJAVA${FS}bin${FS}jarsigner"
|
||
|
||
--- ./jdk/test/sun/security/tools/jarsigner/crl.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/tools/jarsigner/crl.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -45,7 +45,7 @@
|
||
|
||
KS=crl.jks
|
||
|
||
-KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS"
|
||
+KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS -keyalg rsa"
|
||
|
||
rm $KS 2> /dev/null
|
||
|
||
--- ./jdk/test/sun/security/tools/jarsigner/jvindex.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/tools/jarsigner/jvindex.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -47,7 +47,7 @@
|
||
JFILE=jvindex.jar
|
||
|
||
KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit \
|
||
- -keystore $KS"
|
||
+ -keystore $KS -keyalg rsa"
|
||
JAR=$TESTJAVA${FS}bin${FS}jar
|
||
JARSIGNER="$TESTJAVA${FS}bin${FS}jarsigner -keystore $KS -storepass changeit"
|
||
|
||
--- ./jdk/test/sun/security/tools/jarsigner/newsize7.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/tools/jarsigner/newsize7.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -51,7 +51,7 @@
|
||
|
||
KSFILE=ns7.jks
|
||
|
||
-KT="${TESTJAVA}${FS}bin${FS}keytool -keystore ns7.jks -storepass changeit -keypass changeit"
|
||
+KT="${TESTJAVA}${FS}bin${FS}keytool -keystore ns7.jks -storepass changeit -keypass changeit -keyalg rsa"
|
||
JAR="${TESTJAVA}${FS}bin${FS}jar"
|
||
JS="${TESTJAVA}${FS}bin${FS}jarsigner -keystore ns7.jks -storepass changeit"
|
||
|
||
--- ./jdk/test/sun/security/tools/jarsigner/onlymanifest.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/tools/jarsigner/onlymanifest.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -46,7 +46,7 @@
|
||
JFILE=onlymanifest.jar
|
||
|
||
KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit \
|
||
- -keystore $KS"
|
||
+ -keystore $KS -keyalg rsa"
|
||
JAR=$TESTJAVA${FS}bin${FS}jar
|
||
JARSIGNER=$TESTJAVA${FS}bin${FS}jarsigner
|
||
|
||
--- ./jdk/test/sun/security/tools/jarsigner/passtype.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/tools/jarsigner/passtype.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -45,7 +45,7 @@
|
||
KS=pt.jks
|
||
JFILE=pt.jar
|
||
|
||
-KT="$TESTJAVA${FS}bin${FS}keytool -keystore $KS -validity 300"
|
||
+KT="$TESTJAVA${FS}bin${FS}keytool -keystore $KS -validity 300 -keyalg rsa"
|
||
JAR=$TESTJAVA${FS}bin${FS}jar
|
||
JARSIGNER=$TESTJAVA${FS}bin${FS}jarsigner
|
||
|
||
--- ./jdk/test/sun/security/tools/jarsigner/samename.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/tools/jarsigner/samename.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -47,7 +47,7 @@
|
||
KS=samename.jks
|
||
JFILE=em.jar
|
||
|
||
-KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS"
|
||
+KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS -keyalg rsa"
|
||
JAR=$TESTJAVA${FS}bin${FS}jar
|
||
JARSIGNER=$TESTJAVA${FS}bin${FS}jarsigner
|
||
|
||
--- ./jdk/test/sun/security/tools/jarsigner/ts.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/tools/jarsigner/ts.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -53,7 +53,7 @@
|
||
JAR="${TESTJAVA}${FS}bin${FS}jar"
|
||
JAVA="${TESTJAVA}${FS}bin${FS}java"
|
||
JAVAC="${TESTJAVA}${FS}bin${FS}javac"
|
||
-KT="${TESTJAVA}${FS}bin${FS}keytool -keystore tsks -storepass changeit -keypass changeit -validity 200"
|
||
+KT="${TESTJAVA}${FS}bin${FS}keytool -keystore tsks -storepass changeit -keypass changeit -keyalg rsa -validity 200"
|
||
|
||
rm tsks
|
||
echo Nothing > A
|
||
--- ./jdk/test/sun/security/tools/keytool/CloseFile.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/tools/keytool/CloseFile.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -58,7 +58,7 @@
|
||
}
|
||
|
||
static void run(String s) throws Exception {
|
||
- KeyTool.main((s+" -debug").split(" "));
|
||
+ KeyTool.main((s+" -debug -keyalg rsa").split(" "));
|
||
}
|
||
static void remove(String filename, boolean check) {
|
||
new File(filename).delete();
|
||
--- ./jdk/test/sun/security/tools/keytool/ListKeychainStore.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/tools/keytool/ListKeychainStore.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -71,6 +71,7 @@
|
||
-storetype PKCS12 \
|
||
-keystore $TEMPORARY_P12 \
|
||
-storepass $PWD \
|
||
+ -keyalg rsa \
|
||
-dname "CN=$i,OU=$i,O=$i,ST=$i,C=US" \
|
||
-alias 7133495-$i
|
||
|
||
--- ./jdk/test/sun/security/tools/keytool/StartDateTest.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/tools/keytool/StartDateTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -48,7 +48,7 @@
|
||
new File("jks").delete();
|
||
|
||
run("-keystore jks -storetype jks -storepass changeit -keypass changeit -alias me " +
|
||
- "-genkeypair -dname CN=Haha -startdate +1y");
|
||
+ "-keyalg rsa -genkeypair -dname CN=Haha -startdate +1y");
|
||
cal.setTime(getIssueDate());
|
||
System.out.println(cal);
|
||
if (cal.get(Calendar.YEAR) != year + 1) {
|
||
--- ./jdk/test/sun/security/tools/keytool/emptysubject.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/tools/keytool/emptysubject.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -45,7 +45,7 @@
|
||
esac
|
||
|
||
KS=emptysubject.jks
|
||
-KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS"
|
||
+KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS -keyalg rsa"
|
||
|
||
rm $KS
|
||
|
||
--- ./jdk/test/sun/security/tools/keytool/importreadall.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/tools/keytool/importreadall.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -49,7 +49,7 @@
|
||
;;
|
||
esac
|
||
|
||
-KEYTOOL="${TESTJAVA}${FS}bin${FS}keytool -keystore importreadall.jks -storepass changeit -keypass changeit"
|
||
+KEYTOOL="${TESTJAVA}${FS}bin${FS}keytool -keystore importreadall.jks -storepass changeit -keypass changeit -keyalg rsa"
|
||
|
||
# In case the test is run twice in the same directory
|
||
|
||
--- ./jdk/test/sun/security/tools/keytool/readjar.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/tools/keytool/readjar.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -45,7 +45,7 @@
|
||
KS=readjar.jks
|
||
rm $KS
|
||
$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS \
|
||
- -alias x -dname CN=X -genkeypair
|
||
+ -keyalg rsa -alias x -dname CN=X -genkeypair
|
||
$TESTJAVA${FS}bin${FS}jar cvf readjar.jar $KS
|
||
$TESTJAVA${FS}bin${FS}jarsigner -storepass changeit -keystore $KS readjar.jar x
|
||
|
||
--- ./jdk/test/sun/security/tools/keytool/selfissued.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/tools/keytool/selfissued.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -45,7 +45,7 @@
|
||
esac
|
||
|
||
KS=selfsigned.jks
|
||
-KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS"
|
||
+KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS -keyalg rsa"
|
||
|
||
rm $KS
|
||
|
||
--- ./jdk/test/sun/security/tools/keytool/trystore.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/tools/keytool/trystore.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -43,7 +43,7 @@
|
||
|
||
rm trystore.jks 2> /dev/null
|
||
|
||
-KEYTOOL="${TESTJAVA}${FS}bin${FS}keytool -storetype jks -keystore trystore.jks"
|
||
+KEYTOOL="${TESTJAVA}${FS}bin${FS}keytool -storetype jks -keystore trystore.jks -keyalg rsa"
|
||
$KEYTOOL -genkeypair -alias a -dname CN=A -storepass changeit -keypass changeit
|
||
$KEYTOOL -genkeypair -alias b -dname CN=B -storepass changeit -keypass changeit
|
||
|
||
--- ./jdk/test/sun/security/validator/samedn.sh Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/security/validator/samedn.sh Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -47,7 +47,7 @@
|
||
esac
|
||
|
||
KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit \
|
||
- -keypass changeit -keystore samedn.jks"
|
||
+ -keypass changeit -keystore samedn.jks -keyalg rsa"
|
||
JAVAC=$TESTJAVA${FS}bin${FS}javac
|
||
JAVA=$TESTJAVA${FS}bin${FS}java
|
||
|
||
--- ./jdk/test/sun/text/resources/LocaleData Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/text/resources/LocaleData Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -574,7 +574,6 @@
|
||
FormatData/es_PA/NumberElements/0=.
|
||
FormatData/es_PA/NumberElements/1=,
|
||
FormatData/es_PA/NumberElements/2=;
|
||
-CurrencyNames/es_PE/PEN=S/
|
||
FormatData/es_PE/NumberPatterns/0=#,##0.###;-#,##0.###
|
||
# FormatData/es_PE/NumberPatterns/1=S/#,##0.00;S/-#,##0.00 # Changed; see bug 4122840
|
||
FormatData/es_PE/NumberPatterns/2=#,##0%
|
||
@@ -7012,3 +7011,19 @@
|
||
FormatData/sl/DateTimePatterns/4=EEEE, dd. MMMM y
|
||
FormatData/sl/DateTimePatterns/5=dd. MMMM y
|
||
|
||
+# bug 7085757
|
||
+CurrencyNames//SSP=SSP
|
||
+CurrencyNames//ssp=South Sudanese Pound
|
||
+CurrencyNames//xsu=Sucre
|
||
+CurrencyNames//xua=ADB Unit of Account
|
||
+LocaleNames//SS=South Sudan
|
||
+LocaleNames/en/SS=South Sudan
|
||
+
|
||
+# bug 7028073
|
||
+CurrencyNames/es_PE/PEN=S/.
|
||
+
|
||
+# bug 7195759
|
||
+CurrencyNames//ZMW=ZMW
|
||
+
|
||
+# bug 8021121
|
||
+CurrencyNames/lv_LV/EUR=\u20AC
|
||
--- ./jdk/test/sun/text/resources/LocaleDataTest.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/text/resources/LocaleDataTest.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -34,7 +34,7 @@
|
||
* 6509039 6609737 6610748 6645271 6507067 6873931 6450945 6645268 6646611
|
||
* 6645405 6650730 6910489 6573250 6870908 6585666 6716626 6914413 6916787
|
||
* 6919624 6998391 7019267 7020960 7025837 7020583 7036905 7066203 7189611
|
||
- * 7171028 8013836
|
||
+ * 7171028 8013836 7028073 7195759 7085757
|
||
* @summary Verify locale data
|
||
*
|
||
*/
|
||
--- ./jdk/test/sun/tools/jcmd/help_help.out Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/tools/jcmd/help_help.out Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -1,7 +1,7 @@
|
||
help
|
||
For more information about a specific command use 'help <command>'. With no argument this will show a list of available commands. 'help all' will show help for all commands.
|
||
|
||
-Impact: Low:
|
||
+Impact: Low
|
||
|
||
Syntax : help [options] [<command name>]
|
||
|
||
--- ./jdk/test/sun/util/resources/TimeZone/Bug6317929.java Mon Sep 08 12:16:34 2014 -0700
|
||
+++ ./jdk/test/sun/util/resources/TimeZone/Bug6317929.java Mon Jan 05 11:57:27 2015 -0800
|
||
@@ -122,20 +122,20 @@
|
||
TimeZone Currie = TimeZone.getTimeZone("Australia/Currie");
|
||
tzLocale = locales2Test[0];
|
||
if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals
|
||
- ("Eastern Standard Time (New South Wales)"))
|
||
+ ("Australian Eastern Standard Time (New South Wales)"))
|
||
throw new RuntimeException("\n" + tzLocale + ": LONG, " +
|
||
"non-daylight saving name for " +
|
||
"Australia/Currie should be " +
|
||
- "\"Eastern Standard Time " +
|
||
+ "\"Australian Eastern Standard Time " +
|
||
"(New South Wales)\"");
|
||
tzLocale = locales2Test[1];
|
||
if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals
|
||
- ("Eastern Normalzeit (Neus\u00fcdwales)"))
|
||
+ ("\u00D6stliche Normalzeit (New South Wales)"))
|
||
throw new RuntimeException("\n" + tzLocale + ": LONG, " +
|
||
"non-daylight saving name for " +
|
||
"Australia/Currie should be " +
|
||
- "\"Eastern Normalzeit " +
|
||
- "(Neus\u00fcdwales)\"");
|
||
+ "\"\u00D6stliche Normalzeit " +
|
||
+ "(New South Wales)\"");
|
||
tzLocale = locales2Test[2];
|
||
if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals
|
||
("Hora est\u00e1ndar Oriental (Nueva Gales del Sur)"))
|
||
--- ./langtools/.hgtags Mon Sep 08 12:17:52 2014 -0700
|
||
+++ ./langtools/.hgtags Mon Jan 05 12:00:55 2015 -0800
|
||
@@ -472,11 +472,19 @@
|
||
0f809f893588548a3b5c8441e28c9e0a62bc13ef jdk7u65-b18
|
||
eae289997f58ef6396dc323c3d5b93a56fb43573 jdk7u65-b19
|
||
afc940d62b49059f565f87c83343fa3d28df883b jdk7u65-b32
|
||
+772aad4e9681828b8ee193b9ed971cbfe6c7f347 jdk7u80-b00
|
||
+6c307a0b7a94e002d8a2532ffd8146d6c53f42d3 jdk7u80-b01
|
||
+5bd6f3adf690dc2de8881b6f9f48336db4af7865 jdk7u80-b02
|
||
114c4fc53777e4067a26f6510fe72fa770a9253c jdk7u65-b20
|
||
8a09cca8f12027ba59df4bb18d49e855c4db4811 jdk7u67-b01
|
||
eae289997f58ef6396dc323c3d5b93a56fb43573 jdk7u65-b40
|
||
5e4cc118e2d1f7a8eefca5dd7146d46a1b0ca911 jdk7u65-b31
|
||
59575d1928f98d1e26ea548ff4d5e2415dfe9b57 jdk7u65-b33
|
||
+8a09cca8f12027ba59df4bb18d49e855c4db4811 jdk7u67-b01
|
||
+e3b604d29f9177ac0c1344cdb7af8f5ccdc1db42 jdk7u67-b31
|
||
+e6bf55d457016764b4dd785b61ae79a125ba869b jdk7u67-b32
|
||
+624c54795faaf1a92bc1eb8c369dc18c1704c812 jdk7u67-b33
|
||
+18077957a8b802d9ce8724856e8b5f3fcde38b9e jdk7u67-b34
|
||
684f0285b699d304d1efff487b550ff2e1679e98 jdk7u66-b00
|
||
a927daae851fa81d0470d2b67f52e8156e4d423c jdk7u66-b01
|
||
6f229fda19bdabf7a3d1caad9d809dd713cce65d jdk7u66-b09
|
||
@@ -502,3 +510,51 @@
|
||
df957022bc94fc84c3d9e6f1f23af29b6afeb63d jdk7u71-b11
|
||
a8fd0637a601ee2747e785bd5e9e2a0262acf280 jdk7u71-b12
|
||
1cefc4b498a60ebc86b76eb2e9e861dbb072bd85 jdk7u71-b13
|
||
+6fe93bd5d4ac9d65a3f97cc16286ed2278150d7c jdk7u71-b14
|
||
+5b207c2ea9d20c5de58a7a7e618cc9b86ac7fe76 jdk7u72-b01
|
||
+1f1c94334f194aa980b7787fd5f2286405991e23 jdk7u72-b02
|
||
+6e5faa9ed5f317369eacfedbf57fc0745c1e940b jdk7u72-b03
|
||
+960f87b4d55681f19880385f9d11e227ea36f2df jdk7u72-b04
|
||
+adf88de8b627ede9e8819d94b00ad9ec7eed3077 jdk7u72-b05
|
||
+7efda07275d14dbd0fd96d304b7d682579cb6410 jdk7u72-b06
|
||
+bfaa78bab4784c6bb494393dad0c330616cb7256 jdk7u72-b07
|
||
+073486551f0c07f44c93e8dcdb31785a3f4526eb jdk7u72-b08
|
||
+0e25c3ae773a27dba34ec05ea28dbcd44ea6f933 jdk7u72-b09
|
||
+b63b6992ddd27688e276100be436bcf52e0525bc jdk7u72-b10
|
||
+65c68241236ab792fe72119a0b4c29effd048904 jdk7u72-b11
|
||
+cc58d9704b4017efe9ebe4391d73d82c0caf6d1c jdk7u72-b12
|
||
+cade57461d3b90a59ec62c06d77068b1b73f05b2 jdk7u72-b13
|
||
+6106b56a874e19e603660a09d506fe8afcde9e14 jdk7u72-b14
|
||
+7a09f7596c8bb17d3b25b4506dd76425f6efb15e jdk7u72-b30
|
||
+de0088aaf97fa861be8c17e97b57139287068c86 jdk7u72-b31
|
||
+0138c5f55af0c700882deeac4411fbd9118b4d6e jdk7u75-b00
|
||
+7ecfdbf693cfc14d648ebdf2cc87716068569e8d jdk7u75-b01
|
||
+688a304d3215af8104336ecce50b7f4edfb88d36 jdk7u75-b02
|
||
+105ad2d2417515b2b595c151e2a5d8ae0fe729eb jdk7u75-b03
|
||
+bdbe862f8846558c83f8bc15518446ab0495a173 jdk7u75-b04
|
||
+1895dc97d832950fe13a16428b797c952c9e4f4a jdk7u75-b05
|
||
+5fcea7a0e4f1e3fa52bd6010e685098731966933 jdk7u75-b06
|
||
+2e1c7e887c37dd702b2d09a00dacbafd79604e8c jdk7u75-b07
|
||
+fe8e75540f0990c6ad9d060c2343ef896cb5bc19 jdk7u75-b08
|
||
+512d77cd143798615266314c72c00ee32500661c jdk7u75-b09
|
||
+d77d44ecfb980610de2c90446fab13910ed2c8d7 jdk7u75-b10
|
||
+b5554ad39fa33c17033931a4ef5564a9b9d88f05 jdk7u75-b11
|
||
+6f369f5322618b48225eebcde52ab9dfa552e286 jdk7u75-b12
|
||
+7eb2663b7feb537ca765747e7bd0128245812c64 jdk7u75-b13
|
||
+059a87205fda11b19d25ace75698a854aa8edbf3 jdk7u75-b30
|
||
+591a7e4cabb5c5efc3ec65128181b38b1fa44a96 jdk7u75-b31
|
||
+e77dbc24fcdb5c55f414459798e4c65ed75bf570 jdk7u76-b00
|
||
+17aaafb2d1ecb6e2dac5e05cb3198703737e623a jdk7u76-b01
|
||
+da47e39ce6680458be011936b89f0946b9587042 jdk7u76-b02
|
||
+19a2140056ce1bfa3b6b332d168ad1208bfed1ae jdk7u76-b03
|
||
+76969bec514e11903a321f556f38c3be4c2320cf jdk7u76-b04
|
||
+ae19a85e5b3864b49b123f54b72de93d13722439 jdk7u76-b05
|
||
+b981c087098c8c18f5d2632c02a680ef036217c4 jdk7u76-b06
|
||
+b09339e2ca2ac75e5ca29e980eac2e7866e463aa jdk7u76-b07
|
||
+23a0bb20d74919861201d0d73cd612cabfd8f1f2 jdk7u76-b08
|
||
+853bb5d480cab85c9f9f67ff86f8cb95c31e4885 jdk7u76-b09
|
||
+11ca0f4b0c56817f6ad302022e6414aa52582f16 jdk7u76-b10
|
||
+63c1f23bddcfc45835f224376525ec621ac73a96 jdk7u76-b11
|
||
+f0a6f4f62959a43e21d377436e3e60f6431ee5b4 jdk7u76-b12
|
||
+d9e79541170f453dda964319f268fdad80dce9d7 jdk7u76-b13
|
||
+24f0420bb212b05d572689bae8ec2d232b9ac5a0 jdk7u76-b30
|
||
--- ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java Mon Sep 08 12:17:52 2014 -0700
|
||
+++ ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java Mon Jan 05 12:00:55 2015 -0800
|
||
@@ -426,7 +426,7 @@
|
||
head.addContent(headComment);
|
||
}
|
||
if (configuration.charset.length() > 0) {
|
||
- Content meta = HtmlTree.META("Content-Type", "text/html",
|
||
+ Content meta = HtmlTree.META("Content-Type", CONTENT_TYPE,
|
||
configuration.charset);
|
||
head.addContent(meta);
|
||
}
|
||
--- ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlAttr.java Mon Sep 08 12:17:52 2014 -0700
|
||
+++ ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlAttr.java Mon Jan 05 12:00:55 2015 -0800
|
||
@@ -35,7 +35,6 @@
|
||
BORDER,
|
||
CELLPADDING,
|
||
CELLSPACING,
|
||
- CHARSET,
|
||
CLASS,
|
||
CLEAR,
|
||
COLS,
|
||
--- ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java Mon Sep 08 12:17:52 2014 -0700
|
||
+++ ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java Mon Jan 05 12:00:55 2015 -0800
|
||
@@ -44,6 +44,8 @@
|
||
*/
|
||
public abstract class HtmlDocWriter extends HtmlWriter {
|
||
|
||
+ public static final String CONTENT_TYPE = "text/html";
|
||
+
|
||
/**
|
||
* Constructor. Initializes the destination file name through the super
|
||
* class HtmlWriter.
|
||
@@ -330,7 +332,7 @@
|
||
head.addContent(headComment);
|
||
}
|
||
if (configuration.charset.length() > 0) {
|
||
- Content meta = HtmlTree.META("Content-Type", "text/html",
|
||
+ Content meta = HtmlTree.META("Content-Type", CONTENT_TYPE,
|
||
configuration.charset);
|
||
head.addContent(meta);
|
||
}
|
||
--- ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java Mon Sep 08 12:17:52 2014 -0700
|
||
+++ ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java Mon Jan 05 12:00:55 2015 -0800
|
||
@@ -471,9 +471,9 @@
|
||
*/
|
||
public static HtmlTree META(String httpEquiv, String content, String charSet) {
|
||
HtmlTree htmltree = new HtmlTree(HtmlTag.META);
|
||
+ String contentCharset = content + "; charset=" + charSet;
|
||
htmltree.addAttr(HtmlAttr.HTTP_EQUIV, nullCheck(httpEquiv));
|
||
- htmltree.addAttr(HtmlAttr.CONTENT, nullCheck(content));
|
||
- htmltree.addAttr(HtmlAttr.CHARSET, nullCheck(charSet));
|
||
+ htmltree.addAttr(HtmlAttr.CONTENT, contentCharset);
|
||
return htmltree;
|
||
}
|
||
|
||
--- ./langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java Mon Sep 08 12:17:52 2014 -0700
|
||
+++ ./langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java Mon Jan 05 12:00:55 2015 -0800
|
||
@@ -1067,7 +1067,7 @@
|
||
boolean testFirst) {
|
||
Env<GenContext> loopEnv = env.dup(loop, new GenContext());
|
||
int startpc = code.entryPoint();
|
||
- if (testFirst) {
|
||
+ if (testFirst) { //while or for loop
|
||
CondItem c;
|
||
if (cond != null) {
|
||
code.statBegin(cond.pos);
|
||
@@ -1097,6 +1097,9 @@
|
||
code.resolve(c.falseJumps);
|
||
}
|
||
code.resolve(loopEnv.info.exit);
|
||
+ if (loopEnv.info.exit != null) {
|
||
+ loopEnv.info.exit.state.defined.excludeFrom(code.nextreg);
|
||
+ }
|
||
}
|
||
|
||
public void visitForeachLoop(JCEnhancedForLoop tree) {
|
||
--- ./langtools/src/share/classes/com/sun/tools/javac/resources/javac_ja.properties Mon Sep 08 12:17:52 2014 -0700
|
||
+++ ./langtools/src/share/classes/com/sun/tools/javac/resources/javac_ja.properties Mon Jan 05 12:00:55 2015 -0800
|
||
@@ -37,7 +37,7 @@
|
||
javac.opt.Xbootclasspath.p=\u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u30FB\u30AF\u30E9\u30B9\u30FB\u30D1\u30B9\u306B\u4ED8\u52A0\u3059\u308B
|
||
javac.opt.Xbootclasspath.a=\u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u30FB\u30AF\u30E9\u30B9\u30FB\u30D1\u30B9\u306B\u8FFD\u52A0\u3059\u308B
|
||
javac.opt.endorseddirs=\u63A8\u5968\u898F\u683C\u30D1\u30B9\u306E\u5834\u6240\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B
|
||
-javac.opt.extdirs=\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u6E08\u307F\u62E1\u5F35\u6A5F\u80FD\u306E\u5834\u6240\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B
|
||
+javac.opt.extdirs=\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u6E08\u62E1\u5F35\u6A5F\u80FD\u306E\u5834\u6240\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B
|
||
javac.opt.processorpath=\u6CE8\u91C8\u30D7\u30ED\u30BB\u30C3\u30B5\u3092\u691C\u7D22\u3059\u308B\u4F4D\u7F6E\u3092\u6307\u5B9A\u3059\u308B
|
||
javac.opt.processor=\u5B9F\u884C\u3059\u308B\u6CE8\u91C8\u30D7\u30ED\u30BB\u30C3\u30B5\u306E\u540D\u524D\u3002\u30C7\u30D5\u30A9\u30EB\u30C8\u306E\u691C\u51FA\u51E6\u7406\u3092\u30D0\u30A4\u30D1\u30B9
|
||
javac.opt.proc.none.only=\u6CE8\u91C8\u51E6\u7406\u3084\u30B3\u30F3\u30D1\u30A4\u30EB\u3092\u5B9F\u884C\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./langtools/test/com/sun/javadoc/testCharset/TestCharset.java Mon Jan 05 12:00:55 2015 -0800
|
||
@@ -0,0 +1,82 @@
|
||
+/*
|
||
+ * Copyright (c) 2013, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 7052170
|
||
+ * @summary Run a test on -charset to make sure the charset gets generated as a
|
||
+ * part of the meta tag.
|
||
+ * @author Bhavesh Patel
|
||
+ * @library ../lib/
|
||
+ * @build JavadocTester TestCharset
|
||
+ * @run main TestCharset
|
||
+ */
|
||
+
|
||
+public class TestCharset extends JavadocTester {
|
||
+
|
||
+ //Test information.
|
||
+ private static final String BUG_ID = "7052170";
|
||
+
|
||
+ //Javadoc arguments.
|
||
+ private static final String[] ARGS = new String[] {
|
||
+ "-d", BUG_ID, "-charset", "UTF-8", "-sourcepath", SRC_DIR, "pkg"
|
||
+ };
|
||
+
|
||
+ private static final String[][] TEST = {
|
||
+ {BUG_ID + FS + "index.html",
|
||
+ "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">"},
|
||
+ {BUG_ID + FS + "pkg" + FS + "Foo.html",
|
||
+ "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">"}
|
||
+ };
|
||
+
|
||
+ private static final String[][] NEGATED_TEST = {
|
||
+ {BUG_ID + FS + "index.html",
|
||
+ "<meta http-equiv=\"Content-Type\" content=\"text/html\" charset=\"UTF-8\">"},
|
||
+ {BUG_ID + FS + "pkg" + FS + "Foo.html",
|
||
+ "<meta http-equiv=\"Content-Type\" content=\"text/html\" charset=\"UTF-8\">"}
|
||
+ };
|
||
+
|
||
+ /**
|
||
+ * The entry point of the test.
|
||
+ * @param args the array of command line arguments.
|
||
+ */
|
||
+ public static void main(String[] args) {
|
||
+ TestCharset tester = new TestCharset();
|
||
+ run(tester, ARGS, TEST, NEGATED_TEST);
|
||
+ tester.printSummary();
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * {@inheritDoc}
|
||
+ */
|
||
+ public String getBugId() {
|
||
+ return BUG_ID;
|
||
+ }
|
||
+
|
||
+ /**
|
||
+ * {@inheritDoc}
|
||
+ */
|
||
+ public String getBugName() {
|
||
+ return getClass().getName();
|
||
+ }
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./langtools/test/com/sun/javadoc/testCharset/pkg/Foo.java Mon Jan 05 12:00:55 2015 -0800
|
||
@@ -0,0 +1,26 @@
|
||
+/*
|
||
+ * Copyright (c) 2013, 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.
|
||
+ *
|
||
+ * 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 pkg;
|
||
+
|
||
+public class Foo {}
|
||
--- ./langtools/test/tools/javac/ClassPathTest/ClassPathTest.sh Mon Sep 08 12:17:52 2014 -0700
|
||
+++ ./langtools/test/tools/javac/ClassPathTest/ClassPathTest.sh Mon Jan 05 12:00:55 2015 -0800
|
||
@@ -56,11 +56,17 @@
|
||
# set platform-dependent variables
|
||
OS=`uname -s`
|
||
case "$OS" in
|
||
- SunOS | Linux | Darwin | CYGWIN* )
|
||
+ SunOS | Linux | Darwin )
|
||
FS="/"
|
||
+ CHMOD="${FS}bin${FS}chmod"
|
||
;;
|
||
Windows* )
|
||
FS="\\"
|
||
+ CHMOD="chmod"
|
||
+ ;;
|
||
+ CYGWIN* )
|
||
+ FS="/"
|
||
+ CHMOD="chmod"
|
||
;;
|
||
* )
|
||
echo "Unrecognized system!"
|
||
@@ -73,6 +79,7 @@
|
||
cleanup() {
|
||
rm -f *.class pkg${FS}*.class foo${FS}pkg${FS}*.class bar${FS}pkg${FS}*.class
|
||
cp -rf $TESTSRC${FS}* .
|
||
+ ${CHMOD} -R u+w *
|
||
}
|
||
|
||
fail() {
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./langtools/test/tools/javac/T8050386/WrongStackframeGenerationTest1.java Mon Jan 05 12:00:55 2015 -0800
|
||
@@ -0,0 +1,47 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 8050386
|
||
+ * @summary Verification error due to a bad stackmap frame generated by javac
|
||
+ */
|
||
+
|
||
+public class WrongStackframeGenerationTest1 {
|
||
+ public static void main(String[] args) {}
|
||
+
|
||
+ static void foo(){
|
||
+ while (true) {
|
||
+ int i = 0;
|
||
+ break;
|
||
+ }
|
||
+ switch (1) {
|
||
+ case 1:
|
||
+ int j = 0;
|
||
+ case 2:
|
||
+ bar();
|
||
+ }
|
||
+ }
|
||
+
|
||
+ static void bar() {}
|
||
+}
|
||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||
+++ ./langtools/test/tools/javac/T8050386/WrongStackframeGenerationTest2.java Mon Jan 05 12:00:55 2015 -0800
|
||
@@ -0,0 +1,50 @@
|
||
+/*
|
||
+ * Copyright (c) 2014, 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.
|
||
+ *
|
||
+ * 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.
|
||
+ */
|
||
+
|
||
+/*
|
||
+ * @test
|
||
+ * @bug 8050386
|
||
+ * @summary Verification error due to a bad stackmap frame generated by javac
|
||
+ */
|
||
+
|
||
+public class WrongStackframeGenerationTest2 {
|
||
+ public static void main(String[] args) {}
|
||
+
|
||
+ static void foo() {
|
||
+ int len;
|
||
+ for (;;) {
|
||
+ try {
|
||
+ len = 1;
|
||
+ break;
|
||
+ } catch (Exception e) {
|
||
+ }
|
||
+ }
|
||
+
|
||
+ try {
|
||
+ if (len == -1) {
|
||
+ len = 0;
|
||
+ }
|
||
+ } finally {
|
||
+ }
|
||
+ }
|
||
+}
|
||
--- ./langtools/test/tools/javac/innerClassFile/Driver.sh Mon Sep 08 12:17:52 2014 -0700
|
||
+++ ./langtools/test/tools/javac/innerClassFile/Driver.sh Mon Jan 05 12:00:55 2015 -0800
|
||
@@ -71,3 +71,4 @@
|
||
"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} -d . -classpath . -sourcepath src src/x/B.java src/x/C.java src/y/Main.java
|
||
rm y/R3.class
|
||
"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} -d . -classpath . -sourcepath src src/y/Main.java
|
||
+rm -fr src
|