Mercurial > hg > icedtea8-forest > jdk
changeset 14810:3d2b77f2c2fd jdk8u282-b02
Merge
author | andrew |
---|---|
date | Mon, 16 Nov 2020 13:36:36 +0000 |
parents | 9b8fdf354146 (current diff) 2cecd9cb015e (diff) |
children | 1c64ca5020d9 d6c70b35a57c |
files | .hgtags make/data/tzdata/pacificnew make/data/tzdata/systemv test/jdk/internal/platform/docker/Dockerfile-BasicTest test/jdk/internal/platform/docker/Dockerfile-BasicTest-aarch64 test/jdk/internal/platform/docker/Dockerfile-BasicTest-ppc64le test/jdk/internal/platform/docker/Dockerfile-BasicTest-s390x test/sun/util/calendar/zi/tzdata/pacificnew test/sun/util/calendar/zi/tzdata/systemv |
diffstat | 158 files changed, 5127 insertions(+), 2268 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgtags Thu Nov 05 05:11:12 2020 +0000 +++ b/.hgtags Mon Nov 16 13:36:36 2020 +0000 @@ -1053,11 +1053,13 @@ 4d586f39fed361c94475772d9b638fb3cccd8e00 jdk8u272-b04 edb84bd2f10f7a0fcc68dc5a27fc739403ce32f2 jdk8u272-b05 4546aa3faf3776f92aaa7f70233846d0d2907068 jdk8u272-b06 +4546aa3faf3776f92aaa7f70233846d0d2907068 jdk8u282-b00 d8bd882cfd2ae393e7dbffed7fbd455449c32d88 jdk8u272-b07 ab2e99db67029a5505934895831561bb39a8ca31 jdk8u272-b08 77b682e2d679a13ed7fbb8343f5b2ac1ddee1300 jdk8u272-b09 badfd40f15ac56deecb250cc14735974c3e41611 jdk8u272-b10 badfd40f15ac56deecb250cc14735974c3e41611 jdk8u272-ga +4c5dceabd4c63b9c43b024418a5946765049d6eb jdk8u282-b01 badfd40f15ac56deecb250cc14735974c3e41611 jdk8u275-b00 efb922cd7ac475a882ae6d941f4f3072bec01b7a jdk8u275-b01 efb922cd7ac475a882ae6d941f4f3072bec01b7a jdk8u275-ga
--- a/THIRD_PARTY_README Thu Nov 05 05:11:12 2020 +0000 +++ b/THIRD_PARTY_README Mon Nov 16 13:36:36 2020 +0000 @@ -1672,13 +1672,13 @@ ------------------------------------------------------------------------------- -%% This notice is provided with respect to Little CMS 2.9, which may be +%% This notice is provided with respect to Little CMS 2.11, which may be included with JRE 8, JDK 8, and OpenJDK 8. --- begin of LICENSE --- Little CMS -Copyright (c) 1998-2011 Marti Maria Saguer +Copyright (c) 1998-2020 Marti Maria Saguer Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal
--- a/make/CompileLaunchers.gmk Thu Nov 05 05:11:12 2020 +0000 +++ b/make/CompileLaunchers.gmk Mon Nov 16 13:36:36 2020 +0000 @@ -231,7 +231,29 @@ $(RM) $@ $(CP) $(JDK_OUTPUTDIR)/objs/java_objs$(OUTPUT_SUBDIR)/java$(EXE_SUFFIX) $@ +ifeq ($(ZIP_DEBUGINFO_FILES), true) + DEBUGINFO_EXT := .diz +else ifeq ($(OPENJDK_TARGET_OS), macosx) + DEBUGINFO_EXT := .dSYM +else ifeq ($(OPENJDK_TARGET_OS), windows) + DEBUGINFO_EXT := .pdb +else + DEBUGINFO_EXT := .debuginfo +endif + +$(JDK_OUTPUTDIR)/bin$(OUTPUT_SUBDIR)/java$(DEBUGINFO_EXT): $(BUILD_LAUNCHER_java) + $(MKDIR) -p $(@D) + $(RM) $@ + $(CP) $(JDK_OUTPUTDIR)/objs/java_objs$(OUTPUT_SUBDIR)/java$(DEBUGINFO_EXT) $@ + BUILD_LAUNCHERS += $(JDK_OUTPUTDIR)/bin$(OUTPUT_SUBDIR)/java$(EXE_SUFFIX) +ifeq ($(ENABLE_DEBUG_SYMBOLS), true) + ifneq ($(POST_STRIP_CMD), ) + ifneq ($(STRIP_POLICY), no_strip) + BUILD_LAUNCHERS += $(JDK_OUTPUTDIR)/bin$(OUTPUT_SUBDIR)/java$(DEBUGINFO_EXT) + endif + endif +endif ifeq ($(OPENJDK_TARGET_OS), windows) $(eval $(call SetupLauncher,javaw, \ @@ -462,6 +484,7 @@ ifeq ($(OPENJDK_TARGET_OS), solaris) UNPACKEXE_LANG := C++ endif +UNPACKEXE_DEBUG_SYMBOLS := true # On windows, unpack200 is linked completely differently to all other # executables, using the compiler with the compiler arguments. # It's also linked incrementally, producing a .ilk file that needs to @@ -470,6 +493,9 @@ BUILD_UNPACKEXE_LDEXE := $(CC) EXE_OUT_OPTION_save := $(EXE_OUT_OPTION) EXE_OUT_OPTION := -Fe + # With the current way unpack200 is built, debug symbols aren't supported + # anyway. + UNPACKEXE_DEBUG_SYMBOLS := endif # The linker on older SuSE distros (e.g. on SLES 10) complains with: @@ -509,7 +535,7 @@ -D "JDK_FNAME=unpack200.exe" \ -D "JDK_INTERNAL_NAME=unpack200" \ -D "JDK_FTYPE=0x1L", \ - DEBUG_SYMBOLS := true, \ + DEBUG_SYMBOLS := $(UNPACKEXE_DEBUG_SYMBOLS), \ MANIFEST := $(JDK_TOPDIR)/src/windows/resource/unpack200_proto.exe.manifest)) ifeq ($(OPENJDK_TARGET_OS), windows) @@ -529,7 +555,17 @@ $(JDK_OUTPUTDIR)/bin$(OUTPUT_SUBDIR)/unpack200$(EXE_SUFFIX): $(BUILD_UNPACKEXE) $(call install-file) +$(JDK_OUTPUTDIR)/bin$(OUTPUT_SUBDIR)/unpack200$(DEBUGINFO_EXT): $(BUILD_UNPACKEXE) + $(call install-file) + BUILD_LAUNCHERS += $(JDK_OUTPUTDIR)/bin$(OUTPUT_SUBDIR)/unpack200$(EXE_SUFFIX) +ifeq ($(ENABLE_DEBUG_SYMBOLS), true) + ifneq ($(POST_STRIP_CMD), ) + ifneq ($(STRIP_POLICY), no_strip) + BUILD_LAUNCHERS += $(JDK_OUTPUTDIR)/bin$(OUTPUT_SUBDIR)/unpack200$(DEBUGINFO_EXT) + endif + endif +endif ##########################################################################################
--- a/make/Images.gmk Thu Nov 05 05:11:12 2020 +0000 +++ b/make/Images.gmk Mon Nov 16 13:36:36 2020 +0000 @@ -77,6 +77,16 @@ $4 += $2/$$($2_$3_FILE) endef +ifeq ($(ZIP_DEBUGINFO_FILES), true) + DEBUGINFO_EXT := .diz +else ifeq ($(OPENJDK_TARGET_OS), macosx) + DEBUGINFO_EXT := .dSYM +else ifeq ($(OPENJDK_TARGET_OS), windows) + DEBUGINFO_EXT := .pdb +else + DEBUGINFO_EXT := .debuginfo +endif + ################################################################################ # # JRE and JDK build rules @@ -129,6 +139,7 @@ clhsdb$(EXE_SUFFIX) \ hsdb$(EXE_SUFFIX) \ jfr$(EXE_SUFFIX) + NOT_JRE_DEBUGINFO_FILES := $(patsubst %$(EXE_SUFFIX),%$(DEBUGINFO_EXT),$(NOT_JRE_BIN_FILES)) endif WINDOWS_JDK_BIN_FILES = \ @@ -146,11 +157,7 @@ # Prevent sjavac from entering the images. ALL_BIN_LIST := $(filter-out %/sjavac, $(ALL_BIN_LIST)) -# For unknown reason the debuginfo files for executables are not put into images -# e.g filter them out -ifneq ($(OPENJDK_TARGET_OS), windows) - ALL_BIN_LIST := $(filter-out %.debuginfo %.diz, $(ALL_BIN_LIST)) -else +ifeq ($(OPENJDK_TARGET_OS), windows) # On windows, the libraries are in the bin dir, only filter out debuginfo files # for executables. "java" is both a library and executable. ALL_BIN_EXEC_FILES := $(filter-out java.exe, $(notdir $(filter %.exe, $(ALL_BIN_LIST)))) @@ -160,7 +167,7 @@ endif JDKJRE_BIN_LIST := $(filter-out $(addprefix %, $(NOT_JRE_BIN_FILES)), $(ALL_BIN_LIST)) -JRE_BIN_LIST := $(filter-out $(addprefix %, $(WINDOWS_JDKJRE_BIN_FILES)), $(JDKJRE_BIN_LIST)) +JRE_BIN_LIST := $(filter-out $(addprefix %, $(WINDOWS_JDKJRE_BIN_FILES)) $(addprefix %, $(NOT_JRE_DEBUGINFO_FILES)), $(JDKJRE_BIN_LIST)) ifeq ($(OPENJDK_TARGET_OS), windows) JDK_BIN_LIST := $(filter $(addprefix %, $(WINDOWS_JDK_BIN_FILES)), $(ALL_BIN_LIST))
--- a/make/data/tzdata/VERSION Thu Nov 05 05:11:12 2020 +0000 +++ b/make/data/tzdata/VERSION Mon Nov 16 13:36:36 2020 +0000 @@ -21,4 +21,4 @@ # or visit www.oracle.com if you need additional information or have any # questions. # -tzdata2020a +tzdata2020b
--- a/make/data/tzdata/africa Thu Nov 05 05:11:12 2020 +0000 +++ b/make/data/tzdata/africa Mon Nov 16 13:36:36 2020 +0000 @@ -87,7 +87,7 @@ # Corrections are welcome. # Algeria -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Algeria 1916 only - Jun 14 23:00s 1:00 S Rule Algeria 1916 1919 - Oct Sun>=1 23:00s 0 - Rule Algeria 1917 only - Mar 24 23:00s 1:00 S @@ -110,10 +110,9 @@ Rule Algeria 1978 only - Sep 22 3:00 0 - Rule Algeria 1980 only - Apr 25 0:00 1:00 S Rule Algeria 1980 only - Oct 31 2:00 0 - -# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's -# more precise 0:09:21. +# See Europe/Paris for PMT-related transitions. # Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01 +Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 16 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 @@ -199,7 +198,7 @@ # Egypt was mean noon at the Great Pyramid, 2:04:30.5, but apparently this # did not apply to Cairo, Alexandria, or Port Said. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Egypt 1940 only - Jul 15 0:00 1:00 S Rule Egypt 1940 only - Oct 1 0:00 0 - Rule Egypt 1941 only - Apr 15 0:00 1:00 S @@ -434,7 +433,7 @@ # now Ghana observed different DST regimes in different years. For # lack of better info, use Shanks except treat the minus sign as a # typo, and assume DST started in 1920 not 1936. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Ghana 1920 1942 - Sep 1 0:00 0:20 - Rule Ghana 1920 1942 - Dec 31 0:00 0 - # Zone NAME STDOFF RULES FORMAT [UNTIL] @@ -524,7 +523,7 @@ # From Paul Eggert (2013-10-25): # For now, assume they're reverting to the pre-2012 rules of permanent UT +02. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Libya 1951 only - Oct 14 2:00 1:00 S Rule Libya 1952 only - Jan 1 0:00 0 - Rule Libya 1953 only - Oct 9 2:00 1:00 S @@ -647,7 +646,7 @@ # "The trial ended on March 29, 2009, when the clocks moved back by one hour # at 2am (or 02:00) local time..." -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Mauritius 1982 only - Oct 10 0:00 1:00 - Rule Mauritius 1983 only - Mar 21 0:00 0 - Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 - @@ -898,17 +897,30 @@ # https://maroc-diplomatique.net/maroc-le-retour-a-lheure-gmt-est-prevu-dimanche-prochain/ # http://aujourdhui.ma/actualite/gmt1-retour-a-lheure-normale-dimanche-prochain-1 # -# From Paul Eggert (2020-04-14): +# From Milamber (2020-05-31) +# In Morocco (where I live), the end of Ramadan (Arabic month) is followed by +# the Eid al-Fitr, and concretely it's 1 or 2 day offs for the people (with +# traditional visiting of family, big lunches/dinners, etc.). So for this +# year the astronomical calculations don't include the following 2 days off in +# the calc. These 2 days fall in a Sunday/Monday, so it's not acceptable by +# people to have a time shift during these 2 days off. Perhaps you can modify +# the (predicted) rules for next years: if the end of Ramadan is a (probable) +# Friday or Saturday (and so the 2 days off are on a weekend), the next time +# shift will be the next weekend. +# +# From Paul Eggert (2020-05-31): # For now, guess that in the future Morocco will fall back at 03:00 # the last Sunday before Ramadan, and spring forward at 02:00 the -# first Sunday after the day after Ramadan. To implement this, -# transition dates for 2021 through 2087 were determined by running -# the following program under GNU Emacs 26.3. -# (let ((islamic-year 1442)) +# first Sunday after two days after Ramadan. To implement this, +# transition dates and times for 2019 through 2087 were determined by +# running the following program under GNU Emacs 26.3. (This algorithm +# also produces the correct transition dates for 2016 through 2018, +# though the times differ due to Morocco's time zone change in 2018.) +# (let ((islamic-year 1440)) # (require 'cal-islam) # (while (< islamic-year 1511) # (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year))) -# (b (1+ (calendar-islamic-to-absolute (list 10 1 islamic-year)))) +# (b (+ 2 (calendar-islamic-to-absolute (list 10 1 islamic-year)))) # (sunday 0)) # (while (/= sunday (mod (setq a (1- a)) 7))) # (while (/= sunday (mod b 7)) @@ -923,7 +935,7 @@ # (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b))))) # (setq islamic-year (+ 1 islamic-year)))) -# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Morocco 1939 only - Sep 12 0:00 1:00 - Rule Morocco 1939 only - Nov 19 0:00 0 - Rule Morocco 1940 only - Feb 25 0:00 1:00 - @@ -974,7 +986,7 @@ Rule Morocco 2022 only - Mar 27 3:00 0 - Rule Morocco 2022 only - May 8 2:00 1:00 - Rule Morocco 2023 only - Mar 19 3:00 0 - -Rule Morocco 2023 only - Apr 23 2:00 1:00 - +Rule Morocco 2023 only - Apr 30 2:00 1:00 - Rule Morocco 2024 only - Mar 10 3:00 0 - Rule Morocco 2024 only - Apr 14 2:00 1:00 - Rule Morocco 2025 only - Feb 23 3:00 0 - @@ -990,7 +1002,7 @@ Rule Morocco 2029 only - Dec 30 3:00 0 - Rule Morocco 2030 only - Feb 10 2:00 1:00 - Rule Morocco 2030 only - Dec 22 3:00 0 - -Rule Morocco 2031 only - Jan 26 2:00 1:00 - +Rule Morocco 2031 only - Feb 2 2:00 1:00 - Rule Morocco 2031 only - Dec 14 3:00 0 - Rule Morocco 2032 only - Jan 18 2:00 1:00 - Rule Morocco 2032 only - Nov 28 3:00 0 - @@ -1006,7 +1018,7 @@ Rule Morocco 2037 only - Oct 4 3:00 0 - Rule Morocco 2037 only - Nov 15 2:00 1:00 - Rule Morocco 2038 only - Sep 26 3:00 0 - -Rule Morocco 2038 only - Oct 31 2:00 1:00 - +Rule Morocco 2038 only - Nov 7 2:00 1:00 - Rule Morocco 2039 only - Sep 18 3:00 0 - Rule Morocco 2039 only - Oct 23 2:00 1:00 - Rule Morocco 2040 only - Sep 2 3:00 0 - @@ -1022,7 +1034,7 @@ Rule Morocco 2045 only - Jul 9 3:00 0 - Rule Morocco 2045 only - Aug 20 2:00 1:00 - Rule Morocco 2046 only - Jul 1 3:00 0 - -Rule Morocco 2046 only - Aug 5 2:00 1:00 - +Rule Morocco 2046 only - Aug 12 2:00 1:00 - Rule Morocco 2047 only - Jun 23 3:00 0 - Rule Morocco 2047 only - Jul 28 2:00 1:00 - Rule Morocco 2048 only - Jun 7 3:00 0 - @@ -1038,7 +1050,7 @@ Rule Morocco 2053 only - Apr 13 3:00 0 - Rule Morocco 2053 only - May 25 2:00 1:00 - Rule Morocco 2054 only - Apr 5 3:00 0 - -Rule Morocco 2054 only - May 10 2:00 1:00 - +Rule Morocco 2054 only - May 17 2:00 1:00 - Rule Morocco 2055 only - Mar 28 3:00 0 - Rule Morocco 2055 only - May 2 2:00 1:00 - Rule Morocco 2056 only - Mar 12 3:00 0 - @@ -1054,7 +1066,7 @@ Rule Morocco 2061 only - Jan 16 3:00 0 - Rule Morocco 2061 only - Feb 27 2:00 1:00 - Rule Morocco 2062 only - Jan 8 3:00 0 - -Rule Morocco 2062 only - Feb 12 2:00 1:00 - +Rule Morocco 2062 only - Feb 19 2:00 1:00 - Rule Morocco 2062 only - Dec 31 3:00 0 - Rule Morocco 2063 only - Feb 4 2:00 1:00 - Rule Morocco 2063 only - Dec 16 3:00 0 - @@ -1070,7 +1082,7 @@ Rule Morocco 2068 only - Oct 21 3:00 0 - Rule Morocco 2068 only - Dec 2 2:00 1:00 - Rule Morocco 2069 only - Oct 13 3:00 0 - -Rule Morocco 2069 only - Nov 17 2:00 1:00 - +Rule Morocco 2069 only - Nov 24 2:00 1:00 - Rule Morocco 2070 only - Oct 5 3:00 0 - Rule Morocco 2070 only - Nov 9 2:00 1:00 - Rule Morocco 2071 only - Sep 20 3:00 0 - @@ -1086,7 +1098,7 @@ Rule Morocco 2076 only - Jul 26 3:00 0 - Rule Morocco 2076 only - Sep 6 2:00 1:00 - Rule Morocco 2077 only - Jul 18 3:00 0 - -Rule Morocco 2077 only - Aug 22 2:00 1:00 - +Rule Morocco 2077 only - Aug 29 2:00 1:00 - Rule Morocco 2078 only - Jul 10 3:00 0 - Rule Morocco 2078 only - Aug 14 2:00 1:00 - Rule Morocco 2079 only - Jun 25 3:00 0 - @@ -1096,13 +1108,13 @@ Rule Morocco 2081 only - Jun 1 3:00 0 - Rule Morocco 2081 only - Jul 13 2:00 1:00 - Rule Morocco 2082 only - May 24 3:00 0 - -Rule Morocco 2082 only - Jun 28 2:00 1:00 - +Rule Morocco 2082 only - Jul 5 2:00 1:00 - Rule Morocco 2083 only - May 16 3:00 0 - Rule Morocco 2083 only - Jun 20 2:00 1:00 - Rule Morocco 2084 only - Apr 30 3:00 0 - Rule Morocco 2084 only - Jun 11 2:00 1:00 - Rule Morocco 2085 only - Apr 22 3:00 0 - -Rule Morocco 2085 only - May 27 2:00 1:00 - +Rule Morocco 2085 only - Jun 3 2:00 1:00 - Rule Morocco 2086 only - Apr 14 3:00 0 - Rule Morocco 2086 only - May 19 2:00 1:00 - Rule Morocco 2087 only - Mar 30 3:00 0 - @@ -1203,7 +1215,7 @@ # Use plain "WAT" and "CAT" for the time zone abbreviations, to be compatible # with Namibia's neighbors. -# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S # Vanguard section, for zic and other parsers that support negative DST. #Rule Namibia 1994 only - Mar 21 0:00 -1:00 WAT #Rule Namibia 1994 2017 - Sep Sun>=1 2:00 0 CAT @@ -1326,7 +1338,7 @@ # See Africa/Nairobi. # South Africa -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule SA 1942 1943 - Sep Sun>=15 2:00 1:00 - Rule SA 1943 1944 - Mar Sun>=15 2:00 0 - # Zone NAME STDOFF RULES FORMAT [UNTIL] @@ -1359,7 +1371,7 @@ # Abdalla of NTC, archived at: # https://mm.icann.org/pipermail/tz/2017-October/025333.html -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Sudan 1970 only - May 1 0:00 1:00 S Rule Sudan 1970 1985 - Oct 15 0:00 0 - Rule Sudan 1971 only - Apr 30 0:00 1:00 S @@ -1447,7 +1459,7 @@ # http://www.almadenahnews.com/newss/news.php?c=118&id=38036 # http://www.worldtimezone.com/dst_news/dst_news_tunis02.html -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Tunisia 1939 only - Apr 15 23:00s 1:00 S Rule Tunisia 1939 only - Nov 18 23:00s 0 - Rule Tunisia 1940 only - Feb 25 23:00s 1:00 S @@ -1474,9 +1486,7 @@ Rule Tunisia 2006 2008 - Mar lastSun 2:00s 1:00 S Rule Tunisia 2006 2008 - Oct lastSun 2:00s 0 - -# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's -# more precise 0:09:21. -# Shanks & Pottenger say the 1911 switch was on Mar 9; go with Howse's Mar 11. +# See Europe/Paris for PMT-related transitions. # Zone NAME STDOFF RULES FORMAT [UNTIL] Zone Africa/Tunis 0:40:44 - LMT 1881 May 12 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
--- a/make/data/tzdata/antarctica Thu Nov 05 05:11:12 2020 +0000 +++ b/make/data/tzdata/antarctica Mon Nov 16 13:36:36 2020 +0000 @@ -93,15 +93,30 @@ # Australian Antarctica Division informed us that Casey changed time # zone to UTC+11 in "the morning of 22nd October 2016". +# From Steffen Thorsen (2020-10-02, as corrected): +# Based on information we have received from the Australian Antarctic +# Division, Casey station and Macquarie Island station will move to Tasmanian +# daylight savings time on Sunday 4 October. This will take effect from 0001 +# hrs on Sunday 4 October 2020 and will mean Casey and Macquarie Island will +# be on the same time zone as Hobart. Some past dates too for this 3 hour +# time change back and forth between UTC+8 and UTC+11 for Casey: +# - 2018 Oct 7 4:00 - 2019 Mar 17 3:00 - 2019 Oct 4 3:00 - 2020 Mar 8 3:00 +# and now - 2020 Oct 4 0:01 + # Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone Antarctica/Casey 0 - -00 1969 - 8:00 - +08 2009 Oct 18 2:00 +Zone Antarctica/Casey 0 - -00 1969 + 8:00 - +08 2009 Oct 18 2:00 11:00 - +11 2010 Mar 5 2:00 - 8:00 - +08 2011 Oct 28 2:00 + 8:00 - +08 2011 Oct 28 2:00 11:00 - +11 2012 Feb 21 17:00u - 8:00 - +08 2016 Oct 22 + 8:00 - +08 2016 Oct 22 11:00 - +11 2018 Mar 11 4:00 - 8:00 - +08 + 8:00 - +08 2018 Oct 7 4:00 + 11:00 - +11 2019 Mar 17 3:00 + 8:00 - +08 2019 Oct 4 3:00 + 11:00 - +11 2020 Mar 8 3:00 + 8:00 - +08 2020 Oct 4 0:01 + 11:00 - +11 Zone Antarctica/Davis 0 - -00 1957 Jan 13 7:00 - +07 1964 Nov 0 - -00 1969 Feb @@ -247,7 +262,7 @@ # suggested by Bengt-Inge Larsson comment them out for now, and approximate # with only UTC and CEST. Uncomment them when 2014b is more prevalent. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S #Rule Troll 2005 max - Mar 1 1:00u 1:00 +01 Rule Troll 2005 max - Mar lastSun 1:00u 2:00 +02 #Rule Troll 2005 max - Oct lastSun 1:00u 1:00 +01
--- a/make/data/tzdata/asia Thu Nov 05 05:11:12 2020 +0000 +++ b/make/data/tzdata/asia Mon Nov 16 13:36:36 2020 +0000 @@ -93,7 +93,7 @@ ############################################################################### # These rules are stolen from the 'europe' file. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - 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 - Rule EUAsia 1996 max - Oct lastSun 1:00u 0 - @@ -137,7 +137,7 @@ # or # (brief) # http://www.worldtimezone.com/dst_news/dst_news_armenia03.html -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Armenia 2011 only - Mar lastSun 2:00s 1:00 - Rule Armenia 2011 only - Oct lastSun 2:00s 0 - # Zone NAME STDOFF RULES FORMAT [UNTIL] @@ -163,7 +163,7 @@ # http://vestnikkavkaza.net/news/Azerbaijani-Cabinet-of-Ministers-cancels-daylight-saving-time.html # http://en.apa.az/xeber_azerbaijan_abolishes_daylight_savings_ti_240862.html -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Azer 1997 2015 - Mar lastSun 4:00 1:00 - Rule Azer 1997 2015 - Oct lastSun 5:00 0 - # Zone NAME STDOFF RULES FORMAT [UNTIL] @@ -250,7 +250,7 @@ # http://www.thedailystar.net/newDesign/latest_news.php?nid=22817 # http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Dhaka 2009 only - Jun 19 23:00 1:00 - Rule Dhaka 2009 only - Dec 31 24:00 0 - @@ -326,7 +326,7 @@ # generally esteemed a success, it was announced early in 1920 that it would # not be repeated." # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Shang 1919 only - Apr 12 24:00 1:00 D Rule Shang 1919 only - Sep 30 24:00 0 S @@ -422,7 +422,7 @@ # the Yangtze river delta area during that period of time although the scope # of such use will need to be investigated to determine. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Shang 1940 only - Jun 1 0:00 1:00 D Rule Shang 1940 only - Oct 12 24:00 0 S Rule Shang 1941 only - Mar 15 0:00 1:00 D @@ -485,7 +485,7 @@ # to begin on 17 April. # http://data.people.com.cn/pic/101p/1988/04/1988041201.jpg -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule PRC 1986 only - May 4 2:00 1:00 D Rule PRC 1986 1991 - Sep Sun>=11 2:00 0 S Rule PRC 1987 1991 - Apr Sun>=11 2:00 1:00 D @@ -869,7 +869,7 @@ # or dates for the 1942 and 1945 transitions. # The Japanese occupation of Hong Kong began 1941-12-25. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule HK 1946 only - Apr 21 0:00 1:00 S Rule HK 1946 only - Dec 1 3:30s 0 - Rule HK 1947 only - Apr 13 3:30s 1:00 S @@ -996,7 +996,7 @@ # 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 NAME FROM TO - IN ON AT SAVE LETTER/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 @@ -1122,7 +1122,7 @@ # The 1904 decree says that Macau changed from the meridian of # Fortaleza do Monte, presumably the basis for the 7:34:10 for LMT. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Macau 1942 1943 - Apr 30 23:00 1:00 - Rule Macau 1942 only - Nov 17 23:00 0 - Rule Macau 1943 only - Sep 30 23:00 0 S @@ -1180,7 +1180,7 @@ # Cyprus to remain united in time. Cyprus Mail 2017-10-17. # https://cyprus-mail.com/2017/10/17/cyprus-remain-united-time/ -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Cyprus 1975 only - Apr 13 0:00 1:00 S Rule Cyprus 1975 only - Oct 12 0:00 0 - Rule Cyprus 1976 only - May 15 0:00 1:00 S @@ -1557,7 +1557,7 @@ # be changed back to its previous state on the 24 hours of the # thirtieth day of Shahrivar. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Iran 1978 1980 - Mar 20 24:00 1:00 - Rule Iran 1978 only - Oct 20 24:00 0 - Rule Iran 1979 only - Sep 18 24:00 0 - @@ -1699,7 +1699,7 @@ # We have published a short article in English about the change: # https://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Iraq 1982 only - May 1 0:00 1:00 - Rule Iraq 1982 1984 - Oct 1 0:00 0 - Rule Iraq 1983 only - Mar 31 0:00 1:00 - @@ -1722,6 +1722,10 @@ # Israel +# For more info about the motivation for DST in Israel, see: +# Barak Y. Israel's Daylight Saving Time controversy. Israel Affairs. +# 2020-08-11. https://doi.org/10.1080/13537121.2020.1806564 + # From Ephraim Silverberg (2001-01-11): # # I coined "IST/IDT" circa 1988. Until then there were three @@ -1743,7 +1747,7 @@ # family is from India). # From Shanks & Pottenger: -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Zion 1940 only - Jun 1 0:00 1:00 D Rule Zion 1942 1944 - Nov 1 0:00 0 S Rule Zion 1943 only - Apr 1 2:00 1:00 D @@ -1835,7 +1839,7 @@ # (except in 2002) is three nights before Yom Kippur [Day of Atonement] # (the eve of the 7th of Tishrei in the lunar Hebrew calendar). -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Zion 1989 only - Apr 30 0:00 1:00 D Rule Zion 1989 only - Sep 3 0:00 0 S Rule Zion 1990 only - Mar 25 0:00 1:00 D @@ -1851,7 +1855,7 @@ # Ministry of Interior, Jerusalem, Israel. The spokeswoman can be reached by # calling the office directly at 972-2-6701447 or 972-2-6701448. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Zion 1994 only - Apr 1 0:00 1:00 D Rule Zion 1994 only - Aug 28 0:00 0 S Rule Zion 1995 only - Mar 31 0:00 1:00 D @@ -1871,7 +1875,7 @@ # # where YYYY is the relevant year. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Zion 1996 only - Mar 15 0:00 1:00 D Rule Zion 1996 only - Sep 16 0:00 0 S Rule Zion 1997 only - Mar 21 0:00 1:00 D @@ -1894,7 +1898,7 @@ # # ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2000-2004.ps.gz -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Zion 2000 only - Apr 14 2:00 1:00 D Rule Zion 2000 only - Oct 6 1:00 0 S Rule Zion 2001 only - Apr 9 1:00 1:00 D @@ -1916,7 +1920,7 @@ # # ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2005+beyond.ps -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Zion 2005 2012 - Apr Fri<=1 2:00 1:00 D Rule Zion 2005 only - Oct 9 2:00 0 S Rule Zion 2006 only - Oct 1 2:00 0 S @@ -1936,7 +1940,7 @@ # As of 2013, DST starts at 02:00 on the Friday before the last Sunday # in March. DST ends at 02:00 on the last Sunday of October. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Zion 2013 max - Mar Fri>=23 2:00 1:00 D Rule Zion 2013 max - Oct lastSun 2:00 0 S @@ -2036,7 +2040,7 @@ # do in any POSIX or C platform. The "25:00" assumes zic from 2007 or later, # which should be safe now. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Japan 1948 only - May Sat>=1 24:00 1:00 D Rule Japan 1948 1951 - Sep Sun>=9 1:00 0 S Rule Japan 1949 only - Apr Sat>=1 24:00 1:00 D @@ -2113,7 +2117,7 @@ # From Paul Eggert (2013-12-11): # As Steffen suggested, consider the past 21-month experiment to be DST. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Jordan 1973 only - Jun 6 0:00 1:00 S Rule Jordan 1973 1975 - Oct 1 0:00 0 - Rule Jordan 1974 1977 - May 1 0:00 1:00 S @@ -2439,7 +2443,7 @@ # Our government cancels daylight saving time 6th of August 2005. # From 2005-08-12 our GMT-offset is +6, w/o any daylight saving. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Kyrgyz 1992 1996 - Apr Sun>=7 0:00s 1:00 - Rule Kyrgyz 1992 1996 - Sep lastSun 0:00 0 - Rule Kyrgyz 1997 2005 - Mar lastSun 2:30 1:00 - @@ -2495,7 +2499,7 @@ # follow and continued to use GMT+9:00 for interoperability. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule ROK 1948 only - Jun 1 0:00 1:00 D Rule ROK 1948 only - Sep 12 24:00 0 S Rule ROK 1949 only - Apr 3 0:00 1:00 D @@ -2583,7 +2587,7 @@ # Lebanon -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Lebanon 1920 only - Mar 28 0:00 1:00 S Rule Lebanon 1920 only - Oct 25 0:00 0 - Rule Lebanon 1921 only - Apr 3 0:00 1:00 S @@ -2613,7 +2617,7 @@ 2:00 Lebanon EE%sT # Malaysia -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule NBorneo 1935 1941 - Sep 14 0:00 0:20 - Rule NBorneo 1935 1941 - Dec 14 0:00 0 - # @@ -2758,7 +2762,7 @@ # September daylight saving time ends. Source: # http://zasag.mn/news/view/8969 -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Mongol 1983 1984 - Apr 1 0:00 1:00 - Rule Mongol 1983 only - Oct 1 0:00 0 - # Shanks & Pottenger and IATA SSIM say 1990s switches occurred at 00:00, @@ -2946,7 +2950,7 @@ # "People laud PM's announcement to end DST" # http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=99374&Itemid=2 -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Pakistan 2002 only - Apr Sun>=2 0:00 1:00 S Rule Pakistan 2002 only - Oct Sun>=2 0:00 0 - Rule Pakistan 2008 only - Jun 1 0:00 1:00 S @@ -3248,7 +3252,7 @@ # From Tim Parenti (2016-10-19): # Predict fall transitions on October's last Saturday at 01:00 from now on. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule EgyptAsia 1957 only - May 10 0:00 1:00 S Rule EgyptAsia 1957 1958 - Oct 1 0:00 0 - Rule EgyptAsia 1958 only - May 1 0:00 1:00 S @@ -3348,7 +3352,7 @@ # influence of the sources. There is no current abbreviation for DST, # so use "PDT", the usual American style. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Phil 1936 only - Nov 1 0:00 1:00 D Rule Phil 1937 only - Feb 1 0:00 0 S Rule Phil 1954 only - Apr 12 0:00 1:00 D @@ -3496,7 +3500,7 @@ 5:30 - +0530 # Syria -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Syria 1920 1923 - Apr Sun>=15 2:00 1:00 S Rule Syria 1920 1923 - Oct Sun>=1 2:00 0 - Rule Syria 1962 only - Apr 29 2:00 1:00 S
--- a/make/data/tzdata/australasia Thu Nov 05 05:11:12 2020 +0000 +++ b/make/data/tzdata/australasia Mon Nov 16 13:36:36 2020 +0000 @@ -36,7 +36,7 @@ # 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 NAME FROM TO - IN ON AT SAVE LETTER/S 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 @@ -55,7 +55,7 @@ 9:30 Aus AC%sT # Western Australia # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S 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 @@ -93,7 +93,7 @@ # applies to all of the Whitsundays. # http://www.australia.gov.au/about-australia/australian-story/austn-islands # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S 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 @@ -109,7 +109,7 @@ 10:00 Holiday AE%sT # South Australia -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S 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 @@ -137,7 +137,7 @@ # 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 NAME FROM TO - IN ON AT SAVE LETTER/S 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 @@ -170,7 +170,7 @@ 10:00 AT AE%sT # Victoria -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S 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 @@ -191,7 +191,7 @@ 10:00 AV AE%sT # New South Wales -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S 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 @@ -220,7 +220,7 @@ 9:30 AS AC%sT # Lord Howe Island -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - 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 - @@ -275,8 +275,9 @@ 10:00 Aus AE%sT 1919 Apr 1 0:00s 0 - -00 1948 Mar 25 10:00 Aus AE%sT 1967 - 10:00 AT AE%sT 2010 Apr 4 3:00 - 11:00 - +11 + 10:00 AT AE%sT 2010 + 10:00 1:00 AEDT 2011 + 10:00 AT AE%sT # Christmas # Zone NAME STDOFF RULES FORMAT [UNTIL] @@ -403,7 +404,7 @@ # From Michael Deckers (2019-08-06): # https://www.laws.gov.fj/LawsAsMade/downloadfile/848 -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 - Rule Fiji 1999 2000 - Feb lastSun 3:00 0 - Rule Fiji 2009 only - Nov 29 2:00 1:00 - @@ -432,7 +433,7 @@ # Guam -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S # http://guamlegislature.com/Public_Laws_5th/PL05-025.pdf # http://documents.guam.gov/wp-content/uploads/E.O.-59-7-Guam-Daylight-Savings-Time-May-6-1959.pdf Rule Guam 1959 only - Jun 27 2:00 1:00 D @@ -543,7 +544,7 @@ 12:00 - +12 # New Caledonia -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule NC 1977 1978 - Dec Sun>=1 0:00 1:00 - Rule NC 1978 1979 - Feb 27 0:00 0 - Rule NC 1996 only - Dec 1 2:00s 1:00 - @@ -558,7 +559,7 @@ # New Zealand -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule NZ 1927 only - Nov 6 2:00 1:00 S Rule NZ 1928 only - Mar 4 2:00 0 M Rule NZ 1928 1933 - Oct Sun>=8 2:00 0:30 S @@ -610,7 +611,7 @@ # Cook Is # From Shanks & Pottenger: -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Cook 1978 only - Nov 12 0:00 0:30 - Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 - Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 - @@ -755,7 +756,7 @@ # That web page currently lists transitions for 2012/3 and 2013/4. # Assume the pattern instituted in 2012 will continue indefinitely. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule WS 2010 only - Sep lastSun 0:00 1 - Rule WS 2011 only - Apr Sat>=1 4:00 0 - Rule WS 2011 only - Sep lastSat 3:00 1 - @@ -799,7 +800,7 @@ 13:00 - +13 # Tonga -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Tonga 1999 only - Oct 7 2:00s 1:00 - Rule Tonga 2000 only - Mar 19 2:00s 0 - Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 - @@ -880,7 +881,7 @@ # Vanuatu -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Vanuatu 1983 only - Sep 25 0:00 1:00 - Rule Vanuatu 1984 1991 - Mar Sun>=23 0:00 0 - Rule Vanuatu 1984 only - Oct 23 0:00 1:00 -
--- a/make/data/tzdata/europe Thu Nov 05 05:11:12 2020 +0000 +++ b/make/data/tzdata/europe Mon Nov 16 13:36:36 2020 +0000 @@ -411,7 +411,7 @@ # http://www.irishstatutebook.ie/eli/1926/sro/919/made/en/print # http://www.irishstatutebook.ie/eli/1947/sro/71/made/en/print -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S # Summer Time Act, 1916 Rule GB-Eire 1916 only - May 21 2:00s 1:00 BST Rule GB-Eire 1916 only - Oct 1 2:00s 0 GMT @@ -552,7 +552,7 @@ # The following is like GB-Eire and EU, except with standard time in # summer and negative daylight saving time in winter. It is for when # negative SAVE values are used. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S #Rule Eire 1971 only - Oct 31 2:00u -1:00 - #Rule Eire 1972 1980 - Mar Sun>=16 2:00u 0 - #Rule Eire 1972 1980 - Oct Sun>=23 2:00u -1:00 - @@ -589,7 +589,7 @@ # predecessor organization, the European Communities. # For brevity they are called "EU rules" elsewhere in this file. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule EU 1977 1980 - Apr Sun>=1 1:00u 1:00 S Rule EU 1977 only - Sep lastSun 1:00u 0 - Rule EU 1978 only - Oct 1 1:00u 0 - @@ -629,13 +629,13 @@ # 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 +# Zone Europe/Paris ... # 0:00 France WE%sT 1945 Sep 16 3:00 # -# Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15 +# Zone Europe/Monaco ... # 0:00 France WE%sT 1945 Sep 16 3:00 # -# Zone Europe/Belgrade 1:22:00 - LMT 1884 +# Zone Europe/Belgrade ... # 1:00 1:00 CEST 1945 Sep 16 2:00s # # Rule France 1945 only - Sep 16 3:00 0 - @@ -681,7 +681,7 @@ # # The 1917-1921 decree URLs are from Alexander Belopolsky (2016-08-23). -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Russia 1917 only - Jul 1 23:00 1:00 MST # Moscow Summer Time # # Decree No. 142 (1917-12-22) http://istmat.info/node/28137 @@ -795,7 +795,7 @@ # Albania -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Albania 1940 only - Jun 16 0:00 1:00 S Rule Albania 1942 only - Nov 2 3:00 0 - Rule Albania 1943 only - Mar 29 2:00 1:00 S @@ -849,7 +849,7 @@ # In 1946 the end of DST was on Monday, 7 October 1946, at 3:00 am. # Shanks had this right. Source: Die Weltpresse, 5. Oktober 1946, page 5. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Austria 1920 only - Apr 5 2:00s 1:00 S Rule Austria 1920 only - Sep 13 2:00s 0 - Rule Austria 1946 only - Apr 14 2:00s 1:00 S @@ -936,7 +936,7 @@ # The 1918 rules are listed for completeness; they apply to unoccupied Belgium. # Assume Brussels switched to WET in 1918 when the armistice took effect. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Belgium 1918 only - Mar 9 0:00s 1:00 S Rule Belgium 1918 1919 - Oct Sat>=1 23:00s 0 - Rule Belgium 1919 only - Mar 1 23:00s 1:00 S @@ -996,7 +996,7 @@ # 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 NAME FROM TO - IN ON AT SAVE LETTER/S Rule Bulg 1979 only - Mar 31 23:00 1:00 S Rule Bulg 1979 only - Oct 1 1:00 0 - Rule Bulg 1980 1982 - Apr Sat>=1 23:00 1:00 S @@ -1028,7 +1028,7 @@ # We know of no English-language name for historical Czech winter time; # abbreviate it as "GMT", as it happened to be GMT. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Czech 1945 only - Apr Mon>=1 2:00s 1:00 S Rule Czech 1945 only - Oct 1 2:00s 0 - Rule Czech 1946 only - May 6 2:00s 1:00 S @@ -1084,7 +1084,7 @@ # Hence the "02:00" of the 1980 law refers to standard time, not # wall-clock time, and so the EU rules were in effect in 1980. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Denmark 1916 only - May 14 23:00 1:00 S Rule Denmark 1916 only - Sep 30 23:00 0 - Rule Denmark 1940 only - May 15 0:00 1:00 S @@ -1186,7 +1186,7 @@ # http://naalakkersuisut.gl/~/media/Nanoq/Files/Attached%20Files/Engelske-tekster/Legislation/Executive%20Order%20National%20Park.rtf # It is their only National Park. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Thule 1991 1992 - Mar lastSun 2:00 1:00 D Rule Thule 1991 1992 - Sep lastSun 2:00 0 S Rule Thule 1993 2006 - Apr Sun>=1 2:00 1:00 D @@ -1317,7 +1317,7 @@ # From Paul Eggert (2014-06-14): # Go with Oja over Shanks. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S 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 @@ -1349,10 +1349,58 @@ # Françoise Gauquelin, Problèmes de l'heure résolus en astrologie, # Guy Trédaniel, Paris 1987 +# From Michael Deckers (2020-06-11): +# the law of 1891 <https://gallica.bnf.fr/ark:/12148/bpt6k64415343.texteImage> +# was published on 1891-03-15, so it could only take force on 1891-03-16. + +# From Michael Deckers (2020-06-10): +# Le Gaulois, 1911-03-11, page 1/6, online at +# https://www.retronews.fr/societe/echo-de-presse/2018/01/29/1911-change-lheure-de-paris +# ... [ Instantly, all pressure driven clock dials halted... Nine minutes and +# twenty-one seconds later the hands resumed their circular motion. ] +# There are also precise reports about how the change was prepared in train +# stations: all the publicly visible clocks stopped at midnight railway time +# (or were covered), only the chief of service had a watch, labeled +# "Heure ancienne", that he kept running until it reached 00:04:21, when +# he announced "Heure nouvelle". See the "Le Petit Journal 1911-03-11". +# https://gallica.bnf.fr/ark:/12148/bpt6k6192911/f1.item.zoom +# +# From Michael Deckers (2020-06-12): +# That "all French clocks stopped" for 00:09:21 is a misreading of French +# newspapers; this sort of adjustment applies only to certain +# remote-controlled clocks ("pendules pneumatiques", of which there existed +# perhaps a dozen in Paris, and which simply could not be set back remotely), +# but not to all the clocks in all French towns and villages. For instance, +# the following story in the "Courrier de Saône-et-Loire" 1911-03-11, page 2: +# only works if legal time was stepped back (was not monotone): ... +# [One can observe that children who had been born at midnight less 5 +# minutes and who had died at midnight of the old time, would turn out to +# be dead before being born, time having been set back and having +# suppressed 9 minutes and 25 seconds of their existence, that is, more +# than they could spend.] +# +# From Paul Eggert (2020-06-12): +# French time in railway stations was legally five minutes behind civil time, +# which explains why railway "old time" ran to 00:04:21 instead of to 00:09:21. +# The law's text (which Michael Deckers noted is at +# <https://gallica.bnf.fr/ark:/12148/bpt6k2022333z/f2>) says only that +# at 1911-03-11 00:00 legal time was that of Paris mean time delayed by +# nine minutes and twenty-one seconds, and does not say how the +# transition from Paris mean time was to occur. +# +# tzdb has no way to represent stopped clocks. As the railway practice +# was to keep a watch running on "old time" to decide when to restart +# the other clocks, this could be modeled as a transition for "old time" at +# 00:09:21. However, since the law was ambiguous and clocks outside railway +# stations were probably done haphazardly with the popular impression being +# that the transition was done at 00:00 "old time", simply leave the time +# blank; this causes zic to default to 00:00 "old time" which is good enough. +# Do something similar for the 1891-03-16 transition. There are similar +# problems in Algiers, Monaco and Tunis. # # Shank & Pottenger seem to use '24:00' ambiguously; resolve it with Whitman. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule France 1916 only - Jun 14 23:00s 1:00 S Rule France 1916 1919 - Oct Sun>=1 23:00s 0 - Rule France 1917 only - Mar 24 23:00s 1:00 S @@ -1412,13 +1460,11 @@ # go with Excoffier's 28/3/76 0hUT and 25/9/76 23hUT. Rule France 1976 only - Mar 28 1:00 1:00 S Rule France 1976 only - Sep 26 1:00 0 - -# Shanks & Pottenger give 0:09:20 for Paris Mean Time, and Whitman 0:09:05, -# but Howse quotes the actual French legislation as saying 0:09:21. -# Go with Howse. Howse writes that the time in France was officially based +# Howse writes that the time in France was officially based # on PMT-0:09:21 until 1978-08-09, when the time base finally switched to UTC. # Zone NAME STDOFF 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 +Zone Europe/Paris 0:09:21 - LMT 1891 Mar 16 + 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time # 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; @@ -1447,7 +1493,7 @@ # this was equivalent to UT +03, not +04. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Germany 1946 only - Apr 14 2:00s 1:00 S Rule Germany 1946 only - Oct 7 2:00s 0 - Rule Germany 1947 1949 - Oct Sun>=1 2:00s 0 - @@ -1499,7 +1545,7 @@ 1:00 EU CE%sT # Greece -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S # Whitman gives 1932 Jul 5 - Nov 1; go with Shanks & Pottenger. Rule Greece 1932 only - Jul 7 0:00 1:00 S Rule Greece 1932 only - Sep 1 0:00 0 - @@ -1534,38 +1580,69 @@ 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 16 3:00 0 - -Rule Hungary 1919 only - Apr 15 3:00 1:00 S -Rule Hungary 1919 only - Nov 24 3:00 0 - + +# From Michael Deckers (2020-06-09): +# an Austrian encyclopedia of railroads of 1913, online at +# http://www.zeno.org/Roell-1912/A/Eisenbahnzeit +# says that the switch [to CET] happened on 1890-11-01. + +# From Géza Nyáry (2020-06-07): +# Data for 1918-1983 are based on the archive database of Library Hungaricana. +# The dates are collected from original, scanned governmental orders, +# bulletins, instructions and public press. +# [See URLs below.] + +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S +# https://library.hungaricana.hu/hu/view/OGYK_RT_1918/?pg=238 +# https://library.hungaricana.hu/hu/view/OGYK_RT_1919/?pg=808 +# https://library.hungaricana.hu/hu/view/OGYK_RT_1920/?pg=201 +Rule Hungary 1918 1919 - Apr 15 2:00 1:00 S +Rule Hungary 1918 1920 - Sep Mon>=15 3:00 0 - +Rule Hungary 1920 only - Apr 5 2:00 1:00 S +# https://library.hungaricana.hu/hu/view/OGYK_RT_1945/?pg=882 Rule Hungary 1945 only - May 1 23:00 1:00 S -Rule Hungary 1945 only - Nov 1 0:00 0 - +Rule Hungary 1945 only - Nov 1 1:00 0 - +# https://library.hungaricana.hu/hu/view/Delmagyarorszag_1946_03/?pg=49 Rule Hungary 1946 only - Mar 31 2:00s 1:00 S -Rule Hungary 1946 1949 - Oct Sun>=1 2:00s 0 - +# https://library.hungaricana.hu/hu/view/Delmagyarorszag_1946_09/?pg=54 +Rule Hungary 1946 only - Oct 7 2:00 0 - +# https://library.hungaricana.hu/hu/view/KulfBelfHirek_1947_04_1__001-123/?pg=90 +# https://library.hungaricana.hu/hu/view/DunantuliNaplo_1947_09/?pg=128 +# https://library.hungaricana.hu/hu/view/KulfBelfHirek_1948_03_3__001-123/?pg=304 +# https://library.hungaricana.hu/hu/view/Zala_1948_09/?pg=64 +# https://library.hungaricana.hu/hu/view/SatoraljaujhelyiLeveltar_ZempleniNepujsag_1948/?pg=53 +# https://library.hungaricana.hu/hu/view/SatoraljaujhelyiLeveltar_ZempleniNepujsag_1948/?pg=160 +# https://library.hungaricana.hu/hu/view/Delmagyarorszag_1949_09/?pg=94 Rule Hungary 1947 1949 - Apr Sun>=4 2:00s 1:00 S -Rule Hungary 1950 only - Apr 17 2:00s 1:00 S -Rule Hungary 1950 only - Oct 23 2:00s 0 - -Rule Hungary 1954 1955 - May 23 0:00 1:00 S -Rule Hungary 1954 1955 - Oct 3 0:00 0 - -Rule Hungary 1956 only - Jun Sun>=1 0:00 1:00 S -Rule Hungary 1956 only - Sep lastSun 0:00 0 - -Rule Hungary 1957 only - Jun Sun>=1 1:00 1:00 S -Rule Hungary 1957 only - Sep lastSun 3:00 0 - -Rule Hungary 1980 only - Apr 6 1:00 1:00 S +Rule Hungary 1947 1949 - Oct Sun>=1 2:00s 0 - +# https://library.hungaricana.hu/hu/view/DTT_KOZL_TanacsokKozlonye_1954/?pg=513 +Rule Hungary 1954 only - May 23 0:00 1:00 S +Rule Hungary 1954 only - Oct 3 0:00 0 - +# https://library.hungaricana.hu/hu/view/DTT_KOZL_TanacsokKozlonye_1955/?pg=398 +Rule Hungary 1955 only - May 22 2:00 1:00 S +Rule Hungary 1955 only - Oct 2 3:00 0 - +# https://library.hungaricana.hu/hu/view/HevesMegyeiNepujsag_1956_06/?pg=0 +# https://library.hungaricana.hu/hu/view/EszakMagyarorszag_1956_06/?pg=6 +# https://library.hungaricana.hu/hu/view/SzolnokMegyeiNeplap_1957_04/?pg=120 +# https://library.hungaricana.hu/hu/view/PestMegyeiHirlap_1957_09/?pg=143 +Rule Hungary 1956 1957 - Jun Sun>=1 2:00 1:00 S +Rule Hungary 1956 1957 - Sep lastSun 3:00 0 - +# https://library.hungaricana.hu/hu/view/DTT_KOZL_TanacsokKozlonye_1980/?pg=1227 +Rule Hungary 1980 only - Apr 6 0:00 1:00 S +Rule Hungary 1980 only - Sep 28 1:00 0 - +# https://library.hungaricana.hu/hu/view/Delmagyarorszag_1981_01/?pg=79 +# https://library.hungaricana.hu/hu/view/DTT_KOZL_TanacsokKozlonye_1982/?pg=115 +# https://library.hungaricana.hu/hu/view/DTT_KOZL_TanacsokKozlonye_1983/?pg=85 +Rule Hungary 1981 1983 - Mar lastSun 0:00 1:00 S +Rule Hungary 1981 1983 - Sep lastSun 1:00 0 - +# # Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone Europe/Budapest 1:16:20 - LMT 1890 Oct +Zone Europe/Budapest 1:16:20 - LMT 1890 Nov 1 1:00 C-Eur CE%sT 1918 - 1:00 Hungary CE%sT 1941 Apr 8 +# https://library.hungaricana.hu/hu/view/OGYK_RT_1941/?pg=1204 + 1:00 Hungary CE%sT 1941 Apr 7 23:00 1:00 C-Eur CE%sT 1945 - 1:00 Hungary CE%sT 1980 Sep 28 2:00s + 1:00 Hungary CE%sT 1984 1:00 EU CE%sT # Iceland @@ -1601,7 +1678,7 @@ # The information below is taken from the 1988 Almanak; see # http://www.almanak.hi.is/klukkan.html # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Iceland 1917 1919 - Feb 19 23:00 1:00 - Rule Iceland 1917 only - Oct 21 1:00 0 - Rule Iceland 1918 1919 - Nov 16 1:00 0 - @@ -1693,7 +1770,7 @@ # to 1944-06-04; although Rome was an open city during this period, it # was effectively controlled by Germany. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Italy 1916 only - Jun 3 24:00 1:00 S Rule Italy 1916 1917 - Sep 30 24:00 0 - Rule Italy 1917 only - Mar 31 24:00 1:00 S @@ -1803,7 +1880,7 @@ # urged Lithuania and Estonia to adopt a similar time policy, but it # appears that they will not do so.... -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - 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 - @@ -1896,7 +1973,7 @@ # Luxembourg # Whitman disagrees with most of these dates in minor ways; # go with Shanks & Pottenger. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Lux 1916 only - May 14 23:00 1:00 S Rule Lux 1916 only - Oct 1 1:00 0 - Rule Lux 1917 only - Apr 28 23:00 1:00 S @@ -1937,7 +2014,7 @@ # From Paul Eggert (2016-10-21): # Assume 1900-1972 was like Rome, overriding Shanks. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Malta 1973 only - Mar 31 0:00s 1:00 S Rule Malta 1973 only - Sep 29 0:00s 0 - Rule Malta 1974 only - Apr 21 0:00s 1:00 S @@ -2010,7 +2087,7 @@ # says the 2014-03-30 spring-forward transition was at 02:00 local time. # Guess that since 1997 Moldova has switched one hour before the EU. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Moldova 1997 max - Mar lastSun 2:00 1:00 S Rule Moldova 1997 max - Oct lastSun 3:00 0 - @@ -2028,11 +2105,24 @@ 2:00 Moldova EE%sT # Monaco -# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's -# more precise 0:09:21. +# +# From Michael Deckers (2020-06-12): +# In the "Journal de Monaco" of 1892-05-24, online at +# https://journaldemonaco.gouv.mc/var/jdm/storage/original/application/b1c67c12c5af11b41ea888fb048e4fe8.pdf +# we read: ... +# [In virtue of a Sovereign Ordinance of the May 13 of the current [year], +# legal time in the Principality will be set to, from the date of June 1, +# 1892 onwards, to the meridian of Paris, as in France.] +# In the "Journal de Monaco" of 1911-03-28, online at +# https://journaldemonaco.gouv.mc/var/jdm/storage/original/application/de74ffb7db53d4f599059fe8f0ed482a.pdf +# we read an ordinance of 1911-03-16: ... +# [Legal time in the Principality will be set, from the date of promulgation +# of the present ordinance, to legal time in France.... Consequently, legal +# time will be retarded by 9 minutes and 21 seconds.] +# # Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15 - 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time +Zone Europe/Monaco 0:29:32 - LMT 1892 Jun 1 + 0:09:21 - PMT 1911 Mar 29 # Paris Mean Time 0:00 France WE%sT 1945 Sep 16 3:00 1:00 France CE%sT 1977 1:00 EU CE%sT @@ -2080,7 +2170,7 @@ # The data entries before 1945 are taken from # https://www.staff.science.uu.nl/~gent0113/wettijd/wettijd.htm -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Neth 1916 only - May 1 0:00 1:00 NST # Netherlands Summer Time Rule Neth 1916 only - Oct 1 0:00 0 AMT # Amsterdam Mean Time Rule Neth 1917 only - Apr 16 2:00s 1:00 NST @@ -2117,7 +2207,7 @@ # Norway # http://met.no/met/met_lex/q_u/sommertid.html (2004-01) agrees with Shanks & # Pottenger. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Norway 1916 only - May 22 1:00 1:00 S Rule Norway 1916 only - Sep 30 0:00 0 - Rule Norway 1945 only - Apr 2 2:00s 1:00 S @@ -2186,7 +2276,7 @@ # 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 NAME FROM TO - 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 Rule Poland 1944 only - Apr 3 2:00s 1:00 S @@ -2257,7 +2347,7 @@ # Guess that the Azores changed to EU rules in 1992 (since that's when Portugal # harmonized with EU rules), and that they stayed +0:00 that winter. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S # DSH writes that despite Decree 1,469 (1915), the change to the clocks was not # done every year, depending on what Spain did, because of railroad schedules. # Go with Shanks & Pottenger. @@ -2370,7 +2460,7 @@ # assume that Romania and Moldova switched to EU rules in 1997, # the same year as Bulgaria. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Romania 1932 only - May 21 0:00s 1:00 S Rule Romania 1932 1939 - Oct Sun>=1 0:00s 0 - Rule Romania 1933 1939 - Apr Sun>=2 0:00s 1:00 S @@ -3468,14 +3558,14 @@ # fallback transition from the next day's 00:59... to 00:00. # From Michael Deckers (2016-12-15): -# The Royal Decree of 1900-06-26 quoted by Planesas, online at +# The Royal Decree of 1900-07-26 quoted by Planesas, online at # https://www.boe.es/datos/pdfs/BOE//1900/209/A00383-00384.pdf # says in its article 5 (my translation): # These dispositions will enter into force beginning with the # instant at which, according to the time indicated in article 1, # the 1st day of January of 1901 will begin. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Spain 1918 only - Apr 15 23:00 1:00 S Rule Spain 1918 1919 - Oct 6 24:00s 0 - Rule Spain 1919 only - Apr 6 23:00 1:00 S @@ -3612,7 +3702,7 @@ # 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 .... -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S # From Whitman (who writes "Midnight?"): # Rule Swiss 1940 only - Nov 2 0:00 1:00 S # Rule Swiss 1940 only - Dec 31 0:00 0 - @@ -3699,7 +3789,7 @@ # 1853-07-16, though it probably occurred at some other date in Zurich, and # legal civil time probably changed at still some other transition date. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Swiss 1941 1942 - May Mon>=1 1:00 1:00 S Rule Swiss 1941 1942 - Oct Mon>=1 2:00 0 - # Zone NAME STDOFF RULES FORMAT [UNTIL] @@ -3848,7 +3938,7 @@ # Although Google Translate misfires on that source, it looks like # Turkey reversed last month's decision, and so will stay at +03. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Turkey 1916 only - May 1 0:00 1:00 S Rule Turkey 1916 only - Oct 1 0:00 0 - Rule Turkey 1920 only - Mar 28 0:00 1:00 S @@ -4006,7 +4096,7 @@ 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. +# Transcarpathia used CET 1990/1991. # "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
--- a/make/data/tzdata/leapseconds Thu Nov 05 05:11:12 2020 +0000 +++ b/make/data/tzdata/leapseconds Mon Nov 16 13:36:36 2020 +0000 @@ -91,11 +91,11 @@ # Any additional leap seconds will come after this. # This Expires line is commented out for now, # so that pre-2020a zic implementations do not reject this file. -#Expires 2020 Dec 28 00:00:00 +#Expires 2021 Jun 28 00:00:00 # POSIX timestamps for the data in this file: #updated 1467936000 (2016-07-08 00:00:00 UTC) -#expires 1609113600 (2020-12-28 00:00:00 UTC) +#expires 1624838400 (2021-06-28 00:00:00 UTC) -# Updated through IERS Bulletin C59 -# File expires on: 28 December 2020 +# Updated through IERS Bulletin C60 +# File expires on: 28 June 2021
--- a/make/data/tzdata/northamerica Thu Nov 05 05:11:12 2020 +0000 +++ b/make/data/tzdata/northamerica Mon Nov 16 13:36:36 2020 +0000 @@ -193,7 +193,7 @@ # U.S. government action. So even though the "US" rules have changed # in the latest release, other countries won't be affected. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule US 1918 1919 - Mar lastSun 2:00 1:00 D Rule US 1918 1919 - Oct lastSun 2:00 0 S Rule US 1942 only - Feb 9 2:00 1:00 W # War @@ -370,7 +370,7 @@ # 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 NAME FROM TO - 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 Rule NYC 1921 1966 - Apr lastSun 2:00 1:00 D @@ -454,7 +454,7 @@ # The Tennessean 2007-05-11, republished 2015-04-06. # https://www.tennessean.com/story/insider/extras/2015/04/06/archives-seigenthaler-for-100-years-the-tennessean-had-it-covered/25348545/ -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Chicago 1920 only - Jun 13 2:00 1:00 D Rule Chicago 1920 1921 - Oct lastSun 2:00 0 S Rule Chicago 1921 only - Mar lastSun 2:00 1:00 D @@ -523,7 +523,7 @@ # El Paso Times. 2018-10-24 06:40 -06. # https://www.elpasotimes.com/story/news/local/el-paso/2018/10/24/el-pasoans-were-time-rebels-fought-stay-mountain-zone/1744509002/ # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Denver 1920 1921 - Mar lastSun 2:00 1:00 D Rule Denver 1920 only - Oct lastSun 2:00 0 S Rule Denver 1921 only - May 22 2:00 0 S @@ -576,7 +576,7 @@ # https://repository.uchastings.edu/cgi/viewcontent.cgi?article=1501&context=ca_ballot_props # https://repository.uchastings.edu/cgi/viewcontent.cgi?article=1636&context=ca_ballot_props # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule CA 1948 only - Mar 14 2:01 1:00 D Rule CA 1949 only - Jan 1 2:00 0 S Rule CA 1950 1966 - Apr lastSun 1:00 1:00 D @@ -934,7 +934,7 @@ # going to switch from Central to Eastern Time on March 11, 2007.... # http://www.indystar.com/apps/pbcs.dll/article?AID=/20070207/LOCAL190108/702070524/0/LOCAL -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Indianapolis 1941 only - Jun 22 2:00 1:00 D Rule Indianapolis 1941 1954 - Sep lastSun 2:00 0 S Rule Indianapolis 1946 1954 - Apr lastSun 2:00 1:00 D @@ -953,7 +953,7 @@ # # Eastern Crawford County, Indiana, left its clocks alone in 1974, # as well as from 1976 through 2005. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Marengo 1951 only - Apr lastSun 2:00 1:00 D Rule Marengo 1951 only - Sep lastSun 2:00 0 S Rule Marengo 1954 1960 - Apr lastSun 2:00 1:00 D @@ -972,7 +972,7 @@ # Daviess, Dubois, Knox, and Martin Counties, Indiana, # switched from eastern to central time in April 2006, then switched back # in November 2007. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Vincennes 1946 only - Apr lastSun 2:00 1:00 D Rule Vincennes 1946 only - Sep lastSun 2:00 0 S Rule Vincennes 1953 1954 - Apr lastSun 2:00 1:00 D @@ -997,7 +997,7 @@ # The Indianapolis News, Friday 27 October 1967 states that Perry County # returned to CST. It went again to EST on 27 April 1969, as documented by the # Indianapolis star of Saturday 26 April. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Perry 1955 only - May 1 0:00 1:00 D Rule Perry 1955 1960 - Sep lastSun 2:00 0 S Rule Perry 1956 1963 - Apr lastSun 2:00 1:00 D @@ -1014,7 +1014,7 @@ # # Pike County, Indiana moved from central to eastern time in 1977, # then switched back in 2006, then switched back again in 2007. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Pike 1955 only - May 1 0:00 1:00 D Rule Pike 1955 1960 - Sep lastSun 2:00 0 S Rule Pike 1956 1964 - Apr lastSun 2:00 1:00 D @@ -1035,7 +1035,7 @@ # An article on page A3 of the Sunday, 1991-10-27 Washington Post # notes that Starke County switched from Central time to Eastern time as of # 1991-10-27. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Starke 1947 1961 - Apr lastSun 2:00 1:00 D Rule Starke 1947 1954 - Sep lastSun 2:00 0 S Rule Starke 1955 1956 - Oct lastSun 2:00 0 S @@ -1052,7 +1052,7 @@ # # Pulaski County, Indiana, switched from eastern to central time in # April 2006 and then switched back in March 2007. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Pulaski 1946 1960 - Apr lastSun 2:00 1:00 D Rule Pulaski 1946 1954 - Sep lastSun 2:00 0 S Rule Pulaski 1955 1956 - Oct lastSun 2:00 0 S @@ -1094,7 +1094,7 @@ # # Part of Kentucky left its clocks alone in 1974. # This also includes Clark, Floyd, and Harrison counties in Indiana. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Louisville 1921 only - May 1 2:00 1:00 D Rule Louisville 1921 only - Sep 1 2:00 0 S Rule Louisville 1941 only - Apr lastSun 2:00 1:00 D @@ -1208,7 +1208,7 @@ # election Michigan voters narrowly repealed DST, effective 1969. # # Most of Michigan observed DST from 1973 on, but was a bit late in 1975. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Detroit 1948 only - Apr lastSun 2:00 1:00 D Rule Detroit 1948 only - Sep lastSun 2:00 0 S # Zone NAME STDOFF RULES FORMAT [UNTIL] @@ -1225,7 +1225,7 @@ # # Dickinson, Gogebic, Iron, and Menominee Counties, Michigan, # switched from EST to CST/CDT in 1973. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Menominee 1946 only - Apr lastSun 2:00 1:00 D Rule Menominee 1946 only - Sep lastSun 2:00 0 S Rule Menominee 1966 only - Apr lastSun 2:00 1:00 D @@ -1395,7 +1395,7 @@ # Oct 31, to Oct 27, 1918 (and Sunday is a more likely transition day # than Thursday) in all Canadian rulesets. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Canada 1918 only - Apr 14 2:00 1:00 D Rule Canada 1918 only - Oct 27 2:00 0 S Rule Canada 1942 only - Feb 9 2:00 1:00 W # War @@ -1418,7 +1418,7 @@ # that follows the rules is the southeast corner, including Port Hope # Simpson and Mary's Harbour, but excluding, say, Black Tickle. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule StJohns 1917 only - Apr 8 2:00 1:00 D Rule StJohns 1917 only - Sep 17 2:00 0 S # Whitman gives 1919 Apr 5 and 1920 Apr 5; go with Shanks & Pottenger. @@ -1520,7 +1520,7 @@ # bill say that it is "accommodating the customs and practices" of those # regions, which suggests that they have always been in-line with Halifax. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Halifax 1916 only - Apr 1 0:00 1:00 D Rule Halifax 1916 only - Oct 1 0:00 0 S Rule Halifax 1920 only - May 9 0:00 1:00 D @@ -1586,7 +1586,7 @@ # clear that this was the case since at least 1993. # For now, assume it started in 1993. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Moncton 1933 1935 - Jun Sun>=8 1:00 1:00 D Rule Moncton 1933 1935 - Sep Sun>=8 1:00 0 S Rule Moncton 1936 1938 - Jun Sun>=1 1:00 1:00 D @@ -1795,7 +1795,7 @@ # With some exceptions, the use of daylight saving may be said to be limited # to those cities and towns lying between Quebec city and Windsor, Ont. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Toronto 1919 only - Mar 30 23:30 1:00 D Rule Toronto 1919 only - Oct 26 0:00 0 S Rule Toronto 1920 only - May 2 2:00 1:00 D @@ -1893,7 +1893,7 @@ # starting 1966. Since 02:00s is clearly correct for 1967 on, assume # it was also 02:00s in 1966. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Winn 1916 only - Apr 23 0:00 1:00 D Rule Winn 1916 only - Sep 17 0:00 0 S Rule Winn 1918 only - Apr 14 2:00 1:00 D @@ -1984,7 +1984,7 @@ # long and rather painful to read. # http://www.qp.gov.sk.ca/documents/English/Statutes/Statutes/T14.pdf -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Regina 1918 only - Apr 14 2:00 1:00 D Rule Regina 1918 only - Oct 27 2:00 0 S Rule Regina 1930 1934 - May Sun>=1 0:00 1:00 D @@ -2034,7 +2034,7 @@ # Boyer JP. Forcing Choice: The Risky Reward of Referendums. Dundum. 2017. # ISBN 978-1459739123. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Edm 1918 1919 - Apr Sun>=8 2:00 1:00 D Rule Edm 1918 only - Oct 27 2:00 0 S Rule Edm 1919 only - May 27 2:00 0 S @@ -2143,7 +2143,7 @@ # https://searcharchives.vancouver.ca/daylight-saving-1918-starts-again-july-7-1941-start-d-s-sept-27-end-of-d-s-1941 # We have no further details, so omit them for now. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Vanc 1918 only - Apr 14 2:00 1:00 D Rule Vanc 1918 only - Oct 27 2:00 0 S Rule Vanc 1942 only - Feb 9 2:00 1:00 W # War @@ -2472,7 +2472,19 @@ # consistency with nearby Dawson Creek, Creston, and Fort Nelson. # https://yukon.ca/en/news/yukon-end-seasonal-time-change -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# From Andrew G. Smith (2020-09-24): +# Yukon has completed its regulatory change to be on UTC -7 year-round.... +# http://www.gov.yk.ca/legislation/regs/oic2020_125.pdf +# What we have done is re-defined Yukon Standard Time, as we are +# authorized to do under section 33 of our Interpretation Act: +# http://www.gov.yk.ca/legislation/acts/interpretation_c.pdf +# +# From Paul Eggert (2020-09-24): +# tzdb uses the obsolete YST abbreviation for standard time in Yukon through +# about 1970, and uses PST for standard time in Yukon since then. Consistent +# with that, use MST for -07, the new standard time in Yukon effective Nov. 1. + +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule NT_YK 1918 only - Apr 14 2:00 1:00 D Rule NT_YK 1918 only - Oct 27 2:00 0 S Rule NT_YK 1919 only - May 25 2:00 1:00 D @@ -2526,12 +2538,12 @@ Zone America/Whitehorse -9:00:12 - LMT 1900 Aug 20 -9:00 NT_YK Y%sT 1967 May 28 0:00 -8:00 NT_YK P%sT 1980 - -8:00 Canada P%sT 2020 Mar 8 2:00 + -8:00 Canada P%sT 2020 Nov 1 -7:00 - MST Zone America/Dawson -9:17:40 - LMT 1900 Aug 20 -9:00 NT_YK Y%sT 1973 Oct 28 0:00 -8:00 NT_YK P%sT 1980 - -8:00 Canada P%sT 2020 Mar 8 2:00 + -8:00 Canada P%sT 2020 Nov 1 -7:00 - MST @@ -2746,7 +2758,7 @@ # 5- The islands, reefs and keys shall take their timezone from the # longitude they are located at. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Mexico 1939 only - Feb 5 0:00 1:00 D Rule Mexico 1939 only - Jun 25 0:00 0 S Rule Mexico 1940 only - Dec 9 0:00 1:00 D @@ -2951,7 +2963,7 @@ # rules to sync with the U.S. starting in 2007.... # http://www.jonesbahamas.com/?c=45&a=10412 -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Bahamas 1964 1975 - Oct lastSun 2:00 0 S Rule Bahamas 1964 1975 - Apr lastSun 2:00 1:00 D # Zone NAME STDOFF RULES FORMAT [UNTIL] @@ -2963,7 +2975,7 @@ # For 1899 Milne gives -3:58:29.2; round that. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Barb 1977 only - Jun 12 2:00 1:00 D Rule Barb 1977 1978 - Oct Sun>=1 2:00 0 S Rule Barb 1978 1980 - Apr Sun>=15 2:00 1:00 D @@ -2976,7 +2988,7 @@ # Belize # Whitman entirely disagrees with Shanks; go with Shanks & Pottenger. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Belize 1918 1942 - Oct Sun>=2 0:00 0:30 -0530 Rule Belize 1919 1943 - Feb Sun>=9 0:00 0 CST Rule Belize 1973 only - Dec 5 0:00 1:00 CDT @@ -3013,7 +3025,7 @@ # 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 NAME FROM TO - IN ON AT SAVE LETTER/S Rule CR 1979 1980 - Feb lastSun 0:00 1:00 D Rule CR 1979 1980 - Jun Sun>=1 0:00 0 S Rule CR 1991 1992 - Jan Sat>=15 0:00 1:00 D @@ -3187,7 +3199,7 @@ # From Paul Eggert (2012-11-03): # For now, assume the future rule is first Sunday in November. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Cuba 1928 only - Jun 10 0:00 1:00 D Rule Cuba 1928 only - Oct 10 0:00 0 S Rule Cuba 1940 1942 - Jun Sun>=1 0:00 1:00 D @@ -3256,7 +3268,7 @@ # decided to revert. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule DR 1966 only - Oct 30 0:00 1:00 EDT Rule DR 1967 only - Feb 28 0:00 0 EST Rule DR 1969 1973 - Oct lastSun 0:00 0:30 -0430 @@ -3273,7 +3285,7 @@ # El Salvador -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Salv 1987 1988 - May Sun>=1 0:00 1:00 D Rule Salv 1987 1988 - Sep lastSun 0:00 0 S # There are too many San Salvadors elsewhere, so use America/El_Salvador @@ -3302,7 +3314,7 @@ # (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 -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Guat 1973 only - Nov 25 0:00 1:00 D Rule Guat 1974 only - Feb 24 0:00 0 S Rule Guat 1983 only - May 21 0:00 1:00 D @@ -3383,7 +3395,7 @@ # I have not been able to find a more authoritative source: # https://www.haitilibre.com/en/news-20319-haiti-notices-time-change-in-haiti.html -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Haiti 1983 only - May 8 0:00 1:00 D Rule Haiti 1984 1987 - Apr lastSun 0:00 1:00 D Rule Haiti 1983 1987 - Oct lastSun 0:00 0 S @@ -3431,7 +3443,7 @@ # http://www.laprensahn.com/pais_nota.php?id04962=7386 # So it seems that Honduras will not enter DST this year.... -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Hond 1987 1988 - May Sun>=1 0:00 1:00 D Rule Hond 1987 1988 - Sep lastSun 0:00 0 S Rule Hond 2006 only - May Sun>=1 0:00 1:00 D @@ -3522,7 +3534,7 @@ # The natural sun time is restored in all the national territory, in that the # time is returned one hour at 01:00 am of October 1 of 2006. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Nic 1979 1980 - Mar Sun>=16 0:00 1:00 D Rule Nic 1979 1980 - Jun Mon>=23 0:00 0 S Rule Nic 2005 only - Apr 10 0:00 1:00 D
--- a/make/data/tzdata/pacificnew Thu Nov 05 05:11:12 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -# -# 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. -# -# tzdb data for proposed US election time (this file is obsolete) - -# This file is in the public domain, so clarified as of -# 2009-05-17 by Arthur David Olson. - -# From Arthur David Olson (1989-04-05): -# On 1989-04-05, the U. S. House of Representatives passed (238-154) a bill -# establishing "Pacific Presidential Election Time"; it was not acted on -# by the Senate or signed into law by the President. -# You might want to change the "PE" (Presidential Election) below to -# "Q" (Quadrennial) to maintain three-character zone abbreviations. -# If you're really conservative, you might want to change it to "D". -# Avoid "L" (Leap Year), which won't be true in 2100. - -# If Presidential Election Time is ever established, replace "XXXX" below -# with the year the law takes effect and uncomment the "##" lines. - -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S -## Rule Twilite XXXX max - Apr Sun>=1 2:00 1:00 D -## Rule Twilite XXXX max uspres Oct lastSun 2:00 1:00 PE -## Rule Twilite XXXX max uspres Nov Sun>=7 2:00 0 S -## Rule Twilite XXXX max nonpres Oct lastSun 2:00 0 S - -# Zone NAME STDOFF RULES/SAVE FORMAT [UNTIL] -## Zone America/Los_Angeles-PET -8:00 US P%sT XXXX -## -8:00 Twilite P%sT - -# For now... -Link America/Los_Angeles US/Pacific-New ##
--- a/make/data/tzdata/southamerica Thu Nov 05 05:11:12 2020 +0000 +++ b/make/data/tzdata/southamerica Mon Nov 16 13:36:36 2020 +0000 @@ -71,7 +71,7 @@ # I am sending modifications to the Argentine time zone table... # AR was chosen because they are the ISO letters that represent Argentina. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Arg 1930 only - Dec 1 0:00 1:00 - Rule Arg 1931 only - Apr 1 0:00 0 - Rule Arg 1931 only - Oct 15 0:00 1:00 - @@ -792,7 +792,7 @@ # From Paul Eggert (2013-10-17): # For now, assume western Amazonas will change as well. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S # 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 - @@ -1281,7 +1281,7 @@ # For now, assume that they will not revert, # since they have extended the expiration date once already. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Chile 1927 1931 - Sep 1 0:00 1:00 - Rule Chile 1928 1932 - Apr 1 0:00 0 - Rule Chile 1968 only - Nov 3 4:00u 1:00 - @@ -1381,7 +1381,7 @@ # 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 +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule CO 1992 only - May 3 0:00 1:00 - Rule CO 1993 only - Apr 4 0:00 0 - # Zone NAME STDOFF RULES FORMAT [UNTIL] @@ -1441,7 +1441,7 @@ # (Not one step back), the clocks went back in 1993 and the experiment was not # repeated. For now, assume transitions were at 00:00 local time country-wide. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Ecuador 1992 only - Nov 28 0:00 1:00 - Rule Ecuador 1993 only - Feb 5 0:00 0 - # @@ -1535,7 +1535,7 @@ # For now we will assume permanent -03 for the Falklands # until advised differently (to apply for 2012 and beyond, after the 2011 # experiment was apparently successful.) -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Falk 1937 1938 - Sep lastSun 0:00 1:00 - Rule Falk 1938 1942 - Mar Sun>=19 0:00 0 - Rule Falk 1939 only - Oct 1 0:00 1:00 - @@ -1581,7 +1581,7 @@ # No time of the day is established for the adjustment, so people normally # adjust their clocks at 0 hour of the given dates. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Para 1975 1988 - Oct 1 0:00 1:00 - Rule Para 1975 1978 - Mar 1 0:00 0 - Rule Para 1979 1991 - Apr 1 0:00 0 - @@ -1674,7 +1674,7 @@ # From Paul Eggert (2006-03-22): # Shanks & Pottenger don't have this transition. Assume 1986 was like 1987. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Peru 1938 only - Jan 1 0:00 1:00 - Rule Peru 1938 only - Apr 1 0:00 0 - Rule Peru 1938 1939 - Sep lastSun 0:00 1:00 - @@ -1770,7 +1770,7 @@ # https://www.impo.com.uy/diariooficial/1926/03/10/2 # https://www.impo.com.uy/diariooficial/1926/03/18/2 # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Uruguay 1923 1925 - Oct 1 0:00 0:30 - Rule Uruguay 1924 1926 - Apr 1 0:00 0 - # From Tim Parenti (2018-02-15):
--- a/make/data/tzdata/systemv Thu Nov 05 05:11:12 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ -# -# 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. -# -# tzdb data for System V rules (this file is obsolete) - -# This file is in the public domain, so clarified as of -# 2009-05-17 by Arthur David Olson. - -# Old rules, should the need arise. -# No attempt is made to handle Newfoundland, since it cannot be expressed -# using the System V "TZ" scheme (half-hour offset), or anything outside -# North America (no support for non-standard DST start/end dates), nor -# the changes in the DST rules in the US after 1976 (which occurred after -# the old rules were written). -# -# If you need the old rules, uncomment ## lines. -# Compile this *without* leap second correction for true conformance. - -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S -Rule SystemV min 1973 - Apr lastSun 2:00 1:00 D -Rule SystemV min 1973 - Oct lastSun 2:00 0 S -Rule SystemV 1974 only - Jan 6 2:00 1:00 D -Rule SystemV 1974 only - Nov lastSun 2:00 0 S -Rule SystemV 1975 only - Feb 23 2:00 1:00 D -Rule SystemV 1975 only - Oct lastSun 2:00 0 S -Rule SystemV 1976 max - Apr lastSun 2:00 1:00 D -Rule SystemV 1976 max - Oct lastSun 2:00 0 S - -# Zone NAME STDOFF RULES/SAVE FORMAT [UNTIL] -## Zone SystemV/AST4ADT -4:00 SystemV A%sT -## Zone SystemV/EST5EDT -5:00 SystemV E%sT -## Zone SystemV/CST6CDT -6:00 SystemV C%sT -## Zone SystemV/MST7MDT -7:00 SystemV M%sT -## Zone SystemV/PST8PDT -8:00 SystemV P%sT -## Zone SystemV/YST9YDT -9:00 SystemV Y%sT -## Zone SystemV/AST4 -4:00 - AST -## Zone SystemV/EST5 -5:00 - EST -## Zone SystemV/CST6 -6:00 - CST -## Zone SystemV/MST7 -7:00 - MST -## Zone SystemV/PST8 -8:00 - PST -## Zone SystemV/YST9 -9:00 - YST -## Zone SystemV/HST10 -10:00 - HST
--- a/make/gendata/GendataTZDB.gmk Thu Nov 05 05:11:12 2020 +0000 +++ b/make/gendata/GendataTZDB.gmk Mon Nov 16 13:36:36 2020 +0000 @@ -29,7 +29,7 @@ # Time zone data file creation # TZDATA_DIR := $(JDK_TOPDIR)/make/data/tzdata -TZDATA_TZFILE := africa antarctica asia australasia europe northamerica pacificnew southamerica backward etcetera gmt jdk11_backward +TZDATA_TZFILE := africa antarctica asia australasia europe northamerica southamerica backward etcetera gmt jdk11_backward TZDATA_TZFILES := $(addprefix $(TZDATA_DIR)/,$(TZDATA_TZFILE)) GENDATA_TZDB_DAT := $(JDK_OUTPUTDIR)/lib/tzdb.dat
--- a/make/lib/CoreLibraries.gmk Thu Nov 05 05:11:12 2020 +0000 +++ b/make/lib/CoreLibraries.gmk Mon Nov 16 13:36:36 2020 +0000 @@ -164,7 +164,12 @@ endif # Make it possible to override this variable -LIBJAVA_MAPFILE ?= $(JDK_TOPDIR)/make/mapfiles/libjava/mapfile-vers +ifeq ($(OPENJDK_TARGET_OS), linux) + # Linux-only symbol Java_jdk_internal_platform_cgroupv1_Metrics_isUseContainerSupport + LIBJAVA_MAPFILE ?= $(JDK_TOPDIR)/make/mapfiles/libjava/mapfile-linux +else + LIBJAVA_MAPFILE ?= $(JDK_TOPDIR)/make/mapfiles/libjava/mapfile-vers +endif LIBJAVA_CFLAGS := $(foreach dir, $(LIBJAVA_SRC_DIRS), -I$(dir)) \ -I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include \ @@ -341,16 +346,6 @@ BUILD_LIBRARIES += $(BUILD_LIBUNPACK) -ifeq ($(OPENJDK_TARGET_OS), windows) - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)unpack.map: $(BUILD_LIBUNPACK) - $(ECHO) Copying $(@F) - $(CP) $(patsubst %$(SHARED_LIBRARY_SUFFIX), %.map, $<) $@ - - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)unpack.pdb: $(BUILD_LIBUNPACK) - $(ECHO) Copying $(@F) - $(CP) $(patsubst %$(SHARED_LIBRARY_SUFFIX), %.pdb, $<) $@ -endif - ########################################################################################## BUILD_LIBJLI_SRC_DIRS := $(JDK_TOPDIR)/src/share/bin $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/bin
--- a/make/mapfiles/libawt_xawt/mapfile-vers Thu Nov 05 05:11:12 2020 +0000 +++ b/make/mapfiles/libawt_xawt/mapfile-vers Mon Nov 16 13:36:36 2020 +0000 @@ -278,7 +278,6 @@ Java_sun_awt_X11_XlibWrapper_XQueryPointer; Java_sun_awt_X11_XlibWrapper_XFreeCursor; Java_sun_awt_X11_XToolkit_getDefaultXColormap; - Java_sun_awt_X11_XToolkit_getDefaultScreenData; Java_sun_awt_X11_XToolkit_getEnv; Java_sun_awt_X11_XlibWrapper_XCreateBitmapFromData; Java_sun_awt_X11_XlibWrapper_XFreePixmap;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/make/mapfiles/libjava/mapfile-linux Mon Nov 16 13:36:36 2020 +0000 @@ -0,0 +1,304 @@ +# +# Copyright (c) 1997, 2018, 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. +# + +# Define public interface. + +SUNWprivate_1.1 { + global: + JNI_OnLoad; + JNU_ThrowNoSuchMethodException; + JNU_CallStaticMethodByName; + JNU_CallMethodByName; + JNU_CallMethodByNameV; + JNU_ClassClass; + JNU_ClassObject; + JNU_ClassString; + JNU_ClassThrowable; + JNU_CopyObjectArray; + JNU_Equals; + JNU_GetEnv; + JNU_GetFieldByName; + JNU_GetStaticFieldByName; + JNU_GetStringPlatformChars; + JNU_IsInstanceOfByName; + JNU_MonitorWait; + JNU_NewObjectByName; + JNU_NewStringPlatform; + JNU_Notify; + JNU_NotifyAll; + JNU_PrintClass; + JNU_PrintString; + JNU_ReleaseStringPlatformChars; + JNU_SetFieldByName; + JNU_SetStaticFieldByName; + JNU_ThrowArrayIndexOutOfBoundsException; + JNU_ThrowByName; + JNU_ThrowByNameWithLastError; + JNU_ThrowByNameWithMessageAndLastError; + JNU_ThrowClassNotFoundException; + JNU_ThrowIllegalAccessError; + JNU_ThrowIllegalAccessException; + JNU_ThrowIllegalArgumentException; + JNU_ThrowInstantiationException; + JNU_ThrowInternalError; + JNU_ThrowIOException; + JNU_ThrowIOExceptionWithLastError; + JNU_ThrowNoSuchFieldError; + JNU_ThrowNoSuchFieldException; + JNU_ThrowNoSuchMethodError; + JNU_ThrowNullPointerException; + JNU_ThrowNumberFormatException; + JNU_ThrowOutOfMemoryError; + JNU_ThrowStringIndexOutOfBoundsException; + JNU_ToString; + + Java_java_io_FileDescriptor_initIDs; + Java_java_io_FileDescriptor_sync; + Java_java_io_FileInputStream_available0; + Java_java_io_FileInputStream_close0; + Java_java_io_FileInputStream_initIDs; + Java_java_io_FileInputStream_open0; + Java_java_io_FileInputStream_read0; + Java_java_io_FileInputStream_readBytes; + Java_java_io_FileInputStream_skip0; + Java_java_io_FileOutputStream_close0; + Java_java_io_FileOutputStream_initIDs; + Java_java_io_FileOutputStream_open0; + Java_java_io_FileOutputStream_write; + Java_java_io_FileOutputStream_writeBytes; + Java_java_io_ObjectInputStream_bytesToDoubles; + Java_java_io_ObjectInputStream_bytesToFloats; + Java_java_io_ObjectOutputStream_doublesToBytes; + Java_java_io_ObjectOutputStream_floatsToBytes; + Java_java_io_ObjectStreamClass_hasStaticInitializer; + Java_java_io_ObjectStreamClass_initNative; + Java_java_io_RandomAccessFile_close0; + Java_java_io_RandomAccessFile_getFilePointer; + Java_java_io_RandomAccessFile_initIDs; + Java_java_io_RandomAccessFile_length; + Java_java_io_RandomAccessFile_open0; + Java_java_io_RandomAccessFile_read0; + Java_java_io_RandomAccessFile_readBytes; + Java_java_io_RandomAccessFile_seek0; + Java_java_io_RandomAccessFile_setLength; + Java_java_io_RandomAccessFile_write0; + Java_java_io_RandomAccessFile_writeBytes; + Java_java_io_UnixFileSystem_canonicalize0; + Java_java_io_UnixFileSystem_checkAccess; + Java_java_io_UnixFileSystem_createDirectory; + Java_java_io_UnixFileSystem_createFileExclusively; + Java_java_io_UnixFileSystem_delete0; + Java_java_io_UnixFileSystem_getBooleanAttributes0; + Java_java_io_UnixFileSystem_getLastModifiedTime; + Java_java_io_UnixFileSystem_getLength; + Java_java_io_UnixFileSystem_getSpace; + Java_java_io_UnixFileSystem_initIDs; + Java_java_io_UnixFileSystem_list; + Java_java_io_UnixFileSystem_rename0; + Java_java_io_UnixFileSystem_setLastModifiedTime; + Java_java_io_UnixFileSystem_setReadOnly; + Java_java_io_UnixFileSystem_setPermission; + Java_java_lang_Class_forName0; + Java_java_lang_Class_getPrimitiveClass; + Java_java_lang_Class_isAssignableFrom; + Java_java_lang_Class_isInstance; + Java_java_lang_Class_registerNatives; + Java_java_lang_ClassLoader_findBootstrapClass; + Java_java_lang_ClassLoader_defineClass0; + Java_java_lang_ClassLoader_defineClass1; + Java_java_lang_ClassLoader_defineClass2; + Java_java_lang_ClassLoader_findBuiltinLib; + Java_java_lang_ClassLoader_findLoadedClass0; + Java_java_lang_ClassLoader_resolveClass0; + Java_java_lang_ClassLoader_00024NativeLibrary_find; + Java_java_lang_ClassLoader_00024NativeLibrary_load; + Java_java_lang_ClassLoader_00024NativeLibrary_unload; + Java_java_lang_ClassLoader_registerNatives; + Java_java_lang_Compiler_registerNatives; + Java_java_lang_Double_longBitsToDouble; + Java_java_lang_Double_doubleToRawLongBits; + Java_java_lang_reflect_Proxy_defineClass0; + Java_java_lang_Shutdown_runAllFinalizers; + Java_java_lang_Float_intBitsToFloat; + Java_java_lang_Float_floatToRawIntBits; + Java_java_lang_StrictMath_IEEEremainder; + Java_java_lang_StrictMath_acos; + Java_java_lang_StrictMath_asin; + Java_java_lang_StrictMath_atan; + Java_java_lang_StrictMath_atan2; + Java_java_lang_StrictMath_cos; + Java_java_lang_StrictMath_exp; + Java_java_lang_StrictMath_log; + Java_java_lang_StrictMath_log10; + Java_java_lang_StrictMath_pow; + Java_java_lang_StrictMath_sin; + Java_java_lang_StrictMath_sqrt; + Java_java_lang_StrictMath_cbrt; + Java_java_lang_StrictMath_tan; + Java_java_lang_StrictMath_cosh; + Java_java_lang_StrictMath_sinh; + Java_java_lang_StrictMath_tanh; + Java_java_lang_StrictMath_hypot; + Java_java_lang_StrictMath_log1p; + Java_java_lang_StrictMath_expm1; + Java_java_lang_Object_getClass; + Java_java_lang_Object_registerNatives; + Java_java_lang_Package_getSystemPackage0; + Java_java_lang_Package_getSystemPackages0; + Java_java_lang_ProcessEnvironment_environ; + Java_java_lang_reflect_Array_get; + Java_java_lang_reflect_Array_getBoolean; + Java_java_lang_reflect_Array_getByte; + Java_java_lang_reflect_Array_getChar; + Java_java_lang_reflect_Array_getDouble; + Java_java_lang_reflect_Array_getFloat; + Java_java_lang_reflect_Array_getInt; + Java_java_lang_reflect_Array_getLength; + Java_java_lang_reflect_Array_getLong; + Java_java_lang_reflect_Array_getShort; + Java_java_lang_reflect_Array_multiNewArray; + Java_java_lang_reflect_Array_newArray; + Java_java_lang_reflect_Array_set; + Java_java_lang_reflect_Array_setBoolean; + Java_java_lang_reflect_Array_setByte; + Java_java_lang_reflect_Array_setChar; + Java_java_lang_reflect_Array_setDouble; + Java_java_lang_reflect_Array_setFloat; + Java_java_lang_reflect_Array_setInt; + Java_java_lang_reflect_Array_setLong; + Java_java_lang_reflect_Array_setShort; + Java_java_lang_reflect_Executable_getParameters0; + Java_java_lang_reflect_Executable_getTypeAnnotationBytes0; + Java_java_lang_reflect_Field_getTypeAnnotationBytes0; + Java_java_lang_Runtime_freeMemory; + Java_java_lang_Runtime_maxMemory; + Java_java_lang_Runtime_gc; + Java_java_lang_Runtime_runFinalization0; + Java_java_lang_Runtime_totalMemory; + Java_java_lang_Runtime_traceInstructions; + Java_java_lang_Runtime_traceMethodCalls; + Java_java_lang_Runtime_availableProcessors; + Java_java_lang_SecurityManager_classDepth; + Java_java_lang_SecurityManager_classLoaderDepth0; + Java_java_lang_SecurityManager_currentClassLoader0; + Java_java_lang_SecurityManager_currentLoadedClass0; + Java_java_lang_SecurityManager_getClassContext; + Java_java_lang_Shutdown_beforeHalt; + Java_java_lang_Shutdown_halt0; + Java_java_lang_String_intern; + Java_java_lang_System_identityHashCode; + Java_java_lang_System_initProperties; + Java_java_lang_System_mapLibraryName; + Java_java_lang_System_registerNatives; + Java_java_lang_System_setErr0; + Java_java_lang_System_setIn0; + Java_java_lang_System_setOut0; + Java_java_lang_Thread_registerNatives; + Java_java_lang_Throwable_fillInStackTrace; + Java_java_lang_Throwable_getStackTraceDepth; + Java_java_lang_Throwable_getStackTraceElement; + Java_java_lang_UNIXProcess_init; + Java_java_lang_UNIXProcess_waitForProcessExit; + Java_java_lang_UNIXProcess_forkAndExec; + Java_java_lang_UNIXProcess_destroyProcess; + Java_java_nio_Bits_copySwapMemory0; + Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedAction_2; + Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedAction_2Ljava_security_AccessControlContext_2; + Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedExceptionAction_2; + Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedExceptionAction_2Ljava_security_AccessControlContext_2; + Java_java_security_AccessController_getStackAccessControlContext; + Java_java_security_AccessController_getInheritedAccessControlContext; + Java_java_util_TimeZone_getSystemTimeZoneID; + Java_java_util_TimeZone_getSystemGMTOffsetID; + Java_java_util_concurrent_atomic_AtomicLong_VMSupportsCS8; + Java_java_util_prefs_FileSystemPreferences_chmod; + Java_java_util_prefs_FileSystemPreferences_lockFile0; + Java_java_util_prefs_FileSystemPreferences_unlockFile0; + Java_java_util_logging_FileHandler_isSetUID; + Java_sun_misc_MessageUtils_toStderr; + Java_sun_misc_MessageUtils_toStdout; + Java_sun_misc_NativeSignalHandler_handle0; + Java_sun_misc_Signal_findSignal; + Java_sun_misc_Signal_handle0; + Java_sun_misc_Signal_raise0; + Java_sun_reflect_ConstantPool_getClassAt0; + Java_sun_reflect_ConstantPool_getClassAtIfLoaded0; + Java_sun_reflect_ConstantPool_getDoubleAt0; + Java_sun_reflect_ConstantPool_getFieldAt0; + Java_sun_reflect_ConstantPool_getFieldAtIfLoaded0; + Java_sun_reflect_ConstantPool_getFloatAt0; + Java_sun_reflect_ConstantPool_getIntAt0; + Java_sun_reflect_ConstantPool_getLongAt0; + Java_sun_reflect_ConstantPool_getMemberRefInfoAt0; + Java_sun_reflect_ConstantPool_getMethodAt0; + Java_sun_reflect_ConstantPool_getMethodAtIfLoaded0; + Java_sun_reflect_ConstantPool_getSize0; + Java_sun_reflect_ConstantPool_getStringAt0; + Java_sun_reflect_ConstantPool_getUTF8At0; + Java_java_io_Console_istty; + Java_java_io_Console_encoding; + Java_java_io_Console_echo; + Java_sun_misc_GC_maxObjectInspectionAge; + Java_sun_reflect_NativeConstructorAccessorImpl_newInstance0; + Java_sun_reflect_NativeMethodAccessorImpl_invoke0; + Java_sun_reflect_Reflection_getCallerClass__; + Java_sun_reflect_Reflection_getCallerClass__I; + Java_sun_reflect_Reflection_getClassAccessFlags; + Java_sun_misc_URLClassPath_knownToNotExist0; + Java_sun_misc_URLClassPath_getLookupCacheURLs; + Java_sun_misc_URLClassPath_getLookupCacheForClassLoader; + Java_sun_misc_Version_getJdkVersionInfo; + Java_sun_misc_Version_getJdkSpecialVersion; + Java_sun_misc_Version_getJvmVersionInfo; + Java_sun_misc_Version_getJvmSpecialVersion; + Java_sun_misc_VM_getThreadStateValues; + Java_sun_misc_VM_latestUserDefinedLoader0; + Java_sun_misc_VM_initialize; + Java_sun_misc_VMSupport_initAgentProperties; + Java_sun_misc_VMSupport_getVMTemporaryDirectory; + Java_jdk_internal_platform_cgroupv1_Metrics_isUseContainerSupport; + + # ZipFile.c needs this one + throwFileNotFoundException; + # zip_util.c needs this + getErrorString; + +# Java_sun_misc_VM_getState; threads.c +# Java_sun_misc_VM_threadsSuspended; threads.c +# Java_sun_misc_VM_unsuspendSomeThreads; threads.c +# Java_sun_misc_VM_unsuspendThreads; threads.c + + # Outcalls from libjvm done using dlsym(). + + VerifyClassCodes; + VerifyClassCodesForMajorVersion; + NewStringPlatform; + GetStringPlatformChars; + Canonicalize; + JDK_GetVersionInfo0; + + local: + *; +};
--- a/make/mapfiles/libjava/mapfile-vers Thu Nov 05 05:11:12 2020 +0000 +++ b/make/mapfiles/libjava/mapfile-vers Mon Nov 16 13:36:36 2020 +0000 @@ -278,7 +278,6 @@ Java_sun_misc_VM_initialize; Java_sun_misc_VMSupport_initAgentProperties; Java_sun_misc_VMSupport_getVMTemporaryDirectory; - Java_jdk_internal_platform_cgroupv1_Metrics_isUseContainerSupport; # ZipFile.c needs this one throwFileNotFoundException;
--- a/make/mapfiles/libmanagement/mapfile-vers Thu Nov 05 05:11:12 2020 +0000 +++ b/make/mapfiles/libmanagement/mapfile-vers Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2020, 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,6 +85,7 @@ Java_sun_management_ThreadImpl_getThreadTotalCpuTime1; Java_sun_management_ThreadImpl_getThreadUserCpuTime0; Java_sun_management_ThreadImpl_getThreadUserCpuTime1; + Java_sun_management_ThreadImpl_getThreadAllocatedMemory0; Java_sun_management_ThreadImpl_getThreadAllocatedMemory1; Java_sun_management_ThreadImpl_resetContentionTimes0; Java_sun_management_ThreadImpl_resetPeakThreadCount0;
--- a/src/aix/lib/tzmappings Thu Nov 05 05:11:12 2020 +0000 +++ b/src/aix/lib/tzmappings Mon Nov 16 13:36:36 2020 +0000 @@ -568,7 +568,6 @@ US/Michigan America/New_York US/Mountain America/Denver US/Pacific America/Los_Angeles -US/Pacific-New America/Los_Angeles US/Samoa Pacific/Pago_Pago USAST-2 Africa/Johannesburg USAST-2USADT Europe/Istanbul
--- a/src/share/bin/jli_util.h Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/bin/jli_util.h Mon Nov 16 13:36:36 2020 +0000 @@ -58,7 +58,6 @@ #define JLI_StrSpn(p1, p2) strspn((p1), (p2)) #define JLI_StrCSpn(p1, p2) strcspn((p1), (p2)) #define JLI_StrPBrk(p1, p2) strpbrk((p1), (p2)) -#define JLI_StrTok(p1, p2) strtok((p1), (p2)) /* On Windows lseek() is in io.h rather than the location dictated by POSIX. */ #ifdef _WIN32
--- a/src/share/classes/com/sun/management/ThreadMXBean.java Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/classes/com/sun/management/ThreadMXBean.java Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2019, 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,6 +25,7 @@ package com.sun.management; +import java.lang.management.ThreadInfo; import java.util.Map; /** @@ -62,7 +63,7 @@ * @throws NullPointerException if {@code ids} is {@code null} * @throws IllegalArgumentException if any element in the input array * {@code ids} is {@code <=} {@code 0}. - * @throws java.lang.UnsupportedOperationException if the Java + * @throws UnsupportedOperationException if the Java * virtual machine implementation does not support CPU time * measurement. * @@ -96,7 +97,7 @@ * @throws NullPointerException if {@code ids} is {@code null} * @throws IllegalArgumentException if any element in the input array * {@code ids} is {@code <=} {@code 0}. - * @throws java.lang.UnsupportedOperationException if the Java + * @throws UnsupportedOperationException if the Java * virtual machine implementation does not support CPU time * measurement. * @@ -110,13 +111,47 @@ /** * Returns an approximation of the total amount of memory, in bytes, - * allocated in heap memory for the thread of the specified ID. + * allocated in heap memory for the current thread. + * The returned value is an approximation because some Java virtual machine + * implementations may use object allocation mechanisms that result in a + * delay between the time an object is allocated and the time its size is + * recorded. + * + * <p> + * This is a convenience method for local management use and is + * equivalent to calling: + * <blockquote><pre> + * {@link #getThreadAllocatedBytes getThreadAllocatedBytes}(Thread.currentThread().getId()); + * </pre></blockquote> + * + * @return an approximation of the total memory allocated, in bytes, in + * heap memory for the current thread + * if thread memory allocation measurement is enabled; + * {@code -1} otherwise. + * + * @throws UnsupportedOperationException if the Java virtual + * machine implementation does not support thread memory allocation + * measurement. + * + * @see #isThreadAllocatedMemorySupported + * @see #isThreadAllocatedMemoryEnabled + * @see #setThreadAllocatedMemoryEnabled + * + * @since 8u282 + */ + public default long getCurrentThreadAllocatedBytes() { + return getThreadAllocatedBytes(Thread.currentThread().getId()); + } + + /** + * Returns an approximation of the total amount of memory, in bytes, + * allocated in heap memory for the thread with the specified ID. * The returned value is an approximation because some Java virtual machine * implementations may use object allocation mechanisms that result in a * delay between the time an object is allocated and the time its size is * recorded. * <p> - * If the thread of the specified ID is not alive or does not exist, + * If the thread with the specified ID is not alive or does not exist, * this method returns {@code -1}. If thread memory allocation measurement * is disabled, this method returns {@code -1}. * A thread is alive if it has been started and has not yet died. @@ -128,13 +163,13 @@ * * @param id the thread ID of a thread * @return an approximation of the total memory allocated, in bytes, in - * heap memory for a thread of the specified ID - * if the thread of the specified ID exists, the thread is alive, + * heap memory for the thread with the specified ID + * if the thread with the specified ID exists, the thread is alive, * and thread memory allocation measurement is enabled; * {@code -1} otherwise. * * @throws IllegalArgumentException if {@code id} {@code <=} {@code 0}. - * @throws java.lang.UnsupportedOperationException if the Java virtual + * @throws UnsupportedOperationException if the Java virtual * machine implementation does not support thread memory allocation * measurement. * @@ -166,7 +201,7 @@ * @throws NullPointerException if {@code ids} is {@code null} * @throws IllegalArgumentException if any element in the input array * {@code ids} is {@code <=} {@code 0}. - * @throws java.lang.UnsupportedOperationException if the Java virtual + * @throws UnsupportedOperationException if the Java virtual * machine implementation does not support thread memory allocation * measurement. * @@ -195,7 +230,7 @@ * @return {@code true} if thread memory allocation measurement is enabled; * {@code false} otherwise. * - * @throws java.lang.UnsupportedOperationException if the Java virtual + * @throws UnsupportedOperationException if the Java virtual * machine does not support thread memory allocation measurement. * * @see #isThreadAllocatedMemorySupported @@ -209,14 +244,158 @@ * @param enable {@code true} to enable; * {@code false} to disable. * - * @throws java.lang.UnsupportedOperationException if the Java virtual + * @throws UnsupportedOperationException if the Java virtual * machine does not support thread memory allocation measurement. * - * @throws java.lang.SecurityException if a security manager + * @throws SecurityException if a security manager * exists and the caller does not have * ManagementPermission("control"). * * @see #isThreadAllocatedMemorySupported */ public void setThreadAllocatedMemoryEnabled(boolean enable); + + /** + * Returns the thread info for each thread whose ID + * is in the input array <tt>ids</tt>, + * with stack trace of the specified maximum number of elements + * and synchronization information. + * If <tt>maxDepth == 0</tt>, no stack trace of the thread + * will be dumped. + * + * <p> + * This method obtains a snapshot of the thread information + * for each thread including: + * <ul> + * <li>stack trace of the specified maximum number of elements,</li> + * <li>the object monitors currently locked by the thread + * if <tt>lockedMonitors</tt> is <tt>true</tt>, and</li> + * <li>the <a href="{@docRoot}/../api/java/lang/management/LockInfo.html#OwnableSynchronizer"> + * ownable synchronizers</a> currently locked by the thread + * if <tt>lockedSynchronizers</tt> is <tt>true</tt>.</li> + * </ul> + * <p> + * This method returns an array of the <tt>ThreadInfo</tt> objects, + * each is the thread information about the thread with the same index + * as in the <tt>ids</tt> array. + * If a thread of the given ID is not alive or does not exist, + * <tt>null</tt> will be set in the corresponding element + * in the returned array. A thread is alive if + * it has been started and has not yet died. + * <p> + * If a thread does not lock any object monitor or <tt>lockedMonitors</tt> + * is <tt>false</tt>, the returned <tt>ThreadInfo</tt> object will have an + * empty <tt>MonitorInfo</tt> array. Similarly, if a thread does not + * lock any synchronizer or <tt>lockedSynchronizers</tt> is <tt>false</tt>, + * the returned <tt>ThreadInfo</tt> object + * will have an empty <tt>LockInfo</tt> array. + * + * <p> + * When both <tt>lockedMonitors</tt> and <tt>lockedSynchronizers</tt> + * parameters are <tt>false</tt>, it is equivalent to calling: + * <blockquote><pre> + * {@link #getThreadInfo(long[], int) getThreadInfo(ids, maxDepth)} + * </pre></blockquote> + * + * <p> + * This method is designed for troubleshooting use, but not for + * synchronization control. It might be an expensive operation. + * + * <p> + * <b>MBeanServer access</b>:<br> + * The mapped type of <tt>ThreadInfo</tt> is + * <tt>CompositeData</tt> with attributes as specified in the + * {@link ThreadInfo#from ThreadInfo.from} method. + * + * @implSpec The default implementation throws + * <tt>UnsupportedOperationException</tt>. + * + * @param ids an array of thread IDs. + * @param lockedMonitors if <tt>true</tt>, retrieves all locked monitors. + * @param lockedSynchronizers if <tt>true</tt>, retrieves all locked + * ownable synchronizers. + * @param maxDepth indicates the maximum number of + * {@link StackTraceElement} to be retrieved from the stack trace. + * + * @return an array of the {@link ThreadInfo} objects, each containing + * information about a thread whose ID is in the corresponding + * element of the input array of IDs. + * + * @throws IllegalArgumentException if <tt>maxDepth</tt> is negative. + * @throws java.lang.SecurityException if a security manager + * exists and the caller does not have + * ManagementPermission("monitor"). + * @throws java.lang.UnsupportedOperationException + * <ul> + * <li>if <tt>lockedMonitors</tt> is <tt>true</tt> but + * the Java virtual machine does not support monitoring + * of {@linkplain #isObjectMonitorUsageSupported + * object monitor usage}; or</li> + * <li>if <tt>lockedSynchronizers</tt> is <tt>true</tt> but + * the Java virtual machine does not support monitoring + * of {@linkplain #isSynchronizerUsageSupported + * ownable synchronizer usage}.</li> + * </ul> + * + * @see #isObjectMonitorUsageSupported + * @see #isSynchronizerUsageSupported + * + * @since 8u282 + */ + + public default ThreadInfo[] getThreadInfo(long[] ids, boolean lockedMonitors, + boolean lockedSynchronizers, int maxDepth) { + throw new UnsupportedOperationException(); + } + + /** + * Returns the thread info for all live threads + * with stack trace of the specified maximum number of elements + * and synchronization information. + * if <tt>maxDepth == 0</tt>, no stack trace of the thread + * will be dumped. + * Some threads included in the returned array + * may have been terminated when this method returns. + * + * <p> + * This method returns an array of {@link ThreadInfo} objects + * as specified in the {@link #getThreadInfo(long[], boolean, boolean, int)} + * method. + * + * @implSpec The default implementation throws + * <tt>UnsupportedOperationException</tt>. + * + * @param lockedMonitors if <tt>true</tt>, dump all locked monitors. + * @param lockedSynchronizers if <tt>true</tt>, dump all locked + * ownable synchronizers. + * @param maxDepth indicates the maximum number of + * {@link StackTraceElement} to be retrieved from the stack trace. + * + * @return an array of {@link ThreadInfo} for all live threads. + * + * @throws IllegalArgumentException if <tt>maxDepth</tt> is negative. + * @throws java.lang.SecurityException if a security manager + * exists and the caller does not have + * ManagementPermission("monitor"). + * @throws java.lang.UnsupportedOperationException + * <ul> + * <li>if <tt>lockedMonitors</tt> is <tt>true</tt> but + * the Java virtual machine does not support monitoring + * of {@linkplain #isObjectMonitorUsageSupported + * object monitor usage}; or</li> + * <li>if <tt>lockedSynchronizers</tt> is <tt>true</tt> but + * the Java virtual machine does not support monitoring + * of {@linkplain #isSynchronizerUsageSupported + * ownable synchronizer usage}.</li> + * </ul> + * + * @see #isObjectMonitorUsageSupported + * @see #isSynchronizerUsageSupported + * + * @since 8u282 + */ + public default ThreadInfo[] dumpAllThreads(boolean lockedMonitors, + boolean lockedSynchronizers, int maxDepth) { + throw new UnsupportedOperationException(); + } }
--- a/src/share/classes/java/lang/management/ThreadMXBean.java Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/classes/java/lang/management/ThreadMXBean.java Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2019, 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 @@ -160,7 +160,7 @@ * * @return an array of <tt>long</tt>, each is a thread ID. * - * @throws java.lang.SecurityException if a security manager + * @throws SecurityException if a security manager * exists and the caller does not have * ManagementPermission("monitor"). */ @@ -199,7 +199,7 @@ * it does not exist. * * @throws IllegalArgumentException if {@code id <= 0}. - * @throws java.lang.SecurityException if a security manager + * @throws SecurityException if a security manager * exists and the caller does not have * ManagementPermission("monitor"). */ @@ -237,7 +237,7 @@ * * @throws IllegalArgumentException if any element in the input array * <tt>ids</tt> is {@code <= 0}. - * @throws java.lang.SecurityException if a security manager + * @throws SecurityException if a security manager * exists and the caller does not have * ManagementPermission("monitor"). */ @@ -284,7 +284,7 @@ * * @throws IllegalArgumentException if {@code id <= 0}. * @throws IllegalArgumentException if <tt>maxDepth is negative</tt>. - * @throws java.lang.SecurityException if a security manager + * @throws SecurityException if a security manager * exists and the caller does not have * ManagementPermission("monitor"). * @@ -337,7 +337,7 @@ * @throws IllegalArgumentException if <tt>maxDepth is negative</tt>. * @throws IllegalArgumentException if any element in the input array * <tt>ids</tt> is {@code <= 0}. - * @throws java.lang.SecurityException if a security manager + * @throws SecurityException if a security manager * exists and the caller does not have * ManagementPermission("monitor"). * @@ -360,7 +360,7 @@ * @return <tt>true</tt> if thread contention monitoring is enabled; * <tt>false</tt> otherwise. * - * @throws java.lang.UnsupportedOperationException if the Java virtual + * @throws UnsupportedOperationException if the Java virtual * machine does not support thread contention monitoring. * * @see #isThreadContentionMonitoringSupported @@ -374,10 +374,10 @@ * @param enable <tt>true</tt> to enable; * <tt>false</tt> to disable. * - * @throws java.lang.UnsupportedOperationException if the Java + * @throws UnsupportedOperationException if the Java * virtual machine does not support thread contention monitoring. * - * @throws java.lang.SecurityException if a security manager + * @throws SecurityException if a security manager * exists and the caller does not have * ManagementPermission("control"). * @@ -394,7 +394,7 @@ * the current thread has executed in user mode or system mode. * * <p> - * This is a convenient method for local management use and is + * This is a convenience method for local management use and is * equivalent to calling: * <blockquote><pre> * {@link #getThreadCpuTime getThreadCpuTime}(Thread.currentThread().getId()); @@ -403,7 +403,7 @@ * @return the total CPU time for the current thread if CPU time * measurement is enabled; <tt>-1</tt> otherwise. * - * @throws java.lang.UnsupportedOperationException if the Java + * @throws UnsupportedOperationException if the Java * virtual machine does not support CPU time measurement for * the current thread. * @@ -421,7 +421,7 @@ * not necessarily nanoseconds accuracy. * * <p> - * This is a convenient method for local management use and is + * This is a convenience method for local management use and is * equivalent to calling: * <blockquote><pre> * {@link #getThreadUserTime getThreadUserTime}(Thread.currentThread().getId()); @@ -430,7 +430,7 @@ * @return the user-level CPU time for the current thread if CPU time * measurement is enabled; <tt>-1</tt> otherwise. * - * @throws java.lang.UnsupportedOperationException if the Java + * @throws UnsupportedOperationException if the Java * virtual machine does not support CPU time measurement for * the current thread. * @@ -467,7 +467,7 @@ * <tt>-1</tt> otherwise. * * @throws IllegalArgumentException if {@code id <= 0}. - * @throws java.lang.UnsupportedOperationException if the Java + * @throws UnsupportedOperationException if the Java * virtual machine does not support CPU time measurement for * other threads. * @@ -502,7 +502,7 @@ * <tt>-1</tt> otherwise. * * @throws IllegalArgumentException if {@code id <= 0}. - * @throws java.lang.UnsupportedOperationException if the Java + * @throws UnsupportedOperationException if the Java * virtual machine does not support CPU time measurement for * other threads. * @@ -548,7 +548,7 @@ * @return <tt>true</tt> if thread CPU time measurement is enabled; * <tt>false</tt> otherwise. * - * @throws java.lang.UnsupportedOperationException if the Java virtual + * @throws UnsupportedOperationException if the Java virtual * machine does not support CPU time measurement for other threads * nor for the current thread. * @@ -564,11 +564,11 @@ * @param enable <tt>true</tt> to enable; * <tt>false</tt> to disable. * - * @throws java.lang.UnsupportedOperationException if the Java + * @throws UnsupportedOperationException if the Java * virtual machine does not support CPU time measurement for * any threads nor for the current thread. * - * @throws java.lang.SecurityException if a security manager + * @throws SecurityException if a security manager * exists and the caller does not have * ManagementPermission("control"). * @@ -604,7 +604,7 @@ * @return an array of IDs of the threads that are monitor * deadlocked, if any; <tt>null</tt> otherwise. * - * @throws java.lang.SecurityException if a security manager + * @throws SecurityException if a security manager * exists and the caller does not have * ManagementPermission("monitor"). * @@ -616,7 +616,7 @@ * Resets the peak thread count to the current number of * live threads. * - * @throws java.lang.SecurityException if a security manager + * @throws SecurityException if a security manager * exists and the caller does not have * ManagementPermission("control"). * @@ -642,10 +642,10 @@ * deadlocked waiting for object monitors or ownable synchronizers, if any; * <tt>null</tt> otherwise. * - * @throws java.lang.SecurityException if a security manager + * @throws SecurityException if a security manager * exists and the caller does not have * ManagementPermission("monitor"). - * @throws java.lang.UnsupportedOperationException if the Java virtual + * @throws UnsupportedOperationException if the Java virtual * machine does not support monitoring of ownable synchronizer usage. * * @see #isSynchronizerUsageSupported @@ -743,10 +743,10 @@ * information about a thread whose ID is in the corresponding * element of the input array of IDs. * - * @throws java.lang.SecurityException if a security manager + * @throws SecurityException if a security manager * exists and the caller does not have * ManagementPermission("monitor"). - * @throws java.lang.UnsupportedOperationException + * @throws UnsupportedOperationException * <ul> * <li>if <tt>lockedMonitors</tt> is <tt>true</tt> but * the Java virtual machine does not support monitoring @@ -782,10 +782,10 @@ * * @return an array of {@link ThreadInfo} for all live threads. * - * @throws java.lang.SecurityException if a security manager + * @throws SecurityException if a security manager * exists and the caller does not have * ManagementPermission("monitor"). - * @throws java.lang.UnsupportedOperationException + * @throws UnsupportedOperationException * <ul> * <li>if <tt>lockedMonitors</tt> is <tt>true</tt> but * the Java virtual machine does not support monitoring
--- a/src/share/classes/java/net/URI.java Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/classes/java/net/URI.java Mon Nov 16 13:36:36 2020 +0000 @@ -1950,7 +1950,6 @@ StringBuffer sb = new StringBuffer(); appendSchemeSpecificPart(sb, null, getAuthority(), getUserInfo(), host, port, getPath(), getQuery()); - if (sb.length() == 0) return; schemeSpecificPart = sb.toString(); }
--- a/src/share/classes/java/util/CurrencyData.properties Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/classes/java/util/CurrencyData.properties Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2020, 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,7 +49,7 @@ LVL428-LYD434-MAD504-MDL498-MGA969-MGF450-MKD807-MMK104-MNT496-MOP446-MRO478-MRU929-\ MTL470-MUR480-MVR462-MWK454-MXN484-MXV979-MYR458-MZM508-MZN943-NAD516-NGN566-\ NIO558-NLG528-NOK578-NPR524-NZD554-OMR512-PAB590-PEN604-PGK598-PHP608-\ - PKR586-PLN985-PTE620-PYG600-QAR634-ROL946-RON946-RSD941-RUB643-RUR810-RWF646-SAR682-\ + PKR586-PLN985-PTE620-PYG600-QAR634-ROL642-RON946-RSD941-RUB643-RUR810-RWF646-SAR682-\ SBD090-SCR690-SDD736-SDG938-SEK752-SGD702-SHP654-SIT705-SKK703-SLL694-SOS706-\ SRD968-SRG740-SSP728-STD678-STN930-SVC222-SYP760-SZL748-THB764-TJS972-TMM795-TMT934-TND788-TOP776-\ TPE626-TRL792-TRY949-TTD780-TWD901-TZS834-UAH980-UGX800-USD840-USN997-USS998-UYI940-\ @@ -587,7 +587,7 @@ minor0=\ ADP-BEF-BIF-BYB-BYR-CLP-DJF-ESP-GNF-\ - GRD-ISK-ITL-JPY-KMF-KRW-LUF-MGF-PYG-PTE-RWF-\ + GRD-ISK-ITL-JPY-KMF-KRW-LUF-MGF-PYG-PTE-ROL-RWF-\ TPE-TRL-UGX-UYI-VND-VUV-XAF-XOF-XPF minor3=\ BHD-IQD-JOD-KWD-LYD-OMR-TND
--- a/src/share/classes/jdk/jfr/internal/PlatformRecording.java Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/classes/jdk/jfr/internal/PlatformRecording.java Mon Nov 16 13:36:36 2020 +0000 @@ -318,7 +318,6 @@ PlatformRecording clone = recorder.newTemporaryRecording(); clone.setShouldWriteActiveRecordingEvent(false); clone.setName(getName()); - clone.setDestination(this.destination); clone.setToDisk(true); // We purposely don't clone settings here, since // a union a == a
--- a/src/share/classes/jdk/jfr/internal/dcmd/DCmdDump.java Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/classes/jdk/jfr/internal/dcmd/DCmdDump.java Mon Nov 16 13:36:36 2020 +0000 @@ -26,6 +26,8 @@ import java.io.IOException; import java.nio.file.InvalidPathException; +import java.nio.file.Path; +import java.nio.file.Paths; import java.time.Duration; import java.time.Instant; import java.time.LocalDate; @@ -126,26 +128,37 @@ recording = findRecording(name); } PlatformRecorder recorder = PrivateAccess.getInstance().getPlatformRecorder(); - synchronized (recorder) { - dump(recorder, recording, name, filename, maxSize, pathToGcRoots, beginTime, endTime); + + try { + synchronized (recorder) { + dump(recorder, recording, name, filename, maxSize, pathToGcRoots, beginTime, endTime); + } + } catch (IOException | InvalidPathException e) { + throw new DCmdException("Dump failed. Could not copy recording data. %s", e.getMessage()); } return getResult(); } - public void dump(PlatformRecorder recorder, Recording recording, String name, String filename, Long maxSize, Boolean pathToGcRoots, Instant beginTime, Instant endTime) throws DCmdException { + public void dump(PlatformRecorder recorder, Recording recording, String name, String filename, Long maxSize, Boolean pathToGcRoots, Instant beginTime, Instant endTime) throws DCmdException, IOException { try (PlatformRecording r = newSnapShot(recorder, recording, pathToGcRoots)) { r.filter(beginTime, endTime, maxSize); if (r.getChunks().isEmpty()) { throw new DCmdException("Dump failed. No data found in the specified interval."); } - SafePath dumpFile = resolvePath(recording, filename); - - // Needed for JVM - Utils.touch(dumpFile.toPath()); - r.dumpStopped(new WriteableUserPath(dumpFile.toPath())); - reportOperationComplete("Dumped", name, dumpFile); - } catch (IOException | InvalidPathException e) { - throw new DCmdException("Dump failed. Could not copy recording data. %s", e.getMessage()); + // If a filename exist, use it + // if a filename doesn't exist, use destination set earlier + // if destination doesn't exist, generate a filename + WriteableUserPath wup = null; + if (recording != null) { + PlatformRecording pRecording = PrivateAccess.getInstance().getPlatformRecording(recording); + wup = pRecording.getDestination(); + } + if (filename != null || (filename == null && wup == null) ) { + SafePath safe = resolvePath(recording, filename); + wup = new WriteableUserPath(safe.toPath()); + } + r.dumpStopped(wup); + reportOperationComplete("Dumped", name, new SafePath(wup.getRealPathText())); } }
--- a/src/share/classes/sun/management/ThreadImpl.java Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/classes/sun/management/ThreadImpl.java Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2019, 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 java.lang.management.ThreadInfo; import javax.management.ObjectName; +import java.util.Objects; /** * Implementation class for the thread subsystem. @@ -105,11 +106,15 @@ return cpuTimeEnabled; } - public boolean isThreadAllocatedMemoryEnabled() { + private void ensureThreadAllocatedMemorySupported() { if (!isThreadAllocatedMemorySupported()) { throw new UnsupportedOperationException( - "Thread allocated memory measurement is not supported"); + "Thread allocated memory measurement is not supported."); } + } + + public boolean isThreadAllocatedMemoryEnabled() { + ensureThreadAllocatedMemorySupported(); return allocatedMemoryEnabled; } @@ -144,16 +149,18 @@ return getThreadInfo(ids, 0); } + private void verifyThreadId(long id) { + if (id <= 0) { + throw new IllegalArgumentException( + "Invalid thread ID parameter: " + id); + } + } + private void verifyThreadIds(long[] ids) { - if (ids == null) { - throw new NullPointerException("Null ids parameter."); - } + Objects.requireNonNull(ids); for (int i = 0; i < ids.length; i++) { - if (ids[i] <= 0) { - throw new IllegalArgumentException( - "Invalid thread ID parameter: " + ids[i]); - } + verifyThreadId(ids[i]); } } @@ -324,26 +331,41 @@ } } + public long getCurrentThreadAllocatedBytes() { + if (isThreadAllocatedMemoryEnabled()) { + return getThreadAllocatedMemory0(0); + } + return -1; + } + + private boolean verifyThreadAllocatedMemory(long id) { + verifyThreadId(id); + return isThreadAllocatedMemoryEnabled(); + } + public long getThreadAllocatedBytes(long id) { - long[] ids = new long[1]; - ids[0] = id; - final long[] sizes = getThreadAllocatedBytes(ids); - return sizes[0]; + boolean verified = verifyThreadAllocatedMemory(id); + + if (verified) { + return getThreadAllocatedMemory0( + Thread.currentThread().getId() == id ? 0 : id); + } + return -1; } private boolean verifyThreadAllocatedMemory(long[] ids) { verifyThreadIds(ids); - - // check if Thread allocated memory measurement is supported. - if (!isThreadAllocatedMemorySupported()) { - throw new UnsupportedOperationException( - "Thread allocated memory measurement is not supported."); - } - return isThreadAllocatedMemoryEnabled(); } public long[] getThreadAllocatedBytes(long[] ids) { + Objects.requireNonNull(ids); + + if (ids.length == 1) { + long size = getThreadAllocatedBytes(ids[0]); + return new long[] { size }; + } + boolean verified = verifyThreadAllocatedMemory(ids); long[] sizes = new long[ids.length]; @@ -356,10 +378,7 @@ } public void setThreadAllocatedMemoryEnabled(boolean enable) { - if (!isThreadAllocatedMemorySupported()) { - throw new UnsupportedOperationException( - "Thread allocated memory measurement is not supported."); - } + ensureThreadAllocatedMemorySupported(); Util.checkControlAccess(); synchronized (this) { @@ -439,19 +458,42 @@ public ThreadInfo[] getThreadInfo(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers) { + return dumpThreads0(ids, lockedMonitors, lockedSynchronizers, + Integer.MAX_VALUE); + } + + public ThreadInfo[] getThreadInfo(long[] ids, + boolean lockedMonitors, + boolean lockedSynchronizers, + int maxDepth) { + if (maxDepth < 0) { + throw new IllegalArgumentException( + "Invalid maxDepth parameter: " + maxDepth); + } verifyThreadIds(ids); // ids has been verified to be non-null // an empty array of ids should return an empty array of ThreadInfos if (ids.length == 0) return new ThreadInfo[0]; verifyDumpThreads(lockedMonitors, lockedSynchronizers); - return dumpThreads0(ids, lockedMonitors, lockedSynchronizers); + return dumpThreads0(ids, lockedMonitors, lockedSynchronizers, maxDepth); } public ThreadInfo[] dumpAllThreads(boolean lockedMonitors, boolean lockedSynchronizers) { + return dumpAllThreads(lockedMonitors, lockedSynchronizers, + Integer.MAX_VALUE); + } + + public ThreadInfo[] dumpAllThreads(boolean lockedMonitors, + boolean lockedSynchronizers, + int maxDepth) { + if (maxDepth < 0) { + throw new IllegalArgumentException( + "Invalid maxDepth parameter: " + maxDepth); + } verifyDumpThreads(lockedMonitors, lockedSynchronizers); - return dumpThreads0(null, lockedMonitors, lockedSynchronizers); + return dumpThreads0(null, lockedMonitors, lockedSynchronizers, maxDepth); } // VM support where maxDepth == -1 to request entire stack dump @@ -463,6 +505,7 @@ private static native void getThreadTotalCpuTime1(long[] ids, long[] result); private static native long getThreadUserCpuTime0(long id); private static native void getThreadUserCpuTime1(long[] ids, long[] result); + private static native long getThreadAllocatedMemory0(long id); private static native void getThreadAllocatedMemory1(long[] ids, long[] result); private static native void setThreadCpuTimeEnabled0(boolean enable); private static native void setThreadAllocatedMemoryEnabled0(boolean enable); @@ -472,7 +515,8 @@ private static native void resetPeakThreadCount0(); private static native ThreadInfo[] dumpThreads0(long[] ids, boolean lockedMonitors, - boolean lockedSynchronizers); + boolean lockedSynchronizers, + int maxDepth); // tid == 0 to reset contention times for all threads private static native void resetContentionTimes0(long tid);
--- a/src/share/classes/sun/security/rsa/RSAPSSSignature.java Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/classes/sun/security/rsa/RSAPSSSignature.java Mon Nov 16 13:36:36 2020 +0000 @@ -304,11 +304,11 @@ private static void checkKeyLength(RSAKey key, int digestLen, int saltLen) throws SignatureException { if (key != null) { - int keyLength = getKeyLengthInBits(key) >> 3; + int keyLength = (getKeyLengthInBits(key) + 7) >> 3; int minLength = Math.addExact(Math.addExact(digestLen, saltLen), 2); if (keyLength < minLength) { throw new SignatureException - ("Key is too short, need min " + minLength); + ("Key is too short, need min " + minLength + " bytes"); } } } @@ -429,7 +429,7 @@ } try { int emBits = getKeyLengthInBits(this.privKey) - 1; - int emLen =(emBits + 7) >> 3; + int emLen = (emBits + 7) >> 3; int hLen = this.md.getDigestLength(); int dbLen = emLen - hLen - 1; int sLen = this.sigParams.getSaltLength(); @@ -472,6 +472,7 @@ // step11: set the leftmost (8emLen - emBits) bits of the leftmost // octet to 0 int numZeroBits = (emLen << 3) - emBits; + if (numZeroBits != 0) { byte MASK = (byte) (0xff >>> numZeroBits); em[0] = (byte) (em[0] & MASK); @@ -485,15 +486,22 @@ } /** - * Decode the signature data. Verify that the object identifier matches - * and return the message digest. + * Decode the signature data as under RFC8017 sec9.1.2 EMSA-PSS-VERIFY */ private boolean decodeSignature(byte[] mHash, byte[] em) throws IOException { int hLen = mHash.length; int sLen = this.sigParams.getSaltLength(); - int emLen = em.length; int emBits = getKeyLengthInBits(this.pubKey) - 1; + int emLen = (emBits + 7) >> 3; + + // When key length is 8N+1 bits (N+1 bytes), emBits = 8N, + // emLen = N which is one byte shorter than em.length. + // Otherwise, emLen should be same as em.length + int emOfs = em.length - emLen; + if ((emOfs == 1) && (em[0] != 0)) { + return false; + } // step3 if (emLen < (hLen + sLen + 2)) { @@ -501,16 +509,17 @@ } // step4 - if (em[emLen - 1] != (byte) 0xBC) { + if (em[emOfs + emLen - 1] != (byte) 0xBC) { return false; } // step6: check if the leftmost (8emLen - emBits) bits of the leftmost // octet are 0 int numZeroBits = (emLen << 3) - emBits; + if (numZeroBits != 0) { byte MASK = (byte) (0xff << (8 - numZeroBits)); - if ((em[0] & MASK) != 0) { + if ((em[emOfs] & MASK) != 0) { return false; } } @@ -526,7 +535,8 @@ int dbLen = emLen - hLen - 1; try { MGF1 mgf1 = new MGF1(mgfDigestAlgo); - mgf1.generateAndXor(em, dbLen, hLen, dbLen, em, 0); + mgf1.generateAndXor(em, emOfs + dbLen, hLen, dbLen, + em, emOfs); } catch (NoSuchAlgorithmException nsae) { throw new IOException(nsae.toString()); } @@ -535,12 +545,12 @@ // octet to 0 if (numZeroBits != 0) { byte MASK = (byte) (0xff >>> numZeroBits); - em[0] = (byte) (em[0] & MASK); + em[emOfs] = (byte) (em[emOfs] & MASK); } // step10 - int i = 0; - for (; i < dbLen - sLen - 1; i++) { + int i = emOfs; + for (; i < emOfs + (dbLen - sLen - 1); i++) { if (em[i] != 0) { return false; } @@ -553,13 +563,14 @@ digestReset = false; this.md.update(mHash); if (sLen > 0) { - this.md.update(em, (dbLen - sLen), sLen); + this.md.update(em, emOfs + (dbLen - sLen), sLen); } byte[] digest2 = this.md.digest(); digestReset = true; // step14 - byte[] digestInEM = Arrays.copyOfRange(em, dbLen, emLen - 1); + byte[] digestInEM = Arrays.copyOfRange(em, emOfs + dbLen, + emOfs + emLen - 1); return MessageDigest.isEqual(digest2, digestInEM); }
--- a/src/share/classes/sun/text/resources/ar/FormatData_ar_JO.java Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/classes/sun/text/resources/ar/FormatData_ar_JO.java Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2020, 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 @@ -56,7 +56,7 @@ "\u0634\u0628\u0627\u0637", // february "\u0622\u0630\u0627\u0631", // march "\u0646\u064a\u0633\u0627\u0646", // april - "\u0646\u0648\u0627\u0631", // may + "\u0623\u064a\u0627\u0631", // may "\u062d\u0632\u064a\u0631\u0627\u0646", // june "\u062a\u0645\u0648\u0632", // july "\u0622\u0628", // august @@ -73,7 +73,7 @@ "\u0634\u0628\u0627\u0637", // abb february "\u0622\u0630\u0627\u0631", // abb march "\u0646\u064a\u0633\u0627\u0646", // abb april - "\u0646\u0648\u0627\u0631", // abb may + "\u0623\u064a\u0627\u0631", // abb may "\u062d\u0632\u064a\u0631\u0627\u0646", // abb june "\u062a\u0645\u0648\u0632", // abb july "\u0622\u0628", // abb august
--- a/src/share/classes/sun/text/resources/ar/FormatData_ar_LB.java Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/classes/sun/text/resources/ar/FormatData_ar_LB.java Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2020, 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 @@ -56,7 +56,7 @@ "\u0634\u0628\u0627\u0637", // february "\u0622\u0630\u0627\u0631", // march "\u0646\u064a\u0633\u0627\u0646", // april - "\u0646\u0648\u0627\u0631", // may + "\u0623\u064a\u0627\u0631", // may "\u062d\u0632\u064a\u0631\u0627\u0646", // june "\u062a\u0645\u0648\u0632", // july "\u0622\u0628", // august @@ -73,7 +73,7 @@ "\u0634\u0628\u0627\u0637", // abb february "\u0622\u0630\u0627\u0631", // abb march "\u0646\u064a\u0633\u0627\u0646", // abb april - "\u0646\u0648\u0627\u0631", // abb may + "\u0623\u064a\u0627\u0631", // abb may "\u062d\u0632\u064a\u0631\u0627\u0646", // abb june "\u062a\u0645\u0648\u0632", // abb july "\u0622\u0628", // abb august
--- a/src/share/classes/sun/text/resources/ar/FormatData_ar_SY.java Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/classes/sun/text/resources/ar/FormatData_ar_SY.java Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2020, 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 @@ -56,8 +56,8 @@ "\u0634\u0628\u0627\u0637", // february "\u0622\u0630\u0627\u0631", // march "\u0646\u064a\u0633\u0627\u0646", // april - "\u0646\u0648\u0627\u0631\u0627\u0646", // may - "\u062d\u0632\u064a\u0631", // june + "\u0623\u064a\u0627\u0631", // may + "\u062d\u0632\u064a\u0631\u0627\u0646", // june "\u062a\u0645\u0648\u0632", // july "\u0622\u0628", // august "\u0623\u064a\u0644\u0648\u0644", // september @@ -73,7 +73,7 @@ "\u0634\u0628\u0627\u0637", // abb february "\u0622\u0630\u0627\u0631", // abb march "\u0646\u064a\u0633\u0627\u0646", // abb april - "\u0646\u0648\u0627\u0631", // abb may + "\u0623\u064a\u0627\u0631", // abb may "\u062d\u0632\u064a\u0631\u0627\u0646", // abb june "\u062a\u0645\u0648\u0632", // abb july "\u0622\u0628", // abb august
--- a/src/share/classes/sun/util/resources/TimeZoneNames.java Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/classes/sun/util/resources/TimeZoneNames.java Mon Nov 16 13:36:36 2020 +0000 @@ -1040,7 +1040,6 @@ {"US/Michigan", EST}, {"US/Mountain", MST}, {"US/Pacific", PST}, - {"US/Pacific-New", PST}, {"US/Samoa", SAMOA}, {"VST", ICT}, {"W-SU", MSK},
--- a/src/share/classes/sun/util/resources/de/TimeZoneNames_de.java Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/classes/sun/util/resources/de/TimeZoneNames_de.java Mon Nov 16 13:36:36 2020 +0000 @@ -1035,7 +1035,6 @@ {"US/Michigan", EST}, {"US/Mountain", MST}, {"US/Pacific", PST}, - {"US/Pacific-New", PST}, {"US/Samoa", SAMOA}, {"VST", ICT}, {"W-SU", MSK},
--- a/src/share/classes/sun/util/resources/es/TimeZoneNames_es.java Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/classes/sun/util/resources/es/TimeZoneNames_es.java Mon Nov 16 13:36:36 2020 +0000 @@ -1035,7 +1035,6 @@ {"US/Michigan", EST}, {"US/Mountain", MST}, {"US/Pacific", PST}, - {"US/Pacific-New", PST}, {"US/Samoa", SAMOA}, {"VST", ICT}, {"W-SU", MSK},
--- a/src/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java Mon Nov 16 13:36:36 2020 +0000 @@ -1035,7 +1035,6 @@ {"US/Michigan", EST}, {"US/Mountain", MST}, {"US/Pacific", PST}, - {"US/Pacific-New", PST}, {"US/Samoa", SAMOA}, {"VST", ICT}, {"W-SU", MSK},
--- a/src/share/classes/sun/util/resources/it/TimeZoneNames_it.java Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/classes/sun/util/resources/it/TimeZoneNames_it.java Mon Nov 16 13:36:36 2020 +0000 @@ -1035,7 +1035,6 @@ {"US/Michigan", EST}, {"US/Mountain", MST}, {"US/Pacific", PST}, - {"US/Pacific-New", PST}, {"US/Samoa", SAMOA}, {"VST", ICT}, {"W-SU", MSK},
--- a/src/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java Mon Nov 16 13:36:36 2020 +0000 @@ -1035,7 +1035,6 @@ {"US/Michigan", EST}, {"US/Mountain", MST}, {"US/Pacific", PST}, - {"US/Pacific-New", PST}, {"US/Samoa", SAMOA}, {"VST", ICT}, {"W-SU", MSK},
--- a/src/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java Mon Nov 16 13:36:36 2020 +0000 @@ -1035,7 +1035,6 @@ {"US/Michigan", EST}, {"US/Mountain", MST}, {"US/Pacific", PST}, - {"US/Pacific-New", PST}, {"US/Samoa", SAMOA}, {"VST", ICT}, {"W-SU", MSK},
--- a/src/share/classes/sun/util/resources/pt/TimeZoneNames_pt_BR.java Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/classes/sun/util/resources/pt/TimeZoneNames_pt_BR.java Mon Nov 16 13:36:36 2020 +0000 @@ -1035,7 +1035,6 @@ {"US/Michigan", EST}, {"US/Mountain", MST}, {"US/Pacific", PST}, - {"US/Pacific-New", PST}, {"US/Samoa", SAMOA}, {"VST", ICT}, {"W-SU", MSK},
--- a/src/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java Mon Nov 16 13:36:36 2020 +0000 @@ -1035,7 +1035,6 @@ {"US/Michigan", EST}, {"US/Mountain", MST}, {"US/Pacific", PST}, - {"US/Pacific-New", PST}, {"US/Samoa", SAMOA}, {"VST", ICT}, {"W-SU", MSK},
--- a/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_CN.java Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_CN.java Mon Nov 16 13:36:36 2020 +0000 @@ -1035,7 +1035,6 @@ {"US/Michigan", EST}, {"US/Mountain", MST}, {"US/Pacific", PST}, - {"US/Pacific-New", PST}, {"US/Samoa", SAMOA}, {"VST", ICT}, {"W-SU", MSK},
--- a/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_TW.java Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_TW.java Mon Nov 16 13:36:36 2020 +0000 @@ -1037,7 +1037,6 @@ {"US/Michigan", EST}, {"US/Mountain", MST}, {"US/Pacific", PST}, - {"US/Pacific-New", PST}, {"US/Samoa", SAMOA}, {"VST", ICT}, {"W-SU", MSK},
--- a/src/share/javavm/export/jmm.h Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/javavm/export/jmm.h Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2019, 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 @@ -219,7 +219,9 @@ typedef struct jmmInterface_1_ { void* reserved1; - void* reserved2; + jlong (JNICALL *GetOneThreadAllocatedMemory) + (JNIEnv *env, + jlong thread_id); jint (JNICALL *GetVersion) (JNIEnv *env); @@ -317,7 +319,11 @@ void (JNICALL *SetVMGlobal) (JNIEnv *env, jstring flag_name, jvalue new_value); - void* reserved6; + jobjectArray (JNICALL *DumpThreadsMaxDepth) (JNIEnv *env, + jlongArray ids, + jboolean lockedMonitors, + jboolean lockedSynchronizers, + jint maxDepth); jobjectArray (JNICALL *DumpThreads) (JNIEnv *env, jlongArray ids, jboolean lockedMonitors,
--- a/src/share/native/sun/java2d/cmm/lcms/cmsalpha.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmsalpha.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -57,6 +57,10 @@ // Alpha copy ------------------------------------------------------------------------------------------------------------------ +// This macro return words stored as big endian +#define CHANGE_ENDIAN(w) (cmsUInt16Number) ((cmsUInt16Number) ((w)<<8)|((w)>>8)) + + // Floor to byte, taking care of saturation cmsINLINE cmsUInt8Number _cmsQuickSaturateByte(cmsFloat64Number d) { @@ -104,6 +108,13 @@ } static +void from8to16SE(void* dst, const void* src) +{ + cmsUInt8Number n = *(cmsUInt8Number*)src; + *(cmsUInt16Number*)dst = CHANGE_ENDIAN(FROM_8_TO_16(n)); +} + +static void from8toFLT(void* dst, const void* src) { *(cmsFloat32Number*)dst = (*(cmsUInt8Number*)src) / 255.0f; @@ -137,22 +148,50 @@ } static +void from16SEto8(void* dst, const void* src) +{ + cmsUInt16Number n = *(cmsUInt16Number*)src; + *(cmsUInt8Number*)dst = FROM_16_TO_8(CHANGE_ENDIAN(n)); +} + +static void copy16(void* dst, const void* src) { memmove(dst, src, 2); } +static +void from16to16(void* dst, const void* src) +{ + cmsUInt16Number n = *(cmsUInt16Number*)src; + *(cmsUInt16Number*)dst = CHANGE_ENDIAN(n); +} + +static void from16toFLT(void* dst, const void* src) { *(cmsFloat32Number*)dst = (*(cmsUInt16Number*)src) / 65535.0f; } +static +void from16SEtoFLT(void* dst, const void* src) +{ + *(cmsFloat32Number*)dst = (CHANGE_ENDIAN(*(cmsUInt16Number*)src)) / 65535.0f; +} + +static void from16toDBL(void* dst, const void* src) { *(cmsFloat64Number*)dst = (*(cmsUInt16Number*)src) / 65535.0f; } static +void from16SEtoDBL(void* dst, const void* src) +{ + *(cmsFloat64Number*)dst = (CHANGE_ENDIAN(*(cmsUInt16Number*)src)) / 65535.0f; +} + +static void from16toHLF(void* dst, const void* src) { #ifndef CMS_NO_HALF_SUPPORT @@ -164,33 +203,53 @@ #endif } +static +void from16SEtoHLF(void* dst, const void* src) +{ +#ifndef CMS_NO_HALF_SUPPORT + cmsFloat32Number n = (CHANGE_ENDIAN(*(cmsUInt16Number*)src)) / 65535.0f; + *(cmsUInt16Number*)dst = _cmsFloat2Half(n); +#else + cmsUNUSED_PARAMETER(dst); + cmsUNUSED_PARAMETER(src); +#endif +} // From Float static void fromFLTto8(void* dst, const void* src) { - cmsFloat32Number n = *(cmsFloat32Number*)src; - *(cmsUInt8Number*)dst = _cmsQuickSaturateByte(n * 255.0f); + cmsFloat32Number n = *(cmsFloat32Number*)src; + *(cmsUInt8Number*)dst = _cmsQuickSaturateByte(n * 255.0f); } static void fromFLTto16(void* dst, const void* src) { - cmsFloat32Number n = *(cmsFloat32Number*)src; - *(cmsUInt16Number*)dst = _cmsQuickSaturateWord(n * 65535.0f); + cmsFloat32Number n = *(cmsFloat32Number*)src; + *(cmsUInt16Number*)dst = _cmsQuickSaturateWord(n * 65535.0f); +} + +static +void fromFLTto16SE(void* dst, const void* src) +{ + cmsFloat32Number n = *(cmsFloat32Number*)src; + cmsUInt16Number i = _cmsQuickSaturateWord(n * 65535.0f); + + *(cmsUInt16Number*)dst = CHANGE_ENDIAN(i); } static void copy32(void* dst, const void* src) { - memmove(dst, src, sizeof(cmsFloat32Number)); + memmove(dst, src, sizeof(cmsFloat32Number)); } static void fromFLTtoDBL(void* dst, const void* src) { - cmsFloat32Number n = *(cmsFloat32Number*)src; - *(cmsFloat64Number*)dst = (cmsFloat64Number)n; + cmsFloat32Number n = *(cmsFloat32Number*)src; + *(cmsFloat64Number*)dst = (cmsFloat64Number)n; } static @@ -234,6 +293,19 @@ } static +void fromHLFto16SE(void* dst, const void* src) +{ +#ifndef CMS_NO_HALF_SUPPORT + cmsFloat32Number n = _cmsHalf2Float(*(cmsUInt16Number*)src); + cmsUInt16Number i = _cmsQuickSaturateWord(n * 65535.0f); + *(cmsUInt16Number*)dst = CHANGE_ENDIAN(i); +#else + cmsUNUSED_PARAMETER(dst); + cmsUNUSED_PARAMETER(src); +#endif +} + +static void fromHLFtoFLT(void* dst, const void* src) { #ifndef CMS_NO_HALF_SUPPORT @@ -271,6 +343,14 @@ } static +void fromDBLto16SE(void* dst, const void* src) +{ + cmsFloat64Number n = *(cmsFloat64Number*)src; + cmsUInt16Number i = _cmsQuickSaturateWord(n * 65535.0f); + *(cmsUInt16Number*)dst = CHANGE_ENDIAN(i); +} + +static void fromDBLtoFLT(void* dst, const void* src) { cmsFloat64Number n = *(cmsFloat64Number*)src; @@ -303,37 +383,42 @@ cmsUInt32Number b = T_BYTES(frm); if (b == 0 && T_FLOAT(frm)) - return 4; // DBL + return 5; // DBL #ifndef CMS_NO_HALF_SUPPORT if (b == 2 && T_FLOAT(frm)) - return 2; // HLF + return 3; // HLF #endif if (b == 4 && T_FLOAT(frm)) - return 3; // FLT + return 4; // FLT if (b == 2 && !T_FLOAT(frm)) - return 1; // 16 + { + if (T_ENDIAN16(frm)) + return 2; // 16SE + else + return 1; // 16 + } if (b == 1 && !T_FLOAT(frm)) return 0; // 8 - return -1; // not recognized } -// Obtains a alpha-to-alpha funmction formatter +// Obtains an alpha-to-alpha function formatter static cmsFormatterAlphaFn _cmsGetFormatterAlpha(cmsContext id, cmsUInt32Number in, cmsUInt32Number out) { -static cmsFormatterAlphaFn FormattersAlpha[5][5] = { +static cmsFormatterAlphaFn FormattersAlpha[6][6] = { - /* from 8 */ { copy8, from8to16, from8toHLF, from8toFLT, from8toDBL }, - /* from 16*/ { from16to8, copy16, from16toHLF, from16toFLT, from16toDBL }, - /* from HLF*/ { fromHLFto8, fromHLFto16, copy16, fromHLFtoFLT, fromHLFtoDBL }, - /* from FLT*/ { fromFLTto8, fromFLTto16, fromFLTtoHLF, copy32, fromFLTtoDBL }, - /* from DBL*/ { fromDBLto8, fromDBLto16, fromDBLtoHLF, fromDBLtoFLT, copy64 }}; + /* from 8 */ { copy8, from8to16, from8to16SE, from8toHLF, from8toFLT, from8toDBL }, + /* from 16*/ { from16to8, copy16, from16to16, from16toHLF, from16toFLT, from16toDBL }, + /* from 16SE*/{ from16SEto8, from16to16, copy16, from16SEtoHLF,from16SEtoFLT, from16SEtoDBL }, + /* from HLF*/ { fromHLFto8, fromHLFto16, fromHLFto16SE, copy16, fromHLFtoFLT, fromHLFtoDBL }, + /* from FLT*/ { fromFLTto8, fromFLTto16, fromFLTto16SE, fromFLTtoHLF, copy32, fromFLTtoDBL }, + /* from DBL*/ { fromDBLto8, fromDBLto16, fromDBLto16SE, fromDBLtoHLF, fromDBLtoFLT, copy64 }}; int in_n = FormatterPos(in); int out_n = FormatterPos(out); - if (in_n < 0 || out_n < 0 || in_n > 4 || out_n > 4) { + if (in_n < 0 || out_n < 0 || in_n > 5 || out_n > 5) { cmsSignalError(id, cmsERROR_UNKNOWN_EXTENSION, "Unrecognized alpha channel width"); return NULL; @@ -515,6 +600,8 @@ // Check for conversions 8, 16, half, float, dbl copyValueFn = _cmsGetFormatterAlpha(p->ContextID, p->InputFormat, p->OutputFormat); + if (copyValueFn == NULL) + return; if (nExtra == 1) { // Optimized routine for copying a single extra channel quickly
--- a/src/share/native/sun/java2d/cmm/lcms/cmscam02.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmscam02.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"),
--- a/src/share/native/sun/java2d/cmm/lcms/cmscgats.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmscgats.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -158,7 +158,7 @@ // File stream being parsed typedef struct _FileContext { - char FileName[cmsMAX_PATH]; // File name if being readed from file + char FileName[cmsMAX_PATH]; // File name if being read from file FILE* Stream; // File stream or NULL if holded in memory } FILECTX; @@ -285,7 +285,7 @@ // needed. {"SAMPLE_BACKING", WRITE_STRINGIFY}, // Identifies the backing material used behind the sample during - // measurement. Allowed values are “black”, “white”, or {"na". + // measurement. Allowed values are "black", "white", or {"na". {"CHISQ_DOF", WRITE_STRINGIFY}, // Degrees of freedom associated with the Chi squared statistic // below properties are new in recent specs: @@ -300,7 +300,7 @@ // denote the use of filters such as none, D65, Red, Green or Blue. {"POLARIZATION", WRITE_STRINGIFY}, // Identifies the use of a physical polarization filter during measurement. Allowed - // values are {"yes”, “white”, “none” or “na”. + // values are {"yes", "white", "none" or "na". {"WEIGHTING_FUNCTION", WRITE_PAIR}, // Indicates such functions as: the CIE standard observer functions used in the // calculation of various data parameters (2 degree and 10 degree), CIE standard @@ -712,8 +712,8 @@ static void InSymbol(cmsIT8* it8) { - register char *idptr; - register int k; + CMSREGISTER char *idptr; + CMSREGISTER int k; SYMBOL key; int sng; @@ -2195,67 +2195,49 @@ if (cmsstrcasecmp(Fld, "SAMPLE_ID") == 0) { t -> SampleID = idField; - - for (i=0; i < t -> nPatches; i++) { - - char *Data = GetData(it8, i, idField); - if (Data) { - char Buffer[256]; - - strncpy(Buffer, Data, 255); - Buffer[255] = 0; - - if (strlen(Buffer) <= strlen(Data)) - strcpy(Data, Buffer); - else - SetData(it8, i, idField, Buffer); - - } - } - } // "LABEL" is an extension. It keeps references to forward tables - if ((cmsstrcasecmp(Fld, "LABEL") == 0) || Fld[0] == '$' ) { - - // Search for table references... - for (i=0; i < t -> nPatches; i++) { - - char *Label = GetData(it8, i, idField); - - if (Label) { - - cmsUInt32Number k; - - // This is the label, search for a table containing - // this property - - for (k=0; k < it8 ->TablesCount; k++) { - - TABLE* Table = it8 ->Tab + k; - KEYVALUE* p; - - if (IsAvailableOnList(Table->HeaderList, Label, NULL, &p)) { - - // Available, keep type and table - char Buffer[256]; - - char *Type = p ->Value; - int nTable = (int) k; - - snprintf(Buffer, 255, "%s %d %s", Label, nTable, Type ); - - SetData(it8, i, idField, Buffer); - } - } - - - } - + if ((cmsstrcasecmp(Fld, "LABEL") == 0) || Fld[0] == '$') { + + // Search for table references... + for (i = 0; i < t->nPatches; i++) { + + char* Label = GetData(it8, i, idField); + + if (Label) { + + cmsUInt32Number k; + + // This is the label, search for a table containing + // this property + + for (k = 0; k < it8->TablesCount; k++) { + + TABLE* Table = it8->Tab + k; + KEYVALUE* p; + + if (IsAvailableOnList(Table->HeaderList, Label, NULL, &p)) { + + // Available, keep type and table + char Buffer[256]; + + char* Type = p->Value; + int nTable = (int)k; + + snprintf(Buffer, 255, "%s %d %s", Label, nTable, Type); + + SetData(it8, i, idField, Buffer); + } } + } + + } + + } } @@ -2349,6 +2331,11 @@ it8 = (cmsIT8*) hIT8; it8 ->MemoryBlock = (char*) _cmsMalloc(ContextID, len + 1); + if (it8->MemoryBlock == NULL) + { + cmsIT8Free(hIT8); + return FALSE; + } strncpy(it8 ->MemoryBlock, (const char*) Ptr, len); it8 ->MemoryBlock[len] = 0;
--- a/src/share/native/sun/java2d/cmm/lcms/cmscnvrt.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmscnvrt.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -56,19 +56,6 @@ #include "lcms2_internal.h" -// Link several profiles to obtain a single LUT modelling the whole color transform. Intents, Black point -// compensation and Adaptation parameters may vary across profiles. BPC and Adaptation refers to the PCS -// after the profile. I.e, BPC[0] refers to connexion between profile(0) and profile(1) -cmsPipeline* _cmsLinkProfiles(cmsContext ContextID, - cmsUInt32Number nProfiles, - cmsUInt32Number Intents[], - cmsHPROFILE hProfiles[], - cmsBool BPC[], - cmsFloat64Number AdaptationStates[], - cmsUInt32Number dwFlags); - -//--------------------------------------------------------------------------------- - // This is the default routine for ICC-style intents. A user may decide to override it by using a plugin. // Supported intents are perceptual, relative colorimetric, saturation and ICC-absolute colorimetric static @@ -739,7 +726,7 @@ // Preserve black only if that is the only ink used static -int BlackPreservingGrayOnlySampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo) +int BlackPreservingGrayOnlySampler(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo) { GrayOnlyParams* bp = (GrayOnlyParams*) Cargo; @@ -866,7 +853,7 @@ // The CLUT will be stored at 16 bits, but calculations are performed at cmsFloat32Number precision static -int BlackPreservingSampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo) +int BlackPreservingSampler(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo) { int i; cmsFloat32Number Inf[4], Outf[4]; @@ -891,18 +878,18 @@ } // Try the original transform, - cmsPipelineEvalFloat( Inf, Outf, bp ->cmyk2cmyk); + cmsPipelineEvalFloat(Inf, Outf, bp ->cmyk2cmyk); // Store a copy of the floating point result into 16-bit for (i=0; i < 4; i++) Out[i] = _cmsQuickSaturateWord(Outf[i] * 65535.0); // Maybe K is already ok (mostly on K=0) - if ( fabs(Outf[3] - LabK[3]) < (3.0 / 65535.0) ) { + if (fabsf(Outf[3] - LabK[3]) < (3.0 / 65535.0)) { return TRUE; } - // K differ, mesure and keep Lab measurement for further usage + // K differ, measure and keep Lab measurement for further usage // this is done in relative colorimetric intent cmsDoTransform(bp->hProofOutput, Out, &ColorimetricLab, 1); @@ -923,7 +910,7 @@ Outf[3] = LabK[3]; // Apply TAC if needed - SumCMY = Outf[0] + Outf[1] + Outf[2]; + SumCMY = (cmsFloat64Number) Outf[0] + Outf[1] + Outf[2]; SumCMYK = SumCMY + Outf[3]; if (SumCMYK > bp ->MaxTAC) {
--- a/src/share/native/sun/java2d/cmm/lcms/cmserr.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmserr.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -67,7 +67,7 @@ // compare two strings ignoring case int CMSEXPORT cmsstrcasecmp(const char* s1, const char* s2) { - register const unsigned char *us1 = (const unsigned char *)s1, + CMSREGISTER const unsigned char *us1 = (const unsigned char *)s1, *us2 = (const unsigned char *)s2; while (toupper(*us1) == toupper(*us2++)) @@ -464,7 +464,7 @@ // There is no error handling at all. When a function fails, it returns proper value. // For example, all create functions does return NULL on failure. Other return FALSE // It may be interesting, for the developer, to know why the function is failing. -// for that reason, lcms2 does offer a logging function. This function does recive +// for that reason, lcms2 does offer a logging function. This function does receive // a ENGLISH string with some clues on what is going wrong. You can show this // info to the end user, or just create some sort of log. // The logging function should NOT terminate the program, as this obviously can leave
--- a/src/share/native/sun/java2d/cmm/lcms/cmsgamma.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmsgamma.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2013 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -329,7 +329,8 @@ return p; Error: - if (p -> Segments) _cmsFree(ContextID, p ->Segments); + if (p -> SegInterp) _cmsFree(ContextID, p -> SegInterp); + if (p -> Segments) _cmsFree(ContextID, p -> Segments); if (p -> Evals) _cmsFree(ContextID, p -> Evals); if (p ->Table16) _cmsFree(ContextID, p ->Table16); _cmsFree(ContextID, p); @@ -846,7 +847,7 @@ // // Parameters goes as: Curve, a, b, c, d, e, f // Type is the ICC type +1 -// if type is negative, then the curve is analyticaly inverted +// if type is negative, then the curve is analytically inverted cmsToneCurve* CMSEXPORT cmsBuildParametricToneCurve(cmsContext ContextID, cmsInt32Number Type, const cmsFloat64Number Params[]) { cmsCurveSegment Seg0; @@ -917,7 +918,7 @@ if (Curve -> Evals) _cmsFree(ContextID, Curve -> Evals); - if (Curve) _cmsFree(ContextID, Curve); + _cmsFree(ContextID, Curve); } // Utility function, free 3 gamma tables @@ -1287,7 +1288,7 @@ } // Is a table linear? Do not use parametric since we cannot guarantee some weird parameters resulting -// in a linear table. This way assures it is linear in 12 bits, which should be enought in most cases. +// in a linear table. This way assures it is linear in 12 bits, which should be enough in most cases. cmsBool CMSEXPORT cmsIsToneCurveLinear(const cmsToneCurve* Curve) { int i; @@ -1460,3 +1461,14 @@ return (sum / n); // The mean } + + +// Retrieve parameters on one-segment tone curves + +cmsFloat64Number* CMSEXPORT cmsGetToneCurveParams(const cmsToneCurve* t) +{ + _cmsAssert(t != NULL); + + if (t->nSegments != 1) return NULL; + return t->Segments[0].Params; +}
--- a/src/share/native/sun/java2d/cmm/lcms/cmsgmt.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmsgmt.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -240,7 +240,7 @@ static -int GamutSampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo) +int GamutSampler(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo) { GAMUTCHAIN* t = (GAMUTCHAIN* ) Cargo; cmsCIELab LabIn1, LabOut1; @@ -453,7 +453,7 @@ // This callback just accounts the maximum ink dropped in the given node. It does not populate any // memory, as the destination table is NULL. Its only purpose it to know the global maximum. static -int EstimateTAC(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void * Cargo) +int EstimateTAC(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void * Cargo) { cmsTACestimator* bp = (cmsTACestimator*) Cargo; cmsFloat32Number RoundTrip[cmsMAXCHANNELS];
--- a/src/share/native/sun/java2d/cmm/lcms/cmshalf.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmshalf.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -60,7 +60,7 @@ // This code is inspired in the paper "Fast Half Float Conversions" // by Jeroen van der Zijp -static cmsUInt32Number Mantissa[2048] = { +static const cmsUInt32Number Mantissa[2048] = { 0x00000000, 0x33800000, 0x34000000, 0x34400000, 0x34800000, 0x34a00000, 0x34c00000, 0x34e00000, 0x35000000, 0x35100000, 0x35200000, 0x35300000, @@ -420,7 +420,7 @@ 0x0400, 0x0400, 0x0400, 0x0400 }; -static cmsUInt32Number Exponent[64] = { +static const cmsUInt32Number Exponent[64] = { 0x00000000, 0x00800000, 0x01000000, 0x01800000, 0x02000000, 0x02800000, 0x03000000, 0x03800000, 0x04000000, 0x04800000, 0x05000000, 0x05800000, 0x06000000, 0x06800000, 0x07000000, 0x07800000, 0x08000000, 0x08800000, @@ -434,7 +434,7 @@ 0x8e000000, 0x8e800000, 0x8f000000, 0xc7800000 }; -static cmsUInt16Number Base[512] = { +static const cmsUInt16Number Base[512] = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -489,7 +489,7 @@ 0xfc00, 0xfc00 }; -static cmsUInt8Number Shift[512] = { +static const cmsUInt8Number Shift[512] = { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
--- a/src/share/native/sun/java2d/cmm/lcms/cmsintrp.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmsintrp.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -210,7 +210,7 @@ // Inline fixed point interpolation -cmsINLINE cmsUInt16Number LinearInterp(cmsS15Fixed16Number a, cmsS15Fixed16Number l, cmsS15Fixed16Number h) +cmsINLINE CMS_NO_SANITIZE cmsUInt16Number LinearInterp(cmsS15Fixed16Number a, cmsS15Fixed16Number l, cmsS15Fixed16Number h) { cmsUInt32Number dif = (cmsUInt32Number) (h - l) * a + 0x8000; dif = (dif >> 16) + l; @@ -220,9 +220,9 @@ // Linear interpolation (Fixed-point optimized) static -void LinLerp1D(register const cmsUInt16Number Value[], - register cmsUInt16Number Output[], - register const cmsInterpParams* p) +void LinLerp1D(CMSREGISTER const cmsUInt16Number Value[], + CMSREGISTER cmsUInt16Number Output[], + CMSREGISTER const cmsInterpParams* p) { cmsUInt16Number y1, y0; int cell0, rest; @@ -233,20 +233,20 @@ if (Value[0] == 0xffff) { Output[0] = LutTable[p -> Domain[0]]; - return; } - - val3 = p -> Domain[0] * Value[0]; - val3 = _cmsToFixedDomain(val3); // To fixed 15.16 + else + { + val3 = p->Domain[0] * Value[0]; + val3 = _cmsToFixedDomain(val3); // To fixed 15.16 - cell0 = FIXED_TO_INT(val3); // Cell is 16 MSB bits - rest = FIXED_REST_TO_INT(val3); // Rest is 16 LSB bits + cell0 = FIXED_TO_INT(val3); // Cell is 16 MSB bits + rest = FIXED_REST_TO_INT(val3); // Rest is 16 LSB bits - y0 = LutTable[cell0]; - y1 = LutTable[cell0+1]; + y0 = LutTable[cell0]; + y1 = LutTable[cell0 + 1]; - - Output[0] = LinearInterp(rest, y0, y1); + Output[0] = LinearInterp(rest, y0, y1); + } } // To prevent out of bounds indexing @@ -271,30 +271,31 @@ // if last value... if (val2 == 1.0) { Output[0] = LutTable[p -> Domain[0]]; - return; } + else + { + val2 *= p->Domain[0]; - val2 *= p -> Domain[0]; - - cell0 = (int) floor(val2); - cell1 = (int) ceil(val2); + cell0 = (int)floor(val2); + cell1 = (int)ceil(val2); - // Rest is 16 LSB bits - rest = val2 - cell0; + // Rest is 16 LSB bits + rest = val2 - cell0; - y0 = LutTable[cell0] ; - y1 = LutTable[cell1] ; + y0 = LutTable[cell0]; + y1 = LutTable[cell1]; - Output[0] = y0 + (y1 - y0) * rest; + Output[0] = y0 + (y1 - y0) * rest; + } } // Eval gray LUT having only one input channel -static -void Eval1Input(register const cmsUInt16Number Input[], - register cmsUInt16Number Output[], - register const cmsInterpParams* p16) +static CMS_NO_SANITIZE +void Eval1Input(CMSREGISTER const cmsUInt16Number Input[], + CMSREGISTER cmsUInt16Number Output[], + CMSREGISTER const cmsInterpParams* p16) { cmsS15Fixed16Number fk; cmsS15Fixed16Number k0, k1, rk, K0, K1; @@ -335,30 +336,36 @@ val2 = fclamp(Value[0]); - // if last value... - if (val2 == 1.0) { - Output[0] = LutTable[p -> Domain[0]]; - return; - } + // if last value... + if (val2 == 1.0) { + + y0 = LutTable[p->Domain[0]]; - val2 *= p -> Domain[0]; - - cell0 = (int) floor(val2); - cell1 = (int) ceil(val2); + for (OutChan = 0; OutChan < p->nOutputs; OutChan++) { + Output[OutChan] = y0; + } + } + else + { + val2 *= p->Domain[0]; - // Rest is 16 LSB bits - rest = val2 - cell0; + cell0 = (int)floor(val2); + cell1 = (int)ceil(val2); + + // Rest is 16 LSB bits + rest = val2 - cell0; - cell0 *= p -> opta[0]; - cell1 *= p -> opta[0]; + cell0 *= p->opta[0]; + cell1 *= p->opta[0]; - for (OutChan=0; OutChan < p->nOutputs; OutChan++) { + for (OutChan = 0; OutChan < p->nOutputs; OutChan++) { - y0 = LutTable[cell0 + OutChan] ; - y1 = LutTable[cell1 + OutChan] ; + y0 = LutTable[cell0 + OutChan]; + y1 = LutTable[cell1 + OutChan]; Output[OutChan] = y0 + (y1 - y0) * rest; - } + } + } } // Bilinear interpolation (16 bits) - cmsFloat32Number version @@ -415,10 +422,10 @@ } // Bilinear interpolation (16 bits) - optimized version -static -void BilinearInterp16(register const cmsUInt16Number Input[], - register cmsUInt16Number Output[], - register const cmsInterpParams* p) +static CMS_NO_SANITIZE +void BilinearInterp16(CMSREGISTER const cmsUInt16Number Input[], + CMSREGISTER cmsUInt16Number Output[], + CMSREGISTER const cmsInterpParams* p) { #define DENS(i,j) (LutTable[(i)+(j)+OutChan]) @@ -427,9 +434,9 @@ const cmsUInt16Number* LutTable = (cmsUInt16Number*) p ->Table; int OutChan, TotalOut; cmsS15Fixed16Number fx, fy; - register int rx, ry; + CMSREGISTER int rx, ry; int x0, y0; - register int X0, X1, Y0, Y1; + CMSREGISTER int X0, X1, Y0, Y1; int d00, d01, d10, d11, dx0, dx1, dxy; @@ -546,10 +553,10 @@ } // Trilinear interpolation (16 bits) - optimized version -static -void TrilinearInterp16(register const cmsUInt16Number Input[], - register cmsUInt16Number Output[], - register const cmsInterpParams* p) +static CMS_NO_SANITIZE +void TrilinearInterp16(CMSREGISTER const cmsUInt16Number Input[], + CMSREGISTER cmsUInt16Number Output[], + CMSREGISTER const cmsInterpParams* p) { #define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan]) @@ -558,9 +565,9 @@ const cmsUInt16Number* LutTable = (cmsUInt16Number*) p ->Table; int OutChan, TotalOut; cmsS15Fixed16Number fx, fy, fz; - register int rx, ry, rz; + CMSREGISTER int rx, ry, rz; int x0, y0, z0; - register int X0, X1, Y0, Y1, Z0, Z1; + CMSREGISTER int X0, X1, Y0, Y1, Z0, Z1; int d000, d001, d010, d011, d100, d101, d110, d111, dx00, dx01, dx10, dx11, @@ -726,10 +733,10 @@ -static -void TetrahedralInterp16(register const cmsUInt16Number Input[], - register cmsUInt16Number Output[], - register const cmsInterpParams* p) +static CMS_NO_SANITIZE +void TetrahedralInterp16(CMSREGISTER const cmsUInt16Number Input[], + CMSREGISTER cmsUInt16Number Output[], + CMSREGISTER const cmsInterpParams* p) { const cmsUInt16Number* LutTable = (cmsUInt16Number*) p -> Table; cmsS15Fixed16Number fx, fy, fz; @@ -860,10 +867,10 @@ #define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan]) -static -void Eval4Inputs(register const cmsUInt16Number Input[], - register cmsUInt16Number Output[], - register const cmsInterpParams* p16) +static CMS_NO_SANITIZE +void Eval4Inputs(CMSREGISTER const cmsUInt16Number Input[], + CMSREGISTER cmsUInt16Number Output[], + CMSREGISTER const cmsInterpParams* p16) { const cmsUInt16Number* LutTable; cmsS15Fixed16Number fk; @@ -964,9 +971,9 @@ c1 = c2 = c3 = 0; } - Rest = c1 * rx + c2 * ry + c3 * rz; + Rest = c1 * rx + c2 * ry + c3 * rz; - Tmp1[OutChan] = (cmsUInt16Number)(c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest))); + Tmp1[OutChan] = (cmsUInt16Number)(c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest))); } @@ -1028,9 +1035,9 @@ c1 = c2 = c3 = 0; } - Rest = c1 * rx + c2 * ry + c3 * rz; + Rest = c1 * rx + c2 * ry + c3 * rz; - Tmp2[OutChan] = (cmsUInt16Number) (c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest))); + Tmp2[OutChan] = (cmsUInt16Number) (c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest))); } @@ -1089,11 +1096,11 @@ } -static -void Eval5Inputs(register const cmsUInt16Number Input[], - register cmsUInt16Number Output[], +static CMS_NO_SANITIZE +void Eval5Inputs(CMSREGISTER const cmsUInt16Number Input[], + CMSREGISTER cmsUInt16Number Output[], - register const cmsInterpParams* p16) + CMSREGISTER const cmsInterpParams* p16) { const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table; cmsS15Fixed16Number fk; @@ -1178,10 +1185,10 @@ -static -void Eval6Inputs(register const cmsUInt16Number Input[], - register cmsUInt16Number Output[], - register const cmsInterpParams* p16) +static CMS_NO_SANITIZE +void Eval6Inputs(CMSREGISTER const cmsUInt16Number Input[], + CMSREGISTER cmsUInt16Number Output[], + CMSREGISTER const cmsInterpParams* p16) { const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table; cmsS15Fixed16Number fk; @@ -1264,10 +1271,10 @@ } -static -void Eval7Inputs(register const cmsUInt16Number Input[], - register cmsUInt16Number Output[], - register const cmsInterpParams* p16) +static CMS_NO_SANITIZE +void Eval7Inputs(CMSREGISTER const cmsUInt16Number Input[], + CMSREGISTER cmsUInt16Number Output[], + CMSREGISTER const cmsInterpParams* p16) { const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table; cmsS15Fixed16Number fk; @@ -1350,10 +1357,10 @@ } } -static -void Eval8Inputs(register const cmsUInt16Number Input[], - register cmsUInt16Number Output[], - register const cmsInterpParams* p16) +static CMS_NO_SANITIZE +void Eval8Inputs(CMSREGISTER const cmsUInt16Number Input[], + CMSREGISTER cmsUInt16Number Output[], + CMSREGISTER const cmsInterpParams* p16) { const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table; cmsS15Fixed16Number fk;
--- a/src/share/native/sun/java2d/cmm/lcms/cmsio0.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmsio0.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -263,7 +263,7 @@ // Create a iohandler for memory block. AccessMode=='r' assumes the iohandler is going to read, and makes // a copy of the memory block for letting user to free the memory after invoking open profile. In write -// mode ("w"), Buffere points to the begin of memory block to be written. +// mode ("w"), Buffer points to the begin of memory block to be written. cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromMem(cmsContext ContextID, void *Buffer, cmsUInt32Number size, const char* AccessMode) { cmsIOHANDLER* iohandler = NULL; @@ -662,7 +662,6 @@ else { // No, make a new one - if (Icc -> TagCount >= MAX_TABLE_TAG) { cmsSignalError(Icc ->ContextID, cmsERROR_RANGE, "Too many tags (%d)", MAX_TABLE_TAG); return FALSE; @@ -683,8 +682,6 @@ return _cmsSearchTag(Icc, sig, FALSE) >= 0; } - - // Enforces that the profile version is per. spec. // Operates on the big endian bytes from the profile. // Called before converting to platform endianness. @@ -1596,7 +1593,7 @@ if (!IsTypeSupported(TagDescriptor, BaseType)) goto Error; - TagSize -= 8; // Alredy read by the type base logic + TagSize -= 8; // Already read by the type base logic // Get type handler TypeHandler = _cmsGetTagTypeHandler(Icc ->ContextID, BaseType); @@ -1631,6 +1628,7 @@ _cmsTagSignature2String(String, sig); cmsSignalError(Icc ->ContextID, cmsERROR_CORRUPTION_DETECTED, "'%s' Inconsistent number of items: expected %d, got %d", String, TagDescriptor ->ElemCount, ElemCount); + goto Error; } @@ -1827,7 +1825,7 @@ return Icc ->TagSizes[i]; } - // The data has been already read, or written. But wait!, maybe the user choosed to save as + // The data has been already read, or written. But wait!, maybe the user chose to save as // raw data. In this case, return the raw data directly if (Icc ->TagSaveAsRaw[i]) { @@ -1847,7 +1845,7 @@ return Icc ->TagSizes[i]; } - // Already readed, or previously set by cmsWriteTag(). We need to serialize that + // Already read, or previously set by cmsWriteTag(). We need to serialize that // data to raw in order to maintain consistency. _cmsUnlockMutex(Icc->ContextID, Icc ->UsrMutex);
--- a/src/share/native/sun/java2d/cmm/lcms/cmsio1.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmsio1.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -230,7 +230,6 @@ return Lut; Error: - cmsFreeToneCurve(GrayTRC); cmsPipelineFree(Lut); return NULL; }
--- a/src/share/native/sun/java2d/cmm/lcms/cmslut.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmslut.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -426,37 +426,31 @@ NewElem = (_cmsStageMatrixData*) _cmsMallocZero(ContextID, sizeof(_cmsStageMatrixData)); - if (NewElem == NULL) return NULL; - + if (NewElem == NULL) goto Error; + NewMPE->Data = (void*)NewElem; NewElem ->Double = (cmsFloat64Number*) _cmsCalloc(ContextID, n, sizeof(cmsFloat64Number)); - - if (NewElem->Double == NULL) { - MatrixElemTypeFree(NewMPE); - return NULL; - } + if (NewElem->Double == NULL) goto Error; for (i=0; i < n; i++) { NewElem ->Double[i] = Matrix[i]; } - if (Offset != NULL) { NewElem ->Offset = (cmsFloat64Number*) _cmsCalloc(ContextID, Rows, sizeof(cmsFloat64Number)); - if (NewElem->Offset == NULL) { - MatrixElemTypeFree(NewMPE); - return NULL; - } + if (NewElem->Offset == NULL) goto Error; for (i=0; i < Rows; i++) { NewElem ->Offset[i] = Offset[i]; } - } - NewMPE ->Data = (void*) NewElem; return NewMPE; + +Error: + cmsStageFree(NewMPE); + return NULL; } @@ -729,7 +723,7 @@ static -int IdentitySampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void * Cargo) +int IdentitySampler(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void * Cargo) { int nChan = *(int*) Cargo; int i; @@ -1346,7 +1340,7 @@ // Default to evaluate the LUT on 16 bit-basis. Precision is retained. static -void _LUTeval16(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register const void* D) +void _LUTeval16(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER const void* D) { cmsPipeline* lut = (cmsPipeline*) D; cmsStage *mpe; @@ -1372,7 +1366,7 @@ // Does evaluate the LUT on cmsFloat32Number-basis. static -void _LUTevalFloat(register const cmsFloat32Number In[], register cmsFloat32Number Out[], const void* D) +void _LUTevalFloat(CMSREGISTER const cmsFloat32Number In[], CMSREGISTER cmsFloat32Number Out[], const void* D) { cmsPipeline* lut = (cmsPipeline*) D; cmsStage *mpe;
--- a/src/share/native/sun/java2d/cmm/lcms/cmsmd5.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmsmd5.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -94,10 +94,9 @@ static -void MD5_Transform(cmsUInt32Number buf[4], cmsUInt32Number in[16]) - +void cmsMD5_Transform(cmsUInt32Number buf[4], cmsUInt32Number in[16]) { - register cmsUInt32Number a, b, c, d; + CMSREGISTER cmsUInt32Number a, b, c, d; a = buf[0]; b = buf[1]; @@ -180,8 +179,8 @@ // Create a MD5 object -static -cmsHANDLE MD5alloc(cmsContext ContextID) + +cmsHANDLE CMSEXPORT cmsMD5alloc(cmsContext ContextID) { _cmsMD5* ctx = (_cmsMD5*) _cmsMallocZero(ContextID, sizeof(_cmsMD5)); if (ctx == NULL) return NULL; @@ -199,9 +198,7 @@ return (cmsHANDLE) ctx; } - -static -void MD5add(cmsHANDLE Handle, cmsUInt8Number* buf, cmsUInt32Number len) +void CMSEXPORT cmsMD5add(cmsHANDLE Handle, const cmsUInt8Number* buf, cmsUInt32Number len) { _cmsMD5* ctx = (_cmsMD5*) Handle; cmsUInt32Number t; @@ -227,7 +224,7 @@ memmove(p, buf, t); byteReverse(ctx->in, 16); - MD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in); + cmsMD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in); buf += t; len -= t; } @@ -235,7 +232,7 @@ while (len >= 64) { memmove(ctx->in, buf, 64); byteReverse(ctx->in, 16); - MD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in); + cmsMD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in); buf += 64; len -= 64; } @@ -244,8 +241,7 @@ } // Destroy the object and return the checksum -static -void MD5finish(cmsProfileID* ProfileID, cmsHANDLE Handle) +void CMSEXPORT cmsMD5finish(cmsProfileID* ProfileID, cmsHANDLE Handle) { _cmsMD5* ctx = (_cmsMD5*) Handle; cmsUInt32Number count; @@ -262,7 +258,7 @@ memset(p, 0, count); byteReverse(ctx->in, 16); - MD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in); + cmsMD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in); memset(ctx->in, 0, 56); } else { @@ -273,7 +269,7 @@ ((cmsUInt32Number *) ctx->in)[14] = ctx->bits[0]; ((cmsUInt32Number *) ctx->in)[15] = ctx->bits[1]; - MD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in); + cmsMD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in); byteReverse((cmsUInt8Number *) ctx->buf, 4); memmove(ProfileID ->ID8, ctx->buf, 16); @@ -319,11 +315,11 @@ if (!cmsSaveProfileToMem(hProfile, Mem, &BytesNeeded)) goto Error; // Create MD5 object - MD5 = MD5alloc(ContextID); + MD5 = cmsMD5alloc(ContextID); if (MD5 == NULL) goto Error; // Add all bytes - MD5add(MD5, Mem, BytesNeeded); + cmsMD5add(MD5, Mem, BytesNeeded); // Temp storage is no longer needed _cmsFree(ContextID, Mem); @@ -332,7 +328,7 @@ memmove(Icc, &Keep, sizeof(_cmsICCPROFILE)); // And store the ID - MD5finish(&Icc ->ProfileID, MD5); + cmsMD5finish(&Icc ->ProfileID, MD5); return TRUE; Error:
--- a/src/share/native/sun/java2d/cmm/lcms/cmsmtrx.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmsmtrx.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"),
--- a/src/share/native/sun/java2d/cmm/lcms/cmsnamed.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmsnamed.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -567,7 +567,7 @@ while (v -> Allocated < n) { if (!GrowNamedColorList(v)) { - _cmsFree(ContextID, (void*) v); + cmsFreeNamedColorList(v); return NULL; } } @@ -600,7 +600,11 @@ // For really large tables we need this while (NewNC ->Allocated < v ->Allocated){ - if (!GrowNamedColorList(NewNC)) return NULL; + if (!GrowNamedColorList(NewNC)) + { + cmsFreeNamedColorList(NewNC); + return NULL; + } } memmove(NewNC ->Prefix, v ->Prefix, sizeof(v ->Prefix));
--- a/src/share/native/sun/java2d/cmm/lcms/cmsopt.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmsopt.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -317,9 +317,9 @@ } static -void Eval16nop1D(register const cmsUInt16Number Input[], - register cmsUInt16Number Output[], - register const struct _cms_interp_struc* p) +void Eval16nop1D(CMSREGISTER const cmsUInt16Number Input[], + CMSREGISTER cmsUInt16Number Output[], + CMSREGISTER const struct _cms_interp_struc* p) { Output[0] = Input[0]; @@ -327,9 +327,9 @@ } static -void PrelinEval16(register const cmsUInt16Number Input[], - register cmsUInt16Number Output[], - register const void* D) +void PrelinEval16(CMSREGISTER const cmsUInt16Number Input[], + CMSREGISTER cmsUInt16Number Output[], + CMSREGISTER const void* D) { Prelin16Data* p16 = (Prelin16Data*) D; cmsUInt16Number StageABC[MAX_INPUT_DIMENSIONS]; @@ -435,7 +435,7 @@ // Sampler implemented by another LUT. This is a clean way to precalculate the devicelink 3D CLUT for // almost any transform. We use floating point precision and then convert from floating point to 16 bits. static -cmsInt32Number XFormSampler16(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo) +cmsInt32Number XFormSampler16(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo) { cmsPipeline* Lut = (cmsPipeline*) Cargo; cmsFloat32Number InFloat[cmsMAXCHANNELS], OutFloat[cmsMAXCHANNELS]; @@ -552,10 +552,10 @@ return FALSE; } - for (i = 0; i < (int) nChannelsOut; i++) - Grid->Tab.T[index + i] = Value[i]; + for (i = 0; i < (int) nChannelsOut; i++) + Grid->Tab.T[index + i] = Value[i]; - return TRUE; + return TRUE; } // Auxiliary, to see if two values are equal or very different @@ -673,7 +673,7 @@ cmsToneCurve** DataSetOut; Prelin16Data* p16; - // This is a loosy optimization! does not apply in floating-point cases + // This is a lossy optimization! does not apply in floating-point cases if (_cmsFormatterIsFloat(*InputFormat) || _cmsFormatterIsFloat(*OutputFormat)) return FALSE; ColorSpace = _cmsICCcolorSpace((int) T_COLORSPACE(*InputFormat)); @@ -937,19 +937,19 @@ // A optimized interpolation for 8-bit input. #define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan]) -static -void PrelinEval8(register const cmsUInt16Number Input[], - register cmsUInt16Number Output[], - register const void* D) +static CMS_NO_SANITIZE +void PrelinEval8(CMSREGISTER const cmsUInt16Number Input[], + CMSREGISTER cmsUInt16Number Output[], + CMSREGISTER const void* D) { cmsUInt8Number r, g, b; cmsS15Fixed16Number rx, ry, rz; cmsS15Fixed16Number c0, c1, c2, c3, Rest; int OutChan; - register cmsS15Fixed16Number X0, X1, Y0, Y1, Z0, Z1; + CMSREGISTER cmsS15Fixed16Number X0, X1, Y0, Y1, Z0, Z1; Prelin8Data* p8 = (Prelin8Data*) D; - register const cmsInterpParams* p = p8 ->p; + CMSREGISTER const cmsInterpParams* p = p8 ->p; int TotalOut = (int) p -> nOutputs; const cmsUInt16Number* LutTable = (const cmsUInt16Number*) p->Table; @@ -1020,8 +1020,8 @@ c1 = c2 = c3 = 0; } - Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001; - Output[OutChan] = (cmsUInt16Number) (c0 + ((Rest + (Rest >> 16)) >> 16)); + Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001; + Output[OutChan] = (cmsUInt16Number) (c0 + ((Rest + (Rest >> 16)) >> 16)); } } @@ -1070,7 +1070,7 @@ _cmsStageCLutData* OptimizedPrelinCLUT; - // This is a loosy optimization! does not apply in floating-point cases + // This is a lossy optimization! does not apply in floating-point cases if (_cmsFormatterIsFloat(*InputFormat) || _cmsFormatterIsFloat(*OutputFormat)) return FALSE; // Only on chunky RGB @@ -1113,6 +1113,7 @@ { cmsStage* last = cmsPipelineGetPtrToLastStage(OriginalLut); + if (last == NULL) goto Error; if (cmsStageType(last) == cmsSigCurveSetElemType) { _cmsStageToneCurvesData* Data = (_cmsStageToneCurvesData*)cmsStageData(last); @@ -1221,10 +1222,7 @@ Prelin8Data* p8 = PrelinOpt8alloc(OptimizedLUT ->ContextID, OptimizedPrelinCLUT ->Params, OptimizedPrelinCurves); - if (p8 == NULL) { - cmsPipelineFree(OptimizedLUT); - return FALSE; - } + if (p8 == NULL) return FALSE; _cmsPipelineSetOptimizationParameters(OptimizedLUT, PrelinEval8, (void*) p8, Prelin8free, Prelin8dup); @@ -1234,10 +1232,7 @@ Prelin16Data* p16 = PrelinOpt16alloc(OptimizedLUT ->ContextID, OptimizedPrelinCLUT ->Params, 3, OptimizedPrelinCurves, 3, NULL); - if (p16 == NULL) { - cmsPipelineFree(OptimizedLUT); - return FALSE; - } + if (p16 == NULL) return FALSE; _cmsPipelineSetOptimizationParameters(OptimizedLUT, PrelinEval16, (void*) p16, PrelinOpt16free, Prelin16dup); @@ -1365,9 +1360,9 @@ } static -void FastEvaluateCurves8(register const cmsUInt16Number In[], - register cmsUInt16Number Out[], - register const void* D) +void FastEvaluateCurves8(CMSREGISTER const cmsUInt16Number In[], + CMSREGISTER cmsUInt16Number Out[], + CMSREGISTER const void* D) { Curves16Data* Data = (Curves16Data*) D; int x; @@ -1382,9 +1377,9 @@ static -void FastEvaluateCurves16(register const cmsUInt16Number In[], - register cmsUInt16Number Out[], - register const void* D) +void FastEvaluateCurves16(CMSREGISTER const cmsUInt16Number In[], + CMSREGISTER cmsUInt16Number Out[], + CMSREGISTER const void* D) { Curves16Data* Data = (Curves16Data*) D; cmsUInt32Number i; @@ -1396,9 +1391,9 @@ static -void FastIdentity16(register const cmsUInt16Number In[], - register cmsUInt16Number Out[], - register const void* D) +void FastIdentity16(CMSREGISTER const cmsUInt16Number In[], + CMSREGISTER cmsUInt16Number Out[], + CMSREGISTER const void* D) { cmsPipeline* Lut = (cmsPipeline*) D; cmsUInt32Number i; @@ -1423,7 +1418,7 @@ cmsStage* ObtainedCurves = NULL; - // This is a loosy optimization! does not apply in floating-point cases + // This is a lossy optimization! does not apply in floating-point cases if (_cmsFormatterIsFloat(*InputFormat) || _cmsFormatterIsFloat(*OutputFormat)) return FALSE; // Only curves in this LUT? @@ -1473,14 +1468,15 @@ // Maybe the curves are linear at the end if (!AllCurvesAreLinear(ObtainedCurves)) { + _cmsStageToneCurvesData* Data; if (!cmsPipelineInsertStage(Dest, cmsAT_BEGIN, ObtainedCurves)) goto Error; + Data = (_cmsStageToneCurvesData*) cmsStageData(ObtainedCurves); + ObtainedCurves = NULL; // If the curves are to be applied in 8 bits, we can save memory if (_cmsFormatterIs8bit(*InputFormat)) { - - _cmsStageToneCurvesData* Data = (_cmsStageToneCurvesData*) ObtainedCurves ->Data; Curves16Data* c16 = CurvesAlloc(Dest ->ContextID, Data ->nCurves, 256, Data ->TheCurves); if (c16 == NULL) goto Error; @@ -1489,8 +1485,6 @@ } else { - - _cmsStageToneCurvesData* Data = (_cmsStageToneCurvesData*) cmsStageData(ObtainedCurves); Curves16Data* c16 = CurvesAlloc(Dest ->ContextID, Data ->nCurves, 65536, Data ->TheCurves); if (c16 == NULL) goto Error; @@ -1557,9 +1551,9 @@ // to accomplish some performance. Actually it takes 256x3 16 bits tables and 16385 x 3 tables of 8 bits, // in total about 50K, and the performance boost is huge! static -void MatShaperEval16(register const cmsUInt16Number In[], - register cmsUInt16Number Out[], - register const void* D) +void MatShaperEval16(CMSREGISTER const cmsUInt16Number In[], + CMSREGISTER cmsUInt16Number Out[], + CMSREGISTER const void* D) { MatShaper8Data* p = (MatShaper8Data*) D; cmsS1Fixed14Number l1, l2, l3, r, g, b; @@ -1799,8 +1793,8 @@ _cmsStageToneCurvesData* mpeC1 = (_cmsStageToneCurvesData*) cmsStageData(Curve1); _cmsStageToneCurvesData* mpeC2 = (_cmsStageToneCurvesData*) cmsStageData(Curve2); - // In this particular optimization, caché does not help as it takes more time to deal with - // the caché that with the pixel handling + // In this particular optimization, cache does not help as it takes more time to deal with + // the cache that with the pixel handling *dwFlags |= cmsFLAGS_NOCACHE; // Setup the optimizarion routines
--- a/src/share/native/sun/java2d/cmm/lcms/cmspack.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmspack.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -121,10 +121,10 @@ // Does almost everything but is slow static -cmsUInt8Number* UnrollChunkyBytes(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* UnrollChunkyBytes(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info ->InputFormat); @@ -168,10 +168,10 @@ // Extra channels are just ignored because come in the next planes static -cmsUInt8Number* UnrollPlanarBytes(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* UnrollPlanarBytes(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info ->InputFormat); @@ -198,10 +198,10 @@ // Special cases, provided for performance static -cmsUInt8Number* Unroll4Bytes(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll4Bytes(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[0] = FROM_8_TO_16(*accum); accum++; // C wIn[1] = FROM_8_TO_16(*accum); accum++; // M @@ -215,10 +215,10 @@ } static -cmsUInt8Number* Unroll4BytesReverse(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll4BytesReverse(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[0] = FROM_8_TO_16(REVERSE_FLAVOR_8(*accum)); accum++; // C wIn[1] = FROM_8_TO_16(REVERSE_FLAVOR_8(*accum)); accum++; // M @@ -232,10 +232,10 @@ } static -cmsUInt8Number* Unroll4BytesSwapFirst(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll4BytesSwapFirst(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[3] = FROM_8_TO_16(*accum); accum++; // K wIn[0] = FROM_8_TO_16(*accum); accum++; // C @@ -250,10 +250,10 @@ // KYMC static -cmsUInt8Number* Unroll4BytesSwap(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll4BytesSwap(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[3] = FROM_8_TO_16(*accum); accum++; // K wIn[2] = FROM_8_TO_16(*accum); accum++; // Y @@ -267,10 +267,10 @@ } static -cmsUInt8Number* Unroll4BytesSwapSwapFirst(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll4BytesSwapSwapFirst(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[2] = FROM_8_TO_16(*accum); accum++; // K wIn[1] = FROM_8_TO_16(*accum); accum++; // Y @@ -284,10 +284,10 @@ } static -cmsUInt8Number* Unroll3Bytes(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll3Bytes(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[0] = FROM_8_TO_16(*accum); accum++; // R wIn[1] = FROM_8_TO_16(*accum); accum++; // G @@ -300,10 +300,10 @@ } static -cmsUInt8Number* Unroll3BytesSkip1Swap(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll3BytesSkip1Swap(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { accum++; // A wIn[2] = FROM_8_TO_16(*accum); accum++; // B @@ -317,10 +317,10 @@ } static -cmsUInt8Number* Unroll3BytesSkip1SwapSwapFirst(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll3BytesSkip1SwapSwapFirst(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[2] = FROM_8_TO_16(*accum); accum++; // B wIn[1] = FROM_8_TO_16(*accum); accum++; // G @@ -334,10 +334,10 @@ } static -cmsUInt8Number* Unroll3BytesSkip1SwapFirst(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll3BytesSkip1SwapFirst(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { accum++; // A wIn[0] = FROM_8_TO_16(*accum); accum++; // R @@ -353,10 +353,10 @@ // BRG static -cmsUInt8Number* Unroll3BytesSwap(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll3BytesSwap(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[2] = FROM_8_TO_16(*accum); accum++; // B wIn[1] = FROM_8_TO_16(*accum); accum++; // G @@ -369,10 +369,10 @@ } static -cmsUInt8Number* UnrollLabV2_8(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* UnrollLabV2_8(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[0] = FomLabV2ToLabV4(FROM_8_TO_16(*accum)); accum++; // L wIn[1] = FomLabV2ToLabV4(FROM_8_TO_16(*accum)); accum++; // a @@ -385,10 +385,10 @@ } static -cmsUInt8Number* UnrollALabV2_8(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* UnrollALabV2_8(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { accum++; // A wIn[0] = FomLabV2ToLabV4(FROM_8_TO_16(*accum)); accum++; // L @@ -402,10 +402,10 @@ } static -cmsUInt8Number* UnrollLabV2_16(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* UnrollLabV2_16(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[0] = FomLabV2ToLabV4(*(cmsUInt16Number*) accum); accum += 2; // L wIn[1] = FomLabV2ToLabV4(*(cmsUInt16Number*) accum); accum += 2; // a @@ -419,10 +419,10 @@ // for duplex static -cmsUInt8Number* Unroll2Bytes(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll2Bytes(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[0] = FROM_8_TO_16(*accum); accum++; // ch1 wIn[1] = FROM_8_TO_16(*accum); accum++; // ch2 @@ -438,10 +438,10 @@ // Monochrome duplicates L into RGB for null-transforms static -cmsUInt8Number* Unroll1Byte(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll1Byte(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[0] = wIn[1] = wIn[2] = FROM_8_TO_16(*accum); accum++; // L @@ -453,10 +453,10 @@ static -cmsUInt8Number* Unroll1ByteSkip1(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll1ByteSkip1(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[0] = wIn[1] = wIn[2] = FROM_8_TO_16(*accum); accum++; // L accum += 1; @@ -468,10 +468,10 @@ } static -cmsUInt8Number* Unroll1ByteSkip2(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll1ByteSkip2(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[0] = wIn[1] = wIn[2] = FROM_8_TO_16(*accum); accum++; // L accum += 2; @@ -483,10 +483,10 @@ } static -cmsUInt8Number* Unroll1ByteReversed(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll1ByteReversed(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[0] = wIn[1] = wIn[2] = REVERSE_FLAVOR_16(FROM_8_TO_16(*accum)); accum++; // L @@ -498,10 +498,10 @@ static -cmsUInt8Number* UnrollAnyWords(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* UnrollAnyWords(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat); cmsUInt32Number SwapEndian = T_ENDIAN16(info -> InputFormat); @@ -547,10 +547,10 @@ } static -cmsUInt8Number* UnrollPlanarWords(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* UnrollPlanarWords(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat); cmsUInt32Number DoSwap= T_DOSWAP(info ->InputFormat); @@ -581,10 +581,10 @@ static -cmsUInt8Number* Unroll4Words(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll4Words(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[0] = *(cmsUInt16Number*) accum; accum+= 2; // C wIn[1] = *(cmsUInt16Number*) accum; accum+= 2; // M @@ -598,10 +598,10 @@ } static -cmsUInt8Number* Unroll4WordsReverse(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll4WordsReverse(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[0] = REVERSE_FLAVOR_16(*(cmsUInt16Number*) accum); accum+= 2; // C wIn[1] = REVERSE_FLAVOR_16(*(cmsUInt16Number*) accum); accum+= 2; // M @@ -615,10 +615,10 @@ } static -cmsUInt8Number* Unroll4WordsSwapFirst(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll4WordsSwapFirst(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[3] = *(cmsUInt16Number*) accum; accum+= 2; // K wIn[0] = *(cmsUInt16Number*) accum; accum+= 2; // C @@ -633,10 +633,10 @@ // KYMC static -cmsUInt8Number* Unroll4WordsSwap(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll4WordsSwap(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[3] = *(cmsUInt16Number*) accum; accum+= 2; // K wIn[2] = *(cmsUInt16Number*) accum; accum+= 2; // Y @@ -650,10 +650,10 @@ } static -cmsUInt8Number* Unroll4WordsSwapSwapFirst(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll4WordsSwapSwapFirst(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[2] = *(cmsUInt16Number*) accum; accum+= 2; // K wIn[1] = *(cmsUInt16Number*) accum; accum+= 2; // Y @@ -667,10 +667,10 @@ } static -cmsUInt8Number* Unroll3Words(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll3Words(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[0] = *(cmsUInt16Number*) accum; accum+= 2; // C R wIn[1] = *(cmsUInt16Number*) accum; accum+= 2; // M G @@ -683,10 +683,10 @@ } static -cmsUInt8Number* Unroll3WordsSwap(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll3WordsSwap(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[2] = *(cmsUInt16Number*) accum; accum+= 2; // C R wIn[1] = *(cmsUInt16Number*) accum; accum+= 2; // M G @@ -699,10 +699,10 @@ } static -cmsUInt8Number* Unroll3WordsSkip1Swap(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll3WordsSkip1Swap(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { accum += 2; // A wIn[2] = *(cmsUInt16Number*) accum; accum += 2; // R @@ -716,10 +716,10 @@ } static -cmsUInt8Number* Unroll3WordsSkip1SwapFirst(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll3WordsSkip1SwapFirst(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { accum += 2; // A wIn[0] = *(cmsUInt16Number*) accum; accum += 2; // R @@ -733,10 +733,10 @@ } static -cmsUInt8Number* Unroll1Word(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll1Word(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[0] = wIn[1] = wIn[2] = *(cmsUInt16Number*) accum; accum+= 2; // L @@ -747,10 +747,10 @@ } static -cmsUInt8Number* Unroll1WordReversed(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll1WordReversed(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[0] = wIn[1] = wIn[2] = REVERSE_FLAVOR_16(*(cmsUInt16Number*) accum); accum+= 2; @@ -761,10 +761,10 @@ } static -cmsUInt8Number* Unroll1WordSkip3(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll1WordSkip3(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[0] = wIn[1] = wIn[2] = *(cmsUInt16Number*) accum; @@ -777,10 +777,10 @@ } static -cmsUInt8Number* Unroll2Words(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* Unroll2Words(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { wIn[0] = *(cmsUInt16Number*) accum; accum += 2; // ch1 wIn[1] = *(cmsUInt16Number*) accum; accum += 2; // ch2 @@ -794,10 +794,10 @@ // This is a conversion of Lab double to 16 bits static -cmsUInt8Number* UnrollLabDoubleTo16(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* UnrollLabDoubleTo16(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { if (T_PLANAR(info -> InputFormat)) { @@ -828,10 +828,10 @@ // This is a conversion of Lab float to 16 bits static -cmsUInt8Number* UnrollLabFloatTo16(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* UnrollLabFloatTo16(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { cmsCIELab Lab; @@ -866,10 +866,10 @@ // This is a conversion of XYZ double to 16 bits static -cmsUInt8Number* UnrollXYZDoubleTo16(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* UnrollXYZDoubleTo16(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { if (T_PLANAR(info -> InputFormat)) { @@ -902,10 +902,10 @@ // This is a conversion of XYZ float to 16 bits static -cmsUInt8Number* UnrollXYZFloatTo16(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* UnrollXYZFloatTo16(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { if (T_PLANAR(info -> InputFormat)) { @@ -982,10 +982,10 @@ // Inks does come in percentage, remaining cases are between 0..1.0, again to 16 bits static -cmsUInt8Number* UnrollDoubleTo16(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* UnrollDoubleTo16(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat); @@ -1040,10 +1040,10 @@ static -cmsUInt8Number* UnrollFloatTo16(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* UnrollFloatTo16(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat); @@ -1099,10 +1099,10 @@ // For 1 channel, we need to duplicate data (it comes in 0..1.0 range) static -cmsUInt8Number* UnrollDouble1Chan(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* UnrollDouble1Chan(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { cmsFloat64Number* Inks = (cmsFloat64Number*) accum; @@ -1352,10 +1352,10 @@ // Generic chunky for byte static -cmsUInt8Number* PackAnyBytes(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* PackAnyBytes(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> OutputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info ->OutputFormat); @@ -1404,10 +1404,10 @@ static -cmsUInt8Number* PackAnyWords(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* PackAnyWords(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> OutputFormat); cmsUInt32Number SwapEndian = T_ENDIAN16(info -> OutputFormat); @@ -1461,10 +1461,10 @@ static -cmsUInt8Number* PackPlanarBytes(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* PackPlanarBytes(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> OutputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info ->OutputFormat); @@ -1495,10 +1495,10 @@ static -cmsUInt8Number* PackPlanarWords(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* PackPlanarWords(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> OutputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info ->OutputFormat); @@ -1534,10 +1534,10 @@ // CMYKcm (unrolled for speed) static -cmsUInt8Number* Pack6Bytes(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack6Bytes(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[0]); *output++ = FROM_16_TO_8(wOut[1]); @@ -1555,10 +1555,10 @@ // KCMYcm static -cmsUInt8Number* Pack6BytesSwap(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack6BytesSwap(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[5]); *output++ = FROM_16_TO_8(wOut[4]); @@ -1575,10 +1575,10 @@ // CMYKcm static -cmsUInt8Number* Pack6Words(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack6Words(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = wOut[0]; output+= 2; @@ -1601,10 +1601,10 @@ // KCMYcm static -cmsUInt8Number* Pack6WordsSwap(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack6WordsSwap(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = wOut[5]; output+= 2; @@ -1627,10 +1627,10 @@ static -cmsUInt8Number* Pack4Bytes(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack4Bytes(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[0]); *output++ = FROM_16_TO_8(wOut[1]); @@ -1644,10 +1644,10 @@ } static -cmsUInt8Number* Pack4BytesReverse(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack4BytesReverse(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *output++ = REVERSE_FLAVOR_8(FROM_16_TO_8(wOut[0])); *output++ = REVERSE_FLAVOR_8(FROM_16_TO_8(wOut[1])); @@ -1662,10 +1662,10 @@ static -cmsUInt8Number* Pack4BytesSwapFirst(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack4BytesSwapFirst(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[3]); *output++ = FROM_16_TO_8(wOut[0]); @@ -1680,10 +1680,10 @@ // ABGR static -cmsUInt8Number* Pack4BytesSwap(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack4BytesSwap(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[3]); *output++ = FROM_16_TO_8(wOut[2]); @@ -1697,10 +1697,10 @@ } static -cmsUInt8Number* Pack4BytesSwapSwapFirst(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack4BytesSwapSwapFirst(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[2]); *output++ = FROM_16_TO_8(wOut[1]); @@ -1714,10 +1714,10 @@ } static -cmsUInt8Number* Pack4Words(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack4Words(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = wOut[0]; output+= 2; @@ -1735,10 +1735,10 @@ } static -cmsUInt8Number* Pack4WordsReverse(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack4WordsReverse(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = REVERSE_FLAVOR_16(wOut[0]); output+= 2; @@ -1757,10 +1757,10 @@ // ABGR static -cmsUInt8Number* Pack4WordsSwap(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack4WordsSwap(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = wOut[3]; output+= 2; @@ -1779,10 +1779,10 @@ // CMYK static -cmsUInt8Number* Pack4WordsBigEndian(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack4WordsBigEndian(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = CHANGE_ENDIAN(wOut[0]); output+= 2; @@ -1801,10 +1801,10 @@ static -cmsUInt8Number* PackLabV2_8(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* PackLabV2_8(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(FomLabV4ToLabV2(wOut[0])); *output++ = FROM_16_TO_8(FomLabV4ToLabV2(wOut[1])); @@ -1817,10 +1817,10 @@ } static -cmsUInt8Number* PackALabV2_8(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* PackALabV2_8(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { output++; *output++ = FROM_16_TO_8(FomLabV4ToLabV2(wOut[0])); @@ -1834,10 +1834,10 @@ } static -cmsUInt8Number* PackLabV2_16(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* PackLabV2_16(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = FomLabV4ToLabV2(wOut[0]); output += 2; @@ -1853,10 +1853,10 @@ } static -cmsUInt8Number* Pack3Bytes(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack3Bytes(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[0]); *output++ = FROM_16_TO_8(wOut[1]); @@ -1869,10 +1869,10 @@ } static -cmsUInt8Number* Pack3BytesOptimized(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack3BytesOptimized(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *output++ = (wOut[0] & 0xFFU); *output++ = (wOut[1] & 0xFFU); @@ -1885,10 +1885,10 @@ } static -cmsUInt8Number* Pack3BytesSwap(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack3BytesSwap(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[2]); *output++ = FROM_16_TO_8(wOut[1]); @@ -1901,10 +1901,10 @@ } static -cmsUInt8Number* Pack3BytesSwapOptimized(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack3BytesSwapOptimized(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *output++ = (wOut[2] & 0xFFU); *output++ = (wOut[1] & 0xFFU); @@ -1918,10 +1918,10 @@ static -cmsUInt8Number* Pack3Words(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack3Words(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = wOut[0]; output+= 2; @@ -1937,10 +1937,10 @@ } static -cmsUInt8Number* Pack3WordsSwap(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack3WordsSwap(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = wOut[2]; output+= 2; @@ -1956,10 +1956,10 @@ } static -cmsUInt8Number* Pack3WordsBigEndian(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack3WordsBigEndian(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = CHANGE_ENDIAN(wOut[0]); output+= 2; @@ -1975,10 +1975,10 @@ } static -cmsUInt8Number* Pack3BytesAndSkip1(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack3BytesAndSkip1(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[0]); *output++ = FROM_16_TO_8(wOut[1]); @@ -1992,10 +1992,10 @@ } static -cmsUInt8Number* Pack3BytesAndSkip1Optimized(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack3BytesAndSkip1Optimized(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *output++ = (wOut[0] & 0xFFU); *output++ = (wOut[1] & 0xFFU); @@ -2010,10 +2010,10 @@ static -cmsUInt8Number* Pack3BytesAndSkip1SwapFirst(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack3BytesAndSkip1SwapFirst(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { output++; *output++ = FROM_16_TO_8(wOut[0]); @@ -2027,10 +2027,10 @@ } static -cmsUInt8Number* Pack3BytesAndSkip1SwapFirstOptimized(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack3BytesAndSkip1SwapFirstOptimized(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { output++; *output++ = (wOut[0] & 0xFFU); @@ -2044,10 +2044,10 @@ } static -cmsUInt8Number* Pack3BytesAndSkip1Swap(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack3BytesAndSkip1Swap(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { output++; *output++ = FROM_16_TO_8(wOut[2]); @@ -2061,10 +2061,10 @@ } static -cmsUInt8Number* Pack3BytesAndSkip1SwapOptimized(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack3BytesAndSkip1SwapOptimized(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { output++; *output++ = (wOut[2] & 0xFFU); @@ -2079,10 +2079,10 @@ static -cmsUInt8Number* Pack3BytesAndSkip1SwapSwapFirst(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack3BytesAndSkip1SwapSwapFirst(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[2]); *output++ = FROM_16_TO_8(wOut[1]); @@ -2096,10 +2096,10 @@ } static -cmsUInt8Number* Pack3BytesAndSkip1SwapSwapFirstOptimized(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack3BytesAndSkip1SwapSwapFirstOptimized(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *output++ = (wOut[2] & 0xFFU); *output++ = (wOut[1] & 0xFFU); @@ -2113,10 +2113,10 @@ } static -cmsUInt8Number* Pack3WordsAndSkip1(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack3WordsAndSkip1(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = wOut[0]; output+= 2; @@ -2133,10 +2133,10 @@ } static -cmsUInt8Number* Pack3WordsAndSkip1Swap(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack3WordsAndSkip1Swap(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { output+= 2; *(cmsUInt16Number*) output = wOut[2]; @@ -2154,10 +2154,10 @@ static -cmsUInt8Number* Pack3WordsAndSkip1SwapFirst(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack3WordsAndSkip1SwapFirst(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { output+= 2; *(cmsUInt16Number*) output = wOut[0]; @@ -2175,10 +2175,10 @@ static -cmsUInt8Number* Pack3WordsAndSkip1SwapSwapFirst(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack3WordsAndSkip1SwapSwapFirst(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = wOut[2]; output+= 2; @@ -2197,10 +2197,10 @@ static -cmsUInt8Number* Pack1Byte(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack1Byte(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[0]); @@ -2212,10 +2212,10 @@ static -cmsUInt8Number* Pack1ByteReversed(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack1ByteReversed(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(REVERSE_FLAVOR_16(wOut[0])); @@ -2227,10 +2227,10 @@ static -cmsUInt8Number* Pack1ByteSkip1(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack1ByteSkip1(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[0]); output++; @@ -2243,10 +2243,10 @@ static -cmsUInt8Number* Pack1ByteSkip1SwapFirst(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack1ByteSkip1SwapFirst(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { output++; *output++ = FROM_16_TO_8(wOut[0]); @@ -2258,10 +2258,10 @@ } static -cmsUInt8Number* Pack1Word(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack1Word(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = wOut[0]; output+= 2; @@ -2274,10 +2274,10 @@ static -cmsUInt8Number* Pack1WordReversed(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack1WordReversed(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = REVERSE_FLAVOR_16(wOut[0]); output+= 2; @@ -2289,10 +2289,10 @@ } static -cmsUInt8Number* Pack1WordBigEndian(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack1WordBigEndian(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = CHANGE_ENDIAN(wOut[0]); output+= 2; @@ -2305,10 +2305,10 @@ static -cmsUInt8Number* Pack1WordSkip1(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack1WordSkip1(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = wOut[0]; output+= 4; @@ -2320,10 +2320,10 @@ } static -cmsUInt8Number* Pack1WordSkip1SwapFirst(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* Pack1WordSkip1SwapFirst(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { output += 2; *(cmsUInt16Number*) output = wOut[0]; @@ -2338,10 +2338,10 @@ // Unencoded Float values -- don't try optimize speed static -cmsUInt8Number* PackLabDoubleFrom16(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* PackLabDoubleFrom16(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { if (T_PLANAR(info -> OutputFormat)) { @@ -2365,10 +2365,10 @@ static -cmsUInt8Number* PackLabFloatFrom16(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* PackLabFloatFrom16(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { cmsCIELab Lab; cmsLabEncoded2Float(&Lab, wOut); @@ -2396,10 +2396,10 @@ } static -cmsUInt8Number* PackXYZDoubleFrom16(register _cmsTRANSFORM* Info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* PackXYZDoubleFrom16(CMSREGISTER _cmsTRANSFORM* Info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { if (T_PLANAR(Info -> OutputFormat)) { @@ -2425,10 +2425,10 @@ } static -cmsUInt8Number* PackXYZFloatFrom16(register _cmsTRANSFORM* Info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* PackXYZFloatFrom16(CMSREGISTER _cmsTRANSFORM* Info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { if (T_PLANAR(Info -> OutputFormat)) { @@ -2460,10 +2460,10 @@ } static -cmsUInt8Number* PackDoubleFrom16(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* PackDoubleFrom16(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> OutputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info ->OutputFormat); @@ -2513,10 +2513,10 @@ static -cmsUInt8Number* PackFloatFrom16(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* PackFloatFrom16(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info->OutputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info->OutputFormat); @@ -2802,10 +2802,10 @@ // Decodes an stream of half floats to wIn[] described by input format static -cmsUInt8Number* UnrollHalfTo16(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) +cmsUInt8Number* UnrollHalfTo16(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wIn[], + CMSREGISTER cmsUInt8Number* accum, + CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat); @@ -2908,10 +2908,10 @@ static -cmsUInt8Number* PackHalfFrom16(register _cmsTRANSFORM* info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) +cmsUInt8Number* PackHalfFrom16(CMSREGISTER _cmsTRANSFORM* info, + CMSREGISTER cmsUInt16Number wOut[], + CMSREGISTER cmsUInt8Number* output, + CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info->OutputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info->OutputFormat);
--- a/src/share/native/sun/java2d/cmm/lcms/cmspcs.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmspcs.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"),
--- a/src/share/native/sun/java2d/cmm/lcms/cmsplugin.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmsplugin.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -62,7 +62,7 @@ // Little-Endian to Big-Endian -// Adjust a word value after being readed/ before being written from/to an ICC profile +// Adjust a word value after being read/ before being written from/to an ICC profile cmsUInt16Number CMSEXPORT _cmsAdjustEndianess16(cmsUInt16Number Word) { #ifndef CMS_USE_BIG_ENDIAN @@ -128,8 +128,8 @@ _cmsAssert(Result != NULL); # ifdef CMS_DONT_USE_INT64 - (*Result)[0] = QWord[0]; - (*Result)[1] = QWord[1]; + (*Result)[0] = (*QWord)[0]; + (*Result)[1] = (*QWord)[1]; # else *Result = *QWord; # endif @@ -216,6 +216,8 @@ return TRUE; #elif defined (__BORLANDC__) return TRUE; + #elif !defined(_MSC_VER) && (defined(__STDC_VERSION__) && __STDC_VERSION__ < 199901L) + return TRUE; #else // fpclassify() required by C99 (only provided by MSVC >= 1800, VS2013 onwards) @@ -702,15 +704,21 @@ return &globalContext; // Search + _cmsEnterCriticalSectionPrimitive(&_cmsContextPoolHeadMutex); + for (ctx = _cmsContextPoolHead; ctx != NULL; ctx = ctx ->Next) { // Found it? - if (id == ctx) - return ctx; // New-style context, + if (id == ctx) + { + _cmsLeaveCriticalSectionPrimitive(&_cmsContextPoolHeadMutex); + return ctx; // New-style context + } } + _cmsLeaveCriticalSectionPrimitive(&_cmsContextPoolHeadMutex); return &globalContext; } @@ -799,6 +807,7 @@ // See the comments regarding locking in lcms2_internal.h // for an explanation of why we need the following code. +#ifndef CMS_NO_PTHREADS #ifdef CMS_IS_WINDOWS_ #ifndef CMS_RELY_ON_WINDOWS_STATIC_MUTEX_INIT { @@ -820,6 +829,7 @@ } #endif #endif +#endif _cmsInstallAllocFunctions(_cmsFindMemoryPlugin(Plugin), &fakeContext.DefaultMemoryManager); @@ -943,25 +953,6 @@ } -/* -static -struct _cmsContext_struct* FindPrev(struct _cmsContext_struct* id) -{ - struct _cmsContext_struct* prev; - - // Search for previous - for (prev = _cmsContextPoolHead; - prev != NULL; - prev = prev ->Next) - { - if (prev ->Next == id) - return prev; - } - - return NULL; // List is empty or only one element! -} -*/ - // Frees any resources associated with the given context, // and destroys the context placeholder. // The ContextID can no longer be used in any THR operation.
--- a/src/share/native/sun/java2d/cmm/lcms/cmsps2.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmsps2.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -107,8 +107,8 @@ Matrix-shaper based ------------------- - This is implemented both with /CIEBasedABC or /CIEBasedDEF on dependig - of profile implementation. Since here there are no interpolation tables, I do + This is implemented both with /CIEBasedABC or /CIEBasedDEF depending on the + profile implementation. Since here there are no interpolation tables, I do the conversion directly to XYZ @@ -324,21 +324,7 @@ } -// Convert to byte (using ICC2 notation) -/* -static -cmsUInt8Number L2Byte(cmsUInt16Number w) -{ - int ww = w + 0x0080; - - if (ww > 0xFFFF) return 0xFF; - - return (cmsUInt8Number) ((cmsUInt16Number) (ww >> 8) & 0xFF); -} -*/ - // Write a cooked byte - static void WriteByte(cmsIOHANDLER* m, cmsUInt8Number b) { @@ -355,7 +341,8 @@ // ----------------------------------------------------------------- PostScript generation -// Removes offending Carriage returns +// Removes offending carriage returns + static char* RemoveCR(const char* txt) { @@ -453,21 +440,6 @@ // = Yn*( L* / 116) / 7.787 if (L*) < 6 / 29 // -/* -static -void EmitL2Y(cmsIOHANDLER* m) -{ - _cmsIOPrintf(m, - "{ " - "100 mul 16 add 116 div " // (L * 100 + 16) / 116 - "dup 6 29 div ge " // >= 6 / 29 ? - "{ dup dup mul mul } " // yes, ^3 and done - "{ 4 29 div sub 108 841 div mul } " // no, slope limiting - "ifelse } bind "); -} -*/ - - // Lab -> XYZ, see the discussion above static @@ -488,12 +460,28 @@ _cmsIOPrintf(m, "]\n"); } +static +void EmitSafeGuardBegin(cmsIOHANDLER* m, const char* name) +{ + _cmsIOPrintf(m, "%%LCMS2: Save previous definition of %s on the operand stack\n", name); + _cmsIOPrintf(m, "currentdict /%s known { /%s load } { null } ifelse\n", name, name); +} +static +void EmitSafeGuardEnd(cmsIOHANDLER* m, const char* name, int depth) +{ + _cmsIOPrintf(m, "%%LCMS2: Restore previous definition of %s\n", name); + if (depth > 1) { + // cycle topmost items on the stack to bring the previous definition to the front + _cmsIOPrintf(m, "%d -1 roll ", depth); + } + _cmsIOPrintf(m, "dup null eq { pop currentdict /%s undef } { /%s exch def } ifelse\n", name, name); +} // Outputs a table of words. It does use 16 bits static -void Emit1Gamma(cmsIOHANDLER* m, cmsToneCurve* Table) +void Emit1Gamma(cmsIOHANDLER* m, cmsToneCurve* Table, const char* name) { cmsUInt32Number i; cmsFloat64Number gamma; @@ -508,28 +496,33 @@ // Check if is really an exponential. If so, emit "exp" gamma = cmsEstimateGamma(Table, 0.001); if (gamma > 0) { - _cmsIOPrintf(m, "{ %g exp } bind ", gamma); + _cmsIOPrintf(m, "/%s { %g exp } bind def\n", name, gamma); return; } - _cmsIOPrintf(m, "{ "); + EmitSafeGuardBegin(m, "lcms2gammatable"); + _cmsIOPrintf(m, "/lcms2gammatable ["); + + for (i=0; i < Table->nEntries; i++) { + if (i % 10 == 0) + _cmsIOPrintf(m, "\n "); + _cmsIOPrintf(m, "%d ", Table->Table16[i]); + } + + _cmsIOPrintf(m, "] def\n"); + + + // Emit interpolation code + + // PostScript code Stack + // =============== ======================== + // v + _cmsIOPrintf(m, "/%s {\n ", name); // Bounds check EmitRangeCheck(m); - // Emit intepolation code - - // PostScript code Stack - // =============== ======================== - // v - _cmsIOPrintf(m, " ["); - - for (i=0; i < Table->nEntries; i++) { - _cmsIOPrintf(m, "%d ", Table->Table16[i]); - } - - _cmsIOPrintf(m, "] "); // v tab - + _cmsIOPrintf(m, "\n //lcms2gammatable "); // v tab _cmsIOPrintf(m, "dup "); // v tab tab _cmsIOPrintf(m, "length 1 sub "); // v tab dom _cmsIOPrintf(m, "3 -1 roll "); // tab dom v @@ -541,7 +534,7 @@ _cmsIOPrintf(m, "ceiling cvi "); // tab val2 cell0 cell1 _cmsIOPrintf(m, "3 index "); // tab val2 cell0 cell1 tab _cmsIOPrintf(m, "exch "); // tab val2 cell0 tab cell1 - _cmsIOPrintf(m, "get "); // tab val2 cell0 y1 + _cmsIOPrintf(m, "get\n "); // tab val2 cell0 y1 _cmsIOPrintf(m, "4 -1 roll "); // val2 cell0 y1 tab _cmsIOPrintf(m, "3 -1 roll "); // val2 y1 tab cell0 _cmsIOPrintf(m, "get "); // val2 y1 y0 @@ -554,9 +547,11 @@ _cmsIOPrintf(m, "sub "); // y0 (y1-y0) rest _cmsIOPrintf(m, "mul "); // y0 t1 _cmsIOPrintf(m, "add "); // y - _cmsIOPrintf(m, "65535 div "); // result + _cmsIOPrintf(m, "65535 div\n"); // result - _cmsIOPrintf(m, " } bind "); + _cmsIOPrintf(m, "} bind def\n"); + + EmitSafeGuardEnd(m, "lcms2gammatable", 1); } @@ -572,9 +567,10 @@ // Does write a set of gamma curves static -void EmitNGamma(cmsIOHANDLER* m, cmsUInt32Number n, cmsToneCurve* g[]) +void EmitNGamma(cmsIOHANDLER* m, cmsUInt32Number n, cmsToneCurve* g[], const char* nameprefix) { cmsUInt32Number i; + static char buffer[2048]; for( i=0; i < n; i++ ) { @@ -582,19 +578,18 @@ if (i > 0 && GammaTableEquals(g[i-1]->Table16, g[i]->Table16, g[i]->nEntries)) { - _cmsIOPrintf(m, "dup "); + _cmsIOPrintf(m, "/%s%d /%s%d load def\n", nameprefix, i, nameprefix, i-1); } else { - Emit1Gamma(m, g[i]); + snprintf(buffer, sizeof(buffer), "%s%d", nameprefix, i); + buffer[sizeof(buffer)-1] = '\0'; + Emit1Gamma(m, g[i], buffer); } } } - - - // Following code dumps a LUT onto memory stream @@ -611,7 +606,7 @@ // component. -1 is used to mark beginning of whole block. static -int OutputValueSampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo) +int OutputValueSampler(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo) { cmsPsSamplerCargo* sc = (cmsPsSamplerCargo*) Cargo; cmsUInt32Number i; @@ -691,11 +686,11 @@ static void WriteCLUT(cmsIOHANDLER* m, cmsStage* mpe, const char* PreMaj, - const char* PostMaj, - const char* PreMin, - const char* PostMin, - int FixWhite, - cmsColorSpaceSignature ColorSpace) + const char* PostMaj, + const char* PreMin, + const char* PostMin, + int FixWhite, + cmsColorSpaceSignature ColorSpace) { cmsUInt32Number i; cmsPsSamplerCargo sc; @@ -737,11 +732,11 @@ _cmsIOPrintf(m, "[ /CIEBasedA\n"); _cmsIOPrintf(m, " <<\n"); - _cmsIOPrintf(m, "/DecodeA "); + EmitSafeGuardBegin(m, "lcms2gammaproc"); + Emit1Gamma(m, Curve, "lcms2gammaproc"); - Emit1Gamma(m, Curve); - - _cmsIOPrintf(m, " \n"); + _cmsIOPrintf(m, "/DecodeA /lcms2gammaproc load\n"); + EmitSafeGuardEnd(m, "lcms2gammaproc", 3); _cmsIOPrintf(m, "/MatrixA [ 0.9642 1.0000 0.8249 ]\n"); _cmsIOPrintf(m, "/RangeLMN [ 0.0 0.9642 0.0 1.0000 0.0 0.8249 ]\n"); @@ -765,11 +760,19 @@ _cmsIOPrintf(m, "[ /CIEBasedABC\n"); _cmsIOPrintf(m, "<<\n"); - _cmsIOPrintf(m, "/DecodeABC [ "); - EmitNGamma(m, 3, CurveSet); - + EmitSafeGuardBegin(m, "lcms2gammaproc0"); + EmitSafeGuardBegin(m, "lcms2gammaproc1"); + EmitSafeGuardBegin(m, "lcms2gammaproc2"); + EmitNGamma(m, 3, CurveSet, "lcms2gammaproc"); + _cmsIOPrintf(m, "/DecodeABC [\n"); + _cmsIOPrintf(m, " /lcms2gammaproc0 load\n"); + _cmsIOPrintf(m, " /lcms2gammaproc1 load\n"); + _cmsIOPrintf(m, " /lcms2gammaproc2 load\n"); _cmsIOPrintf(m, "]\n"); + EmitSafeGuardEnd(m, "lcms2gammaproc2", 3); + EmitSafeGuardEnd(m, "lcms2gammaproc1", 3); + EmitSafeGuardEnd(m, "lcms2gammaproc0", 3); _cmsIOPrintf(m, "/MatrixABC [ " ); @@ -801,28 +804,31 @@ { const char* PreMaj; const char* PostMaj; - const char* PreMin, *PostMin; + const char* PreMin, * PostMin; cmsStage* mpe; + int i, numchans; + static char buffer[2048]; - mpe = Pipeline ->Elements; + mpe = Pipeline->Elements; switch (cmsStageInputChannels(mpe)) { case 3: + _cmsIOPrintf(m, "[ /CIEBasedDEF\n"); + PreMaj = "<"; + PostMaj = ">\n"; + PreMin = PostMin = ""; + break; - _cmsIOPrintf(m, "[ /CIEBasedDEF\n"); - PreMaj ="<"; - PostMaj= ">\n"; - PreMin = PostMin = ""; - break; case 4: - _cmsIOPrintf(m, "[ /CIEBasedDEFG\n"); - PreMaj = "["; - PostMaj = "]\n"; - PreMin = "<"; - PostMin = ">\n"; - break; + _cmsIOPrintf(m, "[ /CIEBasedDEFG\n"); + PreMaj = "["; + PostMaj = "]\n"; + PreMin = "<"; + PostMin = ">\n"; + break; + default: - return 0; + return 0; } @@ -830,18 +836,34 @@ if (cmsStageType(mpe) == cmsSigCurveSetElemType) { - _cmsIOPrintf(m, "/DecodeDEF [ "); - EmitNGamma(m, cmsStageOutputChannels(mpe), _cmsStageGetPtrToCurveSet(mpe)); + numchans = cmsStageOutputChannels(mpe); + for (i = 0; i < numchans; ++i) { + snprintf(buffer, sizeof(buffer), "lcms2gammaproc%d", i); + buffer[sizeof(buffer) - 1] = '\0'; + EmitSafeGuardBegin(m, buffer); + } + EmitNGamma(m, cmsStageOutputChannels(mpe), _cmsStageGetPtrToCurveSet(mpe), "lcms2gammaproc"); + _cmsIOPrintf(m, "/DecodeDEF [\n"); + for (i = 0; i < numchans; ++i) { + snprintf(buffer, sizeof(buffer), " /lcms2gammaproc%d load\n", i); + buffer[sizeof(buffer) - 1] = '\0'; + _cmsIOPrintf(m, buffer); + } _cmsIOPrintf(m, "]\n"); + for (i = numchans - 1; i >= 0; --i) { + snprintf(buffer, sizeof(buffer), "lcms2gammaproc%d", i); + buffer[sizeof(buffer) - 1] = '\0'; + EmitSafeGuardEnd(m, buffer, 3); + } - mpe = mpe ->Next; + mpe = mpe->Next; } if (cmsStageType(mpe) == cmsSigCLutElemType) { - _cmsIOPrintf(m, "/Table "); - WriteCLUT(m, mpe, PreMaj, PostMaj, PreMin, PostMin, FALSE, (cmsColorSpaceSignature) 0); - _cmsIOPrintf(m, "]\n"); + _cmsIOPrintf(m, "/Table "); + WriteCLUT(m, mpe, PreMaj, PostMaj, PreMin, PostMin, FALSE, (cmsColorSpaceSignature)0); + _cmsIOPrintf(m, "]\n"); } EmitLab2XYZ(m); @@ -952,7 +974,7 @@ default: - cmsSignalError(m ->ContextID, cmsERROR_COLORSPACE_CHECK, "Only 3, 4 channels supported for CSA. This profile has %d channels.", nChannels); + cmsSignalError(m ->ContextID, cmsERROR_COLORSPACE_CHECK, "Only 3, 4 channels are supported for CSA. This profile has %d channels.", nChannels); return 0; } @@ -1011,7 +1033,7 @@ return 0; } - return rc; + return rc; } @@ -1268,8 +1290,6 @@ "exch pop exch pop exch pop exch pop } bind\n]\n"); } - - } @@ -1299,7 +1319,7 @@ // Due to impedance mismatch between XYZ and almost all RGB and CMYK spaces // I choose to dump LUTS in Lab instead of XYZ. There is still a lot of wasted // space on 3D CLUT, but since space seems not to be a problem here, 33 points -// would give a reasonable accurancy. Note also that CRD tables must operate in +// would give a reasonable accuracy. Note also that CRD tables must operate in // 8 bits. static
--- a/src/share/native/sun/java2d/cmm/lcms/cmssamp.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmssamp.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"),
--- a/src/share/native/sun/java2d/cmm/lcms/cmssm.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmssm.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"),
--- a/src/share/native/sun/java2d/cmm/lcms/cmstypes.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmstypes.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -195,7 +195,7 @@ cmsUInt32Number SizeOfTag); // Helper function to deal with position tables as described in ICC spec 4.3 -// A table of n elements is readed, where first comes n records containing offsets and sizes and +// A table of n elements is read, where first comes n records containing offsets and sizes and // then a block containing the data itself. This allows to reuse same data in more than one entry static cmsBool ReadPositionTable(struct _cms_typehandler_struct* self, @@ -1003,7 +1003,7 @@ len = cmsMLUgetASCII(mlu, cmsNoLanguage, cmsNoCountry, NULL, 0); // Specification ICC.1:2001-04 (v2.4.0): It has been found that textDescriptionType can contain misaligned data - //(see clause 4.1 for the definition of “aligned”). Because the Unicode language + //(see clause 4.1 for the definition of 'aligned'). Because the Unicode language // code and Unicode count immediately follow the ASCII description, their // alignment is not correct if the ASCII count is not a multiple of four. The // ScriptCode code is misaligned when the ASCII count is odd. Profile reading and @@ -1509,7 +1509,7 @@ // True begin of the string BeginOfThisString = Offset - SizeOfHeader - 8; - // Ajust to wchar_t elements + // Adjust to wchar_t elements mlu ->Entries[i].Len = (Len * sizeof(wchar_t)) / sizeof(cmsUInt16Number); mlu ->Entries[i].StrW = (BeginOfThisString * sizeof(wchar_t)) / sizeof(cmsUInt16Number); @@ -1882,7 +1882,7 @@ static cmsBool Type_LUT8_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { - cmsUInt32Number j, nTabSize; + cmsUInt32Number j, nTabSize, i, n; cmsUInt8Number val; cmsPipeline* NewLUT = (cmsPipeline*) Ptr; cmsStage* mpe; @@ -1931,22 +1931,19 @@ if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) clutPoints)) return FALSE; if (!_cmsWriteUInt8Number(io, 0)) return FALSE; // Padding + n = NewLUT->InputChannels * NewLUT->OutputChannels; if (MatMPE != NULL) { - if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[0])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[1])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[2])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[3])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[4])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[5])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[6])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[7])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[8])) return FALSE; - + for (i = 0; i < n; i++) + { + if (!_cmsWrite15Fixed16Number(io, MatMPE->Double[i])) return FALSE; + } } else { + if (n != 9) return FALSE; + if (!_cmsWrite15Fixed16Number(io, 1)) return FALSE; if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; @@ -2170,7 +2167,7 @@ // Some empty defaults are created for missing parts static -cmsBool Type_LUT16_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +cmsBool Type_LUT16_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsUInt32Number nTabSize; cmsPipeline* NewLUT = (cmsPipeline*) Ptr; @@ -2185,6 +2182,7 @@ if (mpe != NULL && mpe ->Type == cmsSigMatrixElemType) { MatMPE = (_cmsStageMatrixData*) mpe ->Data; + if (mpe->InputChannels != 3 || mpe->OutputChannels != 3) return FALSE; mpe = mpe -> Next; } @@ -2223,18 +2221,13 @@ if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) clutPoints)) return FALSE; if (!_cmsWriteUInt8Number(io, 0)) return FALSE; // Padding - if (MatMPE != NULL) { - if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[0])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[1])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[2])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[3])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[4])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[5])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[6])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[7])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[8])) return FALSE; + for (i = 0; i < 9; i++) + { + if (!_cmsWrite15Fixed16Number(io, MatMPE->Double[i])) return FALSE; + } + } else { @@ -2423,7 +2416,7 @@ return NULL; } - return CLUT; + return CLUT; } static @@ -2579,31 +2572,31 @@ static cmsBool WriteMatrix(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsStage* mpe) { + cmsUInt32Number i, n; + _cmsStageMatrixData* m = (_cmsStageMatrixData*) mpe -> Data; - // Write the Matrix - if (!_cmsWrite15Fixed16Number(io, m -> Double[0])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, m -> Double[1])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, m -> Double[2])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, m -> Double[3])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, m -> Double[4])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, m -> Double[5])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, m -> Double[6])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, m -> Double[7])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, m -> Double[8])) return FALSE; - - if (m ->Offset != NULL) { - - if (!_cmsWrite15Fixed16Number(io, m -> Offset[0])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, m -> Offset[1])) return FALSE; - if (!_cmsWrite15Fixed16Number(io, m -> Offset[2])) return FALSE; - } - else { - if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; - if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; - if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; - - } + n = mpe->InputChannels * mpe->OutputChannels; + + // Write the Matrix + for (i = 0; i < n; i++) + { + if (!_cmsWrite15Fixed16Number(io, m->Double[i])) return FALSE; + } + + if (m->Offset != NULL) { + + for (i = 0; i < mpe->OutputChannels; i++) + { + if (!_cmsWrite15Fixed16Number(io, m->Offset[i])) return FALSE; + } + } + else { + for (i = 0; i < mpe->OutputChannels; i++) + { + if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; + } + } return TRUE; @@ -2707,9 +2700,9 @@ return FALSE; } - if (!_cmsWriteAlignment(io)) return FALSE; - - return TRUE; + if (!_cmsWriteAlignment(io)) return FALSE; + + return TRUE; } @@ -3120,10 +3113,10 @@ //The namedColor2Type is a count value and array of structures that provide color //coordinates for 7-bit ASCII color names. For each named color, a PCS and optional //device representation of the color are given. Both representations are 16-bit values. -//The device representation corresponds to the header’s “color space of data” field. -//This representation should be consistent with the “number of device components” +//The device representation corresponds to the header's 'color space of data' field. +//This representation should be consistent with the 'number of device components' //field in the namedColor2Type. If this field is 0, device coordinates are not provided. -//The PCS representation corresponds to the header’s PCS field. The PCS representation +//The PCS representation corresponds to the header's PCS field. The PCS representation //is always provided. Color names are fixed-length, 32-byte fields including null //termination. In order to maintain maximum portability, it is strongly recommended //that special characters of the 7-bit ASCII set not be used. @@ -3868,7 +3861,7 @@ // ******************************************************************************** // //This type represents a set of viewing condition parameters including: -//CIE ’absolute’ illuminant white point tristimulus values and CIE ’absolute’ +//CIE 'absolute' illuminant white point tristimulus values and CIE 'absolute' //surround tristimulus values. static @@ -3955,7 +3948,7 @@ } // Each curve is stored in one or more curve segments, with break-points specified between curve segments. -// The first curve segment always starts at –Infinity, and the last curve segment always ends at +Infinity. The +// The first curve segment always starts at -Infinity, and the last curve segment always ends at +Infinity. The // first and last curve segments shall be specified in terms of a formula, whereas the other segments shall be // specified either in terms of a formula, or by a sampled curve. @@ -4236,7 +4229,7 @@ // The matrix is organized as an array of PxQ+Q elements, where P is the number of input channels to the // matrix, and Q is the number of output channels. The matrix elements are each float32Numbers. The array // is organized as follows: -// array = [e11, e12, …, e1P, e21, e22, …, e2P, …, eQ1, eQ2, …, eQP, e1, e2, …, eQ] +// array = [e11, e12, ..., e1P, e21, e22, ..., e2P, ..., eQ1, eQ2, ..., eQP, e1, e2, ..., eQ] static void *Type_MPEmatrix_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) @@ -4759,10 +4752,10 @@ // Y = cX + f | X < d // vcgt formula is: - // Y = (Max – Min) * (X ^ Gamma) + Min + // Y = (Max - Min) * (X ^ Gamma) + Min // So, the translation is - // a = (Max – Min) ^ ( 1 / Gamma) + // a = (Max - Min) ^ ( 1 / Gamma) // e = Min // b=c=d=f=0
--- a/src/share/native/sun/java2d/cmm/lcms/cmsvirt.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmsvirt.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -390,7 +390,7 @@ // K: Does not change static -int InkLimitingSampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo) +int InkLimitingSampler(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo) { cmsFloat64Number InkLimit = *(cmsFloat64Number *) Cargo; cmsFloat64Number SumCMY, SumCMYK, Ratio; @@ -641,18 +641,18 @@ //sRGB Curves are defined by: // -//If R’sRGB,G’sRGB, B’sRGB < 0.04045 +//If R'sRGB,G'sRGB, B'sRGB < 0.04045 // -// R = R’sRGB / 12.92 -// G = G’sRGB / 12.92 -// B = B’sRGB / 12.92 +// R = R'sRGB / 12.92 +// G = G'sRGB / 12.92 +// B = B'sRGB / 12.92 // // -//else if R’sRGB,G’sRGB, B’sRGB >= 0.04045 +//else if R'sRGB,G'sRGB, B'sRGB >= 0.04045 // -// R = ((R’sRGB + 0.055) / 1.055)^2.4 -// G = ((G’sRGB + 0.055) / 1.055)^2.4 -// B = ((B’sRGB + 0.055) / 1.055)^2.4 +// R = ((R'sRGB + 0.055) / 1.055)^2.4 +// G = ((G'sRGB + 0.055) / 1.055)^2.4 +// B = ((B'sRGB + 0.055) / 1.055)^2.4 static cmsToneCurve* Build_sRGBGamma(cmsContext ContextID) @@ -715,7 +715,7 @@ static -int bchswSampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo) +int bchswSampler(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo) { cmsCIELab LabIn, LabOut; cmsCIELCh LChIn, LChOut; @@ -1125,9 +1125,10 @@ goto Error; } - // On the output side too + // On the output side too. Note that due to V2/V4 PCS encoding on lab we cannot fix white misalignments if ((xform ->ExitColorSpace) == cmsSigLabData && (Version < 4.0)) { + dwFlags |= cmsFLAGS_NOWHITEONWHITEFIXUP; if (!cmsPipelineInsertStage(LUT, cmsAT_END, _cmsStageAllocLabV4ToV2(ContextID))) goto Error; }
--- a/src/share/native/sun/java2d/cmm/lcms/cmswtpnt.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmswtpnt.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -104,19 +104,19 @@ return FALSE; } - // Obtain y(x) - y = -3.000*(x*x) + 2.870*x - 0.275; + // Obtain y(x) + y = -3.000*(x*x) + 2.870*x - 0.275; - // wave factors (not used, but here for futures extensions) + // wave factors (not used, but here for futures extensions) - // M1 = (-1.3515 - 1.7703*x + 5.9114 *y)/(0.0241 + 0.2562*x - 0.7341*y); - // M2 = (0.0300 - 31.4424*x + 30.0717*y)/(0.0241 + 0.2562*x - 0.7341*y); + // M1 = (-1.3515 - 1.7703*x + 5.9114 *y)/(0.0241 + 0.2562*x - 0.7341*y); + // M2 = (0.0300 - 31.4424*x + 30.0717*y)/(0.0241 + 0.2562*x - 0.7341*y); - WhitePoint -> x = x; - WhitePoint -> y = y; - WhitePoint -> Y = 1.0; + WhitePoint -> x = x; + WhitePoint -> y = y; + WhitePoint -> Y = 1.0; - return TRUE; + return TRUE; }
--- a/src/share/native/sun/java2d/cmm/lcms/cmsxform.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/cmsxform.c Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -200,6 +200,23 @@ _cmsFree(p ->ContextID, (void *) p); } + +static +cmsUInt32Number PixelSize(cmsUInt32Number Format) +{ + cmsUInt32Number fmt_bytes = T_BYTES(Format); + + // For double, the T_BYTES field is zero + if (fmt_bytes == 0) + return sizeof(cmsUInt64Number); + + // Otherwise, it is already correct for all formats + return fmt_bytes; +} + + + + // Apply transform. void CMSEXPORT cmsDoTransform(cmsHTRANSFORM Transform, const void* InputBuffer, @@ -212,8 +229,8 @@ stride.BytesPerLineIn = 0; // Not used stride.BytesPerLineOut = 0; - stride.BytesPerPlaneIn = Size; - stride.BytesPerPlaneOut = Size; + stride.BytesPerPlaneIn = Size * PixelSize(p->InputFormat); + stride.BytesPerPlaneOut = Size * PixelSize(p->OutputFormat); p -> xform(p, InputBuffer, OutputBuffer, Size, 1, &stride); } @@ -370,7 +387,7 @@ // 16 bit precision ----------------------------------------------------------------------------------------------------------- -// Null transformation, only applies formatters. No caché +// Null transformation, only applies formatters. No cache static void NullXFORM(_cmsTRANSFORM* p, const void* in, @@ -417,8 +434,8 @@ cmsUInt32Number LineCount, const cmsStride* Stride) { - register cmsUInt8Number* accum; - register cmsUInt8Number* output; + CMSREGISTER cmsUInt8Number* accum; + CMSREGISTER cmsUInt8Number* output; cmsUInt16Number wIn[cmsMAXCHANNELS], wOut[cmsMAXCHANNELS]; cmsUInt32Number i, j, strideIn, strideOut; @@ -471,7 +488,7 @@ p ->Lut ->Eval16Fn(wIn, wOut, p -> Lut->Data); } -// Gamut check, No caché, 16 bits. +// Gamut check, No cache, 16 bits. static void PrecalculatedXFORMGamutCheck(_cmsTRANSFORM* p, const void* in, @@ -510,7 +527,7 @@ } -// No gamut check, Caché, 16 bits, +// No gamut check, Cache, 16 bits, static void CachedXFORM(_cmsTRANSFORM* p, const void* in, @@ -809,43 +826,46 @@ // Let's see if any plug-in want to do the transform by itself if (p->Lut != NULL) { - for (Plugin = ctx->TransformCollection; - Plugin != NULL; - Plugin = Plugin->Next) { + if (!(*dwFlags & cmsFLAGS_NOOPTIMIZE)) + { + for (Plugin = ctx->TransformCollection; + Plugin != NULL; + Plugin = Plugin->Next) { - if (Plugin->Factory(&p->xform, &p->UserData, &p->FreeUserData, &p->Lut, InputFormat, OutputFormat, dwFlags)) { + if (Plugin->Factory(&p->xform, &p->UserData, &p->FreeUserData, &p->Lut, InputFormat, OutputFormat, dwFlags)) { - // Last plugin in the declaration order takes control. We just keep - // the original parameters as a logging. - // Note that cmsFLAGS_CAN_CHANGE_FORMATTER is not set, so by default - // an optimized transform is not reusable. The plug-in can, however, change - // the flags and make it suitable. + // Last plugin in the declaration order takes control. We just keep + // the original parameters as a logging. + // Note that cmsFLAGS_CAN_CHANGE_FORMATTER is not set, so by default + // an optimized transform is not reusable. The plug-in can, however, change + // the flags and make it suitable. - p->ContextID = ContextID; - p->InputFormat = *InputFormat; - p->OutputFormat = *OutputFormat; - p->dwOriginalFlags = *dwFlags; + p->ContextID = ContextID; + p->InputFormat = *InputFormat; + p->OutputFormat = *OutputFormat; + p->dwOriginalFlags = *dwFlags; - // Fill the formatters just in case the optimized routine is interested. - // No error is thrown if the formatter doesn't exist. It is up to the optimization - // factory to decide what to do in those cases. - p->FromInput = _cmsGetFormatter(ContextID, *InputFormat, cmsFormatterInput, CMS_PACK_FLAGS_16BITS).Fmt16; - p->ToOutput = _cmsGetFormatter(ContextID, *OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_16BITS).Fmt16; - p->FromInputFloat = _cmsGetFormatter(ContextID, *InputFormat, cmsFormatterInput, CMS_PACK_FLAGS_FLOAT).FmtFloat; - p->ToOutputFloat = _cmsGetFormatter(ContextID, *OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT).FmtFloat; + // Fill the formatters just in case the optimized routine is interested. + // No error is thrown if the formatter doesn't exist. It is up to the optimization + // factory to decide what to do in those cases. + p->FromInput = _cmsGetFormatter(ContextID, *InputFormat, cmsFormatterInput, CMS_PACK_FLAGS_16BITS).Fmt16; + p->ToOutput = _cmsGetFormatter(ContextID, *OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_16BITS).Fmt16; + p->FromInputFloat = _cmsGetFormatter(ContextID, *InputFormat, cmsFormatterInput, CMS_PACK_FLAGS_FLOAT).FmtFloat; + p->ToOutputFloat = _cmsGetFormatter(ContextID, *OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT).FmtFloat; - // Save the day? (Ignore the warning) - if (Plugin->OldXform) { - p->OldXform = (_cmsTransformFn)(void*) p->xform; - p->xform = _cmsTransform2toTransformAdaptor; - } + // Save the day? (Ignore the warning) + if (Plugin->OldXform) { + p->OldXform = (_cmsTransformFn)(void*)p->xform; + p->xform = _cmsTransform2toTransformAdaptor; + } - return p; - } - } + return p; + } + } + } - // Not suitable for the transform plug-in, let's check the pipeline plug-in - _cmsOptimizePipeline(ContextID, &p->Lut, Intent, InputFormat, OutputFormat, dwFlags); + // Not suitable for the transform plug-in, let's check the pipeline plug-in + _cmsOptimizePipeline(ContextID, &p->Lut, Intent, InputFormat, OutputFormat, dwFlags); } // Check whatever this is a true floating point transform @@ -868,7 +888,7 @@ p ->xform = NullFloatXFORM; } else { - // Float transforms don't use caché, always are non-NULL + // Float transforms don't use cache, always are non-NULL p ->xform = FloatXFORM; } @@ -907,16 +927,16 @@ if (*dwFlags & cmsFLAGS_NOCACHE) { if (*dwFlags & cmsFLAGS_GAMUTCHECK) - p ->xform = PrecalculatedXFORMGamutCheck; // Gamut check, no caché + p ->xform = PrecalculatedXFORMGamutCheck; // Gamut check, no cache else - p ->xform = PrecalculatedXFORM; // No caché, no gamut check + p ->xform = PrecalculatedXFORM; // No cache, no gamut check } else { if (*dwFlags & cmsFLAGS_GAMUTCHECK) - p ->xform = CachedXFORMGamutCheck; // Gamut check, caché + p ->xform = CachedXFORMGamutCheck; // Gamut check, cache else - p ->xform = CachedXFORM; // No gamut check, caché + p ->xform = CachedXFORM; // No gamut check, cache } }
--- a/src/share/native/sun/java2d/cmm/lcms/lcms2.h Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/lcms2.h Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -52,7 +52,7 @@ // //--------------------------------------------------------------------------------- // -// Version 2.9rc3 +// Version 2.11 // #ifndef _lcms2_H @@ -90,6 +90,9 @@ // Uncomment this for special windows mutex initialization (see lcms2_internal.h) // #define CMS_RELY_ON_WINDOWS_STATIC_MUTEX_INIT +// Uncomment this to remove the "register" storage class +// #define CMS_NO_REGISTER_KEYWORD 1 + // ********** End of configuration toggles ****************************** // Needed for streams @@ -107,7 +110,7 @@ #endif // Version/release -#define LCMS_VERSION 2090 +#define LCMS_VERSION 2100 // I will give the chance of redefining basic types for compilers that are not fully C99 compliant #ifndef CMS_BASIC_TYPES_ALREADY_DEFINED @@ -177,6 +180,13 @@ #endif #endif +// Handle "register" keyword +#if defined(CMS_NO_REGISTER_KEYWORD) && !defined(CMS_DLL) && !defined(CMS_DLL_BUILD) +# define CMSREGISTER +#else +# define CMSREGISTER register +#endif + // In the case 64 bit numbers are not supported by the compiler #ifdef CMS_DONT_USE_INT64 typedef cmsUInt32Number cmsUInt64Number[2]; @@ -1058,7 +1068,7 @@ typedef struct _cmsContext_struct* cmsContext; CMSAPI cmsContext CMSEXPORT cmsCreateContext(void* Plugin, void* UserData); -CMSAPI void CMSEXPORT cmsDeleteContext(cmsContext ContexID); +CMSAPI void CMSEXPORT cmsDeleteContext(cmsContext ContextID); CMSAPI cmsContext CMSEXPORT cmsDupContext(cmsContext ContextID, void* NewUserData); CMSAPI void* CMSEXPORT cmsGetContextUserData(cmsContext ContextID); @@ -1210,6 +1220,7 @@ CMSAPI cmsBool CMSEXPORT cmsIsToneCurveDescending(const cmsToneCurve* t); CMSAPI cmsInt32Number CMSEXPORT cmsGetToneCurveParametricType(const cmsToneCurve* t); CMSAPI cmsFloat64Number CMSEXPORT cmsEstimateGamma(const cmsToneCurve* t, cmsFloat64Number Precision); +CMSAPI cmsFloat64Number* CMSEXPORT cmsGetToneCurveParams(const cmsToneCurve* t); // Tone curve tabular estimation CMSAPI cmsUInt32Number CMSEXPORT cmsGetToneCurveEstimatedTableEntries(const cmsToneCurve* t); @@ -1276,13 +1287,13 @@ CMSAPI void* CMSEXPORT cmsStageData(const cmsStage* mpe); // Sampling -typedef cmsInt32Number (* cmsSAMPLER16) (register const cmsUInt16Number In[], - register cmsUInt16Number Out[], - register void * Cargo); +typedef cmsInt32Number (* cmsSAMPLER16) (CMSREGISTER const cmsUInt16Number In[], + CMSREGISTER cmsUInt16Number Out[], + CMSREGISTER void * Cargo); -typedef cmsInt32Number (* cmsSAMPLERFLOAT)(register const cmsFloat32Number In[], - register cmsFloat32Number Out[], - register void * Cargo); +typedef cmsInt32Number (* cmsSAMPLERFLOAT)(CMSREGISTER const cmsFloat32Number In[], + CMSREGISTER cmsFloat32Number Out[], + CMSREGISTER void * Cargo); // Use this flag to prevent changes being written to destination #define SAMPLER_INSPECT 0x01000000 @@ -1673,7 +1684,7 @@ // Misc #define cmsFLAGS_BLACKPOINTCOMPENSATION 0x2000 #define cmsFLAGS_NOWHITEONWHITEFIXUP 0x0004 // Don't fix scum dot -#define cmsFLAGS_HIGHRESPRECALC 0x0400 // Use more memory to give better accurancy +#define cmsFLAGS_HIGHRESPRECALC 0x0400 // Use more memory to give better accuracy #define cmsFLAGS_LOWRESPRECALC 0x0800 // Use less memory to minimize resources // For devicelink creation
--- a/src/share/native/sun/java2d/cmm/lcms/lcms2_internal.h Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/lcms2_internal.h Mon Nov 16 13:36:36 2020 +0000 @@ -27,10 +27,10 @@ // However, the following notice accompanied the original version of this // file: // - +//--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -76,7 +76,7 @@ #endif // BorlandC 5.5, VC2003 are broken on that -#if defined(__BORLANDC__) || (_MSC_VER < 1400) // 1400 == VC++ 8.0 +#if defined(__BORLANDC__) || (defined(_MSC_VER) && (_MSC_VER < 1400)) // 1400 == VC++ 8.0 #define sinf(x) (float)sin((float)x) #define sqrtf(x) (float)sqrt((float)x) #endif @@ -117,6 +117,13 @@ # define cmsINLINE static inline #endif +// Allow signed overflow, we know this is harmless in this particular context +#if defined(__clang__) +# define CMS_NO_SANITIZE __attribute__((no_sanitize("signed-integer-overflow"))) +#else +# define CMS_NO_SANITIZE +#endif + // Other replacement functions #ifdef _MSC_VER # ifndef snprintf @@ -128,12 +135,19 @@ /// Properly define some macros to accommodate /// older MSVC versions. -# if _MSC_VER <= 1700 +# if defined(_MSC_VER) && _MSC_VER <= 1700 #include <float.h> #define isnan _isnan #define isinf(x) (!_finite((x))) # endif +#if !defined(_MSC_VER) && (defined(__STDC_VERSION__) && __STDC_VERSION__ < 199901L) + #if !defined(isinf) + #define isinf(x) (!finite((x))) + #endif +#endif + + #endif // A fast way to convert from/to 16 <-> 8 bits @@ -964,6 +978,9 @@ // Profile linker -------------------------------------------------------------------------------------------------- +// Link several profiles to obtain a single LUT modelling the whole color transform. Intents, Black point +// compensation and Adaptation parameters may vary across profiles. BPC and Adaptation refers to the PCS +// after the profile. I.e, BPC[0] refers to connexion between profile(0) and profile(1) cmsPipeline* _cmsLinkProfiles(cmsContext ContextID, cmsUInt32Number nProfiles, cmsUInt32Number TheIntents[],
--- a/src/share/native/sun/java2d/cmm/lcms/lcms2_plugin.h Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/java2d/cmm/lcms/lcms2_plugin.h Mon Nov 16 13:36:36 2020 +0000 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -123,6 +123,12 @@ CMSAPI void CMSEXPORT _cmsMAT3eval(cmsVEC3* r, const cmsMAT3* a, const cmsVEC3* v); +// MD5 low level ------------------------------------------------------------------------------------- + +CMSAPI cmsHANDLE CMSEXPORT cmsMD5alloc(cmsContext ContextID); +CMSAPI void CMSEXPORT cmsMD5add(cmsHANDLE Handle, const cmsUInt8Number* buf, cmsUInt32Number len); +CMSAPI void CMSEXPORT cmsMD5finish(cmsProfileID* ProfileID, cmsHANDLE Handle); + // Error logging ------------------------------------------------------------------------------------- CMSAPI void CMSEXPORT cmsSignalError(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *ErrorText, ...); @@ -284,9 +290,9 @@ // 16 bits forward interpolation. This function performs precision-limited linear interpolation // and is supposed to be quite fast. Implementation may be tetrahedral or trilinear, and plug-ins may // choose to implement any other interpolation algorithm. -typedef void (* _cmsInterpFn16)(register const cmsUInt16Number Input[], - register cmsUInt16Number Output[], - register const struct _cms_interp_struc* p); +typedef void (* _cmsInterpFn16)(CMSREGISTER const cmsUInt16Number Input[], + CMSREGISTER cmsUInt16Number Output[], + CMSREGISTER const struct _cms_interp_struc* p); // Floating point forward interpolation. Full precision interpolation using floats. This is not a // time critical function. Implementation may be tetrahedral or trilinear, and plug-ins may @@ -369,10 +375,10 @@ struct _cmstransform_struct; -typedef cmsUInt8Number* (* cmsFormatter16)(register struct _cmstransform_struct* CMMcargo, - register cmsUInt16Number Values[], - register cmsUInt8Number* Buffer, - register cmsUInt32Number Stride); +typedef cmsUInt8Number* (* cmsFormatter16)(CMSREGISTER struct _cmstransform_struct* CMMcargo, + CMSREGISTER cmsUInt16Number Values[], + CMSREGISTER cmsUInt8Number* Buffer, + CMSREGISTER cmsUInt32Number Stride); typedef cmsUInt8Number* (* cmsFormatterFloat)(struct _cmstransform_struct* CMMcargo, cmsFloat32Number Values[], @@ -570,9 +576,9 @@ // the optimization search. Or FALSE if it is unable to optimize and want to give a chance // to the rest of optimizers. -typedef void (* _cmsOPTeval16Fn)(register const cmsUInt16Number In[], - register cmsUInt16Number Out[], - register const void* Data); +typedef void (* _cmsOPTeval16Fn)(CMSREGISTER const cmsUInt16Number In[], + CMSREGISTER cmsUInt16Number Out[], + CMSREGISTER const void* Data); typedef cmsBool (* _cmsOPToptimizeFn)(cmsPipeline** Lut,
--- a/src/share/native/sun/management/ThreadImpl.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/share/native/sun/management/ThreadImpl.c Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2019, 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 @@ -94,6 +94,13 @@ JNI_FALSE /* user */); } +JNIEXPORT jlong JNICALL +Java_sun_management_ThreadImpl_getThreadAllocatedMemory0 + (JNIEnv *env, jclass cls, jlong tid) +{ + return jmm_interface->GetOneThreadAllocatedMemory(env, tid); +} + JNIEXPORT void JNICALL Java_sun_management_ThreadImpl_getThreadAllocatedMemory1 (JNIEnv *env, jclass cls, jlongArray ids, jlongArray sizeArray) @@ -135,7 +142,9 @@ JNIEXPORT jobjectArray JNICALL Java_sun_management_ThreadImpl_dumpThreads0 - (JNIEnv *env, jclass cls, jlongArray ids, jboolean lockedMonitors, jboolean lockedSynchronizers) + (JNIEnv *env, jclass cls, jlongArray ids, jboolean lockedMonitors, + jboolean lockedSynchronizers, jint maxDepth) { - return jmm_interface->DumpThreads(env, ids, lockedMonitors, lockedSynchronizers); + return jmm_interface->DumpThreadsMaxDepth(env, ids, lockedMonitors, + lockedSynchronizers, maxDepth); }
--- a/src/solaris/bin/java_md_solinux.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/solaris/bin/java_md_solinux.c Mon Nov 16 13:36:36 2020 +0000 @@ -240,6 +240,7 @@ char serverPattern[PATH_MAX + 1]; char *envpath; char *path; + char* save_ptr = NULL; jboolean clientPatternFound; jboolean serverPatternFound; @@ -263,7 +264,7 @@ * we have a suspicious path component, check if it contains a libjvm.so */ envpath = JLI_StringDup(env); - for (path = JLI_StrTok(envpath, ":"); path != NULL; path = JLI_StrTok(NULL, ":")) { + for (path = strtok_r(envpath, ":", &save_ptr); path != NULL; path = strtok_r(NULL, ":", &save_ptr)) { if (clientPatternFound && JLI_StrStr(path, clientPattern) != NULL) { if (JvmExists(path)) { JLI_MemFree(envpath);
--- a/src/windows/native/java/io/WinNTFileSystem_md.c Thu Nov 05 05:11:12 2020 +0000 +++ b/src/windows/native/java/io/WinNTFileSystem_md.c Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2018, 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,6 +35,7 @@ #include <direct.h> #include <windows.h> #include <io.h> +#include <limits.h> #include "jni.h" #include "io_util.h" @@ -525,13 +526,40 @@ } } else { if (GetLastError() == ERROR_SHARING_VIOLATION) { - /* The error is "share violation", which means the file/dir - must exists. Try _wstati64, we know this at least works - for pagefile.sys and hiberfil.sys. - */ - struct _stati64 sb; - if (_wstati64(pathbuf, &sb) == 0) { - rv = sb.st_size; + // + // The error is a "share violation", which means the file/dir + // must exist. Try FindFirstFile, we know this at least works + // for pagefile.sys. + // + + WIN32_FIND_DATAW fileData; + HANDLE h = FindFirstFileW(pathbuf, &fileData); + if (h != INVALID_HANDLE_VALUE) { + if ((fileData.dwFileAttributes & + FILE_ATTRIBUTE_REPARSE_POINT) == 0) { + WCHAR backslash = L'\\'; + WCHAR *pslash = wcsrchr(pathbuf, backslash); + WCHAR *fslash = wcsrchr(fileData.cFileName, backslash); + if (pslash == NULL) { + pslash = pathbuf; + } else { + pslash++; + } + if (fslash == NULL) { + fslash = fileData.cFileName; + } else { + fslash++; + } + if (wcscmp(pslash, fslash) == 0) { + ULARGE_INTEGER length; + length.LowPart = fileData.nFileSizeLow; + length.HighPart = fileData.nFileSizeHigh; + if (length.QuadPart <= _I64_MAX) { + rv = (jlong)length.QuadPart; + } + } + } + FindClose(h); } } }
--- a/src/windows/native/sun/windows/awt_DnDDS.cpp Thu Nov 05 05:11:12 2020 +0000 +++ b/src/windows/native/sun/windows/awt_DnDDS.cpp Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2016, 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,11 +266,14 @@ dragSource->Signal(); + AwtToolkit &toolkit = AwtToolkit::GetInstance(); + toolkit.isInDoDragDropLoop = TRUE; res = ::DoDragDrop(dragSource, dragSource, convertActionsToDROPEFFECT(dragSource->m_actions), &effects ); + toolkit.isInDoDragDropLoop = FALSE; if (effects == DROPEFFECT_NONE && dragSource->m_dwPerformedDropEffect != DROPEFFECT_NONE) { effects = dragSource->m_dwPerformedDropEffect; @@ -626,6 +629,7 @@ */ HRESULT __stdcall AwtDragSource::QueryContinueDrag(BOOL fEscapeKeyPressed, DWORD grfKeyState) { + AwtToolkit::GetInstance().eventNumber++; TRY; JNIEnv* env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); @@ -681,6 +685,7 @@ */ HRESULT __stdcall AwtDragSource::GiveFeedback(DWORD dwEffect) { + AwtToolkit::GetInstance().eventNumber++; TRY; JNIEnv* env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); @@ -760,6 +765,7 @@ HRESULT __stdcall AwtDragSource::GetData(FORMATETC __RPC_FAR *pFormatEtc, STGMEDIUM __RPC_FAR *pmedium) { + AwtToolkit::GetInstance().eventNumber++; TRY; STGMEDIUM *pPicMedia = PictureDragHelper::FindData(*pFormatEtc); if (NULL != pPicMedia) { @@ -934,6 +940,7 @@ HRESULT __stdcall AwtDragSource::GetDataHere(FORMATETC __RPC_FAR *pFormatEtc, STGMEDIUM __RPC_FAR *pmedium) { + AwtToolkit::GetInstance().eventNumber++; TRY; if (pmedium->pUnkForRelease != (IUnknown *)NULL) { @@ -1036,6 +1043,7 @@ */ HRESULT __stdcall AwtDragSource::QueryGetData(FORMATETC __RPC_FAR *pFormatEtc) { + AwtToolkit::GetInstance().eventNumber++; TRY; return MatchFormatEtc(pFormatEtc, (FORMATETC *)NULL); @@ -1049,6 +1057,7 @@ */ HRESULT __stdcall AwtDragSource::GetCanonicalFormatEtc(FORMATETC __RPC_FAR *pFormatEtcIn, FORMATETC __RPC_FAR *pFormatEtcOut) { + AwtToolkit::GetInstance().eventNumber++; TRY; HRESULT res = MatchFormatEtc(pFormatEtcIn, (FORMATETC *)NULL); @@ -1069,6 +1078,7 @@ */ HRESULT __stdcall AwtDragSource::SetData(FORMATETC __RPC_FAR *pFormatEtc, STGMEDIUM __RPC_FAR *pmedium, BOOL fRelease) { + AwtToolkit::GetInstance().eventNumber++; if (pFormatEtc->cfFormat == CF_PERFORMEDDROPEFFECT && pmedium->tymed == TYMED_HGLOBAL) { m_dwPerformedDropEffect = *(DWORD*)::GlobalLock(pmedium->hGlobal); ::GlobalUnlock(pmedium->hGlobal); @@ -1091,6 +1101,7 @@ */ HRESULT __stdcall AwtDragSource::EnumFormatEtc(DWORD dwDirection, IEnumFORMATETC *__RPC_FAR *ppenumFormatEtc) { + AwtToolkit::GetInstance().eventNumber++; TRY; *ppenumFormatEtc = new ADSIEnumFormatEtc(this); @@ -1104,6 +1115,7 @@ */ HRESULT __stdcall AwtDragSource::DAdvise(FORMATETC __RPC_FAR *pFormatEtc, DWORD advf, IAdviseSink __RPC_FAR *pAdvSink, DWORD __RPC_FAR *pdwConnection) { + AwtToolkit::GetInstance().eventNumber++; return E_NOTIMPL; } @@ -1112,6 +1124,7 @@ */ HRESULT __stdcall AwtDragSource::DUnadvise(DWORD dwConnection) { + AwtToolkit::GetInstance().eventNumber++; return OLE_E_ADVISENOTSUPPORTED; } @@ -1120,6 +1133,7 @@ */ HRESULT __stdcall AwtDragSource::EnumDAdvise(IEnumSTATDATA __RPC_FAR *__RPC_FAR *ppenumAdvise) { + AwtToolkit::GetInstance().eventNumber++; return OLE_E_ADVISENOTSUPPORTED; } @@ -1127,7 +1141,7 @@ ::RegisterClipboardFormat(TEXT("_SUNW_JAVA_AWT_PROCESS_ID")); HRESULT __stdcall AwtDragSource::GetProcessId(FORMATETC __RPC_FAR *pFormatEtc, STGMEDIUM __RPC_FAR *pmedium) { - + AwtToolkit::GetInstance().eventNumber++; if ((pFormatEtc->tymed & TYMED_HGLOBAL) == 0) { return DV_E_TYMED; } else if (pFormatEtc->lindex != -1) {
--- a/src/windows/native/sun/windows/awt_InputMethod.cpp Thu Nov 05 05:11:12 2020 +0000 +++ b/src/windows/native/sun/windows/awt_InputMethod.cpp Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2020, 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 @@ -57,7 +57,7 @@ TRY; // use special message to call ImmCreateContext() in main thread. - return (jint)AwtToolkit::GetInstance().SendMessage(WM_AWT_CREATECONTEXT); + return (jint)AwtToolkit::GetInstance().InvokeInputMethodFunction(WM_AWT_CREATECONTEXT); CATCH_BAD_ALLOC_RET(0); } @@ -74,7 +74,7 @@ TRY_NO_VERIFY; // use special message to call ImmDestroyContext() in main thread. - AwtToolkit::GetInstance().SendMessage(WM_AWT_DESTROYCONTEXT, context, 0); + AwtToolkit::GetInstance().InvokeInputMethodFunction(WM_AWT_DESTROYCONTEXT, context, 0); CATCH_BAD_ALLOC; } @@ -101,7 +101,7 @@ enis->context = context; enis->useNativeCompWindow = useNativeCompWindow; - AwtToolkit::GetInstance().SendMessage(WM_AWT_ASSOCIATECONTEXT, + AwtToolkit::GetInstance().InvokeInputMethodFunction(WM_AWT_ASSOCIATECONTEXT, reinterpret_cast<WPARAM>(enis), (LPARAM)0); // global refs are deleted in message handler @@ -128,7 +128,7 @@ enis->context = NULL; enis->useNativeCompWindow = JNI_TRUE; - AwtToolkit::GetInstance().SendMessage(WM_AWT_ASSOCIATECONTEXT, + AwtToolkit::GetInstance().InvokeInputMethodFunction(WM_AWT_ASSOCIATECONTEXT, reinterpret_cast<WPARAM>(enis), (LPARAM)0); // global refs are deleted in message handler @@ -205,7 +205,7 @@ // 10/29/98 - Changed to commit it according to the flag. // use special message to call ImmNotifyIME() in main thread. - AwtToolkit::GetInstance().SendMessage(WM_AWT_ENDCOMPOSITION, context, + AwtToolkit::GetInstance().InvokeInputMethodFunction(WM_AWT_ENDCOMPOSITION, context, (LPARAM)(flag != sun_awt_windows_WInputMethod_DISCARD_INPUT)); CATCH_BAD_ALLOC; @@ -222,7 +222,7 @@ TRY; // use special message to call ImmSetConversionStatus() in main thread. - AwtToolkit::GetInstance().SendMessage(WM_AWT_SETCONVERSIONSTATUS, + AwtToolkit::GetInstance().InvokeInputMethodFunction(WM_AWT_SETCONVERSIONSTATUS, context, MAKELPARAM((WORD)request, (WORD)0)); @@ -240,7 +240,7 @@ TRY; // use special message to call ImmSetConversionStatus() in main thread. - return (jint) AwtToolkit::GetInstance().SendMessage( + return (jint) AwtToolkit::GetInstance().InvokeInputMethodFunction( WM_AWT_GETCONVERSIONSTATUS, context, 0); CATCH_BAD_ALLOC_RET(0); @@ -257,7 +257,7 @@ TRY; // use special message to call ImmSetConversionStatus() in main thread. - AwtToolkit::GetInstance().SendMessage(WM_AWT_SETOPENSTATUS, + AwtToolkit::GetInstance().InvokeInputMethodFunction(WM_AWT_SETOPENSTATUS, context, flag); CATCH_BAD_ALLOC; @@ -274,7 +274,7 @@ TRY; // use special message to call ImmSetConversionStatus() in main thread. - return (jboolean)(AwtToolkit::GetInstance().SendMessage( + return (jboolean)(AwtToolkit::GetInstance().InvokeInputMethodFunction( WM_AWT_GETOPENSTATUS, context, 0)); CATCH_BAD_ALLOC_RET(0); @@ -392,7 +392,7 @@ jobject peerGlobalRef = env->NewGlobalRef(peer); // use special message to access pData on the toolkit thread - LRESULT res = AwtToolkit::GetInstance().SendMessage(WM_AWT_GET_DEFAULT_IME_HANDLER, + LRESULT res = AwtToolkit::GetInstance().InvokeInputMethodFunction(WM_AWT_GET_DEFAULT_IME_HANDLER, reinterpret_cast<WPARAM>(peerGlobalRef), 0); // global ref is deleted in message handler @@ -431,7 +431,7 @@ // See CR 4805862, AwtToolkit::WndProc // use special message to open candidate window in main thread. - AwtToolkit::GetInstance().SendMessage(WM_AWT_OPENCANDIDATEWINDOW, + AwtToolkit::GetInstance().InvokeInputMethodFunction(WM_AWT_OPENCANDIDATEWINDOW, (WPARAM)peerGlobalRef, MAKELONG(x, y)); // global ref is deleted in message handler
--- a/src/windows/native/sun/windows/awt_Toolkit.cpp Thu Nov 05 05:11:12 2020 +0000 +++ b/src/windows/native/sun/windows/awt_Toolkit.cpp Mon Nov 16 13:36:36 2020 +0000 @@ -330,6 +330,8 @@ ::GetKeyboardState(m_lastKeyboardState); m_waitEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL); + m_inputMethodWaitEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL); + isInDoDragDropLoop = FALSE; eventNumber = 0; } @@ -763,6 +765,7 @@ delete tk.m_cmdIDs; ::CloseHandle(m_waitEvent); + ::CloseHandle(m_inputMethodWaitEvent); tk.m_isDisposed = TRUE; @@ -1073,11 +1076,17 @@ // it returs with no error. (This restriction is not documented) // So we must use thse messages to call these APIs in main thread. case WM_AWT_CREATECONTEXT: { - return reinterpret_cast<LRESULT>( + AwtToolkit& tk = AwtToolkit::GetInstance(); + tk.m_inputMethodData = reinterpret_cast<LRESULT>( reinterpret_cast<void*>(ImmCreateContext())); + ::SetEvent(tk.m_inputMethodWaitEvent); + return tk.m_inputMethodData; } case WM_AWT_DESTROYCONTEXT: { ImmDestroyContext((HIMC)wParam); + AwtToolkit& tk = AwtToolkit::GetInstance(); + tk.m_inputMethodData = 0; + ::SetEvent(tk.m_inputMethodWaitEvent); return 0; } case WM_AWT_ASSOCIATECONTEXT: { @@ -1103,17 +1112,21 @@ } delete data; + AwtToolkit& tk = AwtToolkit::GetInstance(); + tk.m_inputMethodData = 0; + ::SetEvent(tk.m_inputMethodWaitEvent); return 0; } case WM_AWT_GET_DEFAULT_IME_HANDLER: { LRESULT ret = (LRESULT)FALSE; jobject peer = (jobject)wParam; + AwtToolkit& tk = AwtToolkit::GetInstance(); AwtComponent* comp = (AwtComponent*)JNI_GET_PDATA(peer); if (comp != NULL) { HWND defaultIMEHandler = ImmGetDefaultIMEWnd(comp->GetHWnd()); if (defaultIMEHandler != NULL) { - AwtToolkit::GetInstance().SetInputMethodWindow(defaultIMEHandler); + tk.SetInputMethodWindow(defaultIMEHandler); ret = (LRESULT)TRUE; } } @@ -1121,6 +1134,8 @@ if (peer != NULL) { env->DeleteGlobalRef(peer); } + tk.m_inputMethodData = ret; + ::SetEvent(tk.m_inputMethodWaitEvent); return ret; } case WM_AWT_HANDLE_NATIVE_IME_EVENT: { @@ -1156,6 +1171,9 @@ Changed to commit it according to the flag 10/29/98*/ ImmNotifyIME((HIMC)wParam, NI_COMPOSITIONSTR, (lParam ? CPS_COMPLETE : CPS_CANCEL), 0); + AwtToolkit& tk = AwtToolkit::GetInstance(); + tk.m_inputMethodData = 0; + ::SetEvent(tk.m_inputMethodWaitEvent); return 0; } case WM_AWT_SETCONVERSIONSTATUS: { @@ -1163,12 +1181,18 @@ DWORD smode; ImmGetConversionStatus((HIMC)wParam, (LPDWORD)&cmode, (LPDWORD)&smode); ImmSetConversionStatus((HIMC)wParam, (DWORD)LOWORD(lParam), smode); + AwtToolkit& tk = AwtToolkit::GetInstance(); + tk.m_inputMethodData = 0; + ::SetEvent(tk.m_inputMethodWaitEvent); return 0; } case WM_AWT_GETCONVERSIONSTATUS: { DWORD cmode; DWORD smode; ImmGetConversionStatus((HIMC)wParam, (LPDWORD)&cmode, (LPDWORD)&smode); + AwtToolkit& tk = AwtToolkit::GetInstance(); + tk.m_inputMethodData = cmode; + ::SetEvent(tk.m_inputMethodWaitEvent); return cmode; } case WM_AWT_ACTIVATEKEYBOARDLAYOUT: { @@ -1203,6 +1227,9 @@ // instead of LOWORD and HIWORD p->OpenCandidateWindow(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)); env->DeleteGlobalRef(peerObject); + AwtToolkit& tk = AwtToolkit::GetInstance(); + tk.m_inputMethodData = 0; + ::SetEvent(tk.m_inputMethodWaitEvent); return 0; } @@ -1224,10 +1251,16 @@ case WM_AWT_SETOPENSTATUS: { ImmSetOpenStatus((HIMC)wParam, (BOOL)lParam); + AwtToolkit& tk = AwtToolkit::GetInstance(); + tk.m_inputMethodData = 0; + ::SetEvent(tk.m_inputMethodWaitEvent); return 0; } case WM_AWT_GETOPENSTATUS: { - return (DWORD)ImmGetOpenStatus((HIMC)wParam); + AwtToolkit& tk = AwtToolkit::GetInstance(); + tk.m_inputMethodData = (DWORD)ImmGetOpenStatus((HIMC)wParam); + ::SetEvent(tk.m_inputMethodWaitEvent); + return tk.m_inputMethodData; } case WM_DISPLAYCHANGE: { // Reinitialize screens @@ -2900,7 +2933,12 @@ AwtToolkit & tk = AwtToolkit::GetInstance(); DWORD eventNumber = tk.eventNumber; tk.PostMessage(WM_SYNC_WAIT, 0, 0); - ::WaitForSingleObject(tk.m_waitEvent, INFINITE); + for(long t = 2; t < timeout && + WAIT_TIMEOUT == ::WaitForSingleObject(tk.m_waitEvent, 2); t+=2) { + if (tk.isInDoDragDropLoop) { + break; + } + } DWORD newEventNumber = tk.eventNumber; return (newEventNumber - eventNumber) > 2; } @@ -3082,3 +3120,23 @@ } return m_pCloseTouchInputHandle(hTouchInput); } + +/* + * The fuction intended for access to an IME API. It posts IME message to the queue and + * waits untill the message processing is completed. + * + * On Windows 10 the IME may process the messages send via SenMessage() from other threads + * when the IME is called by TranslateMessage(). This may cause an reentrancy issue when + * the windows procedure processing the sent message call an IME function and leaves + * the IME functionality in an unexpected state. + * This function avoids reentrancy issue and must be used for sending of all IME messages + * instead of SendMessage(). + */ +LRESULT AwtToolkit::InvokeInputMethodFunction(UINT msg, WPARAM wParam, LPARAM lParam) { + CriticalSection::Lock lock(m_inputMethodLock); + if (PostMessage(msg, wParam, lParam)) { + ::WaitForSingleObject(m_inputMethodWaitEvent, INFINITE); + return m_inputMethodData; + } + return 0; +}
--- a/src/windows/native/sun/windows/awt_Toolkit.h Thu Nov 05 05:11:12 2020 +0000 +++ b/src/windows/native/sun/windows/awt_Toolkit.h Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2020, 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 @@ -246,6 +246,8 @@ UINT cInputs, PTOUCHINPUT pInputs, int cbSize); BOOL TICloseTouchInputHandle(HTOUCHINPUT hTouchInput); + LRESULT InvokeInputMethodFunction(UINT msg, WPARAM wParam=0, LPARAM lParam=0); + INLINE BOOL localPump() { return m_localPump; } INLINE BOOL VerifyComponents() { return FALSE; } // TODO: Use new DebugHelper class to set this flag INLINE HWND GetHWnd() { return m_toolkitHWnd; } @@ -440,7 +442,8 @@ static BOOL activateKeyboardLayout(HKL hkl); HANDLE m_waitEvent; - DWORD eventNumber; + volatile DWORD eventNumber; + volatile BOOL isInDoDragDropLoop; private: HWND CreateToolkitWnd(LPCTSTR name); @@ -499,6 +502,10 @@ HMODULE m_dllHandle; /* The module handle. */ CriticalSection m_Sync; + CriticalSection m_inputMethodLock; + + HANDLE m_inputMethodWaitEvent; + LRESULT m_inputMethodData; /* track display changes - used by palette-updating code. This is a workaround for a windows bug that prevents
--- a/test/ProblemList.txt Thu Nov 05 05:11:12 2020 +0000 +++ b/test/ProblemList.txt Mon Nov 16 13:36:36 2020 +0000 @@ -39,15 +39,18 @@ # # Shell tests are othervm by default. # -# List items are testnames followed by labels, all MUST BE commented +# List items are testnames followed by labels, all MUST BE commented # as to why they are here and use a label: # generic-all Problems on all platforms -# generic-ARCH Where ARCH is one of: sparc, sparcv9, x64, i586, etc. +# generic-ARCH Where ARCH is one of: sparc, sparcv9, x64, i586, ppc64, +# ppc64le, s390x etc. # OSNAME-all Where OSNAME is one of: solaris, linux, windows, macosx, aix # OSNAME-ARCH Specific on to one OSNAME and ARCH, e.g. solaris-x64 # OSNAME-REV Specific on to one OSNAME and REV, e.g. solaris-5.8 # -# More than one label is allowed but must be on the same line. +# More than one label is allowed but must be on the same line comma seperated, +# without spaces. +# If there are several lines mentioning the same test, the last one is used. # ############################################################################# # @@ -80,7 +83,7 @@ # Fixing the tests: # # Some tests just may need to be run with "othervm", and that can easily be -# done my adding a @run line (or modifying any existing @run): +# done by adding a @run line (or modifying any existing @run): # @run main/othervm NameOfMainClass # Make sure this @run follows any use of @library. # Otherwise, if the test is a samevm possibility, make sure the test is @@ -163,8 +166,11 @@ # 7122846, 8098566 java/net/MulticastSocket/SetLoopbackMode.java macosx-all,solaris-all -# 8171217, 7145658 -java/net/MulticastSocket/Test.java macosx-all,solaris-all +# 8171217, 7145658, 8207404 +java/net/MulticastSocket/Test.java macosx-all,solaris-all,aix-all + +# 8207404 +java/net/MulticastSocket/SetGetNetworkInterfaceTest.java aix-all # 7143960 java/net/DatagramSocket/SendDatagramToBadAddress.java macosx-all
--- a/test/com/sun/jdi/EvalArraysAsList.sh Thu Nov 05 05:11:12 2020 +0000 +++ b/test/com/sun/jdi/EvalArraysAsList.sh Mon Nov 16 13:36:36 2020 +0000 @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2016, 2018, 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 @@ -39,7 +39,7 @@ public class $classname { public static void main(String[] args) { java.util.List<Object> l = java.util.Arrays.asList(null, "a"); - System.out.println("java.util.Arrays.asList(null, \"a\") returns: " + l); + System.out.println("java.util.Arrays.asList(null, \\"a\\") returns: " + l); return; // @1 breakpoint } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/com/sun/management/ThreadMXBean/MaxDepthForThreadInfoTest.java Mon Nov 16 13:36:36 2020 +0000 @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2017, 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 8185003 + * @library /java/lang/management/ThreadMXBean + * @build ThreadDump + * @run main MaxDepthForThreadInfoTest + * @summary verifies the functionality of ThreadMXBean.dumpAllThreads + * and ThreadMXBean.getThreadInfo with maxDepth argument + */ + +import java.lang.management.ManagementFactory; +import java.lang.management.ThreadInfo; +import java.lang.management.ThreadMXBean; + + + +public class MaxDepthForThreadInfoTest { + + + public static void main(String[] Args) { + + com.sun.management.ThreadMXBean tmxb = + (com.sun.management.ThreadMXBean)ManagementFactory.getThreadMXBean(); + + long[] threadIds = tmxb.getAllThreadIds(); + + ThreadInfo[] tinfos = tmxb.getThreadInfo(threadIds, true, true, 0); + for (ThreadInfo ti : tinfos) { + if (ti.getStackTrace().length > 0) { + ThreadDump.printThreadInfo(ti); + throw new RuntimeException("more than requested " + + "number of frames dumped"); + } + } + + tinfos = tmxb.getThreadInfo(threadIds, true, true, 3); + for (ThreadInfo ti : tinfos) { + if (ti.getStackTrace().length > 3) { + ThreadDump.printThreadInfo(ti); + throw new RuntimeException("more than requested " + + "number of frames dumped"); + } + } + + try { + tmxb.getThreadInfo(threadIds, true, true, -1); + throw new RuntimeException("Didn't throw IllegalArgumentException " + + "for negative maxdepth value"); + } catch (IllegalArgumentException e) { + System.out.println("Throwed IllegalArgumentException as expected"); + } + + tinfos = tmxb.dumpAllThreads(true, true, 0); + for (ThreadInfo ti : tinfos) { + if (ti.getStackTrace().length > 0) { + ThreadDump.printThreadInfo(ti); + throw new RuntimeException("more than requested " + + "number of frames dumped"); + } + } + tinfos = tmxb.dumpAllThreads(true, true, 2); + for (ThreadInfo ti : tinfos) { + if (ti.getStackTrace().length > 2) { + ThreadDump.printThreadInfo(ti); + throw new RuntimeException("more than requested " + + "number of frames dumped"); + } + } + + try { + tmxb.dumpAllThreads(true, true, -1); + throw new RuntimeException("Didn't throw IllegalArgumentException " + + "for negative maxdepth value"); + } catch (IllegalArgumentException e) { + System.out.println("Throwed IllegalArgumentException as expected"); + } + + System.out.println("Test passed"); + } +}
--- a/test/com/sun/management/ThreadMXBean/ThreadAllocatedMemory.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/com/sun/management/ThreadMXBean/ThreadAllocatedMemory.java Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2019, 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 6173675 + * @bug 6173675 8231209 * @summary Basic test of ThreadMXBean.getThreadAllocatedBytes * @author Paul Hohensee */ @@ -33,9 +33,8 @@ public class ThreadAllocatedMemory { private static com.sun.management.ThreadMXBean mbean = (com.sun.management.ThreadMXBean)ManagementFactory.getThreadMXBean(); - private static boolean testFailed = false; - private static boolean done = false; - private static boolean done1 = false; + private static volatile boolean done = false; + private static volatile boolean done1 = false; private static Object obj = new Object(); private static final int NUM_THREADS = 10; private static Thread[] threads = new Thread[NUM_THREADS]; @@ -44,6 +43,22 @@ public static void main(String[] argv) throws Exception { + testSupportEnableDisable(); + + // Test current thread two ways + testGetCurrentThreadAllocatedBytes(); + testCurrentThreadGetThreadAllocatedBytes(); + + // Test a single thread that is not this one + testGetThreadAllocatedBytes(); + + // Test many threads that are not this one + testGetThreadsAllocatedBytes(); + + System.out.println("Test passed"); + } + + private static void testSupportEnableDisable() { if (!mbean.isThreadAllocatedMemorySupported()) { return; } @@ -58,10 +73,7 @@ "ThreadAllocatedMemory is expected to be disabled"); } - Thread curThread = Thread.currentThread(); - long id = curThread.getId(); - - long s = mbean.getThreadAllocatedBytes(id); + long s = mbean.getCurrentThreadAllocatedBytes(); if (s != -1) { throw new RuntimeException( "Invalid ThreadAllocatedBytes returned = " + @@ -77,63 +89,106 @@ throw new RuntimeException( "ThreadAllocatedMemory is expected to be enabled"); } + } + + private static void testGetCurrentThreadAllocatedBytes() { + long size = mbean.getCurrentThreadAllocatedBytes(); + ensureValidSize(size); + + // do some more allocation + doit(); + + checkResult(Thread.currentThread(), size, + mbean.getCurrentThreadAllocatedBytes()); + } + + private static void testCurrentThreadGetThreadAllocatedBytes() { + Thread curThread = Thread.currentThread(); + long id = curThread.getId(); long size = mbean.getThreadAllocatedBytes(id); - // implementation could have started measurement when - // measurement was enabled, in which case size can be 0 - if (size < 0) { - throw new RuntimeException( - "Invalid allocated bytes returned = " + size); - } + ensureValidSize(size); + // do some more allocation doit(); - // Expected to be size1 >= size - long size1 = mbean.getThreadAllocatedBytes(id); - if (size1 < size) { - throw new RuntimeException("Allocated bytes " + size1 + - " expected >= " + size); + checkResult(curThread, size, mbean.getThreadAllocatedBytes(id)); + } + + private static void testGetThreadAllocatedBytes() + throws Exception { + + // start a thread + done = false; done1 = false; + Thread curThread = new MyThread("MyThread"); + curThread.start(); + long id = curThread.getId(); + + // wait for thread to block after doing some allocation + waitUntilThreadBlocked(curThread); + + long size = mbean.getThreadAllocatedBytes(id); + ensureValidSize(size); + + // let thread go to do some more allocation + synchronized (obj) { + done = true; + obj.notifyAll(); } - System.out.println(curThread.getName() + - " Current thread allocated bytes = " + size + - " allocated bytes = " + size1); + + // wait for thread to get going again. we don't care if we + // catch it in mid-execution or if it hasn't + // restarted after we're done sleeping. + goSleep(400); + + checkResult(curThread, size, mbean.getThreadAllocatedBytes(id)); + + // let thread exit + synchronized (obj) { + done1 = true; + obj.notifyAll(); + } + try { + curThread.join(); + } catch (InterruptedException e) { + System.out.println("Unexpected exception is thrown."); + e.printStackTrace(System.out); + } + } - // start threads, wait for them to block + private static void testGetThreadsAllocatedBytes() + throws Exception { + + // start threads + done = false; done1 = false; for (int i = 0; i < NUM_THREADS; i++) { threads[i] = new MyThread("MyThread-" + i); threads[i].start(); } - // threads block after doing some allocation - waitUntilThreadBlocked(); + // wait for threads to block after doing some allocation + waitUntilThreadsBlocked(); for (int i = 0; i < NUM_THREADS; i++) { sizes[i] = mbean.getThreadAllocatedBytes(threads[i].getId()); + ensureValidSize(sizes[i]); } - // let threads go and do some more allocation + // let threads go to do some more allocation synchronized (obj) { done = true; obj.notifyAll(); } - // wait for threads to get going again. we don't care if we + // wait for threads to get going again. we don't care if we // catch them in mid-execution or if some of them haven't // restarted after we're done sleeping. goSleep(400); for (int i = 0; i < NUM_THREADS; i++) { - long newSize = mbean.getThreadAllocatedBytes(threads[i].getId()); - if (sizes[i] > newSize) { - throw new RuntimeException("TEST FAILED: " + - threads[i].getName() + - " previous allocated bytes = " + sizes[i] + - " > current allocated bytes = " + newSize); - } - System.out.println(threads[i].getName() + - " Previous allocated bytes = " + sizes[i] + - " Current allocated bytes = " + newSize); + checkResult(threads[i], sizes[i], + mbean.getThreadAllocatedBytes(threads[i].getId())); } // let threads exit @@ -148,17 +203,30 @@ } catch (InterruptedException e) { System.out.println("Unexpected exception is thrown."); e.printStackTrace(System.out); - testFailed = true; break; } } - if (testFailed) { - throw new RuntimeException("TEST FAILED"); + } + + private static void ensureValidSize(long size) { + // implementation could have started measurement when + // measurement was enabled, in which case size can be 0 + if (size < 0) { + throw new RuntimeException( + "Invalid allocated bytes returned = " + size); } - - System.out.println("Test passed"); } + private static void checkResult(Thread curThread, + long prev_size, long curr_size) { + if (curr_size < prev_size) { + throw new RuntimeException("Allocated bytes " + curr_size + + " expected >= " + prev_size); + } + System.out.println(curThread.getName() + + " Previous allocated bytes = " + prev_size + + " Current allocated bytes = " + curr_size); + } private static void goSleep(long ms) throws Exception { try { @@ -169,7 +237,18 @@ } } - private static void waitUntilThreadBlocked() + private static void waitUntilThreadBlocked(Thread thread) + throws Exception { + while (true) { + goSleep(100); + ThreadInfo info = mbean.getThreadInfo(thread.getId()); + if (info.getThreadState() == Thread.State.WAITING) { + break; + } + } + } + + private static void waitUntilThreadsBlocked() throws Exception { int count = 0; while (count != NUM_THREADS) { @@ -210,7 +289,6 @@ } catch (InterruptedException e) { System.out.println("Unexpected exception is thrown."); e.printStackTrace(System.out); - testFailed = true; break; } } @@ -225,7 +303,7 @@ " ThreadAllocatedBytes = " + size2); if (size1 > size2) { - throw new RuntimeException("TEST FAILED: " + getName() + + throw new RuntimeException(getName() + " ThreadAllocatedBytes = " + size1 + " > ThreadAllocatedBytes = " + size2); } @@ -237,7 +315,6 @@ } catch (InterruptedException e) { System.out.println("Unexpected exception is thrown."); e.printStackTrace(System.out); - testFailed = true; break; } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/awt/Frame/SetMaximizedBounds/SetMaximizedBounds.java Mon Nov 16 13:36:36 2020 +0000 @@ -0,0 +1,88 @@ +/* + * 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 + * 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.*; + +/* + * @test + * @summary When Frame.setExtendedState(Frame.MAXIMIZED_BOTH) + * is called for a Frame after been called setMaximizedBounds() with + * certain value, Frame bounds must equal to this value. + * + * @library ../../../../lib/testlibrary + * @build ExtendedRobot + * @run main SetMaximizedBounds + */ + +public class SetMaximizedBounds { + + Frame frame; + Rectangle bound; + boolean supported; + ExtendedRobot robot; + static Rectangle max = new Rectangle(100,100,400,400); + + public void doTest() throws Exception { + robot = new ExtendedRobot(); + + EventQueue.invokeAndWait( () -> { + frame = new Frame( "TestFrame "); + frame.setLayout(new FlowLayout()); + + if (Toolkit.getDefaultToolkit().isFrameStateSupported(Frame.MAXIMIZED_BOTH)) { + supported = true; + frame.setMaximizedBounds(max); + } else { + supported = false; + } + + frame.setSize(200, 200); + frame.setVisible(true); + }); + + robot.waitForIdle(2000); + if (supported) { + EventQueue.invokeAndWait( () -> { + frame.setExtendedState(Frame.MAXIMIZED_BOTH); + }); + robot.waitForIdle(2000); + bound = frame.getBounds(); + if(!bound.equals(max)) + throw new RuntimeException("The bounds of the Frame do not equal to what" + + " is specified when the frame is in Frame.MAXIMIZED_BOTH state"); + } else { + System.out.println("Frame.MAXIMIZED_BOTH not supported"); + } + + frame.dispose(); + } + + public static void main(String[] args) throws Exception { + String os = System.getProperty("os.name").toLowerCase(); + System.out.println(os); + if (os.contains("windows") || os.contains("os x")) + new SetMaximizedBounds().doTest(); + else + System.out.println("Platform "+os+" is not supported. Supported platforms are Windows and OS X."); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/awt/GridLayout/ChangeGridSize/ChangeGridSize.java Mon Nov 16 13:36:36 2020 +0000 @@ -0,0 +1,189 @@ +/* + * 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 + * 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.*; +import java.awt.event.*; + +/* + * @test + * @summary Have different components having different preferred sizes + * added to a grid layout. Change the rows and columns of the + * grid layout and check the components are re-laid out. + * The strategy followed is to calculate the component location + * depending on the preferred sizes and gaps and click the cornors + * of the components to check if events are triggered + * @library ../../../../lib/testlibrary/ + * @build ExtendedRobot + * @run main ChangeGridSize + * @run main ChangeGridSize -hg 20 -vg 20 + */ + +public class ChangeGridSize { + + private int width = 200; + private int height = 200; + private final int hGap, vGap; + private final int rows = 3; + private final int columns = 2; + private final int componentCount = 6; + + private Button[] buttons; + private Frame frame; + + private ExtendedRobot robot; + private GridLayout layout; + + private volatile boolean actionPerformed = false; + + public ChangeGridSize(int hGap, int vGap) throws Exception { + this.hGap = hGap; + this.vGap = vGap; + robot = new ExtendedRobot(); + EventQueue.invokeAndWait( () -> { + frame = new Frame("Test frame"); + frame.setSize(width, height); + layout = new GridLayout(rows + 3, columns - 1, hGap, vGap); + frame.setLayout(layout); + + buttons = new Button[componentCount]; + for (int i = 0; i < componentCount; i++) { + buttons[i] = new Button("Button" + i); + frame.add(buttons[i]); + buttons[i].addActionListener( (event) -> { actionPerformed = true; }); + } + frame.setVisible(true); + }); + } + + public static void main(String[] args) throws Exception { + int hGap = 0; + int vGap = 0; + for (int i = 0; i < args.length; i++) { + switch (args[i]) { + case "-hg": + hGap = Integer.parseInt(args[++i]); + break; + case "-vg": + vGap = Integer.parseInt(args[++i]); + break; + } + } + new ChangeGridSize(hGap, vGap).doTest(); + } + + private void resizeFrame() throws Exception { + EventQueue.invokeAndWait(() -> { + Insets insets = frame.getInsets(); + double dH = (height-insets.top-insets.bottom - vGap*(rows-1)) % rows; + double dW = (width-insets.left-insets.right - hGap*(columns-1)) % columns; + height -= dH; + width -= dW; + frame.setSize(width, height); + frame.revalidate(); + }); + robot.waitForIdle(); + } + + private void changeGridSize() throws Exception { + EventQueue.invokeAndWait(() -> { + layout.setRows(rows); + layout.setColumns(columns); + + frame.revalidate(); + }); + robot.waitForIdle(); + } + + public void testBoundaries(int topLeftX, int topLeftY, int bottomRightX, int bottomRightY) throws Exception { + + actionPerformed = false; + robot.mouseMove(topLeftX, topLeftY); + robot.delay(500); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.delay(500); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(3000); + + if(!actionPerformed) + throw new RuntimeException("Clicking on the left top of button did not trigger action event"); + + actionPerformed = false; + robot.mouseMove(bottomRightX, bottomRightY); + robot.delay(500); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.delay(500); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(3000); + + if(!actionPerformed) + throw new RuntimeException("Clicking on the bottom right of button did not trigger action event"); + } + + private void doTest() throws Exception { + robot.waitForIdle(); + changeGridSize(); + resizeFrame(); + + int availableWidth = width - frame.getInsets().left - + frame.getInsets().right; + int componentWidth = (availableWidth + hGap) / columns - hGap; + int availableHeight = height - frame.getInsets().top - + frame.getInsets().bottom; + int componentHeight = (availableHeight + vGap) / rows - vGap; + + for (int i = 0; i < buttons.length; i++) { + if (buttons[i].getSize().width != componentWidth || + buttons[i].getSize().height != componentHeight) { + throw new RuntimeException( + "FAIL: Button " + i + " not of proper size" + + "Expected: " + componentWidth + "*" + componentHeight + + "Actual: " + buttons[i].getSize().width + "*" + buttons[i].getSize().height); + } + } + + // Components are visible. They should trigger events. + // Now you can check for the actual size shown. + int currentRow = 1; + int currentColumn = 0; + for (int i = 0; i < buttons.length; i++) { + currentColumn++; + if (currentColumn > columns) { + currentColumn = 1; + currentRow++; + } + + int topPosX = frame.getLocationOnScreen().x + + frame.getInsets().left + + (currentColumn - 1) * (componentWidth + hGap); + int topPosY = frame.getLocationOnScreen().y + + frame.getInsets().top + + (currentRow - 1) * (componentHeight + vGap); + + int bottomPosX = topPosX + componentWidth - 1; + int bottomPosY = topPosY + componentHeight - 1; + testBoundaries(topPosX, topPosY, bottomPosX, bottomPosY); + } + + frame.dispose(); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/awt/GridLayout/ComponentPreferredSize/ComponentPreferredSize.java Mon Nov 16 13:36:36 2020 +0000 @@ -0,0 +1,181 @@ +/* + * 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 + * 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.*; +import java.awt.event.InputEvent; + +/* + * @test + * @summary Have different components having different preferred sizes + * added to a grid layout having various values of row/columns. + * Check if the compnents are correctly laid out. + * The strategy followed is to calculate the component location + * depending on the preferred sizes and gaps and click the cornors + * of the components to check if events are triggered + * @library ../../../../lib/testlibrary/ + * @build ExtendedRobot + * @run main ComponentPreferredSize + * @run main ComponentPreferredSize -hg 20 -vg 20 + */ + +public class ComponentPreferredSize { + + private int width = 200; + private int height = 200; + private final int hGap, vGap; + private final int rows = 3; + private final int columns = 2; + private final int componentCount = 6; + + private Button[] buttons; + private Frame frame; + + private ExtendedRobot robot; + private GridLayout layout; + + private volatile boolean actionPerformed = false; + + public ComponentPreferredSize(int hGap, int vGap) throws Exception { + this.hGap = hGap; + this.vGap = vGap; + robot = new ExtendedRobot(); + EventQueue.invokeAndWait( () -> { + frame = new Frame("Test frame"); + frame.setSize(width, height); + layout = new GridLayout(rows, columns, hGap, vGap); + frame.setLayout(layout); + + buttons = new Button[componentCount]; + for (int i = 0; i < componentCount; i++) { + buttons[i] = new Button("Button" + i); + buttons[i].setPreferredSize(new Dimension((int) Math.random() * 100, + (int) Math.random() * 100)); + frame.add(buttons[i]); + buttons[i].addActionListener((event) -> {actionPerformed = true;}); + } + + frame.setVisible(true); + }); + } + + public static void main(String[] args) throws Exception { + int hGap = 0; + int vGap = 0; + for (int i = 0; i < args.length; i++) { + switch (args[i]) { + case "-hg": + hGap = Integer.parseInt(args[++i]); + break; + case "-vg": + vGap = Integer.parseInt(args[++i]); + break; + } + } + new ComponentPreferredSize(hGap, vGap).doTest(); + } + + private void resizeFrame() throws Exception { + EventQueue.invokeAndWait(() -> { + Insets insets = frame.getInsets(); + double dH = (height-insets.top-insets.bottom - vGap*(rows-1)) % rows; + double dW = (width-insets.left-insets.right - hGap*(columns-1)) % columns; + height -= dH; + width -= dW; + frame.setSize(width, height); + frame.revalidate(); + }); + robot.waitForIdle(); + } + + public void testBoundaries(int topLeftX, int topLeftY, int bottomRightX, int bottomRightY) throws Exception { + + actionPerformed = false; + robot.mouseMove(topLeftX, topLeftY); + robot.delay(500); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.delay(500); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(3000); + + if(!actionPerformed) + throw new RuntimeException("Clicking on the left top of button did not trigger action event"); + + actionPerformed = false; + robot.mouseMove(bottomRightX, bottomRightY); + robot.delay(500); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.delay(500); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(3000); + + if(!actionPerformed) + throw new RuntimeException("Clicking on the bottom right of button did not trigger action event"); + } + + private void doTest() throws Exception { + robot.waitForIdle(); + resizeFrame(); + + int availableWidth = width - frame.getInsets().left - + frame.getInsets().right; + int componentWidth = (availableWidth + hGap) / columns - hGap; + int availableHeight = height - frame.getInsets().top - + frame.getInsets().bottom; + int componentHeight = (availableHeight + vGap) / rows - vGap; + + for (int i = 0; i < buttons.length; i++) { + if (buttons[i].getSize().width != componentWidth || + buttons[i].getSize().height != componentHeight) { + throw new RuntimeException( + "FAIL: Button " + i + " not of proper size" + + "Expected: " + componentWidth + "*" + componentHeight + + "Actual: " + buttons[i].getSize().width + "*" + buttons[i].getSize().height); + } + } + + // Components are visible. They should trigger events. + // Now you can check for the actual size shown. + int currentRow = 1; + int currentColumn = 0; + for (int i = 0; i < buttons.length; i++) { + currentColumn++; + if (currentColumn > columns) { + currentColumn = 1; + currentRow++; + } + + int topPosX = frame.getLocationOnScreen().x + + frame.getInsets().left + + (currentColumn - 1) * (componentWidth + hGap); + int topPosY = frame.getLocationOnScreen().y + + frame.getInsets().top + + (currentRow - 1) * (componentHeight + vGap); + + int bottomPosX = topPosX + componentWidth - 1; + int bottomPosY = topPosY + componentHeight - 1; + testBoundaries(topPosX, topPosY, bottomPosX, bottomPosY); + } + + frame.dispose(); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/awt/Robot/ModifierRobotKey/ModifierRobotKeyTest.java Mon Nov 16 13:36:36 2020 +0000 @@ -0,0 +1,230 @@ +/* + * 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 + * 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.*; +import java.awt.event.*; + +import static jdk.testlibrary.Asserts.assertTrue; + +/* + * @test + * @summary Make sure that modifier key mask is set when robot press + * some key with one or more modifiers. + * + * @library ../../../../lib/testlibrary/ + * @build ExtendedRobot + * @run main ModifierRobotKeyTest + */ + +public class ModifierRobotKeyTest extends KeyAdapter { + + private boolean focusGained = false; + private boolean startTest = false; + private ExtendedRobot robot; + private Frame frame; + private Canvas canvas; + + private volatile boolean tempPress = false; + + private int[] textKeys, modifierKeys, inputMasks; + private boolean[] modifierStatus, textStatus; + + private final static int waitDelay = 5000; + private Object tempLock = new Object(); + private Object keyLock = new Object(); + + public static void main(String[] args) throws Exception { + ModifierRobotKeyTest test = new ModifierRobotKeyTest(); + test.doTest(); + } + + public ModifierRobotKeyTest() throws Exception { + modifierKeys = new int[3]; + modifierKeys[0] = KeyEvent.VK_SHIFT; + modifierKeys[1] = KeyEvent.VK_CONTROL; + modifierKeys[2] = KeyEvent.VK_ALT; + + inputMasks = new int[3]; + inputMasks[0] = InputEvent.SHIFT_MASK; + inputMasks[1] = InputEvent.CTRL_MASK; + inputMasks[2] = InputEvent.ALT_MASK; + + modifierStatus = new boolean[modifierKeys.length]; + + textKeys = new int[2]; + textKeys[0] = KeyEvent.VK_A; + + String os = System.getProperty("os.name").toLowerCase(); + + if (os.contains("solaris") || os.contains("sunos")) + textKeys[1] = KeyEvent.VK_S; + else if (os.contains("os x")) + textKeys[1] = KeyEvent.VK_K; + else + textKeys[1] = KeyEvent.VK_I; + + textStatus = new boolean[textKeys.length]; + + EventQueue.invokeAndWait( () -> { initializeGUI(); }); + } + + public void keyPressed(KeyEvent event) { + + tempPress = true; + synchronized (tempLock) { tempLock.notifyAll(); } + + if (! startTest) { + return; + } + for (int x = 0; x < inputMasks.length; x++) { + if ((event.getModifiers() & inputMasks[x]) != 0) { + System.out.println("Modifier set: " + event.getKeyModifiersText(inputMasks[x])); + modifierStatus[x] = true; + } + } + for (int x = 0; x < textKeys.length; x++) { + if (event.getKeyCode() == textKeys[x]) { + System.out.println("Text set: " + event.getKeyText(textKeys[x])); + textStatus[x] = true; + } + } + + synchronized (keyLock) { keyLock.notifyAll(); } + } + + private void initializeGUI() { + frame = new Frame("Test frame"); + canvas = new Canvas(); + canvas.addFocusListener(new FocusAdapter() { + public void focusGained(FocusEvent event) { focusGained = true; } + }); + canvas.addKeyListener(this); + frame.setLayout(new BorderLayout()); + frame.add(canvas); + frame.setSize(200, 200); + frame.setVisible(true); + } + + public void doTest() throws Exception { + robot = new ExtendedRobot(); + + robot.mouseMove((int) frame.getLocationOnScreen().getX() + frame.getSize().width / 2, + (int) frame.getLocationOnScreen().getY() + frame.getSize().height / 2); + robot.click(MouseEvent.BUTTON1_MASK); + robot.waitForIdle(); + + assertTrue(focusGained, "FAIL: Canvas gained focus!"); + + for (int i = 0; i < modifierKeys.length; i++) { + for (int j = 0; j < textKeys.length; j++) { + tempPress = false; + robot.keyPress(modifierKeys[i]); + robot.waitForIdle(); + if (! tempPress) { + synchronized (tempLock) { tempLock.wait(waitDelay); } + } + assertTrue(tempPress, "FAIL: keyPressed triggered for i=" + i); + + resetStatus(); + startTest = true; + robot.keyPress(textKeys[j]); + robot.waitForIdle(); + if (! modifierStatus[i] || ! textStatus[j]) { + synchronized (keyLock) { keyLock.wait(waitDelay); } + } + + + assertTrue(modifierStatus[i] && textStatus[j], + "FAIL: KeyEvent not proper!"+ + "Key checked: i=" + i + "; j=" + j+ + "ModifierStatus = " + modifierStatus[i]+ + "TextStatus = " + textStatus[j]); + startTest = false; + robot.keyRelease(textKeys[j]); + robot.waitForIdle(); + robot.keyRelease(modifierKeys[i]); + robot.waitForIdle(); + } + } + + for (int i = 0; i < modifierKeys.length; i++) { + for (int j = i + 1; j < modifierKeys.length; j++) { + for (int k = 0; k < textKeys.length; k++) { + tempPress = false; + robot.keyPress(modifierKeys[i]); + robot.waitForIdle(); + if (! tempPress) { + synchronized (tempLock) { tempLock.wait(waitDelay); } + } + + assertTrue(tempPress, "FAIL: MultiKeyTest: keyPressed triggered for i=" + i); + + tempPress = false; + robot.keyPress(modifierKeys[j]); + robot.waitForIdle(); + if (! tempPress) { + synchronized (tempLock) { tempLock.wait(waitDelay); } + } + assertTrue(tempPress, "FAIL: MultiKeyTest keyPressed triggered for j=" + j); + + resetStatus(); + startTest = true; + robot.keyPress(textKeys[k]); + robot.waitForIdle(); + if (! modifierStatus[i] || ! modifierStatus[j] || ! textStatus[k]) { + synchronized (keyLock) { + keyLock.wait(waitDelay); + } + } + assertTrue(modifierStatus[i] && modifierStatus[j] && textStatus[k], + "FAIL: KeyEvent not proper!"+ + "Key checked: i=" + i + "; j=" + j + "; k=" + k+ + "Modifier1Status = " + modifierStatus[i]+ + "Modifier2Status = " + modifierStatus[j]+ + "TextStatus = " + textStatus[k]); + + startTest = false; + robot.keyRelease(textKeys[k]); + robot.waitForIdle(); + robot.keyRelease(modifierKeys[j]); + robot.waitForIdle(); + robot.keyRelease(modifierKeys[i]); + robot.waitForIdle(); + } + } + } + + frame.dispose(); + } + + private void resetStatus() { + for (int i = 0; i < modifierStatus.length; i++) { + modifierStatus[i] = false; + } + for (int i = 0; i < textStatus.length; i++) { + textStatus[i] = false; + } + } + +}
--- a/test/java/awt/Toolkit/Headless/WrappedToolkitTest/WrappedToolkitTest.sh Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/awt/Toolkit/Headless/WrappedToolkitTest/WrappedToolkitTest.sh Mon Nov 16 13:36:36 2020 +0000 @@ -59,7 +59,7 @@ # Checking for proper OS OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin | CYGWIN* ) + AIX | SunOS | Linux | Darwin | CYGWIN* ) FILESEP="/" ;; @@ -144,7 +144,7 @@ fi ;; - SunOS | Linux ) + AIX | SunOS | Linux ) ${TESTJAVA}/bin/java -Djava.awt.headless=true \ -Dawt.toolkit=sun.awt.X11.XToolkit \ TestWrapped sun.awt.X11.XToolkit
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/awt/Toolkit/LockingKeyStateTest/LockingKeyStateTest.java Mon Nov 16 13:36:36 2020 +0000 @@ -0,0 +1,126 @@ +/* + * 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.*; +import java.awt.event.KeyEvent; + +/* + @test + @summary verify LOCK buttons toogle + @author Yuri.Nesterenko, Dmitriy.Ermashov + @library ../../../../lib/testlibrary + @build ExtendedRobot + @run main LockingKeyStateTest +*/ + +public class LockingKeyStateTest { + + Frame frame; + ExtendedRobot robot; + + // Note that Kana lock you may actually toggle only if you have one. + static int[] lockingKeys = { KeyEvent.VK_CAPS_LOCK, KeyEvent.VK_NUM_LOCK, + KeyEvent.VK_SCROLL_LOCK, KeyEvent.VK_KANA_LOCK }; + boolean[] getSupported = new boolean[lockingKeys.length]; + boolean[] setSupported = new boolean[lockingKeys.length]; + boolean[] state0 = new boolean[lockingKeys.length]; + + Toolkit toolkit = Toolkit.getDefaultToolkit(); + + LockingKeyStateTest() throws Exception { + robot = new ExtendedRobot(); + EventQueue.invokeAndWait( this::createGui ); + } + + void toggleAllTrue(){toggleAll(true);} + void toggleAllFalse(){toggleAll(false);} + void toggleAll(boolean b) { + for(int i = 0; i < lockingKeys.length; i++) { + if(setSupported[i]) { + toolkit.setLockingKeyState(lockingKeys[i], b); + } + } + } + + void checkAllTrue(){checkAll(true);} + void checkAllFalse(){checkAll(false);} + void checkAll(boolean b) { + for(int i = 0; i < lockingKeys.length; i++) { + if(getSupported[i] && setSupported[i]) { + if (!(toolkit.getLockingKeyState(lockingKeys[i]) == b)) + throw new RuntimeException("State of "+KeyEvent.getKeyText(lockingKeys[i])+" is not "+b); + System.out.println("OK, state of "+KeyEvent.getKeyText(lockingKeys[i])+" is "+b); + } + } + } + + void restoreAll() { + for(int i = 0; i < lockingKeys.length; i++) { + if(setSupported[i] && getSupported[i]) { + toolkit.setLockingKeyState(lockingKeys[i], state0[i]); + } + } + } + + public void createGui() { + for(int i = 0; i < lockingKeys.length; i++) { + getSupported[i] = false; + setSupported[i] = false; + try { + state0[i] = toolkit.getLockingKeyState(lockingKeys[i]); + getSupported[i] = true; + toolkit.setLockingKeyState(lockingKeys[i], state0[i]); + setSupported[i] = true; + } catch (UnsupportedOperationException uoe) { + } + System.out.println(" State get/set of "+KeyEvent.getKeyText(lockingKeys[i])+" is supported? "+ + getSupported[i]+", "+setSupported[i]); + } + frame = new Frame("LockingKeyStateTest Title"); + frame.setSize(200,200); + frame.setVisible(true); + } + + void doTest() throws Exception{ + robot.waitForIdle(); + robot.mouseMove(frame.getLocationOnScreen().x + frame.getWidth() / 2, + frame.getLocationOnScreen().y + frame.getHeight() / 2); + robot.click(); + + EventQueue.invokeAndWait( this::toggleAllTrue ); + robot.waitForIdle(2000); + EventQueue.invokeAndWait( this::checkAllTrue ); + EventQueue.invokeAndWait( this::toggleAllFalse ); + robot.waitForIdle(2000); + EventQueue.invokeAndWait( this::checkAllFalse ); + EventQueue.invokeAndWait( this::restoreAll ); + robot.waitForIdle(); + + frame.dispose(); + } + + public static void main(String argv[]) throws Exception { + LockingKeyStateTest af = new LockingKeyStateTest(); + af.doTest(); + } +}
--- a/test/java/awt/dnd/DisposeFrameOnDragCrash/DisposeFrameOnDragTest.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/awt/dnd/DisposeFrameOnDragCrash/DisposeFrameOnDragTest.java Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2016 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 @@ -56,17 +56,24 @@ } }); - Util.waitForIdle(null); + Robot testRobot = null; try { - Point loc = textArea.getLocationOnScreen(); - Util.drag(new Robot(), - new Point((int) loc.x + 3, (int) loc.y + 3), - new Point((int) loc.x + 40, (int) loc.y + 40), - InputEvent.BUTTON1_MASK); - } catch (AWTException ex) { - throw new RuntimeException("Could not initiate a drag operation"); + testRobot = new Robot(); + } catch(AWTException ex) { + throw new RuntimeException("Error while creating Robot"); } - Util.waitForIdle(null); + + Util.waitForIdle(testRobot); + + Point loc = textArea.getLocationOnScreen(); + Util.drag(testRobot, + new Point((int) loc.x + 3, (int) loc.y + 3), + new Point((int) loc.x + 40, (int) loc.y + 40), + InputEvent.BUTTON1_MASK); + + Util.waitForIdle(testRobot); + + testRobot.delay(200); } private static void constructTestUI() {
--- a/test/java/io/File/WinSpecialFiles.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/io/File/WinSpecialFiles.java Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2018, 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 6192331 6348207 + @bug 6192331 6348207 8202076 @summary Check if File.exists()/length() works correctly on Windows special files hiberfil.sys and pagefile.sys */ @@ -45,9 +45,9 @@ if (name.indexOf("pagefile.sys") != -1 || name.indexOf("hiberfil.sys") != -1) { if (dir[i].length() == 0) { - throw new Exception("Size of existing <" + throw new Exception("Size of existing file \"" + dir[i].getPath() - + " is ZERO"); + + "\" is ZERO"); } } }
--- a/test/java/net/URI/Test.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/net/URI/Test.java Mon Nov 16 13:36:36 2020 +0000 @@ -1587,7 +1587,7 @@ // miscellaneous bugs/rfes that don't fit in with the test framework - static void bugs() { + static void bugs() throws URISyntaxException { // 6339649 - include detail message from nested exception try { URI uri = URI.create("http://nowhere.net/should not be permitted"); @@ -1596,6 +1596,12 @@ throw new RuntimeException ("No detail message"); } } + + // 8051853 - getRawSchemeSpecificPart returns null + String rssp = new URI("x/").resolve("..").getRawSchemeSpecificPart(); + if (!"".equals(rssp)) { + throw new RuntimeException("Incorrect RawSchemeSpecificPart: [" + rssp + "], must be an empty string"); + } } public static void main(String[] args) throws Exception {
--- a/test/java/security/cert/PolicyNode/GetPolicyQualifiers.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/security/cert/PolicyNode/GetPolicyQualifiers.java Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2020, 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,9 +30,11 @@ import java.io.File; import java.io.FileInputStream; import java.security.cert.*; +import java.text.DateFormat; import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.Set; public class GetPolicyQualifiers { @@ -52,6 +54,9 @@ PKIXParameters params = new PKIXParameters(trustAnchors); params.setPolicyQualifiersRejected(false); params.setRevocationEnabled(false); + // Certificates expired on Oct 6th, 2020 + params.setDate(DateFormat.getDateInstance(DateFormat.MEDIUM, + Locale.US).parse("July 01, 2020")); List certList = Collections.singletonList(eeCert); CertPath cp = cf.generateCertPath(certList); PKIXCertPathValidatorResult result =
--- a/test/java/text/Format/DateFormat/Bug6530336.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/text/Format/DateFormat/Bug6530336.java Mon Nov 16 13:36:36 2020 +0000 @@ -24,7 +24,7 @@ /* * @test * @bug 6530336 6537997 8008577 - * @run main/othervm -Djava.locale.providers=COMPAT,SPI Bug6530336 + * @run main/othervm -Djava.locale.providers=JRE,SPI Bug6530336 */ import java.text.SimpleDateFormat;
--- a/test/java/text/Format/DateFormat/DateFormatRegression.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/text/Format/DateFormat/DateFormatRegression.java Mon Nov 16 13:36:36 2020 +0000 @@ -32,7 +32,7 @@ * 4134203 4138203 4148168 4151631 4151706 4153860 4162071 4182066 4209272 4210209 * 4213086 4250359 4253490 4266432 4406615 4413980 8008577 * @library /java/text/testlib - * @run main/othervm -Djava.locale.providers=COMPAT,SPI DateFormatRegression + * @run main/othervm -Djava.locale.providers=JRE,SPI DateFormatRegression */ public class DateFormatRegression extends IntlTest {
--- a/test/java/text/Format/DateFormat/DateFormatRoundTripTest.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/text/Format/DateFormat/DateFormatRoundTripTest.java Mon Nov 16 13:36:36 2020 +0000 @@ -26,7 +26,7 @@ * @summary test Date Format (Round Trip) * @bug 8008577 * @library /java/text/testlib - * @run main/othervm -Djava.locale.providers=COMPAT,SPI DateFormatRoundTripTest + * @run main/othervm -Djava.locale.providers=JRE,SPI DateFormatRoundTripTest */ import java.text.*;
--- a/test/java/text/Format/DateFormat/DateFormatTest.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/text/Format/DateFormat/DateFormatTest.java Mon Nov 16 13:36:36 2020 +0000 @@ -26,7 +26,7 @@ * @bug 4052223 4089987 4469904 4326988 4486735 8008577 8045998 8140571 * @summary test DateFormat and SimpleDateFormat. * @library /java/text/testlib - * @run main/othervm -Djava.locale.providers=COMPAT,SPI DateFormatTest + * @run main/othervm -Djava.locale.providers=JRE,SPI DateFormatTest */ import java.util.*;
--- a/test/java/text/Format/DateFormat/IntlTestDateFormat.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/text/Format/DateFormat/IntlTestDateFormat.java Mon Nov 16 13:36:36 2020 +0000 @@ -26,7 +26,7 @@ * @summary test International Date Format * @bug 8008577 * @library /java/text/testlib - * @run main/othervm -Djava.locale.providers=COMPAT,SPI IntlTestDateFormat + * @run main/othervm -Djava.locale.providers=JRE,SPI IntlTestDateFormat * @key randomness */ /*
--- a/test/java/text/Format/DateFormat/IntlTestDateFormatAPI.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/text/Format/DateFormat/IntlTestDateFormatAPI.java Mon Nov 16 13:36:36 2020 +0000 @@ -26,7 +26,7 @@ * @summary test International Date Format API * @bug 8008577 * @library /java/text/testlib - * @run main/othervm -Djava.locale.providers=COMPAT,SPI IntlTestDateFormatAPI + * @run main/othervm -Djava.locale.providers=JRE,SPI IntlTestDateFormatAPI */ /* (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
--- a/test/java/text/Format/DateFormat/IntlTestSimpleDateFormatAPI.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/text/Format/DateFormat/IntlTestSimpleDateFormatAPI.java Mon Nov 16 13:36:36 2020 +0000 @@ -26,7 +26,7 @@ * @summary test International Simple Date Format API * @bug 8008577 * @library /java/text/testlib - * @run main/othervm -Djava.locale.providers=COMPAT,SPI IntlTestSimpleDateFormatAPI + * @run main/othervm -Djava.locale.providers=JRE,SPI IntlTestSimpleDateFormatAPI */ /* (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
--- a/test/java/text/Format/DateFormat/NonGregorianFormatTest.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/text/Format/DateFormat/NonGregorianFormatTest.java Mon Nov 16 13:36:36 2020 +0000 @@ -25,7 +25,7 @@ * @test * @bug 4833268 6253991 8008577 * @summary Test formatting and parsing with non-Gregorian calendars - * @run main/othervm -Djava.locale.providers=COMPAT,SPI NonGregorianFormatTest + * @run main/othervm -Djava.locale.providers=JRE,SPI NonGregorianFormatTest */ import java.util.*;
--- a/test/java/text/Format/DateFormat/TimeZoneNameTest.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/text/Format/DateFormat/TimeZoneNameTest.java Mon Nov 16 13:36:36 2020 +0000 @@ -26,7 +26,7 @@ * @bug 4348864 4112924 4425386 4495052 4836940 4851113 8008577 * @summary test time zone display names in en_US locale * @library /java/text/testlib - * @run main/othervm -Djava.locale.providers=COMPAT,SPI TimeZoneNameTest + * @run main/othervm -Djava.locale.providers=JRE,SPI TimeZoneNameTest */ import java.util.*;
--- a/test/java/text/Format/MessageFormat/LargeMessageFormat.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/text/Format/MessageFormat/LargeMessageFormat.java Mon Nov 16 13:36:36 2020 +0000 @@ -25,7 +25,7 @@ * @test * @bug 4112090 8008577 * @summary verify that MessageFormat can handle large numbers of arguments - * @run main/othervm -Djava.locale.providers=COMPAT,SPI LargeMessageFormat + * @run main/othervm -Djava.locale.providers=JRE,SPI LargeMessageFormat */ import java.text.MessageFormat;
--- a/test/java/text/Format/NumberFormat/BigDecimalFormat.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/text/Format/NumberFormat/BigDecimalFormat.java Mon Nov 16 13:36:36 2020 +0000 @@ -26,7 +26,7 @@ * @bug 4018937 8008577 * @summary Confirm that methods which are newly added to support BigDecimal and BigInteger work as expected. * @library /java/text/testlib - * @run main/othervm -Djava.locale.providers=COMPAT,SPI BigDecimalFormat + * @run main/othervm -Djava.locale.providers=JRE,SPI BigDecimalFormat */ import java.math.BigDecimal;
--- a/test/java/text/Format/NumberFormat/BigDecimalParse.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/text/Format/NumberFormat/BigDecimalParse.java Mon Nov 16 13:36:36 2020 +0000 @@ -26,7 +26,7 @@ * @bug 4018937 8008577 * @summary Confirm that methods which are newly added to support BigDecimal and BigInteger work as expected. * @library /java/text/testlib - * @run main/othervm -Djava.locale.providers=COMPAT,SPI BigDecimalParse + * @run main/othervm -Djava.locale.providers=JRE,SPI BigDecimalParse */ import java.math.BigDecimal;
--- a/test/java/text/Format/NumberFormat/Bug4838107.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/text/Format/NumberFormat/Bug4838107.java Mon Nov 16 13:36:36 2020 +0000 @@ -26,7 +26,7 @@ * @bug 4838107 8008577 * @summary Confirm that DecimalFormat can format a number with negative exponent number correctly. * @library /java/text/testlib - * @run main/othervm -Djava.locale.providers=COMPAT,SPI Bug4838107 + * @run main/othervm -Djava.locale.providers=JRE,SPI Bug4838107 */ import java.math.*;
--- a/test/java/text/Format/NumberFormat/NumberRegression.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/text/Format/NumberFormat/NumberRegression.java Mon Nov 16 13:36:36 2020 +0000 @@ -35,7 +35,7 @@ * @build IntlTest HexDumpReader * @modules java.base/sun.util.resources * @compile -XDignore.symbol.file NumberRegression.java - * @run main/othervm -Djava.locale.providers=COMPAT,SPI NumberRegression + * @run main/othervm -Djava.locale.providers=JRE,SPI NumberRegression */ /*
--- a/test/java/text/Format/NumberFormat/NumberTest.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/text/Format/NumberFormat/NumberTest.java Mon Nov 16 13:36:36 2020 +0000 @@ -28,7 +28,7 @@ * @library /java/text/testlib * @modules java.base/sun.util.resources * @compile -XDignore.symbol.file NumberTest.java - * @run main/othervm -Djava.locale.providers=COMPAT,SPI NumberTest + * @run main/othervm -Djava.locale.providers=JRE,SPI NumberTest */ import java.util.*;
--- a/test/java/util/Calendar/JapanEraNameCompatTest.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/util/Calendar/JapanEraNameCompatTest.java Mon Nov 16 13:36:36 2020 +0000 @@ -24,9 +24,9 @@ /* * @test * @bug 8218781 - * @summary Test the localized names of Japanese era Reiwa from COMPAT provider. + * @summary Test the localized names of Japanese era Reiwa from JRE provider. * @modules jdk.localedata - * @run testng/othervm -Djava.locale.providers=COMPAT JapanEraNameCompatTest + * @run testng/othervm -Djava.locale.providers=JRE JapanEraNameCompatTest */ import static java.util.Calendar.*;
--- a/test/java/util/TimeZone/HongKong.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/util/TimeZone/HongKong.java Mon Nov 16 13:36:36 2020 +0000 @@ -25,7 +25,7 @@ * @test * @bug 4487276 8008577 * @summary Verify that Hong Kong locale uses traditional Chinese names. - * @run main/othervm -Djava.locale.providers=COMPAT,SPI HongKong + * @run main/othervm -Djava.locale.providers=JRE,SPI HongKong */ import java.util.Locale;
--- a/test/java/util/TimeZone/TimeZoneRegression.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/java/util/TimeZone/TimeZoneRegression.java Mon Nov 16 13:36:36 2020 +0000 @@ -27,7 +27,7 @@ * 4154525 4154537 4154542 4154650 4159922 4162593 4173604 4176686 4184229 4208960 * 4966229 6433179 6851214 8007520 8008577 * @library /java/text/testlib - * @run main/othervm -Djava.locale.providers=COMPAT,SPI TimeZoneRegression + * @run main/othervm -Djava.locale.providers=JRE,SPI TimeZoneRegression */ import java.util.*;
--- a/test/javax/imageio/SetOutput.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/javax/imageio/SetOutput.java Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2020, 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 java.io.File; import java.io.IOException; +import java.nio.file.Files; import javax.imageio.ImageIO; import javax.imageio.ImageWriter; @@ -42,13 +43,10 @@ public static void main(String[] args) throws IOException { ImageWriter iw = new PNGImageWriter(null); File f = File.createTempFile("imageio", "tmp"); - ImageOutputStream ios = ImageIO.createImageOutputStream(f); - try { + try (ImageOutputStream ios = ImageIO.createImageOutputStream(f)) { iw.setOutput(ios); - } catch (NullPointerException npe) { - f.delete(); - throw new RuntimeException("Got NullPointerException!"); + } finally { + Files.delete(f.toPath()); } - f.delete(); } }
--- a/test/javax/sound/midi/Devices/InitializationHang.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/javax/sound/midi/Devices/InitializationHang.java Mon Nov 16 13:36:36 2020 +0000 @@ -28,6 +28,7 @@ /** * @test * @bug 8068412 + * @key headful * @author Sergey Bylokhov */ public final class InitializationHang {
--- a/test/javax/sound/sampled/DirectAudio/bug6400879.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/javax/sound/sampled/DirectAudio/bug6400879.java Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2016, 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,12 +21,13 @@ * questions. */ -/* @test - @bug 6400879 - @bug 7100140 - @summary Tests that Start/Stop sequence doesn't hang - @author Alexey Menkov - @run main bug6400879 +/* + * @test + * @bug 6400879 7100140 + * @summary Tests that Start/Stop sequence doesn't hang + * @author Alexey Menkov + * @run main bug6400879 + * @key intermittent */ import javax.sound.sampled.*;
--- a/test/javax/swing/JFileChooser/6738668/bug6738668.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/javax/swing/JFileChooser/6738668/bug6738668.java Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009,2017, 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,21 +22,25 @@ */ /* @test - @bug 6738668 + @bug 6738668 6962725 @summary JFileChooser cannot be created under SecurityManager @author Pavel Porvatov @run main/othervm/policy=security.policy bug6738668 */ -import javax.swing.*; import java.io.File; +import javax.swing.JFileChooser; +import javax.swing.UIManager; public class bug6738668 { public static void main(String[] args) throws Exception { for (UIManager.LookAndFeelInfo lookAndFeelInfo : UIManager.getInstalledLookAndFeels()) { UIManager.setLookAndFeel(lookAndFeelInfo.getClassName()); - new JFileChooser(new File("c:/temp")); + String tmpdir = System.getProperty("java.io.tmpdir"); + System.out.println("tmp dir " + tmpdir); + new JFileChooser(new File(tmpdir+"/temp")); + System.out.println("Test passed for LookAndFeel " + lookAndFeelInfo.getClassName()); }
--- a/test/javax/swing/JFileChooser/6738668/security.policy Thu Nov 05 05:11:12 2020 +0000 +++ b/test/javax/swing/JFileChooser/6738668/security.policy Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ grant { - permission java.io.FilePermission "C:\\temp\\*", "read"; - permission java.io.FilePermission "C:\\temp", "read"; + permission java.io.FilePermission "${java.io.tmpdir}${/}temp${/}*", "read"; + permission java.io.FilePermission "${java.io.tmpdir}${/}temp", "read"; permission java.util.PropertyPermission "*", "read"; };
--- a/test/javax/swing/plaf/nimbus/8057791/bug8057791.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/javax/swing/plaf/nimbus/8057791/bug8057791.java Mon Nov 16 13:36:36 2020 +0000 @@ -21,20 +21,20 @@ * questions. */ -/* @test - @bug 8057791 + /* @test + @bug 8057791 8160438 @summary Selection in JList is drawn with wrong colors in Nimbus L&F - @author Anton Litvinov @run main bug8057791 */ - import java.awt.Color; +import java.awt.Font; import java.awt.Graphics; +import java.awt.Point; import java.awt.Rectangle; +import java.awt.Robot; import java.awt.image.BufferedImage; -import java.lang.reflect.InvocationTargetException; -import java.util.HashSet; import javax.swing.DefaultListModel; +import javax.swing.JFrame; import javax.swing.JList; import javax.swing.SwingUtilities; import javax.swing.UIManager; @@ -42,59 +42,148 @@ import javax.swing.plaf.nimbus.NimbusLookAndFeel; public class bug8057791 { - public static void main(String[] args) { + + private static JFrame frame; + private static JList<String> list; + private static DefaultListModel<String> model; + private static Robot robot; + private static final int SELECTED_INDEX = 0; + private static volatile String errorString = ""; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + robot.waitForIdle(); + runSteps(); + if (!errorString.isEmpty()) { + throw new RuntimeException("Error Log:\n" + errorString); + } + } + + private static void runSteps() throws Exception { + if (tryNimbusLookAndFeel()) { + createUI(); + robot.waitForIdle(); + runColorTestCase(); + robot.waitForIdle(); + cleanUp(); + } + + } + + private static boolean tryNimbusLookAndFeel() + throws Exception { try { UIManager.setLookAndFeel(new NimbusLookAndFeel()); - - SwingUtilities.invokeAndWait(new Runnable() { - @Override - public void run() { - final int listWidth = 50; - final int listHeight = 50; - final int selCellIndex = 0; + } catch (UnsupportedLookAndFeelException e) { + errorString += e.getMessage(); + return false; + } + return true; + } - JList<String> list = new JList<String>(); - list.setSize(listWidth, listHeight); - DefaultListModel<String> listModel = new DefaultListModel<String>(); - listModel.add(selCellIndex, "E"); - list.setModel(listModel); - list.setSelectedIndex(selCellIndex); - - BufferedImage img = new BufferedImage(listWidth, listHeight, - BufferedImage.TYPE_INT_ARGB); - Graphics g = img.getGraphics(); - list.paint(g); - g.dispose(); + private static void createUI() + throws Exception { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + frame = new JFrame(); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + list = new JList<>(); + model = new DefaultListModel<>(); + model.add(0, "@@"); + Font font = list.getFont(); + list.setFont( + new Font(font.getFontName(), + Font.BOLD, + (int) (font.getSize2D() * 2))); + list.setModel(model); + list.setSelectedIndex(SELECTED_INDEX); + frame.add(list); + frame.pack(); + frame.setLocationRelativeTo(null); + frame.setVisible(true); + } + }); + } - Rectangle cellRect = list.getCellBounds(selCellIndex, selCellIndex); - HashSet<Color> cellColors = new HashSet<Color>(); - int uniqueColorIndex = 0; - for (int x = cellRect.x; x < (cellRect.x + cellRect.width); x++) { - for (int y = cellRect.y; y < (cellRect.y + cellRect.height); y++) { - Color cellColor = new Color(img.getRGB(x, y), true); - if (cellColors.add(cellColor)) { - System.err.println(String.format("Cell color #%d: %s", - uniqueColorIndex++, cellColor)); - } - } - } + private static void runColorTestCase() throws Exception { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + Rectangle cellBounds = list.getCellBounds(SELECTED_INDEX, SELECTED_INDEX); + cellBounds.x += list.getLocationOnScreen().x; + cellBounds.y += list.getLocationOnScreen().y; + //positive test cases + Color foregroundColor = list.getSelectionForeground(); + Color backgroundColor = list.getSelectionBackground(); + checkColor(foregroundColor, cellBounds); + checkColor(backgroundColor, cellBounds); + //negative test cases + Color changedForegroundColor = foregroundColor.darker(); + Color changedBackgroundColor = backgroundColor.brighter(); + checkNotColor(changedForegroundColor, cellBounds); + checkNotColor(changedBackgroundColor, cellBounds); + } + }); + } + + private static void checkColor(Color colorCheck, Rectangle bounds) { + if (!findColor(colorCheck, bounds)) { + String error = "[ERROR][" + colorCheck.toString() + + "] Not found in selected cell"; + errorString += error; + } + } - Color selForegroundColor = list.getSelectionForeground(); - Color selBackgroundColor = list.getSelectionBackground(); - if (!cellColors.contains(new Color(selForegroundColor.getRGB(), true))) { - throw new RuntimeException(String.format( - "Selected cell is drawn without selection foreground color '%s'.", - selForegroundColor)); - } - if (!cellColors.contains(new Color(selBackgroundColor.getRGB(), true))) { - throw new RuntimeException(String.format( - "Selected cell is drawn without selection background color '%s'.", - selBackgroundColor)); + private static void checkNotColor(Color colorCheck, Rectangle bounds) { + if (findColor(colorCheck, bounds)) { + String error = "[ERROR][" + colorCheck.toString() + + "] is found in selected cell. " + + "Not supposed to be found in negative test case"; + errorString += error; + } + } + + private static boolean findColor(Color colorCheck, Rectangle bounds) { + BufferedImage img = new BufferedImage(bounds.width, + bounds.height, + BufferedImage.TYPE_INT_ARGB); + Graphics g = img.getGraphics(); + list.paint(g); + g.dispose(); + checkLoops: + for (int x = 0; x < bounds.width; x++) { + for (int y = 0; y < bounds.height; y++) { + Point relativePointCheck = new Point(bounds.x + x, bounds.y + y); + robot.mouseMove(relativePointCheck.x, relativePointCheck.y); + Color detectedColor = robot.getPixelColor(relativePointCheck.x, + relativePointCheck.y); + if (detectedColor.equals(colorCheck)) { + return true; + } + if (isMac()) { + //One more chance for Mac due to non-Generic display setting + detectedColor = new Color(img.getRGB(x, y), true); + if (detectedColor.equals(colorCheck)) { + return true; } } - }); - } catch (UnsupportedLookAndFeelException | InterruptedException | InvocationTargetException e) { - throw new RuntimeException(e); + } } + return false; + } + + private static boolean isMac() { + String osName = System.getProperty("os.name"); + return osName.contains("Mac"); + } + + private static void cleanUp() throws Exception { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + frame.dispose(); + } + }); } }
--- a/test/jdk/internal/platform/docker/Dockerfile-BasicTest Thu Nov 05 05:11:12 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -FROM oraclelinux:7.6 -MAINTAINER mikhailo.seledtsov@oracle.com - -COPY /jdk /jdk - -ENV JAVA_HOME=/jdk - -CMD ["/bin/bash"]
--- a/test/jdk/internal/platform/docker/Dockerfile-BasicTest-aarch64 Thu Nov 05 05:11:12 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -# Use generic ubuntu Linux on AArch64 -FROM aarch64/ubuntu - -COPY /jdk /jdk - -ENV JAVA_HOME=/jdk - -CMD ["/bin/bash"]
--- a/test/jdk/internal/platform/docker/Dockerfile-BasicTest-ppc64le Thu Nov 05 05:11:12 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,10 +0,0 @@ -# test on x86_64 uses Oracle Linux but we do not have this for ppc64le -# so use some other Linux where OpenJDK works -# FROM oraclelinux:7.2 -FROM ppc64le/ubuntu - -COPY /jdk /jdk - -ENV JAVA_HOME=/jdk - -CMD ["/bin/bash"]
--- a/test/jdk/internal/platform/docker/Dockerfile-BasicTest-s390x Thu Nov 05 05:11:12 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -FROM s390x/ubuntu - -COPY /jdk /jdk - -ENV JAVA_HOME=/jdk - -CMD ["/bin/bash"]
--- a/test/jdk/internal/platform/docker/TestSystemMetrics.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/jdk/internal/platform/docker/TestSystemMetrics.java Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2019, 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,7 @@ DockerRunOptions opts = new DockerRunOptions(imageName, "/jdk/bin/java", "jdk.test.lib.containers.cgroup.MetricsTester"); opts.addDockerOpts("--volume", Utils.TEST_CLASSES + ":/test-classes/"); + opts.addDockerOpts("--memory=256m"); opts.addJavaOpts("-cp", "/test-classes/"); DockerTestUtils.dockerRunJava(opts).shouldHaveExitValue(0).shouldContain("TEST PASSED!!!"); } finally {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/jdk/jfr/javaagent/Test8252904.java Mon Nov 16 13:36:36 2020 +0000 @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, Azul Systems, 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 8252904 + * @key jfr + * @summary Tests that JFR event classes can be transformed via JVMTI + * + * @library /lib/testlibrary /lib / + * @modules java.instrument + * + * @build jdk.jfr.javaagent.Test8252904 + * + * @run driver jdk.test.lib.util.JavaAgentBuilder + * jdk.jfr.javaagent.Test8252904 Test8252904Agent.jar + * + * @run main/othervm -javaagent:Test8252904Agent.jar jdk.jfr.javaagent.Test8252904 + */ + +package jdk.jfr.javaagent; + +import java.lang.instrument.ClassFileTransformer; +import java.lang.instrument.Instrumentation; +import java.lang.instrument.IllegalClassFormatException; +import java.security.ProtectionDomain; +import jdk.jfr.*; + +public class Test8252904 { + private Instrumentation instr; + + private static class Transformer implements ClassFileTransformer { + public byte[] transform(ClassLoader loader, String fullyQualifiedClassName, Class<?> classBeingRedefined, + ProtectionDomain protectionDomain, byte[] classBytes) throws IllegalClassFormatException { + if ("jdk/jfr/Event".equals(fullyQualifiedClassName)) + System.out.println("transforming"); + return "jdk/jfr/Event".equals(fullyQualifiedClassName) ? classBytes : null; + } + } + + // Called when agent is loaded from command line + public static void agentmain(String agentArgs, Instrumentation inst) throws Exception { + inst.addTransformer(new Transformer()); + } + + // Called when agent is dynamically loaded + public static void premain(String agentArgs, Instrumentation inst) throws Exception { + inst.addTransformer(new Transformer()); + } + + + public static void main(String... arg) throws Exception { + Configuration c = Configuration.getConfiguration("default"); + Recording r = new Recording(c); + r.setToDisk(false); + r.start(); + System.gc(); + r.stop(); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/jdk/jfr/jcmd/TestJcmdDumpWithFileName.java Mon Nov 16 13:36:36 2020 +0000 @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2019, 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 jdk.jfr.jcmd; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.stream.Stream; + +import jdk.jfr.Recording; +import jdk.test.lib.Asserts; +import jdk.test.lib.process.ProcessTools; + +/** + * @test + * @bug 8220657 + * @key jfr + * @library /lib / + * @run main/othervm jdk.jfr.jcmd.TestJcmdDumpWithFileName + */ +public class TestJcmdDumpWithFileName { + + public static void main(String[] args) throws Exception { + testDumpAll(); + testDumpNamed(); + testDumpNamedWithFilename(); + } + + private static void testDumpAll() throws Exception { + Path p = Paths.get("testDumpAll.jfr").toAbsolutePath(); + try (Recording r = new Recording()) { + r.setName("testDumpAll"); + r.setDestination(p); + r.start(); + + JcmdHelper.jcmd("JFR.dump"); + + Asserts.assertFalse(namedFile(p), "Unexpected file: " + p.toString()); + Asserts.assertTrue(generatedFile(), "Expected generated file"); + } + cleanup(); + } + + private static void testDumpNamed() throws Exception { + Path p = Paths.get("testDumpNamed.jfr").toAbsolutePath(); + try (Recording r = new Recording()) { + r.setName("testDumpNamed"); + r.setDestination(p); + r.start(); + + JcmdHelper.jcmd("JFR.dump", "name=testDumpNamed"); + + Asserts.assertTrue(namedFile(p), "Expected file: " + p.toString()); + Asserts.assertFalse(generatedFile(), "Unexpected generated file"); + } + cleanup(); + } + + private static void testDumpNamedWithFilename() throws Exception { + Path p = Paths.get("testDumpNamedWithFilename.jfr").toAbsolutePath(); + Path override = Paths.get("override.jfr").toAbsolutePath(); + try (Recording r = new Recording()) { + r.setName("testDumpNamedWithFilename"); + r.setDestination(p); + r.start(); + + JcmdHelper.jcmd("JFR.dump", "name=testDumpNamedWithFilename", "filename=" + override.toString()); + + Asserts.assertFalse(namedFile(p), "Unexpected file: " + p.toString()); + Asserts.assertTrue(namedFile(override), "Expected file: " + override.toString()); + Asserts.assertFalse(generatedFile(), "Unexpected generated file"); + } + cleanup(); + } + + private static boolean namedFile(Path dumpFile) throws IOException { + return Files.exists(dumpFile) && (Files.size(dumpFile) > 0); + } + + private static boolean generatedFile() throws Exception { + long pid = ProcessTools.getProcessId(); + try (Stream<Path> stream = Files.find(Paths.get("."), 1, (p, a) -> p.toString() + .matches("^.*hotspot-pid-" + pid + "-[0-9_]+\\.jfr$") && (a.size() > 0L))) { + return stream.findAny() + .isPresent(); + } + } + + private static void cleanup() throws IOException { + try (Stream<Path> stream = Files.find(Paths.get("."), 1, (p, a) -> p.toString().endsWith(".jfr"))) { + stream.forEach(p -> p.toFile().delete()); + } + } + +}
--- a/test/jdk/jfr/jvm/TestDumpOnCrash.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/jdk/jfr/jvm/TestDumpOnCrash.java Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2019, 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,6 +24,7 @@ */ package jdk.jfr.jvm; +import java.io.IOException; import java.lang.reflect.Field; import java.nio.file.Files; import java.nio.file.Path; @@ -54,7 +55,7 @@ private static final CharSequence LOG_FILE_EXTENSION = ".log"; private static final CharSequence JFR_FILE_EXTENSION = ".jfr"; - static class Crasher { + static class CrasherIllegalAccess { public static void main(String[] args) { try { Field theUnsafeRefLocation = Unsafe.class.getDeclaredField("theUnsafe"); @@ -67,44 +68,70 @@ } } - public static void main(String[] args) throws Exception { - processOutput(runProcess()); + static class CrasherHalt { + public static void main(String[] args) { + System.out.println("Running Runtime.getRuntime.halt"); + Runtime.getRuntime().halt(17); + } + } + + static class CrasherSig { + public static void main(String[] args) throws Exception { + String signalName = args[0]; + System.out.println("Sending SIG" + signalName + " to process " + ProcessTools.getProcessId()); + Runtime.getRuntime().exec("kill -" + signalName + " " + ProcessTools.getProcessId()).waitFor(); + } } - private static OutputAnalyzer runProcess() throws Exception { - return new OutputAnalyzer( - ProcessTools.createJavaProcessBuilder(true, + public static void main(String[] args) throws Exception { + verify(runProcess(CrasherIllegalAccess.class.getName(), "")); + verify(runProcess(CrasherHalt.class.getName(), "")); + + // Verification is excluded for the test case below until 8219680 is fixed + long pid = runProcess(CrasherSig.class.getName(), "FPE"); + // @ignore 8219680 + // verify(pid); + } + + private static long runProcess(String crasher, String signal) throws Exception { + System.out.println("Test case for crasher " + crasher); + Process p = ProcessTools.createJavaProcessBuilder(true, "-Xmx64m", - "-Xint", "-XX:-TransmitErrorReport", "-XX:-CreateMinidumpOnCrash", /*"--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED",*/ - "-XX:StartFlightRecording=dumponexit=true", - Crasher.class.getName()).start()); + "-XX:StartFlightRecording", + crasher, + signal) + .start(); + + OutputAnalyzer output = new OutputAnalyzer(p); + System.out.println("========== Crasher process output:"); + System.out.println(output.getOutput()); + System.out.println("=================================="); + + return getPid(output); } - private static void processOutput(OutputAnalyzer output) throws Exception { - //output.shouldContain("CreateCoredumpOnCrash turned off, no core file dumped"); + private static void verify(long pid) throws IOException { + String fileName = "hs_err_pid" + pid + ".jfr"; + Path file = Paths.get(fileName).toAbsolutePath().normalize(); - final Path jfrEmergencyFilePath = getHsErrJfrPath(output); - Asserts.assertTrue(Files.exists(jfrEmergencyFilePath), "No emergency jfr recording file " + jfrEmergencyFilePath + " exists"); - Asserts.assertNotEquals(Files.size(jfrEmergencyFilePath), 0L, "File length 0. Should at least be some bytes"); - System.out.printf("File size=%d%n", Files.size(jfrEmergencyFilePath)); + Asserts.assertTrue(Files.exists(file), "No emergency jfr recording file " + file + " exists"); + Asserts.assertNotEquals(Files.size(file), 0L, "File length 0. Should at least be some bytes"); + System.out.printf("File size=%d%n", Files.size(file)); - List<RecordedEvent> events = RecordingFile.readAllEvents(jfrEmergencyFilePath); + List<RecordedEvent> events = RecordingFile.readAllEvents(file); Asserts.assertFalse(events.isEmpty(), "No event found"); System.out.printf("Found event %s%n", events.get(0).getEventType().getName()); } - private static Path getHsErrJfrPath(OutputAnalyzer output) throws Exception { - // extract to find hs-err_pid log file location - final String hs_err_pid_log_file = output.firstMatch("# *(\\S*hs_err_pid\\d+\\.log)", 1); - if (hs_err_pid_log_file == null) { - throw new RuntimeException("Did not find hs_err_pid.log file in output.\n"); + private static long getPid(OutputAnalyzer output) { + final String pid = output.firstMatch("Use jcmd (\\d+) JFR.dump", 1); + if (pid == null) { + throw new RuntimeException("Did not find pid in output.\n"); } - // the dumped out jfr file should have the same name and location but with a .jfr extension - final String hs_err_pid_jfr_file = hs_err_pid_log_file.replace(LOG_FILE_EXTENSION, JFR_FILE_EXTENSION); - return Paths.get(hs_err_pid_jfr_file); + return Long.parseLong(pid); } }
--- a/test/lib/jdk/test/lib/containers/cgroup/MetricsTester.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/lib/jdk/test/lib/containers/cgroup/MetricsTester.java Mon Nov 16 13:36:36 2020 +0000 @@ -560,7 +560,7 @@ long memoryMaxUsage = metrics.getMemoryMaxUsage(); long memoryUsage = metrics.getMemoryUsage(); - long[] ll = new long[64*1024*1024]; // 64M + byte[] bb = new byte[64*1024*1024]; // 64M long newMemoryMaxUsage = metrics.getMemoryMaxUsage(); long newMemoryUsage = metrics.getMemoryUsage();
--- a/test/lib/jdk/test/lib/containers/docker/DockerTestUtils.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/lib/jdk/test/lib/containers/docker/DockerTestUtils.java Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2019, 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,6 +25,7 @@ import java.io.File; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.FileVisitResult; import java.nio.file.Path; @@ -35,7 +36,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import jdk.test.lib.Platform; import jdk.test.lib.Utils; import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.process.ProcessTools; @@ -126,11 +126,6 @@ if (Files.exists(buildDir)) { throw new RuntimeException("The docker build directory already exists: " + buildDir); } - // check for the existance of a platform specific docker file as well - String platformSpecificDockerfile = dockerfile + "-" + Platform.getOsArch(); - if (Files.exists(Paths.get(Utils.TEST_SRC, platformSpecificDockerfile))) { - dockerfile = platformSpecificDockerfile; - } Path jdkSrcDir = Paths.get(Utils.TEST_JDK); Path jdkDstDir = buildDir.resolve("jdk"); @@ -158,8 +153,9 @@ public static void buildDockerImage(String imageName, Path dockerfile, Path buildDir) throws Exception { - // Copy docker file to the build dir - Files.copy(dockerfile, buildDir.resolve("Dockerfile")); + generateDockerFile(buildDir.resolve("Dockerfile"), + DockerfileConfig.getBaseImageName(), + DockerfileConfig.getBaseImageVersion()); // Build the docker execute("docker", "build", "--no-cache", "--tag", imageName, buildDir.toString()) @@ -250,6 +246,18 @@ } + private static void generateDockerFile(Path dockerfile, String baseImage, + String baseImageVersion) throws Exception { + String template = + "FROM %s:%s\n" + + "COPY /jdk /jdk\n" + + "ENV JAVA_HOME=/jdk\n" + + "CMD [\"/bin/bash\"]\n"; + String dockerFileStr = String.format(template, baseImage, baseImageVersion); + Files.write(dockerfile, dockerFileStr.getBytes(StandardCharsets.UTF_8)); + } + + private static class CopyFileVisitor extends SimpleFileVisitor<Path> { private final Path src; private final Path dst;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/lib/jdk/test/lib/containers/docker/DockerfileConfig.java Mon Nov 16 13:36:36 2020 +0000 @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2019, 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 jdk.test.lib.containers.docker; + +import jdk.test.lib.Platform; + +// Use the following properties to specify docker base image at test execution time: +// Image name: jdk.test.docker.image.name +// Image version: jdk.test.docker.image.version +// Usage: +// jtreg -Djdk.test.docker.image.name=<BASE_IMAGE_NAME> -Djdk.test.docker.image.version=<BASE_IMAGE_VERSION> test/hotspot/jtreg/runtime/containers/docker/ +// E.g.: +// jtreg -Djdk.test.docker.image.name=ubuntu -Djdk.test.docker.image.version=latest test/hotspot/jtreg/runtime/containers/docker/ +// Using make: +// make test TEST="test/hotspot/jtreg/runtime/containers/docker" JTREG="JAVA_OPTIONS=-Djdk.test.docker.image.name=ubuntu -Djdk.test.docker.image.version=latest" +// Note: base image version should not be an empty string. Use "latest" to get the latest version. + +public class DockerfileConfig { + static String getBaseImageName() { + String name = System.getProperty("jdk.test.docker.image.name"); + if (name != null) { + System.out.println("DockerfileConfig: using custom image name: " + name); + return name; + } + + switch (Platform.getOsArch()) { + case "aarch64": + return "aarch64/ubuntu"; + case "ppc64le": + return "ppc64le/ubuntu"; + case "s390x": + return "s390x/ubuntu"; + default: + return "oraclelinux"; + } + } + + static String getBaseImageVersion() { + String version = System.getProperty("jdk.test.docker.image.version"); + if (version != null) { + System.out.println("DockerfileConfig: using custom image version: " + version); + return version; + } + + switch (Platform.getOsArch()) { + case "aarch64": + case "ppc64le": + case "s390x": + return "latest"; + default: + return "7.6"; + } + } +}
--- a/test/security/infra/java/security/cert/CertPathValidator/certification/GlobalSignR6CA.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/security/infra/java/security/cert/CertPathValidator/certification/GlobalSignR6CA.java Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2020, 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 8216577 + * @bug 8216577 8249176 * @summary Interoperability tests with GlobalSign R6 CA * @build ValidatePathWithParams * @run main/othervm -Djava.security.debug=certpath GlobalSignR6CA OCSP @@ -42,139 +42,150 @@ */ public class GlobalSignR6CA { - // Owner: CN=GlobalSign R6 Admin CA - SHA256 - G3, O=GlobalSign nv-sa, C=BE + // Owner: CN=GlobalSign Atlas R6 EV TLS CA 2020, O=GlobalSign nv-sa, C=BE // Issuer: CN=GlobalSign, O=GlobalSign, OU=GlobalSign Root CA - R6 - // Serial number: 48a402ddb5defd50accfc0fcf13f - // Valid from: Tue Sep 20 17:00:00 PDT 2016 until: Mon Sep 20 17:00:00 PDT 2021 + // Serial number: 7803182afbecd89eb19309bb4a25bdaa + // Valid from: Mon Jul 27 17:00:00 PDT 2020 until: Sat Jul 27 17:00:00 PDT 2030 private static final String INT = "-----BEGIN CERTIFICATE-----\n" + - "MIIFmjCCA4KgAwIBAgIOSKQC3bXe/VCsz8D88T8wDQYJKoZIhvcNAQELBQAwTDEg\n" + - "MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh\n" + - "bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTYwOTIxMDAwMDAwWhcNMjEw\n" + - "OTIxMDAwMDAwWjBXMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBu\n" + - "di1zYTEtMCsGA1UEAxMkR2xvYmFsU2lnbiBSNiBBZG1pbiBDQSAtIFNIQTI1NiAt\n" + - "IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmyyfJA4reymawDG1\n" + - "FNDCSFBqst/+Jih2Zg1ThovSfkxVWcviBhIZfu0t/Hv9hmolN2dxPibKCHhjyfMp\n" + - "WaGj+S8VPPaR3xoeOvHtuf/2uOyBZa/3mgiWWRF50fLy0fzyWNJL9lbTH459oUci\n" + - "QN2H0nFEuD1tGGzFdjtXCRVjWy9dZW8Vv2831buzuPLTtOPSKhqOiigpXFTo6SL9\n" + - "n/NHQ4HI7WV+DMB7yOPEERqQzfi28v1B2j4GOT4wqXncbw5uFZdYobBfRNv3VNdk\n" + - "p/2Frtm15ePBIAAb4o28du+orJUuVVpxreeEyVBGJuaP0RWksjSnqkSbPm9MEY0k\n" + - "dS7tgwIDAQABo4IBbTCCAWkwDgYDVR0PAQH/BAQDAgEGMCcGA1UdJQQgMB4GCCsG\n" + - "AQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwkwEgYDVR0TAQH/BAgwBgEB/wIBADAd\n" + - "BgNVHQ4EFgQUgUlc6QW/DIigOJayXUEDWun/14cwHwYDVR0jBBgwFoAUrmwFo5MT\n" + - "4qLn4tcc1sfwf8hnU6AwPgYIKwYBBQUHAQEEMjAwMC4GCCsGAQUFBzABhiJodHRw\n" + - "Oi8vb2NzcDIuZ2xvYmFsc2lnbi5jb20vcm9vdHI2MDYGA1UdHwQvMC0wK6ApoCeG\n" + - "JWh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vcm9vdC1yNi5jcmwwYgYDVR0gBFsw\n" + - "WTAHBgVngQwBATALBgkrBgEEAaAyAQEwQQYJKwYBBAGgMgFfMDQwMgYIKwYBBQUH\n" + - "AgEWJmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMA0GCSqG\n" + - "SIb3DQEBCwUAA4ICAQBovPHk0rWZ5tGQ3NiYORqZNfSh2KH0RxweRE+ZTpnGOZjE\n" + - "vRQYLYm/vf2q+v2IcESmpVCjq1eN0k75wc/4475Y9RH6xK7ai1+O8HHDgj8GK4iZ\n" + - "0ILbKtJQ2/ih19TMO7M3Y/tZByLPcdy8cuDMoCWoQJqUFtM8l784S5lEjefrcwkZ\n" + - "uNOdTrZbsqXY71Xfa61DNuW3lIt/w34myrKG0xRyGicI9P9VpcWYdWCKpwVe10MP\n" + - "d4WQ/lclJZLrLljmn76bc+q/L2Sw+tpadsD2qP3l05FhRqcF5iI9lIw77KIU15Jt\n" + - "QysmI7xTjByjny/OiIYP/7PKQjh+KEe/17GOg0AamdI9dbaOHRcyHFht01ymaphf\n" + - "kU3hjWb2bdtVLuDsIKfGN/QDXSmv0ThKsgkj3OOiLUpllApr5SU2tY40rpZ210iD\n" + - "/jA18LYwBmR64t3e7ud/tDz4c/YLY8p6vPLdASbbwyptj93n0c0HXpjdcrx/XOQa\n" + - "ogw6JzJ2v3Kok94frBKKdoxg4SnMvZoakM1SbY6Q3XlC24qVnVuWJ142rVkCFixZ\n" + - "Sb5ZEB7fxk/2YfaWkSW3uejwh2qN7qXji0S1ALNbASJATYqMgdJVz+25yOBfxFN6\n" + - "KzNbvmVmEM/hnKaQxePhwForQjDFaep1RO5Yg4wnIcLRC3atKgkIIA6YDNUcog==\n" + + "MIIGwDCCBKigAwIBAgIQeAMYKvvs2J6xkwm7SiW9qjANBgkqhkiG9w0BAQwFADBM\n" + + "MSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjETMBEGA1UEChMKR2xv\n" + + "YmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjAeFw0yMDA3MjgwMDAwMDBaFw0z\n" + + "MDA3MjgwMDAwMDBaMFUxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWdu\n" + + "IG52LXNhMSswKQYDVQQDEyJHbG9iYWxTaWduIEF0bGFzIFI2IEVWIFRMUyBDQSAy\n" + + "MDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtQ8IiN2Ukq/Clynv\n" + + "HhqugFQg5SXIyVO4ZRnxo0hNnaek78LRn4Bkaqcwv6Ls0Ftn4bK2zvBaS1zsfUTA\n" + + "vfup/s86zHCRvOqAL8zO/WiMV1G5ikHSlD6RtpIOHRX4y0oIGW59ADY0ANwDeDWL\n" + + "x/RgSltuQIqeGXwZnyZFwWtxVkSE4p5tn2Lb6USzwcD22taiXmeYsPMWfJfmWPRj\n" + + "ZuYBgxn6tvUVRO+ZzAUKEEaJK/LVLieAVEmfR6anEJ/gWczxz12Lwu6qF5ov0OQt\n" + + "AP0rfruyje/EJt6xHjpJ2OgDzCWYstXOpRPDHYS3klpaRbowAlpJdYMRAqY5CNiP\n" + + "RAx3wvsWCVI5UkzKVD6RuHHVpfzfdKAfsjHa/aSunHtTpE+NUf3Q/3qHXW5cyDnP\n" + + "Jt6VTVVVevjTquwH1xrUigukDbeopV1owsqIA5aw2io7RbBorwPBA0veinHN4vP9\n" + + "X8jbTiIiLjlfJOnHZe7pIhb3T9WCqhwwsBNPQpKizGHCj5kL2UJe7N5u4RywFOZE\n" + + "l5mbTX4zO6Vj3WM9ZVbZgXVNwEjS5mYq/rvC1yr9obNUJ8br6JAd2ZBnzhA5Zn4s\n" + + "bIP99TlUBZWczw+vPM7g1S4e4cyd+8CULVhVs87QlyvwWnRbH7fXZo8xLzhzMCjB\n" + + "8Y0cNdL1S6QKrrhC6Pf6tV/JU20CAwEAAaOCAZMwggGPMA4GA1UdDwEB/wQEAwIB\n" + + "hjAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwEgYDVR0TAQH/BAgwBgEB\n" + + "/wIBADAdBgNVHQ4EFgQUhNwhC8eoXXKXhId+8tW2+nFWTvswHwYDVR0jBBgwFoAU\n" + + "rmwFo5MT4qLn4tcc1sfwf8hnU6AwewYIKwYBBQUHAQEEbzBtMC4GCCsGAQUFBzAB\n" + + "hiJodHRwOi8vb2NzcDIuZ2xvYmFsc2lnbi5jb20vcm9vdHI2MDsGCCsGAQUFBzAC\n" + + "hi9odHRwOi8vc2VjdXJlLmdsb2JhbHNpZ24uY29tL2NhY2VydC9yb290LXI2LmNy\n" + + "dDA2BgNVHR8ELzAtMCugKaAnhiVodHRwOi8vY3JsLmdsb2JhbHNpZ24uY29tL3Jv\n" + + "b3QtcjYuY3JsMFUGA1UdIAROMEwwQQYJKwYBBAGgMgEBMDQwMgYIKwYBBQUHAgEW\n" + + "Jmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMAcGBWeBDAEB\n" + + "MA0GCSqGSIb3DQEBDAUAA4ICAQBD+97H2N1BgiliKQFrb+jcWjkmPP8cdF/eiBW1\n" + + "cEzOOhsuVqxbyIk8qdw3UueHSDjqWUjHYoo8TV3DLqUXmIy1Ks3MkESsFKeLpEbk\n" + + "VMZga0lbDnqqRc5a2yzrXmwVYDeWVeD20s5vPoKCnFzmcR+2v9TKD4bI6XWVl84q\n" + + "GzfFRVdY9f8KN+7891+47ZhptvxtNqJKVI2O+EAP/PvTpwes983LkFzsev4/+Qxs\n" + + "EszD7/pE+Byj3t9CMat2XoX0jfJjbEXgewFb/gCwHvqNKLNWrYfE9qN8b6qm4xQk\n" + + "qGQKTrFKsBJx4TU+h10qXDhpmOBswiJqoG16XCV32oSn0JUYvXVAvP6YjueOv/jr\n" + + "0ZMTWGh8wCz6v3XBaXR0rxDAz9GImpU+xPx2XjuHac7OnYbN+i8p7cJPUxABjHiA\n" + + "LWXIZtCn5ziCfvYC6+SCp8x9TPJzAIfJ4NKv/8SpvvzuchVkAQqlQaGFBEdkX84R\n" + + "I/WYYG+2BliFIpbQnfljYWCURbfsYz7+Zxb94+4yzva49p8T6lALoK3s2kqIVLKN\n" + + "s6qAnk/qX6JihkaR3W+iViHMC5tqQX/pd8QIXccF3PA2OdeNGU4iUNZqUbYB4VZd\n" + + "AaOaeaUl0LwAta6DB5w344eUIqDgaitSwQZBnxppmwL3tGzP1ero2e2RvBmphbxI\n" + + "atIdxA==\n" + "-----END CERTIFICATE-----"; - // Owner: CN=valid.r6.roots.globalsign.com, O=GMO GlobalSign Inc., STREET="Two International Drive, Suite 150", - // L=Portsmouth, ST=New Hampshire, C=US, OID.1.3.6.1.4.1.311.60.2.1.2=New Hampshire, OID.1.3.6.1.4.1.311.60.2.1.3=US, - // SERIALNUMBER=578611, OID.2.5.4.15=Private Organization - // Issuer: CN=GlobalSign R6 Admin CA - SHA256 - G3, O=GlobalSign nv-sa, C=BE - // Serial number: 1355071ec648a599cea67b3b - // Valid from: Wed Jun 13 21:31:05 PDT 2018 until: Sat Jun 13 21:31:05 PDT 2020 + // Owner: CN=valid.r6.roots.globalsign.com, + // O=GMO GlobalSign LTD, STREET="Springfield House, Sandling Road", OID.2.5.4.17=ME14 2LP, L=Maidstone, ST=Kent, + // C=GB, SERIALNUMBER=04705639, OID.2.5.4.15=Private Organization, OID.1.3.6.1.4.1.311.60.2.1.3=GB + // Issuer: CN=GlobalSign Atlas R6 EV TLS CA 2020, O=GlobalSign nv-sa, C=BE + // Serial number: 1aff2829dd8bf07aa65a7b3c920ca4b + // Valid from: Thu Aug 27 00:20:06 PDT 2020 until: Tue Sep 28 00:20:06 PDT 2021 private static final String VALID = "-----BEGIN CERTIFICATE-----\n" + - "MIIHUjCCBjqgAwIBAgIME1UHHsZIpZnOpns7MA0GCSqGSIb3DQEBCwUAMFcxCzAJ\n" + - "BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS0wKwYDVQQDEyRH\n" + - "bG9iYWxTaWduIFI2IEFkbWluIENBIC0gU0hBMjU2IC0gRzMwHhcNMTgwNjE0MDQz\n" + - "MTA1WhcNMjAwNjE0MDQzMTA1WjCCARIxHTAbBgNVBA8MFFByaXZhdGUgT3JnYW5p\n" + - "emF0aW9uMQ8wDQYDVQQFEwY1Nzg2MTExEzARBgsrBgEEAYI3PAIBAxMCVVMxHjAc\n" + - "BgsrBgEEAYI3PAIBAhMNTmV3IEhhbXBzaGlyZTELMAkGA1UEBhMCVVMxFjAUBgNV\n" + - "BAgTDU5ldyBIYW1wc2hpcmUxEzARBgNVBAcTClBvcnRzbW91dGgxKzApBgNVBAkT\n" + - "IlR3byBJbnRlcm5hdGlvbmFsIERyaXZlLCBTdWl0ZSAxNTAxHDAaBgNVBAoTE0dN\n" + - "TyBHbG9iYWxTaWduIEluYy4xJjAkBgNVBAMTHXZhbGlkLnI2LnJvb3RzLmdsb2Jh\n" + - "bHNpZ24uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArh1lHcNS\n" + - "cfvFI/vGrfu3sC561NL6VTm9WQpq0UcdQpVlOjnmlScZaUhTlcJ2aWz4tqNnT/SF\n" + - "EO48kgIy0c07n0z1igBGOvM6shPtdIT3Yik2KwKdnt2Oaw/RqyXQxZhMvvGGyXLP\n" + - "hEyRdUrcNEXzOh+/AFzV2Ayo2OfZB/SEJW2BMhYEvZ89ziniab7vaNfVVUwsR6yD\n" + - "JX/3bdgRpG3gvKpdawAXMkhX5yAJaLInp5gHfCKNsW7l5gSrW/IYmPZvmEovLLmF\n" + - "lJfEDltnaNrO3jFzCjzEVRsurBrn1lMgKuCCkCZhzUgy5w8fR7OiGDpI/DmprRxn\n" + - "WQomtZBRd9VG1wIDAQABo4IDXzCCA1swDgYDVR0PAQH/BAQDAgWgMIGWBggrBgEF\n" + - "BQcBAQSBiTCBhjBHBggrBgEFBQcwAoY7aHR0cDovL3NlY3VyZS5nbG9iYWxzaWdu\n" + - "LmNvbS9jYWNlcnQvZ3NyNmFkbWluY2FzaGEyNTZnMy5jcnQwOwYIKwYBBQUHMAGG\n" + - "L2h0dHA6Ly9vY3NwMi5nbG9iYWxzaWduLmNvbS9nc3I2YWRtaW5jYXNoYTI1Nmcz\n" + - "MFUGA1UdIAROMEwwQQYJKwYBBAGgMgEBMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8v\n" + - "d3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMAcGBWeBDAEBMAkGA1UdEwQC\n" + - "MAAwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC5nbG9iYWxzaWduLmNvbS9n\n" + - "c3I2YWRtaW5jYXNoYTI1NmczLmNybDAoBgNVHREEITAfgh12YWxpZC5yNi5yb290\n" + - "cy5nbG9iYWxzaWduLmNvbTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw\n" + - "HQYDVR0OBBYEFPTkCvZs787YEtziawL5ju/rC8XwMB8GA1UdIwQYMBaAFIFJXOkF\n" + - "vwyIoDiWsl1BA1rp/9eHMIIBfwYKKwYBBAHWeQIEAgSCAW8EggFrAWkAdwBVgdTC\n" + - "FpA2AUrqC5tXPFPwwOQ4eHAlCBcvo6odBxPTDAAAAWP8j7bvAAAEAwBIMEYCIQDH\n" + - "FRH+VkQ4RgVRYaO47rC83fQrzEO9Pb45BD5ZEHfrRwIhALY75BbrPhtAZSXWfpVN\n" + - "MoDQzA6X0DQFSf29dlnCMYCmAHcApLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fN\n" + - "DsgN3BAAAAFj/I+4QgAABAMASDBGAiEA3kcOlf4Az7R+/MkV5GurWnpUmIhCUB3v\n" + - "a/tNz+Dd8HgCIQC22RG+EW4OYdaoWN/B3MeI95OlNofD/OqJB/med+quWwB1AG9T\n" + - "dqwx8DEZ2JkApFEV/3cVHBHZAsEAKQaNsgiaN9kTAAABY/yPt6kAAAQDAEYwRAIg\n" + - "THH7eeWpo5vDtjDNKzpkkrR/McYDgmQIRRnLKXkKMsoCIC9cY4xj9LlXPVRF9bLH\n" + - "1DvP9qmONga9pO7kxuyYtd8YMA0GCSqGSIb3DQEBCwUAA4IBAQA0Ufq4QDCiWxm4\n" + - "5D3MrfbQnC9apSMpzRT2udD/gFDbtqTJ7Rx4CJjNWa9ANkKWNlJ6zVASpVzV7KB7\n" + - "otvqO4iR5V0EE4+9fitJ3zRe9nl76uDf2upCHLcWsYurq/eIxIuXnIByLJvTS3jS\n" + - "42i07D6JsgNg9SR8rIKyYiz4KX2975GlMSue/SOMFcf/AC7amYzs6U+FA68y8GBV\n" + - "yDGpYvQW9zfnQ2Z/XVcLE1tVERrEs3Ba08g+uk1dICyibSz83yrX3Eas/bq6kZEy\n" + - "kRvhD1fnk3wAlgiuUED65Rn3ezm2AjsFJBIitdDyHFzgZiu/DKccakuuk8NwDZjJ\n" + - "NrTZIL32\n" + + "MIIHyjCCBbKgAwIBAgIQAa/ygp3YvweqZaezySDKSzANBgkqhkiG9w0BAQsFADBV\n" + + "MQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTErMCkGA1UE\n" + + "AxMiR2xvYmFsU2lnbiBBdGxhcyBSNiBFViBUTFMgQ0EgMjAyMDAeFw0yMDA4Mjcw\n" + + "NzIwMDZaFw0yMTA5MjgwNzIwMDZaMIH6MRMwEQYLKwYBBAGCNzwCAQMTAkdCMR0w\n" + + "GwYDVQQPDBRQcml2YXRlIE9yZ2FuaXphdGlvbjERMA8GA1UEBRMIMDQ3MDU2Mzkx\n" + + "CzAJBgNVBAYTAkdCMQ0wCwYDVQQIDARLZW50MRIwEAYDVQQHDAlNYWlkc3RvbmUx\n" + + "ETAPBgNVBBEMCE1FMTQgMkxQMSkwJwYDVQQJDCBTcHJpbmdmaWVsZCBIb3VzZSwg\n" + + "U2FuZGxpbmcgUm9hZDEbMBkGA1UECgwSR01PIEdsb2JhbFNpZ24gTFREMSYwJAYD\n" + + "VQQDDB12YWxpZC5yNi5yb290cy5nbG9iYWxzaWduLmNvbTCCASIwDQYJKoZIhvcN\n" + + "AQEBBQADggEPADCCAQoCggEBAMOxbh7fZVLUB06xxNBePa9vpOuAS5km1w8ngsTu\n" + + "SvH1LZnPFd4nu40fi8bPbHd4J2oRWZ28f7LKVQgBupn9knrTQxfTV361WpmwqCcH\n" + + "MxornKyHx4t5uGrtTtX2fYoNQQk330dIKAfKpUrOiaDybB7irG2JEHdGD3Iv7ud8\n" + + "FXfXgXte26mUDX3XeCvE0pbuNKpTKApqOeojlVR6TCNB1n6KGYLMIz/1ow6XBZ64\n" + + "1zKG/9o0gSHelkUHGmGLzOAE5YpkhwzhpND9opycnfieHuy5BcoBIpeMqGNwOsGu\n" + + "p+nhFz+N8mPjSjZEf0qx+FLF2cBmNFknJJCdnV7OYfKZHE0CAwEAAaOCAu4wggLq\n" + + "MCgGA1UdEQQhMB+CHXZhbGlkLnI2LnJvb3RzLmdsb2JhbHNpZ24uY29tMA4GA1Ud\n" + + "DwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHQYDVR0O\n" + + "BBYEFLZolpEC8/bF44e/gnh4StQ9+URwMFUGA1UdIAROMEwwBwYFZ4EMAQEwQQYJ\n" + + "KwYBBAGgMgEBMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24u\n" + + "Y29tL3JlcG9zaXRvcnkvMAwGA1UdEwEB/wQCMAAwgZoGCCsGAQUFBwEBBIGNMIGK\n" + + "MD4GCCsGAQUFBzABhjJodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9jYS9nc2F0\n" + + "bGFzcjZldnRsc2NhMjAyMDBIBggrBgEFBQcwAoY8aHR0cDovL3NlY3VyZS5nbG9i\n" + + "YWxzaWduLmNvbS9jYWNlcnQvZ3NhdGxhc3I2ZXZ0bHNjYTIwMjAuY3J0MB8GA1Ud\n" + + "IwQYMBaAFITcIQvHqF1yl4SHfvLVtvpxVk77MEYGA1UdHwQ/MD0wO6A5oDeGNWh0\n" + + "dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vY2EvZ3NhdGxhc3I2ZXZ0bHNjYTIwMjAu\n" + + "Y3JsMIIBAwYKKwYBBAHWeQIEAgSB9ASB8QDvAHYAfT7y+I//iFVoJMLAyp5SiXkr\n" + + "xQ54CX8uapdomX4i8NcAAAF0Lsm7CwAABAMARzBFAiB0fLxAlPzkPxZOVj7c8OFc\n" + + "YwycekW0Mo+sRm/BQYoeOgIhAK2lNW7ebraH//ZlLQD7dyzWCO+kgmkQo+mqdm1x\n" + + "4P15AHUAb1N2rDHwMRnYmQCkURX/dxUcEdkCwQApBo2yCJo32RMAAAF0Lsm7JAAA\n" + + "BAMARjBEAiALOZvdNiA9q1Ysr7ejTGdivUqNJNm9KftmGXwHFGwf2QIgDodNLmbZ\n" + + "JFGt8l5ul0fHw2Gn8KqhRUW6CMRT58svhcswDQYJKoZIhvcNAQELBQADggIBAByb\n" + + "hoL/sArmkNjTFiEEBocMfb+brgRQdb08NKC1BDxGnfIFjUmOFzI2SVgtBmcoF8FI\n" + + "0WyXQv6ZxVE01DFZpeZpsJJYfBAjg9NR4/B7UjajvOJwQNpaciAGQ0ZzTu+SmHja\n" + + "jIiC2KqiA7Me2MoUne6hhxZ3dXEneIml8hnbTf2mjSBCVpQqyf2goslhGduPitI6\n" + + "guTtVD2PVaNCVkjlRn4Euspl2JjQWzGcEruqGyQN+Bu4yt1hsD4Jj6V9Hmzo8Vrd\n" + + "5LUxFPRGIgCUDiiwnENVsQB/D24y3IapPkojujrvsVsmQN42GIgOY5tLK/8cCziD\n" + + "vf0GzZnmL1D2ezi3TaBj+XBWFcAyF2Y9AnVRmC9CrVcp6EX0KhD4g9ZgbpJZpVlk\n" + + "G3xfOiZWTeqLnQhCMXcdcutWIwXAX5gueyF1t545vECCE4PeGZNAeWqdbrj7xaS8\n" + + "3rKQdgwF9r6p7F5HHwEVCckhovEYU4DNFzYb9n/YmC3hmskFB1keTYqydKUYEGZ5\n" + + "fvLvsjRj9xwOCqIs5j1vuKw2CaqmHxrfYaDMMSZPq/iYrOWrf72wZIvtnAHePt3X\n" + + "atQMqNbDMQrjul31ljDP9CIbbtuZSkSACyMxiC10l4uTTLQiTxtZPkwIazOjnbBe\n" + + "A4fruOEQ2k1gu5oFgqmo+xuclOKNjwd/RkK4FXnD\n" + "-----END CERTIFICATE-----"; - // Owner: CN=revoked.r6.roots.globalsign.com, O=GMO GlobalSign Inc., STREET="Two International Drive, Suite 150", - // L=Portsmouth, ST=New Hampshire, C=US, OID.1.3.6.1.4.1.311.60.2.1.2=New Hampshire, OID.1.3.6.1.4.1.311.60.2.1.3=US, - // SERIALNUMBER=578611, OID.2.5.4.15=Private Organization - // Issuer: CN=GlobalSign R6 Admin CA - SHA256 - G3, O=GlobalSign nv-sa, C=BE - // Serial number: 535589c9d767cf1cd892f1dc - // Valid from: Wed Jun 13 21:36:04 PDT 2018 until: Sat Jun 13 21:36:04 PDT 2020 + // Owner: CN=revoked.r6.roots.globalsign.com, + // O=GMO GlobalSign LTD, STREET="Springfield House, Sandling Road", OID.2.5.4.17=ME14 2LP, L=Maidstone, ST=Kent, + // C=GB, SERIALNUMBER=04705639, OID.2.5.4.15=Private Organization, OID.1.3.6.1.4.1.311.60.2.1.3=GB + // Issuer: CN=GlobalSign Atlas R6 EV TLS CA 2020, O=GlobalSign nv-sa, C=BE + // Serial number: 1df30d84796ac20c47da63b8e681e8f + // Valid from: Thu Aug 27 00:37:53 PDT 2020 until: Tue Sep 28 00:37:53 PDT 2021 private static final String REVOKED = "-----BEGIN CERTIFICATE-----\n" + - "MIIHVTCCBj2gAwIBAgIMU1WJyddnzxzYkvHcMA0GCSqGSIb3DQEBCwUAMFcxCzAJ\n" + - "BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS0wKwYDVQQDEyRH\n" + - "bG9iYWxTaWduIFI2IEFkbWluIENBIC0gU0hBMjU2IC0gRzMwHhcNMTgwNjE0MDQz\n" + - "NjA0WhcNMjAwNjE0MDQzNjA0WjCCARQxHTAbBgNVBA8MFFByaXZhdGUgT3JnYW5p\n" + - "emF0aW9uMQ8wDQYDVQQFEwY1Nzg2MTExEzARBgsrBgEEAYI3PAIBAxMCVVMxHjAc\n" + - "BgsrBgEEAYI3PAIBAhMNTmV3IEhhbXBzaGlyZTELMAkGA1UEBhMCVVMxFjAUBgNV\n" + - "BAgTDU5ldyBIYW1wc2hpcmUxEzARBgNVBAcTClBvcnRzbW91dGgxKzApBgNVBAkT\n" + - "IlR3byBJbnRlcm5hdGlvbmFsIERyaXZlLCBTdWl0ZSAxNTAxHDAaBgNVBAoTE0dN\n" + - "TyBHbG9iYWxTaWduIEluYy4xKDAmBgNVBAMTH3Jldm9rZWQucjYucm9vdHMuZ2xv\n" + - "YmFsc2lnbi5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6SJ+O\n" + - "PX5/ECfblZpVByiogO5sUCS23Sry3Ucn1fxFO3b6tOKppUtgZjJUxUOHj9jRIsmS\n" + - "8Tvbn+Iu35Cjj2vTsJNoFzxiMj/FBl3IqfF7w4ghLNZ+wE91cMwG0LUtDeAKTlJa\n" + - "j4Q2Gj1ZOGLPyr4flSig2bOvcIBWYjbXqwBMZek9EC58D34HF+h2fdzXPrqHHWqg\n" + - "NQpj7lxkr4XA1jXSgZJZnRfoVW+BCVidbNw9LEteF+WGcg3P9sd8XUWJtG/pb4w1\n" + - "GsCMf/ig8gkrsQvrMYPsYgQJMdypXm9eAqZmVcE94E0Uz1dbJL9zCa8y4ue9yDnp\n" + - "+gzXxToJvNzrlmUPAgMBAAGjggNgMIIDXDAOBgNVHQ8BAf8EBAMCBaAwgZYGCCsG\n" + - "AQUFBwEBBIGJMIGGMEcGCCsGAQUFBzAChjtodHRwOi8vc2VjdXJlLmdsb2JhbHNp\n" + - "Z24uY29tL2NhY2VydC9nc3I2YWRtaW5jYXNoYTI1NmczLmNydDA7BggrBgEFBQcw\n" + - "AYYvaHR0cDovL29jc3AyLmdsb2JhbHNpZ24uY29tL2dzcjZhZG1pbmNhc2hhMjU2\n" + - "ZzMwVQYDVR0gBE4wTDBBBgkrBgEEAaAyAQEwNDAyBggrBgEFBQcCARYmaHR0cHM6\n" + - "Ly93d3cuZ2xvYmFsc2lnbi5jb20vcmVwb3NpdG9yeS8wBwYFZ4EMAQEwCQYDVR0T\n" + - "BAIwADBCBgNVHR8EOzA5MDegNaAzhjFodHRwOi8vY3JsLmdsb2JhbHNpZ24uY29t\n" + - "L2dzcjZhZG1pbmNhc2hhMjU2ZzMuY3JsMCoGA1UdEQQjMCGCH3Jldm9rZWQucjYu\n" + - "cm9vdHMuZ2xvYmFsc2lnbi5jb20wHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUF\n" + - "BwMCMB0GA1UdDgQWBBR66TcwHJ5KRJZqtNB3Cqj8rWUAYzAfBgNVHSMEGDAWgBSB\n" + - "SVzpBb8MiKA4lrJdQQNa6f/XhzCCAX4GCisGAQQB1nkCBAIEggFuBIIBagFoAHYA\n" + - "VYHUwhaQNgFK6gubVzxT8MDkOHhwJQgXL6OqHQcT0wwAAAFj/JRH/gAABAMARzBF\n" + - "AiBtxn2bgwXrjx2zX3RPP3L4iFEZ1bK71oZ67RvNpI/pWQIhAK1Wg3wEdSqUUa9I\n" + - "VKSNaDaMqtI7s5yQvIV3YdDDxl+hAHcAu9nfvB+KcbWTlCOXqpJ7RzhXlQqrUuga\n" + - "kJZkNo4e0YUAAAFj/JRJMQAABAMASDBGAiEAkwpftFhujb0p9wNDywVgZPPxGdLy\n" + - "7c7WnpBLkViuvVgCIQCtWUK5pfYn+FWPKX82XmG0Hw1VgeQRPZZNAy0HQu/V0QB1\n" + - "AG9Tdqwx8DEZ2JkApFEV/3cVHBHZAsEAKQaNsgiaN9kTAAABY/yUSPUAAAQDAEYw\n" + - "RAIgEN2Y70rpA+zoK1C5bKEOYUDy6Km5pgymDEPcMBgmh5ECIEAWEPdNA9FeCwqW\n" + - "S1Mi3uOhB4dmJKNbToFWtL2lBeDrMA0GCSqGSIb3DQEBCwUAA4IBAQCDoIyqZlvt\n" + - "YeqjVCR2rvb1ZHyB5UI5rfYuoNstjaxLKP2tIDByeGwllT0vSb2otM6XjXGVuTTO\n" + - "sbVUf4aQQb82pkKXYtB6L7cfPkqrnZXJrmPYb+3xzAsr+HXyyPOu0FIVrtB/WTvd\n" + - "Qo/JyVMm7Duke/e5gudw9Lv6sb2P5B3BVcNzbv1f7589wydNvrTgdVeldyPNfuZ4\n" + - "gMT/ICoNaX+U6O3EiqYB+gLDBKVAIDsQV1k/fYq5uZr1FsTzOMesaCT4me/4I4tR\n" + - "2H7WrVajYEJ73gWUclDLxy7hoDNwR/ZuLcilAaqdwIdmVD0aFiw8RFsyZkXO5J0R\n" + - "BuecWspICLIw\n" + + "MIIHzzCCBbegAwIBAgIQAd8w2EeWrCDEfaY7jmgejzANBgkqhkiG9w0BAQsFADBV\n" + + "MQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTErMCkGA1UE\n" + + "AxMiR2xvYmFsU2lnbiBBdGxhcyBSNiBFViBUTFMgQ0EgMjAyMDAeFw0yMDA4Mjcw\n" + + "NzM3NTNaFw0yMTA5MjgwNzM3NTNaMIH8MRMwEQYLKwYBBAGCNzwCAQMTAkdCMR0w\n" + + "GwYDVQQPDBRQcml2YXRlIE9yZ2FuaXphdGlvbjERMA8GA1UEBRMIMDQ3MDU2Mzkx\n" + + "CzAJBgNVBAYTAkdCMQ0wCwYDVQQIDARLZW50MRIwEAYDVQQHDAlNYWlkc3RvbmUx\n" + + "ETAPBgNVBBEMCE1FMTQgMkxQMSkwJwYDVQQJDCBTcHJpbmdmaWVsZCBIb3VzZSwg\n" + + "U2FuZGxpbmcgUm9hZDEbMBkGA1UECgwSR01PIEdsb2JhbFNpZ24gTFREMSgwJgYD\n" + + "VQQDDB9yZXZva2VkLnI2LnJvb3RzLmdsb2JhbHNpZ24uY29tMIIBIjANBgkqhkiG\n" + + "9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvaNcp7bzmm02Z0S92ZzJ/ul3uQWz3EnBORcI\n" + + "RuEzm0HY4t0n9DGnxpxOi/aWGX/Vj7qZC4m3G7uCE7dMy6CfXTwh4UZ+nPVijImo\n" + + "q/msJzmju/pk8HVeOEhk88yvwfzmzYLjoQagmHnDUSQULEmNWihejIh4B61qx4SI\n" + + "UoBPoBgqDfZW27HkJeqNAO6rljZTZwLenJesm2QMjebYaKxQBi3fLy0Lua2sxTik\n" + + "fbT3swEPN9xxvMomtNNM2tJwdExL2RpO8dObUe37ep6roG7gWh8NYDKMo6j9Rn9e\n" + + "f0S9jwkcRM2kZSHR09HSu8ULBgP+KYa8DDpOyt+HO+2G57MhbQIDAQABo4IC8TCC\n" + + "Au0wKgYDVR0RBCMwIYIfcmV2b2tlZC5yNi5yb290cy5nbG9iYWxzaWduLmNvbTAO\n" + + "BgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB0G\n" + + "A1UdDgQWBBTa1/37G4T022LEW3WwIVV99qtjsjBVBgNVHSAETjBMMAcGBWeBDAEB\n" + + "MEEGCSsGAQQBoDIBATA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxz\n" + + "aWduLmNvbS9yZXBvc2l0b3J5LzAMBgNVHRMBAf8EAjAAMIGaBggrBgEFBQcBAQSB\n" + + "jTCBijA+BggrBgEFBQcwAYYyaHR0cDovL29jc3AuZ2xvYmFsc2lnbi5jb20vY2Ev\n" + + "Z3NhdGxhc3I2ZXZ0bHNjYTIwMjAwSAYIKwYBBQUHMAKGPGh0dHA6Ly9zZWN1cmUu\n" + + "Z2xvYmFsc2lnbi5jb20vY2FjZXJ0L2dzYXRsYXNyNmV2dGxzY2EyMDIwLmNydDAf\n" + + "BgNVHSMEGDAWgBSE3CELx6hdcpeEh37y1bb6cVZO+zBGBgNVHR8EPzA9MDugOaA3\n" + + "hjVodHRwOi8vY3JsLmdsb2JhbHNpZ24uY29tL2NhL2dzYXRsYXNyNmV2dGxzY2Ey\n" + + "MDIwLmNybDCCAQQGCisGAQQB1nkCBAIEgfUEgfIA8AB2AG9Tdqwx8DEZ2JkApFEV\n" + + "/3cVHBHZAsEAKQaNsgiaN9kTAAABdC7aAfUAAAQDAEcwRQIgHIAHHw/Y/VKaaHhy\n" + + "rZ/cMinivfZ4lUq2ejV7FRPbT8ECIQD3RoE13/MBVMVBLCQ2ErKsB5+7F31dX/tv\n" + + "Z/muQi5UrQB2AH0+8viP/4hVaCTCwMqeUol5K8UOeAl/LmqXaJl+IvDXAAABdC7a\n" + + "AegAAAQDAEcwRQIhALl0LXt6pFqS0cHF/XkxSfDJJdhppR2eSlcMFpZY0q1PAiBJ\n" + + "YkKHqq/YD0gwtZAUEPSk54G1cLxFoUiounjya1XTRzANBgkqhkiG9w0BAQsFAAOC\n" + + "AgEAdeQotBhB7bn+CztQmF13rdBphHrGkkyHC3hL1bxkmHJcrLQ5ochqPvgdgAVq\n" + + "DXcV8zSyNwVxW6REi+uYzcsOPKo/llmgF7Psqn1t/EDcutWlykh8UwE5UaLJ2EWD\n" + + "HnIu06n47lWtAwlNMXJ/ce0oVjqsgY52Y1u54e8wFXt6lsSw02tzIC6eo1BFKxQ3\n" + + "lDKYVXgg0OvMG/C2rvH/EIq5r+st49rNGWfcWRoHsDUruChZOHwJ9PrXKBLB/QVd\n" + + "4uw2V/0ipOETDudly7yLodXP8quhet4bCEO9gweXppL/MikLrE5xt46HW1/6w+jF\n" + + "wKCHWlq4ViswlaQ8q0oY/97o2udnuDQaNdrLgW3VofMeBIMNPBgkLDicOH6bLwNf\n" + + "lV68qi1ZBxBuOdoOqQyZ9RU9d3EL50XEJ4MtUvjJRAT5EWdFaB8SGGZbD5fyza8c\n" + + "KmeO5tkZWYecLd8CKqwKcW7umPflEwOzw60Cxg6eyBYA8Jfagpbdb/kXsF6Ov8IW\n" + + "vxNdHCnXnR3oBWm2uHddESO2zGF1ZfOb0O3cHHG5nCgVkWW68VpgX/LaN90u6Dzw\n" + + "diJX7esZV5ZaniqD+flWldgAdcfeXlJ5b7I7GnFr61ycmZT/qupagUS1WDq/zfct\n" + + "QcB4QmnAzGe6kcqiDOSyIYWpiw09jha63KpJtJDWRemrlQI=\n" + "-----END CERTIFICATE-----"; public static void main(String[] args) throws Exception { @@ -195,8 +206,7 @@ // Validate Revoked pathValidator.validate(new String[]{REVOKED, INT}, ValidatePathWithParams.Status.REVOKED, - "Wed Jun 13 23:36:02 PDT 2018", System.out); - + "Thu Aug 27 00:38:11 PDT 2020", System.out); } }
--- a/test/sun/management/jmxremote/bootstrap/RmiBootstrapTest.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/sun/management/jmxremote/bootstrap/RmiBootstrapTest.java Mon Nov 16 13:36:36 2020 +0000 @@ -824,7 +824,7 @@ String errStr = null; for (int i=0;i<conf.length;i++) { - for (int j = 0; j < PORT_TEST_LEN; i++) { + for (int j = 0; j < PORT_TEST_LEN; j++) { try { errStr = testConfiguration(conf[i],port+testPort++); break;
--- a/test/sun/security/pkcs11/PKCS11Test.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/sun/security/pkcs11/PKCS11Test.java Mon Nov 16 13:36:36 2020 +0000 @@ -355,7 +355,11 @@ return nss3_version; try { - libfile = getNSSLibDir() + System.mapLibraryName(library); + String libdir = getNSSLibDir(); + if (libdir == null) { + return 0.0; + } + libfile = libdir + System.mapLibraryName(library); try (FileInputStream is = new FileInputStream(libfile)) { byte[] data = new byte[1000]; int read = 0;
--- a/test/sun/security/pkcs11/Secmod/TestNssDbSqlite.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/sun/security/pkcs11/Secmod/TestNssDbSqlite.java Mon Nov 16 13:36:36 2020 +0000 @@ -26,6 +26,8 @@ * @test * @bug 8165996 * @summary Test NSS DB Sqlite + * @comment There is no NSS on Aix. + * @requires os.family != "aix" * @library ../ * @run main/othervm/timeout=120 TestNssDbSqlite * @author Martin Balao (mbalao@redhat.com)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/security/rsa/pss/PSSKeyCompatibility.java Mon Nov 16 13:36:36 2020 +0000 @@ -0,0 +1,279 @@ +/* + * Copyright (c) 2020, 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.ByteArrayInputStream; +import java.security.Key; +import java.security.KeyFactory; +import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.cert.Certificate; +import java.security.cert.CertificateException; +import java.security.cert.CertificateFactory; +import java.security.interfaces.RSAPrivateCrtKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.RSAPrivateCrtKeySpec; +import java.security.spec.RSAPublicKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.Arrays; +import java.util.Base64; + +/** + * @test + * @bug 8242335 + * @summary OpenSSL generated compatibility test with RSASSA-PSS Java. + * @run main PSSKeyCompatibility + */ +public class PSSKeyCompatibility { + + private static final String ALGO = "RSASSA-PSS"; + private static final String OID = "1.2.840.113549.1.1.10"; + private static final String PROVIDER = "SunRsaSign"; + + public static void main(String[] args) { + + boolean result = true; + for (String algo : new String[]{ALGO, OID}) { + System.out.println("With : " + algo); + result &= validateCert(algo, PROVIDER, PUBLIC_256); + result &= validateCert(algo, PROVIDER, PUBLIC_384); + result &= validateCert(algo, PROVIDER, PUBLIC_512); + + result &= validatePrivate(algo, PROVIDER, PRIVATE); + } + if (!result) { + throw new RuntimeException("Some test cases failed"); + } + } + + private static boolean validatePrivate(String algorithm, String provider, + String type) { + + try { + KeyFactory kf = KeyFactory.getInstance(algorithm, provider); + PKCS8EncodedKeySpec privSpec = new PKCS8EncodedKeySpec( + Base64.getMimeDecoder().decode(type)); + PrivateKey priv = kf.generatePrivate(privSpec); + + RSAPrivateCrtKey crtKey = (RSAPrivateCrtKey) priv; + PrivateKey priv1 = kf.generatePrivate(new RSAPrivateCrtKeySpec( + crtKey.getModulus(), + crtKey.getPublicExponent(), + crtKey.getPrivateExponent(), + crtKey.getPrimeP(), + crtKey.getPrimeQ(), + crtKey.getPrimeExponentP(), + crtKey.getPrimeExponentQ(), + crtKey.getCrtCoefficient(), + crtKey.getParams() + )); + equals(priv, priv1); + } catch (NoSuchAlgorithmException | InvalidKeySpecException + | NoSuchProviderException e) { + e.printStackTrace(System.out); + return false; + } + System.out.println("PASSED - validatePrivate"); + return true; + } + + private static boolean validateCert(String algorithm, String provider, + String type) { + + try { + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + Certificate cert = cf.generateCertificate( + new ByteArrayInputStream(type.getBytes())); + System.out.println(cert); + KeyFactory kf = KeyFactory.getInstance(algorithm, provider); + X509EncodedKeySpec pubSpec = kf.getKeySpec( + cert.getPublicKey(), X509EncodedKeySpec.class); + PublicKey pub = kf.generatePublic(pubSpec); + PublicKey pub1 = kf.generatePublic(new RSAPublicKeySpec( + ((RSAPublicKey) pub).getModulus(), + ((RSAPublicKey) pub).getPublicExponent(), + ((RSAPublicKey) pub).getParams())); + equals(cert.getPublicKey(), pub); + equals(pub, pub1); + } catch (CertificateException | NoSuchAlgorithmException + | InvalidKeySpecException | NoSuchProviderException e) { + e.printStackTrace(System.out); + return false; + } + System.out.println("PASSED - validateCert"); + return true; + } + + private static void equals(Key orig, Key gen) { + if (!orig.equals(gen) && orig.hashCode() != gen.hashCode() + && !Arrays.equals(orig.getEncoded(), gen.getEncoded())) { + throw new RuntimeException("Key mismatch found"); + } + } + + //rsa_pss_pss_sha256 + private static final String PRIVATE + = "MIIEvAIBADALBgkqhkiG9w0BAQoEggSoMIIEpAIBAAKCAQEAu1qb8PZ8vMrX08Gf\n" + + "y9mx7c5NHymdPIpdDvaiYkpRfYGXp3Jpx7A0Hq01QY0OUu+0sCd5IbiVoVGqM4cq\n" + + "r2e4eyYnbgJEF7Tg8Ipu70cOUCZLj/fYNAjvFjv4+lxQYRCZHUH+lWPDPtJWKELx\n" + + "iIsAL5tglfyrQrdWLaOiZKlJ49DrYKU6PYqELxdQ1lw3r8iBbgGJP2podGD0rMWw\n" + + "nGX4pl9C7dYA+FV2yDirpH+OMNGOqB5QCe2WcsMLMzLPxJxOpqU8lCuscXR0VZuV\n" + + "krgztGJcq4J0eqp05jvMWii4vW/KSIh9bndVmS2QIU7YArI8RMXtbSHdE0hXAkh+\n" + + "Phb6/QIDAQABAoIBAQC4gbJDKquLTYQhYXTaT4h/toSS5OuZfHXKz675d1ErdZ2B\n" + + "ZRaxdmDNuSxSYvSxTqm2NRmA0QRiu0cPudSaq12twdRg7VBbvGEt4lb/xA1fd2dA\n" + + "4AcGr6mtTuCSxqjN/oebnat3OalFS+VXfx3Yp3NGbxE+hHewm1b+WUELOwCunhYw\n" + + "WJxs5dR0APiqzknveFgkOSDRbMYhwN6ZIrAmZH0wkGI7ufssnp9LEVDkoQCaFHlW\n" + + "bUpBHV1YxMCgAD/Azoo7MtedoO/+qnu1h26VhMVMCQL1DymZAnWd5kXumP9PG9j9\n" + + "z2JwIdYc7wkLVoSHJmjuXn/Sa/X7YCTGNk5Qwp/tAoGBAPJIWN3b6FPasnAevD2O\n" + + "04l1nnNrjNmu7aMGTTH5CrDseI7y/nqbSC18pOivRLmvhkON26I/Gu8GPKBteZAV\n" + + "OHKPc4RM11nvv9CyN4yDp0g76pPXLPXRRN/HV0RfBkmaiE6rpS07ue8FDUZmqb9+\n" + + "T8LV2eCYL7gYnIxsctzEQ8tXAoGBAMX2H7wpZVqHlGW94FF2pLp82q2cP80PBD+Z\n" + + "TglUVHy957EGPqEzxAWf3saORMDXyme7o0eSHJ1tikNTqAb+//zg5JexNEZSv6cR\n" + + "trAxuUT7kgjdJaD2i2BjlJyGG6fiXHcxC8lBvnFiWrC+qihTKDPdwWXdEOwzqCdL\n" + + "0eBbKAvLAoGAKDjah/p6F3G3LeXsWkvb0nY0V/UC7SCdUvM43ZL6s2SOnyy4EqK0\n" + + "2NhYiEiQoEMDhzOFwum3Dvd6GSgThlf/hwVJqC0Zk1S6A2uSzUEOBG/uAZ03WZfk\n" + + "V0JAupkL8iw1dNoKEfhYZdXw3j8s7x2JIE9gXGjngyiS1L0sVHpAxwECgYB78csS\n" + + "23RLB0JhpU2yk6812ABu3LqRoEpPq6PRcYxogdpz2u4RrkCYKO2psd/YQgPHiRMF\n" + + "N7VU2AXOe61jm/sZEJHvbBLHyP2YFB4nGSrfxwc7J4Ns0ZCYbCDbE5hzN+Ye9oVj\n" + + "oBcmFKelq+sLzm0IdFqndY8n5HvvBqjEaS6cmwKBgQDM5VsMKnGuqy5pozamgABu\n" + + "/z3f8ATzPVr85LiEWP7qB9Y1JIFuTma3IVlULtab2S4rhrHqQNy6qA6Be9fKKPwE\n" + + "TCmM/SDdolcz2d0rC2VDO+pc1RPluDpB/Ag8aHkV58azQASHHvAKBckIe7fay2t2\n" + + "j4FaKzM/ieY3WSapIbjf3w=="; + + /* + * Certificate: Data: Version: 3 (0x2) + * Serial Number: 11:4c:35:8c:63:47:91:1d:c1:c8:0f:c2:6f:d0:bd:8b:8f:89:e3:6c + * Signature Algorithm: rsassaPss + * Hash Algorithm: sha256 + * Mask Algorithm: mgf1 with sha256 + * Salt Length: 0xDE + * Trailer Field: 0xBC (default) + * Issuer: CN = localhost + * Validity Not Before: Apr 8 06:01:37 2020 GMT + * Not After : Apr 3 06:01:37 2040 GMT + * Subject: CN = localhost + * Subject Public Key Info: Public + * Key Algorithm: rsassaPss + * RSA-PSS Public-Key: (2048 bit) + */ + private static final String PUBLIC_256 = "-----BEGIN CERTIFICATE-----\n" + + "MIIDaTCCAiCgAwIBAgIUe9ijWtZJGfoH6whOTEIc+J/T1vswPgYJKoZIhvcNAQEK\n" + + "MDGgDTALBglghkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogQC\n" + + "AgDeMBQxEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0yMDAzMTcwNjM4MDdaFw00MDAz\n" + + "MTIwNjM4MDdaMBQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASAwCwYJKoZIhvcNAQEK\n" + + "A4IBDwAwggEKAoIBAQC7Wpvw9ny8ytfTwZ/L2bHtzk0fKZ08il0O9qJiSlF9gZen\n" + + "cmnHsDQerTVBjQ5S77SwJ3khuJWhUaozhyqvZ7h7JiduAkQXtODwim7vRw5QJkuP\n" + + "99g0CO8WO/j6XFBhEJkdQf6VY8M+0lYoQvGIiwAvm2CV/KtCt1Yto6JkqUnj0Otg\n" + + "pTo9ioQvF1DWXDevyIFuAYk/amh0YPSsxbCcZfimX0Lt1gD4VXbIOKukf44w0Y6o\n" + + "HlAJ7ZZywwszMs/EnE6mpTyUK6xxdHRVm5WSuDO0YlyrgnR6qnTmO8xaKLi9b8pI\n" + + "iH1ud1WZLZAhTtgCsjxExe1tId0TSFcCSH4+Fvr9AgMBAAGjUzBRMB0GA1UdDgQW\n" + + "BBSDV090I9jEWvpjZ7fgO+GGocVgaDAfBgNVHSMEGDAWgBSDV090I9jEWvpjZ7fg\n" + + "O+GGocVgaDAPBgNVHRMBAf8EBTADAQH/MD4GCSqGSIb3DQEBCjAxoA0wCwYJYIZI\n" + + "AWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIEAgIA3gOCAQEAVl99\n" + + "g2F0H9YzEtvG5NjSGq8uCW5dLQd5DcXNfyfSLlUBwCTaZXncrc5/3DLYN1mWRQm2\n" + + "pCwmoGVzslwcLNENldTYogCc0Pc3YeG81wTBq0Tt6zS8RsDR3jhCFSDTVOjOoe0R\n" + + "kdYRd9d2pLg2ZOzAJXa6GLrFA+3Vv3dFFh8FhGB9CcVsyPQDzWhXQ0IwukHK+AMY\n" + + "6x1h12/CGQfrzBhrUtwbV+9iZN3lVsBYEFNKVz8Ca7H80YC4bsEHAHeR5nIUFk82\n" + + "kYuOBhcfC10oz+NdM1KbyAX8/4Uf7S3aBca27GTr1vP6tkmybonRHnZRoELNo1RQ\n" + + "wM0XPciACllEAJCVrQ==\n" + + "-----END CERTIFICATE-----"; + + /* + * Certificate: Data: Version: 3 (0x2) + * Serial Number: 32:f5:cf:23:71:d3:7f:16:10:5d:6e:c7:25:82:ee:7f:a8:ec:27:80 + * Signature Algorithm: rsassaPss + * Hash Algorithm: sha384 + * Mask Algorithm: mgf1 with sha384 + * Salt Length: 0xCE + * Trailer Field: 0xBC (default) + * Issuer: CN = localhost + * Validity Not Before: Apr 8 06:01:37 2020 GMT + * Not After : Apr 3 06:01:37 2040 GMT + * Subject: CN = localhost + * Subject Public Key Info: Public + * Key Algorithm: rsassaPss + * RSA-PSS Public-Key: (2048 bit) + */ + private static final String PUBLIC_384 = "-----BEGIN CERTIFICATE-----\n" + + "MIIDaTCCAiCgAwIBAgIUAeOnPMUidJHBqZbvhJWcH/05h0MwPgYJKoZIhvcNAQEK\n" + + "MDGgDTALBglghkgBZQMEAgKhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAICogQC\n" + + "AgDOMBQxEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0yMDAzMTcwNzI2MzFaFw00MDAz\n" + + "MTIwNzI2MzFaMBQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASAwCwYJKoZIhvcNAQEK\n" + + "A4IBDwAwggEKAoIBAQDPgUMdvdYOeVahvAp92RNG55plAlUyEdowNmIpEbyZOlEM\n" + + "Jc+7VqMt1K/+ZX1MkAGrFjV635p3c0NqI6qyv57cXA7VT92aYp9S0l4t7Cb2DQ6Y\n" + + "D+1jPNYTpYoMoI8ZPA486RGpnBtmRp9KRSkAoLS6AngCABE7OxuE0MrYKhbJ/8Lq\n" + + "Ss627FDXK+7aLCbEdLbr5G9BAIMEQDJAomHcqBMz5+EnEXWHc8drHFVIniHByFv3\n" + + "HmzDhFEMKCV9PbBXjgKdpMIAJsRXG3t1CBE/pEzILomgg3i4OHSUvEIzTApwTJvg\n" + + "UqtXi0UJqPohPViCQFeWLMa2N0pOAx1FMfdJIutLAgMBAAGjUzBRMB0GA1UdDgQW\n" + + "BBQBEi9rWGXrZObncP4StBKXB3baODAfBgNVHSMEGDAWgBQBEi9rWGXrZObncP4S\n" + + "tBKXB3baODAPBgNVHRMBAf8EBTADAQH/MD4GCSqGSIb3DQEBCjAxoA0wCwYJYIZI\n" + + "AWUDBAICoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAqIEAgIAzgOCAQEADIQ6\n" + + "2ktTyS9+POWWe8yGEqW/q9DxL0NAqc0n4rYm5hs/8MKk1NMaqIku2xjE3T/16iFj\n" + + "3WEtj51yoSIUN0VxXPUoj3Yv5xR03huBk8gAwTpQc9psRQuGpLt9BBq0dyErQ8XR\n" + + "88SshQRpDEZ2yR4Tb+U5XfbWe70uCGfeG3iDMtZPAx2GnYBD+u3JaN/m7sr0cB8V\n" + + "Y8GuxWNh40aaIR0iaWbIC4b9N3wYDOa1yd8PqAKnLIs1F5CinJM6i5LmbkQpd+cK\n" + + "t13iaFYN26HuD3AywDQDvyYTwV7q5jcoEGAd35+pmKCdatEHlo0uLzbTGZw31Gfo\n" + + "BeSEh3vmXa1Q7SOpTQ==\n" + + "-----END CERTIFICATE-----"; + /* + * Certificate: Data: Version: 3 (0x2) + * Serial Number: 32:f5:cf:23:71:d3:7f:16:10:5d:6e:c7:25:82:ee:7f:a8:ec:27:80 + * Signature Algorithm: rsassaPss + * Hash Algorithm: sha512 + * Mask Algorithm: mgf1 with sha512 + * Salt Length: 0xBE + * Trailer Field: 0xBC (default) + * Issuer: CN = localhost + * Validity Not Before: Apr 8 06:01:37 2020 GMT + * Not After : Apr 3 06:01:37 2040 GMT + * Subject: CN = localhost + * Subject Public Key Info: Public + * Key Algorithm: rsassaPss + * RSA-PSS Public-Key: (2048 bit) + */ + private static final String PUBLIC_512 = "-----BEGIN CERTIFICATE-----\n" + + "MIIDaTCCAiCgAwIBAgIUMvXPI3HTfxYQXW7HJYLuf6jsJ4AwPgYJKoZIhvcNAQEK\n" + + "MDGgDTALBglghkgBZQMEAgOhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIDogQC\n" + + "AgC+MBQxEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0yMDAzMTcwNzI4MjZaFw00MDAz\n" + + "MTIwNzI4MjZaMBQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASAwCwYJKoZIhvcNAQEK\n" + + "A4IBDwAwggEKAoIBAQCzuWpxs8c0JPgSykN9LM+2k0RlexrxCAlkgHRpfLI8XpV4\n" + + "Ak3hx9a045Ym1yyskNw7FjZVfWNgmx5Z8qQZvBykCL2iwDoMLEfoJTcE3cZEppaz\n" + + "3PqRoOVhuUGqA4jOW8WGbMi7aq/9UfTQGikxMBD7aS/ExILtAcd0N173ZARWcP0s\n" + + "68bRDLmTYAclZTWDZee0gAl8MHMnXSFFPotSbZOEWz4RqhpCa49tcx1BHgto3lyc\n" + + "ofzOerHpilZ/zAqOVRF2qHoZKlYTsTcSK0mE2MAfV7fk40qHYkyKbKLJVj8L8Lmc\n" + + "AFUNTx07bLYymgtqa07ei+kaVTJdlzDWiREgN8MNAgMBAAGjUzBRMB0GA1UdDgQW\n" + + "BBRlbX8E0L89iIOjkgLpbL/WSbuxmTAfBgNVHSMEGDAWgBRlbX8E0L89iIOjkgLp\n" + + "bL/WSbuxmTAPBgNVHRMBAf8EBTADAQH/MD4GCSqGSIb3DQEBCjAxoA0wCwYJYIZI\n" + + "AWUDBAIDoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCA6IEAgIAvgOCAQEAaRTy\n" + + "CmQxYkS5qCGQeJun/lFVLVE83Sl2kCBaJCMJdBYw38H+6DknJx/sjZwD1vO+OGj6\n" + + "1yyzQF1dv2Y5qOUrJIgw1ODkxTLMCrdotVqClazX02VGvyRe7efbjii96/9hqtxt\n" + + "TZwN7+8wUX6sP91z1vXVYD5sfl/qum/cWAVJEyw32h7RpUeB0rCJcIUrNqnbBziw\n" + + "SRkZof1Q2b02JRO0Pb3jV3H1MV5Agt3cFCCdsmvVq595rmYRwVMtyzCxXHb8jm+N\n" + + "8Fzhl9pxCCd4KIOGDAvngFZAloVsCHt+BG8jPhSxOldnFM7xGrGss2lLJnmf3YSe\n" + + "EPDF7NvA9wKPz4oyRg==\n" + + "-----END CERTIFICATE-----"; + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/security/rsa/pss/SerializedPSSKey.java Mon Nov 16 13:36:36 2020 +0000 @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2020, 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 javax.crypto.Cipher.PRIVATE_KEY; +import static javax.crypto.Cipher.PUBLIC_KEY; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.security.InvalidKeyException; +import java.security.Key; +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.Signature; +import java.security.interfaces.RSAPrivateCrtKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.MGF1ParameterSpec; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.PSSParameterSpec; +import java.security.spec.RSAKeyGenParameterSpec; +import java.security.spec.RSAPrivateCrtKeySpec; +import java.security.spec.RSAPublicKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.Arrays; + +/** + * @test @bug 8242335 + * @summary Test RSASSA-PSS serialized keys + * @run main SerializedPSSKey + */ +public class SerializedPSSKey { + + private static final String ALGO = "RSASSA-PSS"; + private static final String OID = "1.2.840.113549.1.1.10"; + private static final String PROVIDER = "SunRsaSign"; + private static final int KEY_SIZE = 2048; + private static final byte[] DATA = "Test".getBytes(); + /** + * Digest algorithms to test w/ RSASSA-PSS signature algorithms + */ + private static final String[] DIGEST_ALG = { + "SHA-1", "SHA-224", "SHA-256", "SHA-384", + "SHA-512", "SHA-512/224", "SHA-512/256" + }; + + public static void main(String[] args) throws Exception { + + for (String algo : new String[]{ALGO, OID}) { + KeyPairGenerator kpg = KeyPairGenerator.getInstance(algo, PROVIDER); + + // Algorithm-Independent Initialization + kpg.initialize(KEY_SIZE); + KeyPair kp = kpg.generateKeyPair(); + test(algo, kp, null); + for (String digest : DIGEST_ALG) { + PSSParameterSpec params = genPSSParameter(digest, KEY_SIZE); + // RSAKeyGenParameterSpec#1 Initialization + kpg.initialize(new RSAKeyGenParameterSpec(KEY_SIZE, + RSAKeyGenParameterSpec.F4, params)); + KeyPair kp2 = kpg.generateKeyPair(); + test(algo, kp2, params); + } + System.out.println("Successful with : " + algo); + } + } + + private static void test(String algo, KeyPair orig, PSSParameterSpec params) + throws Exception { + + Key[] privs = manipulateKey(algo, PRIVATE_KEY, orig.getPrivate()); + Key[] pubs = manipulateKey(algo, PUBLIC_KEY, orig.getPublic()); + for (Key pri : privs) { + for (Key pub : pubs) { + testSerialize(orig, new KeyPair( + (PublicKey) pub, (PrivateKey) pri)); + if (params != null) { + testSignature(algo, (PublicKey) pub, + (PrivateKey) pri, params); + } + } + } + } + + private static void testSignature(String algo, PublicKey pub, + PrivateKey priv, PSSParameterSpec params) throws Exception { + + Signature sig = Signature.getInstance(algo, PROVIDER); + sig.setParameter(params); + sig.initSign(priv); + sig.update(DATA); + byte[] signature = sig.sign(); + + sig.initVerify(pub); + sig.update(DATA); + if (!sig.verify(signature)) { + throw new RuntimeException("Signature verification failed"); + } + // Re-verify the signature with another Signature instance + Signature sig1 = Signature.getInstance(algo, PROVIDER); + sig1.setParameter(params); + sig1.initVerify(pub); + sig1.update(DATA); + if (!sig1.verify(signature)) { + throw new RuntimeException("Signature verification failed"); + } + } + + private static Key[] manipulateKey(String algo, int type, Key key) + throws NoSuchAlgorithmException, InvalidKeySpecException, + NoSuchProviderException, InvalidKeyException { + + KeyFactory kf = KeyFactory.getInstance(algo, PROVIDER); + switch (type) { + case PUBLIC_KEY: + return new Key[]{ + kf.generatePublic(kf.getKeySpec(key, RSAPublicKeySpec.class)), + kf.generatePublic(new X509EncodedKeySpec(key.getEncoded())), + kf.generatePublic(new RSAPublicKeySpec( + ((RSAPublicKey) key).getModulus(), + ((RSAPublicKey) key).getPublicExponent(), + ((RSAPublicKey) key).getParams())), + kf.translateKey(key) + }; + case PRIVATE_KEY: + RSAPrivateCrtKey crtKey = (RSAPrivateCrtKey) key; + return new Key[]{ + kf.generatePrivate( + kf.getKeySpec(key, RSAPrivateCrtKeySpec.class)), + kf.generatePrivate(new PKCS8EncodedKeySpec(key.getEncoded())), + kf.generatePrivate(new RSAPrivateCrtKeySpec( + crtKey.getModulus(), + crtKey.getPublicExponent(), + crtKey.getPrivateExponent(), + crtKey.getPrimeP(), + crtKey.getPrimeQ(), + crtKey.getPrimeExponentP(), + crtKey.getPrimeExponentQ(), + crtKey.getCrtCoefficient(), + crtKey.getParams() + )), + kf.translateKey(key) + }; + } + throw new RuntimeException("We shouldn't reach here"); + } + + private static PSSParameterSpec genPSSParameter(String digest, int keySize) + throws NoSuchAlgorithmException { + + int dgLen = MessageDigest.getInstance(digest).getDigestLength(); + // pick a salt length based on the key length and digestAlgo + int saltLength = keySize / 8 - dgLen - 2; + if (saltLength < 0) { + System.out.printf("keysize: %s, digestLen: %s%n", keySize / 8, dgLen); + return null; + } + return new PSSParameterSpec(digest, "MGF1", new MGF1ParameterSpec(digest), + saltLength, PSSParameterSpec.TRAILER_FIELD_BC); + } + + /** + * Compare original KeyPair with transformed ones. + */ + private static void testKeyEquals(KeyPair orig, PublicKey pubKey, + PrivateKey priKey) { + + if (!orig.getPrivate().equals(priKey) + && orig.getPrivate().hashCode() != priKey.hashCode() + && !Arrays.equals(orig.getPrivate().getEncoded(), + priKey.getEncoded())) { + throw new RuntimeException( + "PrivateKey is not equal with transformed one"); + } + if (!orig.getPublic().equals(pubKey) + && orig.getPublic().hashCode() != pubKey.hashCode() + && !Arrays.equals(orig.getPublic().getEncoded(), + pubKey.getEncoded())) { + throw new RuntimeException( + "PublicKey is not equal with transformed one"); + } + } + + /** + * Test serialization of KeyPair and Keys it holds. + */ + private static void testSerialize(KeyPair orig, KeyPair transformed) + throws Exception { + + testKeyEquals(orig, transformed.getPublic(), transformed.getPrivate()); + PrivateKey serializedPrivate = deserializedCopy(transformed.getPrivate(), + PrivateKey.class); + PublicKey serializedPublic = deserializedCopy(transformed.getPublic(), + PublicKey.class); + testKeyEquals(orig, serializedPublic, serializedPrivate); + // Verify Serialized KeyPair instance. + KeyPair copy = deserializedCopy(transformed, KeyPair.class); + testKeyEquals(orig, copy.getPublic(), copy.getPrivate()); + } + + private static <T extends Object> T deserializedCopy(T orig, Class<T> type) + throws IOException, ClassNotFoundException { + return deserialize(serialize(orig), type); + } + + /** + * Deserialize the Key object. + */ + private static <T extends Object> T deserialize(byte[] serialized, + Class<T> type) throws IOException, ClassNotFoundException { + + T key = null; + try (ByteArrayInputStream bis = new ByteArrayInputStream(serialized); + ObjectInputStream ois = new ObjectInputStream(bis)) { + key = (T) ois.readObject(); + } + return key; + } + + /** + * Serialize the given Key object. + */ + private static <T extends Object> byte[] serialize(T key) + throws IOException { + + try (ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(bos)) { + oos.writeObject(key); + return bos.toByteArray(); + } + } + +}
--- a/test/sun/security/rsa/pss/SignatureTest2.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/sun/security/rsa/pss/SignatureTest2.java Mon Nov 16 13:36:36 2020 +0000 @@ -31,13 +31,15 @@ /** * @test - * @bug 8146293 - * @summary Create a signature for RSA and get its signed data. re-initiate - * the signature with the public key. The signature can be verified - * by acquired signed data. + * @bug 8146293 8238448 + * @summary Create a signature for RSASSA-PSS and get its signed data. + * re-initiate the signature with the public key. The signature + * can be verified by acquired signed data. * @run main SignatureTest2 768 * @run main SignatureTest2 1024 + * @run main SignatureTest2 1025 * @run main SignatureTest2 2048 + * @run main SignatureTest2 2049 * @run main/timeout=240 SignatureTest2 4096 */ public class SignatureTest2 {
--- a/test/sun/security/rsa/pss/SignatureTestPSS.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/sun/security/rsa/pss/SignatureTestPSS.java Mon Nov 16 13:36:36 2020 +0000 @@ -32,16 +32,18 @@ /** * @test - * @bug 8146293 - * @summary Create a signature for RSA and get its signed data. re-initiate - * the signature with the public key. The signature can be verified - * by acquired signed data. + * @bug 8146293 8238448 + * @summary Create a signature for RSASSA-PSS and get its signed data. + * re-initiate the signature with the public key. The signature + * can be verified by acquired signed data. * @library /lib * @build jdk.test.lib.SigTestUtil * @run main SignatureTestPSS 512 * @run main SignatureTestPSS 768 * @run main SignatureTestPSS 1024 + * @run main SignatureTestPSS 1025 * @run main SignatureTestPSS 2048 + * @run main SignatureTestPSS 2049 * @run main/timeout=240 SignatureTestPSS 4096 * @run main/timeout=240 SignatureTestPSS 5120 * @run main/timeout=480 SignatureTestPSS 6144
--- a/test/sun/text/resources/LocaleData Thu Nov 05 05:11:12 2020 +0000 +++ b/test/sun/text/resources/LocaleData Mon Nov 16 13:36:36 2020 +0000 @@ -1187,7 +1187,7 @@ FormatData/ar_JO/MonthNames/1=\u0634\u0628\u0627\u0637 FormatData/ar_JO/MonthNames/2=\u0622\u0630\u0627\u0631 FormatData/ar_JO/MonthNames/3=\u0646\u064a\u0633\u0627\u0646 -FormatData/ar_JO/MonthNames/4=\u0646\u0648\u0627\u0631 +FormatData/ar_JO/MonthNames/4=\u0623\u064a\u0627\u0631 FormatData/ar_JO/MonthNames/5=\u062d\u0632\u064a\u0631\u0627\u0646 FormatData/ar_JO/MonthNames/6=\u062a\u0645\u0648\u0632 FormatData/ar_JO/MonthNames/7=\u0622\u0628 @@ -1200,7 +1200,7 @@ FormatData/ar_JO/MonthAbbreviations/1=\u0634\u0628\u0627\u0637 FormatData/ar_JO/MonthAbbreviations/2=\u0622\u0630\u0627\u0631 FormatData/ar_JO/MonthAbbreviations/3=\u0646\u064a\u0633\u0627\u0646 -FormatData/ar_JO/MonthAbbreviations/4=\u0646\u0648\u0627\u0631 +FormatData/ar_JO/MonthAbbreviations/4=\u0623\u064a\u0627\u0631 FormatData/ar_JO/MonthAbbreviations/5=\u062d\u0632\u064a\u0631\u0627\u0646 FormatData/ar_JO/MonthAbbreviations/6=\u062a\u0645\u0648\u0632 FormatData/ar_JO/MonthAbbreviations/7=\u0622\u0628 @@ -1363,7 +1363,7 @@ FormatData/ar_LB/MonthNames/1=\u0634\u0628\u0627\u0637 FormatData/ar_LB/MonthNames/2=\u0622\u0630\u0627\u0631 FormatData/ar_LB/MonthNames/3=\u0646\u064a\u0633\u0627\u0646 -FormatData/ar_LB/MonthNames/4=\u0646\u0648\u0627\u0631 +FormatData/ar_LB/MonthNames/4=\u0623\u064a\u0627\u0631 FormatData/ar_LB/MonthNames/5=\u062d\u0632\u064a\u0631\u0627\u0646 FormatData/ar_LB/MonthNames/6=\u062a\u0645\u0648\u0632 FormatData/ar_LB/MonthNames/7=\u0622\u0628 @@ -1376,7 +1376,7 @@ FormatData/ar_LB/MonthAbbreviations/1=\u0634\u0628\u0627\u0637 FormatData/ar_LB/MonthAbbreviations/2=\u0622\u0630\u0627\u0631 FormatData/ar_LB/MonthAbbreviations/3=\u0646\u064a\u0633\u0627\u0646 -FormatData/ar_LB/MonthAbbreviations/4=\u0646\u0648\u0627\u0631 +FormatData/ar_LB/MonthAbbreviations/4=\u0623\u064a\u0627\u0631 FormatData/ar_LB/MonthAbbreviations/5=\u062d\u0632\u064a\u0631\u0627\u0646 FormatData/ar_LB/MonthAbbreviations/6=\u062a\u0645\u0648\u0632 FormatData/ar_LB/MonthAbbreviations/7=\u0622\u0628 @@ -1980,8 +1980,8 @@ FormatData/ar_SY/MonthNames/1=\u0634\u0628\u0627\u0637 FormatData/ar_SY/MonthNames/2=\u0622\u0630\u0627\u0631 FormatData/ar_SY/MonthNames/3=\u0646\u064a\u0633\u0627\u0646 -FormatData/ar_SY/MonthNames/4=\u0646\u0648\u0627\u0631\u0627\u0646 -FormatData/ar_SY/MonthNames/5=\u062d\u0632\u064a\u0631 +FormatData/ar_SY/MonthNames/4=\u0623\u064a\u0627\u0631 +FormatData/ar_SY/MonthNames/5=\u062d\u0632\u064a\u0631\u0627\u0646 FormatData/ar_SY/MonthNames/6=\u062a\u0645\u0648\u0632 FormatData/ar_SY/MonthNames/7=\u0622\u0628 FormatData/ar_SY/MonthNames/8=\u0623\u064a\u0644\u0648\u0644 @@ -1993,7 +1993,7 @@ FormatData/ar_SY/MonthAbbreviations/1=\u0634\u0628\u0627\u0637 FormatData/ar_SY/MonthAbbreviations/2=\u0622\u0630\u0627\u0631 FormatData/ar_SY/MonthAbbreviations/3=\u0646\u064a\u0633\u0627\u0646 -FormatData/ar_SY/MonthAbbreviations/4=\u0646\u0648\u0627\u0631 +FormatData/ar_SY/MonthAbbreviations/4=\u0623\u064a\u0627\u0631 FormatData/ar_SY/MonthAbbreviations/5=\u062d\u0632\u064a\u0631\u0627\u0646 FormatData/ar_SY/MonthAbbreviations/6=\u062a\u0645\u0648\u0632 FormatData/ar_SY/MonthAbbreviations/7=\u0622\u0628
--- a/test/sun/text/resources/LocaleDataTest.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/sun/text/resources/LocaleDataTest.java Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2020, 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,6 +38,7 @@ * 7114053 7074882 7040556 8013836 8021121 6192407 6931564 8027695 7090826 * 8017142 8037343 8055222 8042126 8074791 8075173 8080774 8129361 8145952 * 8164784 8187946 8195478 8193552 8202026 8204269 8208746 8209775 8234228 + * 8250665 * @summary Verify locale data * */
--- a/test/sun/tools/jconsole/ResourceCheckTest.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/sun/tools/jconsole/ResourceCheckTest.java Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2020, 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
--- a/test/sun/tools/jconsole/ResourceCheckTest.sh Thu Nov 05 05:11:12 2020 +0000 +++ b/test/sun/tools/jconsole/ResourceCheckTest.sh Mon Nov 16 13:36:36 2020 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2004, 2020, 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,87 +26,4 @@ # @summary jtreg test ResourceCheckTest.java must be # able to find jconsole.jar # -# @run shell ResourceCheckTest.sh - -# Beginning of subroutines: -status=1 - -#Call this from anywhere to fail the test with an error message -# usage: fail "reason why the test failed" -fail() - { echo "The test failed :-(" - echo "$*" 1>&2 - echo "exit status was $status" - exit $status - } #end of fail() - -#Call this from anywhere to pass the test with a message -# usage: pass "reason why the test passed if applicable" -pass() - { echo "The test passed!!!" - echo "$*" 1>&2 - exit 0 - } #end of pass() - -# end of subroutines - -# The beginning of the script proper - -OS=`uname -s` -case "$OS" in - SunOS | Linux | Darwin | AIX) - PATHSEP=":" - ;; - - Windows* | CYGWIN*) - PATHSEP=";" - ;; - - # catch all other OSs - * ) - echo "Unrecognized system! $OS" - fail "Unrecognized system! $OS" - ;; -esac - -TARGETCLASS="ResourceCheckTest" -if [ -z "${TESTJAVA}" ] ; then - # TESTJAVA is not set, so the test is running stand-alone. - # TESTJAVA holds the path to the root directory of the build of the JDK - # to be tested. That is, any java files run explicitly in this shell - # should use TESTJAVA in the path to the java interpreter. - # So, we'll set this to the JDK spec'd on the command line. If none - # is given on the command line, tell the user that and use a default. - # THIS IS THE JDK BEING TESTED. - if [ -n "$1" ] ; then - TESTJAVA=$1 - else - TESTJAVA=$JAVA_HOME - fi - TESTSRC=. - TESTCLASSES=. - #Deal with .class files: -fi -# -echo "JDK under test is: $TESTJAVA" -# -CP="-classpath ${TESTCLASSES}${PATHSEP}${TESTJAVA}/lib/jconsole.jar" -# Compile the test class using the classpath we need: -# -env -# -set -vx -# -#Compile. jconsole.jar is required on the classpath. -${TESTJAVA}/bin/javac -d "${TESTCLASSES}" ${CP} -g \ - "${TESTSRC}"/"${TARGETCLASS}".java -# -#Run the test class, again with the classpath we need: -${TESTJAVA}/bin/java ${CP} ${TARGETCLASS} -status=$? -echo "test status was: $status" -if [ $status -eq "0" ]; - then pass "" - - else fail "unspecified test failure" -fi +# @run shell common.sh ResourceCheckTest
--- a/test/sun/tools/jconsole/WorkerDeadlockTest.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/sun/tools/jconsole/WorkerDeadlockTest.java Mon Nov 16 13:36:36 2020 +0000 @@ -22,12 +22,12 @@ */ /** - * @test + * This isn't the test case: WorkerDeadlockTest.sh is. + * Refer to WorkerDeaklockTest.sh when running this test. + * * @bug 8236872 * @summary The test tries to catch a deadlock by creating a new worker, * starting it, adding an empty job and immediately stopping it. - * @modules jdk.jconsole/sun.tools.jconsole - * @run main WorkerDeadlockTest */ import sun.tools.jconsole.Worker;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/tools/jconsole/WorkerDeadlockTest.sh Mon Nov 16 13:36:36 2020 +0000 @@ -0,0 +1,29 @@ +# +# Copyright (c) 2020, Huawei Technologies Co. Ltd. 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 8254683 +# @summary jtreg test WorkerDeadlockTest.java must be +# able to find jconsole.jar +# +# @run shell common.sh WorkerDeadlockTest
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/tools/jconsole/common.sh Mon Nov 16 13:36:36 2020 +0000 @@ -0,0 +1,105 @@ +# +# Copyright (c) 2004, 2020, 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. +# + +# Beginning of subroutines: +status=1 + +#Call this from anywhere to fail the test with an error message +# usage: fail "reason why the test failed" +fail() + { echo "The test failed :-(" + echo "$*" 1>&2 + echo "exit status was $status" + exit $status + } #end of fail() + +#Call this from anywhere to pass the test with a message +# usage: pass "reason why the test passed if applicable" +pass() + { echo "The test passed!!!" + echo "$*" 1>&2 + exit 0 + } #end of pass() + +# end of subroutines + +# The beginning of the script proper + +OS=`uname -s` +case "$OS" in + SunOS | Linux | Darwin | AIX) + PATHSEP=":" + ;; + + Windows* | CYGWIN*) + PATHSEP=";" + ;; + + # catch all other OSs + * ) + echo "Unrecognized system! $OS" + fail "Unrecognized system! $OS" + ;; +esac + +TARGETCLASS=$1 +if [ -z "${TESTJAVA}" ] ; then + # TESTJAVA is not set, so the test is running stand-alone. + # TESTJAVA holds the path to the root directory of the build of the JDK + # to be tested. That is, any java files run explicitly in this shell + # should use TESTJAVA in the path to the java interpreter. + # So, we'll set this to the JDK spec'd on the command line. If none + # is given on the command line, tell the user that and use a default. + # THIS IS THE JDK BEING TESTED. + if [ -n "$1" ] ; then + TESTJAVA=$1 + else + TESTJAVA=$JAVA_HOME + fi + TESTSRC=. + TESTCLASSES=. + #Deal with .class files: +fi +# +echo "JDK under test is: $TESTJAVA" +# +CP="-classpath ${TESTCLASSES}${PATHSEP}${TESTJAVA}/lib/jconsole.jar" +# Compile the test class using the classpath we need: +# +env +# +set -vx +# +#Compile. jconsole.jar is required on the classpath. +${TESTJAVA}/bin/javac -d "${TESTCLASSES}" ${CP} -g \ + "${TESTSRC}"/"${TARGETCLASS}".java +# +#Run the test class, again with the classpath we need: +${TESTJAVA}/bin/java ${CP} ${TARGETCLASS} +status=$? +echo "test status was: $status" +if [ $status -eq "0" ]; + then pass "" + + else fail "unspecified test failure" +fi
--- a/test/sun/util/calendar/zi/TestZoneInfo310.java Thu Nov 05 05:11:12 2020 +0000 +++ b/test/sun/util/calendar/zi/TestZoneInfo310.java Mon Nov 16 13:36:36 2020 +0000 @@ -47,7 +47,7 @@ String TESTDIR = System.getProperty("test.dir", "."); String SRCDIR = System.getProperty("test.src", "."); String tzdir = SRCDIR + File.separator + "tzdata"; - String tzfiles = "africa antarctica asia australasia europe northamerica pacificnew southamerica backward etcetera systemv"; + String tzfiles = "africa antarctica asia australasia europe northamerica southamerica backward etcetera"; String jdk_tzdir = SRCDIR + File.separator + "tzdata_jdk"; String jdk_tzfiles = "gmt jdk11_backward"; String zidir = TESTDIR + File.separator + "zi"; @@ -194,8 +194,9 @@ // test getAvailableIDs(raw); zids_new = TimeZone.getAvailableIDs(-8 * 60 * 60 * 1000); - //Arrays.sort(zids_new); + Arrays.sort(zids_new); zids_old = ZoneInfoOld.getAvailableIDs(-8 * 60 * 60 * 1000); + Arrays.sort(zids_old); if (!Arrays.equals(zids_new, zids_old)) { System.out.println("------------------------"); System.out.println("NEW.getAvailableIDs(-8:00)");
--- a/test/sun/util/calendar/zi/tzdata/VERSION Thu Nov 05 05:11:12 2020 +0000 +++ b/test/sun/util/calendar/zi/tzdata/VERSION Mon Nov 16 13:36:36 2020 +0000 @@ -21,4 +21,4 @@ # or visit www.oracle.com if you need additional information or have any # questions. # -tzdata2020a +tzdata2020b
--- a/test/sun/util/calendar/zi/tzdata/africa Thu Nov 05 05:11:12 2020 +0000 +++ b/test/sun/util/calendar/zi/tzdata/africa Mon Nov 16 13:36:36 2020 +0000 @@ -87,7 +87,7 @@ # Corrections are welcome. # Algeria -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Algeria 1916 only - Jun 14 23:00s 1:00 S Rule Algeria 1916 1919 - Oct Sun>=1 23:00s 0 - Rule Algeria 1917 only - Mar 24 23:00s 1:00 S @@ -110,10 +110,9 @@ Rule Algeria 1978 only - Sep 22 3:00 0 - Rule Algeria 1980 only - Apr 25 0:00 1:00 S Rule Algeria 1980 only - Oct 31 2:00 0 - -# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's -# more precise 0:09:21. +# See Europe/Paris for PMT-related transitions. # Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01 +Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 16 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 @@ -199,7 +198,7 @@ # Egypt was mean noon at the Great Pyramid, 2:04:30.5, but apparently this # did not apply to Cairo, Alexandria, or Port Said. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Egypt 1940 only - Jul 15 0:00 1:00 S Rule Egypt 1940 only - Oct 1 0:00 0 - Rule Egypt 1941 only - Apr 15 0:00 1:00 S @@ -434,7 +433,7 @@ # now Ghana observed different DST regimes in different years. For # lack of better info, use Shanks except treat the minus sign as a # typo, and assume DST started in 1920 not 1936. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Ghana 1920 1942 - Sep 1 0:00 0:20 - Rule Ghana 1920 1942 - Dec 31 0:00 0 - # Zone NAME STDOFF RULES FORMAT [UNTIL] @@ -524,7 +523,7 @@ # From Paul Eggert (2013-10-25): # For now, assume they're reverting to the pre-2012 rules of permanent UT +02. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Libya 1951 only - Oct 14 2:00 1:00 S Rule Libya 1952 only - Jan 1 0:00 0 - Rule Libya 1953 only - Oct 9 2:00 1:00 S @@ -647,7 +646,7 @@ # "The trial ended on March 29, 2009, when the clocks moved back by one hour # at 2am (or 02:00) local time..." -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Mauritius 1982 only - Oct 10 0:00 1:00 - Rule Mauritius 1983 only - Mar 21 0:00 0 - Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 - @@ -898,17 +897,30 @@ # https://maroc-diplomatique.net/maroc-le-retour-a-lheure-gmt-est-prevu-dimanche-prochain/ # http://aujourdhui.ma/actualite/gmt1-retour-a-lheure-normale-dimanche-prochain-1 # -# From Paul Eggert (2020-04-14): +# From Milamber (2020-05-31) +# In Morocco (where I live), the end of Ramadan (Arabic month) is followed by +# the Eid al-Fitr, and concretely it's 1 or 2 day offs for the people (with +# traditional visiting of family, big lunches/dinners, etc.). So for this +# year the astronomical calculations don't include the following 2 days off in +# the calc. These 2 days fall in a Sunday/Monday, so it's not acceptable by +# people to have a time shift during these 2 days off. Perhaps you can modify +# the (predicted) rules for next years: if the end of Ramadan is a (probable) +# Friday or Saturday (and so the 2 days off are on a weekend), the next time +# shift will be the next weekend. +# +# From Paul Eggert (2020-05-31): # For now, guess that in the future Morocco will fall back at 03:00 # the last Sunday before Ramadan, and spring forward at 02:00 the -# first Sunday after the day after Ramadan. To implement this, -# transition dates for 2021 through 2087 were determined by running -# the following program under GNU Emacs 26.3. -# (let ((islamic-year 1442)) +# first Sunday after two days after Ramadan. To implement this, +# transition dates and times for 2019 through 2087 were determined by +# running the following program under GNU Emacs 26.3. (This algorithm +# also produces the correct transition dates for 2016 through 2018, +# though the times differ due to Morocco's time zone change in 2018.) +# (let ((islamic-year 1440)) # (require 'cal-islam) # (while (< islamic-year 1511) # (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year))) -# (b (1+ (calendar-islamic-to-absolute (list 10 1 islamic-year)))) +# (b (+ 2 (calendar-islamic-to-absolute (list 10 1 islamic-year)))) # (sunday 0)) # (while (/= sunday (mod (setq a (1- a)) 7))) # (while (/= sunday (mod b 7)) @@ -923,7 +935,7 @@ # (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b))))) # (setq islamic-year (+ 1 islamic-year)))) -# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Morocco 1939 only - Sep 12 0:00 1:00 - Rule Morocco 1939 only - Nov 19 0:00 0 - Rule Morocco 1940 only - Feb 25 0:00 1:00 - @@ -974,7 +986,7 @@ Rule Morocco 2022 only - Mar 27 3:00 0 - Rule Morocco 2022 only - May 8 2:00 1:00 - Rule Morocco 2023 only - Mar 19 3:00 0 - -Rule Morocco 2023 only - Apr 23 2:00 1:00 - +Rule Morocco 2023 only - Apr 30 2:00 1:00 - Rule Morocco 2024 only - Mar 10 3:00 0 - Rule Morocco 2024 only - Apr 14 2:00 1:00 - Rule Morocco 2025 only - Feb 23 3:00 0 - @@ -990,7 +1002,7 @@ Rule Morocco 2029 only - Dec 30 3:00 0 - Rule Morocco 2030 only - Feb 10 2:00 1:00 - Rule Morocco 2030 only - Dec 22 3:00 0 - -Rule Morocco 2031 only - Jan 26 2:00 1:00 - +Rule Morocco 2031 only - Feb 2 2:00 1:00 - Rule Morocco 2031 only - Dec 14 3:00 0 - Rule Morocco 2032 only - Jan 18 2:00 1:00 - Rule Morocco 2032 only - Nov 28 3:00 0 - @@ -1006,7 +1018,7 @@ Rule Morocco 2037 only - Oct 4 3:00 0 - Rule Morocco 2037 only - Nov 15 2:00 1:00 - Rule Morocco 2038 only - Sep 26 3:00 0 - -Rule Morocco 2038 only - Oct 31 2:00 1:00 - +Rule Morocco 2038 only - Nov 7 2:00 1:00 - Rule Morocco 2039 only - Sep 18 3:00 0 - Rule Morocco 2039 only - Oct 23 2:00 1:00 - Rule Morocco 2040 only - Sep 2 3:00 0 - @@ -1022,7 +1034,7 @@ Rule Morocco 2045 only - Jul 9 3:00 0 - Rule Morocco 2045 only - Aug 20 2:00 1:00 - Rule Morocco 2046 only - Jul 1 3:00 0 - -Rule Morocco 2046 only - Aug 5 2:00 1:00 - +Rule Morocco 2046 only - Aug 12 2:00 1:00 - Rule Morocco 2047 only - Jun 23 3:00 0 - Rule Morocco 2047 only - Jul 28 2:00 1:00 - Rule Morocco 2048 only - Jun 7 3:00 0 - @@ -1038,7 +1050,7 @@ Rule Morocco 2053 only - Apr 13 3:00 0 - Rule Morocco 2053 only - May 25 2:00 1:00 - Rule Morocco 2054 only - Apr 5 3:00 0 - -Rule Morocco 2054 only - May 10 2:00 1:00 - +Rule Morocco 2054 only - May 17 2:00 1:00 - Rule Morocco 2055 only - Mar 28 3:00 0 - Rule Morocco 2055 only - May 2 2:00 1:00 - Rule Morocco 2056 only - Mar 12 3:00 0 - @@ -1054,7 +1066,7 @@ Rule Morocco 2061 only - Jan 16 3:00 0 - Rule Morocco 2061 only - Feb 27 2:00 1:00 - Rule Morocco 2062 only - Jan 8 3:00 0 - -Rule Morocco 2062 only - Feb 12 2:00 1:00 - +Rule Morocco 2062 only - Feb 19 2:00 1:00 - Rule Morocco 2062 only - Dec 31 3:00 0 - Rule Morocco 2063 only - Feb 4 2:00 1:00 - Rule Morocco 2063 only - Dec 16 3:00 0 - @@ -1070,7 +1082,7 @@ Rule Morocco 2068 only - Oct 21 3:00 0 - Rule Morocco 2068 only - Dec 2 2:00 1:00 - Rule Morocco 2069 only - Oct 13 3:00 0 - -Rule Morocco 2069 only - Nov 17 2:00 1:00 - +Rule Morocco 2069 only - Nov 24 2:00 1:00 - Rule Morocco 2070 only - Oct 5 3:00 0 - Rule Morocco 2070 only - Nov 9 2:00 1:00 - Rule Morocco 2071 only - Sep 20 3:00 0 - @@ -1086,7 +1098,7 @@ Rule Morocco 2076 only - Jul 26 3:00 0 - Rule Morocco 2076 only - Sep 6 2:00 1:00 - Rule Morocco 2077 only - Jul 18 3:00 0 - -Rule Morocco 2077 only - Aug 22 2:00 1:00 - +Rule Morocco 2077 only - Aug 29 2:00 1:00 - Rule Morocco 2078 only - Jul 10 3:00 0 - Rule Morocco 2078 only - Aug 14 2:00 1:00 - Rule Morocco 2079 only - Jun 25 3:00 0 - @@ -1096,13 +1108,13 @@ Rule Morocco 2081 only - Jun 1 3:00 0 - Rule Morocco 2081 only - Jul 13 2:00 1:00 - Rule Morocco 2082 only - May 24 3:00 0 - -Rule Morocco 2082 only - Jun 28 2:00 1:00 - +Rule Morocco 2082 only - Jul 5 2:00 1:00 - Rule Morocco 2083 only - May 16 3:00 0 - Rule Morocco 2083 only - Jun 20 2:00 1:00 - Rule Morocco 2084 only - Apr 30 3:00 0 - Rule Morocco 2084 only - Jun 11 2:00 1:00 - Rule Morocco 2085 only - Apr 22 3:00 0 - -Rule Morocco 2085 only - May 27 2:00 1:00 - +Rule Morocco 2085 only - Jun 3 2:00 1:00 - Rule Morocco 2086 only - Apr 14 3:00 0 - Rule Morocco 2086 only - May 19 2:00 1:00 - Rule Morocco 2087 only - Mar 30 3:00 0 - @@ -1203,7 +1215,7 @@ # Use plain "WAT" and "CAT" for the time zone abbreviations, to be compatible # with Namibia's neighbors. -# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S # Vanguard section, for zic and other parsers that support negative DST. #Rule Namibia 1994 only - Mar 21 0:00 -1:00 WAT #Rule Namibia 1994 2017 - Sep Sun>=1 2:00 0 CAT @@ -1326,7 +1338,7 @@ # See Africa/Nairobi. # South Africa -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule SA 1942 1943 - Sep Sun>=15 2:00 1:00 - Rule SA 1943 1944 - Mar Sun>=15 2:00 0 - # Zone NAME STDOFF RULES FORMAT [UNTIL] @@ -1359,7 +1371,7 @@ # Abdalla of NTC, archived at: # https://mm.icann.org/pipermail/tz/2017-October/025333.html -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Sudan 1970 only - May 1 0:00 1:00 S Rule Sudan 1970 1985 - Oct 15 0:00 0 - Rule Sudan 1971 only - Apr 30 0:00 1:00 S @@ -1447,7 +1459,7 @@ # http://www.almadenahnews.com/newss/news.php?c=118&id=38036 # http://www.worldtimezone.com/dst_news/dst_news_tunis02.html -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Tunisia 1939 only - Apr 15 23:00s 1:00 S Rule Tunisia 1939 only - Nov 18 23:00s 0 - Rule Tunisia 1940 only - Feb 25 23:00s 1:00 S @@ -1474,9 +1486,7 @@ Rule Tunisia 2006 2008 - Mar lastSun 2:00s 1:00 S Rule Tunisia 2006 2008 - Oct lastSun 2:00s 0 - -# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's -# more precise 0:09:21. -# Shanks & Pottenger say the 1911 switch was on Mar 9; go with Howse's Mar 11. +# See Europe/Paris for PMT-related transitions. # Zone NAME STDOFF RULES FORMAT [UNTIL] Zone Africa/Tunis 0:40:44 - LMT 1881 May 12 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
--- a/test/sun/util/calendar/zi/tzdata/antarctica Thu Nov 05 05:11:12 2020 +0000 +++ b/test/sun/util/calendar/zi/tzdata/antarctica Mon Nov 16 13:36:36 2020 +0000 @@ -93,15 +93,30 @@ # Australian Antarctica Division informed us that Casey changed time # zone to UTC+11 in "the morning of 22nd October 2016". +# From Steffen Thorsen (2020-10-02, as corrected): +# Based on information we have received from the Australian Antarctic +# Division, Casey station and Macquarie Island station will move to Tasmanian +# daylight savings time on Sunday 4 October. This will take effect from 0001 +# hrs on Sunday 4 October 2020 and will mean Casey and Macquarie Island will +# be on the same time zone as Hobart. Some past dates too for this 3 hour +# time change back and forth between UTC+8 and UTC+11 for Casey: +# - 2018 Oct 7 4:00 - 2019 Mar 17 3:00 - 2019 Oct 4 3:00 - 2020 Mar 8 3:00 +# and now - 2020 Oct 4 0:01 + # Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone Antarctica/Casey 0 - -00 1969 - 8:00 - +08 2009 Oct 18 2:00 +Zone Antarctica/Casey 0 - -00 1969 + 8:00 - +08 2009 Oct 18 2:00 11:00 - +11 2010 Mar 5 2:00 - 8:00 - +08 2011 Oct 28 2:00 + 8:00 - +08 2011 Oct 28 2:00 11:00 - +11 2012 Feb 21 17:00u - 8:00 - +08 2016 Oct 22 + 8:00 - +08 2016 Oct 22 11:00 - +11 2018 Mar 11 4:00 - 8:00 - +08 + 8:00 - +08 2018 Oct 7 4:00 + 11:00 - +11 2019 Mar 17 3:00 + 8:00 - +08 2019 Oct 4 3:00 + 11:00 - +11 2020 Mar 8 3:00 + 8:00 - +08 2020 Oct 4 0:01 + 11:00 - +11 Zone Antarctica/Davis 0 - -00 1957 Jan 13 7:00 - +07 1964 Nov 0 - -00 1969 Feb @@ -247,7 +262,7 @@ # suggested by Bengt-Inge Larsson comment them out for now, and approximate # with only UTC and CEST. Uncomment them when 2014b is more prevalent. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S #Rule Troll 2005 max - Mar 1 1:00u 1:00 +01 Rule Troll 2005 max - Mar lastSun 1:00u 2:00 +02 #Rule Troll 2005 max - Oct lastSun 1:00u 1:00 +01
--- a/test/sun/util/calendar/zi/tzdata/asia Thu Nov 05 05:11:12 2020 +0000 +++ b/test/sun/util/calendar/zi/tzdata/asia Mon Nov 16 13:36:36 2020 +0000 @@ -93,7 +93,7 @@ ############################################################################### # These rules are stolen from the 'europe' file. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - 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 - Rule EUAsia 1996 max - Oct lastSun 1:00u 0 - @@ -137,7 +137,7 @@ # or # (brief) # http://www.worldtimezone.com/dst_news/dst_news_armenia03.html -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Armenia 2011 only - Mar lastSun 2:00s 1:00 - Rule Armenia 2011 only - Oct lastSun 2:00s 0 - # Zone NAME STDOFF RULES FORMAT [UNTIL] @@ -163,7 +163,7 @@ # http://vestnikkavkaza.net/news/Azerbaijani-Cabinet-of-Ministers-cancels-daylight-saving-time.html # http://en.apa.az/xeber_azerbaijan_abolishes_daylight_savings_ti_240862.html -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Azer 1997 2015 - Mar lastSun 4:00 1:00 - Rule Azer 1997 2015 - Oct lastSun 5:00 0 - # Zone NAME STDOFF RULES FORMAT [UNTIL] @@ -250,7 +250,7 @@ # http://www.thedailystar.net/newDesign/latest_news.php?nid=22817 # http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Dhaka 2009 only - Jun 19 23:00 1:00 - Rule Dhaka 2009 only - Dec 31 24:00 0 - @@ -326,7 +326,7 @@ # generally esteemed a success, it was announced early in 1920 that it would # not be repeated." # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Shang 1919 only - Apr 12 24:00 1:00 D Rule Shang 1919 only - Sep 30 24:00 0 S @@ -422,7 +422,7 @@ # the Yangtze river delta area during that period of time although the scope # of such use will need to be investigated to determine. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Shang 1940 only - Jun 1 0:00 1:00 D Rule Shang 1940 only - Oct 12 24:00 0 S Rule Shang 1941 only - Mar 15 0:00 1:00 D @@ -485,7 +485,7 @@ # to begin on 17 April. # http://data.people.com.cn/pic/101p/1988/04/1988041201.jpg -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule PRC 1986 only - May 4 2:00 1:00 D Rule PRC 1986 1991 - Sep Sun>=11 2:00 0 S Rule PRC 1987 1991 - Apr Sun>=11 2:00 1:00 D @@ -869,7 +869,7 @@ # or dates for the 1942 and 1945 transitions. # The Japanese occupation of Hong Kong began 1941-12-25. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule HK 1946 only - Apr 21 0:00 1:00 S Rule HK 1946 only - Dec 1 3:30s 0 - Rule HK 1947 only - Apr 13 3:30s 1:00 S @@ -996,7 +996,7 @@ # 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 NAME FROM TO - IN ON AT SAVE LETTER/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 @@ -1122,7 +1122,7 @@ # The 1904 decree says that Macau changed from the meridian of # Fortaleza do Monte, presumably the basis for the 7:34:10 for LMT. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Macau 1942 1943 - Apr 30 23:00 1:00 - Rule Macau 1942 only - Nov 17 23:00 0 - Rule Macau 1943 only - Sep 30 23:00 0 S @@ -1180,7 +1180,7 @@ # Cyprus to remain united in time. Cyprus Mail 2017-10-17. # https://cyprus-mail.com/2017/10/17/cyprus-remain-united-time/ -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Cyprus 1975 only - Apr 13 0:00 1:00 S Rule Cyprus 1975 only - Oct 12 0:00 0 - Rule Cyprus 1976 only - May 15 0:00 1:00 S @@ -1557,7 +1557,7 @@ # be changed back to its previous state on the 24 hours of the # thirtieth day of Shahrivar. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Iran 1978 1980 - Mar 20 24:00 1:00 - Rule Iran 1978 only - Oct 20 24:00 0 - Rule Iran 1979 only - Sep 18 24:00 0 - @@ -1699,7 +1699,7 @@ # We have published a short article in English about the change: # https://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Iraq 1982 only - May 1 0:00 1:00 - Rule Iraq 1982 1984 - Oct 1 0:00 0 - Rule Iraq 1983 only - Mar 31 0:00 1:00 - @@ -1722,6 +1722,10 @@ # Israel +# For more info about the motivation for DST in Israel, see: +# Barak Y. Israel's Daylight Saving Time controversy. Israel Affairs. +# 2020-08-11. https://doi.org/10.1080/13537121.2020.1806564 + # From Ephraim Silverberg (2001-01-11): # # I coined "IST/IDT" circa 1988. Until then there were three @@ -1743,7 +1747,7 @@ # family is from India). # From Shanks & Pottenger: -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Zion 1940 only - Jun 1 0:00 1:00 D Rule Zion 1942 1944 - Nov 1 0:00 0 S Rule Zion 1943 only - Apr 1 2:00 1:00 D @@ -1835,7 +1839,7 @@ # (except in 2002) is three nights before Yom Kippur [Day of Atonement] # (the eve of the 7th of Tishrei in the lunar Hebrew calendar). -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Zion 1989 only - Apr 30 0:00 1:00 D Rule Zion 1989 only - Sep 3 0:00 0 S Rule Zion 1990 only - Mar 25 0:00 1:00 D @@ -1851,7 +1855,7 @@ # Ministry of Interior, Jerusalem, Israel. The spokeswoman can be reached by # calling the office directly at 972-2-6701447 or 972-2-6701448. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Zion 1994 only - Apr 1 0:00 1:00 D Rule Zion 1994 only - Aug 28 0:00 0 S Rule Zion 1995 only - Mar 31 0:00 1:00 D @@ -1871,7 +1875,7 @@ # # where YYYY is the relevant year. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Zion 1996 only - Mar 15 0:00 1:00 D Rule Zion 1996 only - Sep 16 0:00 0 S Rule Zion 1997 only - Mar 21 0:00 1:00 D @@ -1894,7 +1898,7 @@ # # ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2000-2004.ps.gz -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Zion 2000 only - Apr 14 2:00 1:00 D Rule Zion 2000 only - Oct 6 1:00 0 S Rule Zion 2001 only - Apr 9 1:00 1:00 D @@ -1916,7 +1920,7 @@ # # ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2005+beyond.ps -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Zion 2005 2012 - Apr Fri<=1 2:00 1:00 D Rule Zion 2005 only - Oct 9 2:00 0 S Rule Zion 2006 only - Oct 1 2:00 0 S @@ -1936,7 +1940,7 @@ # As of 2013, DST starts at 02:00 on the Friday before the last Sunday # in March. DST ends at 02:00 on the last Sunday of October. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Zion 2013 max - Mar Fri>=23 2:00 1:00 D Rule Zion 2013 max - Oct lastSun 2:00 0 S @@ -2036,7 +2040,7 @@ # do in any POSIX or C platform. The "25:00" assumes zic from 2007 or later, # which should be safe now. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Japan 1948 only - May Sat>=1 24:00 1:00 D Rule Japan 1948 1951 - Sep Sun>=9 1:00 0 S Rule Japan 1949 only - Apr Sat>=1 24:00 1:00 D @@ -2113,7 +2117,7 @@ # From Paul Eggert (2013-12-11): # As Steffen suggested, consider the past 21-month experiment to be DST. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Jordan 1973 only - Jun 6 0:00 1:00 S Rule Jordan 1973 1975 - Oct 1 0:00 0 - Rule Jordan 1974 1977 - May 1 0:00 1:00 S @@ -2439,7 +2443,7 @@ # Our government cancels daylight saving time 6th of August 2005. # From 2005-08-12 our GMT-offset is +6, w/o any daylight saving. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Kyrgyz 1992 1996 - Apr Sun>=7 0:00s 1:00 - Rule Kyrgyz 1992 1996 - Sep lastSun 0:00 0 - Rule Kyrgyz 1997 2005 - Mar lastSun 2:30 1:00 - @@ -2495,7 +2499,7 @@ # follow and continued to use GMT+9:00 for interoperability. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule ROK 1948 only - Jun 1 0:00 1:00 D Rule ROK 1948 only - Sep 12 24:00 0 S Rule ROK 1949 only - Apr 3 0:00 1:00 D @@ -2583,7 +2587,7 @@ # Lebanon -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Lebanon 1920 only - Mar 28 0:00 1:00 S Rule Lebanon 1920 only - Oct 25 0:00 0 - Rule Lebanon 1921 only - Apr 3 0:00 1:00 S @@ -2613,7 +2617,7 @@ 2:00 Lebanon EE%sT # Malaysia -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule NBorneo 1935 1941 - Sep 14 0:00 0:20 - Rule NBorneo 1935 1941 - Dec 14 0:00 0 - # @@ -2758,7 +2762,7 @@ # September daylight saving time ends. Source: # http://zasag.mn/news/view/8969 -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Mongol 1983 1984 - Apr 1 0:00 1:00 - Rule Mongol 1983 only - Oct 1 0:00 0 - # Shanks & Pottenger and IATA SSIM say 1990s switches occurred at 00:00, @@ -2946,7 +2950,7 @@ # "People laud PM's announcement to end DST" # http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=99374&Itemid=2 -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Pakistan 2002 only - Apr Sun>=2 0:00 1:00 S Rule Pakistan 2002 only - Oct Sun>=2 0:00 0 - Rule Pakistan 2008 only - Jun 1 0:00 1:00 S @@ -3248,7 +3252,7 @@ # From Tim Parenti (2016-10-19): # Predict fall transitions on October's last Saturday at 01:00 from now on. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule EgyptAsia 1957 only - May 10 0:00 1:00 S Rule EgyptAsia 1957 1958 - Oct 1 0:00 0 - Rule EgyptAsia 1958 only - May 1 0:00 1:00 S @@ -3348,7 +3352,7 @@ # influence of the sources. There is no current abbreviation for DST, # so use "PDT", the usual American style. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Phil 1936 only - Nov 1 0:00 1:00 D Rule Phil 1937 only - Feb 1 0:00 0 S Rule Phil 1954 only - Apr 12 0:00 1:00 D @@ -3496,7 +3500,7 @@ 5:30 - +0530 # Syria -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Syria 1920 1923 - Apr Sun>=15 2:00 1:00 S Rule Syria 1920 1923 - Oct Sun>=1 2:00 0 - Rule Syria 1962 only - Apr 29 2:00 1:00 S
--- a/test/sun/util/calendar/zi/tzdata/australasia Thu Nov 05 05:11:12 2020 +0000 +++ b/test/sun/util/calendar/zi/tzdata/australasia Mon Nov 16 13:36:36 2020 +0000 @@ -36,7 +36,7 @@ # 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 NAME FROM TO - IN ON AT SAVE LETTER/S 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 @@ -55,7 +55,7 @@ 9:30 Aus AC%sT # Western Australia # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S 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 @@ -93,7 +93,7 @@ # applies to all of the Whitsundays. # http://www.australia.gov.au/about-australia/australian-story/austn-islands # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S 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 @@ -109,7 +109,7 @@ 10:00 Holiday AE%sT # South Australia -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S 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 @@ -137,7 +137,7 @@ # 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 NAME FROM TO - IN ON AT SAVE LETTER/S 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 @@ -170,7 +170,7 @@ 10:00 AT AE%sT # Victoria -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S 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 @@ -191,7 +191,7 @@ 10:00 AV AE%sT # New South Wales -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S 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 @@ -220,7 +220,7 @@ 9:30 AS AC%sT # Lord Howe Island -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - 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 - @@ -275,8 +275,9 @@ 10:00 Aus AE%sT 1919 Apr 1 0:00s 0 - -00 1948 Mar 25 10:00 Aus AE%sT 1967 - 10:00 AT AE%sT 2010 Apr 4 3:00 - 11:00 - +11 + 10:00 AT AE%sT 2010 + 10:00 1:00 AEDT 2011 + 10:00 AT AE%sT # Christmas # Zone NAME STDOFF RULES FORMAT [UNTIL] @@ -403,7 +404,7 @@ # From Michael Deckers (2019-08-06): # https://www.laws.gov.fj/LawsAsMade/downloadfile/848 -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 - Rule Fiji 1999 2000 - Feb lastSun 3:00 0 - Rule Fiji 2009 only - Nov 29 2:00 1:00 - @@ -432,7 +433,7 @@ # Guam -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S # http://guamlegislature.com/Public_Laws_5th/PL05-025.pdf # http://documents.guam.gov/wp-content/uploads/E.O.-59-7-Guam-Daylight-Savings-Time-May-6-1959.pdf Rule Guam 1959 only - Jun 27 2:00 1:00 D @@ -543,7 +544,7 @@ 12:00 - +12 # New Caledonia -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule NC 1977 1978 - Dec Sun>=1 0:00 1:00 - Rule NC 1978 1979 - Feb 27 0:00 0 - Rule NC 1996 only - Dec 1 2:00s 1:00 - @@ -558,7 +559,7 @@ # New Zealand -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule NZ 1927 only - Nov 6 2:00 1:00 S Rule NZ 1928 only - Mar 4 2:00 0 M Rule NZ 1928 1933 - Oct Sun>=8 2:00 0:30 S @@ -610,7 +611,7 @@ # Cook Is # From Shanks & Pottenger: -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Cook 1978 only - Nov 12 0:00 0:30 - Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 - Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 - @@ -755,7 +756,7 @@ # That web page currently lists transitions for 2012/3 and 2013/4. # Assume the pattern instituted in 2012 will continue indefinitely. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule WS 2010 only - Sep lastSun 0:00 1 - Rule WS 2011 only - Apr Sat>=1 4:00 0 - Rule WS 2011 only - Sep lastSat 3:00 1 - @@ -799,7 +800,7 @@ 13:00 - +13 # Tonga -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Tonga 1999 only - Oct 7 2:00s 1:00 - Rule Tonga 2000 only - Mar 19 2:00s 0 - Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 - @@ -880,7 +881,7 @@ # Vanuatu -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Vanuatu 1983 only - Sep 25 0:00 1:00 - Rule Vanuatu 1984 1991 - Mar Sun>=23 0:00 0 - Rule Vanuatu 1984 only - Oct 23 0:00 1:00 -
--- a/test/sun/util/calendar/zi/tzdata/europe Thu Nov 05 05:11:12 2020 +0000 +++ b/test/sun/util/calendar/zi/tzdata/europe Mon Nov 16 13:36:36 2020 +0000 @@ -411,7 +411,7 @@ # http://www.irishstatutebook.ie/eli/1926/sro/919/made/en/print # http://www.irishstatutebook.ie/eli/1947/sro/71/made/en/print -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S # Summer Time Act, 1916 Rule GB-Eire 1916 only - May 21 2:00s 1:00 BST Rule GB-Eire 1916 only - Oct 1 2:00s 0 GMT @@ -552,7 +552,7 @@ # The following is like GB-Eire and EU, except with standard time in # summer and negative daylight saving time in winter. It is for when # negative SAVE values are used. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S #Rule Eire 1971 only - Oct 31 2:00u -1:00 - #Rule Eire 1972 1980 - Mar Sun>=16 2:00u 0 - #Rule Eire 1972 1980 - Oct Sun>=23 2:00u -1:00 - @@ -589,7 +589,7 @@ # predecessor organization, the European Communities. # For brevity they are called "EU rules" elsewhere in this file. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule EU 1977 1980 - Apr Sun>=1 1:00u 1:00 S Rule EU 1977 only - Sep lastSun 1:00u 0 - Rule EU 1978 only - Oct 1 1:00u 0 - @@ -629,13 +629,13 @@ # 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 +# Zone Europe/Paris ... # 0:00 France WE%sT 1945 Sep 16 3:00 # -# Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15 +# Zone Europe/Monaco ... # 0:00 France WE%sT 1945 Sep 16 3:00 # -# Zone Europe/Belgrade 1:22:00 - LMT 1884 +# Zone Europe/Belgrade ... # 1:00 1:00 CEST 1945 Sep 16 2:00s # # Rule France 1945 only - Sep 16 3:00 0 - @@ -681,7 +681,7 @@ # # The 1917-1921 decree URLs are from Alexander Belopolsky (2016-08-23). -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Russia 1917 only - Jul 1 23:00 1:00 MST # Moscow Summer Time # # Decree No. 142 (1917-12-22) http://istmat.info/node/28137 @@ -795,7 +795,7 @@ # Albania -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Albania 1940 only - Jun 16 0:00 1:00 S Rule Albania 1942 only - Nov 2 3:00 0 - Rule Albania 1943 only - Mar 29 2:00 1:00 S @@ -849,7 +849,7 @@ # In 1946 the end of DST was on Monday, 7 October 1946, at 3:00 am. # Shanks had this right. Source: Die Weltpresse, 5. Oktober 1946, page 5. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Austria 1920 only - Apr 5 2:00s 1:00 S Rule Austria 1920 only - Sep 13 2:00s 0 - Rule Austria 1946 only - Apr 14 2:00s 1:00 S @@ -936,7 +936,7 @@ # The 1918 rules are listed for completeness; they apply to unoccupied Belgium. # Assume Brussels switched to WET in 1918 when the armistice took effect. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Belgium 1918 only - Mar 9 0:00s 1:00 S Rule Belgium 1918 1919 - Oct Sat>=1 23:00s 0 - Rule Belgium 1919 only - Mar 1 23:00s 1:00 S @@ -996,7 +996,7 @@ # 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 NAME FROM TO - IN ON AT SAVE LETTER/S Rule Bulg 1979 only - Mar 31 23:00 1:00 S Rule Bulg 1979 only - Oct 1 1:00 0 - Rule Bulg 1980 1982 - Apr Sat>=1 23:00 1:00 S @@ -1028,7 +1028,7 @@ # We know of no English-language name for historical Czech winter time; # abbreviate it as "GMT", as it happened to be GMT. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Czech 1945 only - Apr Mon>=1 2:00s 1:00 S Rule Czech 1945 only - Oct 1 2:00s 0 - Rule Czech 1946 only - May 6 2:00s 1:00 S @@ -1084,7 +1084,7 @@ # Hence the "02:00" of the 1980 law refers to standard time, not # wall-clock time, and so the EU rules were in effect in 1980. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Denmark 1916 only - May 14 23:00 1:00 S Rule Denmark 1916 only - Sep 30 23:00 0 - Rule Denmark 1940 only - May 15 0:00 1:00 S @@ -1186,7 +1186,7 @@ # http://naalakkersuisut.gl/~/media/Nanoq/Files/Attached%20Files/Engelske-tekster/Legislation/Executive%20Order%20National%20Park.rtf # It is their only National Park. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Thule 1991 1992 - Mar lastSun 2:00 1:00 D Rule Thule 1991 1992 - Sep lastSun 2:00 0 S Rule Thule 1993 2006 - Apr Sun>=1 2:00 1:00 D @@ -1317,7 +1317,7 @@ # From Paul Eggert (2014-06-14): # Go with Oja over Shanks. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S 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 @@ -1349,10 +1349,58 @@ # Françoise Gauquelin, Problèmes de l'heure résolus en astrologie, # Guy Trédaniel, Paris 1987 +# From Michael Deckers (2020-06-11): +# the law of 1891 <https://gallica.bnf.fr/ark:/12148/bpt6k64415343.texteImage> +# was published on 1891-03-15, so it could only take force on 1891-03-16. + +# From Michael Deckers (2020-06-10): +# Le Gaulois, 1911-03-11, page 1/6, online at +# https://www.retronews.fr/societe/echo-de-presse/2018/01/29/1911-change-lheure-de-paris +# ... [ Instantly, all pressure driven clock dials halted... Nine minutes and +# twenty-one seconds later the hands resumed their circular motion. ] +# There are also precise reports about how the change was prepared in train +# stations: all the publicly visible clocks stopped at midnight railway time +# (or were covered), only the chief of service had a watch, labeled +# "Heure ancienne", that he kept running until it reached 00:04:21, when +# he announced "Heure nouvelle". See the "Le Petit Journal 1911-03-11". +# https://gallica.bnf.fr/ark:/12148/bpt6k6192911/f1.item.zoom +# +# From Michael Deckers (2020-06-12): +# That "all French clocks stopped" for 00:09:21 is a misreading of French +# newspapers; this sort of adjustment applies only to certain +# remote-controlled clocks ("pendules pneumatiques", of which there existed +# perhaps a dozen in Paris, and which simply could not be set back remotely), +# but not to all the clocks in all French towns and villages. For instance, +# the following story in the "Courrier de Saône-et-Loire" 1911-03-11, page 2: +# only works if legal time was stepped back (was not monotone): ... +# [One can observe that children who had been born at midnight less 5 +# minutes and who had died at midnight of the old time, would turn out to +# be dead before being born, time having been set back and having +# suppressed 9 minutes and 25 seconds of their existence, that is, more +# than they could spend.] +# +# From Paul Eggert (2020-06-12): +# French time in railway stations was legally five minutes behind civil time, +# which explains why railway "old time" ran to 00:04:21 instead of to 00:09:21. +# The law's text (which Michael Deckers noted is at +# <https://gallica.bnf.fr/ark:/12148/bpt6k2022333z/f2>) says only that +# at 1911-03-11 00:00 legal time was that of Paris mean time delayed by +# nine minutes and twenty-one seconds, and does not say how the +# transition from Paris mean time was to occur. +# +# tzdb has no way to represent stopped clocks. As the railway practice +# was to keep a watch running on "old time" to decide when to restart +# the other clocks, this could be modeled as a transition for "old time" at +# 00:09:21. However, since the law was ambiguous and clocks outside railway +# stations were probably done haphazardly with the popular impression being +# that the transition was done at 00:00 "old time", simply leave the time +# blank; this causes zic to default to 00:00 "old time" which is good enough. +# Do something similar for the 1891-03-16 transition. There are similar +# problems in Algiers, Monaco and Tunis. # # Shank & Pottenger seem to use '24:00' ambiguously; resolve it with Whitman. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule France 1916 only - Jun 14 23:00s 1:00 S Rule France 1916 1919 - Oct Sun>=1 23:00s 0 - Rule France 1917 only - Mar 24 23:00s 1:00 S @@ -1412,13 +1460,11 @@ # go with Excoffier's 28/3/76 0hUT and 25/9/76 23hUT. Rule France 1976 only - Mar 28 1:00 1:00 S Rule France 1976 only - Sep 26 1:00 0 - -# Shanks & Pottenger give 0:09:20 for Paris Mean Time, and Whitman 0:09:05, -# but Howse quotes the actual French legislation as saying 0:09:21. -# Go with Howse. Howse writes that the time in France was officially based +# Howse writes that the time in France was officially based # on PMT-0:09:21 until 1978-08-09, when the time base finally switched to UTC. # Zone NAME STDOFF 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 +Zone Europe/Paris 0:09:21 - LMT 1891 Mar 16 + 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time # 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; @@ -1447,7 +1493,7 @@ # this was equivalent to UT +03, not +04. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Germany 1946 only - Apr 14 2:00s 1:00 S Rule Germany 1946 only - Oct 7 2:00s 0 - Rule Germany 1947 1949 - Oct Sun>=1 2:00s 0 - @@ -1499,7 +1545,7 @@ 1:00 EU CE%sT # Greece -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S # Whitman gives 1932 Jul 5 - Nov 1; go with Shanks & Pottenger. Rule Greece 1932 only - Jul 7 0:00 1:00 S Rule Greece 1932 only - Sep 1 0:00 0 - @@ -1534,38 +1580,69 @@ 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 16 3:00 0 - -Rule Hungary 1919 only - Apr 15 3:00 1:00 S -Rule Hungary 1919 only - Nov 24 3:00 0 - + +# From Michael Deckers (2020-06-09): +# an Austrian encyclopedia of railroads of 1913, online at +# http://www.zeno.org/Roell-1912/A/Eisenbahnzeit +# says that the switch [to CET] happened on 1890-11-01. + +# From Géza Nyáry (2020-06-07): +# Data for 1918-1983 are based on the archive database of Library Hungaricana. +# The dates are collected from original, scanned governmental orders, +# bulletins, instructions and public press. +# [See URLs below.] + +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S +# https://library.hungaricana.hu/hu/view/OGYK_RT_1918/?pg=238 +# https://library.hungaricana.hu/hu/view/OGYK_RT_1919/?pg=808 +# https://library.hungaricana.hu/hu/view/OGYK_RT_1920/?pg=201 +Rule Hungary 1918 1919 - Apr 15 2:00 1:00 S +Rule Hungary 1918 1920 - Sep Mon>=15 3:00 0 - +Rule Hungary 1920 only - Apr 5 2:00 1:00 S +# https://library.hungaricana.hu/hu/view/OGYK_RT_1945/?pg=882 Rule Hungary 1945 only - May 1 23:00 1:00 S -Rule Hungary 1945 only - Nov 1 0:00 0 - +Rule Hungary 1945 only - Nov 1 1:00 0 - +# https://library.hungaricana.hu/hu/view/Delmagyarorszag_1946_03/?pg=49 Rule Hungary 1946 only - Mar 31 2:00s 1:00 S -Rule Hungary 1946 1949 - Oct Sun>=1 2:00s 0 - +# https://library.hungaricana.hu/hu/view/Delmagyarorszag_1946_09/?pg=54 +Rule Hungary 1946 only - Oct 7 2:00 0 - +# https://library.hungaricana.hu/hu/view/KulfBelfHirek_1947_04_1__001-123/?pg=90 +# https://library.hungaricana.hu/hu/view/DunantuliNaplo_1947_09/?pg=128 +# https://library.hungaricana.hu/hu/view/KulfBelfHirek_1948_03_3__001-123/?pg=304 +# https://library.hungaricana.hu/hu/view/Zala_1948_09/?pg=64 +# https://library.hungaricana.hu/hu/view/SatoraljaujhelyiLeveltar_ZempleniNepujsag_1948/?pg=53 +# https://library.hungaricana.hu/hu/view/SatoraljaujhelyiLeveltar_ZempleniNepujsag_1948/?pg=160 +# https://library.hungaricana.hu/hu/view/Delmagyarorszag_1949_09/?pg=94 Rule Hungary 1947 1949 - Apr Sun>=4 2:00s 1:00 S -Rule Hungary 1950 only - Apr 17 2:00s 1:00 S -Rule Hungary 1950 only - Oct 23 2:00s 0 - -Rule Hungary 1954 1955 - May 23 0:00 1:00 S -Rule Hungary 1954 1955 - Oct 3 0:00 0 - -Rule Hungary 1956 only - Jun Sun>=1 0:00 1:00 S -Rule Hungary 1956 only - Sep lastSun 0:00 0 - -Rule Hungary 1957 only - Jun Sun>=1 1:00 1:00 S -Rule Hungary 1957 only - Sep lastSun 3:00 0 - -Rule Hungary 1980 only - Apr 6 1:00 1:00 S +Rule Hungary 1947 1949 - Oct Sun>=1 2:00s 0 - +# https://library.hungaricana.hu/hu/view/DTT_KOZL_TanacsokKozlonye_1954/?pg=513 +Rule Hungary 1954 only - May 23 0:00 1:00 S +Rule Hungary 1954 only - Oct 3 0:00 0 - +# https://library.hungaricana.hu/hu/view/DTT_KOZL_TanacsokKozlonye_1955/?pg=398 +Rule Hungary 1955 only - May 22 2:00 1:00 S +Rule Hungary 1955 only - Oct 2 3:00 0 - +# https://library.hungaricana.hu/hu/view/HevesMegyeiNepujsag_1956_06/?pg=0 +# https://library.hungaricana.hu/hu/view/EszakMagyarorszag_1956_06/?pg=6 +# https://library.hungaricana.hu/hu/view/SzolnokMegyeiNeplap_1957_04/?pg=120 +# https://library.hungaricana.hu/hu/view/PestMegyeiHirlap_1957_09/?pg=143 +Rule Hungary 1956 1957 - Jun Sun>=1 2:00 1:00 S +Rule Hungary 1956 1957 - Sep lastSun 3:00 0 - +# https://library.hungaricana.hu/hu/view/DTT_KOZL_TanacsokKozlonye_1980/?pg=1227 +Rule Hungary 1980 only - Apr 6 0:00 1:00 S +Rule Hungary 1980 only - Sep 28 1:00 0 - +# https://library.hungaricana.hu/hu/view/Delmagyarorszag_1981_01/?pg=79 +# https://library.hungaricana.hu/hu/view/DTT_KOZL_TanacsokKozlonye_1982/?pg=115 +# https://library.hungaricana.hu/hu/view/DTT_KOZL_TanacsokKozlonye_1983/?pg=85 +Rule Hungary 1981 1983 - Mar lastSun 0:00 1:00 S +Rule Hungary 1981 1983 - Sep lastSun 1:00 0 - +# # Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone Europe/Budapest 1:16:20 - LMT 1890 Oct +Zone Europe/Budapest 1:16:20 - LMT 1890 Nov 1 1:00 C-Eur CE%sT 1918 - 1:00 Hungary CE%sT 1941 Apr 8 +# https://library.hungaricana.hu/hu/view/OGYK_RT_1941/?pg=1204 + 1:00 Hungary CE%sT 1941 Apr 7 23:00 1:00 C-Eur CE%sT 1945 - 1:00 Hungary CE%sT 1980 Sep 28 2:00s + 1:00 Hungary CE%sT 1984 1:00 EU CE%sT # Iceland @@ -1601,7 +1678,7 @@ # The information below is taken from the 1988 Almanak; see # http://www.almanak.hi.is/klukkan.html # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Iceland 1917 1919 - Feb 19 23:00 1:00 - Rule Iceland 1917 only - Oct 21 1:00 0 - Rule Iceland 1918 1919 - Nov 16 1:00 0 - @@ -1693,7 +1770,7 @@ # to 1944-06-04; although Rome was an open city during this period, it # was effectively controlled by Germany. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Italy 1916 only - Jun 3 24:00 1:00 S Rule Italy 1916 1917 - Sep 30 24:00 0 - Rule Italy 1917 only - Mar 31 24:00 1:00 S @@ -1803,7 +1880,7 @@ # urged Lithuania and Estonia to adopt a similar time policy, but it # appears that they will not do so.... -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - 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 - @@ -1896,7 +1973,7 @@ # Luxembourg # Whitman disagrees with most of these dates in minor ways; # go with Shanks & Pottenger. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Lux 1916 only - May 14 23:00 1:00 S Rule Lux 1916 only - Oct 1 1:00 0 - Rule Lux 1917 only - Apr 28 23:00 1:00 S @@ -1937,7 +2014,7 @@ # From Paul Eggert (2016-10-21): # Assume 1900-1972 was like Rome, overriding Shanks. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Malta 1973 only - Mar 31 0:00s 1:00 S Rule Malta 1973 only - Sep 29 0:00s 0 - Rule Malta 1974 only - Apr 21 0:00s 1:00 S @@ -2010,7 +2087,7 @@ # says the 2014-03-30 spring-forward transition was at 02:00 local time. # Guess that since 1997 Moldova has switched one hour before the EU. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Moldova 1997 max - Mar lastSun 2:00 1:00 S Rule Moldova 1997 max - Oct lastSun 3:00 0 - @@ -2028,11 +2105,24 @@ 2:00 Moldova EE%sT # Monaco -# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's -# more precise 0:09:21. +# +# From Michael Deckers (2020-06-12): +# In the "Journal de Monaco" of 1892-05-24, online at +# https://journaldemonaco.gouv.mc/var/jdm/storage/original/application/b1c67c12c5af11b41ea888fb048e4fe8.pdf +# we read: ... +# [In virtue of a Sovereign Ordinance of the May 13 of the current [year], +# legal time in the Principality will be set to, from the date of June 1, +# 1892 onwards, to the meridian of Paris, as in France.] +# In the "Journal de Monaco" of 1911-03-28, online at +# https://journaldemonaco.gouv.mc/var/jdm/storage/original/application/de74ffb7db53d4f599059fe8f0ed482a.pdf +# we read an ordinance of 1911-03-16: ... +# [Legal time in the Principality will be set, from the date of promulgation +# of the present ordinance, to legal time in France.... Consequently, legal +# time will be retarded by 9 minutes and 21 seconds.] +# # Zone NAME STDOFF RULES FORMAT [UNTIL] -Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15 - 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time +Zone Europe/Monaco 0:29:32 - LMT 1892 Jun 1 + 0:09:21 - PMT 1911 Mar 29 # Paris Mean Time 0:00 France WE%sT 1945 Sep 16 3:00 1:00 France CE%sT 1977 1:00 EU CE%sT @@ -2080,7 +2170,7 @@ # The data entries before 1945 are taken from # https://www.staff.science.uu.nl/~gent0113/wettijd/wettijd.htm -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Neth 1916 only - May 1 0:00 1:00 NST # Netherlands Summer Time Rule Neth 1916 only - Oct 1 0:00 0 AMT # Amsterdam Mean Time Rule Neth 1917 only - Apr 16 2:00s 1:00 NST @@ -2117,7 +2207,7 @@ # Norway # http://met.no/met/met_lex/q_u/sommertid.html (2004-01) agrees with Shanks & # Pottenger. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Norway 1916 only - May 22 1:00 1:00 S Rule Norway 1916 only - Sep 30 0:00 0 - Rule Norway 1945 only - Apr 2 2:00s 1:00 S @@ -2186,7 +2276,7 @@ # 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 NAME FROM TO - 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 Rule Poland 1944 only - Apr 3 2:00s 1:00 S @@ -2257,7 +2347,7 @@ # Guess that the Azores changed to EU rules in 1992 (since that's when Portugal # harmonized with EU rules), and that they stayed +0:00 that winter. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S # DSH writes that despite Decree 1,469 (1915), the change to the clocks was not # done every year, depending on what Spain did, because of railroad schedules. # Go with Shanks & Pottenger. @@ -2370,7 +2460,7 @@ # assume that Romania and Moldova switched to EU rules in 1997, # the same year as Bulgaria. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Romania 1932 only - May 21 0:00s 1:00 S Rule Romania 1932 1939 - Oct Sun>=1 0:00s 0 - Rule Romania 1933 1939 - Apr Sun>=2 0:00s 1:00 S @@ -3468,14 +3558,14 @@ # fallback transition from the next day's 00:59... to 00:00. # From Michael Deckers (2016-12-15): -# The Royal Decree of 1900-06-26 quoted by Planesas, online at +# The Royal Decree of 1900-07-26 quoted by Planesas, online at # https://www.boe.es/datos/pdfs/BOE//1900/209/A00383-00384.pdf # says in its article 5 (my translation): # These dispositions will enter into force beginning with the # instant at which, according to the time indicated in article 1, # the 1st day of January of 1901 will begin. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Spain 1918 only - Apr 15 23:00 1:00 S Rule Spain 1918 1919 - Oct 6 24:00s 0 - Rule Spain 1919 only - Apr 6 23:00 1:00 S @@ -3612,7 +3702,7 @@ # 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 .... -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S # From Whitman (who writes "Midnight?"): # Rule Swiss 1940 only - Nov 2 0:00 1:00 S # Rule Swiss 1940 only - Dec 31 0:00 0 - @@ -3699,7 +3789,7 @@ # 1853-07-16, though it probably occurred at some other date in Zurich, and # legal civil time probably changed at still some other transition date. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Swiss 1941 1942 - May Mon>=1 1:00 1:00 S Rule Swiss 1941 1942 - Oct Mon>=1 2:00 0 - # Zone NAME STDOFF RULES FORMAT [UNTIL] @@ -3848,7 +3938,7 @@ # Although Google Translate misfires on that source, it looks like # Turkey reversed last month's decision, and so will stay at +03. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Turkey 1916 only - May 1 0:00 1:00 S Rule Turkey 1916 only - Oct 1 0:00 0 - Rule Turkey 1920 only - Mar 28 0:00 1:00 S @@ -4006,7 +4096,7 @@ 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. +# Transcarpathia used CET 1990/1991. # "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
--- a/test/sun/util/calendar/zi/tzdata/leapseconds Thu Nov 05 05:11:12 2020 +0000 +++ b/test/sun/util/calendar/zi/tzdata/leapseconds Mon Nov 16 13:36:36 2020 +0000 @@ -91,11 +91,11 @@ # Any additional leap seconds will come after this. # This Expires line is commented out for now, # so that pre-2020a zic implementations do not reject this file. -#Expires 2020 Dec 28 00:00:00 +#Expires 2021 Jun 28 00:00:00 # POSIX timestamps for the data in this file: #updated 1467936000 (2016-07-08 00:00:00 UTC) -#expires 1609113600 (2020-12-28 00:00:00 UTC) +#expires 1624838400 (2021-06-28 00:00:00 UTC) -# Updated through IERS Bulletin C59 -# File expires on: 28 December 2020 +# Updated through IERS Bulletin C60 +# File expires on: 28 June 2021
--- a/test/sun/util/calendar/zi/tzdata/northamerica Thu Nov 05 05:11:12 2020 +0000 +++ b/test/sun/util/calendar/zi/tzdata/northamerica Mon Nov 16 13:36:36 2020 +0000 @@ -193,7 +193,7 @@ # U.S. government action. So even though the "US" rules have changed # in the latest release, other countries won't be affected. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule US 1918 1919 - Mar lastSun 2:00 1:00 D Rule US 1918 1919 - Oct lastSun 2:00 0 S Rule US 1942 only - Feb 9 2:00 1:00 W # War @@ -370,7 +370,7 @@ # 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 NAME FROM TO - 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 Rule NYC 1921 1966 - Apr lastSun 2:00 1:00 D @@ -454,7 +454,7 @@ # The Tennessean 2007-05-11, republished 2015-04-06. # https://www.tennessean.com/story/insider/extras/2015/04/06/archives-seigenthaler-for-100-years-the-tennessean-had-it-covered/25348545/ -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Chicago 1920 only - Jun 13 2:00 1:00 D Rule Chicago 1920 1921 - Oct lastSun 2:00 0 S Rule Chicago 1921 only - Mar lastSun 2:00 1:00 D @@ -523,7 +523,7 @@ # El Paso Times. 2018-10-24 06:40 -06. # https://www.elpasotimes.com/story/news/local/el-paso/2018/10/24/el-pasoans-were-time-rebels-fought-stay-mountain-zone/1744509002/ # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Denver 1920 1921 - Mar lastSun 2:00 1:00 D Rule Denver 1920 only - Oct lastSun 2:00 0 S Rule Denver 1921 only - May 22 2:00 0 S @@ -576,7 +576,7 @@ # https://repository.uchastings.edu/cgi/viewcontent.cgi?article=1501&context=ca_ballot_props # https://repository.uchastings.edu/cgi/viewcontent.cgi?article=1636&context=ca_ballot_props # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule CA 1948 only - Mar 14 2:01 1:00 D Rule CA 1949 only - Jan 1 2:00 0 S Rule CA 1950 1966 - Apr lastSun 1:00 1:00 D @@ -934,7 +934,7 @@ # going to switch from Central to Eastern Time on March 11, 2007.... # http://www.indystar.com/apps/pbcs.dll/article?AID=/20070207/LOCAL190108/702070524/0/LOCAL -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Indianapolis 1941 only - Jun 22 2:00 1:00 D Rule Indianapolis 1941 1954 - Sep lastSun 2:00 0 S Rule Indianapolis 1946 1954 - Apr lastSun 2:00 1:00 D @@ -953,7 +953,7 @@ # # Eastern Crawford County, Indiana, left its clocks alone in 1974, # as well as from 1976 through 2005. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Marengo 1951 only - Apr lastSun 2:00 1:00 D Rule Marengo 1951 only - Sep lastSun 2:00 0 S Rule Marengo 1954 1960 - Apr lastSun 2:00 1:00 D @@ -972,7 +972,7 @@ # Daviess, Dubois, Knox, and Martin Counties, Indiana, # switched from eastern to central time in April 2006, then switched back # in November 2007. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Vincennes 1946 only - Apr lastSun 2:00 1:00 D Rule Vincennes 1946 only - Sep lastSun 2:00 0 S Rule Vincennes 1953 1954 - Apr lastSun 2:00 1:00 D @@ -997,7 +997,7 @@ # The Indianapolis News, Friday 27 October 1967 states that Perry County # returned to CST. It went again to EST on 27 April 1969, as documented by the # Indianapolis star of Saturday 26 April. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Perry 1955 only - May 1 0:00 1:00 D Rule Perry 1955 1960 - Sep lastSun 2:00 0 S Rule Perry 1956 1963 - Apr lastSun 2:00 1:00 D @@ -1014,7 +1014,7 @@ # # Pike County, Indiana moved from central to eastern time in 1977, # then switched back in 2006, then switched back again in 2007. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Pike 1955 only - May 1 0:00 1:00 D Rule Pike 1955 1960 - Sep lastSun 2:00 0 S Rule Pike 1956 1964 - Apr lastSun 2:00 1:00 D @@ -1035,7 +1035,7 @@ # An article on page A3 of the Sunday, 1991-10-27 Washington Post # notes that Starke County switched from Central time to Eastern time as of # 1991-10-27. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Starke 1947 1961 - Apr lastSun 2:00 1:00 D Rule Starke 1947 1954 - Sep lastSun 2:00 0 S Rule Starke 1955 1956 - Oct lastSun 2:00 0 S @@ -1052,7 +1052,7 @@ # # Pulaski County, Indiana, switched from eastern to central time in # April 2006 and then switched back in March 2007. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Pulaski 1946 1960 - Apr lastSun 2:00 1:00 D Rule Pulaski 1946 1954 - Sep lastSun 2:00 0 S Rule Pulaski 1955 1956 - Oct lastSun 2:00 0 S @@ -1094,7 +1094,7 @@ # # Part of Kentucky left its clocks alone in 1974. # This also includes Clark, Floyd, and Harrison counties in Indiana. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Louisville 1921 only - May 1 2:00 1:00 D Rule Louisville 1921 only - Sep 1 2:00 0 S Rule Louisville 1941 only - Apr lastSun 2:00 1:00 D @@ -1208,7 +1208,7 @@ # election Michigan voters narrowly repealed DST, effective 1969. # # Most of Michigan observed DST from 1973 on, but was a bit late in 1975. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Detroit 1948 only - Apr lastSun 2:00 1:00 D Rule Detroit 1948 only - Sep lastSun 2:00 0 S # Zone NAME STDOFF RULES FORMAT [UNTIL] @@ -1225,7 +1225,7 @@ # # Dickinson, Gogebic, Iron, and Menominee Counties, Michigan, # switched from EST to CST/CDT in 1973. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +# Rule NAME FROM TO - IN ON AT SAVE LETTER Rule Menominee 1946 only - Apr lastSun 2:00 1:00 D Rule Menominee 1946 only - Sep lastSun 2:00 0 S Rule Menominee 1966 only - Apr lastSun 2:00 1:00 D @@ -1395,7 +1395,7 @@ # Oct 31, to Oct 27, 1918 (and Sunday is a more likely transition day # than Thursday) in all Canadian rulesets. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Canada 1918 only - Apr 14 2:00 1:00 D Rule Canada 1918 only - Oct 27 2:00 0 S Rule Canada 1942 only - Feb 9 2:00 1:00 W # War @@ -1418,7 +1418,7 @@ # that follows the rules is the southeast corner, including Port Hope # Simpson and Mary's Harbour, but excluding, say, Black Tickle. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule StJohns 1917 only - Apr 8 2:00 1:00 D Rule StJohns 1917 only - Sep 17 2:00 0 S # Whitman gives 1919 Apr 5 and 1920 Apr 5; go with Shanks & Pottenger. @@ -1520,7 +1520,7 @@ # bill say that it is "accommodating the customs and practices" of those # regions, which suggests that they have always been in-line with Halifax. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Halifax 1916 only - Apr 1 0:00 1:00 D Rule Halifax 1916 only - Oct 1 0:00 0 S Rule Halifax 1920 only - May 9 0:00 1:00 D @@ -1586,7 +1586,7 @@ # clear that this was the case since at least 1993. # For now, assume it started in 1993. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Moncton 1933 1935 - Jun Sun>=8 1:00 1:00 D Rule Moncton 1933 1935 - Sep Sun>=8 1:00 0 S Rule Moncton 1936 1938 - Jun Sun>=1 1:00 1:00 D @@ -1795,7 +1795,7 @@ # With some exceptions, the use of daylight saving may be said to be limited # to those cities and towns lying between Quebec city and Windsor, Ont. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Toronto 1919 only - Mar 30 23:30 1:00 D Rule Toronto 1919 only - Oct 26 0:00 0 S Rule Toronto 1920 only - May 2 2:00 1:00 D @@ -1893,7 +1893,7 @@ # starting 1966. Since 02:00s is clearly correct for 1967 on, assume # it was also 02:00s in 1966. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Winn 1916 only - Apr 23 0:00 1:00 D Rule Winn 1916 only - Sep 17 0:00 0 S Rule Winn 1918 only - Apr 14 2:00 1:00 D @@ -1984,7 +1984,7 @@ # long and rather painful to read. # http://www.qp.gov.sk.ca/documents/English/Statutes/Statutes/T14.pdf -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Regina 1918 only - Apr 14 2:00 1:00 D Rule Regina 1918 only - Oct 27 2:00 0 S Rule Regina 1930 1934 - May Sun>=1 0:00 1:00 D @@ -2034,7 +2034,7 @@ # Boyer JP. Forcing Choice: The Risky Reward of Referendums. Dundum. 2017. # ISBN 978-1459739123. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Edm 1918 1919 - Apr Sun>=8 2:00 1:00 D Rule Edm 1918 only - Oct 27 2:00 0 S Rule Edm 1919 only - May 27 2:00 0 S @@ -2143,7 +2143,7 @@ # https://searcharchives.vancouver.ca/daylight-saving-1918-starts-again-july-7-1941-start-d-s-sept-27-end-of-d-s-1941 # We have no further details, so omit them for now. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Vanc 1918 only - Apr 14 2:00 1:00 D Rule Vanc 1918 only - Oct 27 2:00 0 S Rule Vanc 1942 only - Feb 9 2:00 1:00 W # War @@ -2472,7 +2472,19 @@ # consistency with nearby Dawson Creek, Creston, and Fort Nelson. # https://yukon.ca/en/news/yukon-end-seasonal-time-change -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# From Andrew G. Smith (2020-09-24): +# Yukon has completed its regulatory change to be on UTC -7 year-round.... +# http://www.gov.yk.ca/legislation/regs/oic2020_125.pdf +# What we have done is re-defined Yukon Standard Time, as we are +# authorized to do under section 33 of our Interpretation Act: +# http://www.gov.yk.ca/legislation/acts/interpretation_c.pdf +# +# From Paul Eggert (2020-09-24): +# tzdb uses the obsolete YST abbreviation for standard time in Yukon through +# about 1970, and uses PST for standard time in Yukon since then. Consistent +# with that, use MST for -07, the new standard time in Yukon effective Nov. 1. + +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule NT_YK 1918 only - Apr 14 2:00 1:00 D Rule NT_YK 1918 only - Oct 27 2:00 0 S Rule NT_YK 1919 only - May 25 2:00 1:00 D @@ -2526,12 +2538,12 @@ Zone America/Whitehorse -9:00:12 - LMT 1900 Aug 20 -9:00 NT_YK Y%sT 1967 May 28 0:00 -8:00 NT_YK P%sT 1980 - -8:00 Canada P%sT 2020 Mar 8 2:00 + -8:00 Canada P%sT 2020 Nov 1 -7:00 - MST Zone America/Dawson -9:17:40 - LMT 1900 Aug 20 -9:00 NT_YK Y%sT 1973 Oct 28 0:00 -8:00 NT_YK P%sT 1980 - -8:00 Canada P%sT 2020 Mar 8 2:00 + -8:00 Canada P%sT 2020 Nov 1 -7:00 - MST @@ -2746,7 +2758,7 @@ # 5- The islands, reefs and keys shall take their timezone from the # longitude they are located at. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Mexico 1939 only - Feb 5 0:00 1:00 D Rule Mexico 1939 only - Jun 25 0:00 0 S Rule Mexico 1940 only - Dec 9 0:00 1:00 D @@ -2951,7 +2963,7 @@ # rules to sync with the U.S. starting in 2007.... # http://www.jonesbahamas.com/?c=45&a=10412 -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Bahamas 1964 1975 - Oct lastSun 2:00 0 S Rule Bahamas 1964 1975 - Apr lastSun 2:00 1:00 D # Zone NAME STDOFF RULES FORMAT [UNTIL] @@ -2963,7 +2975,7 @@ # For 1899 Milne gives -3:58:29.2; round that. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Barb 1977 only - Jun 12 2:00 1:00 D Rule Barb 1977 1978 - Oct Sun>=1 2:00 0 S Rule Barb 1978 1980 - Apr Sun>=15 2:00 1:00 D @@ -2976,7 +2988,7 @@ # Belize # Whitman entirely disagrees with Shanks; go with Shanks & Pottenger. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Belize 1918 1942 - Oct Sun>=2 0:00 0:30 -0530 Rule Belize 1919 1943 - Feb Sun>=9 0:00 0 CST Rule Belize 1973 only - Dec 5 0:00 1:00 CDT @@ -3013,7 +3025,7 @@ # 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 NAME FROM TO - IN ON AT SAVE LETTER/S Rule CR 1979 1980 - Feb lastSun 0:00 1:00 D Rule CR 1979 1980 - Jun Sun>=1 0:00 0 S Rule CR 1991 1992 - Jan Sat>=15 0:00 1:00 D @@ -3187,7 +3199,7 @@ # From Paul Eggert (2012-11-03): # For now, assume the future rule is first Sunday in November. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Cuba 1928 only - Jun 10 0:00 1:00 D Rule Cuba 1928 only - Oct 10 0:00 0 S Rule Cuba 1940 1942 - Jun Sun>=1 0:00 1:00 D @@ -3256,7 +3268,7 @@ # decided to revert. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule DR 1966 only - Oct 30 0:00 1:00 EDT Rule DR 1967 only - Feb 28 0:00 0 EST Rule DR 1969 1973 - Oct lastSun 0:00 0:30 -0430 @@ -3273,7 +3285,7 @@ # El Salvador -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Salv 1987 1988 - May Sun>=1 0:00 1:00 D Rule Salv 1987 1988 - Sep lastSun 0:00 0 S # There are too many San Salvadors elsewhere, so use America/El_Salvador @@ -3302,7 +3314,7 @@ # (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 -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Guat 1973 only - Nov 25 0:00 1:00 D Rule Guat 1974 only - Feb 24 0:00 0 S Rule Guat 1983 only - May 21 0:00 1:00 D @@ -3383,7 +3395,7 @@ # I have not been able to find a more authoritative source: # https://www.haitilibre.com/en/news-20319-haiti-notices-time-change-in-haiti.html -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Haiti 1983 only - May 8 0:00 1:00 D Rule Haiti 1984 1987 - Apr lastSun 0:00 1:00 D Rule Haiti 1983 1987 - Oct lastSun 0:00 0 S @@ -3431,7 +3443,7 @@ # http://www.laprensahn.com/pais_nota.php?id04962=7386 # So it seems that Honduras will not enter DST this year.... -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Hond 1987 1988 - May Sun>=1 0:00 1:00 D Rule Hond 1987 1988 - Sep lastSun 0:00 0 S Rule Hond 2006 only - May Sun>=1 0:00 1:00 D @@ -3522,7 +3534,7 @@ # The natural sun time is restored in all the national territory, in that the # time is returned one hour at 01:00 am of October 1 of 2006. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Nic 1979 1980 - Mar Sun>=16 0:00 1:00 D Rule Nic 1979 1980 - Jun Mon>=23 0:00 0 S Rule Nic 2005 only - Apr 10 0:00 1:00 D
--- a/test/sun/util/calendar/zi/tzdata/pacificnew Thu Nov 05 05:11:12 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -# -# 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. -# -# tzdb data for proposed US election time (this file is obsolete) - -# This file is in the public domain, so clarified as of -# 2009-05-17 by Arthur David Olson. - -# From Arthur David Olson (1989-04-05): -# On 1989-04-05, the U. S. House of Representatives passed (238-154) a bill -# establishing "Pacific Presidential Election Time"; it was not acted on -# by the Senate or signed into law by the President. -# You might want to change the "PE" (Presidential Election) below to -# "Q" (Quadrennial) to maintain three-character zone abbreviations. -# If you're really conservative, you might want to change it to "D". -# Avoid "L" (Leap Year), which won't be true in 2100. - -# If Presidential Election Time is ever established, replace "XXXX" below -# with the year the law takes effect and uncomment the "##" lines. - -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S -## Rule Twilite XXXX max - Apr Sun>=1 2:00 1:00 D -## Rule Twilite XXXX max uspres Oct lastSun 2:00 1:00 PE -## Rule Twilite XXXX max uspres Nov Sun>=7 2:00 0 S -## Rule Twilite XXXX max nonpres Oct lastSun 2:00 0 S - -# Zone NAME STDOFF RULES/SAVE FORMAT [UNTIL] -## Zone America/Los_Angeles-PET -8:00 US P%sT XXXX -## -8:00 Twilite P%sT - -# For now... -Link America/Los_Angeles US/Pacific-New ##
--- a/test/sun/util/calendar/zi/tzdata/southamerica Thu Nov 05 05:11:12 2020 +0000 +++ b/test/sun/util/calendar/zi/tzdata/southamerica Mon Nov 16 13:36:36 2020 +0000 @@ -71,7 +71,7 @@ # I am sending modifications to the Argentine time zone table... # AR was chosen because they are the ISO letters that represent Argentina. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Arg 1930 only - Dec 1 0:00 1:00 - Rule Arg 1931 only - Apr 1 0:00 0 - Rule Arg 1931 only - Oct 15 0:00 1:00 - @@ -792,7 +792,7 @@ # From Paul Eggert (2013-10-17): # For now, assume western Amazonas will change as well. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S # 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 - @@ -1281,7 +1281,7 @@ # For now, assume that they will not revert, # since they have extended the expiration date once already. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Chile 1927 1931 - Sep 1 0:00 1:00 - Rule Chile 1928 1932 - Apr 1 0:00 0 - Rule Chile 1968 only - Nov 3 4:00u 1:00 - @@ -1381,7 +1381,7 @@ # 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 +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule CO 1992 only - May 3 0:00 1:00 - Rule CO 1993 only - Apr 4 0:00 0 - # Zone NAME STDOFF RULES FORMAT [UNTIL] @@ -1441,7 +1441,7 @@ # (Not one step back), the clocks went back in 1993 and the experiment was not # repeated. For now, assume transitions were at 00:00 local time country-wide. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Ecuador 1992 only - Nov 28 0:00 1:00 - Rule Ecuador 1993 only - Feb 5 0:00 0 - # @@ -1535,7 +1535,7 @@ # For now we will assume permanent -03 for the Falklands # until advised differently (to apply for 2012 and beyond, after the 2011 # experiment was apparently successful.) -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Falk 1937 1938 - Sep lastSun 0:00 1:00 - Rule Falk 1938 1942 - Mar Sun>=19 0:00 0 - Rule Falk 1939 only - Oct 1 0:00 1:00 - @@ -1581,7 +1581,7 @@ # No time of the day is established for the adjustment, so people normally # adjust their clocks at 0 hour of the given dates. # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Para 1975 1988 - Oct 1 0:00 1:00 - Rule Para 1975 1978 - Mar 1 0:00 0 - Rule Para 1979 1991 - Apr 1 0:00 0 - @@ -1674,7 +1674,7 @@ # From Paul Eggert (2006-03-22): # Shanks & Pottenger don't have this transition. Assume 1986 was like 1987. -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Peru 1938 only - Jan 1 0:00 1:00 - Rule Peru 1938 only - Apr 1 0:00 0 - Rule Peru 1938 1939 - Sep lastSun 0:00 1:00 - @@ -1770,7 +1770,7 @@ # https://www.impo.com.uy/diariooficial/1926/03/10/2 # https://www.impo.com.uy/diariooficial/1926/03/18/2 # -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Uruguay 1923 1925 - Oct 1 0:00 0:30 - Rule Uruguay 1924 1926 - Apr 1 0:00 0 - # From Tim Parenti (2018-02-15):
--- a/test/sun/util/calendar/zi/tzdata/systemv Thu Nov 05 05:11:12 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ -# -# 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. -# -# tzdb data for System V rules (this file is obsolete) - -# This file is in the public domain, so clarified as of -# 2009-05-17 by Arthur David Olson. - -# Old rules, should the need arise. -# No attempt is made to handle Newfoundland, since it cannot be expressed -# using the System V "TZ" scheme (half-hour offset), or anything outside -# North America (no support for non-standard DST start/end dates), nor -# the changes in the DST rules in the US after 1976 (which occurred after -# the old rules were written). -# -# If you need the old rules, uncomment ## lines. -# Compile this *without* leap second correction for true conformance. - -# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S -Rule SystemV min 1973 - Apr lastSun 2:00 1:00 D -Rule SystemV min 1973 - Oct lastSun 2:00 0 S -Rule SystemV 1974 only - Jan 6 2:00 1:00 D -Rule SystemV 1974 only - Nov lastSun 2:00 0 S -Rule SystemV 1975 only - Feb 23 2:00 1:00 D -Rule SystemV 1975 only - Oct lastSun 2:00 0 S -Rule SystemV 1976 max - Apr lastSun 2:00 1:00 D -Rule SystemV 1976 max - Oct lastSun 2:00 0 S - -# Zone NAME STDOFF RULES/SAVE FORMAT [UNTIL] -## Zone SystemV/AST4ADT -4:00 SystemV A%sT -## Zone SystemV/EST5EDT -5:00 SystemV E%sT -## Zone SystemV/CST6CDT -6:00 SystemV C%sT -## Zone SystemV/MST7MDT -7:00 SystemV M%sT -## Zone SystemV/PST8PDT -8:00 SystemV P%sT -## Zone SystemV/YST9YDT -9:00 SystemV Y%sT -## Zone SystemV/AST4 -4:00 - AST -## Zone SystemV/EST5 -5:00 - EST -## Zone SystemV/CST6 -6:00 - CST -## Zone SystemV/MST7 -7:00 - MST -## Zone SystemV/PST8 -8:00 - PST -## Zone SystemV/YST9 -9:00 - YST -## Zone SystemV/HST10 -10:00 - HST