--- a/.hgtags Thu Apr 05 19:08:48 2018 -0700
+++ b/.hgtags Mon Apr 09 08:34:30 2018 -0700
@@ -478,3 +478,4 @@
d5c43e9f08fb9a7c74aae0d48daf17f2ad2afaef jdk-11+5
3acb379b86725c47e7f33358cb22efa8752ae532 jdk-11+6
f7363de371c9a1f668bd0a01b7df3d1ddb9cc58b jdk-11+7
+755e1b55a4dff510f9639cdb5c5e82549a7e09b3 jdk-11+8
--- a/make/CreateJmods.gmk Thu Apr 05 19:08:48 2018 -0700
+++ b/make/CreateJmods.gmk Mon Apr 09 08:34:30 2018 -0700
@@ -80,10 +80,15 @@
DEPS += $(call CacheFind, $(MAN_DIR))
endif
+# If a specific modules_legal dir exists for this module, only pick up files
+# from there. These files were explicitly filtered or modified in <module>-copy
+# targets. For the rest, just pick up everything from the source legal dirs.
LEGAL_NOTICES := \
- $(call uniq, $(SUPPORT_OUTPUTDIR)/modules_legal/java.base \
- $(call FindModuleLegalDirs, $(MODULE))) \
- #
+ $(SUPPORT_OUTPUTDIR)/modules_legal/common \
+ $(if $(wildcard $(SUPPORT_OUTPUTDIR)/modules_legal/$(MODULE)), \
+ $(wildcard $(SUPPORT_OUTPUTDIR)/modules_legal/$(MODULE)), \
+ $(call FindModuleLegalSrcDirs, $(MODULE)) \
+ )
LEGAL_NOTICES_PATH := $(call PathList, $(LEGAL_NOTICES))
DEPS += $(call CacheFind, $(LEGAL_NOTICES))
--- a/make/autoconf/flags-ldflags.m4 Thu Apr 05 19:08:48 2018 -0700
+++ b/make/autoconf/flags-ldflags.m4 Mon Apr 09 08:34:30 2018 -0700
@@ -81,7 +81,7 @@
elif test "x$TOOLCHAIN_TYPE" = xclang; then
BASIC_LDFLAGS_JVM_ONLY="-mno-omit-leaf-frame-pointer -mstack-alignment=16 \
- -stdlib=libstdc++ -fPIC"
+ -stdlib=libc++ -fPIC"
elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
BASIC_LDFLAGS="-Wl,-z,defs"
--- a/make/autoconf/flags.m4 Thu Apr 05 19:08:48 2018 -0700
+++ b/make/autoconf/flags.m4 Mon Apr 09 08:34:30 2018 -0700
@@ -116,7 +116,7 @@
# of the OS. It currently has a hard coded value. Setting this also limits
# exposure to API changes in header files. Bumping this is likely to
# require code changes to build.
- MACOSX_VERSION_MIN=10.7.0
+ MACOSX_VERSION_MIN=10.9.0
MACOSX_VERSION_MIN_NODOTS=${MACOSX_VERSION_MIN//\./}
AC_SUBST(MACOSX_VERSION_MIN)
@@ -241,7 +241,7 @@
test "x$OPENJDK_TARGET_CPU" != xmips &&
test "x$OPENJDK_TARGET_CPU" != xmipsel &&
test "x$OPENJDK_TARGET_CPU" != xmips64 &&
- test "x$OPENJDK_TARGET_CPU" != xmips64el; then
+ test "x$OPENJDK_TARGET_CPU" != xmips64el; then
MACHINE_FLAG="-m${OPENJDK_TARGET_CPU_BITS}"
fi
fi
@@ -325,22 +325,18 @@
if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
CC_OUT_OPTION=-Fo
- EXE_OUT_OPTION=-out:
LD_OUT_OPTION=-out:
AR_OUT_OPTION=-out:
else
# The option used to specify the target .o,.a or .so file.
# When compiling, how to specify the to be created object file.
CC_OUT_OPTION='-o$(SPACE)'
- # When linking, how to specify the to be created executable.
- EXE_OUT_OPTION='-o$(SPACE)'
- # When linking, how to specify the to be created dynamically linkable library.
+ # When linking, how to specify the output
LD_OUT_OPTION='-o$(SPACE)'
# When archiving, how to specify the to be create static archive for object files.
AR_OUT_OPTION='rcs$(SPACE)'
fi
AC_SUBST(CC_OUT_OPTION)
- AC_SUBST(EXE_OUT_OPTION)
AC_SUBST(LD_OUT_OPTION)
AC_SUBST(AR_OUT_OPTION)
--- a/make/autoconf/spec.gmk.in Thu Apr 05 19:08:48 2018 -0700
+++ b/make/autoconf/spec.gmk.in Mon Apr 09 08:34:30 2018 -0700
@@ -395,7 +395,6 @@
COMPILER_BINDCMD_FILE_FLAG:=@COMPILER_BINDCMD_FILE_FLAG@
CC_OUT_OPTION:=@CC_OUT_OPTION@
-EXE_OUT_OPTION:=@EXE_OUT_OPTION@
LD_OUT_OPTION:=@LD_OUT_OPTION@
AR_OUT_OPTION:=@AR_OUT_OPTION@
@@ -460,11 +459,6 @@
# Xcode SDK path
SDKROOT:=@SDKROOT@
-# The linker on older SuSE distros (e.g. on SLES 10) complains with:
-# "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable."
-# if feeded with a version script which contains named tags.
-USING_BROKEN_SUSE_LD:=@USING_BROKEN_SUSE_LD@
-
# LDFLAGS used to link the jdk native libraries (C-code)
LDFLAGS_JDKLIB:=@LDFLAGS_JDKLIB@
JDKLIB_LIBS:=@JDKLIB_LIBS@
--- a/make/autoconf/toolchain.m4 Thu Apr 05 19:08:48 2018 -0700
+++ b/make/autoconf/toolchain.m4 Mon Apr 09 08:34:30 2018 -0700
@@ -1022,24 +1022,6 @@
# This is later checked when setting flags.
fi
- # Check for broken SuSE 'ld' for which 'Only anonymous version tag is allowed
- # in executable.'
- USING_BROKEN_SUSE_LD=no
- if test "x$OPENJDK_TARGET_OS" = xlinux && test "x$TOOLCHAIN_TYPE" = xgcc; then
- AC_MSG_CHECKING([for broken SuSE 'ld' which only understands anonymous version tags in executables])
- $ECHO "SUNWprivate_1.1 { local: *; };" > version-script.map
- $ECHO "int main() { }" > main.c
- if $CXX -Wl,-version-script=version-script.map main.c 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD; then
- AC_MSG_RESULT(no)
- USING_BROKEN_SUSE_LD=no
- else
- AC_MSG_RESULT(yes)
- USING_BROKEN_SUSE_LD=yes
- fi
- $RM version-script.map main.c a.out
- fi
- AC_SUBST(USING_BROKEN_SUSE_LD)
-
# Setup hotspot lecagy names for toolchains
HOTSPOT_TOOLCHAIN_TYPE=$TOOLCHAIN_TYPE
if test "x$TOOLCHAIN_TYPE" = xclang; then
--- a/make/common/Modules.gmk Thu Apr 05 19:08:48 2018 -0700
+++ b/make/common/Modules.gmk Mon Apr 09 08:34:30 2018 -0700
@@ -394,12 +394,11 @@
endif
LEGAL_SUBDIRS += share/legal
-# Find all legal dirs for a particular module
+# Find all legal src dirs for a particular module
# $1 - Module to find legal dirs for
-FindModuleLegalDirs = \
+FindModuleLegalSrcDirs = \
$(strip $(wildcard \
- $(addsuffix /$(strip $1), $(SUPPORT_OUTPUTDIR)/modules_legal \
- $(IMPORT_MODULES_LEGAL)) \
+ $(addsuffix /$(strip $1), $(IMPORT_MODULES_LEGAL)) \
$(foreach sub, $(LEGAL_SUBDIRS), $(addsuffix /$(strip $1)/$(sub), $(TOP_SRC_DIRS))) \
))
--- a/make/common/NativeCompilation.gmk Thu Apr 05 19:08:48 2018 -0700
+++ b/make/common/NativeCompilation.gmk Mon Apr 09 08:34:30 2018 -0700
@@ -860,10 +860,48 @@
endif
endif
- ifeq ($$($1_TYPE), LIBRARY)
- # Generating a dynamic library.
- $1_EXTRA_LDFLAGS += $$(call SET_SHARED_LIBRARY_NAME,$$($1_BASENAME))
+ ifeq ($$($1_TYPE), STATIC_LIBRARY)
+ $1_VARDEPS := $$($1_AR) $$($1_ARFLAGS) $$($1_LIBS) \
+ $$($1_EXTRA_LIBS)
+ $1_VARDEPS_FILE := $$(call DependOnVariable, $1_VARDEPS, \
+ $$($1_OBJECT_DIR)/$$($1_NOSUFFIX).vardeps)
+
+ # Generating a static library, ie object file archive.
+ ifeq ($(STATIC_BUILD), true)
+ ifeq ($$($1_USE_MAPFILE_FOR_SYMBOLS), true)
+ STATIC_MAPFILE_DEP := $$($1_MAPFILE)
+ endif
+ endif
+
+ $$($1_TARGET): $$($1_ALL_OBJS) $$($1_RES) $$($1_VARDEPS_FILE) $$(STATIC_MAPFILE_DEP)
+ $$(call LogInfo, Building static library $$($1_BASENAME))
+ $$(call ExecuteWithLog, $$($1_OBJECT_DIR)/$$($1_SAFE_NAME)_link, \
+ $$($1_AR) $$($1_ARFLAGS) $(AR_OUT_OPTION)$$($1_TARGET) $$($1_ALL_OBJS) \
+ $$($1_RES))
+ ifeq ($(STATIC_BUILD), true)
+ ifeq ($$($1_USE_MAPFILE_FOR_SYMBOLS), true)
+ $(CP) $$($1_MAPFILE) $$(@D)/$$(basename $$(@F)).symbols
+ else
+ $(GetSymbols)
+ endif
+ endif
+ else
+ # A shared dynamic library or an executable binary has been specified
+ ifeq ($$($1_TYPE), LIBRARY)
+ # Generating a dynamic library.
+ $1_EXTRA_LDFLAGS += $$(call SET_SHARED_LIBRARY_NAME,$$($1_BASENAME))
+
+ # Create loadmap on AIX. Helps in diagnosing some problems.
+ ifneq ($(COMPILER_BINDCMD_FILE_FLAG), )
+ $1_EXTRA_LDFLAGS += $(COMPILER_BINDCMD_FILE_FLAG)$$($1_OBJECT_DIR)/$$($1_NOSUFFIX).loadmap
+ endif
+ endif
+
ifeq ($(OPENJDK_TARGET_OS), windows)
+ ifeq ($$($1_EMBED_MANIFEST), true)
+ $1_EXTRA_LDFLAGS += -manifest:embed
+ endif
+
$1_IMPORT_LIBRARY := $$($1_OBJECT_DIR)/$$($1_NAME).lib
$1_EXTRA_LDFLAGS += "-implib:$$($1_IMPORT_LIBRARY)"
# To properly trigger downstream dependants of the import library, just as
@@ -882,13 +920,9 @@
$(TOUCH) $$@
endif
- # Create loadmap on AIX. Helps in diagnosing some problems.
- ifneq ($(COMPILER_BINDCMD_FILE_FLAG), )
- $1_EXTRA_LDFLAGS += $(COMPILER_BINDCMD_FILE_FLAG)$$($1_OBJECT_DIR)/$$($1_NOSUFFIX).loadmap
- endif
-
$1_VARDEPS := $$($1_LD) $$($1_SYSROOT_LDFLAGS) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) \
- $$(GLOBAL_LIBS) $$($1_LIBS) $$($1_EXTRA_LIBS) $$($1_CREATE_DEBUGINFO_CMDS) \
+ $$(GLOBAL_LIBS) $$($1_LIBS) $$($1_EXTRA_LIBS) $$($1_MT) \
+ $$($1_CODESIGN) $$($1_CREATE_DEBUGINFO_CMDS) $$($1_MANIFEST_VERSION) \
$$($1_STRIP_CMD)
$1_VARDEPS_FILE := $$(call DependOnVariable, $1_VARDEPS, \
$$($1_OBJECT_DIR)/$$($1_NOSUFFIX).vardeps)
@@ -927,8 +961,8 @@
endif
endif
- $$($1_TARGET): $$($1_ALL_OBJS) $$($1_RES) $$($1_REAL_MAPFILE) \
- $$($1_VARDEPS_FILE)
+ $$($1_TARGET): $$($1_ALL_OBJS) $$($1_RES) $$($1_MANIFEST) \
+ $$($1_REAL_MAPFILE) $$($1_VARDEPS_FILE)
ifneq ($$($1_OBJ_FILE_LIST), )
ifeq ($$($1_LINK_OBJS_RELATIVE), true)
$$(eval $$(call ListPathsSafely, $1_ALL_OBJS_RELATIVE, $$($1_OBJ_FILE_LIST)))
@@ -942,74 +976,21 @@
ifeq ($(OPENJDK_TARGET_OS), windows)
$$(call ExecuteWithLog, $$($1_OBJECT_DIR)/$$($1_SAFE_NAME)_link, \
$$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $$($1_SYSROOT_LDFLAGS) \
- $(LD_OUT_OPTION)$$@ $$($1_LD_OBJ_ARG) $$($1_RES) $$(GLOBAL_LIBS) \
- $$($1_LIBS) $$($1_EXTRA_LIBS)) \
+ $(LD_OUT_OPTION)$$($1_TARGET) $$($1_LD_OBJ_ARG) $$($1_RES) $$(GLOBAL_LIBS) \
+ $$($1_LIBS) $$($1_EXTRA_LIBS)) \
| $(GREP) -v "^ Creating library .*\.lib and object .*\.exp" || \
- test "$$$$?" = "1" ; \
+ test "$$$$?" = "1" ; \
$$($1_CREATE_DEBUGINFO_CMDS)
$$($1_STRIP_CMD)
else
$$(call ExecuteWithLog, $$($1_OBJECT_DIR)/$$($1_SAFE_NAME)_link, \
$$(if $$($1_LINK_OBJS_RELATIVE), $$(CD) $$(OUTPUTDIR) ; ) \
$$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $$($1_SYSROOT_LDFLAGS) \
- $(LD_OUT_OPTION)$$@ $$($1_LD_OBJ_ARG) $$($1_RES) $$(GLOBAL_LIBS) \
- $$($1_LIBS) $$($1_EXTRA_LIBS)) ; \
+ $(LD_OUT_OPTION)$$($1_TARGET) $$($1_LD_OBJ_ARG) $$($1_RES) $$(GLOBAL_LIBS) \
+ $$($1_LIBS) $$($1_EXTRA_LIBS)) ; \
$$($1_CREATE_DEBUGINFO_CMDS)
$$($1_STRIP_CMD)
endif
-
- endif
-
- ifeq ($$($1_TYPE), STATIC_LIBRARY)
- $1_VARDEPS := $$($1_AR) $$($1_ARFLAGS) $$($1_LIBS) \
- $$($1_EXTRA_LIBS)
- $1_VARDEPS_FILE := $$(call DependOnVariable, $1_VARDEPS, \
- $$($1_OBJECT_DIR)/$$($1_NOSUFFIX).vardeps)
-
- # Generating a static library, ie object file archive.
- ifeq ($(STATIC_BUILD), true)
- ifeq ($$($1_USE_MAPFILE_FOR_SYMBOLS), true)
- STATIC_MAPFILE_DEP := $$($1_MAPFILE)
- endif
- endif
-
- $$($1_TARGET): $$($1_ALL_OBJS) $$($1_RES) $$($1_VARDEPS_FILE) $$(STATIC_MAPFILE_DEP)
- $$(call LogInfo, Building static library $$($1_BASENAME))
- $$(call ExecuteWithLog, $$($1_OBJECT_DIR)/$$($1_SAFE_NAME)_link, \
- $$($1_AR) $$($1_ARFLAGS) $(AR_OUT_OPTION)$$($1_TARGET) $$($1_ALL_OBJS) \
- $$($1_RES))
- ifeq ($(STATIC_BUILD), true)
- ifeq ($$($1_USE_MAPFILE_FOR_SYMBOLS), true)
- $(CP) $$($1_MAPFILE) $$(@D)/$$(basename $$(@F)).symbols
- else
- $(GetSymbols)
- endif
- endif
- endif
-
- ifeq ($$($1_TYPE), EXECUTABLE)
- # A executable binary has been specified, setup the target for it.
- $1_VARDEPS := $$($1_LD) $$($1_SYSROOT_LDFLAGS) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) \
- $$(GLOBAL_LIBS) $$($1_LIBS) $$($1_EXTRA_LIBS) $$($1_MT) \
- $$($1_CODESIGN) $$($1_CREATE_DEBUGINFO_CMDS) $$($1_MANIFEST_VERSION) \
- $$($1_STRIP_CMD)
- $1_VARDEPS_FILE := $$(call DependOnVariable, $1_VARDEPS, \
- $$($1_OBJECT_DIR)/$$($1_NOSUFFIX).vardeps)
-
- ifeq ($(OPENJDK_TARGET_OS), windows)
- ifeq ($$($1_EMBED_MANIFEST), true)
- $1_EXTRA_LDFLAGS += -manifest:embed
- endif
- endif
-
- $$($1_TARGET): $$($1_ALL_OBJS) $$($1_RES) $$($1_MANIFEST) \
- $$($1_VARDEPS_FILE)
- $$(call LogInfo, Linking executable $$($1_BASENAME))
- $$(call ExecuteWithLog, $$($1_OBJECT_DIR)/$$($1_SAFE_NAME)_link, \
- $$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $$($1_SYSROOT_LDFLAGS) \
- $(EXE_OUT_OPTION)$$($1_TARGET) \
- $$($1_ALL_OBJS) $$($1_RES) \
- $$(GLOBAL_LIBS) $$($1_LIBS) $$($1_EXTRA_LIBS))
ifeq ($(OPENJDK_TARGET_OS), windows)
ifneq ($$($1_MANIFEST), )
$$($1_MT) -nologo -manifest $$($1_MANIFEST) -identity:"$$($1_NAME).exe, version=$$($1_MANIFEST_VERSION)" -outputresource:$$@;#1
@@ -1022,9 +1003,6 @@
$(CODESIGN) -s openjdk_codesign $$@
endif
endif
- $$($1_CREATE_DEBUGINFO_CMDS)
- $$($1_STRIP_CMD)
-
endif
endef
--- a/make/conf/jib-profiles.js Thu Apr 05 19:08:48 2018 -0700
+++ b/make/conf/jib-profiles.js Mon Apr 09 08:34:30 2018 -0700
@@ -432,7 +432,7 @@
target_cpu: "x64",
dependencies: ["devkit", "autoconf"],
configure_args: concat(common.configure_args_64bit, "--with-zlib=system",
- "--with-macosx-version-max=10.7.0"),
+ "--with-macosx-version-max=10.9.0"),
},
"solaris-x64": {
@@ -472,7 +472,7 @@
build_cpu: "x64",
dependencies: ["devkit", "autoconf", "build_devkit", "cups"],
configure_args: [
- "--openjdk-target=aarch64-linux-gnu"
+ "--openjdk-target=aarch64-linux-gnu", "--with-freetype=bundled",
],
},
--- a/make/copy/Copy-java.base.gmk Thu Apr 05 19:08:48 2018 -0700
+++ b/make/copy/Copy-java.base.gmk Mon Apr 09 08:34:30 2018 -0700
@@ -24,6 +24,7 @@
#
include CopyCommon.gmk
+include Modules.gmk
include TextFileProcessing.gmk
$(eval $(call IncludeCustomExtension, copy/Copy-java.base.gmk))
@@ -224,13 +225,28 @@
$(eval $(call SetupCopyFiles, COPY_JDK_NOTICES, \
FILES := $(JDK_LICENSE) $(JDK_NOTICE) $(JDK_ADDITIONAL_LICENSE_INFO), \
- DEST := $(LEGAL_DST_DIR), \
+ DEST := $(COMMON_LEGAL_DST_DIR), \
FLATTEN := true, \
))
TARGETS += $(COPY_JDK_NOTICES)
################################################################################
+#
+# Copy and filter the legal files depending on what 3rd party components are
+# bundled or linked from the OS.
+#
+ifeq ($(USE_EXTERNAL_LIBZ), true)
+ LEGAL_EXCLUDES += zlib.md
+endif
+
+$(eval $(call SetupCopyLegalFiles, COPY_LEGAL, \
+ EXCLUDES := $(LEGAL_EXCLUDES), \
+))
+
+TARGETS += $(COPY_LEGAL)
+
+################################################################################
# Optionally copy libffi.so.? into the the image
ifeq ($(ENABLE_LIBFFI_BUNDLING), true)
--- a/make/copy/Copy-java.desktop.gmk Thu Apr 05 19:08:48 2018 -0700
+++ b/make/copy/Copy-java.desktop.gmk Mon Apr 09 08:34:30 2018 -0700
@@ -24,6 +24,7 @@
#
include CopyCommon.gmk
+include Modules.gmk
$(eval $(call IncludeCustomExtension, copy/Copy-java.desktop.gmk))
@@ -48,3 +49,34 @@
TARGETS += $(PSFONTPROPFILE_TARGET_FILES)
################################################################################
+#
+# Copy and filter the legal files depending on what 3rd party components are
+# bundled or linked from the OS.
+#
+ifeq ($(USE_EXTERNAL_LIBJPEG), true)
+ LEGAL_EXCLUDES += jpeg.md
+endif
+
+ifeq ($(USE_EXTERNAL_LIBGIF), true)
+ LEGAL_EXCLUDES += giflib.md
+endif
+
+ifeq ($(USE_EXTERNAL_LIBPNG), true)
+ LEGAL_EXCLUDES += libpng.md
+endif
+
+ifeq ($(USE_EXTERNAL_LCMS), true)
+ LEGAL_EXCLUDES += lcms.md
+endif
+
+ifeq ($(FREETYPE_TO_USE), system)
+ LEGAL_EXCLUDES += freetype.md
+endif
+
+$(eval $(call SetupCopyLegalFiles, COPY_LEGAL, \
+ EXCLUDES := $(LEGAL_EXCLUDES), \
+))
+
+TARGETS += $(COPY_LEGAL)
+
+################################################################################
--- a/make/copy/CopyCommon.gmk Thu Apr 05 19:08:48 2018 -0700
+++ b/make/copy/CopyCommon.gmk Mon Apr 09 08:34:30 2018 -0700
@@ -26,6 +26,7 @@
LIB_DST_DIR := $(SUPPORT_OUTPUTDIR)/modules_libs/$(MODULE)
CONF_DST_DIR := $(SUPPORT_OUTPUTDIR)/modules_conf/$(MODULE)
LEGAL_DST_DIR := $(SUPPORT_OUTPUTDIR)/modules_legal/$(MODULE)
+COMMON_LEGAL_DST_DIR := $(SUPPORT_OUTPUTDIR)/modules_legal/common
################################################################################
#
@@ -60,3 +61,24 @@
TARGETS += $(COPY_EXPORTED_INCLUDE_OS)
endif
+
+################################################################################
+# Setup make rules for copying legal files. This is only needed if the files
+# need to be filtered due to optional components being enabled/disabled.
+# Otherwise CreateJmods.gmk will find the legal files in the original src dirs.
+#
+# Parameter 1 is the name of the rule.
+#
+# Remaining parameters are named arguments. These include:
+# EXCLUDES : List of filenames to exclude from copy
+SetupCopyLegalFiles = $(NamedParamsMacroTemplate)
+define SetupCopyLegalFilesBody
+ $$(foreach f, $$(filter-out $$(addprefix %/, $$($1_EXCLUDES)), \
+ $$(wildcard $$(addsuffix /*, $$(call FindModuleLegalSrcDirs, $$(MODULE))))), \
+ $$(eval $$(call SetupCopyFiles, $1_$$(notdir $$f), \
+ DEST := $$(LEGAL_DST_DIR), \
+ FILES := $$f, \
+ )) \
+ $$(eval $1 += $$($1_$$(notdir $$f))) \
+ )
+endef
--- a/make/data/tzdata/VERSION Thu Apr 05 19:08:48 2018 -0700
+++ b/make/data/tzdata/VERSION Mon Apr 09 08:34:30 2018 -0700
@@ -21,4 +21,4 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-tzdata2018c
+tzdata2018d
--- a/make/data/tzdata/africa Thu Apr 05 19:08:48 2018 -0700
+++ b/make/data/tzdata/africa Mon Apr 09 08:34:30 2018 -0700
@@ -138,13 +138,13 @@
# Cape Verde / Cabo Verde
#
+# From Paul Eggert (2018-02-16):
# Shanks gives 1907 for the transition to +02.
-# Perhaps the 1911-05-26 Portuguese decree
-# https://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
-# merely made it official?
+# For now, ignore that and follow the 1911-05-26 Portuguese decree
+# (see Europe/Lisbon).
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Atlantic/Cape_Verde -1:34:04 - LMT 1907 # Praia
+Zone Atlantic/Cape_Verde -1:34:04 - LMT 1912 Jan 01 2:00u # Praia
-2:00 - -02 1942 Sep
-2:00 1:00 -01 1945 Oct 15
-2:00 - -02 1975 Nov 25 2:00
@@ -393,15 +393,34 @@
# See Africa/Abidjan.
# Ghana
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+
+# From Paul Eggert (2018-01-30):
# Whitman says DST was observed from 1931 to "the present";
-# Shanks & Pottenger say 1936 to 1942;
-# and September 1 to January 1 is given by:
-# Scott Keltie J, Epstein M (eds), The Statesman's Year-Book,
-# 57th ed. Macmillan, London (1920), OCLC 609408015, pp xxviii.
-# For lack of better info, assume DST was observed from 1920 to 1942.
-Rule Ghana 1920 1942 - Sep 1 0:00 0:20 GHST
-Rule Ghana 1920 1942 - Dec 31 0:00 0 GMT
+# Shanks & Pottenger say 1936 to 1942 with 20 minutes of DST,
+# with transitions on 09-01 and 12-31 at 00:00.
+# Page 33 of Parish GCB, Colonial Reports - Annual. No. 1066. Gold
+# Coast. Report for 1919. (March 1921), OCLC 784024077
+# http://libsysdigi.library.illinois.edu/ilharvest/africana/books2011-05/5530214/5530214_1919/5530214_1919_opt.pdf
+# lists the Determination of the Time Ordinance, 1919, No. 18,
+# "to advance the time observed locally by the space of twenty minutes
+# during the last four months of each year; the object in view being
+# to extend during those months the period of daylight-time available
+# for evening recreation after office hours."
+# Vanessa Ogle, The Global Transformation of Time, 1870-1950 (2015), p 33,
+# writes "In 1919, the Gold Coast (Ghana as of 1957) made Greenwich
+# time its legal time and simultaneously legalized a summer time of
+# UTC - 00:20 minutes from March to October."; a footnote lists
+# the ordinance as being dated 1919-11-24.
+# The Crown Colonist, Volume 12 (1942), p 176, says "the Government
+# intend advancing Gold Coast time half an hour ahead of G.M.T.
+# The actual date of the alteration has not yet been announced."
+# These sources are incomplete and contradictory. Possibly what is
+# 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 Ghana 1920 1942 - Sep 1 0:00 0:20 -
+Rule Ghana 1920 1942 - Dec 31 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Accra -0:00:52 - LMT 1918
0:00 Ghana GMT/+0020
@@ -411,13 +430,13 @@
# Guinea-Bissau
#
+# From Paul Eggert (2018-02-16):
# Shanks gives 1911-05-26 for the transition to WAT,
# evidently confusing the date of the Portuguese decree
-# https://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
-# with the date that it took effect, namely 1912-01-01.
+# (see Europe/Lisbon) with the date that it took effect.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1
+Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1 1:00u
-1:00 - -01 1975
0:00 - GMT
@@ -613,9 +632,9 @@
# at 2am (or 02:00) local time..."
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Mauritius 1982 only - Oct 10 0:00 1:00 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 S
+Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 -
Rule Mauritius 2009 only - Mar lastSun 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis
@@ -1060,6 +1079,8 @@
# São Tomé and Príncipe
+# See Europe/Lisbon for info about the 1912 transition.
+
# From Steffen Thorsen (2018-01-08):
# Multiple sources tell that São Tomé changed from UTC to UTC+1 as
# they entered the year 2018.
@@ -1068,7 +1089,7 @@
# http://www.mnec.gov.st/index.php/publicacoes/documentos/file/90-decreto-lei-n-25-2017
Zone Africa/Sao_Tome 0:26:56 - LMT 1884
- -0:36:45 - LMT 1912 # Lisbon Mean Time
+ -0:36:45 - LMT 1912 Jan 1 00:00u # Lisbon MT
0:00 - GMT 2018 Jan 1 01:00
1:00 - WAT
--- a/make/data/tzdata/antarctica Thu Apr 05 19:08:48 2018 -0700
+++ b/make/data/tzdata/antarctica Mon Apr 09 08:34:30 2018 -0700
@@ -98,7 +98,8 @@
8:00 - +08 2011 Oct 28 2:00
11:00 - +11 2012 Feb 21 17:00u
8:00 - +08 2016 Oct 22
- 11:00 - +11
+ 11:00 - +11 2018 Mar 11 4:00
+ 8:00 - +08
Zone Antarctica/Davis 0 - -00 1957 Jan 13
7:00 - +07 1964 Nov
0 - -00 1969 Feb
--- a/make/data/tzdata/asia Thu Apr 05 19:08:48 2018 -0700
+++ b/make/data/tzdata/asia Mon Apr 09 08:34:30 2018 -0700
@@ -92,13 +92,13 @@
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 -
-Rule E-EurAsia 1981 max - Mar lastSun 0:00 1:00 S
+Rule E-EurAsia 1981 max - Mar lastSun 0:00 1:00 -
Rule E-EurAsia 1979 1995 - Sep lastSun 0:00 0 -
Rule E-EurAsia 1996 max - Oct lastSun 0:00 0 -
-Rule RussiaAsia 1981 1984 - Apr 1 0:00 1:00 S
+Rule RussiaAsia 1981 1984 - Apr 1 0:00 1:00 -
Rule RussiaAsia 1981 1983 - Oct 1 0:00 0 -
Rule RussiaAsia 1984 1995 - Sep lastSun 2:00s 0 -
-Rule RussiaAsia 1985 2010 - Mar lastSun 2:00s 1:00 S
+Rule RussiaAsia 1985 2010 - Mar lastSun 2:00s 1:00 -
Rule RussiaAsia 1996 2010 - Oct lastSun 2:00s 0 -
# Afghanistan
@@ -133,7 +133,7 @@
# (brief)
# http://www.worldtimezone.com/dst_news/dst_news_armenia03.html
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Armenia 2011 only - Mar lastSun 2:00s 1:00 S
+Rule Armenia 2011 only - Mar lastSun 2:00s 1:00 -
Rule Armenia 2011 only - Oct lastSun 2:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2
@@ -159,7 +159,7 @@
# http://en.apa.az/xeber_azerbaijan_abolishes_daylight_savings_ti_240862.html
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Azer 1997 2015 - Mar lastSun 4:00 1:00 S
+Rule Azer 1997 2015 - Mar lastSun 4:00 1:00 -
Rule Azer 1997 2015 - Oct lastSun 5:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Baku 3:19:24 - LMT 1924 May 2
@@ -246,7 +246,7 @@
# http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Dhaka 2009 only - Jun 19 23:00 1:00 S
+Rule Dhaka 2009 only - Jun 19 23:00 1:00 -
Rule Dhaka 2009 only - Dec 31 24:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -787,8 +787,9 @@
Rule Macau 1975 1977 - Apr Sun>=15 3:30 1:00 D
Rule Macau 1978 1980 - Apr Sun>=15 0:00 1:00 D
Rule Macau 1978 1980 - Oct Sun>=15 0:00 0 S
+# See Europe/Lisbon for info about the 1912 transition.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Macau 7:34:20 - LMT 1912 Jan 1
+Zone Asia/Macau 7:34:20 - LMT 1911 Dec 31 16:00u
8:00 Macau C%sT
@@ -1129,61 +1130,61 @@
# thirtieth day of Shahrivar.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Iran 1978 1980 - Mar 21 0:00 1:00 D
-Rule Iran 1978 only - Oct 21 0:00 0 S
-Rule Iran 1979 only - Sep 19 0:00 0 S
-Rule Iran 1980 only - Sep 23 0:00 0 S
-Rule Iran 1991 only - May 3 0:00 1:00 D
-Rule Iran 1992 1995 - Mar 22 0:00 1:00 D
-Rule Iran 1991 1995 - Sep 22 0:00 0 S
-Rule Iran 1996 only - Mar 21 0:00 1:00 D
-Rule Iran 1996 only - Sep 21 0:00 0 S
-Rule Iran 1997 1999 - Mar 22 0:00 1:00 D
-Rule Iran 1997 1999 - Sep 22 0:00 0 S
-Rule Iran 2000 only - Mar 21 0:00 1:00 D
-Rule Iran 2000 only - Sep 21 0:00 0 S
-Rule Iran 2001 2003 - Mar 22 0:00 1:00 D
-Rule Iran 2001 2003 - Sep 22 0:00 0 S
-Rule Iran 2004 only - Mar 21 0:00 1:00 D
-Rule Iran 2004 only - Sep 21 0:00 0 S
-Rule Iran 2005 only - Mar 22 0:00 1:00 D
-Rule Iran 2005 only - Sep 22 0:00 0 S
-Rule Iran 2008 only - Mar 21 0:00 1:00 D
-Rule Iran 2008 only - Sep 21 0:00 0 S
-Rule Iran 2009 2011 - Mar 22 0:00 1:00 D
-Rule Iran 2009 2011 - Sep 22 0:00 0 S
-Rule Iran 2012 only - Mar 21 0:00 1:00 D
-Rule Iran 2012 only - Sep 21 0:00 0 S
-Rule Iran 2013 2015 - Mar 22 0:00 1:00 D
-Rule Iran 2013 2015 - Sep 22 0:00 0 S
-Rule Iran 2016 only - Mar 21 0:00 1:00 D
-Rule Iran 2016 only - Sep 21 0:00 0 S
-Rule Iran 2017 2019 - Mar 22 0:00 1:00 D
-Rule Iran 2017 2019 - Sep 22 0:00 0 S
-Rule Iran 2020 only - Mar 21 0:00 1:00 D
-Rule Iran 2020 only - Sep 21 0:00 0 S
-Rule Iran 2021 2023 - Mar 22 0:00 1:00 D
-Rule Iran 2021 2023 - Sep 22 0:00 0 S
-Rule Iran 2024 only - Mar 21 0:00 1:00 D
-Rule Iran 2024 only - Sep 21 0:00 0 S
-Rule Iran 2025 2027 - Mar 22 0:00 1:00 D
-Rule Iran 2025 2027 - Sep 22 0:00 0 S
-Rule Iran 2028 2029 - Mar 21 0:00 1:00 D
-Rule Iran 2028 2029 - Sep 21 0:00 0 S
-Rule Iran 2030 2031 - Mar 22 0:00 1:00 D
-Rule Iran 2030 2031 - Sep 22 0:00 0 S
-Rule Iran 2032 2033 - Mar 21 0:00 1:00 D
-Rule Iran 2032 2033 - Sep 21 0:00 0 S
-Rule Iran 2034 2035 - Mar 22 0:00 1:00 D
-Rule Iran 2034 2035 - Sep 22 0:00 0 S
+Rule Iran 1978 1980 - Mar 21 0:00 1:00 -
+Rule Iran 1978 only - Oct 21 0:00 0 -
+Rule Iran 1979 only - Sep 19 0:00 0 -
+Rule Iran 1980 only - Sep 23 0:00 0 -
+Rule Iran 1991 only - May 3 0:00 1:00 -
+Rule Iran 1992 1995 - Mar 22 0:00 1:00 -
+Rule Iran 1991 1995 - Sep 22 0:00 0 -
+Rule Iran 1996 only - Mar 21 0:00 1:00 -
+Rule Iran 1996 only - Sep 21 0:00 0 -
+Rule Iran 1997 1999 - Mar 22 0:00 1:00 -
+Rule Iran 1997 1999 - Sep 22 0:00 0 -
+Rule Iran 2000 only - Mar 21 0:00 1:00 -
+Rule Iran 2000 only - Sep 21 0:00 0 -
+Rule Iran 2001 2003 - Mar 22 0:00 1:00 -
+Rule Iran 2001 2003 - Sep 22 0:00 0 -
+Rule Iran 2004 only - Mar 21 0:00 1:00 -
+Rule Iran 2004 only - Sep 21 0:00 0 -
+Rule Iran 2005 only - Mar 22 0:00 1:00 -
+Rule Iran 2005 only - Sep 22 0:00 0 -
+Rule Iran 2008 only - Mar 21 0:00 1:00 -
+Rule Iran 2008 only - Sep 21 0:00 0 -
+Rule Iran 2009 2011 - Mar 22 0:00 1:00 -
+Rule Iran 2009 2011 - Sep 22 0:00 0 -
+Rule Iran 2012 only - Mar 21 0:00 1:00 -
+Rule Iran 2012 only - Sep 21 0:00 0 -
+Rule Iran 2013 2015 - Mar 22 0:00 1:00 -
+Rule Iran 2013 2015 - Sep 22 0:00 0 -
+Rule Iran 2016 only - Mar 21 0:00 1:00 -
+Rule Iran 2016 only - Sep 21 0:00 0 -
+Rule Iran 2017 2019 - Mar 22 0:00 1:00 -
+Rule Iran 2017 2019 - Sep 22 0:00 0 -
+Rule Iran 2020 only - Mar 21 0:00 1:00 -
+Rule Iran 2020 only - Sep 21 0:00 0 -
+Rule Iran 2021 2023 - Mar 22 0:00 1:00 -
+Rule Iran 2021 2023 - Sep 22 0:00 0 -
+Rule Iran 2024 only - Mar 21 0:00 1:00 -
+Rule Iran 2024 only - Sep 21 0:00 0 -
+Rule Iran 2025 2027 - Mar 22 0:00 1:00 -
+Rule Iran 2025 2027 - Sep 22 0:00 0 -
+Rule Iran 2028 2029 - Mar 21 0:00 1:00 -
+Rule Iran 2028 2029 - Sep 21 0:00 0 -
+Rule Iran 2030 2031 - Mar 22 0:00 1:00 -
+Rule Iran 2030 2031 - Sep 22 0:00 0 -
+Rule Iran 2032 2033 - Mar 21 0:00 1:00 -
+Rule Iran 2032 2033 - Sep 21 0:00 0 -
+Rule Iran 2034 2035 - Mar 22 0:00 1:00 -
+Rule Iran 2034 2035 - Sep 22 0:00 0 -
#
# The following rules are approximations starting in the year 2038.
# These are the best post-2037 approximations available, given the
# restrictions of a single rule using a Gregorian-based data format.
# At some point this table will need to be extended, though quite
# possibly Iran will change the rules first.
-Rule Iran 2036 max - Mar 21 0:00 1:00 D
-Rule Iran 2036 max - Sep 21 0:00 0 S
+Rule Iran 2036 max - Mar 21 0:00 1:00 -
+Rule Iran 2036 max - Sep 21 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tehran 3:25:44 - LMT 1916
@@ -1219,17 +1220,17 @@
# https://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Iraq 1982 only - May 1 0:00 1:00 D
-Rule Iraq 1982 1984 - Oct 1 0:00 0 S
-Rule Iraq 1983 only - Mar 31 0:00 1:00 D
-Rule Iraq 1984 1985 - Apr 1 0:00 1:00 D
-Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 S
-Rule Iraq 1986 1990 - Mar lastSun 1:00s 1:00 D
+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 -
+Rule Iraq 1984 1985 - Apr 1 0:00 1:00 -
+Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 -
+Rule Iraq 1986 1990 - Mar lastSun 1:00s 1:00 -
# IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the ':01' is a typo.
# Shanks & Pottenger say Iraq did not observe DST 1992/1997; ignore this.
#
-Rule Iraq 1991 2007 - Apr 1 3:00s 1:00 D
-Rule Iraq 1991 2007 - Oct 1 3:00s 0 S
+Rule Iraq 1991 2007 - Apr 1 3:00s 1:00 -
+Rule Iraq 1991 2007 - Oct 1 3:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Baghdad 2:57:40 - LMT 1890
2:57:36 - BMT 1918 # Baghdad Mean Time?
@@ -1501,8 +1502,7 @@
# From Hideyuki Suzuki (1998-11-09):
# 'Tokyo' usually stands for the former location of Tokyo Astronomical
-# Observatory: 139 degrees 44' 40.90" E (9h 18m 58.727s),
-# 35 degrees 39' 16.0" N.
+# Observatory: 139° 44' 40.90" E (9h 18m 58.727s), 35° 39' 16.0" N.
# This data is from 'Rika Nenpyou (Chronological Scientific Tables) 1996'
# edited by National Astronomical Observatory of Japan....
# JST (Japan Standard Time) has been used since 1888-01-01 00:00 (JST).
@@ -1510,10 +1510,10 @@
# From Hideyuki Suzuki (1998-11-16):
# The ordinance No. 51 (1886) established "standard time" in Japan,
-# which stands for the time on 135 degrees E.
+# which stands for the time on 135° E.
# In the ordinance No. 167 (1895), "standard time" was renamed to "central
# standard time". And the same ordinance also established "western standard
-# time", which stands for the time on 120 degrees E.... But "western standard
+# time", which stands for the time on 120° E.... But "western standard
# time" was abolished in the ordinance No. 529 (1937). In the ordinance No.
# 167, there is no mention regarding for what place western standard time is
# standard....
@@ -1926,9 +1926,9 @@
# 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 Kyrgyz 1992 1996 - Apr Sun>=7 0:00s 1:00 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 S
+Rule Kyrgyz 1997 2005 - Mar lastSun 2:30 1:00 -
Rule Kyrgyz 1997 2004 - Oct lastSun 2:30 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Bishkek 4:58:24 - LMT 1924 May 2
@@ -2060,7 +2060,7 @@
# Malaysia
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule NBorneo 1935 1941 - Sep 14 0:00 0:20 TS # one-Third Summer
+Rule NBorneo 1935 1941 - Sep 14 0:00 0:20 -
Rule NBorneo 1935 1941 - Dec 14 0:00 0 -
#
# peninsular Malaysia
@@ -2205,7 +2205,7 @@
# http://zasag.mn/news/view/8969
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Mongol 1983 1984 - Apr 1 0:00 1:00 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,
# but McDow says the 2001 switches occurred at 02:00. Also, IATA SSIM
@@ -2222,13 +2222,13 @@
# Mongolian Government meeting has concluded today to cancel daylight
# saving time adoption in Mongolia. Source: http://zasag.mn/news/view/16192
-Rule Mongol 1985 1998 - Mar lastSun 0:00 1:00 S
+Rule Mongol 1985 1998 - Mar lastSun 0:00 1:00 -
Rule Mongol 1984 1998 - Sep lastSun 0:00 0 -
# IATA SSIM (1999-09) says Mongolia no longer observes DST.
-Rule Mongol 2001 only - Apr lastSat 2:00 1:00 S
+Rule Mongol 2001 only - Apr lastSat 2:00 1:00 -
Rule Mongol 2001 2006 - Sep lastSat 2:00 0 -
-Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 S
-Rule Mongol 2015 2016 - Mar lastSat 2:00 1:00 S
+Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 -
+Rule Mongol 2015 2016 - Mar lastSat 2:00 1:00 -
Rule Mongol 2015 2016 - Sep lastSat 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -2662,9 +2662,6 @@
# [Google translation]: "The Council also decided to start daylight
# saving in Palestine as of one o'clock on Saturday morning,
# 2016-03-26, to provide the clock 60 minutes ahead."
-#
-# From Paul Eggert (2016-03-12):
-# Predict spring transitions on March's last Saturday at 01:00 from now on.
# From Sharef Mustafa (2016-10-19):
# [T]he Palestinian cabinet decision (Mar 8th 2016) published on
@@ -2681,6 +2678,16 @@
# https://www.timeanddate.com/time/change/gaza-strip/gaza
# https://www.timeanddate.com/time/change/west-bank/hebron
+# From Sharef Mustafa (2018-03-16):
+# Palestine summer time will start on Mar 24th 2018 by advancing the
+# clock by 60 minutes as per Palestinian cabinet decision published on
+# the offical website, though the decree did not specify the exact
+# time of the time shift.
+# http://www.palestinecabinet.gov.ps/Website/AR/NDecrees/ViewFile.ashx?ID=e7a42ab7-ee23-435a-b9c8-a4f7e81f3817
+#
+# From Paul Eggert (2018-03-16):
+# For 2016 on, predict spring transitions on March's fourth Saturday at 01:00.
+
# Rule NAME FROM TO TYPE 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 -
@@ -2710,7 +2717,7 @@
Rule Palestine 2013 only - Sep Fri>=21 0:00 0 -
Rule Palestine 2014 2015 - Oct Fri>=21 0:00 0 -
Rule Palestine 2015 only - Mar lastFri 24:00 1:00 S
-Rule Palestine 2016 max - Mar lastSat 1:00 1:00 S
+Rule Palestine 2016 max - Mar Sat>=22 1:00 1:00 S
Rule Palestine 2016 max - Oct lastSat 1:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -2760,11 +2767,11 @@
# http://www.philstar.com/headlines/2014/08/05/1354152/pnoy-urged-declare-use-daylight-saving-time
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Phil 1936 only - Nov 1 0:00 1:00 S
+Rule Phil 1936 only - Nov 1 0:00 1:00 -
Rule Phil 1937 only - Feb 1 0:00 0 -
-Rule Phil 1954 only - Apr 12 0:00 1:00 S
+Rule Phil 1954 only - Apr 12 0:00 1:00 -
Rule Phil 1954 only - Jul 1 0:00 0 -
-Rule Phil 1978 only - Mar 22 0:00 1:00 S
+Rule Phil 1978 only - Mar 22 0:00 1:00 -
Rule Phil 1978 only - Sep 21 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Manila -15:56:00 - LMT 1844 Dec 31
@@ -3120,9 +3127,9 @@
# and is the basis for the information below.
#
# The 1906 transition was effective July 1 and standardized Indochina to
-# Phù Liễn Observatory, legally 104 deg. 17'17" east of Paris.
+# Phù Liễn Observatory, legally 104° 17' 17" east of Paris.
# It's unclear whether this meant legal Paris Mean Time (00:09:21) or
-# the Paris Meridian (2 deg. 20'14.03" E); the former yields 07:06:30.1333...
+# the Paris Meridian (2° 20' 14.03" E); the former yields 07:06:30.1333...
# and the latter 07:06:29.333... so either way it rounds to 07:06:30,
# which is used below even though the modern-day Phù Liễn Observatory
# is closer to 07:06:31. Abbreviate Phù Liễn Mean Time as PLMT.
--- a/make/data/tzdata/australasia Thu Apr 05 19:08:48 2018 -0700
+++ b/make/data/tzdata/australasia Mon Apr 09 08:34:30 2018 -0700
@@ -219,20 +219,20 @@
# Lord Howe Island
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule LH 1981 1984 - Oct lastSun 2:00 1:00 D
-Rule LH 1982 1985 - Mar Sun>=1 2:00 0 S
-Rule LH 1985 only - Oct lastSun 2:00 0:30 D
-Rule LH 1986 1989 - Mar Sun>=15 2:00 0 S
-Rule LH 1986 only - Oct 19 2:00 0:30 D
-Rule LH 1987 1999 - Oct lastSun 2:00 0:30 D
-Rule LH 1990 1995 - Mar Sun>=1 2:00 0 S
-Rule LH 1996 2005 - Mar lastSun 2:00 0 S
-Rule LH 2000 only - Aug lastSun 2:00 0:30 D
-Rule LH 2001 2007 - Oct lastSun 2:00 0:30 D
-Rule LH 2006 only - Apr Sun>=1 2:00 0 S
-Rule LH 2007 only - Mar lastSun 2:00 0 S
-Rule LH 2008 max - Apr Sun>=1 2:00 0 S
-Rule LH 2008 max - Oct Sun>=1 2:00 0:30 D
+Rule LH 1981 1984 - Oct lastSun 2:00 1:00 -
+Rule LH 1982 1985 - Mar Sun>=1 2:00 0 -
+Rule LH 1985 only - Oct lastSun 2:00 0:30 -
+Rule LH 1986 1989 - Mar Sun>=15 2:00 0 -
+Rule LH 1986 only - Oct 19 2:00 0:30 -
+Rule LH 1987 1999 - Oct lastSun 2:00 0:30 -
+Rule LH 1990 1995 - Mar Sun>=1 2:00 0 -
+Rule LH 1996 2005 - Mar lastSun 2:00 0 -
+Rule LH 2000 only - Aug lastSun 2:00 0:30 -
+Rule LH 2001 2007 - Oct lastSun 2:00 0:30 -
+Rule LH 2006 only - Apr Sun>=1 2:00 0 -
+Rule LH 2007 only - Mar lastSun 2:00 0 -
+Rule LH 2008 max - Apr Sun>=1 2:00 0 -
+Rule LH 2008 max - Oct Sun>=1 2:00 0:30 -
Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb
10:00 - AEST 1981 Mar
10:30 LH +1030/+1130 1985 Jul
@@ -390,15 +390,15 @@
# practice than guessing no DST.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 S
+Rule Fiji 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 S
+Rule Fiji 2009 only - Nov 29 2:00 1:00 -
Rule Fiji 2010 only - Mar lastSun 3:00 0 -
-Rule Fiji 2010 2013 - Oct Sun>=21 2:00 1:00 S
+Rule Fiji 2010 2013 - Oct Sun>=21 2:00 1:00 -
Rule Fiji 2011 only - Mar Sun>=1 3:00 0 -
Rule Fiji 2012 2013 - Jan Sun>=18 3:00 0 -
Rule Fiji 2014 only - Jan Sun>=18 2:00 0 -
-Rule Fiji 2014 max - Nov Sun>=1 2:00 1:00 S
+Rule Fiji 2014 max - Nov Sun>=1 2:00 1:00 -
Rule Fiji 2015 max - Jan Sun>=14 3:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva
@@ -429,11 +429,11 @@
12:00 - +12
Zone Pacific/Enderbury -11:24:20 - LMT 1901
-12:00 - -12 1979 Oct
- -11:00 - -11 1995
+ -11:00 - -11 1994 Dec 31
13:00 - +13
Zone Pacific/Kiritimati -10:29:20 - LMT 1901
-10:40 - -1040 1979 Oct
- -10:00 - -10 1995
+ -10:00 - -10 1994 Dec 31
14:00 - +14
# N Mariana Is
@@ -470,9 +470,9 @@
# New Caledonia
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule NC 1977 1978 - Dec Sun>=1 0:00 1:00 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 S
+Rule NC 1996 only - Dec 1 2:00s 1:00 -
# Shanks & Pottenger say the following was at 2:00; go with IATA.
Rule NC 1997 only - Mar 2 2:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -492,27 +492,28 @@
Rule NZ 1934 1940 - Apr lastSun 2:00 0 M
Rule NZ 1934 1940 - Sep lastSun 2:00 0:30 S
Rule NZ 1946 only - Jan 1 0:00 0 S
-# Since 1957 Chatham has been 45 minutes ahead of NZ, but there's no
-# convenient single notation for the date and time of this transition
-# so we must duplicate the Rule lines.
+# Since 1957 Chatham has been 45 minutes ahead of NZ, but until 2018a
+# there was no documented single notation for the date and time of this
+# transition. Duplicate the Rule lines for now, to give the 2018a change
+# time to percolate out.
Rule NZ 1974 only - Nov Sun>=1 2:00s 1:00 D
-Rule Chatham 1974 only - Nov Sun>=1 2:45s 1:00 D
+Rule Chatham 1974 only - Nov Sun>=1 2:45s 1:00 -
Rule NZ 1975 only - Feb lastSun 2:00s 0 S
-Rule Chatham 1975 only - Feb lastSun 2:45s 0 S
+Rule Chatham 1975 only - Feb lastSun 2:45s 0 -
Rule NZ 1975 1988 - Oct lastSun 2:00s 1:00 D
-Rule Chatham 1975 1988 - Oct lastSun 2:45s 1:00 D
+Rule Chatham 1975 1988 - Oct lastSun 2:45s 1:00 -
Rule NZ 1976 1989 - Mar Sun>=1 2:00s 0 S
-Rule Chatham 1976 1989 - Mar Sun>=1 2:45s 0 S
+Rule Chatham 1976 1989 - Mar Sun>=1 2:45s 0 -
Rule NZ 1989 only - Oct Sun>=8 2:00s 1:00 D
-Rule Chatham 1989 only - Oct Sun>=8 2:45s 1:00 D
+Rule Chatham 1989 only - Oct Sun>=8 2:45s 1:00 -
Rule NZ 1990 2006 - Oct Sun>=1 2:00s 1:00 D
-Rule Chatham 1990 2006 - Oct Sun>=1 2:45s 1:00 D
+Rule Chatham 1990 2006 - Oct Sun>=1 2:45s 1:00 -
Rule NZ 1990 2007 - Mar Sun>=15 2:00s 0 S
-Rule Chatham 1990 2007 - Mar Sun>=15 2:45s 0 S
+Rule Chatham 1990 2007 - Mar Sun>=15 2:45s 0 -
Rule NZ 2007 max - Sep lastSun 2:00s 1:00 D
-Rule Chatham 2007 max - Sep lastSun 2:45s 1:00 D
+Rule Chatham 2007 max - Sep lastSun 2:45s 1:00 -
Rule NZ 2008 max - Apr Sun>=1 2:00s 0 S
-Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 S
+Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Auckland 11:39:04 - LMT 1868 Nov 2
11:30 NZ NZ%sT 1946 Jan 1
@@ -536,9 +537,9 @@
# Cook Is
# From Shanks & Pottenger:
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Cook 1978 only - Nov 12 0:00 0:30 HS
+Rule Cook 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 HS
+Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua
-10:30 - -1030 1978 Nov 12
@@ -679,11 +680,11 @@
# Assume the pattern instituted in 2012 will continue indefinitely.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule WS 2010 only - Sep lastSun 0:00 1 D
-Rule WS 2011 only - Apr Sat>=1 4:00 0 S
-Rule WS 2011 only - Sep lastSat 3:00 1 D
-Rule WS 2012 max - Apr Sun>=1 4:00 0 S
-Rule WS 2012 max - Sep lastSun 3:00 1 D
+Rule WS 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 -
+Rule WS 2012 max - Apr Sun>=1 4:00 0 -
+Rule WS 2012 max - Sep lastSun 3:00 1 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Apia 12:33:04 - LMT 1892 Jul 5
-11:26:56 - LMT 1911
@@ -723,11 +724,11 @@
# Tonga
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Tonga 1999 only - Oct 7 2:00s 1:00 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 S
+Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 -
Rule Tonga 2001 2002 - Jan lastSun 2:00 0 -
-Rule Tonga 2016 only - Nov Sun>=1 2:00 1:00 S
+Rule Tonga 2016 only - Nov Sun>=1 2:00 1:00 -
Rule Tonga 2017 only - Jan Sun>=15 3:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Tongatapu 12:19:20 - LMT 1901
@@ -804,12 +805,12 @@
# Vanuatu
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Vanuatu 1983 only - Sep 25 0:00 1:00 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 S
-Rule Vanuatu 1985 1991 - Sep Sun>=23 0:00 1:00 S
+Rule Vanuatu 1984 only - Oct 23 0:00 1:00 -
+Rule Vanuatu 1985 1991 - Sep Sun>=23 0:00 1:00 -
Rule Vanuatu 1992 1993 - Jan Sun>=23 0:00 0 -
-Rule Vanuatu 1992 only - Oct Sun>=23 0:00 1:00 S
+Rule Vanuatu 1992 only - Oct Sun>=23 0:00 1:00 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
11:00 Vanuatu +11/+12
@@ -1108,6 +1109,13 @@
# South Australian time even though it's located in Western Australia.
# Queensland
+
+# From Paul Eggert (2018-02-26):
+# I lack access to the following source for Queensland DST:
+# Pearce C. History of daylight saving time in Queensland.
+# Queensland Hist J. 2017 Aug;23(6):389-403
+# https://search.informit.com.au/documentSummary;dn=994682348436426;res=IELHSS
+
# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
# # The state of QUEENSLAND.. [ Courtesy Qld. Dept Premier Econ&Trade Devel ]
# # [ Dec 1990 ]
@@ -1534,6 +1542,12 @@
# "declared it the same day [throughout] the country as of Jan. 1, 1995"
# as part of the competition to be first into the 21st century.
+# From Kerry Shetline (2018-02-03):
+# December 31 was the day that was skipped, so that the transition
+# would be from Friday December 30, 1994 to Sunday January 1, 1995.
+# From Paul Eggert (2018-02-04):
+# One source for this is page 202 of: Bartky IR. One Time Fits All:
+# The Campaigns for Global Uniformity (2007).
# Kwajalein
@@ -1626,7 +1640,7 @@
# From Howie Phelps (1999-11-10), who talked to a Pitcairner via shortwave:
# Betty Christian told me yesterday that their local time is the same as
-# Pacific Standard Time. They used to be 1/2 hour different from us here in
+# Pacific Standard Time. They used to be ½ hour different from us here in
# Sacramento but it was changed a couple of years ago.
@@ -1665,7 +1679,7 @@
# 12 hours and 20 minutes ahead of GMT. When New Zealand adjusted its
# standard time in 1940s, Tonga had the choice of subtracting from its
# local time to come on the same standard time as New Zealand or of
-# advancing its time to maintain the differential of 13 degrees
+# advancing its time to maintain the differential of 13°
# (approximately 50 minutes ahead of New Zealand time).
#
# Because His Majesty King Tāufaʻāhau Tupou IV, then Crown Prince
--- a/make/data/tzdata/europe Thu Apr 05 19:08:48 2018 -0700
+++ b/make/data/tzdata/europe Mon Apr 09 08:34:30 2018 -0700
@@ -140,8 +140,8 @@
# along the towpath within a few yards of it.'
#
# I have a one inch to one mile map of London and my estimate of the stone's
-# position is 51 degrees 28' 30" N, 0 degrees 18' 45" W. The longitude should
-# be within about +-2". The Ordnance Survey grid reference is TQ172761.
+# position is 51° 28' 30" N, 0° 18' 45" W. The longitude should
+# be within about ±2". The Ordnance Survey grid reference is TQ172761.
#
# [This yields GMTOFF = -0:01:15 for London LMT in the 18th century.]
@@ -181,7 +181,7 @@
# after-hours daylight in which to pursue his research.
# In 1895 he presented a paper to the Wellington Philosophical Society
# that proposed a two-hour daylight-saving shift. See:
-# Hudson GV. On seasonal time-adjustment in countries south of lat. 30 deg.
+# Hudson GV. On seasonal time-adjustment in countries south of lat. 30°.
# Transactions and Proceedings of the New Zealand Institute. 1895;28:734
# http://rsnz.natlib.govt.nz/volume/rsnz_28/rsnz_28_00_006110.html
# Although some interest was expressed in New Zealand, his proposal
@@ -531,11 +531,25 @@
Link Europe/London Europe/Guernsey
Link Europe/London Europe/Isle_of_Man
-# From Paul Eggert (2018-01-19):
+# From Paul Eggert (2018-02-15):
+# In January 2018 we discovered that the negative SAVE values in the
+# Eire rules cause problems with tests for ICU:
+# https://mm.icann.org/pipermail/tz/2018-January/025825.html
+# and with tests for OpenJDK:
+# https://mm.icann.org/pipermail/tz/2018-January/025822.html
+#
+# To work around this problem, the build procedure can translate the
+# following data into two forms, one with negative SAVE values and the
+# other form with a traditional approximation for Irish time stamps
+# after 1971-10-31 02:00 UTC; although this approximation has tm_isdst
+# flags that are reversed, its UTC offsets are correct and this often
+# suffices. This source file currently uses only nonnegative SAVE
+# values, but this is intended to change and downstream code should
+# not rely on it.
+#
# The following is like GB-Eire and EU, except with standard time in
-# summer and negative daylight saving time in winter.
-# Although currently commented out, this will need to become uncommented
-# once the ICU/OpenJDK workaround is removed; see below.
+# 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 Eire 1971 only - Oct 31 2:00u -1:00 GMT
#Rule Eire 1972 1980 - Mar Sun>=16 2:00u 0 IST
@@ -556,24 +570,12 @@
0:00 1:00 IST 1947 Nov 2 2:00s
0:00 - GMT 1948 Apr 18 2:00s
0:00 GB-Eire GMT/IST 1968 Oct 27
-# From Paul Eggert (2018-01-18):
-# The next line should look like this:
+# The next line is for when negative SAVE values are used.
# 1:00 Eire IST/GMT
-# However, in January 2018 we discovered that the Eire rules cause
-# problems with tests for ICU:
-# https://mm.icann.org/pipermail/tz/2018-January/025825.html
-# and with tests for OpenJDK:
-# https://mm.icann.org/pipermail/tz/2018-January/025822.html
-# To work around this problem, use a traditional approximation for
-# time stamps after 1971-10-31 02:00 UTC, to give ICU and OpenJDK
-# developers breathing room to fix bugs. This approximation has
-# correct UTC offsets, but results in tm_isdst flags are the reverse
-# of what they should be. This workaround is temporary and should be
-# removed reasonably soon.
+# These three lines are for when SAVE values are always nonnegative.
1:00 - IST 1971 Oct 31 2:00u
0:00 GB-Eire GMT/IST 1996
0:00 EU GMT/IST
-# End of workaround for ICU and OpenJDK bugs.
###############################################################################
@@ -1557,21 +1559,21 @@
# http://www.almanak.hi.is/klukkan.html
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Iceland 1917 1919 - Feb 19 23:00 1:00 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 -
-Rule Iceland 1921 only - Mar 19 23:00 1:00 S
+Rule Iceland 1921 only - Mar 19 23:00 1:00 -
Rule Iceland 1921 only - Jun 23 1:00 0 -
-Rule Iceland 1939 only - Apr 29 23:00 1:00 S
+Rule Iceland 1939 only - Apr 29 23:00 1:00 -
Rule Iceland 1939 only - Oct 29 2:00 0 -
-Rule Iceland 1940 only - Feb 25 2:00 1:00 S
+Rule Iceland 1940 only - Feb 25 2:00 1:00 -
Rule Iceland 1940 1941 - Nov Sun>=2 1:00s 0 -
-Rule Iceland 1941 1942 - Mar Sun>=2 1:00s 1:00 S
+Rule Iceland 1941 1942 - Mar Sun>=2 1:00s 1:00 -
# 1943-1946 - first Sunday in March until first Sunday in winter
-Rule Iceland 1943 1946 - Mar Sun>=1 1:00s 1:00 S
+Rule Iceland 1943 1946 - Mar Sun>=1 1:00s 1:00 -
Rule Iceland 1942 1948 - Oct Sun>=22 1:00s 0 -
# 1947-1967 - first Sunday in April until first Sunday in winter
-Rule Iceland 1947 1967 - Apr Sun>=1 1:00s 1:00 S
+Rule Iceland 1947 1967 - Apr Sun>=1 1:00s 1:00 -
# 1949 and 1967 Oct transitions delayed by 1 week
Rule Iceland 1949 only - Oct 30 1:00s 0 -
Rule Iceland 1950 1966 - Oct Sun>=22 1:00s 0 -
@@ -2161,15 +2163,19 @@
1:00 EU CE%sT
# Portugal
-#
+
# From Paul Eggert (2014-08-11), after a heads-up from Stephen Colebourne:
# According to a Portuguese decree (1911-05-26)
# https://dre.pt/application/dir/pdf1sdip/1911/05/12500/23132313.pdf
# Lisbon was at -0:36:44.68, but switched to GMT on 1912-01-01 at 00:00.
-# Round the old offset to -0:36:45. This agrees with Willett but disagrees
-# with Shanks, who says the transition occurred on 1911-05-24 at 00:00 for
-# Europe/Lisbon, Atlantic/Azores, and Atlantic/Madeira.
+# Round the old offset to -0:36:45. This agrees with Willett....
#
+# From Michael Deckers (2018-02-15):
+# article 5 [of the 1911 decree; Deckers's translation] ...:
+# These dispositions shall enter into force at the instant at which,
+# according to the 2nd article, the civil day January 1, 1912 begins,
+# all clocks therefore having to be advanced or set back correspondingly ...
+
# From Rui Pedro Salgueiro (1992-11-12):
# Portugal has recently (September, 27) changed timezone
# (from WET to MET or CET) to harmonize with EEC.
@@ -2252,7 +2258,7 @@
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Lisbon -0:36:45 - LMT 1884
- -0:36:45 - LMT 1912 Jan 1 # Lisbon Mean Time
+ -0:36:45 - LMT 1912 Jan 1 0:00u # Lisbon MT
0:00 Port WE%sT 1966 Apr 3 2:00
1:00 - CET 1976 Sep 26 1:00
0:00 Port WE%sT 1983 Sep 25 1:00s
@@ -2261,7 +2267,7 @@
0:00 EU WE%sT
# This Zone can be simplified once we assume zic %z.
Zone Atlantic/Azores -1:42:40 - LMT 1884 # Ponta Delgada
- -1:54:32 - HMT 1912 Jan 1 # Horta Mean Time
+ -1:54:32 - HMT 1912 Jan 1 2:00u # Horta MT
-2:00 Port -02/-01 1942 Apr 25 22:00s
-2:00 Port +00 1942 Aug 15 22:00s
-2:00 Port -02/-01 1943 Apr 17 22:00s
@@ -2277,7 +2283,7 @@
-1:00 EU -01/+00
# This Zone can be simplified once we assume zic %z.
Zone Atlantic/Madeira -1:07:36 - LMT 1884 # Funchal
- -1:07:36 - FMT 1912 Jan 1 # Funchal Mean Time
+ -1:07:36 - FMT 1912 Jan 1 1:00u # Funchal MT
-1:00 Port -01/+00 1942 Apr 25 22:00s
-1:00 Port +01 1942 Aug 15 22:00s
-1:00 Port -01/+00 1943 Apr 17 22:00s
@@ -2615,13 +2621,13 @@
# From Vladimir Karpinsky (2014-07-08):
# LMT in Moscow (before Jul 3, 1916) is 2:30:17, that was defined by Moscow
-# Observatory (coordinates: 55 deg. 45'29.70", 37 deg. 34'05.30")....
+# Observatory (coordinates: 55° 45' 29.70", 37° 34' 05.30")....
# LMT in Moscow since Jul 3, 1916 is 2:31:01 as a result of new standard.
# (The info is from the book by Byalokoz ... p. 18.)
# The time in St. Petersburg as capital of Russia was defined by
# Pulkov observatory, near St. Petersburg. In 1916 LMT Moscow
# was synchronized with LMT St. Petersburg (+30 minutes), (Pulkov observatory
-# coordinates: 59 deg. 46'18.70", 30 deg. 19'40.70") so 30 deg. 19'40.70" >
+# coordinates: 59° 46' 18.70", 30° 19' 40.70") so 30° 19' 40.70" >
# 2h01m18.7s = 2:01:19. LMT Moscow = LMT St.Petersburg + 30m 2:01:19 + 0:30 =
# 2:31:19 ...
#
@@ -3450,7 +3456,7 @@
# three degrees, or twelve minutes of time, to the west of the
# meridian of the Observatory of Stockholm". The law is dated 1878-05-31.
#
-# The observatory at that time had the meridian 18 degrees 03' 30"
+# The observatory at that time had the meridian 18° 03' 30"
# eastern longitude = 01:12:14 in time. Less 12 minutes gives the
# national standard time as 01:00:14 ahead of GMT....
#
@@ -3554,7 +3560,7 @@
# From Alois Treindl (2013-09-11):
# The Federal regulations say
# https://www.admin.ch/opc/de/classified-compilation/20071096/index.html
-# ... the meridian for Bern mean time ... is 7 degrees 26' 22.50".
+# ... the meridian for Bern mean time ... is 7° 26' 22.50".
# Expressed in time, it is 0h29m45.5s.
# From Pierre-Yves Berger (2013-09-11):
--- a/make/data/tzdata/northamerica Thu Apr 05 19:08:48 2018 -0700
+++ b/make/data/tzdata/northamerica Mon Apr 09 08:34:30 2018 -0700
@@ -48,7 +48,7 @@
# in New York City (1869-10). His 1870 proposal was based on Washington, DC,
# but in 1872-05 he moved the proposed origin to Greenwich.
-# From Paul Eggert (2016-09-21):
+# From Paul Eggert (2018-03-20):
# Dowd's proposal left many details unresolved, such as where to draw
# lines between time zones. The key individual who made time zones
# work in the US was William Frederick Allen - railway engineer,
@@ -59,10 +59,9 @@
# to the General Time Convention on 1883-04-11, saying that his plan
# meant "local time would be practically abolished" - a plus for
# railway scheduling. By the next convention on 1883-10-11 nearly all
-# railroads had agreed and it took effect on 1883-11-18 at 12:00.
-# That Sunday was called the "day of two noons", as the eastern parts
-# of the new zones observed noon twice. Allen witnessed the
-# transition in New York City, writing:
+# railroads had agreed and it took effect on 1883-11-18. That Sunday
+# was called the "day of two noons", as some locations observed noon
+# twice. Allen witnessed the transition in New York City, writing:
#
# I heard the bells of St. Paul's strike on the old time. Four
# minutes later, obedient to the electrical signal from the Naval
@@ -447,8 +446,7 @@
# ...according to the Census Bureau, the largest city is Beulah (although
# it's commonly referred to as Beulah-Hazen, with Hazen being the next
# largest city in Mercer County). Google Maps places Beulah's city hall
-# at 47 degrees 15' 51" N, 101 degrees 46' 40" W, which yields an offset
-# of 6h47'07".
+# at 47° 15' 51" N, 101° 46' 40" W, which yields an offset of 6h47'07".
Zone America/North_Dakota/Beulah -6:47:07 - LMT 1883 Nov 18 12:12:53
-7:00 US M%sT 2010 Nov 7 2:00
@@ -481,7 +479,7 @@
# California, northern Idaho (Benewah, Bonner, Boundary, Clearwater,
# Kootenai, Latah, Lewis, Nez Perce, and Shoshone counties, Idaho county
# north of the Salmon River, and the towns of Burgdorf and Warren),
-# Nevada (except West Wendover), Oregon (except the northern 3/4 of
+# Nevada (except West Wendover), Oregon (except the northern ¾ of
# Malheur county), and Washington
# From Paul Eggert (2016-08-20):
@@ -979,6 +977,13 @@
-5:00 - EST 2006
-5:00 US E%sT
+# From Paul Eggert (2018-03-20):
+# The Louisville & Nashville Railroad's 1883-11-18 change occurred at
+# 10:00 old local time; train were supposed to come to a standstill
+# for precisely 18 minutes. See Bartky Fig. 1 (page 50). It is not
+# clear how this matched civil time in Louisville, so for now continue
+# to assume Louisville switched at noon new local time, like New York.
+#
# 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
@@ -3287,8 +3292,8 @@
# http://www.jamaicaobserver.com/columns/The-politician-in-all-of-us_17573647
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Jamaica -5:07:11 - LMT 1890 # Kingston
- -5:07:11 - KMT 1912 Feb # Kingston Mean Time
+Zone America/Jamaica -5:07:10 - LMT 1890 # Kingston
+ -5:07:10 - KMT 1912 Feb # Kingston Mean Time
-5:00 - EST 1974
-5:00 US E%sT 1984
-5:00 - EST
@@ -3438,7 +3443,7 @@
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Grand_Turk -4:44:32 - LMT 1890
- -5:07:11 - KMT 1912 Feb # Kingston Mean Time
+ -5:07:10 - KMT 1912 Feb # Kingston Mean Time
-5:00 - EST 1979
-5:00 US E%sT 2015 Nov Sun>=1 2:00
-4:00 - AST 2018 Mar 11 3:00
--- a/make/data/tzdata/southamerica Thu Apr 05 19:08:48 2018 -0700
+++ b/make/data/tzdata/southamerica Mon Apr 09 08:34:30 2018 -0700
@@ -70,28 +70,28 @@
# AR was chosen because they are the ISO letters that represent Argentina.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Arg 1930 only - Dec 1 0:00 1:00 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 S
+Rule Arg 1931 only - Oct 15 0:00 1:00 -
Rule Arg 1932 1940 - Mar 1 0:00 0 -
-Rule Arg 1932 1939 - Nov 1 0:00 1:00 S
-Rule Arg 1940 only - Jul 1 0:00 1:00 S
+Rule Arg 1932 1939 - Nov 1 0:00 1:00 -
+Rule Arg 1940 only - Jul 1 0:00 1:00 -
Rule Arg 1941 only - Jun 15 0:00 0 -
-Rule Arg 1941 only - Oct 15 0:00 1:00 S
+Rule Arg 1941 only - Oct 15 0:00 1:00 -
Rule Arg 1943 only - Aug 1 0:00 0 -
-Rule Arg 1943 only - Oct 15 0:00 1:00 S
+Rule Arg 1943 only - Oct 15 0:00 1:00 -
Rule Arg 1946 only - Mar 1 0:00 0 -
-Rule Arg 1946 only - Oct 1 0:00 1:00 S
+Rule Arg 1946 only - Oct 1 0:00 1:00 -
Rule Arg 1963 only - Oct 1 0:00 0 -
-Rule Arg 1963 only - Dec 15 0:00 1:00 S
+Rule Arg 1963 only - Dec 15 0:00 1:00 -
Rule Arg 1964 1966 - Mar 1 0:00 0 -
-Rule Arg 1964 1966 - Oct 15 0:00 1:00 S
+Rule Arg 1964 1966 - Oct 15 0:00 1:00 -
Rule Arg 1967 only - Apr 2 0:00 0 -
-Rule Arg 1967 1968 - Oct Sun>=1 0:00 1:00 S
+Rule Arg 1967 1968 - Oct Sun>=1 0:00 1:00 -
Rule Arg 1968 1969 - Apr Sun>=1 0:00 0 -
-Rule Arg 1974 only - Jan 23 0:00 1:00 S
+Rule Arg 1974 only - Jan 23 0:00 1:00 -
Rule Arg 1974 only - May 1 0:00 0 -
-Rule Arg 1988 only - Dec 1 0:00 1:00 S
+Rule Arg 1988 only - Dec 1 0:00 1:00 -
#
# From Hernan G. Otero (1995-06-26):
# These corrections were contributed by InterSoft Argentina S.A.,
@@ -99,7 +99,7 @@
# Talleres de Hidrografía Naval Argentina
# (Argentine Naval Hydrography Institute)
Rule Arg 1989 1993 - Mar Sun>=1 0:00 0 -
-Rule Arg 1989 1992 - Oct Sun>=15 0:00 1:00 S
+Rule Arg 1989 1992 - Oct Sun>=15 0:00 1:00 -
#
# From Hernan G. Otero (1995-06-26):
# From this moment on, the law that mandated the daylight saving
@@ -110,7 +110,7 @@
# On October 3, 1999, 0:00 local, Argentina implemented daylight savings time,
# which did not result in the switch of a time zone, as they stayed 9 hours
# from the International Date Line.
-Rule Arg 1999 only - Oct Sun>=1 0:00 1:00 S
+Rule Arg 1999 only - Oct Sun>=1 0:00 1:00 -
# From Paul Eggert (2007-12-28):
# DST was set to expire on March 5, not March 3, but since it was converted
# to standard time on March 3 it's more convenient for us to pretend that
@@ -213,9 +213,9 @@
# la modificación del huso horario, ya que 2009 nos encuentra con
# crecimiento en la producción y distribución energética."
-Rule Arg 2007 only - Dec 30 0:00 1:00 S
+Rule Arg 2007 only - Dec 30 0:00 1:00 -
Rule Arg 2008 2009 - Mar Sun>=15 0:00 0 -
-Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 S
+Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 -
# From Mariano Absatz (2004-05-21):
# Today it was officially published that the Province of Mendoza is changing
@@ -225,12 +225,14 @@
# It's Law No. 7,210. This change is due to a public power emergency, so for
# now we'll assume it's for this year only.
#
-# From Paul Eggert (2014-08-09):
+# From Paul Eggert (2018-01-31):
# Hora de verano para la República Argentina
# http://buenasiembra.com.ar/esoterismo/astrologia/hora-de-verano-de-la-republica-argentina-27.html
# says that standard time in Argentina from 1894-10-31
# to 1920-05-01 was -4:16:48.25. Go with this more-precise value
-# over Shanks & Pottenger.
+# over Shanks & Pottenger. It is upward compatible with Milne, who
+# says Córdoba time was -4:16:48.2.
+
#
# From Mariano Absatz (2004-06-05):
# These media articles from a major newspaper mostly cover the current state:
@@ -404,9 +406,9 @@
# rules...San Luis is still using "Western ARgentina Time" and it got
# stuck on Summer daylight savings time even though the summer is over.
-# From Paul Eggert (2013-09-05):
+# From Paul Eggert (2018-01-23):
# Perhaps San Luis operates on the legal fiction that it is at -04
-# with perpetual summer time, but ordinary usage typically seems to
+# with perpetual daylight saving time, but ordinary usage typically seems to
# just say it's at -03; see, for example,
# https://es.wikipedia.org/wiki/Hora_oficial_argentina
# We've documented similar situations as being plain changes to
@@ -415,9 +417,6 @@
# plus is that this silences a zic complaint that there's no POSIX TZ
# setting for time stamps past 2038.
-# From Paul Eggert (2013-02-21):
-# Milne says Córdoba time was -4:16:48.2. Round to the nearest second.
-
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
#
# Buenos Aires (BA), Capital Federal (CF),
@@ -552,7 +551,7 @@
# San Luis (SL)
Rule SanLuis 2008 2009 - Mar Sun>=8 0:00 0 -
-Rule SanLuis 2007 2008 - Oct Sun>=8 0:00 1:00 S
+Rule SanLuis 2007 2008 - Oct Sun>=8 0:00 1:00 -
Zone America/Argentina/San_Luis -4:25:24 - LMT 1894 Oct 31
-4:16:48 - CMT 1920 May
@@ -794,14 +793,14 @@
# Rule NAME FROM TO TYPE 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 S
+Rule Brazil 1931 only - Oct 3 11:00 1:00 -
Rule Brazil 1932 1933 - Apr 1 0:00 0 -
-Rule Brazil 1932 only - Oct 3 0:00 1:00 S
+Rule Brazil 1932 only - Oct 3 0:00 1:00 -
# Decree 23,195 <http://pcdsh01.on.br/HV23195.htm> (1933-10-10)
# revoked DST.
# Decree 27,496 <http://pcdsh01.on.br/HV27496.htm> (1949-11-24)
# Decree 27,998 <http://pcdsh01.on.br/HV27998.htm> (1950-04-13)
-Rule Brazil 1949 1952 - Dec 1 0:00 1:00 S
+Rule Brazil 1949 1952 - Dec 1 0:00 1:00 -
Rule Brazil 1950 only - Apr 16 1:00 0 -
Rule Brazil 1951 1952 - Apr 1 0:00 0 -
# Decree 32,308 <http://pcdsh01.on.br/HV32308.htm> (1953-02-24)
@@ -813,51 +812,51 @@
# in SP, RJ, GB, MG, ES, due to the prolongation of the drought.
# Decree 53,071 <http://pcdsh01.on.br/HV53071.htm> (1963-12-03)
# extended the above decree to all of the national territory on 12-09.
-Rule Brazil 1963 only - Dec 9 0:00 1:00 S
+Rule Brazil 1963 only - Dec 9 0:00 1:00 -
# Decree 53,604 <http://pcdsh01.on.br/HV53604.htm> (1964-02-25)
# extended summer time by one day to 1964-03-01 00:00 (start of school).
Rule Brazil 1964 only - Mar 1 0:00 0 -
# Decree 55,639 <http://pcdsh01.on.br/HV55639.htm> (1965-01-27)
-Rule Brazil 1965 only - Jan 31 0:00 1:00 S
+Rule Brazil 1965 only - Jan 31 0:00 1:00 -
Rule Brazil 1965 only - Mar 31 0:00 0 -
# Decree 57,303 <http://pcdsh01.on.br/HV57303.htm> (1965-11-22)
-Rule Brazil 1965 only - Dec 1 0:00 1:00 S
+Rule Brazil 1965 only - Dec 1 0:00 1:00 -
# Decree 57,843 <http://pcdsh01.on.br/HV57843.htm> (1966-02-18)
Rule Brazil 1966 1968 - Mar 1 0:00 0 -
-Rule Brazil 1966 1967 - Nov 1 0:00 1:00 S
+Rule Brazil 1966 1967 - Nov 1 0:00 1:00 -
# Decree 63,429 <http://pcdsh01.on.br/HV63429.htm> (1968-10-15)
# revoked DST.
# Decree 91,698 <http://pcdsh01.on.br/HV91698.htm> (1985-09-27)
-Rule Brazil 1985 only - Nov 2 0:00 1:00 S
+Rule Brazil 1985 only - Nov 2 0:00 1:00 -
# Decree 92,310 (1986-01-21)
# Decree 92,463 (1986-03-13)
Rule Brazil 1986 only - Mar 15 0:00 0 -
# Decree 93,316 (1986-10-01)
-Rule Brazil 1986 only - Oct 25 0:00 1:00 S
+Rule Brazil 1986 only - Oct 25 0:00 1:00 -
Rule Brazil 1987 only - Feb 14 0:00 0 -
# Decree 94,922 <http://pcdsh01.on.br/HV94922.htm> (1987-09-22)
-Rule Brazil 1987 only - Oct 25 0:00 1:00 S
+Rule Brazil 1987 only - Oct 25 0:00 1:00 -
Rule Brazil 1988 only - Feb 7 0:00 0 -
# Decree 96,676 <http://pcdsh01.on.br/HV96676.htm> (1988-09-12)
# except for the states of AC, AM, PA, RR, RO, and AP (then a territory)
-Rule Brazil 1988 only - Oct 16 0:00 1:00 S
+Rule Brazil 1988 only - Oct 16 0:00 1:00 -
Rule Brazil 1989 only - Jan 29 0:00 0 -
# Decree 98,077 <http://pcdsh01.on.br/HV98077.htm> (1989-08-21)
# with the same exceptions
-Rule Brazil 1989 only - Oct 15 0:00 1:00 S
+Rule Brazil 1989 only - Oct 15 0:00 1:00 -
Rule Brazil 1990 only - Feb 11 0:00 0 -
# Decree 99,530 <http://pcdsh01.on.br/HV99530.htm> (1990-09-17)
# adopted by RS, SC, PR, SP, RJ, ES, MG, GO, MS, DF.
# Decree 99,629 (1990-10-19) adds BA, MT.
-Rule Brazil 1990 only - Oct 21 0:00 1:00 S
+Rule Brazil 1990 only - Oct 21 0:00 1:00 -
Rule Brazil 1991 only - Feb 17 0:00 0 -
# Unnumbered decree <http://pcdsh01.on.br/HV1991.htm> (1991-09-25)
# adopted by RS, SC, PR, SP, RJ, ES, MG, BA, GO, MT, MS, DF.
-Rule Brazil 1991 only - Oct 20 0:00 1:00 S
+Rule Brazil 1991 only - Oct 20 0:00 1:00 -
Rule Brazil 1992 only - Feb 9 0:00 0 -
# Unnumbered decree <http://pcdsh01.on.br/HV1992.htm> (1992-10-16)
# adopted by same states.
-Rule Brazil 1992 only - Oct 25 0:00 1:00 S
+Rule Brazil 1992 only - Oct 25 0:00 1:00 -
Rule Brazil 1993 only - Jan 31 0:00 0 -
# Decree 942 <http://pcdsh01.on.br/HV942.htm> (1993-09-28)
# adopted by same states, plus AM.
@@ -867,12 +866,12 @@
# adopted by same states, plus MT and TO.
# Decree 1,674 <http://pcdsh01.on.br/HV1674.htm> (1995-10-13)
# adds AL, SE.
-Rule Brazil 1993 1995 - Oct Sun>=11 0:00 1:00 S
+Rule Brazil 1993 1995 - Oct Sun>=11 0:00 1:00 -
Rule Brazil 1994 1995 - Feb Sun>=15 0:00 0 -
Rule Brazil 1996 only - Feb 11 0:00 0 -
# Decree 2,000 <http://pcdsh01.on.br/HV2000.htm> (1996-09-04)
# adopted by same states, minus AL, SE.
-Rule Brazil 1996 only - Oct 6 0:00 1:00 S
+Rule Brazil 1996 only - Oct 6 0:00 1:00 -
Rule Brazil 1997 only - Feb 16 0:00 0 -
# From Daniel C. Sobral (1998-02-12):
# In 1997, the DS began on October 6. The stated reason was that
@@ -882,19 +881,19 @@
# to help dealing with the shortages of electric power.
#
# Decree 2,317 (1997-09-04), adopted by same states.
-Rule Brazil 1997 only - Oct 6 0:00 1:00 S
+Rule Brazil 1997 only - Oct 6 0:00 1:00 -
# Decree 2,495 <http://pcdsh01.on.br/figuras/HV2495.JPG>
# (1998-02-10)
Rule Brazil 1998 only - Mar 1 0:00 0 -
# Decree 2,780 <http://pcdsh01.on.br/figuras/Hv98.jpg> (1998-09-11)
# adopted by the same states as before.
-Rule Brazil 1998 only - Oct 11 0:00 1:00 S
+Rule Brazil 1998 only - Oct 11 0:00 1:00 -
Rule Brazil 1999 only - Feb 21 0:00 0 -
# Decree 3,150 <http://pcdsh01.on.br/figuras/HV3150.gif>
# (1999-08-23) adopted by same states.
# Decree 3,188 <http://pcdsh01.on.br/DecHV99.gif> (1999-09-30)
# adds SE, AL, PB, PE, RN, CE, PI, MA and RR.
-Rule Brazil 1999 only - Oct 3 0:00 1:00 S
+Rule Brazil 1999 only - Oct 3 0:00 1:00 -
Rule Brazil 2000 only - Feb 27 0:00 0 -
# Decree 3,592 <http://pcdsh01.on.br/DEC3592.htm> (2000-09-06)
# adopted by the same states as before.
@@ -904,34 +903,34 @@
# repeals DST in SE, AL, PB, RN, CE, PI and MA, effective 2000-10-22 00:00.
# Decree 3,916 <http://pcdsh01.on.br/figuras/HV3916.gif>
# (2001-09-13) reestablishes DST in AL, CE, MA, PB, PE, PI, RN, SE.
-Rule Brazil 2000 2001 - Oct Sun>=8 0:00 1:00 S
+Rule Brazil 2000 2001 - Oct Sun>=8 0:00 1:00 -
Rule Brazil 2001 2006 - Feb Sun>=15 0:00 0 -
# Decree 4,399 (2002-10-01) repeals DST in AL, CE, MA, PB, PE, PI, RN, SE.
# 4,399 <http://www.presidencia.gov.br/CCIVIL/decreto/2002/D4399.htm>
-Rule Brazil 2002 only - Nov 3 0:00 1:00 S
+Rule Brazil 2002 only - Nov 3 0:00 1:00 -
# Decree 4,844 (2003-09-24; corrected 2003-09-26) repeals DST in BA, MT, TO.
# 4,844 <http://www.presidencia.gov.br/CCIVIL/decreto/2003/D4844.htm>
-Rule Brazil 2003 only - Oct 19 0:00 1:00 S
+Rule Brazil 2003 only - Oct 19 0:00 1:00 -
# Decree 5,223 (2004-10-01) reestablishes DST in MT.
# 5,223 <http://www.planalto.gov.br/ccivil_03/_Ato2004-2006/2004/Decreto/D5223.htm>
-Rule Brazil 2004 only - Nov 2 0:00 1:00 S
+Rule Brazil 2004 only - Nov 2 0:00 1:00 -
# Decree 5,539 <http://pcdsh01.on.br/DecHV5539.gif> (2005-09-19),
# adopted by the same states as before.
-Rule Brazil 2005 only - Oct 16 0:00 1:00 S
+Rule Brazil 2005 only - Oct 16 0:00 1:00 -
# Decree 5,920 <http://pcdsh01.on.br/DecHV5920.gif> (2006-10-03),
# adopted by the same states as before.
-Rule Brazil 2006 only - Nov 5 0:00 1:00 S
+Rule Brazil 2006 only - Nov 5 0:00 1:00 -
Rule Brazil 2007 only - Feb 25 0:00 0 -
# Decree 6,212 <http://pcdsh01.on.br/DecHV6212.gif> (2007-09-26),
# adopted by the same states as before.
-Rule Brazil 2007 only - Oct Sun>=8 0:00 1:00 S
+Rule Brazil 2007 only - Oct Sun>=8 0:00 1:00 -
# From Frederico A. C. Neves (2008-09-10):
# According to this decree
# http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm
# [t]he DST period in Brazil now on will be from the 3rd Oct Sunday to the
# 3rd Feb Sunday. There is an exception on the return date when this is
# the Carnival Sunday then the return date will be the next Sunday...
-Rule Brazil 2008 2017 - Oct Sun>=15 0:00 1:00 S
+Rule Brazil 2008 2017 - Oct Sun>=15 0:00 1:00 -
Rule Brazil 2008 2011 - Feb Sun>=15 0:00 0 -
# Decree 7,584 <http://pcdsh01.on.br/HVdecreto7584_20111013.jpg> (2011-10-13)
# added Bahia.
@@ -949,7 +948,7 @@
# ... https://www.timeanddate.com/news/time/brazil-delays-dst-2018.html
# From Steffen Thorsen (2017-12-20):
# http://www.planalto.gov.br/ccivil_03/_ato2015-2018/2017/decreto/D9242.htm
-Rule Brazil 2018 max - Nov Sun>=1 0:00 1:00 S
+Rule Brazil 2018 max - Nov Sun>=1 0:00 1:00 -
Rule Brazil 2023 only - Feb Sun>=22 0:00 0 -
Rule Brazil 2024 2025 - Feb Sun>=15 0:00 0 -
Rule Brazil 2026 only - Feb Sun>=22 0:00 0 -
@@ -1256,28 +1255,28 @@
# For now, assume that they will not revert.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Chile 1927 1931 - Sep 1 0:00 1:00 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 S
+Rule Chile 1968 only - Nov 3 4:00u 1:00 -
Rule Chile 1969 only - Mar 30 3:00u 0 -
-Rule Chile 1969 only - Nov 23 4:00u 1:00 S
+Rule Chile 1969 only - Nov 23 4:00u 1:00 -
Rule Chile 1970 only - Mar 29 3:00u 0 -
Rule Chile 1971 only - Mar 14 3:00u 0 -
-Rule Chile 1970 1972 - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 1970 1972 - Oct Sun>=9 4:00u 1:00 -
Rule Chile 1972 1986 - Mar Sun>=9 3:00u 0 -
-Rule Chile 1973 only - Sep 30 4:00u 1:00 S
-Rule Chile 1974 1987 - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 1973 only - Sep 30 4:00u 1:00 -
+Rule Chile 1974 1987 - Oct Sun>=9 4:00u 1:00 -
Rule Chile 1987 only - Apr 12 3:00u 0 -
Rule Chile 1988 1990 - Mar Sun>=9 3:00u 0 -
-Rule Chile 1988 1989 - Oct Sun>=9 4:00u 1:00 S
-Rule Chile 1990 only - Sep 16 4:00u 1:00 S
+Rule Chile 1988 1989 - Oct Sun>=9 4:00u 1:00 -
+Rule Chile 1990 only - Sep 16 4:00u 1:00 -
Rule Chile 1991 1996 - Mar Sun>=9 3:00u 0 -
-Rule Chile 1991 1997 - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 1991 1997 - Oct Sun>=9 4:00u 1:00 -
Rule Chile 1997 only - Mar 30 3:00u 0 -
Rule Chile 1998 only - Mar Sun>=9 3:00u 0 -
-Rule Chile 1998 only - Sep 27 4:00u 1:00 S
+Rule Chile 1998 only - Sep 27 4:00u 1:00 -
Rule Chile 1999 only - Apr 4 3:00u 0 -
-Rule Chile 1999 2010 - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 1999 2010 - Oct Sun>=9 4:00u 1:00 -
Rule Chile 2000 2007 - Mar Sun>=9 3:00u 0 -
# N.B.: the end of March 29 in Chile is March 30 in Universal time,
# which is used below in specifying the transition.
@@ -1285,11 +1284,11 @@
Rule Chile 2009 only - Mar Sun>=9 3:00u 0 -
Rule Chile 2010 only - Apr Sun>=1 3:00u 0 -
Rule Chile 2011 only - May Sun>=2 3:00u 0 -
-Rule Chile 2011 only - Aug Sun>=16 4:00u 1:00 S
+Rule Chile 2011 only - Aug Sun>=16 4:00u 1:00 -
Rule Chile 2012 2014 - Apr Sun>=23 3:00u 0 -
-Rule Chile 2012 2014 - Sep Sun>=2 4:00u 1:00 S
+Rule Chile 2012 2014 - Sep Sun>=2 4:00u 1:00 -
Rule Chile 2016 max - May Sun>=9 3:00u 0 -
-Rule Chile 2016 max - Aug Sun>=9 4:00u 1:00 S
+Rule Chile 2016 max - Aug Sun>=9 4:00u 1:00 -
# IATA SSIM anomalies: (1992-02) says 1992-03-14;
# (1996-09) says 1998-03-08. Ignore these.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -1354,7 +1353,7 @@
# "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 CO 1992 only - May 3 0:00 1:00 S
+Rule CO 1992 only - May 3 0:00 1:00 -
Rule CO 1993 only - Apr 4 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Bogota -4:56:16 - LMT 1884 Mar 13
@@ -1414,7 +1413,7 @@
# 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 Ecuador 1992 only - Nov 28 0:00 1:00 S
+Rule Ecuador 1992 only - Nov 28 0:00 1:00 -
Rule Ecuador 1993 only - Feb 5 0:00 0 -
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -1504,22 +1503,22 @@
# the maintainers of the database to inform them we're adopting
# the same policy this year and suggest recommendations for future years.
#
-# For now we will assume permanent summer time for the Falklands
+# 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 Falk 1937 1938 - Sep lastSun 0:00 1:00 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 S
-Rule Falk 1940 1942 - Sep lastSun 0:00 1:00 S
+Rule Falk 1939 only - Oct 1 0:00 1:00 -
+Rule Falk 1940 1942 - Sep lastSun 0:00 1:00 -
Rule Falk 1943 only - Jan 1 0:00 0 -
-Rule Falk 1983 only - Sep lastSun 0:00 1:00 S
+Rule Falk 1983 only - Sep lastSun 0:00 1:00 -
Rule Falk 1984 1985 - Apr lastSun 0:00 0 -
-Rule Falk 1984 only - Sep 16 0:00 1:00 S
-Rule Falk 1985 2000 - Sep Sun>=9 0:00 1:00 S
+Rule Falk 1984 only - Sep 16 0:00 1:00 -
+Rule Falk 1985 2000 - Sep Sun>=9 0:00 1:00 -
Rule Falk 1986 2000 - Apr Sun>=16 0:00 0 -
Rule Falk 2001 2010 - Apr Sun>=15 2:00 0 -
-Rule Falk 2001 2010 - Sep Sun>=1 2:00 1:00 S
+Rule Falk 2001 2010 - Sep Sun>=1 2:00 1:00 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Atlantic/Stanley -3:51:24 - LMT 1890
-3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time
@@ -1554,16 +1553,16 @@
# adjust their clocks at 0 hour of the given dates.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Para 1975 1988 - Oct 1 0:00 1:00 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 -
-Rule Para 1989 only - Oct 22 0:00 1:00 S
-Rule Para 1990 only - Oct 1 0:00 1:00 S
-Rule Para 1991 only - Oct 6 0:00 1:00 S
+Rule Para 1989 only - Oct 22 0:00 1:00 -
+Rule Para 1990 only - Oct 1 0:00 1:00 -
+Rule Para 1991 only - Oct 6 0:00 1:00 -
Rule Para 1992 only - Mar 1 0:00 0 -
-Rule Para 1992 only - Oct 5 0:00 1:00 S
+Rule Para 1992 only - Oct 5 0:00 1:00 -
Rule Para 1993 only - Mar 31 0:00 0 -
-Rule Para 1993 1995 - Oct 1 0:00 1:00 S
+Rule Para 1993 1995 - Oct 1 0:00 1:00 -
Rule Para 1994 1995 - Feb lastSun 0:00 0 -
Rule Para 1996 only - Mar 1 0:00 0 -
# IATA SSIM (2000-02) says 1999-10-10; ignore this for now.
@@ -1581,7 +1580,7 @@
# year, the time will change on the first Sunday of October; likewise, the
# clock will be set back on the first Sunday of March.
#
-Rule Para 1996 2001 - Oct Sun>=1 0:00 1:00 S
+Rule Para 1996 2001 - Oct Sun>=1 0:00 1:00 -
# IATA SSIM (1997-09) says Mar 1; go with Shanks & Pottenger.
Rule Para 1997 only - Feb lastSun 0:00 0 -
# Shanks & Pottenger say 1999-02-28; IATA SSIM (1999-02) says 1999-02-27, but
@@ -1592,7 +1591,7 @@
# dst method to be from the first Sunday in September to the first Sunday in
# April.
Rule Para 2002 2004 - Apr Sun>=1 0:00 0 -
-Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 S
+Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 -
#
# From Jesper Nørgaard Welen (2005-01-02):
# There are several sources that claim that Paraguay made
@@ -1601,7 +1600,7 @@
# Decree 1,867 (2004-03-05)
# From Carlos Raúl Perasso via Jesper Nørgaard Welen (2006-10-13)
# http://www.presidencia.gov.py/decretos/D1867.pdf
-Rule Para 2004 2009 - Oct Sun>=15 0:00 1:00 S
+Rule Para 2004 2009 - Oct Sun>=15 0:00 1:00 -
Rule Para 2005 2009 - Mar Sun>=8 0:00 0 -
# From Carlos Raúl Perasso (2010-02-18):
# By decree number 3958 issued yesterday
@@ -1614,7 +1613,7 @@
# and that on the first Sunday of the month of October, it is to be set
# forward 60 minutes, in all the territory of the Paraguayan Republic.
# ...
-Rule Para 2010 max - Oct Sun>=1 0:00 1:00 S
+Rule Para 2010 max - Oct Sun>=1 0:00 1:00 -
Rule Para 2010 2012 - Apr Sun>=8 0:00 0 -
#
# From Steffen Thorsen (2013-03-07):
@@ -1647,16 +1646,16 @@
# Shanks & Pottenger don't have this transition. Assume 1986 was like 1987.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Peru 1938 only - Jan 1 0:00 1:00 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 S
+Rule Peru 1938 1939 - Sep lastSun 0:00 1:00 -
Rule Peru 1939 1940 - Mar Sun>=24 0:00 0 -
-Rule Peru 1986 1987 - Jan 1 0:00 1:00 S
+Rule Peru 1986 1987 - Jan 1 0:00 1:00 -
Rule Peru 1986 1987 - Apr 1 0:00 0 -
-Rule Peru 1990 only - Jan 1 0:00 1:00 S
+Rule Peru 1990 only - Jan 1 0:00 1:00 -
Rule Peru 1990 only - Apr 1 0:00 0 -
# IATA is ambiguous for 1993/1995; go with Shanks & Pottenger.
-Rule Peru 1994 only - Jan 1 0:00 1:00 S
+Rule Peru 1994 only - Jan 1 0:00 1:00 -
Rule Peru 1994 only - Apr 1 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Lima -5:08:12 - LMT 1890
@@ -1702,72 +1701,201 @@
# Uruguay
# From Paul Eggert (1993-11-18):
# Uruguay wins the prize for the strangest peacetime manipulation of the rules.
-# From Shanks & Pottenger:
+#
+# From Tim Parenti (2018-02-20), per Jeremie Bonjour (2018-01-31) and Michael
+# Deckers (2018-02-20):
+# ... At least they kept good records...
+#
+# http://www.armada.mil.uy/ContenidosPDFs/sohma/web/almanaque/almanaque_2018.pdf#page=36
+# Page 36 of Almanaque 2018, published by the Oceanography, Hydrography, and
+# Meteorology Service of the Uruguayan Navy, seems to give many transitions
+# with greater clarity than we've had before. It directly references many laws
+# and decrees which are, in turn, referenced below. They can be viewed in the
+# public archives of the Diario Oficial (in Spanish) at
+# http://www.impo.com.uy/diariooficial/
+#
+# Ley No. 3920 of 1908-06-10 placed the determination of legal time under the
+# auspices of the National Institute for the Prediction of Time. It is unclear
+# exactly what offset was used during this period, though Ley No. 7200 of
+# 1920-04-23 used the Observatory of the National Meteorological Institute in
+# Montevideo (34° 54' 33" S, 56° 12' 45" W) as its reference meridian,
+# retarding legal time by 15 minutes 9 seconds from 1920-04-30 24:00,
+# resulting in UT-04. Assume the corresponding LMT of UT-03:44:51 (given on
+# page 725 of the Proceedings of the Second Pan-American Scientific Congress,
+# 1915-1916) was in use, and merely became official from 1908-06-10.
+# https://www.impo.com.uy/diariooficial/1908/06/18/12
+# https://www.impo.com.uy/diariooficial/1920/04/27/9
+#
+# Ley No. 7594 of 1923-06-28 specified legal time as Observatory time advanced
+# by 44 minutes 51 seconds (UT-03) "from 30 September to 31 March", and by 14
+# minutes 51 seconds (UT-03:30) "the rest of the year"; a message from the
+# National Council of Administration the same day, published directly below the
+# law in the Diario Oficial, specified the first transition to be 1923-09-30
+# 24:00. This effectively established standard time at UT-03:30 with 30
+# minutes DST. Assume transitions at 24:00 on the specified days until Ley No.
+# 7919 of 1926-03-05 ended this arrangement, repealing all "laws and other
+# provisions which oppose" it, resulting in year-round UT-03:30; a Resolución
+# of 1926-03-11 puts the final transition at 1926-03-31 24:00, the same as it
+# would have been under the previous law.
+# https://www.impo.com.uy/diariooficial/1923/07/02/2
+# 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
-# Whitman gives 1923 Oct 1; go with Shanks & Pottenger.
-Rule Uruguay 1923 only - Oct 2 0:00 0:30 HS
+Rule Uruguay 1923 1925 - Oct 1 0:00 0:30 -
Rule Uruguay 1924 1926 - Apr 1 0:00 0 -
-Rule Uruguay 1924 1925 - Oct 1 0:00 0:30 HS
-Rule Uruguay 1933 1935 - Oct lastSun 0:00 0:30 HS
-# Shanks & Pottenger give 1935 Apr 1 0:00 & 1936 Mar 30 0:00; go with Whitman.
-Rule Uruguay 1934 1936 - Mar Sat>=25 23:30s 0 -
-Rule Uruguay 1936 only - Nov 1 0:00 0:30 HS
-Rule Uruguay 1937 1941 - Mar lastSun 0:00 0 -
-# Whitman gives 1937 Oct 3; go with Shanks & Pottenger.
-Rule Uruguay 1937 1940 - Oct lastSun 0:00 0:30 HS
-# Whitman gives 1941 Oct 24 - 1942 Mar 27, 1942 Dec 14 - 1943 Apr 13,
-# and 1943 Apr 13 "to present time"; go with Shanks & Pottenger.
-Rule Uruguay 1941 only - Aug 1 0:00 0:30 HS
-Rule Uruguay 1942 only - Jan 1 0:00 0 -
-Rule Uruguay 1942 only - Dec 14 0:00 1:00 S
+# From Tim Parenti (2018-02-15):
+# http://www.impo.com.uy/diariooficial/1933/10/27/6
+#
+# It appears Ley No. 9122 of 1933 was never published as such in the Diario
+# Oficial, but instead appeared as Document 26 in the Diario on Friday
+# 1933-10-27 as a decree made Monday 1933-10-23 and filed under the Ministry of
+# National Defense. It reinstituted a DST of 30 minutes (to UT-03) "from the
+# last Sunday of October...until the last Saturday of March." In accordance
+# with this provision, the first transition was explicitly specified in Article
+# 2 of the decree as Saturday 1933-10-28 at 24:00; that is, Sunday 1933-10-29
+# at 00:00. Assume transitions at 00:00 Sunday throughout.
+#
+# Departing from the matter-of-fact nature of previous timekeeping laws, the
+# 1933 decree "consider[s] the advantages of...the advance of legal time":
+#
+# "Whereas: The measure adopted by almost all nations at the time of the last
+# World War still persists in North America and Europe, precisely because of
+# the economic, hygienic, and social advantages derived from such an
+# emergency measure...
+#
+# Whereas: The advance of the legal time during the summer seasons, by
+# displacing social activity near sunrise, favors the citizen populations
+# and especially the society that creates and works..."
+#
+# It further specified that "necessary measures" be taken to ensure that
+# "public spectacles finish, in general, before [01:00]."
+Rule Uruguay 1933 1938 - Oct lastSun 0:00 0:30 -
+Rule Uruguay 1934 1941 - Mar lastSat 24:00 0 -
+# From Tim Parenti (2018-02-15):
+# Most of the Rules below, and their contemporaneous Zone lines, have been
+# updated simply to match the Almanaque 2018. Although the document does not
+# list exact transition times, midnight transitions were already present in our
+# data here for all transitions through 2004-09, and this is both consistent
+# with prior transitions and verified in several decrees marked below between
+# 1939-09 and 2004-09, wherein the relevant text was typically of the form:
+#
+# "From 0 hours on [date], the legal time of the entire Republic will be...
+#
+# In accordance with [the preceding], on [previous date] at 24 hours, all
+# clocks throughout the Republic will be [advanced/retarded] by..."
+#
+# It is possible that there is greater specificity to be found for the Rules
+# below, but it is buried in no fewer than 40 different decrees individually
+# referenced by the Almanaque for the period from 1939-09 to 2014-09.
+# Four-fifths of these were promulgated less than two weeks before taking
+# effect; more than half within a week and none more than 5 weeks. Only the
+# handful with comments below have been checked with any thoroughness.
+Rule Uruguay 1939 only - Oct 1 0:00 0:30 -
+Rule Uruguay 1940 only - Oct 27 0:00 0:30 -
+# From Tim Parenti (2018-02-15):
+# Decreto 1145 of the Ministry of National Defense, dated 1941-07-26, specified
+# UT-03 from Friday 1941-08-01 00:00, citing an "urgent...need to save fuel".
+# http://www.impo.com.uy/diariooficial/1941/08/04/1
+Rule Uruguay 1941 only - Aug 1 0:00 0:30 -
+# From Tim Parenti (2018-02-15):
+# Decreto 1866 of the Ministry of National Defense, dated 1942-12-09, specified
+# further advancement (to UT-02:30) from Sunday 1942-12-13 24:00. Since clocks
+# never went back to UT-03:30 thereafter, this is modeled as advancing standard
+# time by 30 minutes to UT-03, while retaining 30 minutes of DST.
+# http://www.impo.com.uy/diariooficial/1942/12/16/3
+Rule Uruguay 1942 only - Dec 14 0:00 0:30 -
Rule Uruguay 1943 only - Mar 14 0:00 0 -
-Rule Uruguay 1959 only - May 24 0:00 1:00 S
+Rule Uruguay 1959 only - May 24 0:00 0:30 -
Rule Uruguay 1959 only - Nov 15 0:00 0 -
-Rule Uruguay 1960 only - Jan 17 0:00 1:00 S
+Rule Uruguay 1960 only - Jan 17 0:00 1:00 -
Rule Uruguay 1960 only - Mar 6 0:00 0 -
-Rule Uruguay 1965 1967 - Apr Sun>=1 0:00 1:00 S
+Rule Uruguay 1965 only - Apr 4 0:00 1:00 -
Rule Uruguay 1965 only - Sep 26 0:00 0 -
-Rule Uruguay 1966 1967 - Oct 31 0:00 0 -
-Rule Uruguay 1968 1970 - May 27 0:00 0:30 HS
-Rule Uruguay 1968 1970 - Dec 2 0:00 0 -
-Rule Uruguay 1972 only - Apr 24 0:00 1:00 S
-Rule Uruguay 1972 only - Aug 15 0:00 0 -
-Rule Uruguay 1974 only - Mar 10 0:00 0:30 HS
-Rule Uruguay 1974 only - Dec 22 0:00 1:00 S
-Rule Uruguay 1976 only - Oct 1 0:00 0 -
-Rule Uruguay 1977 only - Dec 4 0:00 1:00 S
-Rule Uruguay 1978 only - Apr 1 0:00 0 -
-Rule Uruguay 1979 only - Oct 1 0:00 1:00 S
-Rule Uruguay 1980 only - May 1 0:00 0 -
-Rule Uruguay 1987 only - Dec 14 0:00 1:00 S
-Rule Uruguay 1988 only - Mar 14 0:00 0 -
-Rule Uruguay 1988 only - Dec 11 0:00 1:00 S
-Rule Uruguay 1989 only - Mar 12 0:00 0 -
-Rule Uruguay 1989 only - Oct 29 0:00 1:00 S
-# Shanks & Pottenger say no DST was observed in 1990/1 and 1991/2,
-# and that 1992/3's DST was from 10-25 to 03-01. Go with IATA.
-Rule Uruguay 1990 1992 - Mar Sun>=1 0:00 0 -
-Rule Uruguay 1990 1991 - Oct Sun>=21 0:00 1:00 S
-Rule Uruguay 1992 only - Oct 18 0:00 1:00 S
+# From Tim Parenti (2018-02-15):
+# Decreto 321/968 of 1968-05-25, citing emergency drought measures decreed the
+# day before, brought clocks forward 30 minutes from Monday 1968-05-27 00:00.
+# http://www.impo.com.uy/diariooficial/1968/05/30/5
+Rule Uruguay 1968 only - May 27 0:00 0:30 -
+Rule Uruguay 1968 only - Dec 1 0:00 0 -
+# From Tim Parenti (2018-02-15):
+# Decreto 188/970 of 1970-04-23 instituted restrictions on electricity
+# consumption "as a consequence of the current rainfall regime in the country".
+# Articles 13 and 14 advanced clocks by an hour from Saturday 1970-04-25 00:00.
+# http://www.impo.com.uy/diariooficial/1970/04/29/4
+Rule Uruguay 1970 only - Apr 25 0:00 1:00 -
+Rule Uruguay 1970 only - Jun 14 0:00 0 -
+Rule Uruguay 1972 only - Apr 23 0:00 1:00 -
+Rule Uruguay 1972 only - Jul 16 0:00 0 -
+# From Tim Parenti (2018-02-15):
+# Decreto 29/974 of 1974-01-11, citing "the international rise in the price of
+# oil", advanced clocks by 90 minutes (to UT-01:30). Decreto 163/974 of
+# 1974-03-04 returned 60 of those minutes (to UT-02:30), and the remaining 30
+# minutes followed in Decreto 679/974 of 1974-08-29.
+# http://www.impo.com.uy/diariooficial/1974/01/22/11
+# http://www.impo.com.uy/diariooficial/1974/03/14/3
+# http://www.impo.com.uy/diariooficial/1974/09/04/6
+Rule Uruguay 1974 only - Jan 13 0:00 1:30 -
+Rule Uruguay 1974 only - Mar 10 0:00 0:30 -
+Rule Uruguay 1974 only - Sep 1 0:00 0 -
+Rule Uruguay 1974 only - Dec 22 0:00 1:00 -
+Rule Uruguay 1975 only - Mar 30 0:00 0 -
+Rule Uruguay 1976 only - Dec 19 0:00 1:00 -
+Rule Uruguay 1977 only - Mar 6 0:00 0 -
+Rule Uruguay 1977 only - Dec 4 0:00 1:00 -
+Rule Uruguay 1978 1979 - Mar Sun>=1 0:00 0 -
+Rule Uruguay 1978 only - Dec 17 0:00 1:00 -
+Rule Uruguay 1979 only - Apr 29 0:00 1:00 -
+Rule Uruguay 1980 only - Mar 16 0:00 0 -
+# From Tim Parenti (2018-02-15):
+# Decreto 725/987 of 1987-12-04 cited "better use of national tourist
+# attractions" to advance clocks one hour from Monday 1987-12-14 00:00.
+# http://www.impo.com.uy/diariooficial/1988/01/25/1
+Rule Uruguay 1987 only - Dec 14 0:00 1:00 -
+Rule Uruguay 1988 only - Feb 28 0:00 0 -
+Rule Uruguay 1988 only - Dec 11 0:00 1:00 -
+Rule Uruguay 1989 only - Mar 5 0:00 0 -
+Rule Uruguay 1989 only - Oct 29 0:00 1:00 -
+Rule Uruguay 1990 only - Feb 25 0:00 0 -
+# From Tim Parenti (2018-02-15), per Paul Eggert (1999-11-04):
+# IATA agrees as below for 1990-10 through 1993-02. Per Almanaque 2018, the
+# 1992/1993 season appears to be the first in over half a century where DST
+# both began and ended pursuant to the same decree.
+Rule Uruguay 1990 1991 - Oct Sun>=21 0:00 1:00 -
+Rule Uruguay 1991 1992 - Mar Sun>=1 0:00 0 -
+Rule Uruguay 1992 only - Oct 18 0:00 1:00 -
Rule Uruguay 1993 only - Feb 28 0:00 0 -
# From Eduardo Cota (2004-09-20):
# The Uruguayan government has decreed a change in the local time....
-# http://www.presidencia.gub.uy/decretos/2004091502.htm
-Rule Uruguay 2004 only - Sep 19 0:00 1:00 S
+# From Tim Parenti (2018-02-15):
+# Decreto 328/004 of 2004-09-15.
+# http://www.impo.com.uy/diariooficial/2004/09/23/documentos.pdf#page=1
+Rule Uruguay 2004 only - Sep 19 0:00 1:00 -
# From Steffen Thorsen (2005-03-11):
# Uruguay's DST was scheduled to end on Sunday, 2005-03-13, but in order to
# save energy ... it was postponed two weeks....
-# http://www.presidencia.gub.uy/_Web/noticias/2005/03/2005031005.htm
+# From Tim Parenti (2018-02-15):
+# This 2005 postponement is not in Almanaque 2018. Go with the contemporaneous
+# reporting, which is confirmed by Decreto 107/005 of 2005-03-10 amending
+# Decreto 328/004:
+# http://www.impo.com.uy/diariooficial/2005/03/15/documentos.pdf#page=1
+# The original decree specified a transition of 2005-03-12 24:00, but the new
+# one specified 2005-03-27 02:00.
Rule Uruguay 2005 only - Mar 27 2:00 0 -
# From Eduardo Cota (2005-09-27):
-# http://www.presidencia.gub.uy/_Web/decretos/2005/09/CM%20119_09%2009%202005_00001.PDF
-# This means that from 2005-10-09 at 02:00 local time, until 2006-03-12 at
-# 02:00 local time, official time in Uruguay will be at GMT -2.
-Rule Uruguay 2005 only - Oct 9 2:00 1:00 S
-Rule Uruguay 2006 only - Mar 12 2:00 0 -
-# From Jesper Nørgaard Welen (2006-09-06):
-# http://www.presidencia.gub.uy/_web/decretos/2006/09/CM%20210_08%2006%202006_00001.PDF
-#
+# ...from 2005-10-09 at 02:00 local time, until 2006-03-12 at 02:00 local time,
+# official time in Uruguay will be at GMT -2.
+# From Tim Parenti (2018-02-15):
+# Decreto 318/005 of 2005-09-19.
+# http://www.impo.com.uy/diariooficial/2005/09/23/documentos.pdf#page=1
+Rule Uruguay 2005 only - Oct 9 2:00 1:00 -
+Rule Uruguay 2006 2015 - Mar Sun>=8 2:00 0 -
+# From Tim Parenti (2018-02-15), per Jesper Nørgaard Welen (2006-09-06):
+# Decreto 311/006 of 2006-09-04 established regular DST from the first Sunday
+# of October at 02:00 through the second Sunday of March at 02:00. Almanaque
+# 2018 appears to have a few typoed dates through this period; ignore them.
+# http://www.impo.com.uy/diariooficial/2006/09/08/documentos.pdf#page=1
+Rule Uruguay 2006 2014 - Oct Sun>=1 2:00 1:00 -
# From Steffen Thorsen (2015-06-30):
# ... it looks like they will not be using DST the coming summer:
# http://www.elobservador.com.uy/gobierno-resolvio-que-no-habra-cambio-horario-verano-n656787
@@ -1777,17 +1905,19 @@
# instead of out to dinner.
# From Pablo Camargo (2015-07-13):
# http://archivo.presidencia.gub.uy/sci/decretos/2015/06/cons_min_201.pdf
-# [dated 2015-06-29; repeals Decree 311/006 dated 2006-09-04]
-Rule Uruguay 2006 2014 - Oct Sun>=1 2:00 1:00 S
-Rule Uruguay 2007 2015 - Mar Sun>=8 2:00 0 -
+# From Tim Parenti (2018-02-15):
+# Decreto 178/015 of 2015-06-29; repeals Decreto 311/006.
# This Zone can be simplified once we assume zic %z.
-Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28
- -3:44:44 - MMT 1920 May 1 # Montevideo MT
+Zone America/Montevideo -3:44:51 - LMT 1908 Jun 10
+ -3:44:51 - MMT 1920 May 1 # Montevideo MT
+ -4:00 - -04 1923 Oct 1
-3:30 Uruguay -0330/-03 1942 Dec 14
+ -3:00 Uruguay -03/-0230 1960
-3:00 Uruguay -03/-02 1968
- -3:00 Uruguay -03/-0230 1971
+ -3:00 Uruguay -03/-0230 1970
-3:00 Uruguay -03/-02 1974
+ -3:00 Uruguay -03/-0130 1974 Mar 10
-3:00 Uruguay -03/-0230 1974 Dec 22
-3:00 Uruguay -03/-02
--- a/make/data/tzdata/zone.tab Thu Apr 05 19:08:48 2018 -0700
+++ b/make/data/tzdata/zone.tab Mon Apr 09 08:34:30 2018 -0700
@@ -452,7 +452,7 @@
US +643004-1652423 America/Nome Alaska (west)
US +515248-1763929 America/Adak Aleutian Islands
US +211825-1575130 Pacific/Honolulu Hawaii
-UY -3453-05611 America/Montevideo
+UY -345433-0561245 America/Montevideo
UZ +3940+06648 Asia/Samarkand Uzbekistan (west)
UZ +4120+06918 Asia/Tashkent Uzbekistan (east)
VA +415408+0122711 Europe/Vatican
--- a/make/jdk/netbeans/jmx/build.properties Thu Apr 05 19:08:48 2018 -0700
+++ b/make/jdk/netbeans/jmx/build.properties Mon Apr 09 08:34:30 2018 -0700
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -34,8 +34,7 @@
javax/management/ \
org/omg/stub/javax/management/
-excludes=\
- com/sun/jmx/snmp/
+excludes=
jtreg.tests=\
com/sun/jmx/ \
--- a/make/launcher/Launcher-jdk.pack.gmk Thu Apr 05 19:08:48 2018 -0700
+++ b/make/launcher/Launcher-jdk.pack.gmk Mon Apr 09 08:34:30 2018 -0700
@@ -34,6 +34,25 @@
# The order of the object files on the link command line affects the size of the resulting
# binary (at least on linux) which causes the size to differ between old and new build.
+# Tell the compiler not to export any functions unless declared so in
+# the source code. On Windows, this is the default and cannot be changed.
+# On Mac, we have always exported all symbols, probably due to oversight
+# and/or misunderstanding. To emulate this, don't hide any symbols
+# by default.
+# Also provide an override for non-conformant libraries.
+ifeq ($(TOOLCHAIN_TYPE), gcc)
+ CXXFLAGS_JDKEXE += -fvisibility=hidden
+ LDFLAGS_JDKEXE += -Wl,--exclude-libs,ALL
+else ifeq ($(TOOLCHAIN_TYPE), clang)
+ ifneq ($(OPENJDK_TARGET_OS), macosx)
+ CXXFLAGS_JDKEXE += -fvisibility=hidden
+ endif
+else ifeq ($(TOOLCHAIN_TYPE), solstudio)
+ CXXFLAGS_JDKEXE += -xldscope=hidden
+else ifeq ($(TOOLCHAIN_TYPE), xlc)
+ CXXFLAGS_JDKEXE += -qvisibility=hidden
+endif
+
UNPACKEXE_SRC := $(TOPDIR)/src/jdk.pack/share/native/common-unpack \
$(TOPDIR)/src/jdk.pack/share/native/unpack200
UNPACKEXE_CFLAGS := -I$(TOPDIR)/src/jdk.pack/share/native/common-unpack \
@@ -58,21 +77,6 @@
endif
-UNPACK_MAPFILE_DIR := $(TOPDIR)/make/mapfiles/libunpack
-UNPACK_MAPFILE_PLATFORM_FILE := \
- $(UNPACK_MAPFILE_DIR)/mapfile-vers-unpack200-$(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH)
-
-# The linker on older SuSE distros (e.g. on SLES 10) complains with:
-# "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable."
-# if feeded with a version script which contains named tags.
-ifeq ($(USING_BROKEN_SUSE_LD), yes)
- UNPACK_MAPFILE := $(UNPACK_MAPFILE_DIR)/mapfile-vers-unpack200.anonymous
-else ifneq ($(wildcard $(UNPACK_MAPFILE_PLATFORM_FILE)), )
- UNPACK_MAPFILE := $(UNPACK_MAPFILE_PLATFORM_FILE)
-else
- UNPACK_MAPFILE := $(UNPACK_MAPFILE_DIR)/mapfile-vers-unpack200
-endif
-
$(eval $(call SetupJdkExecutable, BUILD_UNPACKEXE, \
NAME := unpack200, \
SRC := $(UNPACKEXE_SRC), \
@@ -84,7 +88,6 @@
CFLAGS_solaris := -KPIC, \
CFLAGS_macosx := -fPIC, \
DISABLED_WARNINGS_gcc := unused-result implicit-fallthrough, \
- MAPFILE := $(UNPACK_MAPFILE),\
LDFLAGS := $(UNPACKEXE_ZIPOBJS) \
$(LDFLAGS_JDKEXE) $(LDFLAGS_CXX_JDK) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
--- a/make/launcher/LauncherCommon.gmk Thu Apr 05 19:08:48 2018 -0700
+++ b/make/launcher/LauncherCommon.gmk Mon Apr 09 08:34:30 2018 -0700
@@ -26,11 +26,9 @@
include JdkNativeCompilation.gmk
ifeq ($(OPENJDK_TARGET_OS), macosx)
- DISABLE_MAPFILES := true
ORIGIN_ARG := $(call SET_EXECUTABLE_ORIGIN)
else
ifeq ($(OPENJDK_TARGET_OS), windows)
- DISABLE_MAPFILES := true
endif
ORIGIN_ARG := $(call SET_EXECUTABLE_ORIGIN,/../lib/jli)
@@ -42,8 +40,27 @@
endif
endif
+# Tell the compiler not to export any functions unless declared so in
+# the source code. On Windows, this is the default and cannot be changed.
+# On Mac, we have always exported all symbols, probably due to oversight
+# and/or misunderstanding. To emulate this, don't hide any symbols
+# by default.
+# Also provide an override for non-conformant libraries.
+ifeq ($(TOOLCHAIN_TYPE), gcc)
+ LAUNCHER_CFLAGS += -fvisibility=hidden
+ LDFLAGS_JDKEXE += -Wl,--exclude-libs,ALL
+else ifeq ($(TOOLCHAIN_TYPE), clang)
+ ifneq ($(OPENJDK_TARGET_OS), macosx)
+ LAUNCHER_CFLAGS += -fvisibility=hidden
+ endif
+else ifeq ($(TOOLCHAIN_TYPE), solstudio)
+ LAUNCHER_CFLAGS += -xldscope=hidden
+else ifeq ($(TOOLCHAIN_TYPE), xlc)
+ LAUNCHER_CFLAGS += -qvisibility=hidden
+endif
+
LAUNCHER_SRC := $(TOPDIR)/src/java.base/share/native/launcher
-LAUNCHER_CFLAGS := -I$(TOPDIR)/src/java.base/share/native/launcher \
+LAUNCHER_CFLAGS += -I$(TOPDIR)/src/java.base/share/native/launcher \
-I$(TOPDIR)/src/java.base/share/native/libjli \
-I$(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/libjli \
-I$(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS)/native/libjli \
@@ -157,23 +174,6 @@
$1_WINDOWS_JLI_LIB := $(SUPPORT_OUTPUTDIR)/native/java.base/libjli/jli.lib
endif
- # The linker on older SuSE distros (e.g. on SLES 10) complains with:
- # "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable."
- # if feeded with a version script which contains named tags.
- ifeq ($(USING_BROKEN_SUSE_LD),yes)
- ifneq ($(wildcard $(TOPDIR)/make/mapfiles/launchers/mapfile-$(OPENJDK_TARGET_CPU).anonymous), )
- $1_MAPFILE := $(TOPDIR)/make/mapfiles/launchers/mapfile-$(OPENJDK_TARGET_CPU).anonymous
- else
- $1_MAPFILE :=
- endif
- else
- ifneq ($(wildcard $(TOPDIR)/make/mapfiles/launchers/mapfile-$(OPENJDK_TARGET_CPU)), )
- $1_MAPFILE := $(TOPDIR)/make/mapfiles/launchers/mapfile-$(OPENJDK_TARGET_CPU)
- else
- $1_MAPFILE :=
- endif
- endif
-
$$(eval $$(call SetupJdkExecutable, BUILD_LAUNCHER_$1, \
NAME := $1, \
EXTRA_FILES := $(LAUNCHER_SRC)/main.c, \
@@ -194,7 +194,6 @@
-L$(SUPPORT_OUTPUTDIR)/modules_libs/java.base/jli, \
LDFLAGS_solaris := $$($1_LDFLAGS_solaris) \
-L$(SUPPORT_OUTPUTDIR)/modules_libs/java.base/jli, \
- MAPFILE := $$($1_MAPFILE), \
LIBS := $(JDKEXE_LIBS) $$($1_LIBS), \
LIBS_unix := $$($1_LIBS_unix), \
LIBS_linux := -lpthread -ljli $(LIBDL), \
--- a/make/lib/Awt2dLibraries.gmk Thu Apr 05 19:08:48 2018 -0700
+++ b/make/lib/Awt2dLibraries.gmk Mon Apr 09 08:34:30 2018 -0700
@@ -651,10 +651,11 @@
LDFLAGS := $(subst -Wl$(COMMA)-z$(COMMA)defs,,$(LDFLAGS_JDKLIB)) $(LDFLAGS_CXX_JDK) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_unix := -L$(INSTALL_LIBRARIES_HERE), \
- LDFLAGS_macosx := -undefined dynamic_lookup, \
LIBS := $(BUILD_LIBFONTMANAGER_FONTLIB), \
LIBS_unix := -lawt -ljava -ljvm $(LIBM) $(LIBCXX), \
- LIBS_aix := -lawt_headless,\
+ LIBS_aix := -lawt_headless, \
+ LIBS_macosx := -lawt_lwawt -framework CoreText -framework CoreFoundation \
+ -framework CoreGraphics, \
LIBS_windows := $(WIN_JAVA_LIB) advapi32.lib user32.lib gdi32.lib \
$(WIN_AWT_LIB), \
))
@@ -665,6 +666,10 @@
$(BUILD_LIBFONTMANAGER): $(BUILD_LIBAWT_HEADLESS)
endif
+ifeq ($(OPENJDK_TARGET_OS), macosx)
+ $(BUILD_LIBFONTMANAGER): $(call FindLib, java.desktop, awt_lwawt)
+endif
+
ifeq ($(FREETYPE_TO_USE), bundled)
$(BUILD_LIBFONTMANAGER): $(BUILD_LIBFREETYPE)
endif
@@ -993,6 +998,7 @@
-I$(TOPDIR)/src/java.base/share/native/libjava \
-I$(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/libjava \
-I$(SUPPORT_OUTPUTDIR)/headers/java.desktop, \
+ DISABLED_WARNINGS_clang := deprecated-declarations, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN) \
-Wl$(COMMA)-rpath$(COMMA)@loader_path \
--- a/make/lib/Lib-java.desktop.gmk Thu Apr 05 19:08:48 2018 -0700
+++ b/make/lib/Lib-java.desktop.gmk Mon Apr 09 08:34:30 2018 -0700
@@ -105,7 +105,8 @@
CFLAGS := $(CFLAGS_JDKLIB) \
$(addprefix -I, $(LIBOSXAPP_SRC)) \
-I$(SUPPORT_OUTPUTDIR)/headers/java.desktop, \
- DISABLED_WARNINGS_clang := objc-method-access objc-root-class, \
+ DISABLED_WARNINGS_clang := objc-method-access objc-root-class \
+ deprecated-declarations, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LIBS := \
--- a/make/mapfiles/launchers/mapfile-ppc64 Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-#
-# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation. 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.
-#
-#
-# Specify what global symbols we export. Note that we're not really
-# interested in declaring a version, simply scoping the file is sufficient.
-#
-
-SUNWprivate_1.1 {
- global:
- main; # Provides basic adb symbol offsets
- environ; # Public symbols and required by Java run time
- _environ;
- __environ_lock;
-
- local:
- *;
-};
--- a/make/mapfiles/launchers/mapfile-ppc64.anonymous Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-#
-# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation. 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 anonymous library interface (i.e. without a version tag) for broken SuSE ld because
-# the linker on older SuSE distros (e.g. on SLES 10) complains with:
-# "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable."
-# if feeded with a version script which contains named tags.
-
-{
- global:
- main; # Provides basic adb symbol offsets
- environ; # Public symbols and required by Java run time
- _environ;
- __environ_lock;
-
- local:
- *;
-};
--- a/make/mapfiles/launchers/mapfile-sparc Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-#
-# Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation. Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-# Specify what global symbols we export. Note that we're not really
-# interested in declaring a version, simply scoping the file is sufficient.
-#
-
-SUNWprivate_1.1 {
- global:
- main; # Provides basic adb symbol offsets
- environ; # Public symbols and required by Java run time
- _environ;
- __environ_lock;
- ___Argv; # The following are private, but as they are
- _start; # exported from ctr1/crtn, the clever hacker
- _init; # might know about them. However note, that
- _fini; # their use is strictly not supported.
- _lib_version;
- __cg92_used;
- __xargc;
- __xargv;
- __fsr_init_value;
-
- local:
- *;
-};
--- a/make/mapfiles/launchers/mapfile-sparcv9 Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-#
-# Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation. Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-#
-# Specify what global symbols we export. Note that we're not really
-# interested in declaring a version, simply scoping the file is sufficient.
-#
-
-SUNWprivate_1.1 {
- global:
- main; # Provides basic adb symbol offsets
- environ; # Public symbols and required by Java run time
- _environ;
- __environ_lock;
- ___Argv; # The following are private, but as they are
- _start; # exported from ctr1/crtn, the clever hacker
- _init; # might know about them. However note, that
- _fini; # their use is strictly not supported.
- _lib_version;
- __xargc;
- __xargv;
- __fsr_init_value;
-
- local:
- *;
-};
--- a/make/mapfiles/launchers/mapfile-x86 Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-#
-# Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation. Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-#
-# Specify what global symbols we export. Note that we're not really
-# interested in declaring a version, simply scoping the file is sufficient.
-#
-
-SUNWprivate_1.1 {
- global:
- main; # Provides basic adb symbol offsets
- environ; # Public symbols and required by Java run time
- _environ;
- __environ_lock;
- ___Argv; # The following are private, but as they are
- _start; # exported from ctr1/crtn, the clever hacker
- _init; # might know about them. However note, that
- _fini; # their use is strictly not supported.
- _lib_version;
-# _mcount;
- __fsr;
- __fsr_init_value;
- __longdouble_used;
-
- local:
- *;
-};
--- a/make/mapfiles/launchers/mapfile-x86.anonymous Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-#
-# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation. 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 anonymous library interface (i.e. without a version tag) for broken SuSE ld because
-# the linker on older SuSE distros (e.g. on SLES 10) complains with:
-# "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable."
-# if feeded with a version script which contains named tags.
-
-{
- global:
- main; # Provides basic adb symbol offsets
- environ; # Public symbols and required by Java run time
- _environ;
- __environ_lock;
- ___Argv; # The following are private, but as they are
- _start; # exported from ctr1/crtn, the clever hacker
- _init; # might know about them. However note, that
- _fini; # their use is strictly not supported.
- _lib_version;
-# _mcount;
- __fsr;
- __fsr_init_value;
- __longdouble_used;
-
- local:
- *;
-};
--- a/make/mapfiles/launchers/mapfile-x86_64 Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-#
-# Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation. Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-#
-# Specify what global symbols we export. Note that we're not really
-# interested in declaring a version, simply scoping the file is sufficient.
-#
-
-SUNWprivate_1.1 {
- global:
- main; # Provides basic adb symbol offsets
- environ; # Public symbols and required by Java run time
- _environ;
- __environ_lock;
-
- # These are needed by the c runtime in SS12u4
- ___Argv;
- __xargv;
- __xargc;
- _start;
- __longdouble_used;
- _lib_version;
-
- local:
- *;
-};
--- a/make/mapfiles/launchers/mapfile-x86_64.anonymous Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-#
-# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation. 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 anonymous library interface (i.e. without a version tag) for broken SuSE ld because
-# the linker on older SuSE distros (e.g. on SLES 10) complains with:
-# "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable."
-# if feeded with a version script which contains named tags.
-
-{
- global:
- main; # Provides basic adb symbol offsets
- environ; # Public symbols and required by Java run time
- _environ;
- __environ_lock;
-
- local:
- *;
-};
--- a/make/mapfiles/libunpack/mapfile-vers-unpack200 Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-#
-# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# 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 library interface.
-
-SUNWprivate_1.1 {
- local:
- *;
-};
--- a/make/mapfiles/libunpack/mapfile-vers-unpack200-solaris-sparc Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-#
-# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# 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 library interface.
-
-SUNWprivate_1.1 {
- global:
- # These are needed by the c runtime in SS12u4
- environ;
- _environ;
- __environ_lock;
- ___Argv;
- __xargv;
- __xargc;
- _start;
- _lib_version;
-
- local:
- *;
-};
--- a/make/mapfiles/libunpack/mapfile-vers-unpack200-solaris-x86 Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-#
-# Copyright (c) 2011, 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 library interface.
-
-SUNWprivate_1.1 {
- global:
- # These are needed by the c runtime in SS12u4
- environ;
- _environ;
- __environ_lock;
- ___Argv;
- __xargv;
- __xargc;
- _start;
- __longdouble_used;
- _lib_version;
-
- local:
- *;
-};
--- a/make/mapfiles/libunpack/mapfile-vers-unpack200.anonymous Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-#
-# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation. 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 anonymous library interface (i.e. without a version tag) for broken SuSE ld because
-# the linker on older SuSE distros (e.g. on SLES 10) complains with:
-# "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable."
-# if feeded with a version script which contains named tags.
-
-{
- local:
- *;
-};
--- a/src/java.base/linux/classes/sun/nio/ch/EPollSelectorImpl.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/linux/classes/sun/nio/ch/EPollSelectorImpl.java Mon Apr 09 08:34:30 2018 -0700
@@ -63,20 +63,14 @@
// maps file descriptor to selection key, synchronize on selector
private final Map<Integer, SelectionKeyImpl> fdToKey = new HashMap<>();
- // pending new registrations/updates, queued by implRegister and putEventOpos
+ // pending new registrations/updates, queued by setEventOps
private final Object updateLock = new Object();
- private final Deque<SelectionKeyImpl> newKeys = new ArrayDeque<>();
private final Deque<SelectionKeyImpl> updateKeys = new ArrayDeque<>();
- private final Deque<Integer> updateEvents = new ArrayDeque<>();
// interrupt triggering and clearing
private final Object interruptLock = new Object();
private boolean interruptTriggered;
- /**
- * Package private constructor called by factory method in
- * the abstract superclass Selector.
- */
EPollSelectorImpl(SelectorProvider sp) throws IOException {
super(sp);
@@ -140,30 +134,21 @@
}
/**
- * Process new registrations and changes to the interest ops.
+ * Process changes to the interest ops.
*/
private void processUpdateQueue() {
assert Thread.holdsLock(this);
synchronized (updateLock) {
SelectionKeyImpl ski;
-
- // new registrations
- while ((ski = newKeys.pollFirst()) != null) {
+ while ((ski = updateKeys.pollFirst()) != null) {
if (ski.isValid()) {
- int fd = ski.channel.getFDVal();
- SelectionKeyImpl previous = fdToKey.put(fd, ski);
- assert previous == null;
- assert ski.registeredEvents() == 0;
- }
- }
+ int fd = ski.getFDVal();
+ // add to fdToKey if needed
+ SelectionKeyImpl previous = fdToKey.putIfAbsent(fd, ski);
+ assert (previous == null) || (previous == ski);
- // changes to interest ops
- assert updateKeys.size() == updateEvents.size();
- while ((ski = updateKeys.pollFirst()) != null) {
- int newEvents = updateEvents.pollFirst();
- int fd = ski.channel.getFDVal();
- if (ski.isValid() && fdToKey.containsKey(fd)) {
+ int newEvents = ski.translateInterestOps();
int registeredEvents = ski.registeredEvents();
if (newEvents != registeredEvents) {
if (newEvents == 0) {
@@ -206,11 +191,11 @@
if (ski != null) {
int rOps = EPoll.getEvents(event);
if (selectedKeys.contains(ski)) {
- if (ski.channel.translateAndSetReadyOps(rOps, ski)) {
+ if (ski.translateAndUpdateReadyOps(rOps)) {
numKeysUpdated++;
}
} else {
- ski.channel.translateAndSetReadyOps(rOps, ski);
+ ski.translateAndSetReadyOps(rOps);
if ((ski.nioReadyOps() & ski.nioInterestOps()) != 0) {
selectedKeys.add(ski);
numKeysUpdated++;
@@ -244,19 +229,11 @@
}
@Override
- protected void implRegister(SelectionKeyImpl ski) {
- ensureOpen();
- synchronized (updateLock) {
- newKeys.addLast(ski);
- }
- }
-
- @Override
protected void implDereg(SelectionKeyImpl ski) throws IOException {
assert !ski.isValid();
assert Thread.holdsLock(this);
- int fd = ski.channel.getFDVal();
+ int fd = ski.getFDVal();
if (fdToKey.remove(fd) != null) {
if (ski.registeredEvents() != 0) {
EPoll.ctl(epfd, EPOLL_CTL_DEL, fd, 0);
@@ -268,10 +245,9 @@
}
@Override
- public void putEventOps(SelectionKeyImpl ski, int events) {
+ public void setEventOps(SelectionKeyImpl ski) {
ensureOpen();
synchronized (updateLock) {
- updateEvents.addLast(events); // events first in case adding key fails
updateKeys.addLast(ski);
}
}
--- a/src/java.base/macosx/classes/sun/nio/ch/KQueueSelectorImpl.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/macosx/classes/sun/nio/ch/KQueueSelectorImpl.java Mon Apr 09 08:34:30 2018 -0700
@@ -62,11 +62,9 @@
// maps file descriptor to selection key, synchronize on selector
private final Map<Integer, SelectionKeyImpl> fdToKey = new HashMap<>();
- // pending new registrations/updates, queued by implRegister and putEventOps
+ // pending new registrations/updates, queued by setEventOps
private final Object updateLock = new Object();
- private final Deque<SelectionKeyImpl> newKeys = new ArrayDeque<>();
private final Deque<SelectionKeyImpl> updateKeys = new ArrayDeque<>();
- private final Deque<Integer> updateEvents = new ArrayDeque<>();
// interrupt triggering and clearing
private final Object interruptLock = new Object();
@@ -138,30 +136,21 @@
}
/**
- * Process new registrations and changes to the interest ops.
+ * Process changes to the interest ops.
*/
private void processUpdateQueue() {
assert Thread.holdsLock(this);
synchronized (updateLock) {
SelectionKeyImpl ski;
-
- // new registrations
- while ((ski = newKeys.pollFirst()) != null) {
+ while ((ski = updateKeys.pollFirst()) != null) {
if (ski.isValid()) {
- int fd = ski.channel.getFDVal();
- SelectionKeyImpl previous = fdToKey.put(fd, ski);
- assert previous == null;
- assert ski.registeredEvents() == 0;
- }
- }
+ int fd = ski.getFDVal();
+ // add to fdToKey if needed
+ SelectionKeyImpl previous = fdToKey.putIfAbsent(fd, ski);
+ assert (previous == null) || (previous == ski);
- // changes to interest ops
- assert updateKeys.size() == updateKeys.size();
- while ((ski = updateKeys.pollFirst()) != null) {
- int newEvents = updateEvents.pollFirst();
- int fd = ski.channel.getFDVal();
- if (ski.isValid() && fdToKey.containsKey(fd)) {
+ int newEvents = ski.translateInterestOps();
int registeredEvents = ski.registeredEvents();
if (newEvents != registeredEvents) {
@@ -227,18 +216,15 @@
}
if (selectedKeys.contains(ski)) {
- // file descriptor may be polled more than once per poll
- if (ski.lastPolled != pollCount) {
- if (ski.channel.translateAndSetReadyOps(rOps, ski)) {
+ if (ski.translateAndUpdateReadyOps(rOps)) {
+ // file descriptor may be polled more than once per poll
+ if (ski.lastPolled != pollCount) {
numKeysUpdated++;
ski.lastPolled = pollCount;
}
- } else {
- // ready ops have already been set on this update
- ski.channel.translateAndUpdateReadyOps(rOps, ski);
}
} else {
- ski.channel.translateAndSetReadyOps(rOps, ski);
+ ski.translateAndSetReadyOps(rOps);
if ((ski.nioReadyOps() & ski.nioInterestOps()) != 0) {
selectedKeys.add(ski);
numKeysUpdated++;
@@ -273,19 +259,11 @@
}
@Override
- protected void implRegister(SelectionKeyImpl ski) {
- ensureOpen();
- synchronized (updateLock) {
- newKeys.addLast(ski);
- }
- }
-
- @Override
protected void implDereg(SelectionKeyImpl ski) throws IOException {
assert !ski.isValid();
assert Thread.holdsLock(this);
- int fd = ski.channel.getFDVal();
+ int fd = ski.getFDVal();
int registeredEvents = ski.registeredEvents();
if (fdToKey.remove(fd) != null) {
if (registeredEvents != 0) {
@@ -301,10 +279,9 @@
}
@Override
- public void putEventOps(SelectionKeyImpl ski, int events) {
+ public void setEventOps(SelectionKeyImpl ski) {
ensureOpen();
synchronized (updateLock) {
- updateEvents.addLast(events); // events first in case adding key fails
updateKeys.addLast(ski);
}
}
--- a/src/java.base/share/classes/java/lang/Class.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/java/lang/Class.java Mon Apr 09 08:34:30 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1994, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 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
@@ -3529,7 +3529,7 @@
if (universe == null)
throw new IllegalArgumentException(
getName() + " is not an enum type");
- directory = new HashMap<>(2 * universe.length);
+ directory = new HashMap<>((int)(universe.length / 0.75f) + 1);
for (T constant : universe) {
directory.put(((Enum<?>)constant).name(), constant);
}
--- a/src/java.base/share/classes/java/lang/ClassLoader.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/java/lang/ClassLoader.java Mon Apr 09 08:34:30 2018 -0700
@@ -699,7 +699,7 @@
/**
* Finds the class with the given <a href="#binary-name">binary name</a>
* in a module defined to this class loader.
- * Class loader implementations that support the loading from modules
+ * Class loader implementations that support loading from modules
* should override this method.
*
* @apiNote This method returns {@code null} rather than throwing
@@ -1281,7 +1281,7 @@
/**
* Returns a URL to a resource in a module defined to this class loader.
- * Class loader implementations that support the loading from modules
+ * Class loader implementations that support loading from modules
* should override this method.
*
* @apiNote This method is the basis for the {@link
@@ -1417,12 +1417,12 @@
* @param name
* The resource name
*
- * @return An enumeration of {@link java.net.URL URL} objects for
- * the resource. If no resources could be found, the enumeration
- * will be empty. Resources for which a {@code URL} cannot be
- * constructed, are in package that is not opened unconditionally,
- * or access to the resource is denied by the security manager,
- * are not returned in the enumeration.
+ * @return An enumeration of {@link java.net.URL URL} objects for the
+ * resource. If no resources could be found, the enumeration will
+ * be empty. Resources for which a {@code URL} cannot be
+ * constructed, are in a package that is not opened
+ * unconditionally, or access to the resource is denied by the
+ * security manager, are not returned in the enumeration.
*
* @throws IOException
* If I/O errors occur
--- a/src/java.base/share/classes/java/lang/ModuleLayer.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/java/lang/ModuleLayer.java Mon Apr 09 08:34:30 2018 -0700
@@ -152,7 +152,7 @@
private static final ModuleLayer EMPTY_LAYER
= new ModuleLayer(Configuration.empty(), List.of(), null);
- // the configuration from which this ;ayer was created
+ // the configuration from which this layer was created
private final Configuration cf;
// parent layers, empty in the case of the empty layer
@@ -498,7 +498,7 @@
try {
Loader loader = new Loader(cf.modules(), parentLoader);
loader.initRemotePackageMap(cf, parents);
- ModuleLayer layer = new ModuleLayer(cf, parents, mn -> loader);
+ ModuleLayer layer = new ModuleLayer(cf, parents, mn -> loader);
return new Controller(layer);
} catch (IllegalArgumentException | IllegalStateException e) {
throw new LayerInstantiationException(e.getMessage());
--- a/src/java.base/share/classes/java/lang/SecurityManager.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/java/lang/SecurityManager.java Mon Apr 09 08:34:30 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 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
@@ -235,19 +235,6 @@
*/
private boolean initialized = false;
-
- /**
- * returns true if the current context has been granted AllPermission
- */
- private boolean hasAllPermission() {
- try {
- checkPermission(SecurityConstants.ALL_PERMISSION);
- return true;
- } catch (SecurityException se) {
- return false;
- }
- }
-
/**
* Constructs a new <code>SecurityManager</code>.
*
@@ -1081,28 +1068,6 @@
}
/**
- * Returns {@code true} if the calling thread has {@code AllPermission}.
- *
- * @param window not used except to check if it is {@code null}.
- * @return {@code true} if the calling thread has {@code AllPermission}.
- * @exception NullPointerException if the {@code window} argument is
- * {@code null}.
- * @deprecated This method was originally used to check if the calling thread
- * was trusted to bring up a top-level window. The method has been
- * obsoleted and code should instead use {@link #checkPermission}
- * to check {@code AWTPermission("showWindowWithoutWarningBanner")}.
- * This method is subject to removal in a future version of Java SE.
- * @see #checkPermission(java.security.Permission) checkPermission
- */
- @Deprecated(since="1.8", forRemoval=true)
- public boolean checkTopLevelWindow(Object window) {
- if (window == null) {
- throw new NullPointerException("window can't be null");
- }
- return hasAllPermission();
- }
-
- /**
* Throws a <code>SecurityException</code> if the
* calling thread is not allowed to initiate a print job request.
* <p>
@@ -1124,44 +1089,6 @@
checkPermission(new RuntimePermission("queuePrintJob"));
}
- /**
- * Throws {@code SecurityException} if the calling thread does
- * not have {@code AllPermission}.
- *
- * @since 1.1
- * @exception SecurityException if the calling thread does not have
- * {@code AllPermission}
- * @deprecated This method was originally used to check if the calling
- * thread could access the system clipboard. The method has been
- * obsoleted and code should instead use {@link #checkPermission}
- * to check {@code AWTPermission("accessClipboard")}.
- * This method is subject to removal in a future version of Java SE.
- * @see #checkPermission(java.security.Permission) checkPermission
- */
- @Deprecated(since="1.8", forRemoval=true)
- public void checkSystemClipboardAccess() {
- checkPermission(SecurityConstants.ALL_PERMISSION);
- }
-
- /**
- * Throws {@code SecurityException} if the calling thread does
- * not have {@code AllPermission}.
- *
- * @since 1.1
- * @exception SecurityException if the calling thread does not have
- * {@code AllPermission}
- * @deprecated This method was originally used to check if the calling
- * thread could access the AWT event queue. The method has been
- * obsoleted and code should instead use {@link #checkPermission}
- * to check {@code AWTPermission("accessEventQueue")}.
- * This method is subject to removal in a future version of Java SE.
- * @see #checkPermission(java.security.Permission) checkPermission
- */
- @Deprecated(since="1.8", forRemoval=true)
- public void checkAwtEventQueueAccess() {
- checkPermission(SecurityConstants.ALL_PERMISSION);
- }
-
/*
* We have an initial invalid bit (initially false) for the class
* variables which tell if the cache is valid. If the underlying
@@ -1475,35 +1402,6 @@
}
/**
- * Throws a {@code SecurityException} if the calling thread does
- * not have {@code AllPermission}.
- *
- * @param clazz the class that reflection is to be performed on.
- * @param which type of access, PUBLIC or DECLARED.
- * @throws SecurityException if the caller does not have
- * {@code AllPermission}
- * @throws NullPointerException if the {@code clazz} argument is
- * {@code null}
- * @deprecated This method was originally used to check if the calling
- * thread was allowed to access members. It relied on the
- * caller being at a stack depth of 4 which is error-prone and
- * cannot be enforced by the runtime. The method has been
- * obsoleted and code should instead use
- * {@link #checkPermission} to check
- * {@code RuntimePermission("accessDeclaredMembers")}. This
- * method is subject to removal in a future version of Java SE.
- * @since 1.1
- * @see #checkPermission(java.security.Permission) checkPermission
- */
- @Deprecated(since="1.8", forRemoval=true)
- public void checkMemberAccess(Class<?> clazz, int which) {
- if (clazz == null) {
- throw new NullPointerException("class can't be null");
- }
- checkPermission(SecurityConstants.ALL_PERMISSION);
- }
-
- /**
* Determines whether the permission with the specified permission target
* name should be granted or denied.
*
--- a/src/java.base/share/classes/java/lang/invoke/VarHandle.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/java/lang/invoke/VarHandle.java Mon Apr 09 08:34:30 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 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
@@ -1788,10 +1788,12 @@
static final Map<String, AccessMode> methodNameToAccessMode;
static {
- // Initial capacity of # values is sufficient to avoid resizes
- // for the smallest table size (32)
- methodNameToAccessMode = new HashMap<>(AccessMode.values().length);
- for (AccessMode am : AccessMode.values()) {
+ AccessMode[] values = AccessMode.values();
+ // Initial capacity of # values divided by the load factor is sufficient
+ // to avoid resizes for the smallest table size (64)
+ int initialCapacity = (int)(values.length / 0.75f) + 1;
+ methodNameToAccessMode = new HashMap<>(initialCapacity);
+ for (AccessMode am : values) {
methodNameToAccessMode.put(am.methodName, am);
}
}
--- a/src/java.base/share/classes/java/lang/module/ModuleDescriptor.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/java/lang/module/ModuleDescriptor.java Mon Apr 09 08:34:30 2018 -0700
@@ -1742,7 +1742,7 @@
throw new IllegalArgumentException("Empty target set");
if (strict) {
requirePackageName(e.source());
- targets.stream().forEach(Checks::requireModuleName);
+ targets.forEach(Checks::requireModuleName);
}
return exports(e);
}
@@ -1878,7 +1878,7 @@
throw new IllegalArgumentException("Empty target set");
if (strict) {
requirePackageName(opens.source());
- targets.stream().forEach(Checks::requireModuleName);
+ targets.forEach(Checks::requireModuleName);
}
return opens(opens);
}
--- a/src/java.base/share/classes/java/lang/reflect/Proxy.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/java/lang/reflect/Proxy.java Mon Apr 09 08:34:30 2018 -0700
@@ -593,8 +593,7 @@
module.getName(), cn, loader);
}
if (isDebug("debug")) {
- interfaces.stream()
- .forEach(c -> System.out.println(toDetails(c)));
+ interfaces.forEach(c -> System.out.println(toDetails(c)));
}
}
--- a/src/java.base/share/classes/java/net/InetAddress.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/java/net/InetAddress.java Mon Apr 09 08:34:30 2018 -0700
@@ -290,7 +290,10 @@
/* Used to store the name service provider */
private static transient NameService nameService = null;
- /* Used to store the best available hostname */
+ /**
+ * Used to store the best available hostname.
+ * Lazily initialized via a data race; safe because Strings are immutable.
+ */
private transient String canonicalHostName = null;
/** use serialVersionUID from JDK 1.0.2 for interoperability */
@@ -622,11 +625,11 @@
* @since 1.4
*/
public String getCanonicalHostName() {
- if (canonicalHostName == null) {
- canonicalHostName =
+ String value = canonicalHostName;
+ if (value == null)
+ canonicalHostName = value =
InetAddress.getHostFromNameService(this, true);
- }
- return canonicalHostName;
+ return value;
}
/**
--- a/src/java.base/share/classes/java/net/URL.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/java/net/URL.java Mon Apr 09 08:34:30 2018 -0700
@@ -1411,7 +1411,7 @@
// Check with factory if another thread set a
// factory since our last check
if (!checkedWithFactory && (fac = factory) != null) {
- handler2 = fac.createURLStreamHandler(protocol);
+ handler2 = fac.createURLStreamHandler(protocol);
}
if (handler2 != null) {
--- a/src/java.base/share/classes/java/net/URLClassLoader.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/java/net/URLClassLoader.java Mon Apr 09 08:34:30 2018 -0700
@@ -764,7 +764,7 @@
path = ParseUtil.decode(path);
if (path.endsWith(File.separator))
path += "-";
- p = new FilePermission(path, SecurityConstants.FILE_READ_ACTION);
+ p = new FilePermission(path, SecurityConstants.FILE_READ_ACTION);
} else {
/**
* Not loading from a 'file:' URL so we want to give the class
--- a/src/java.base/share/classes/java/net/doc-files/net-properties.html Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/java/net/doc-files/net-properties.html Mon Apr 09 08:34:30 2018 -0700
@@ -1,6 +1,6 @@
<!DOCTYPE HTML>
<!--
- Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 1998, 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,7 +35,7 @@
java.net package. Some are checked only once at startup of the VM,
and therefore are best set using the -D option of the java command,
while others have a more dynamic nature and can also be changed using
-the <a href="../../lang/System.html#setProperty-java.lang.String-java.lang.String-">System.setProperty()</a> API.
+the <a href="../../lang/System.html#setProperty(java.lang.String,java.lang.String)">System.setProperty()</a> API.
The purpose of this document is to list
and detail all of these properties.</P>
<P>If there is no special note, a property value is checked every time it is used.</P>
--- a/src/java.base/share/classes/java/security/PKCS12Attribute.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/java/security/PKCS12Attribute.java Mon Apr 09 08:34:30 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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
@@ -44,7 +44,7 @@
Pattern.compile("^[0-9a-fA-F]{2}(:[0-9a-fA-F]{2})+$");
private String name;
private String value;
- private byte[] encoded;
+ private final byte[] encoded;
private int hashValue = -1;
/**
@@ -199,7 +199,7 @@
if (!(obj instanceof PKCS12Attribute)) {
return false;
}
- return Arrays.equals(encoded, ((PKCS12Attribute) obj).getEncoded());
+ return Arrays.equals(encoded, ((PKCS12Attribute) obj).encoded);
}
/**
@@ -210,10 +210,11 @@
*/
@Override
public int hashCode() {
- if (hashValue == -1) {
- Arrays.hashCode(encoded);
+ int h = hashValue;
+ if (h == -1) {
+ hashValue = h = Arrays.hashCode(encoded);
}
- return hashValue;
+ return h;
}
/**
--- a/src/java.base/share/classes/java/text/ChoiceFormat.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/java/text/ChoiceFormat.java Mon Apr 09 08:34:30 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 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
@@ -312,7 +312,7 @@
* Constructs with limits and corresponding formats based on the pattern.
*
* @param newPattern the new pattern string
- * @exception NullPointerExcpetion if {@code newPattern} is
+ * @exception NullPointerException if {@code newPattern} is
* {@code null}
* @see #applyPattern
*/
--- a/src/java.base/share/classes/java/util/doc-files/coll-designfaq.html Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/java/util/doc-files/coll-designfaq.html Mon Apr 09 08:34:30 2018 -0700
@@ -1,6 +1,6 @@
<!DOCTYPE html>
<!--
- Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 1998, 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
@@ -371,7 +371,7 @@
would do away with many useful facilities (like synchronizing
wrappers). One view that we see as being particularly useful is
<a href=
-"../List.html#subList-int-int-">List.subList</a>.
+"../List.html#subList(int,int)">List.subList</a>.
The existence of this method means that people who write methods
taking List on input do not have to write secondary forms taking an
offset and a length (as they do for arrays).</p>
--- a/src/java.base/share/classes/java/util/doc-files/coll-overview.html Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/java/util/doc-files/coll-overview.html Mon Apr 09 08:34:30 2018 -0700
@@ -1,6 +1,6 @@
<!DOCTYPE html>
<!--
- Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 1998, 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
@@ -258,7 +258,7 @@
restrictions on the elements they may contain. They are
unsynchronized, but the <code>Collections</code> class contains static
factories called <a href=
-"../Collections.html#synchronizedCollection-java.util.Collection-">
+"../Collections.html#synchronizedCollection(java.util.Collection)">
<em>synchronization wrappers</em></a> that can be used to add
synchronization to many unsynchronized collections. All of the new
implementations have <i>fail-fast iterators</i>, which detect
--- a/src/java.base/share/classes/java/util/doc-files/coll-reference.html Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/java/util/doc-files/coll-reference.html Mon Apr 09 08:34:30 2018 -0700
@@ -1,6 +1,6 @@
<!DOCTYPE html>
<!--
- Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 1998, 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
@@ -177,7 +177,7 @@
interface. An insertion-ordered <code>Map</code> implementation that
runs nearly as fast as <code>HashMap</code>. Also useful for building
caches (see <a href=
-"../LinkedHashMap.html#removeEldestEntry-java.util.Map.Entry-">
+"../LinkedHashMap.html#removeEldestEntry(java.util.Map.Entry)">
removeEldestEntry(Map.Entry)</a> ).</li>
</ul>
</li>
@@ -186,13 +186,13 @@
implementations. Accessed solely through static factory methods.
<ul>
<li><a href=
-"../Collections.html#unmodifiableCollection-java.util.Collection-">
+"../Collections.html#unmodifiableCollection(java.util.Collection)">
<strong>Collections.unmodifiable<i>Interface</i></strong></a> -
Returns an unmodifiable view of a specified collection that throws
an <code>UnsupportedOperationException</code> if the user attempts to
modify it.</li>
<li><a href=
-"../Collections.html#synchronizedCollection-java.util.Collection-"
+"../Collections.html#synchronizedCollection(java.util.Collection)"
id=
"synchWrappers"><strong>Collections.synchronized<i>Interface</i></strong></a>
- Returns a synchronized collection that is backed by the specified
@@ -200,7 +200,7 @@
the backing collection are through the returned collection, thread
safety is guaranteed.</li>
<li><a href=
-"../Collections.html#checkedCollection-java.util.Collection-java.lang.Class-">
+"../Collections.html#checkedCollection(java.util.Collection,java.lang.Class)">
<strong>Collections.checked<i>Interface</i></strong></a> - Returns
a dynamically type-safe view of the specified collection, which
throws a <code>ClassCastException</code> if a client attempts to add an
@@ -214,12 +214,12 @@
adapt one collections interface to another:
<ul>
<li><strong><a href=
-"../Collections.html#newSetFromMap-java.util.Map-">
+"../Collections.html#newSetFromMap(java.util.Map)">
newSetFromMap(Map)</a></strong> - Creates a general-purpose
<code>Set</code> implementation from a general-purpose <code>Map</code>
implementation.</li>
<li><strong><a href=
-"../Collections.html#asLifoQueue-java.util.Deque-">
+"../Collections.html#asLifoQueue(java.util.Deque)">
asLifoQueue(Deque)</a></strong> - Returns a view of a
<code>Deque</code> as a Last In First Out (LIFO) <code>Queue</code>.</li>
</ul>
@@ -228,25 +228,25 @@
"mini-implementations" of the collection interfaces.
<ul>
<li><a href=
-"../Arrays.html#asList-T...-"><strong>Arrays.asList</strong></a>
+"../Arrays.html#asList(T...)"><strong>Arrays.asList</strong></a>
- Enables an array to be viewed as a list.</li>
<li><strong><a href=
-"../Collections.html#emptySet--">emptySet</a>,
+"../Collections.html#emptySet()">emptySet</a>,
<a href=
-"../Collections.html#emptyList--">emptyList</a>
+"../Collections.html#emptyList()">emptyList</a>
and <a href=
-"../Collections.html#emptyMap--">emptyMap</a></strong>
+"../Collections.html#emptyMap()">emptyMap</a></strong>
- Return an immutable empty set, list, or map.</li>
<li><strong><a href=
-"../Collections.html#singleton-java.lang.Object-">
+"../Collections.html#singleton(java.lang.Object)">
singleton</a>, <a href=
-"../Collections.html#singletonList-java.lang.Object-">
+"../Collections.html#singletonList(java.lang.Object)">
singletonList</a>, and <a href=
-"../Collections.html#singletonMap-K-V-">singletonMap</a></strong>
+"../Collections.html#singletonMap(K,V)">singletonMap</a></strong>
- Return an immutable singleton set, list, or map, containing only
the specified object (or key-value mapping).</li>
<li><a href=
-"../Collections.html#nCopies-int-T-"><strong>
+"../Collections.html#nCopies(int,T)"><strong>
nCopies</strong></a> - Returns an immutable list consisting of n
copies of a specified object.</li>
</ul>
@@ -410,71 +410,71 @@
class contains these useful static methods.
<ul>
<li><strong><a href=
-"../Collections.html#sort-java.util.List-">sort(List)</a></strong>
+"../Collections.html#sort(java.util.List)">sort(List)</a></strong>
- Sorts a list using a merge sort algorithm, which provides average
case performance comparable to a high quality quicksort, guaranteed
O(n*log n) performance (unlike quicksort), and <em>stability</em>
(unlike quicksort). A stable sort is one that does not reorder
equal elements.</li>
<li><strong><a href=
-"../Collections.html#binarySearch-java.util.List-T-">
+"../Collections.html#binarySearch(java.util.List,T)">
binarySearch(List, Object)</a></strong> - Searches for an element
in an ordered list using the binary search algorithm.</li>
<li><strong><a href=
-"../Collections.html#reverse-java.util.List-">reverse(List)</a></strong>
+"../Collections.html#reverse(java.util.List)">reverse(List)</a></strong>
- Reverses the order of the elements in a list.</li>
<li><strong><a href=
-"../Collections.html#shuffle-java.util.List-">shuffle(List)</a></strong>
+"../Collections.html#shuffle(java.util.List)">shuffle(List)</a></strong>
- Randomly changes the order of the elements in a list.</li>
<li><strong><a href=
-"../Collections.html#fill-java.util.List-T-">
+"../Collections.html#fill(java.util.List,T)">
fill(List, Object)</a></strong> - Overwrites every element in a
list with the specified value.</li>
<li><strong><a href=
-"../Collections.html#copy-java.util.List-java.util.List-">
+"../Collections.html#copy-java.util.List(java.util.List)">
copy(List dest, List src)</a></strong> - Copies the source list
into the destination list.</li>
<li><strong><a href=
-"../Collections.html#min-java.util.Collection-">
+"../Collections.html#min(java.util.Collection)">
min(Collection)</a></strong> - Returns the minimum element in a
collection.</li>
<li><strong><a href=
-"../Collections.html#max-java.util.Collection-">
+"../Collections.html#max(java.util.Collection)">
max(Collection)</a></strong> - Returns the maximum element in a
collection.</li>
<li><strong><a href=
-"../Collections.html#rotate-java.util.List-int-">
+"../Collections.html#rotate(java.util.List,int)">
rotate(List list, int distance)</a></strong> - Rotates all of the
elements in the list by the specified distance.</li>
<li><strong><a href=
-"../Collections.html#replaceAll-java.util.List-T-T-">
+"../Collections.html#replaceAll(java.util.List,T,T)">
replaceAll(List list, Object oldVal, Object newVal)</a></strong> -
Replaces all occurrences of one specified value with another.</li>
<li><strong><a href=
-"../Collections.html#indexOfSubList-java.util.List-java.util.List-">
+"../Collections.html#indexOfSubList(java.util.List,java.util.List)">
indexOfSubList(List source, List target)</a></strong> - Returns the
index of the first sublist of source that is equal to target.</li>
<li><strong><a href=
-"../Collections.html#lastIndexOfSubList-java.util.List-java.util.List-">
+"../Collections.html#lastIndexOfSubList(java.util.List,java.util.List)">
lastIndexOfSubList(List source, List target)</a></strong> - Returns
the index of the last sublist of source that is equal to
target.</li>
<li><strong><a href=
-"../Collections.html#swap-java.util.List-int-int-">
+"../Collections.html#swap(java.util.List,int,int)">
swap(List, int, int)</a></strong> - Swaps the elements at the
specified positions in the specified list.</li>
<li><strong><a href=
-"../Collections.html#frequency-java.util.Collection-java.lang.Object-">
+"../Collections.html#frequency(java.util.Collection,java.lang.Object)">
frequency(Collection, Object)</a></strong> - Counts the number of
times the specified element occurs in the specified
collection.</li>
<li><strong><a href=
-"../Collections.html#disjoint-java.util.Collection-java.util.Collection-">
+"../Collections.html#disjoint(java.util.Collection,java.util.Collection)">
disjoint(Collection, Collection)</a></strong> - Determines whether
two collections are disjoint, in other words, whether they contain
no elements in common.</li>
<li><strong><a href=
-"../Collections.html#addAll-java.util.Collection-T...-">
+"../Collections.html#addAll(java.util.Collection,T...)">
addAll(Collection<? super T>, T...)</a></strong> - Adds all
of the elements in the specified array to the specified
collection.</li>
--- a/src/java.base/share/classes/jdk/internal/loader/BootLoader.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/jdk/internal/loader/BootLoader.java Mon Apr 09 08:34:30 2018 -0700
@@ -100,8 +100,8 @@
}
/**
- * Register a module with this class loader so that its classes (and
- * resources) become visible via this class loader.
+ * Registers a module with this class loader so that its classes
+ * (and resources) become visible via this class loader.
*/
public static void loadModule(ModuleReference mref) {
ClassLoaders.bootLoader().loadModule(mref);
--- a/src/java.base/share/classes/jdk/internal/loader/BuiltinClassLoader.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/jdk/internal/loader/BuiltinClassLoader.java Mon Apr 09 08:34:30 2018 -0700
@@ -584,7 +584,7 @@
}
/**
- * A variation of {@code loadCass} to load a class with the specified
+ * A variation of {@code loadClass} to load a class with the specified
* binary name. This method returns {@code null} when the class is not
* found.
*/
@@ -633,16 +633,16 @@
}
/**
- * A variation of {@code loadCass} to load a class with the specified
+ * A variation of {@code loadClass} to load a class with the specified
* binary name. This method returns {@code null} when the class is not
* found.
*/
- protected Class<?> loadClassOrNull(String cn) {
+ protected Class<?> loadClassOrNull(String cn) {
return loadClassOrNull(cn, false);
}
/**
- * Find the candidate loaded module for the given class name.
+ * Finds the candidate loaded module for the given class name.
* Returns {@code null} if none of the modules defined to this
* class loader contain the API package for the class.
*/
@@ -656,7 +656,7 @@
}
/**
- * Find the candidate loaded module for the given class name
+ * Finds the candidate loaded module for the given class name
* in the named module. Returns {@code null} if the named module
* is not defined to this class loader or does not contain
* the API package for the class.
@@ -832,8 +832,8 @@
}
/**
- * Get the Package with the specified package name. If defined
- * then verify that it against the manifest and code source.
+ * Gets the Package with the specified package name. If defined
+ * then verifies it against the manifest and code source.
*
* @throws SecurityException if there is a sealing violation (JAR spec)
*/
@@ -859,7 +859,7 @@
/**
* Defines a new package in this ClassLoader. The attributes in the specified
- * Manifest are use to get the package version and sealing information.
+ * Manifest are used to get the package version and sealing information.
*
* @throws IllegalArgumentException if the package name duplicates an
* existing package either in this class loader or one of its ancestors
@@ -976,7 +976,7 @@
// -- miscellaneous supporting methods
/**
- * Returns the ModuleReader for the given module, creating it if needed
+ * Returns the ModuleReader for the given module, creating it if needed.
*/
private ModuleReader moduleReaderFor(ModuleReference mref) {
ModuleReader reader = moduleToReader.get(mref);
--- a/src/java.base/share/classes/jdk/internal/loader/Loader.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/jdk/internal/loader/Loader.java Mon Apr 09 08:34:30 2018 -0700
@@ -90,7 +90,7 @@
ClassLoader.registerAsParallelCapable();
}
- // the loader pool is in a pool, can be null
+ // the pool this loader is a member of; can be null
private final LoaderPool pool;
// parent ClassLoader, can be null
@@ -487,7 +487,7 @@
}
/**
- * Finds the class with the specified binary name in a given module.
+ * Finds the class with the specified binary name in the given module.
* This method returns {@code null} if the class cannot be found.
*/
@Override
--- a/src/java.base/share/classes/jdk/internal/module/ModuleHashesBuilder.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/jdk/internal/module/ModuleHashesBuilder.java Mon Apr 09 08:34:30 2018 -0700
@@ -35,7 +35,6 @@
import java.util.Deque;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.LinkedList;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
@@ -76,16 +75,15 @@
// build a graph containing the packaged modules and
// its transitive dependences matching --hash-modules
Graph.Builder<String> builder = new Graph.Builder<>();
- Deque<ResolvedModule> deque = new ArrayDeque<>(configuration.modules());
+ Deque<ResolvedModule> todo = new ArrayDeque<>(configuration.modules());
Set<ResolvedModule> visited = new HashSet<>();
- while (!deque.isEmpty()) {
- ResolvedModule rm = deque.pop();
- if (!visited.contains(rm)) {
- visited.add(rm);
+ ResolvedModule rm;
+ while ((rm = todo.poll()) != null) {
+ if (visited.add(rm)) {
builder.addNode(rm.name());
for (ResolvedModule dm : rm.reads()) {
if (!visited.contains(dm)) {
- deque.push(dm);
+ todo.push(dm);
}
builder.addEdge(rm.name(), dm.name());
}
@@ -173,7 +171,7 @@
}
/**
- * Traverse this graph and performs the given action in topological order
+ * Traverses this graph and performs the given action in topological order.
*/
public void ordered(Consumer<T> action) {
TopoSorter<T> sorter = new TopoSorter<>(this);
@@ -181,7 +179,7 @@
}
/**
- * Traverses this graph and performs the given action in reverse topological order
+ * Traverses this graph and performs the given action in reverse topological order.
*/
public void reverse(Consumer<T> action) {
TopoSorter<T> sorter = new TopoSorter<>(this);
@@ -189,15 +187,14 @@
}
/**
- * Returns a transposed graph from this graph
+ * Returns a transposed graph from this graph.
*/
public Graph<T> transpose() {
Builder<T> builder = new Builder<>();
- nodes.stream().forEach(builder::addNode);
+ nodes.forEach(builder::addNode);
// reverse edges
edges.keySet().forEach(u -> {
- edges.get(u).stream()
- .forEach(v -> builder.addEdge(v, u));
+ edges.get(u).forEach(v -> builder.addEdge(v, u));
});
return builder.build();
}
@@ -213,17 +210,14 @@
* Returns all nodes reachable from the given set of roots.
*/
public Set<T> dfs(Set<T> roots) {
- Deque<T> deque = new LinkedList<>(roots);
+ ArrayDeque<T> todo = new ArrayDeque<>(roots);
Set<T> visited = new HashSet<>();
- while (!deque.isEmpty()) {
- T u = deque.pop();
- if (!visited.contains(u)) {
- visited.add(u);
- if (contains(u)) {
- adjacentNodes(u).stream()
- .filter(v -> !visited.contains(v))
- .forEach(deque::push);
- }
+ T u;
+ while ((u = todo.poll()) != null) {
+ if (visited.add(u) && contains(u)) {
+ adjacentNodes(u).stream()
+ .filter(v -> !visited.contains(v))
+ .forEach(todo::push);
}
}
return visited;
@@ -231,8 +225,8 @@
public void printGraph(PrintStream out) {
out.println("graph for " + nodes);
- nodes.stream()
- .forEach(u -> adjacentNodes(u).stream()
+ nodes
+ .forEach(u -> adjacentNodes(u)
.forEach(v -> out.format(" %s -> %s%n", u, v)));
}
@@ -241,11 +235,9 @@
final Map<T, Set<T>> edges = new HashMap<>();
public void addNode(T node) {
- if (nodes.contains(node)) {
- return;
+ if (nodes.add(node)) {
+ edges.computeIfAbsent(node, _e -> new HashSet<>());
}
- nodes.add(node);
- edges.computeIfAbsent(node, _e -> new HashSet<>());
}
public void addEdge(T u, T v) {
@@ -264,18 +256,16 @@
* Topological sort
*/
private static class TopoSorter<T> {
- final Deque<T> result = new LinkedList<>();
- final Deque<T> nodes;
+ final Deque<T> result = new ArrayDeque<>();
final Graph<T> graph;
TopoSorter(Graph<T> graph) {
this.graph = graph;
- this.nodes = new LinkedList<>(graph.nodes);
sort();
}
public void ordered(Consumer<T> action) {
- result.iterator().forEachRemaining(action);
+ result.forEach(action);
}
public void reverse(Consumer<T> action) {
@@ -283,29 +273,26 @@
}
private void sort() {
- Deque<T> visited = new LinkedList<>();
- Deque<T> done = new LinkedList<>();
- T node;
- while ((node = nodes.poll()) != null) {
- if (!visited.contains(node)) {
- visit(node, visited, done);
- }
- }
+ Set<T> visited = new HashSet<>();
+ Deque<T> stack = new ArrayDeque<>();
+ graph.nodes.forEach(node -> visit(node, visited, stack));
+ }
+
+ private Set<T> children(T node) {
+ return graph.edges().get(node);
}
- private void visit(T node, Deque<T> visited, Deque<T> done) {
- if (visited.contains(node)) {
- if (!done.contains(node)) {
- throw new IllegalArgumentException("Cyclic detected: " +
- node + " " + graph.edges().get(node));
- }
- return;
+ private void visit(T node, Set<T> visited, Deque<T> stack) {
+ if (visited.add(node)) {
+ stack.push(node);
+ children(node).forEach(child -> visit(child, visited, stack));
+ stack.pop();
+ result.addLast(node);
}
- visited.add(node);
- graph.edges().get(node).stream()
- .forEach(x -> visit(x, visited, done));
- done.add(node);
- result.addLast(node);
+ else if (stack.contains(node)) {
+ throw new IllegalArgumentException(
+ "Cycle detected: " + node + " -> " + children(node));
+ }
}
}
}
--- a/src/java.base/share/classes/jdk/internal/vm/annotation/Stable.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/jdk/internal/vm/annotation/Stable.java Mon Apr 09 08:34:30 2018 -0700
@@ -81,7 +81,7 @@
*
* @implNote
* This annotation only takes effect for fields of classes loaded by the boot
- * loader. Annoations on fields of classes loaded outside of the boot loader
+ * loader. Annotations on fields of classes loaded outside of the boot loader
* are ignored.
*/
@Target(ElementType.FIELD)
--- a/src/java.base/share/classes/sun/nio/ch/NativeObject.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/sun/nio/ch/NativeObject.java Mon Apr 09 08:34:30 2018 -0700
@@ -388,7 +388,10 @@
return byteOrder;
}
- // Cache for page size
+ /**
+ * Cache for page size.
+ * Lazily initialized via a data race; safe because ints are atomic.
+ */
private static int pageSize = -1;
/**
@@ -397,9 +400,10 @@
* @return The page size, in bytes
*/
static int pageSize() {
- if (pageSize == -1)
- pageSize = unsafe.pageSize();
- return pageSize;
+ int value = pageSize;
+ if (value == -1)
+ pageSize = value = unsafe.pageSize();
+ return value;
}
}
--- a/src/java.base/share/classes/sun/nio/ch/SelChImpl.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/sun/nio/ch/SelChImpl.java Mon Apr 09 08:34:30 2018 -0700
@@ -49,7 +49,7 @@
* contains at least one bit that the previous value did not
* contain
*/
- boolean translateAndUpdateReadyOps(int ops, SelectionKeyImpl sk);
+ boolean translateAndUpdateReadyOps(int ops, SelectionKeyImpl ski);
/**
* Sets the specified ops if present in interestOps. The specified
@@ -59,7 +59,7 @@
* contains at least one bit that the previous value did not
* contain
*/
- boolean translateAndSetReadyOps(int ops, SelectionKeyImpl sk);
+ boolean translateAndSetReadyOps(int ops, SelectionKeyImpl ski);
/**
* Translates an interest operation set into a native event set
--- a/src/java.base/share/classes/sun/nio/ch/SelectionKeyImpl.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/sun/nio/ch/SelectionKeyImpl.java Mon Apr 09 08:34:30 2018 -0700
@@ -39,7 +39,7 @@
public final class SelectionKeyImpl
extends AbstractSelectionKey
{
- final SelChImpl channel; // package-private
+ private final SelChImpl channel;
private final SelectorImpl selector;
private volatile int interestOps;
@@ -61,6 +61,10 @@
throw new CancelledKeyException();
}
+ int getFDVal() {
+ return channel.getFDVal();
+ }
+
@Override
public SelectableChannel channel() {
return (SelectableChannel)channel;
@@ -103,8 +107,8 @@
public SelectionKey nioInterestOps(int ops) {
if ((ops & ~channel().validOps()) != 0)
throw new IllegalArgumentException();
- selector.putEventOps(this, channel.translateInterestOps(ops));
interestOps = ops;
+ selector.setEventOps(this);
return this;
}
@@ -112,6 +116,18 @@
return interestOps;
}
+ int translateInterestOps() {
+ return channel.translateInterestOps(interestOps);
+ }
+
+ boolean translateAndSetReadyOps(int ops) {
+ return channel.translateAndSetReadyOps(ops, this);
+ }
+
+ boolean translateAndUpdateReadyOps(int ops) {
+ return channel.translateAndUpdateReadyOps(ops, this);
+ }
+
void registeredEvents(int events) {
// assert Thread.holdsLock(selector);
this.registeredEvents = events;
--- a/src/java.base/share/classes/sun/nio/ch/SelectorImpl.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/sun/nio/ch/SelectorImpl.java Mon Apr 09 08:34:30 2018 -0700
@@ -64,17 +64,20 @@
publicSelectedKeys = Util.ungrowableSet(selectedKeys);
}
+ private void ensureOpen() {
+ if (!isOpen())
+ throw new ClosedSelectorException();
+ }
+
@Override
public final Set<SelectionKey> keys() {
- if (!isOpen())
- throw new ClosedSelectorException();
+ ensureOpen();
return publicKeys;
}
@Override
public final Set<SelectionKey> selectedKeys() {
- if (!isOpen())
- throw new ClosedSelectorException();
+ ensureOpen();
return publicSelectedKeys;
}
@@ -112,8 +115,7 @@
private int lockAndDoSelect(long timeout) throws IOException {
synchronized (this) {
- if (!isOpen())
- throw new ClosedSelectorException();
+ ensureOpen();
synchronized (publicKeys) {
synchronized (publicSelectedKeys) {
return doSelect(timeout);
@@ -176,7 +178,8 @@
throw new IllegalSelectorException();
SelectionKeyImpl k = new SelectionKeyImpl((SelChImpl)ch, this);
k.attach(attachment);
- // register before adding to key set
+
+ // register with selector (if needed) before adding to key set
implRegister(k);
synchronized (publicKeys) {
keys.add(k);
@@ -185,7 +188,15 @@
return k;
}
- protected abstract void implRegister(SelectionKeyImpl ski);
+ /**
+ * Register the key in the selector.
+ *
+ * The default implementation checks if the selector is open. It should
+ * be overridden by selector implementations as needed.
+ */
+ protected void implRegister(SelectionKeyImpl ski) {
+ ensureOpen();
+ }
protected abstract void implDereg(SelectionKeyImpl ski) throws IOException;
@@ -222,5 +233,5 @@
/**
* Change the event set in the selector
*/
- protected abstract void putEventOps(SelectionKeyImpl ski, int events);
+ protected abstract void setEventOps(SelectionKeyImpl ski);
}
--- a/src/java.base/share/classes/sun/nio/cs/FastCharsetProvider.java Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,161 +0,0 @@
-/*
- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.nio.cs;
-
-import java.nio.charset.Charset;
-import java.nio.charset.spi.CharsetProvider;
-import java.util.Iterator;
-import java.util.Map;
-
-
-/**
- * Abstract base class for fast charset providers.
- *
- * @author Mark Reinhold
- */
-
-public class FastCharsetProvider
- extends CharsetProvider
-{
-
- // Maps canonical names to class names
- private Map<String,String> classMap;
-
- // Maps alias names to canonical names
- private Map<String,String> aliasMap;
-
- // Maps canonical names to cached instances
- private Map<String,Charset> cache;
-
- private String packagePrefix;
-
- protected FastCharsetProvider(String pp,
- Map<String,String> am,
- Map<String,String> cm,
- Map<String,Charset> c)
- {
- packagePrefix = pp;
- aliasMap = am;
- classMap = cm;
- cache = c;
- }
-
- private String canonicalize(String csn) {
- String acn = aliasMap.get(csn);
- return (acn != null) ? acn : csn;
- }
-
- // Private ASCII-only version, optimized for interpretation during startup
- //
- private static String toLower(String s) {
- int n = s.length();
- boolean allLower = true;
- for (int i = 0; i < n; i++) {
- int c = s.charAt(i);
- if (((c - 'A') | ('Z' - c)) >= 0) {
- allLower = false;
- break;
- }
- }
- if (allLower)
- return s;
- char[] ca = new char[n];
- for (int i = 0; i < n; i++) {
- int c = s.charAt(i);
- if (((c - 'A') | ('Z' - c)) >= 0)
- ca[i] = (char)(c + 0x20);
- else
- ca[i] = (char)c;
- }
- return new String(ca);
- }
-
- private Charset lookup(String charsetName) {
-
- String csn = canonicalize(toLower(charsetName));
-
- // Check cache first
- Charset cs = cache.get(csn);
- if (cs != null)
- return cs;
-
- // Do we even support this charset?
- String cln = classMap.get(csn);
- if (cln == null)
- return null;
-
- if (cln.equals("US_ASCII")) {
- cs = new US_ASCII();
- cache.put(csn, cs);
- return cs;
- }
-
- // Instantiate the charset and cache it
- try {
- @SuppressWarnings("deprecation")
- Object o= Class.forName(packagePrefix + "." + cln,
- true,
- this.getClass().getClassLoader()).newInstance();
- cs = (Charset)o;
- cache.put(csn, cs);
- return cs;
- } catch (ClassNotFoundException |
- IllegalAccessException |
- InstantiationException x) {
- return null;
- }
- }
-
- public final Charset charsetForName(String charsetName) {
- synchronized (this) {
- return lookup(canonicalize(charsetName));
- }
- }
-
- public final Iterator<Charset> charsets() {
-
- return new Iterator<Charset>() {
-
- Iterator<String> i = classMap.keySet().iterator();
-
- public boolean hasNext() {
- return i.hasNext();
- }
-
- public Charset next() {
- String csn = i.next();
- return lookup(csn);
- }
-
- public void remove() {
- throw new UnsupportedOperationException();
- }
-
- };
-
- }
-
-}
--- a/src/java.base/share/classes/sun/util/resources/TimeZoneNames.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/classes/sun/util/resources/TimeZoneNames.java Mon Apr 09 08:34:30 2018 -0700
@@ -445,7 +445,7 @@
"Western Greenland Summer Time", "WGST",
"Western Greenland Time", "WGT"}},
{"America/Goose_Bay", AST},
- {"America/Grand_Turk", AST},
+ {"America/Grand_Turk", EST},
{"America/Grenada", AST},
{"America/Guadeloupe", AST},
{"America/Guatemala", CST},
--- a/src/java.base/share/native/launcher/main.c Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/share/native/launcher/main.c Mon Apr 09 08:34:30 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 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
@@ -32,6 +32,7 @@
#include "defines.h"
#include "jli_util.h"
+#include "jni.h"
#ifdef _MSC_VER
#if _MSC_VER > 1400 && _MSC_VER < 1600
@@ -92,7 +93,7 @@
__initenv = _environ;
#else /* JAVAW */
-int
+JNIEXPORT int JNICALL
main(int argc, char **argv)
{
int margc;
--- a/src/java.base/solaris/classes/sun/nio/ch/DevPollSelectorImpl.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/solaris/classes/sun/nio/ch/DevPollSelectorImpl.java Mon Apr 09 08:34:30 2018 -0700
@@ -55,17 +55,14 @@
// maps file descriptor to selection key, synchronize on selector
private final Map<Integer, SelectionKeyImpl> fdToKey = new HashMap<>();
- // pending new registrations/updates, queued by implRegister and putEventOps
+ // pending new registrations/updates, queued by setEventOps
private final Object updateLock = new Object();
- private final Deque<SelectionKeyImpl> newKeys = new ArrayDeque<>();
private final Deque<SelectionKeyImpl> updateKeys = new ArrayDeque<>();
- private final Deque<Integer> updateEvents = new ArrayDeque<>();
// interrupt triggering and clearing
private final Object interruptLock = new Object();
private boolean interruptTriggered;
-
DevPollSelectorImpl(SelectorProvider sp) throws IOException {
super(sp);
this.pollWrapper = new DevPollArrayWrapper();
@@ -88,18 +85,34 @@
}
@Override
- protected int doSelect(long timeout)
- throws IOException
- {
+ protected int doSelect(long timeout) throws IOException {
assert Thread.holdsLock(this);
- boolean blocking = (timeout != 0);
+
+ long to = timeout;
+ boolean blocking = (to != 0);
+ boolean timedPoll = (to > 0);
int numEntries;
processUpdateQueue();
processDeregisterQueue();
try {
begin(blocking);
- numEntries = pollWrapper.poll(timeout);
+
+ do {
+ long startTime = timedPoll ? System.nanoTime() : 0;
+ numEntries = pollWrapper.poll(to);
+ if (numEntries == IOStatus.INTERRUPTED && timedPoll) {
+ // timed poll interrupted so need to adjust timeout
+ long adjust = System.nanoTime() - startTime;
+ to -= TimeUnit.MILLISECONDS.convert(adjust, TimeUnit.NANOSECONDS);
+ if (to <= 0) {
+ // timeout expired so no retry
+ numEntries = 0;
+ }
+ }
+ } while (numEntries == IOStatus.INTERRUPTED);
+ assert IOStatus.check(numEntries);
+
} finally {
end(blocking);
}
@@ -108,7 +121,7 @@
}
/**
- * Process new registrations and changes to the interest ops.
+ * Process changes to the interest ops.
*/
private void processUpdateQueue() throws IOException {
assert Thread.holdsLock(this);
@@ -116,25 +129,18 @@
synchronized (updateLock) {
SelectionKeyImpl ski;
- // new registrations
- while ((ski = newKeys.pollFirst()) != null) {
- if (ski.isValid()) {
- int fd = ski.channel.getFDVal();
- SelectionKeyImpl previous = fdToKey.put(fd, ski);
- assert previous == null;
- assert ski.registeredEvents() == 0;
- }
- }
-
// Translate the queued updates to changes to the set of monitored
// file descriptors. The changes are written to the /dev/poll driver
// in bulk.
- assert updateKeys.size() == updateEvents.size();
int index = 0;
while ((ski = updateKeys.pollFirst()) != null) {
- int newEvents = updateEvents.pollFirst();
- int fd = ski.channel.getFDVal();
- if (ski.isValid() && fdToKey.containsKey(fd)) {
+ if (ski.isValid()) {
+ int fd = ski.getFDVal();
+ // add to fdToKey if needed
+ SelectionKeyImpl previous = fdToKey.putIfAbsent(fd, ski);
+ assert (previous == null) || (previous == ski);
+
+ int newEvents = ski.translateInterestOps();
int registeredEvents = ski.registeredEvents();
if (newEvents != registeredEvents) {
if (registeredEvents != 0)
@@ -178,11 +184,11 @@
if (ski != null) {
int rOps = pollWrapper.getReventOps(i);
if (selectedKeys.contains(ski)) {
- if (ski.channel.translateAndSetReadyOps(rOps, ski)) {
+ if (ski.translateAndUpdateReadyOps(rOps)) {
numKeysUpdated++;
}
} else {
- ski.channel.translateAndSetReadyOps(rOps, ski);
+ ski.translateAndSetReadyOps(rOps);
if ((ski.nioReadyOps() & ski.nioInterestOps()) != 0) {
selectedKeys.add(ski);
numKeysUpdated++;
@@ -214,20 +220,13 @@
FileDispatcherImpl.closeIntFD(fd1);
}
- @Override
- protected void implRegister(SelectionKeyImpl ski) {
- ensureOpen();
- synchronized (updateLock) {
- newKeys.addLast(ski);
- }
- }
@Override
protected void implDereg(SelectionKeyImpl ski) throws IOException {
assert !ski.isValid();
assert Thread.holdsLock(this);
- int fd = ski.channel.getFDVal();
+ int fd = ski.getFDVal();
if (fdToKey.remove(fd) != null) {
if (ski.registeredEvents() != 0) {
pollWrapper.register(fd, POLLREMOVE);
@@ -239,10 +238,9 @@
}
@Override
- public void putEventOps(SelectionKeyImpl ski, int events) {
+ public void setEventOps(SelectionKeyImpl ski) {
ensureOpen();
synchronized (updateLock) {
- updateEvents.addLast(events); // events first in case adding key fails
updateKeys.addLast(ski);
}
}
--- a/src/java.base/solaris/classes/sun/nio/ch/EventPortSelectorImpl.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/solaris/classes/sun/nio/ch/EventPortSelectorImpl.java Mon Apr 09 08:34:30 2018 -0700
@@ -72,12 +72,10 @@
// the last update operation, incremented by processUpdateQueue
private int lastUpdate;
- // pending new registrations/updates, queued by implRegister, putEventOps,
- // and updateSelectedKeys
+ // pending new registrations/updates, queued by setEventOps and
+ // updateSelectedKeys
private final Object updateLock = new Object();
- private final Deque<SelectionKeyImpl> newKeys = new ArrayDeque<>();
private final Deque<SelectionKeyImpl> updateKeys = new ArrayDeque<>();
- private final Deque<Integer> updateEvents = new ArrayDeque<>();
// interrupt triggering and clearing
private final Object interruptLock = new Object();
@@ -146,23 +144,14 @@
synchronized (updateLock) {
SelectionKeyImpl ski;
-
- // new registrations
- while ((ski = newKeys.pollFirst()) != null) {
+ while ((ski = updateKeys.pollFirst()) != null) {
if (ski.isValid()) {
- int fd = ski.channel.getFDVal();
- SelectionKeyImpl previous = fdToKey.put(fd, ski);
- assert previous == null;
- assert ski.registeredEvents() == 0;
- }
- }
+ int fd = ski.getFDVal();
+ // add to fdToKey if needed
+ SelectionKeyImpl previous = fdToKey.putIfAbsent(fd, ski);
+ assert (previous == null) || (previous == ski);
- // changes to interest ops
- assert updateKeys.size() == updateEvents.size();
- while ((ski = updateKeys.pollFirst()) != null) {
- int newEvents = updateEvents.pollFirst();
- int fd = ski.channel.getFDVal();
- if (ski.isValid() && fdToKey.containsKey(fd)) {
+ int newEvents = ski.translateInterestOps();
if (newEvents != ski.registeredEvents()) {
if (newEvents == 0) {
port_dissociate(pfd, PORT_SOURCE_FD, fd);
@@ -199,22 +188,20 @@
if (ski != null) {
int rOps = getEventOps(i);
if (selectedKeys.contains(ski)) {
- if (ski.channel.translateAndSetReadyOps(rOps, ski)) {
+ if (ski.translateAndUpdateReadyOps(rOps)) {
numKeysUpdated++;
}
} else {
- ski.channel.translateAndSetReadyOps(rOps, ski);
+ ski.translateAndSetReadyOps(rOps);
if ((ski.nioReadyOps() & ski.nioInterestOps()) != 0) {
selectedKeys.add(ski);
numKeysUpdated++;
}
}
- // re-queue key to head so that it is re-associated at
- // next select (and before other changes)
- updateEvents.addFirst(ski.registeredEvents());
- updateKeys.addFirst(ski);
+ // re-queue key so it re-associated at next select
ski.registeredEvents(0);
+ updateKeys.addLast(ski);
}
} else if (source == PORT_SOURCE_USER) {
interrupted = true;
@@ -245,19 +232,11 @@
}
@Override
- protected void implRegister(SelectionKeyImpl ski) {
- ensureOpen();
- synchronized (updateLock) {
- newKeys.addLast(ski);
- }
- }
-
- @Override
protected void implDereg(SelectionKeyImpl ski) throws IOException {
assert !ski.isValid();
assert Thread.holdsLock(this);
- int fd = ski.channel.getFDVal();
+ int fd = ski.getFDVal();
if (fdToKey.remove(fd) != null) {
if (ski.registeredEvents() != 0) {
port_dissociate(pfd, PORT_SOURCE_FD, fd);
@@ -269,10 +248,9 @@
}
@Override
- public void putEventOps(SelectionKeyImpl ski, int events) {
+ public void setEventOps(SelectionKeyImpl ski) {
ensureOpen();
synchronized (updateLock) {
- updateEvents.addLast(events); // events first in case adding key fails
updateKeys.addLast(ski);
}
}
--- a/src/java.base/solaris/native/libnio/ch/DevPollArrayWrapper.c Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/solaris/native/libnio/ch/DevPollArrayWrapper.c Mon Apr 09 08:34:30 2018 -0700
@@ -23,84 +23,20 @@
* questions.
*/
+#include <sys/devpoll.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <poll.h>
+
#include "jni.h"
#include "jni_util.h"
#include "jvm.h"
#include "jlong.h"
-#include "sun_nio_ch_DevPollArrayWrapper.h"
-#include <poll.h>
-#include <unistd.h>
-#include <sys/time.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef uint32_t caddr32_t;
-
-/* /dev/poll ioctl */
-#define DPIOC (0xD0 << 8)
-#define DP_POLL (DPIOC | 1) /* poll on fds in cached in /dev/poll */
-#define DP_ISPOLLED (DPIOC | 2) /* is this fd cached in /dev/poll */
-#define DEVPOLLSIZE 1000 /* /dev/poll table size increment */
-#define POLLREMOVE 0x0800 /* Removes fd from monitored set */
-
-/*
- * /dev/poll DP_POLL ioctl format
- */
-typedef struct dvpoll {
- pollfd_t *dp_fds; /* pollfd array */
- nfds_t dp_nfds; /* num of pollfd's in dp_fds[] */
- int dp_timeout; /* time out in millisec */
-} dvpoll_t;
-
-typedef struct dvpoll32 {
- caddr32_t dp_fds; /* pollfd array */
- uint32_t dp_nfds; /* num of pollfd's in dp_fds[] */
- int32_t dp_timeout; /* time out in millisec */
-} dvpoll32_t;
-
-#ifdef __cplusplus
-}
-#endif
+#include "nio.h"
+#include "nio_util.h"
-#define RESTARTABLE(_cmd, _result) do { \
- do { \
- _result = _cmd; \
- } while((_result == -1) && (errno == EINTR)); \
-} while(0)
-
-static int
-idevpoll(jint wfd, int dpctl, struct dvpoll a)
-{
- jlong start, now;
- int remaining = a.dp_timeout;
- struct timeval t;
- int diff;
-
- gettimeofday(&t, NULL);
- start = t.tv_sec * 1000 + t.tv_usec / 1000;
-
- for (;;) {
- /* poll(7d) ioctl does not return remaining count */
- int res = ioctl(wfd, dpctl, &a);
- if (res < 0 && errno == EINTR) {
- if (remaining >= 0) {
- gettimeofday(&t, NULL);
- now = t.tv_sec * 1000 + t.tv_usec / 1000;
- diff = now - start;
- remaining -= diff;
- if (diff < 0 || remaining <= 0) {
- return 0;
- }
- start = now;
- a.dp_timeout = remaining;
- }
- } else {
- return res;
- }
- }
-}
+#include "sun_nio_ch_DevPollArrayWrapper.h"
JNIEXPORT jint JNICALL
Java_sun_nio_ch_DevPollArrayWrapper_init(JNIEnv *env, jobject this)
@@ -153,26 +89,24 @@
JNIEXPORT jint JNICALL
Java_sun_nio_ch_DevPollArrayWrapper_poll0(JNIEnv *env, jobject this,
- jlong address, jint numfds,
- jlong timeout, jint wfd)
+ jlong address, jint numfds,
+ jlong timeout, jint wfd)
{
struct dvpoll a;
void *pfd = (void *) jlong_to_ptr(address);
- int result = 0;
+ int result;
a.dp_fds = pfd;
a.dp_nfds = numfds;
a.dp_timeout = (int)timeout;
-
- if (timeout <= 0) { /* Indefinite or no wait */
- RESTARTABLE (ioctl(wfd, DP_POLL, &a), result);
- } else { /* Bounded wait; bounded restarts */
- result = idevpoll(wfd, DP_POLL, a);
- }
-
+ result = ioctl(wfd, DP_POLL, &a);
if (result < 0) {
- JNU_ThrowIOExceptionWithLastError(env, "Error reading driver");
- return -1;
+ if (errno == EINTR) {
+ return IOS_INTERRUPTED;
+ } else {
+ JNU_ThrowIOExceptionWithLastError(env, "Error reading driver");
+ return IOS_THROWN;
+ }
}
return result;
}
--- a/src/java.base/unix/classes/sun/nio/ch/PollSelectorImpl.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/unix/classes/sun/nio/ch/PollSelectorImpl.java Mon Apr 09 08:34:30 2018 -0700
@@ -60,7 +60,6 @@
// pending updates, queued by putEventOps
private final Object updateLock = new Object();
private final Deque<SelectionKeyImpl> updateKeys = new ArrayDeque<>();
- private final Deque<Integer> updateEvents = new ArrayDeque<>();
// interrupt triggering and clearing
private final Object interruptLock = new Object();
@@ -136,10 +135,9 @@
assert Thread.holdsLock(this);
synchronized (updateLock) {
- assert updateKeys.size() == updateEvents.size();
SelectionKeyImpl ski;
while ((ski = updateKeys.pollFirst()) != null) {
- int newEvents = updateEvents.pollFirst();
+ int newEvents = ski.translateInterestOps();
if (ski.isValid()) {
int index = ski.getIndex();
assert index >= 0 && index < pollArraySize;
@@ -173,14 +171,14 @@
int rOps = getReventOps(i);
if (rOps != 0) {
SelectionKeyImpl ski = pollKeys.get(i);
- assert ski.channel.getFDVal() == getDescriptor(i);
+ assert ski.getFDVal() == getDescriptor(i);
if (ski.isValid()) {
if (selectedKeys.contains(ski)) {
- if (ski.channel.translateAndSetReadyOps(rOps, ski)) {
+ if (ski.translateAndUpdateReadyOps(rOps)) {
numKeysUpdated++;
}
} else {
- ski.channel.translateAndSetReadyOps(rOps, ski);
+ ski.translateAndSetReadyOps(rOps);
if ((ski.nioReadyOps() & ski.nioInterestOps()) != 0) {
selectedKeys.add(ski);
numKeysUpdated++;
@@ -233,10 +231,9 @@
}
@Override
- public void putEventOps(SelectionKeyImpl ski, int events) {
+ public void setEventOps(SelectionKeyImpl ski) {
ensureOpen();
synchronized (updateLock) {
- updateEvents.addLast(events); // events first in case adding key fails
updateKeys.addLast(ski);
}
}
@@ -285,7 +282,7 @@
int index = pollArraySize;
assert index > 0;
- putDescriptor(index, ski.channel.getFDVal());
+ putDescriptor(index, ski.getFDVal());
putEventOps(index, ops);
putReventOps(index, 0);
ski.setIndex(index);
@@ -301,7 +298,7 @@
private void update(SelectionKeyImpl ski, int ops) {
int index = ski.getIndex();
assert index > 0 && index < pollArraySize;
- assert getDescriptor(index) == ski.channel.getFDVal();
+ assert getDescriptor(index) == ski.getFDVal();
putEventOps(index, ops);
}
@@ -311,7 +308,7 @@
private void remove(SelectionKeyImpl ski) {
int index = ski.getIndex();
assert index > 0 && index < pollArraySize;
- assert getDescriptor(index) == ski.channel.getFDVal();
+ assert getDescriptor(index) == ski.getFDVal();
// replace pollfd at index with the last pollfd in array
int lastIndex = pollArraySize - 1;
@@ -321,7 +318,7 @@
int lastFd = getDescriptor(lastIndex);
int lastOps = getEventOps(lastIndex);
int lastRevents = getReventOps(lastIndex);
- assert lastKey.channel.getFDVal() == lastFd;
+ assert lastKey.getFDVal() == lastFd;
putDescriptor(index, lastFd);
putEventOps(index, lastOps);
putReventOps(index, lastRevents);
--- a/src/java.base/windows/classes/sun/nio/ch/PollArrayWrapper.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/windows/classes/sun/nio/ch/PollArrayWrapper.java Mon Apr 09 08:34:30 2018 -0700
@@ -64,7 +64,7 @@
// Prepare another pollfd struct for use.
void putEntry(int index, SelectionKeyImpl ski) {
- putDescriptor(index, ski.channel.getFDVal());
+ putDescriptor(index, ski.getFDVal());
putEventOps(index, 0);
}
--- a/src/java.base/windows/classes/sun/nio/ch/WindowsSelectorImpl.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.base/windows/classes/sun/nio/ch/WindowsSelectorImpl.java Mon Apr 09 08:34:30 2018 -0700
@@ -83,12 +83,12 @@
return get(Integer.valueOf(desc));
}
private MapEntry put(SelectionKeyImpl ski) {
- return put(Integer.valueOf(ski.channel.getFDVal()), new MapEntry(ski));
+ return put(Integer.valueOf(ski.getFDVal()), new MapEntry(ski));
}
private MapEntry remove(SelectionKeyImpl ski) {
- Integer fd = Integer.valueOf(ski.channel.getFDVal());
+ Integer fd = Integer.valueOf(ski.getFDVal());
MapEntry x = get(fd);
- if ((x != null) && (x.ski.channel == ski.channel))
+ if ((x != null) && (x.ski.channel() == ski.channel()))
return remove(fd);
return null;
}
@@ -98,7 +98,6 @@
private static final class MapEntry {
final SelectionKeyImpl ski;
long updateCount = 0;
- long clearedCount = 0;
MapEntry(SelectionKeyImpl ski) {
this.ski = ski;
}
@@ -114,11 +113,10 @@
private final Object interruptLock = new Object();
private volatile boolean interruptTriggered;
- // pending new registrations/updates, queued by implRegister and putEventOps
+ // pending new registrations/updates, queued by implRegister and setEventOps
private final Object updateLock = new Object();
private final Deque<SelectionKeyImpl> newKeys = new ArrayDeque<>();
private final Deque<SelectionKeyImpl> updateKeys = new ArrayDeque<>();
- private final Deque<Integer> updateEvents = new ArrayDeque<>();
WindowsSelectorImpl(SelectorProvider sp) throws IOException {
@@ -204,10 +202,9 @@
}
// changes to interest ops
- assert updateKeys.size() == updateEvents.size();
while ((ski = updateKeys.pollFirst()) != null) {
- int events = updateEvents.pollFirst();
- int fd = ski.channel.getFDVal();
+ int events = ski.translateInterestOps();
+ int fd = ski.getFDVal();
if (ski.isValid() && fdMap.containsKey(fd)) {
int index = ski.getIndex();
assert index >= 0 && index < totalChannels;
@@ -370,12 +367,10 @@
}
/**
- * Note, clearedCount is used to determine if the readyOps have
- * been reset in this select operation. updateCount is used to
- * tell if a key has been counted as updated in this select
- * operation.
+ * updateCount is used to tell if a key has been counted as updated
+ * in this select operation.
*
- * me.updateCount <= me.clearedCount <= updateCount
+ * me.updateCount <= updateCount
*/
private int processFDSet(long updateCount, int[] fds, int rOps,
boolean isExceptFds)
@@ -407,37 +402,19 @@
}
if (selectedKeys.contains(sk)) { // Key in selected set
- if (me.clearedCount != updateCount) {
- if (sk.channel.translateAndSetReadyOps(rOps, sk) &&
- (me.updateCount != updateCount)) {
- me.updateCount = updateCount;
- numKeysUpdated++;
- }
- } else { // The readyOps have been set; now add
- if (sk.channel.translateAndUpdateReadyOps(rOps, sk) &&
- (me.updateCount != updateCount)) {
+ if (sk.translateAndUpdateReadyOps(rOps)) {
+ if (me.updateCount != updateCount) {
me.updateCount = updateCount;
numKeysUpdated++;
}
}
- me.clearedCount = updateCount;
} else { // Key is not in selected set yet
- if (me.clearedCount != updateCount) {
- sk.channel.translateAndSetReadyOps(rOps, sk);
- if ((sk.nioReadyOps() & sk.nioInterestOps()) != 0) {
- selectedKeys.add(sk);
- me.updateCount = updateCount;
- numKeysUpdated++;
- }
- } else { // The readyOps have been set; now add
- sk.channel.translateAndUpdateReadyOps(rOps, sk);
- if ((sk.nioReadyOps() & sk.nioInterestOps()) != 0) {
- selectedKeys.add(sk);
- me.updateCount = updateCount;
- numKeysUpdated++;
- }
+ sk.translateAndSetReadyOps(rOps);
+ if ((sk.nioReadyOps() & sk.nioInterestOps()) != 0) {
+ selectedKeys.add(sk);
+ me.updateCount = updateCount;
+ numKeysUpdated++;
}
- me.clearedCount = updateCount;
}
}
return numKeysUpdated;
@@ -613,10 +590,9 @@
}
@Override
- public void putEventOps(SelectionKeyImpl ski, int events) {
+ public void setEventOps(SelectionKeyImpl ski) {
ensureOpen();
synchronized (updateLock) {
- updateEvents.addLast(events); // events first in case adding key fails
updateKeys.addLast(ski);
}
}
--- a/src/java.desktop/share/classes/sun/applet/AppletSecurity.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.desktop/share/classes/sun/applet/AppletSecurity.java Mon Apr 09 08:34:30 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 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
@@ -371,30 +371,6 @@
}
/**
- * Tests if a client can get access to the AWT event queue.
- * <p>
- * This method calls {@code checkPermission} with the
- * {@code AWTPermission("accessEventQueue")} permission.
- *
- * @since 1.1
- * @exception SecurityException if the caller does not have
- * permission to access the AWT event queue.
- */
- @SuppressWarnings({"deprecation",
- "removal"}) // SecurityManager.checkAwtEventQueueAccess
- public void checkAwtEventQueueAccess() {
- AppContext appContext = AppContext.getAppContext();
- AppletClassLoader appletClassLoader = currentAppletClassLoader();
-
- if (AppContext.isMainContext(appContext) && (appletClassLoader != null)) {
- // If we're about to allow access to the main EventQueue,
- // and anything untrusted is on the class context stack,
- // disallow access.
- super.checkPermission(AWTPermissions.CHECK_AWT_EVENTQUEUE_PERMISSION);
- }
- } // checkAwtEventQueueAccess()
-
- /**
* Returns the thread group of the applet. We consult the classloader
* if there is one.
*/
--- a/src/java.desktop/share/classes/sun/applet/resources/MsgAppletViewer.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/java.desktop/share/classes/sun/applet/resources/MsgAppletViewer.java Mon Apr 09 08:34:30 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 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
@@ -188,10 +188,7 @@
{"appletsecurityexception.checkpackageaccess", "Security Exception: cannot access package: {0}"},
{"appletsecurityexception.checkpackagedefinition", "Security Exception: cannot define package: {0}"},
{"appletsecurityexception.cannotsetfactory", "Security Exception: cannot set factory"},
- {"appletsecurityexception.checkmemberaccess", "Security Exception: check member access"},
{"appletsecurityexception.checkgetprintjob", "Security Exception: getPrintJob"},
- {"appletsecurityexception.checksystemclipboardaccess", "Security Exception: getSystemClipboard"},
- {"appletsecurityexception.checkawteventqueueaccess", "Security Exception: getEventQueue"},
{"appletsecurityexception.checksecurityaccess", "Security Exception: security operation: {0}"},
{"appletsecurityexception.getsecuritycontext.unknown", "unknown class loader type. unable to check for getContext"},
{"appletsecurityexception.checkread.unknown", "unknown class loader type. unable to check for checking read {0}"},
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java Mon Apr 09 08:34:30 2018 -0700
@@ -183,15 +183,7 @@
public int hashCode() {
int hashCode = this.hashCode;
if (hashCode == 0) {
- this.hashCode = hashCode = TreeHasher.hash(tree, sym -> {
- if (sym.owner == symbol) {
- int idx = symbol.params().indexOf(sym);
- if (idx != -1) {
- return idx;
- }
- }
- return null;
- });
+ this.hashCode = hashCode = TreeHasher.hash(tree, symbol.params());
}
return hashCode;
}
@@ -203,17 +195,7 @@
}
DedupedLambda that = (DedupedLambda) o;
return types.isSameType(symbol.asType(), that.symbol.asType())
- && new TreeDiffer((lhs, rhs) -> {
- if (lhs.owner == symbol) {
- int idx = symbol.params().indexOf(lhs);
- if (idx != -1) {
- if (Objects.equals(idx, that.symbol.params().indexOf(rhs))) {
- return true;
- }
- }
- }
- return null;
- }).scan(tree, that.tree);
+ && new TreeDiffer(symbol.params(), that.symbol.params()).scan(tree, that.tree);
}
}
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TreeDiffer.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TreeDiffer.java Mon Apr 09 08:34:30 2018 -0700
@@ -89,24 +89,34 @@
import com.sun.tools.javac.tree.TreeInfo;
import com.sun.tools.javac.tree.TreeScanner;
import com.sun.tools.javac.util.List;
-
-import javax.lang.model.element.ElementKind;
+import java.util.Collection;
+import java.util.HashMap;
import java.util.Iterator;
+import java.util.Map;
import java.util.Objects;
-import java.util.function.BiFunction;
-import java.util.function.Consumer;
/** A visitor that compares two lambda bodies for structural equality. */
public class TreeDiffer extends TreeScanner {
- private BiFunction<Symbol, Symbol, Boolean> symbolDiffer;
+ public TreeDiffer(
+ Collection<? extends Symbol> symbols, Collection<? extends Symbol> otherSymbols) {
+ this.equiv = equiv(symbols, otherSymbols);
+ }
- public TreeDiffer(BiFunction<Symbol, Symbol, Boolean> symbolDiffer) {
- this.symbolDiffer = Objects.requireNonNull(symbolDiffer);
+ private static Map<Symbol, Symbol> equiv(
+ Collection<? extends Symbol> symbols, Collection<? extends Symbol> otherSymbols) {
+ Map<Symbol, Symbol> result = new HashMap<>();
+ Iterator<? extends Symbol> it = otherSymbols.iterator();
+ for (Symbol symbol : symbols) {
+ if (!it.hasNext()) break;
+ result.put(symbol, it.next());
+ }
+ return result;
}
private JCTree parameter;
private boolean result;
+ private Map<Symbol, Symbol> equiv = new HashMap<>();
public boolean scan(JCTree tree, JCTree parameter) {
if (tree == null || parameter == null) {
@@ -172,9 +182,8 @@
Symbol symbol = tree.sym;
Symbol otherSymbol = that.sym;
if (symbol != null && otherSymbol != null) {
- Boolean tmp = symbolDiffer.apply(symbol, otherSymbol);
- if (tmp != null) {
- result = tmp;
+ if (Objects.equals(equiv.get(symbol), otherSymbol)) {
+ result = true;
return;
}
}
@@ -598,6 +607,10 @@
&& scan(tree.nameexpr, that.nameexpr)
&& scan(tree.vartype, that.vartype)
&& scan(tree.init, that.init);
+ if (!result) {
+ return;
+ }
+ equiv.put(tree.sym, that.sym);
}
@Override
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TreeHasher.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TreeHasher.java Mon Apr 09 08:34:30 2018 -0700
@@ -30,26 +30,31 @@
import com.sun.tools.javac.tree.JCTree.JCFieldAccess;
import com.sun.tools.javac.tree.JCTree.JCIdent;
import com.sun.tools.javac.tree.JCTree.JCLiteral;
+import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
import com.sun.tools.javac.tree.TreeInfo;
import com.sun.tools.javac.tree.TreeScanner;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Objects;
-import java.util.function.Function;
/** A tree visitor that computes a hash code. */
public class TreeHasher extends TreeScanner {
- private final Function<Symbol, Integer> symbolHasher;
+ private final Map<Symbol, Integer> symbolHashes;
private int result = 17;
- public TreeHasher(Function<Symbol, Integer> symbolHasher) {
- this.symbolHasher = Objects.requireNonNull(symbolHasher);
+ public TreeHasher(Map<Symbol, Integer> symbolHashes) {
+ this.symbolHashes = Objects.requireNonNull(symbolHashes);
}
- public static int hash(JCTree tree, Function<Symbol, Integer> symbolHasher) {
+ public static int hash(JCTree tree, Collection<? extends Symbol> symbols) {
if (tree == null) {
return 0;
}
- TreeHasher hasher = new TreeHasher(symbolHasher);
+ Map<Symbol, Integer> symbolHashes = new HashMap<>();
+ symbols.forEach(s -> symbolHashes.put(s, symbolHashes.size()));
+ TreeHasher hasher = new TreeHasher(symbolHashes);
tree.accept(hasher);
return hasher.result;
}
@@ -85,7 +90,7 @@
public void visitIdent(JCIdent tree) {
Symbol sym = tree.sym;
if (sym != null) {
- Integer hash = symbolHasher.apply(sym);
+ Integer hash = symbolHashes.get(sym);
if (hash != null) {
hash(hash);
return;
@@ -99,4 +104,10 @@
hash(tree.sym);
super.visitSelect(tree);
}
+
+ @Override
+ public void visitVarDef(JCVariableDecl tree) {
+ symbolHashes.computeIfAbsent(tree.sym, k -> symbolHashes.size());
+ super.visitVarDef(tree);
+ }
}
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java Mon Apr 09 08:34:30 2018 -0700
@@ -3106,35 +3106,34 @@
name = token.name();
nextToken();
} else {
- if (allowThisIdent && !lambdaParameter) {
+ if (allowThisIdent ||
+ !lambdaParameter ||
+ LAX_IDENTIFIER.accepts(token.kind) ||
+ mods.flags != Flags.PARAMETER ||
+ mods.annotations.nonEmpty()) {
JCExpression pn = qualident(false);
if (pn.hasTag(Tag.IDENT) && ((JCIdent)pn).name != names._this) {
name = ((JCIdent)pn).name;
} else {
- if ((mods.flags & Flags.VARARGS) != 0) {
- log.error(token.pos, Errors.VarargsAndReceiver);
- }
- if (token.kind == LBRACKET) {
- log.error(token.pos, Errors.ArrayAndReceiver);
+ if (allowThisIdent) {
+ if ((mods.flags & Flags.VARARGS) != 0) {
+ log.error(token.pos, Errors.VarargsAndReceiver);
+ }
+ if (token.kind == LBRACKET) {
+ log.error(token.pos, Errors.ArrayAndReceiver);
+ }
}
return toP(F.at(pos).ReceiverVarDef(mods, pn, type));
}
} else {
- if (!lambdaParameter ||
- LAX_IDENTIFIER.accepts(token.kind) ||
- mods.flags != Flags.PARAMETER ||
- mods.annotations.nonEmpty()) {
- name = ident();
- } else {
- /** if it is a lambda parameter and the token kind is not an identifier,
- * and there are no modifiers or annotations, then this means that the compiler
- * supposed the lambda to be explicit but it can contain a mix of implicit,
- * var or explicit parameters. So we assign the error name to the parameter name
- * instead of issuing an error and analyze the lambda parameters as a whole at
- * a higher level.
- */
- name = names.empty;
- }
+ /** if it is a lambda parameter and the token kind is not an identifier,
+ * and there are no modifiers or annotations, then this means that the compiler
+ * supposed the lambda to be explicit but it can contain a mix of implicit,
+ * var or explicit parameters. So we assign the error name to the parameter name
+ * instead of issuing an error and analyze the lambda parameters as a whole at
+ * a higher level.
+ */
+ name = names.empty;
}
}
if ((mods.flags & Flags.VARARGS) != 0 &&
@@ -3905,7 +3904,7 @@
JCVariableDecl lastParam;
accept(LPAREN);
if (token.kind != RPAREN) {
- this.allowThisIdent = true;
+ this.allowThisIdent = !lambdaParameters;
lastParam = formalParameter(lambdaParameters);
if (lastParam.nameexpr != null) {
this.receiverParam = lastParam;
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties Thu Apr 05 19:08:48 2018 -0700
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties Mon Apr 09 08:34:30 2018 -0700
@@ -2740,7 +2740,8 @@
# TODO 308: make a better error message
compiler.err.this.as.identifier=\
- as of release 8, ''this'' is allowed as the parameter name for the receiver type only, which has to be the first parameter
+ as of release 8, ''this'' is allowed as the parameter name for the receiver type only\n\
+ which has to be the first parameter, and cannot be a lambda parameter
compiler.err.receiver.parameter.not.applicable.constructor.toplevel.class=\
receiver parameter not applicable for constructor of top-level class
--- a/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_de.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_de.java Mon Apr 09 08:34:30 2018 -0700
@@ -446,7 +446,7 @@
"Westgr\u00f6nl\u00e4ndische Sommerzeit", "WGST",
"Westgr\u00F6nl\u00E4ndische Zeit", "WGT"}},
{"America/Goose_Bay", AST},
- {"America/Grand_Turk", AST},
+ {"America/Grand_Turk", EST},
{"America/Grenada", AST},
{"America/Guadeloupe", AST},
{"America/Guatemala", CST},
--- a/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_es.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_es.java Mon Apr 09 08:34:30 2018 -0700
@@ -446,7 +446,7 @@
"Hora de verano de Groenlandia Occidental", "WGST",
"Hora de Groenlandia Occidental", "WGT"}},
{"America/Goose_Bay", AST},
- {"America/Grand_Turk", AST},
+ {"America/Grand_Turk", EST},
{"America/Grenada", AST},
{"America/Guadeloupe", AST},
{"America/Guatemala", CST},
--- a/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_fr.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_fr.java Mon Apr 09 08:34:30 2018 -0700
@@ -446,7 +446,7 @@
"Heure d'\u00e9t\u00e9 du Groenland de l'Ouest", "WGST",
"Heure du Groenland de l'Ouest", "WGT"}},
{"America/Goose_Bay", AST},
- {"America/Grand_Turk", AST},
+ {"America/Grand_Turk", EST},
{"America/Grenada", AST},
{"America/Guadeloupe", AST},
{"America/Guatemala", CST},
--- a/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_it.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_it.java Mon Apr 09 08:34:30 2018 -0700
@@ -446,7 +446,7 @@
"Ora estiva della Groenlandia occidentale", "WGST",
"Ora della Groenlandia occidentale", "WGT"}},
{"America/Goose_Bay", AST},
- {"America/Grand_Turk", AST},
+ {"America/Grand_Turk", EST},
{"America/Grenada", AST},
{"America/Guadeloupe", AST},
{"America/Guatemala", CST},
--- a/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_ja.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_ja.java Mon Apr 09 08:34:30 2018 -0700
@@ -446,7 +446,7 @@
"\u897f\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9\u590f\u6642\u9593", "WGST",
"\u897F\u90E8\u30B0\u30EA\u30FC\u30F3\u30E9\u30F3\u30C9\u6642\u9593", "WGT"}},
{"America/Goose_Bay", AST},
- {"America/Grand_Turk", AST},
+ {"America/Grand_Turk", EST},
{"America/Grenada", AST},
{"America/Guadeloupe", AST},
{"America/Guatemala", CST},
--- a/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_ko.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_ko.java Mon Apr 09 08:34:30 2018 -0700
@@ -446,7 +446,7 @@
"\uc11c\ubd80 \uadf8\ub9b0\ub79c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WGST",
"\uC11C\uBD80 \uADF8\uB9B0\uB780\uB4DC \uD45C\uC900\uC2DC", "WGT"}},
{"America/Goose_Bay", AST},
- {"America/Grand_Turk", AST},
+ {"America/Grand_Turk", EST},
{"America/Grenada", AST},
{"America/Guadeloupe", AST},
{"America/Guatemala", CST},
--- a/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_pt_BR.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_pt_BR.java Mon Apr 09 08:34:30 2018 -0700
@@ -446,7 +446,7 @@
"Fuso hor\u00e1rio de ver\u00e3o da Groenl\u00e2ndia Ocidental", "WGST",
"Hor\u00E1rio da Groenl\u00E2ndia Ocidental", "WGT"}},
{"America/Goose_Bay", AST},
- {"America/Grand_Turk", AST},
+ {"America/Grand_Turk", EST},
{"America/Grenada", AST},
{"America/Guadeloupe", AST},
{"America/Guatemala", CST},
--- a/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_sv.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_sv.java Mon Apr 09 08:34:30 2018 -0700
@@ -446,7 +446,7 @@
"V\u00e4stra Gr\u00f6nland, sommartid", "WGST",
"V\u00E4stgr\u00F6nl\u00E4ndsk tid", "WGT"}},
{"America/Goose_Bay", AST},
- {"America/Grand_Turk", AST},
+ {"America/Grand_Turk", EST},
{"America/Grenada", AST},
{"America/Guadeloupe", AST},
{"America/Guatemala", CST},
--- a/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_zh_CN.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_zh_CN.java Mon Apr 09 08:34:30 2018 -0700
@@ -446,7 +446,7 @@
"\u897f\u683c\u6797\u5170\u5c9b\u590f\u4ee4\u65f6", "WGST",
"\u897F\u683C\u6797\u5170\u5C9B\u65F6\u95F4", "WGT"}},
{"America/Goose_Bay", AST},
- {"America/Grand_Turk", AST},
+ {"America/Grand_Turk", EST},
{"America/Grenada", AST},
{"America/Guadeloupe", AST},
{"America/Guatemala", CST},
--- a/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_zh_TW.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/jdk.localedata/share/classes/sun/util/resources/ext/TimeZoneNames_zh_TW.java Mon Apr 09 08:34:30 2018 -0700
@@ -446,7 +446,7 @@
"\u897f\u683c\u6797\u862d\u5cf6\u590f\u4ee4\u6642\u9593", "WGST",
"\u897F\u683C\u9675\u862D\u6642\u9593", "WGT"}},
{"America/Goose_Bay", AST},
- {"America/Grand_Turk", AST},
+ {"America/Grand_Turk", EST},
{"America/Grenada", AST},
{"America/Guadeloupe", AST},
{"America/Guatemala", CST},
--- a/src/jdk.management.agent/share/classes/jdk/internal/agent/Agent.java Thu Apr 05 19:08:48 2018 -0700
+++ b/src/jdk.management.agent/share/classes/jdk/internal/agent/Agent.java Mon Apr 09 08:34:30 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 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
@@ -58,9 +58,11 @@
import sun.management.jmxremote.ConnectorBootstrap;
/**
- * This Agent is started by the VM when -Dcom.sun.management.snmp or
- * -Dcom.sun.management.jmxremote is set. This class will be loaded by the
- * system class loader. Also jmx framework could be started by jcmd
+ * This class provides the methods to start the management agent.
+ * 1. {@link #startAgent} method is invoked by the VM if {@code -Dcom.sun.management.*} is set
+ * 2. {@link #startLocalManagementAgent} or {@link #startRemoteManagementAgent}
+ * is invoked to start the management agent after the VM starts
+ * via jcmd ManagementAgent.start and start_local command.
*/
public class Agent {
/**
@@ -239,8 +241,6 @@
private static ResourceBundle messageRB;
private static final String CONFIG_FILE =
"com.sun.management.config.file";
- private static final String SNMP_PORT =
- "com.sun.management.snmp.port";
private static final String JMXREMOTE =
"com.sun.management.jmxremote";
private static final String JMXREMOTE_PORT =
@@ -251,8 +251,6 @@
"com.sun.management.enableThreadContentionMonitoring";
private static final String LOCAL_CONNECTOR_ADDRESS_PROP =
"com.sun.management.jmxremote.localConnectorAddress";
- private static final String SNMP_AGENT_NAME =
- "SnmpAgent";
private static final String JDP_DEFAULT_ADDRESS = "224.0.23.178";
private static final int JDP_DEFAULT_PORT = 7095;
@@ -307,8 +305,11 @@
startAgent(config_props);
}
- // jcmd ManagementAgent.start_local entry point
- // Also called due to command-line via startAgent()
+ /*
+ * Starts the local management agent.
+ * This method is invoked by either startAgent method or
+ * by the VM directly via jcmd ManagementAgent.start_local command.
+ */
private static synchronized void startLocalManagementAgent() {
Properties agentProps = VMSupport.getAgentProperties();
@@ -330,10 +331,10 @@
}
}
- // jcmd ManagementAgent.start entry point
- // This method starts the remote JMX agent and starts neither
- // the local JMX agent nor the SNMP agent
- // @see #startLocalManagementAgent and also @see #startAgent.
+ /*
+ * This method is invoked by the VM to start the remote management agent
+ * via jcmd ManagementAgent.start command.
+ */
private static synchronized void startRemoteManagementAgent(String args) throws Exception {
if (jmxServer != null) {
throw new RuntimeException(getText(INVALID_STATE, "Agent already started"));
@@ -418,7 +419,6 @@
}
private static void startAgent(Properties props) throws Exception {
- String snmpPort = props.getProperty(SNMP_PORT);
String jmxremote = props.getProperty(JMXREMOTE);
String jmxremotePort = props.getProperty(JMXREMOTE_PORT);
@@ -431,9 +431,6 @@
}
try {
- if (snmpPort != null) {
- loadSnmpAgent(props);
- }
/*
* If the jmxremote.port property is set then we start the
@@ -533,12 +530,10 @@
public static synchronized Properties getManagementProperties() {
if (mgmtProps == null) {
String configFile = System.getProperty(CONFIG_FILE);
- String snmpPort = System.getProperty(SNMP_PORT);
String jmxremote = System.getProperty(JMXREMOTE);
String jmxremotePort = System.getProperty(JMXREMOTE_PORT);
- if (configFile == null && snmpPort == null
- && jmxremote == null && jmxremotePort == null) {
+ if (configFile == null && jmxremote == null && jmxremotePort == null) {
// return if out-of-the-management option is not specified
return null;
}
@@ -547,27 +542,6 @@
return mgmtProps;
}
- private static void loadSnmpAgent(Properties props) {
- /*
- * Load the jdk.snmp service
- */
- AgentProvider provider = AccessController.doPrivileged(
- (PrivilegedAction<AgentProvider>) () -> {
- for (AgentProvider aProvider : ServiceLoader.loadInstalled(AgentProvider.class)) {
- if (aProvider.getName().equals(SNMP_AGENT_NAME))
- return aProvider;
- }
- return null;
- }, null
- );
-
- if (provider != null) {
- provider.startAgent(props);
- } else { // snmp runtime doesn't exist - initialization fails
- throw new UnsupportedOperationException("Unsupported management property: " + SNMP_PORT);
- }
- }
-
// read config file and initialize the properties
private static void readConfiguration(String fname, Properties p) {
if (fname == null) {
@@ -609,6 +583,10 @@
}
}
+ /**
+ * This method is invoked by the VM to start the management agent
+ * when -Dcom.sun.management.* is set during startup.
+ */
public static void startAgent() throws Exception {
String prop = System.getProperty("com.sun.management.agent.class");
--- a/src/jdk.management.agent/share/conf/management.properties Thu Apr 05 19:08:48 2018 -0700
+++ b/src/jdk.management.agent/share/conf/management.properties Mon Apr 09 08:34:30 2018 -0700
@@ -5,7 +5,6 @@
# The Management Configuration file (in java.util.Properties format)
# will be read if one of the following system properties is set:
# -Dcom.sun.management.jmxremote.port=<port-number>
-# or -Dcom.sun.management.snmp.port=<port-number>
# or -Dcom.sun.management.config.file=<this-file>
#
# The default Management Configuration file is:
@@ -26,8 +25,6 @@
# For setting the JMX RMI agent port use the following line
# com.sun.management.jmxremote.port=<port-number>
#
-# For setting the SNMP agent port use the following line
-# com.sun.management.snmp.port=<port-number>
#####################################################################
# Optional Instrumentation
@@ -50,82 +47,6 @@
# com.sun.management.enableThreadContentionMonitoring
#####################################################################
-# SNMP Management Properties
-#####################################################################
-#
-# If the system property -Dcom.sun.management.snmp.port=<port-number>
-# is set then
-# - The SNMP agent (with the Java virtual machine MIB) is started
-# that listens on the specified port for incoming SNMP requests.
-# - the following properties for read for SNMP management.
-#
-# The configuration can be specified only at startup time.
-# Later changes to the above system property (e.g. via setProperty method), this
-# config file, or the ACL file has no effect to the running SNMP agent.
-#
-
-#
-# ##################### SNMP Trap Port #########################
-#
-# com.sun.management.snmp.trap=<trap-destination-port-number>
-# Specifies the remote port number at which managers are expected
-# to listen for trap. For each host defined in the ACL file,
-# the SNMP agent will send traps at <host>:<trap-destination-port-number>
-# Default for this property is 162.
-#
-
-# To set port for sending traps to a different port use the following line
-# com.sun.management.snmp.trap=<trap-destination-port-number>
-
-#
-# ################ SNMP listen interface #########################
-#
-# com.sun.management.snmp.interface=<InetAddress>
-# Specifies the local interface on which the SNMP agent will bind.
-# This is useful when running on machines which have several
-# interfaces defined. It makes it possible to listen to a specific
-# subnet accessible through that interface.
-# Default for this property is "localhost".
-#
-# The format of the value for that property is any string accepted
-# by java.net.InetAddress.getByName(String).
-#
-
-# For restricting the port on which SNMP agent listens use the following line
-# com.sun.management.snmp.interface=<InetAddress>
-
-#
-# #################### SNMP ACL file #########################
-#
-# com.sun.management.snmp.acl=true|false
-# Default for this property is true. (Case for true/false ignored)
-# If this property is specified as false then the ACL file
-# is not checked: all manager hosts are allowed all access.
-#
-
-# For SNMP without checking ACL file uncomment the following line
-# com.sun.management.snmp.acl=false
-
-#
-# com.sun.management.snmp.acl.file=filepath
-# Specifies location for ACL file
-# This is optional - default location is
-# $JRE/conf/management/snmp.acl
-#
-# If the property "com.sun.management.snmp.acl" is set to false,
-# then this property and the ACL file are ignored.
-# Otherwise the ACL file must exist and be in the valid format.
-# If the ACL file is empty or non existent then no access is allowed.
-#
-# The SNMP agent will read the ACL file at startup time.
-# Modification to the ACL file has no effect to any running SNMP
-# agents which read that ACL file at startup.
-#
-
-# For a non-default acl file location use the following line
-# com.sun.management.snmp.acl.file=filepath
-
-#####################################################################
# RMI Management Properties
#####################################################################
#
--- a/src/jdk.pack/share/native/unpack200/main.cpp Thu Apr 05 19:08:48 2018 -0700
+++ b/src/jdk.pack/share/native/unpack200/main.cpp Mon Apr 09 08:34:30 2018 -0700
@@ -45,6 +45,7 @@
#define THREAD_SELF ((THRTYPE)pthread_self())
#endif
+#include "jni.h"
#include "defines.h"
#include "bytes.h"
#include "utils.h"
@@ -58,7 +59,8 @@
#include "unpack.h"
-int main(int argc, char **argv) {
+JNIEXPORT int JNICALL
+main(int argc, char **argv) {
return unpacker::run(argc, argv);
}
--- a/test/hotspot/jtreg/runtime/RedefineObject/WalkThroughInvoke.java Thu Apr 05 19:08:48 2018 -0700
+++ b/test/hotspot/jtreg/runtime/RedefineObject/WalkThroughInvoke.java Mon Apr 09 08:34:30 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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
@@ -29,7 +29,7 @@
SecurityManager sm = new SecurityManager();
// Walks the stack with Method.invoke in the stack (which is the
// purpose of the test) before it gets an AccessControlException.
- sm.checkMemberAccess(b, Member.DECLARED);
+ sm.checkPermission(new RuntimePermission("accessDeclaredMembers"));
} catch (java.security.AccessControlException e) {
// Ignoring an 'AccessControlException' exception since
// it is expected as part of this test.
--- a/test/jdk/java/lang/Class/IsAnnotationType.java Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/java/lang/Class/IsAnnotationType.java Mon Apr 09 08:34:30 2018 -0700
@@ -49,7 +49,7 @@
failures += test(String.class, false);
failures += test(Enum.class, false);
failures += test(java.math.RoundingMode.class, false);
- // Classes in java.lang.annoation
+ // Classes in java.lang.annotation
failures += test(Annotation.class, false);
failures += test(Retention.class, true);
failures += test(RetentionPolicy.class, false);
@@ -57,7 +57,7 @@
failures += test(AnnotationPoseur.class, false);
if (failures > 0) {
- throw new RuntimeException("Unexepcted annotation " +
+ throw new RuntimeException("Unexpected annotation " +
"status detected.");
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/lang/Enum/ConstantDirectoryOptimalCapacity.java Mon Apr 09 08:34:30 2018 -0700
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 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.
+ *
+ * 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 8200696
+ * @summary Initial capacity of Class.enumConstantDirectory is not optimal
+ * @library /lib/testlibrary
+ * @modules java.base/java.lang:open
+ * java.base/java.util:open
+ * @build jdk.testlibrary.OptimalCapacity
+ * @run main ConstantDirectoryOptimalCapacity
+ */
+
+import jdk.testlibrary.OptimalCapacity;
+
+public class ConstantDirectoryOptimalCapacity {
+
+ public static void main(String[] args) throws Throwable {
+ test(E1.class);
+ test(E2.class);
+ test(E3.class);
+ test(E4.class);
+ test(E5.class);
+ test(E6.class);
+ test(E7.class);
+ test(E8.class);
+ test(E9.class);
+ test(E10.class);
+ test(E11.class);
+ test(E12.class);
+ test(E13.class);
+ test(E14.class);
+ test(E15.class);
+ test(E16.class);
+ test(E17.class);
+ test(E18.class);
+ test(E19.class);
+ test(E20.class);
+ test(E21.class);
+ test(E22.class);
+ test(E23.class);
+ test(E24.class);
+ test(E25.class);
+ test(E26.class);
+ }
+
+ private static void test(Class<? extends Enum> e) {
+ Enum.valueOf(e, "V0"); // trigger init of enumConstantDirectory
+
+ int initialCapacity = (int)(e.getEnumConstants().length / 0.75f) + 1;
+ OptimalCapacity.ofHashMap(e.getClass(), e, "enumConstantDirectory",
+ initialCapacity);
+ }
+
+ enum E1 { V0 }
+ enum E2 { V0, V1 }
+ enum E3 { V0, V1, V2 }
+ enum E4 { V0, V1, V2, V3 }
+ enum E5 { V0, V1, V2, V3, V4 }
+ enum E6 { V0, V1, V2, V3, V4, V5 }
+ enum E7 { V0, V1, V2, V3, V4, V5, V6 }
+ enum E8 { V0, V1, V2, V3, V4, V5, V6, V7 }
+ enum E9 { V0, V1, V2, V3, V4, V5, V6, V7, V8 }
+ enum E10 { V0, V1, V2, V3, V4, V5, V6, V7, V8, V9 }
+ enum E11 { V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10 }
+ enum E12 { V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11 }
+ enum E13 { V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12 }
+ enum E14 { V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13 }
+ enum E15 { V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13,
+ V14 }
+ enum E16 { V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13,
+ V14, V15 }
+ enum E17 { V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13,
+ V14, V15, V16 }
+ enum E18 { V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13,
+ V14, V15, V16, V17 }
+ enum E19 { V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13,
+ V14, V15, V16, V17, V18 }
+ enum E20 { V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13,
+ V14, V15, V16, V17, V18, V19 }
+ enum E21 { V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13,
+ V14, V15, V16, V17, V18, V19, V20 }
+ enum E22 { V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13,
+ V14, V15, V16, V17, V18, V19, V20, V21 }
+ enum E23 { V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13,
+ V14, V15, V16, V17, V18, V19, V20, V21, V22 }
+ enum E24 { V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13,
+ V14, V15, V16, V17, V18, V19, V20, V21, V22, V23 }
+ enum E25 { V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13,
+ V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24 }
+ enum E26 { V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13,
+ V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25 }
+}
--- a/test/jdk/java/lang/ProcessBuilder/DestroyTest.java Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/java/lang/ProcessBuilder/DestroyTest.java Mon Apr 09 08:34:30 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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
@@ -145,18 +145,16 @@
String osName = System.getProperty("os.name");
if (osName.startsWith("Windows")) {
return new WindowsTest();
- } else if (osName.startsWith("Linux") == true) {
- return new UnixTest(
- File.createTempFile("ProcessTrap-", ".sh",null));
- } else if (osName.startsWith("Mac OS")) {
- return new MacTest(
- File.createTempFile("ProcessTrap-", ".sh",null));
- } else if (osName.equals("SunOS")) {
- return new UnixTest(
- File.createTempFile("ProcessTrap-", ".sh",null));
- } else if (osName.equals("AIX")) {
- return new UnixTest(
- File.createTempFile("ProcessTrap-", ".sh",null));
+ } else {
+ File userDir = new File(System.getProperty("user.dir", "."));
+ File tempFile = File.createTempFile("ProcessTrap-", ".sh", userDir);
+ if (osName.startsWith("Linux") == true
+ || osName.equals("SunOS")
+ || osName.equals("AIX")) {
+ return new UnixTest(tempFile);
+ } else if (osName.startsWith("Mac OS")) {
+ return new MacTest(tempFile);
+ }
}
return null;
}
--- a/test/jdk/java/lang/SecurityManager/DepMethodsRequireAllPerm.java Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2013, 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 8004502 8008793 8029886 8186535
- * @summary Sanity check that the SecurityManager checkMemberAccess method and
- * methods that used to check AWTPermission now check for AllPermission
- */
-
-import java.security.AllPermission;
-import java.security.Permission;
-
-public class DepMethodsRequireAllPerm {
-
- static class MySecurityManager extends SecurityManager {
- final Class<?> expectedClass;
-
- MySecurityManager(Class<?> c) {
- expectedClass = c;
- }
-
- @Override
- public void checkPermission(Permission perm) {
- if (perm.getClass() != expectedClass)
- throw new RuntimeException("Got: " + perm.getClass() + ", expected: " + expectedClass);
- super.checkPermission(perm);
- }
- }
-
- public static void main(String[] args) {
- MySecurityManager sm = new MySecurityManager(AllPermission.class);
-
- try {
- sm.checkAwtEventQueueAccess();
- throw new RuntimeException("SecurityException expected");
- } catch (SecurityException expected) { }
-
- try {
- sm.checkSystemClipboardAccess();
- throw new RuntimeException("SecurityException expected");
- } catch (SecurityException expected) { }
-
- try {
- sm.checkTopLevelWindow(null);
- throw new RuntimeException("NullPointException expected");
- } catch (NullPointerException expected) { }
-
- if (sm.checkTopLevelWindow(new Object())) {
- throw new RuntimeException("checkTopLevelWindow expected to return false");
- }
-
- try {
- sm.checkMemberAccess(Object.class, java.lang.reflect.Member.DECLARED);
- throw new RuntimeException("SecurityException expected");
- } catch (SecurityException expected) { }
-
- try {
- sm.checkMemberAccess(null, java.lang.reflect.Member.DECLARED);
- throw new RuntimeException("NullPointerException expected");
- } catch (NullPointerException expected) { }
- }
-}
--- a/test/jdk/java/lang/annotation/ClassFileGenerator.java Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/java/lang/annotation/ClassFileGenerator.java Mon Apr 09 08:34:30 2018 -0700
@@ -38,8 +38,8 @@
public class ClassFileGenerator {
public static void main(String... args) throws Exception {
- classFileWriter("AnnotationWithVoidReturn.class", AnnoationWithVoidReturnDump.dump());
- classFileWriter("AnnotationWithParameter.class", AnnoationWithParameterDump.dump());
+ classFileWriter("AnnotationWithVoidReturn.class", AnnotationWithVoidReturnDump.dump());
+ classFileWriter("AnnotationWithParameter.class", AnnotationWithParameterDump.dump());
classFileWriter("AnnotationWithExtraInterface.class", AnnotationWithExtraInterfaceDump.dump());
classFileWriter("AnnotationWithException.class", AnnotationWithExceptionDump.dump());
classFileWriter("AnnotationWithHashCode.class", AnnotationWithHashCodeDump.dump());
@@ -65,7 +65,7 @@
*/
- private static class AnnoationWithVoidReturnDump implements Opcodes {
+ private static class AnnotationWithVoidReturnDump implements Opcodes {
public static byte[] dump() throws Exception {
ClassWriter cw = new ClassWriter(0);
MethodVisitor mv;
@@ -106,7 +106,7 @@
*/
- private static class AnnoationWithParameterDump implements Opcodes {
+ private static class AnnotationWithParameterDump implements Opcodes {
public static byte[] dump() throws Exception {
ClassWriter cw = new ClassWriter(0);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/lang/invoke/VarHandle/AccessMode/OptimalMapSize.java Mon Apr 09 08:34:30 2018 -0700
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 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.
+ *
+ * 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 8200788
+ * @summary Optimal initial capacity of AccessMode.methodNameToAccessMode
+ * @library /lib/testlibrary
+ * @modules java.base/java.lang.invoke:open
+ * java.base/java.util:open
+ * @build jdk.testlibrary.OptimalCapacity
+ * @run main OptimalMapSize
+ */
+
+import java.lang.invoke.VarHandle.AccessMode;
+import jdk.testlibrary.OptimalCapacity;
+
+public class OptimalMapSize {
+ public static void main(String[] args) throws Throwable {
+ int initialCapacity = (int)(AccessMode.values().length / 0.75f) + 1;
+ OptimalCapacity.ofHashMap(AccessMode.class, "methodNameToAccessMode",
+ initialCapacity);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/nio/channels/Selector/UpdateReadyOps.java Mon Apr 09 08:34:30 2018 -0700
@@ -0,0 +1,176 @@
+/*
+ * Copyright (c) 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.
+ *
+ * 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
+ * @run testng UpdateReadyOps
+ * @summary Test that the ready set from a selection operation is bitwise-disjoined
+ * into a key's ready set when the key is already in the selected-key set
+ */
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.nio.ByteBuffer;
+import java.nio.channels.SelectionKey;
+import java.nio.channels.Selector;
+import java.nio.channels.ServerSocketChannel;
+import java.nio.channels.SocketChannel;
+
+import org.testng.annotations.Test;
+import static org.testng.Assert.*;
+
+@Test
+public class UpdateReadyOps {
+
+ /**
+ * Test that OP_WRITE is preserved when updating the ready set of a key in
+ * the selected-key set to add OP_READ.
+ */
+ public void testOpWritePreserved() throws Exception {
+ try (ConnectionPair pair = new ConnectionPair();
+ Selector sel = Selector.open()) {
+
+ SocketChannel sc1 = pair.channel1();
+ SocketChannel sc2 = pair.channel2();
+
+ sc1.configureBlocking(false);
+ SelectionKey key = sc1.register(sel, SelectionKey.OP_WRITE);
+
+ int updated = sel.select();
+ assertTrue(updated == 1);
+ assertTrue(sel.selectedKeys().contains(key));
+ assertFalse(key.isReadable());
+ assertTrue(key.isWritable());
+
+ // select again, should be no updates
+ updated = sel.select();
+ assertTrue(updated == 0);
+ assertTrue(sel.selectedKeys().contains(key));
+ assertFalse(key.isReadable());
+ assertTrue(key.isWritable());
+
+ // write some bytes
+ sc2.write(helloMessage());
+
+ // change interest ops to OP_READ, do a selection operation, and
+ // check that the ready set becomes OP_READ|OP_WRITE.
+
+ key.interestOps(SelectionKey.OP_READ);
+ updated = sel.select();
+ assertTrue(updated == 1);
+ assertTrue(sel.selectedKeys().size() == 1);
+ assertTrue(key.isReadable());
+ assertTrue(key.isWritable());
+ assertTrue(key.readyOps() == (SelectionKey.OP_READ|SelectionKey.OP_WRITE));
+
+ // select again, should be no updates
+ updated = sel.select();
+ assertTrue(updated == 0);
+ assertTrue(sel.selectedKeys().size() == 1);
+ assertTrue(key.isReadable());
+ assertTrue(key.isWritable());
+ }
+ }
+
+ /**
+ * Test that OP_READ is preserved when updating the ready set of a key in
+ * the selected-key set to add OP_WRITE.
+ */
+ public void testOpReadPreserved() throws Exception {
+ try (ConnectionPair pair = new ConnectionPair();
+ Selector sel = Selector.open()) {
+
+ SocketChannel sc1 = pair.channel1();
+ SocketChannel sc2 = pair.channel2();
+
+ sc1.configureBlocking(false);
+ SelectionKey key = sc1.register(sel, SelectionKey.OP_READ);
+
+ // write some bytes
+ sc2.write(helloMessage());
+
+ int updated = sel.select();
+ assertTrue(updated == 1);
+ assertTrue(sel.selectedKeys().size() == 1);
+ assertTrue(sel.selectedKeys().contains(key));
+ assertTrue(key.isReadable());
+ assertFalse(key.isWritable());
+
+ // select again, should be no updates
+ updated = sel.select();
+ assertTrue(updated == 0);
+ assertTrue(sel.selectedKeys().contains(key));
+ assertTrue(key.isReadable());
+ assertFalse(key.isWritable());
+
+ key.interestOps(SelectionKey.OP_WRITE);
+ updated = sel.select();
+ assertTrue(updated == 1);
+ assertTrue(sel.selectedKeys().size() == 1);
+ assertTrue(sel.selectedKeys().contains(key));
+ assertTrue(key.isReadable());
+ assertTrue(key.isWritable());
+ assertTrue(key.readyOps() == (SelectionKey.OP_READ|SelectionKey.OP_WRITE));
+
+ // select again, should be no updates
+ updated = sel.select();
+ assertTrue(updated == 0);
+ assertTrue(sel.selectedKeys().size() == 1);
+ assertTrue(key.isReadable());
+ assertTrue(key.isWritable());
+ }
+ }
+
+ static class ConnectionPair implements Closeable {
+
+ private final SocketChannel sc1;
+ private final SocketChannel sc2;
+
+ ConnectionPair() throws IOException {
+ InetAddress lb = InetAddress.getLoopbackAddress();
+ try (ServerSocketChannel ssc = ServerSocketChannel.open()) {
+ ssc.bind(new InetSocketAddress(lb, 0));
+ this.sc1 = SocketChannel.open(ssc.getLocalAddress());
+ this.sc2 = ssc.accept();
+ }
+ }
+
+ SocketChannel channel1() {
+ return sc1;
+ }
+
+ SocketChannel channel2() {
+ return sc2;
+ }
+
+ public void close() throws IOException {
+ sc1.close();
+ sc2.close();
+ }
+ }
+
+ static ByteBuffer helloMessage() throws Exception {
+ return ByteBuffer.wrap("hello".getBytes("UTF-8"));
+ }
+}
--- a/test/jdk/java/nio/channels/SocketChannel/IsConnectable.java Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2002, 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.
- *
- * 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 4737146 4750573
- * @summary Test if isConnectable returns true after connected
- * @library .. /test/lib
- * @build jdk.test.lib.Utils TestServers
- * @run main IsConnectable
- */
-
-import java.net.*;
-import java.nio.channels.*;
-import java.nio.channels.spi.SelectorProvider;
-import java.util.*;
-
-public class IsConnectable {
-
- static void test(TestServers.DayTimeServer daytimeServer) throws Exception {
- InetSocketAddress isa
- = new InetSocketAddress(daytimeServer.getAddress(),
- daytimeServer.getPort());
- SocketChannel sc = SocketChannel.open();
- sc.configureBlocking(false);
- final boolean immediatelyConnected = sc.connect(isa);
-
- Selector selector = SelectorProvider.provider().openSelector();
- try {
- SelectionKey key = sc.register(selector, SelectionKey.OP_CONNECT);
- int keysAdded = selector.select();
- if (keysAdded > 0) {
- boolean result = sc.finishConnect();
- if (result) {
- keysAdded = selector.select(5000);
- // 4750573: keysAdded should not be incremented when op is dropped
- // from a key already in the selected key set
- if (keysAdded > 0)
- throw new Exception("Test failed: 4750573 detected");
- Set<SelectionKey> sel = selector.selectedKeys();
- Iterator<SelectionKey> i = sel.iterator();
- SelectionKey sk = i.next();
- // 4737146: isConnectable should be false while connected
- if (sk.isConnectable())
- throw new Exception("Test failed: 4737146 detected");
- }
- } else {
- if (!immediatelyConnected) {
- throw new Exception("Select failed");
- } else {
- System.out.println("IsConnectable couldn't be fully tested for "
- + System.getProperty("os.name"));
- }
- }
- } finally {
- sc.close();
- selector.close();
- }
- }
-
- public static void main(String[] args) throws Exception {
- try (TestServers.DayTimeServer daytimeServer
- = TestServers.DayTimeServer.startNewServer(100)) {
- test(daytimeServer);
- }
- }
-
-}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/security/PKCS12Attribute/HashCode.java Mon Apr 09 08:34:30 2018 -0700
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 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.
+ *
+ * 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 8200792
+ * @summary PKCS12Attribute#hashCode is always constant -1
+ */
+
+import java.security.PKCS12Attribute;
+
+public class HashCode {
+ public static void main(String[] args) throws Exception {
+ int h1 = new PKCS12Attribute("1.2.3.4", "AA").hashCode();
+ int h2 = new PKCS12Attribute("2.3.4.5", "BB,CC").hashCode();
+ if (h1 == -1 || h2 == -1 || h1 == h2) {
+ throw new Exception("I see " + h1 + " and " + h2);
+ }
+ }
+}
--- a/test/jdk/lib/testlibrary/jdk/testlibrary/OptimalCapacity.java Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/lib/testlibrary/jdk/testlibrary/OptimalCapacity.java Mon Apr 09 08:34:30 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 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
@@ -102,10 +102,34 @@
public static void ofHashMap(Class<?> clazz, String fieldName,
int initialCapacity)
{
+ ofHashMap(clazz, null, fieldName, initialCapacity);
+ }
+
+ /**
+ * Checks adequacy of the initial capacity of a non-static field
+ * of type {@code HashMap}.
+ *
+ * Having
+ * <pre>
+ * class XClass {
+ * HashMap theMap = new HashMap(N);
+ * }
+ * XClass instance = ...
+ * </pre>
+ *
+ * you should call from the test
+ *
+ * <pre>
+ * OptimalCapacity.ofHashMap(XClass.class, instance, "theMap", N);
+ * </pre>
+ */
+ public static void ofHashMap(Class<?> clazz, Object instance,
+ String fieldName, int initialCapacity)
+ {
try {
Field field = clazz.getDeclaredField(fieldName);
field.setAccessible(true);
- Object obj = field.get(null);
+ Object obj = field.get(instance);
if (!HashMap.class.equals(obj.getClass())) {
throw new RuntimeException(field +
" expected to be of type HashMap");
--- a/test/jdk/sun/management/jmxremote/bootstrap/rmiregistry.properties Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/sun/management/jmxremote/bootstrap/rmiregistry.properties Mon Apr 09 08:34:30 2018 -0700
@@ -5,7 +5,6 @@
# The Management Configuration file (in java.util.Properties format)
# will be read if one of the following system properties is set:
# -Dcom.sun.management.jmxremote.port=<port-number>
-# or -Dcom.sun.management.snmp.port=<port-number>
# or -Dcom.sun.management.config.file=<this-file>
#
# The default Management Configuration file is:
@@ -26,8 +25,6 @@
# For setting the JMX RMI agent port use the following line
com.sun.management.jmxremote.port=${getFreePort}
#
-# For setting the SNMP agent port use the following line
-# com.sun.management.snmp.port=<port-number>
#####################################################################
# Optional Instrumentation
@@ -50,82 +47,6 @@
# com.sun.management.enableThreadContentionMonitoring
#####################################################################
-# SNMP Management Properties
-#####################################################################
-#
-# If the system property -Dcom.sun.management.snmp.port=<port-number>
-# is set then
-# - The SNMP agent (with the Java virtual machine MIB) is started
-# that listens on the specified port for incoming SNMP requests.
-# - the following properties for read for SNMP management.
-#
-# The configuration can be specified only at startup time.
-# Later changes to the above system property (e.g. via setProperty method), this
-# config file, or the ACL file has no effect to the running SNMP agent.
-#
-
-#
-# ##################### SNMP Trap Port #########################
-#
-# com.sun.management.snmp.trap=<trap-destination-port-number>
-# Specifies the remote port number at which managers are expected
-# to listen for trap. For each host defined in the ACL file,
-# the SNMP agent will send traps at <host>:<trap-destination-port-number>
-# Default for this property is 162.
-#
-
-# To set port for sending traps to a different port use following line
-# com.sun.management.snmp.trap=<trap-destination-port-number>
-
-#
-# ################ SNMP listen interface #########################
-#
-# com.sun.management.snmp.interface=<InetAddress>
-# Specifies the local interface on which the SNMP agent will bind.
-# This is usefull when running on machines which have several
-# interfaces defined. It makes it possible to listen to a specific
-# subnet accessible through that interface.
-# Default for this property is "localhost".
-#
-# The format of the value for that property is any string accepted
-# by java.net.InetAddress.getByName(String).
-#
-
-# For restricting the port on which SNMP agent listens use following line
-# com.sun.management.snmp.interface=<InetAddress>
-
-#
-# #################### SNMP ACL file #########################
-#
-# com.sun.management.snmp.acl=true|false
-# Default for this property is true. (Case for true/false ignored)
-# If this property is specified as false then the ACL file
-# is not checked: all manager hosts are allowed all access.
-#
-
-# For SNMP without checking ACL file uncomment the following line
-# com.sun.management.snmp.acl=false
-
-#
-# com.sun.management.snmp.acl.file=filepath
-# Specifies location for ACL file
-# This is optional - default location is
-# $JRE/conf/management/snmp.acl
-#
-# If the property "com.sun.management.snmp.acl" is set to false,
-# then this property and the ACL file are ignored.
-# Otherwise the ACL file must exist and be in the valid format.
-# If the ACL file is empty or non existent then no access is allowed.
-#
-# The SNMP agent will read the ACL file at startup time.
-# Modification to the ACL file has no effect to any running SNMP
-# agents which read that ACL file at startup.
-#
-
-# For a non-default acl file location use following line
-# com.sun.management.snmp.acl.file=filepath
-
-#####################################################################
# RMI Management Properties
#####################################################################
#
--- a/test/jdk/sun/management/jmxremote/bootstrap/rmiregistryssl.properties Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/sun/management/jmxremote/bootstrap/rmiregistryssl.properties Mon Apr 09 08:34:30 2018 -0700
@@ -5,7 +5,6 @@
# The Management Configuration file (in java.util.Properties format)
# will be read if one of the following system properties is set:
# -Dcom.sun.management.jmxremote.port=<port-number>
-# or -Dcom.sun.management.snmp.port=<port-number>
# or -Dcom.sun.management.config.file=<this-file>
#
# The default Management Configuration file is:
@@ -26,8 +25,6 @@
# For setting the JMX RMI agent port use the following line
com.sun.management.jmxremote.port=${getFreePort}
#
-# For setting the SNMP agent port use the following line
-# com.sun.management.snmp.port=<port-number>
#####################################################################
# Optional Instrumentation
@@ -50,82 +47,6 @@
# com.sun.management.enableThreadContentionMonitoring
#####################################################################
-# SNMP Management Properties
-#####################################################################
-#
-# If the system property -Dcom.sun.management.snmp.port=<port-number>
-# is set then
-# - The SNMP agent (with the Java virtual machine MIB) is started
-# that listens on the specified port for incoming SNMP requests.
-# - the following properties for read for SNMP management.
-#
-# The configuration can be specified only at startup time.
-# Later changes to the above system property (e.g. via setProperty method), this
-# config file, or the ACL file has no effect to the running SNMP agent.
-#
-
-#
-# ##################### SNMP Trap Port #########################
-#
-# com.sun.management.snmp.trap=<trap-destination-port-number>
-# Specifies the remote port number at which managers are expected
-# to listen for trap. For each host defined in the ACL file,
-# the SNMP agent will send traps at <host>:<trap-destination-port-number>
-# Default for this property is 162.
-#
-
-# To set port for sending traps to a different port use following line
-# com.sun.management.snmp.trap=<trap-destination-port-number>
-
-#
-# ################ SNMP listen interface #########################
-#
-# com.sun.management.snmp.interface=<InetAddress>
-# Specifies the local interface on which the SNMP agent will bind.
-# This is usefull when running on machines which have several
-# interfaces defined. It makes it possible to listen to a specific
-# subnet accessible through that interface.
-# Default for this property is "localhost".
-#
-# The format of the value for that property is any string accepted
-# by java.net.InetAddress.getByName(String).
-#
-
-# For restricting the port on which SNMP agent listens use following line
-# com.sun.management.snmp.interface=<InetAddress>
-
-#
-# #################### SNMP ACL file #########################
-#
-# com.sun.management.snmp.acl=true|false
-# Default for this property is true. (Case for true/false ignored)
-# If this property is specified as false then the ACL file
-# is not checked: all manager hosts are allowed all access.
-#
-
-# For SNMP without checking ACL file uncomment the following line
-# com.sun.management.snmp.acl=false
-
-#
-# com.sun.management.snmp.acl.file=filepath
-# Specifies location for ACL file
-# This is optional - default location is
-# $JRE/conf/management/snmp.acl
-#
-# If the property "com.sun.management.snmp.acl" is set to false,
-# then this property and the ACL file are ignored.
-# Otherwise the ACL file must exist and be in the valid format.
-# If the ACL file is empty or non existent then no access is allowed.
-#
-# The SNMP agent will read the ACL file at startup time.
-# Modification to the ACL file has no effect to any running SNMP
-# agents which read that ACL file at startup.
-#
-
-# For a non-default acl file location use following line
-# com.sun.management.snmp.acl.file=filepath
-
-#####################################################################
# RMI Management Properties
#####################################################################
#
--- a/test/jdk/sun/management/windows/README Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/sun/management/windows/README Mon Apr 09 08:34:30 2018 -0700
@@ -5,7 +5,6 @@
The tool is used by regression tests in the following directories :-
test/sun/management/jmxremote/bootstrap
-test/sun/management/snmp/bootstrap
The tests in these directories create password or ACL files that need to
be "secured" (meaning that only the owner should have access to the
--- a/test/jdk/sun/security/mscapi/KeyStoreCompatibilityMode.java Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/sun/security/mscapi/KeyStoreCompatibilityMode.java Mon Apr 09 08:34:30 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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,8 +22,15 @@
*/
/**
- * @see KeyStoreCompatibilityMode.sh
- */
+ * @test
+ * @bug 6324294 6931562 8180570
+ * @requires os.family == "windows"
+ * @run main KeyStoreCompatibilityMode
+ * @run main/othervm -Dsun.security.mscapi.keyStoreCompatibilityMode=true KeyStoreCompatibilityMode
+ * @run main/othervm -Dsun.security.mscapi.keyStoreCompatibilityMode=false KeyStoreCompatibilityMode -disable
+ * @summary Confirm that a null stream or password is not permitted when
+ * compatibility mode is enabled (and vice versa).
+*/
import java.io.*;
import java.security.Provider;
--- a/test/jdk/sun/security/mscapi/KeyStoreCompatibilityMode.sh Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# 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 6324294 6931562
-# @requires os.family == "windows"
-# @run shell KeyStoreCompatibilityMode.sh
-# @summary Confirm that a null stream or password is not permitted when
-# compatibility mode is enabled (and vice versa).
-
-OS=`uname -s`
-case "$OS" in
- Windows* | CYGWIN* )
-
- # 'uname -m' does not give us enough information -
- # should rely on $PROCESSOR_IDENTIFIER (as is done in Defs-windows.gmk),
- # but JTREG does not pass this env variable when executing a shell script.
- #
- # execute test program - rely on it to exit if platform unsupported
-
- ${TESTJAVA}/bin/javac -d . ${TESTSRC}\\KeyStoreCompatibilityMode.java
-
- # mode implicitly enabled
- ${TESTJAVA}/bin/java ${TESTVMOPTS} KeyStoreCompatibilityMode
-
- # mode explicitly enabled
- ${TESTJAVA}/bin/java ${TESTVMOPTS} \
- -Dsun.security.mscapi.keyStoreCompatibilityMode="true" \
- KeyStoreCompatibilityMode
-
- # mode explicitly disabled
- ${TESTJAVA}/bin/java ${TESTVMOPTS} \
- -Dsun.security.mscapi.keyStoreCompatibilityMode="false" \
- KeyStoreCompatibilityMode -disable
-
- exit
- ;;
-
- * )
- echo "This test is not intended for '$OS' - passing test"
- exit 0
- ;;
-esac
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/security/mscapi/KeytoolChangeAlias.java Mon Apr 09 08:34:30 2018 -0700
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 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.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import jdk.test.lib.SecurityTools;
+
+import java.security.KeyStore;
+
+/*
+ * @test
+ * @bug 6415696 6931562 8180570
+ * @requires os.family == "windows"
+ * @library /test/lib
+ * @library /test/jdk/java/security/testlibrary
+ * @summary Test "keytool -changealias" using the Microsoft CryptoAPI provider.
+ */
+public class KeytoolChangeAlias {
+ public static void main(String[] args) throws Exception {
+
+ KeyStore ks = KeyStore.getInstance("Windows-MY");
+ ks.load(null, null);
+
+ try {
+ ks.setCertificateEntry("246810", CertUtils.getCertFromFile("246810.cer"));
+
+ if (ks.containsAlias("13579")) {
+ ks.deleteEntry("13579");
+ }
+
+ int before = ks.size();
+
+ ks.store(null, null); // no-op, but let's do it before a keytool command
+
+ SecurityTools.keytool("-changealias",
+ "-storetype", "Windows-My",
+ "-alias", "246810",
+ "-destalias", "13579").shouldHaveExitValue(0);
+
+ ks.load(null, null);
+
+ if (ks.size() != before) {
+ throw new Exception("error: unexpected number of entries in the "
+ + "Windows-MY store. Before: " + before
+ + ". After: " + ks.size());
+ }
+
+ if (!ks.containsAlias("13579")) {
+ throw new Exception("error: cannot find the new alias name"
+ + " in the Windows-MY store");
+ }
+ } finally {
+ ks.deleteEntry("13579");
+ ks.deleteEntry("246810");
+ ks.store(null, null);
+ }
+ }
+}
--- a/test/jdk/sun/security/mscapi/KeytoolChangeAlias.sh Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,135 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# 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 6415696 6931562
-# @requires os.family == "windows"
-# @run shell KeytoolChangeAlias.sh
-# @summary Test "keytool -changealias" using the Microsoft CryptoAPI provider.
-
-# set a few environment variables so that the shell-script can run stand-alone
-# in the source directory
-if [ "${TESTSRC}" = "" ] ; then
- TESTSRC="."
-fi
-
-if [ "${TESTCLASSES}" = "" ] ; then
- TESTCLASSES="."
-fi
-
-if [ "${TESTJAVA}" = "" ] ; then
- echo "TESTJAVA not set. Test cannot execute."
- echo "FAILED!!!"
- exit 1
-fi
-
-OS=`uname -s`
-case "$OS" in
- Windows* | CYGWIN* )
-
- # 'uname -m' does not give us enough information -
- # should rely on $PROCESSOR_IDENTIFIER (as is done in Defs-windows.gmk),
- # but JTREG does not pass this env variable when executing a shell script.
- #
- # execute test program - rely on it to exit if platform unsupported
-
- echo "Creating the alias '246810' in the Windows-My store..."
- ${TESTJAVA}/bin/keytool ${TESTTOOLVMOPTS} \
- -import \
- -storetype Windows-My \
- -file ${TESTSRC}/246810.cer \
- -alias 246810 \
- -noprompt
-
- if [ $? -ne 0 ] ; then
- exit $?
- fi
-
- echo "Removing the alias '13579', if it is already present..."
- ${TESTJAVA}/bin/keytool ${TESTTOOLVMOPTS} \
- -list \
- -storetype Windows-My \
- -alias 13579 > /dev/null 2>&1
-
- if [ $? ] ; then
- ${TESTJAVA}/bin/keytool ${TESTTOOLVMOPTS} \
- -delete \
- -storetype Windows-My \
- -alias 13579 \
- -noprompt
- fi
-
- echo "Counting the entries in the store..."
- count=`${TESTJAVA}/bin/keytool ${TESTTOOLVMOPTS} -list -storetype Windows-My | wc -l`
- before=$count
-
- echo "Changing the alias name from '246810' to '13579'..."
-
- ${TESTJAVA}/bin/keytool ${TESTTOOLVMOPTS} \
- -changealias \
- -storetype Windows-My \
- -alias 246810 \
- -destalias 13579
-
- if [ $? -ne 0 ] ; then
- exit $?
- fi
-
- echo "Re-counting the entries in the store..."
- count=`${TESTJAVA}/bin/keytool ${TESTTOOLVMOPTS} -list -storetype Windows-My | wc -l`
- after=$count
-
- if [ ! $before = $after ]; then
- echo "error: unexpected number of entries in the Windows-MY store"
- exit 101
- fi
-
- echo "Confirming that the new alias is present..."
- ${TESTJAVA}/bin/keytool ${TESTTOOLVMOPTS} \
- -list \
- -storetype Windows-My \
- -alias 13579 > /dev/null 2>&1
-
- if [ $? -ne 0 ] ; then
- echo "error: cannot find the new alias name in the Windows-MY store"
- exit 102
- fi
-
- echo "Removing the new alias '13579'..."
- ${TESTJAVA}/bin/keytool ${TESTTOOLVMOPTS} \
- -delete \
- -storetype Windows-My \
- -alias 13579 > /dev/null 2>&1
-
- echo done.
- exit 0
- ;;
-
- * )
- echo "This test is not intended for '$OS' - passing test"
- exit 0
- ;;
-esac
--- a/test/jdk/sun/security/mscapi/PublicKeyInterop.java Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/sun/security/mscapi/PublicKeyInterop.java Mon Apr 09 08:34:30 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 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,13 +22,19 @@
*/
/**
- * @see PublicKeyInterop.sh
+ * @test
+ * @bug 6888925 8180570
+ * @summary SunMSCAPI's Cipher can't use RSA public keys obtained from other sources.
+ * @requires os.family == "windows"
+ * @library /test/lib
+ * @modules java.base/sun.security.util
*/
import java.security.*;
import java.util.*;
import javax.crypto.*;
+import jdk.test.lib.SecurityTools;
import sun.security.util.HexDumpEncoder;
/*
@@ -38,12 +44,31 @@
public class PublicKeyInterop {
public static void main(String[] arg) throws Exception {
+
+ SecurityTools.keytool("-genkeypair",
+ "-storetype", "Windows-My",
+ "-keyalg", "RSA",
+ "-alias", "6888925",
+ "-dname", "cn=6888925,c=US",
+ "-noprompt").shouldHaveExitValue(0);
+
+ try {
+ run();
+ } finally {
+ KeyStore ks = KeyStore.getInstance("Windows-MY");
+ ks.load(null, null);
+ ks.deleteEntry("6888925");
+ ks.store(null, null);
+ }
+ }
+
+ static void run() throws Exception {
+
KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null, null);
System.out.println("Loaded keystore: Windows-MY");
- PublicKey myPuKey =
- (PublicKey) ks.getCertificate("6888925").getPublicKey();
+ PublicKey myPuKey = ks.getCertificate("6888925").getPublicKey();
System.out.println("Public key is a " + myPuKey.getClass().getName());
PrivateKey myPrKey = (PrivateKey) ks.getKey("6888925", null);
System.out.println("Private key is a " + myPrKey.getClass().getName());
--- a/test/jdk/sun/security/mscapi/PublicKeyInterop.sh Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# 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 6888925
-# @requires os.family == "windows"
-# @run shell PublicKeyInterop.sh
-# @summary SunMSCAPI's Cipher can't use RSA public keys obtained from other
-# sources.
-#
-
-# set a few environment variables so that the shell-script can run stand-alone
-# in the source directory
-if [ "${TESTSRC}" = "" ] ; then
- TESTSRC="."
-fi
-
-if [ "${TESTCLASSES}" = "" ] ; then
- TESTCLASSES="."
-fi
-
-if [ "${TESTJAVA}" = "" ] ; then
- echo "TESTJAVA not set. Test cannot execute."
- echo "FAILED!!!"
- exit 1
-fi
-
-OS=`uname -s`
-case "$OS" in
- Windows* | CYGWIN* )
-
- echo "Creating a temporary RSA keypair in the Windows-My store..."
- ${TESTJAVA}/bin/keytool ${TESTTOOLVMOPTS} \
- -genkeypair \
- -storetype Windows-My \
- -keyalg RSA \
- -alias 6888925 \
- -dname "cn=6888925,c=US" \
- -noprompt
-
- echo
- echo "Running the test..."
- ${TESTJAVA}/bin/javac --add-exports java.base/sun.security.util=ALL-UNNAMED \
- ${TESTTOOLVMOPTS} ${TESTJAVACOPTS} -d . ${TESTSRC}\\PublicKeyInterop.java
- ${TESTJAVA}/bin/java --add-exports java.base/sun.security.util=ALL-UNNAMED \
- ${TESTVMOPTS} PublicKeyInterop
-
- rc=$?
-
- echo
- echo "Removing the temporary RSA keypair from the Windows-My store..."
- ${TESTJAVA}/bin/keytool ${TESTTOOLVMOPTS} \
- -delete \
- -storetype Windows-My \
- -alias 6888925
-
- echo done.
- exit $rc
- ;;
-
- * )
- echo "This test is not intended for '$OS' - passing test"
- exit 0
- ;;
-esac
--- a/test/jdk/sun/security/mscapi/RSAEncryptDecrypt.java Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/sun/security/mscapi/RSAEncryptDecrypt.java Mon Apr 09 08:34:30 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, 2007, 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
@@ -23,7 +23,12 @@
/**
- * @see RSAEncryptDecrypt.sh
+ * @test
+ * @bug 6457422 6931562 8180570
+ * @summary Confirm that plaintext can be encrypted and then decrypted using the
+ * RSA cipher in the SunMSCAPI crypto provider. NOTE: The RSA cipher is
+ * absent from the SunMSCAPI provider in OpenJDK builds.
+ * @requires os.family == "windows"
*/
import javax.crypto.Cipher;
--- a/test/jdk/sun/security/mscapi/RSAEncryptDecrypt.sh Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# 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 6457422 6931562
-# @requires os.family == "windows"
-# @run shell RSAEncryptDecrypt.sh
-# @summary Confirm that plaintext can be encrypted and then decrypted using the
-# RSA cipher in the SunMSCAPI crypto provider. NOTE: The RSA cipher is
-# absent from the SunMSCAPI provider in OpenJDK builds.
-
-# set a few environment variables so that the shell-script can run stand-alone
-# in the source directory
-if [ "${TESTSRC}" = "" ] ; then
- TESTSRC="."
-fi
-
-if [ "${TESTCLASSES}" = "" ] ; then
- TESTCLASSES="."
-fi
-
-if [ "${TESTJAVA}" = "" ] ; then
- echo "TESTJAVA not set. Test cannot execute."
- echo "FAILED!!!"
- exit 1
-fi
-
-
-OS=`uname -s`
-case "$OS" in
- Windows* | CYGWIN* )
-
- #
- # Workaround for 6449799
- #
- if [ "${SystemDrive}" = "" ]; then
- SystemRoot="`dosname "${SystemRoot}"`"
- export SystemRoot
- SystemDrive="`echo ${SystemRoot} | cut -d'/' -f1`"
- export SystemDrive
- fi
-
- # 'uname -m' does not give us enough information -
- # should rely on $PROCESSOR_IDENTIFIER (as is done in
- # Defs-windows.gmk), but JTREG does not pass this env variable
- # when executing a shell script.
- #
- # execute test program - rely on it to exit if platform
- # unsupported
-
- ${TESTJAVA}/bin/javac -d . ${TESTSRC}\\RSAEncryptDecrypt.java
- ${TESTJAVA}/bin/java ${TESTVMOPTS} RSAEncryptDecrypt
- exit
- ;;
-
- * )
- echo "This test is not intended for '$OS' - passing test"
- exit 0
- ;;
-esac
-
--- a/test/jdk/sun/security/mscapi/ShortRSAKey1024.sh Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,116 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2012, 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.
-#
-# 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 7106773
-# @summary 512 bits RSA key cannot work with SHA384 and SHA512
-# @requires os.family == "windows"
-# @run shell ShortRSAKey1024.sh 1024
-# @run shell ShortRSAKey1024.sh 768
-# @run shell ShortRSAKey1024.sh 512
-
-# set a few environment variables so that the shell-script can run stand-alone
-# in the source directory
-if [ "${TESTSRC}" = "" ] ; then
- TESTSRC="."
-fi
-
-if [ "${TESTCLASSES}" = "" ] ; then
- TESTCLASSES="."
-fi
-
-if [ "${TESTJAVA}" = "" ] ; then
- echo "TESTJAVA not set. Test cannot execute."
- echo "FAILED!!!"
- exit 1
-fi
-
-OS=`uname -s`
-case "$OS" in
- AIX | CYGWIN* | Darwin | Linux | SunOS )
- FS="/"
- ;;
- Windows_* )
- FS="\\"
- ;;
-esac
-
-BITS=$1
-
-case "$OS" in
- Windows* | CYGWIN* )
-
- echo "Removing the keypair if it already exists (for unknown reason)..."
- ${TESTJAVA}${FS}bin${FS}keytool ${TESTTOOLVMOPTS} \
- -delete \
- -storetype Windows-My \
- -debug \
- -alias 7106773.$BITS
-
- echo "Creating a temporary RSA keypair in the Windows-My store..."
- ${TESTJAVA}${FS}bin${FS}keytool ${TESTTOOLVMOPTS} \
- -genkeypair \
- -storetype Windows-My \
- -keyalg RSA \
- -alias 7106773.$BITS \
- -keysize $BITS \
- -dname "cn=localhost,c=US" \
- -debug \
- -noprompt
-
- if [ "$?" -ne "0" ]; then
- echo "Unable to generate key pair in Windows-My keystore"
- exit 1
- fi
-
- echo
- echo "Running the test..."
- ${TESTJAVA}${FS}bin${FS}javac --add-exports java.base/sun.security.util=ALL-UNNAMED \
- ${TESTTOOLVMOPTS} ${TESTJAVACOPTS} -d . \
- ${TESTSRC}${FS}ShortRSAKeyWithinTLS.java
- ${TESTJAVA}${FS}bin${FS}java --add-exports java.base/sun.security.util=ALL-UNNAMED \
- ${TESTVMOPTS} ShortRSAKeyWithinTLS 7106773.$BITS $BITS \
- TLSv1.2 TLS_DHE_RSA_WITH_AES_128_CBC_SHA
-
- rc=$?
-
- echo
- echo "Removing the temporary RSA keypair from the Windows-My store..."
- ${TESTJAVA}${FS}bin${FS}keytool ${TESTTOOLVMOPTS} \
- -delete \
- -storetype Windows-My \
- -debug \
- -alias 7106773.$BITS
-
- echo "Done".
- exit $rc
- ;;
-
- * )
- echo "This test is not intended for '$OS' - passing test"
- exit 0
- ;;
-esac
--- a/test/jdk/sun/security/mscapi/ShortRSAKeyWithinTLS.java Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/sun/security/mscapi/ShortRSAKeyWithinTLS.java Mon Apr 09 08:34:30 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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
@@ -21,15 +21,30 @@
* questions.
*/
+/*
+ * @test
+ * @bug 7106773 8180570
+ * @summary 512 bits RSA key cannot work with SHA384 and SHA512
+ * @requires os.family == "windows"
+ * @modules java.base/sun.security.util
+ * java.base/sun.security.tools.keytool
+ * java.base/sun.security.x509
+ * @run main ShortRSAKeyWithinTLS 1024
+ * @run main ShortRSAKeyWithinTLS 768
+ * @run main ShortRSAKeyWithinTLS 512
+ */
import java.io.*;
import java.net.*;
+import java.security.cert.Certificate;
import java.util.*;
import java.security.*;
import java.security.cert.*;
import javax.net.*;
import javax.net.ssl.*;
+import sun.security.tools.keytool.CertAndKeyGen;
import sun.security.util.KeyUtil;
+import sun.security.x509.X500Name;
public class ShortRSAKeyWithinTLS {
@@ -217,28 +232,37 @@
private static String clientProtocol = null;
private static String clientCiperSuite = null;
- private static void parseArguments(String[] args) {
- keyAlias = args[0];
- keySize = Integer.parseInt(args[1]);
-
- if (args.length > 2) {
- clientProtocol = args[2];
- }
-
- if (args.length > 3) {
- clientCiperSuite = args[3];
- }
- }
-
public static void main(String[] args) throws Exception {
if (debug) {
System.setProperty("javax.net.debug", "all");
}
- // Get the customized arguments.
- parseArguments(args);
+ keyAlias = "7106773." + args[0];
+ keySize = Integer.parseInt(args[0]);
+
+ KeyStore ks = KeyStore.getInstance("Windows-MY");
+ ks.load(null, null);
+ if (ks.containsAlias(keyAlias)) {
+ ks.deleteEntry(keyAlias);
+ }
+
+ CertAndKeyGen gen = new CertAndKeyGen("RSA", "SHA256withRSA");
+ gen.generate(keySize);
- new ShortRSAKeyWithinTLS();
+ ks.setKeyEntry(keyAlias, gen.getPrivateKey(), null,
+ new Certificate[] {
+ gen.getSelfCertificate(new X500Name("cn=localhost,c=US"), 100)
+ });
+
+ clientProtocol = "TLSv1.2";
+ clientCiperSuite = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA";
+
+ try {
+ new ShortRSAKeyWithinTLS();
+ } finally {
+ ks.deleteEntry(keyAlias);
+ ks.store(null, null);
+ }
}
Thread clientThread = null;
--- a/test/jdk/sun/security/mscapi/SignUsingSHA2withRSA.java Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/sun/security/mscapi/SignUsingSHA2withRSA.java Mon Apr 09 08:34:30 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 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,10 +22,19 @@
*/
/**
- * @see SignUsingSHA2withRSA.sh
+ * @test
+ * @bug 6753664 8180570
+ * @summary Support SHA256 (and higher) in SunMSCAPI
+ * @requires os.family == "windows"
+ * @modules java.base/sun.security.tools.keytool
+ * java.base/sun.security.x509
*/
+import sun.security.tools.keytool.CertAndKeyGen;
+import sun.security.x509.X500Name;
+
import java.security.*;
+import java.security.cert.Certificate;
import java.util.*;
public class SignUsingSHA2withRSA {
@@ -37,6 +46,29 @@
private static List<byte[]> generatedSignatures = new ArrayList<>();
public static void main(String[] args) throws Exception {
+ KeyStore ks = KeyStore.getInstance("Windows-MY");
+ ks.load(null, null);
+ if (ks.containsAlias("6753664")) {
+ ks.deleteEntry("6753664");
+ }
+
+ CertAndKeyGen gen = new CertAndKeyGen("RSA", "SHA256withRSA");
+ gen.generate(2048);
+
+ ks.setKeyEntry("6753664", gen.getPrivateKey(), null,
+ new Certificate[] {
+ gen.getSelfCertificate(new X500Name("cn=localhost,c=US"), 100)
+ });
+
+ try {
+ run();
+ } finally {
+ ks.deleteEntry("6753664");
+ ks.store(null, null);
+ }
+ }
+
+ static void run() throws Exception {
Provider[] providers = Security.getProviders("Signature.SHA256withRSA");
if (providers == null) {
--- a/test/jdk/sun/security/mscapi/SignUsingSHA2withRSA.sh Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2011, 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
-# 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 6753664
-# @requires os.family == "windows"
-# @run shell SignUsingSHA2withRSA.sh
-# @summary Support SHA256 (and higher) in SunMSCAPI
-
-# set a few environment variables so that the shell-script can run stand-alone
-# in the source directory
-if [ "${TESTSRC}" = "" ] ; then
- TESTSRC="."
-fi
-
-if [ "${TESTCLASSES}" = "" ] ; then
- TESTCLASSES="."
-fi
-
-if [ "${TESTJAVA}" = "" ] ; then
- echo "TESTJAVA not set. Test cannot execute."
- echo "FAILED!!!"
- exit 1
-fi
-
-OS=`uname -s`
-case "$OS" in
- Windows* | CYGWIN* )
-
- echo "Creating a temporary RSA keypair in the Windows-My store..."
- ${TESTJAVA}/bin/keytool \
- -genkeypair \
- -storetype Windows-My \
- -keyalg RSA \
- -alias 6753664 \
- -dname "cn=6753664,c=US" \
- -noprompt
-
- echo
- echo "Running the test..."
- ${TESTJAVA}/bin/javac -d . ${TESTSRC}\\SignUsingSHA2withRSA.java
- ${TESTJAVA}/bin/java ${TESTVMOPTS} SignUsingSHA2withRSA
-
- rc=$?
-
- echo
- echo "Removing the temporary RSA keypair from the Windows-My store..."
- ${TESTJAVA}/bin/keytool \
- -delete \
- -storetype Windows-My \
- -alias 6753664
-
- echo done.
- exit $rc
- ;;
-
- * )
- echo "This test is not intended for '$OS' - passing test"
- exit 0
- ;;
-esac
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/security/mscapi/nonUniqueAliases/NonUniqueAliases.java Mon Apr 09 08:34:30 2018 -0700
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 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.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @ignore Uses certutil.exe that isn't guaranteed to be installed
+ * @bug 6483657 8154113
+ * @requires os.family == "windows"
+ * @library /test/lib
+ * @summary Test "keytool -list" displays correctly same named certificates
+ */
+
+import jdk.test.lib.process.ProcessTools;
+
+import java.security.KeyStore;
+import java.util.Collections;
+
+public class NonUniqueAliases {
+ public static void main(String[] args) throws Throwable {
+
+ try {
+ String testSrc = System.getProperty("test.src", ".");
+
+ // removing the alias NonUniqueName if it already exists
+ ProcessTools.executeCommand("certutil", "-user", "-delstore", "MY",
+ "NonUniqueName");
+
+ // Importing 1st certificate into MY keystore using certutil tool
+ ProcessTools.executeCommand("certutil", "-user", "-addstore", "MY",
+ testSrc + "/nonUniq1.pem");
+
+ // Importing 2nd certificate into MY keystore using certutil tool
+ ProcessTools.executeCommand("certutil", "-user", "-addstore", "MY",
+ testSrc + "/nonUniq2.pem");
+
+ // Now we have 2
+ checkCount(1, 1);
+
+ ProcessTools.executeCommand("certutil", "-user", "-delstore", "MY",
+ "NonUniqueName");
+
+ // Now we have 2
+ checkCount(0, 0);
+ } finally {
+ ProcessTools.executeCommand("certutil", "-user", "-delstore", "MY",
+ "NonUniqueName");
+ }
+ }
+
+ static void checkCount(int c0, int c1) throws Exception {
+
+ KeyStore ks = KeyStore.getInstance("Windows-MY");
+ ks.load(null, null);
+
+ int count0 = 0, count1 = 0;
+ for (String alias : Collections.list(ks.aliases())) {
+ if (alias.equals("NonUniqueName")) {
+ count0++;
+ }
+ if (alias.equals("NonUniqueName (1)")) {
+ count1++;
+ }
+ }
+ if (count0 != c0) {
+ throw new Exception("error: unexpected number of entries ("
+ + count0 + ") in the Windows-MY store");
+ }
+ if (count1 != c1) {
+ throw new Exception("error: unexpected number of entries ("
+ + count1 + ") in the Windows-MY store");
+ }
+ }
+}
--- a/test/jdk/sun/security/mscapi/nonUniqueAliases/NonUniqueAliases.sh Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 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
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-
-# @test
-# @ignore Uses certutil.exe that isn't guaranteed to be installed
-# @bug 6483657
-# @requires os.family == "windows"
-# @run shell NonUniqueAliases.sh
-# @summary Test "keytool -list" displays correcly same named certificates
-
-# set a few environment variables so that the shell-script can run stand-alone
-# in the source directory
-if [ "${TESTSRC}" = "" ] ; then
- TESTSRC="."
-fi
-
-if [ "${TESTCLASSES}" = "" ] ; then
- TESTCLASSES="."
-fi
-
-if [ "${TESTJAVA}" = "" ] ; then
- echo "TESTJAVA not set. Test cannot execute."
- echo "FAILED!!!"
- exit 1
-fi
-
-OS=`uname -s`
-case "$OS" in
- Windows* | CYGWIN* )
-
- # 'uname -m' does not give us enough information -
- # should rely on $PROCESSOR_IDENTIFIER (as is done in Defs-windows.gmk),
- # but JTREG does not pass this env variable when executing a shell script.
- #
- # execute test program - rely on it to exit if platform unsupported
-
- echo "removing the alias NonUniqueName if it already exists"
- certutil -user -delstore MY NonUniqueName
-
- echo "Importing 1st certificate into MY keystore using certutil tool"
- certutil -user -addstore MY ${TESTSRC}/nonUniq1.pem
-
- echo "Importing 2nd certificate into MY keystore using certutil tool"
- certutil -user -addstore MY ${TESTSRC}/nonUniq2.pem
-
- echo "Listing certificates with keytool"
- ${TESTJAVA}/bin/keytool ${TESTTOOLVMOPTS} -list -storetype Windows-My
-
- echo "Counting expected entries"
- count0=`${TESTJAVA}/bin/keytool ${TESTTOOLVMOPTS} -list -storetype Windows-My | grep 'NonUniqueName,' | wc -l`
-
- if [ ! $count0 = 1 ]; then
- echo "error: unexpected number of entries ($count0) in the Windows-MY store"
- certutil -user -delstore MY NonUniqueName
- exit 115
- fi
-
- echo "Counting expected entries"
- count1=`${TESTJAVA}/bin/keytool ${TESTTOOLVMOPTS} -list -storetype Windows-My | grep 'NonUniqueName (1),' | wc -l`
-
- if [ ! $count1 = 1 ]; then
- echo "error: unexpected number of entries ($count1) in the Windows-MY store"
- certutil -user -delstore MY NonUniqueName
- exit 116
- fi
-
- echo "Cleaning up"
- certutil -user -delstore MY NonUniqueName
-
- exit 0
- ;;
-
- * )
- echo "This test is not intended for '$OS' - passing test"
- exit 0
- ;;
-esac
--- a/test/jdk/sun/util/calendar/zi/tzdata/VERSION Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/sun/util/calendar/zi/tzdata/VERSION Mon Apr 09 08:34:30 2018 -0700
@@ -21,4 +21,4 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-tzdata2018c
+tzdata2018d
--- a/test/jdk/sun/util/calendar/zi/tzdata/africa Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/sun/util/calendar/zi/tzdata/africa Mon Apr 09 08:34:30 2018 -0700
@@ -138,13 +138,13 @@
# Cape Verde / Cabo Verde
#
+# From Paul Eggert (2018-02-16):
# Shanks gives 1907 for the transition to +02.
-# Perhaps the 1911-05-26 Portuguese decree
-# https://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
-# merely made it official?
+# For now, ignore that and follow the 1911-05-26 Portuguese decree
+# (see Europe/Lisbon).
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Atlantic/Cape_Verde -1:34:04 - LMT 1907 # Praia
+Zone Atlantic/Cape_Verde -1:34:04 - LMT 1912 Jan 01 2:00u # Praia
-2:00 - -02 1942 Sep
-2:00 1:00 -01 1945 Oct 15
-2:00 - -02 1975 Nov 25 2:00
@@ -393,15 +393,34 @@
# See Africa/Abidjan.
# Ghana
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+
+# From Paul Eggert (2018-01-30):
# Whitman says DST was observed from 1931 to "the present";
-# Shanks & Pottenger say 1936 to 1942;
-# and September 1 to January 1 is given by:
-# Scott Keltie J, Epstein M (eds), The Statesman's Year-Book,
-# 57th ed. Macmillan, London (1920), OCLC 609408015, pp xxviii.
-# For lack of better info, assume DST was observed from 1920 to 1942.
-Rule Ghana 1920 1942 - Sep 1 0:00 0:20 GHST
-Rule Ghana 1920 1942 - Dec 31 0:00 0 GMT
+# Shanks & Pottenger say 1936 to 1942 with 20 minutes of DST,
+# with transitions on 09-01 and 12-31 at 00:00.
+# Page 33 of Parish GCB, Colonial Reports - Annual. No. 1066. Gold
+# Coast. Report for 1919. (March 1921), OCLC 784024077
+# http://libsysdigi.library.illinois.edu/ilharvest/africana/books2011-05/5530214/5530214_1919/5530214_1919_opt.pdf
+# lists the Determination of the Time Ordinance, 1919, No. 18,
+# "to advance the time observed locally by the space of twenty minutes
+# during the last four months of each year; the object in view being
+# to extend during those months the period of daylight-time available
+# for evening recreation after office hours."
+# Vanessa Ogle, The Global Transformation of Time, 1870-1950 (2015), p 33,
+# writes "In 1919, the Gold Coast (Ghana as of 1957) made Greenwich
+# time its legal time and simultaneously legalized a summer time of
+# UTC - 00:20 minutes from March to October."; a footnote lists
+# the ordinance as being dated 1919-11-24.
+# The Crown Colonist, Volume 12 (1942), p 176, says "the Government
+# intend advancing Gold Coast time half an hour ahead of G.M.T.
+# The actual date of the alteration has not yet been announced."
+# These sources are incomplete and contradictory. Possibly what is
+# 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 Ghana 1920 1942 - Sep 1 0:00 0:20 -
+Rule Ghana 1920 1942 - Dec 31 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Accra -0:00:52 - LMT 1918
0:00 Ghana GMT/+0020
@@ -411,13 +430,13 @@
# Guinea-Bissau
#
+# From Paul Eggert (2018-02-16):
# Shanks gives 1911-05-26 for the transition to WAT,
# evidently confusing the date of the Portuguese decree
-# https://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
-# with the date that it took effect, namely 1912-01-01.
+# (see Europe/Lisbon) with the date that it took effect.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1
+Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1 1:00u
-1:00 - -01 1975
0:00 - GMT
@@ -613,9 +632,9 @@
# at 2am (or 02:00) local time..."
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Mauritius 1982 only - Oct 10 0:00 1:00 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 S
+Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 -
Rule Mauritius 2009 only - Mar lastSun 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis
@@ -1060,6 +1079,8 @@
# São Tomé and Príncipe
+# See Europe/Lisbon for info about the 1912 transition.
+
# From Steffen Thorsen (2018-01-08):
# Multiple sources tell that São Tomé changed from UTC to UTC+1 as
# they entered the year 2018.
@@ -1068,7 +1089,7 @@
# http://www.mnec.gov.st/index.php/publicacoes/documentos/file/90-decreto-lei-n-25-2017
Zone Africa/Sao_Tome 0:26:56 - LMT 1884
- -0:36:45 - LMT 1912 # Lisbon Mean Time
+ -0:36:45 - LMT 1912 Jan 1 00:00u # Lisbon MT
0:00 - GMT 2018 Jan 1 01:00
1:00 - WAT
--- a/test/jdk/sun/util/calendar/zi/tzdata/antarctica Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/sun/util/calendar/zi/tzdata/antarctica Mon Apr 09 08:34:30 2018 -0700
@@ -98,7 +98,8 @@
8:00 - +08 2011 Oct 28 2:00
11:00 - +11 2012 Feb 21 17:00u
8:00 - +08 2016 Oct 22
- 11:00 - +11
+ 11:00 - +11 2018 Mar 11 4:00
+ 8:00 - +08
Zone Antarctica/Davis 0 - -00 1957 Jan 13
7:00 - +07 1964 Nov
0 - -00 1969 Feb
--- a/test/jdk/sun/util/calendar/zi/tzdata/asia Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/sun/util/calendar/zi/tzdata/asia Mon Apr 09 08:34:30 2018 -0700
@@ -92,13 +92,13 @@
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 -
-Rule E-EurAsia 1981 max - Mar lastSun 0:00 1:00 S
+Rule E-EurAsia 1981 max - Mar lastSun 0:00 1:00 -
Rule E-EurAsia 1979 1995 - Sep lastSun 0:00 0 -
Rule E-EurAsia 1996 max - Oct lastSun 0:00 0 -
-Rule RussiaAsia 1981 1984 - Apr 1 0:00 1:00 S
+Rule RussiaAsia 1981 1984 - Apr 1 0:00 1:00 -
Rule RussiaAsia 1981 1983 - Oct 1 0:00 0 -
Rule RussiaAsia 1984 1995 - Sep lastSun 2:00s 0 -
-Rule RussiaAsia 1985 2010 - Mar lastSun 2:00s 1:00 S
+Rule RussiaAsia 1985 2010 - Mar lastSun 2:00s 1:00 -
Rule RussiaAsia 1996 2010 - Oct lastSun 2:00s 0 -
# Afghanistan
@@ -133,7 +133,7 @@
# (brief)
# http://www.worldtimezone.com/dst_news/dst_news_armenia03.html
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Armenia 2011 only - Mar lastSun 2:00s 1:00 S
+Rule Armenia 2011 only - Mar lastSun 2:00s 1:00 -
Rule Armenia 2011 only - Oct lastSun 2:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2
@@ -159,7 +159,7 @@
# http://en.apa.az/xeber_azerbaijan_abolishes_daylight_savings_ti_240862.html
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Azer 1997 2015 - Mar lastSun 4:00 1:00 S
+Rule Azer 1997 2015 - Mar lastSun 4:00 1:00 -
Rule Azer 1997 2015 - Oct lastSun 5:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Baku 3:19:24 - LMT 1924 May 2
@@ -246,7 +246,7 @@
# http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Dhaka 2009 only - Jun 19 23:00 1:00 S
+Rule Dhaka 2009 only - Jun 19 23:00 1:00 -
Rule Dhaka 2009 only - Dec 31 24:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -787,8 +787,9 @@
Rule Macau 1975 1977 - Apr Sun>=15 3:30 1:00 D
Rule Macau 1978 1980 - Apr Sun>=15 0:00 1:00 D
Rule Macau 1978 1980 - Oct Sun>=15 0:00 0 S
+# See Europe/Lisbon for info about the 1912 transition.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Macau 7:34:20 - LMT 1912 Jan 1
+Zone Asia/Macau 7:34:20 - LMT 1911 Dec 31 16:00u
8:00 Macau C%sT
@@ -1129,61 +1130,61 @@
# thirtieth day of Shahrivar.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Iran 1978 1980 - Mar 21 0:00 1:00 D
-Rule Iran 1978 only - Oct 21 0:00 0 S
-Rule Iran 1979 only - Sep 19 0:00 0 S
-Rule Iran 1980 only - Sep 23 0:00 0 S
-Rule Iran 1991 only - May 3 0:00 1:00 D
-Rule Iran 1992 1995 - Mar 22 0:00 1:00 D
-Rule Iran 1991 1995 - Sep 22 0:00 0 S
-Rule Iran 1996 only - Mar 21 0:00 1:00 D
-Rule Iran 1996 only - Sep 21 0:00 0 S
-Rule Iran 1997 1999 - Mar 22 0:00 1:00 D
-Rule Iran 1997 1999 - Sep 22 0:00 0 S
-Rule Iran 2000 only - Mar 21 0:00 1:00 D
-Rule Iran 2000 only - Sep 21 0:00 0 S
-Rule Iran 2001 2003 - Mar 22 0:00 1:00 D
-Rule Iran 2001 2003 - Sep 22 0:00 0 S
-Rule Iran 2004 only - Mar 21 0:00 1:00 D
-Rule Iran 2004 only - Sep 21 0:00 0 S
-Rule Iran 2005 only - Mar 22 0:00 1:00 D
-Rule Iran 2005 only - Sep 22 0:00 0 S
-Rule Iran 2008 only - Mar 21 0:00 1:00 D
-Rule Iran 2008 only - Sep 21 0:00 0 S
-Rule Iran 2009 2011 - Mar 22 0:00 1:00 D
-Rule Iran 2009 2011 - Sep 22 0:00 0 S
-Rule Iran 2012 only - Mar 21 0:00 1:00 D
-Rule Iran 2012 only - Sep 21 0:00 0 S
-Rule Iran 2013 2015 - Mar 22 0:00 1:00 D
-Rule Iran 2013 2015 - Sep 22 0:00 0 S
-Rule Iran 2016 only - Mar 21 0:00 1:00 D
-Rule Iran 2016 only - Sep 21 0:00 0 S
-Rule Iran 2017 2019 - Mar 22 0:00 1:00 D
-Rule Iran 2017 2019 - Sep 22 0:00 0 S
-Rule Iran 2020 only - Mar 21 0:00 1:00 D
-Rule Iran 2020 only - Sep 21 0:00 0 S
-Rule Iran 2021 2023 - Mar 22 0:00 1:00 D
-Rule Iran 2021 2023 - Sep 22 0:00 0 S
-Rule Iran 2024 only - Mar 21 0:00 1:00 D
-Rule Iran 2024 only - Sep 21 0:00 0 S
-Rule Iran 2025 2027 - Mar 22 0:00 1:00 D
-Rule Iran 2025 2027 - Sep 22 0:00 0 S
-Rule Iran 2028 2029 - Mar 21 0:00 1:00 D
-Rule Iran 2028 2029 - Sep 21 0:00 0 S
-Rule Iran 2030 2031 - Mar 22 0:00 1:00 D
-Rule Iran 2030 2031 - Sep 22 0:00 0 S
-Rule Iran 2032 2033 - Mar 21 0:00 1:00 D
-Rule Iran 2032 2033 - Sep 21 0:00 0 S
-Rule Iran 2034 2035 - Mar 22 0:00 1:00 D
-Rule Iran 2034 2035 - Sep 22 0:00 0 S
+Rule Iran 1978 1980 - Mar 21 0:00 1:00 -
+Rule Iran 1978 only - Oct 21 0:00 0 -
+Rule Iran 1979 only - Sep 19 0:00 0 -
+Rule Iran 1980 only - Sep 23 0:00 0 -
+Rule Iran 1991 only - May 3 0:00 1:00 -
+Rule Iran 1992 1995 - Mar 22 0:00 1:00 -
+Rule Iran 1991 1995 - Sep 22 0:00 0 -
+Rule Iran 1996 only - Mar 21 0:00 1:00 -
+Rule Iran 1996 only - Sep 21 0:00 0 -
+Rule Iran 1997 1999 - Mar 22 0:00 1:00 -
+Rule Iran 1997 1999 - Sep 22 0:00 0 -
+Rule Iran 2000 only - Mar 21 0:00 1:00 -
+Rule Iran 2000 only - Sep 21 0:00 0 -
+Rule Iran 2001 2003 - Mar 22 0:00 1:00 -
+Rule Iran 2001 2003 - Sep 22 0:00 0 -
+Rule Iran 2004 only - Mar 21 0:00 1:00 -
+Rule Iran 2004 only - Sep 21 0:00 0 -
+Rule Iran 2005 only - Mar 22 0:00 1:00 -
+Rule Iran 2005 only - Sep 22 0:00 0 -
+Rule Iran 2008 only - Mar 21 0:00 1:00 -
+Rule Iran 2008 only - Sep 21 0:00 0 -
+Rule Iran 2009 2011 - Mar 22 0:00 1:00 -
+Rule Iran 2009 2011 - Sep 22 0:00 0 -
+Rule Iran 2012 only - Mar 21 0:00 1:00 -
+Rule Iran 2012 only - Sep 21 0:00 0 -
+Rule Iran 2013 2015 - Mar 22 0:00 1:00 -
+Rule Iran 2013 2015 - Sep 22 0:00 0 -
+Rule Iran 2016 only - Mar 21 0:00 1:00 -
+Rule Iran 2016 only - Sep 21 0:00 0 -
+Rule Iran 2017 2019 - Mar 22 0:00 1:00 -
+Rule Iran 2017 2019 - Sep 22 0:00 0 -
+Rule Iran 2020 only - Mar 21 0:00 1:00 -
+Rule Iran 2020 only - Sep 21 0:00 0 -
+Rule Iran 2021 2023 - Mar 22 0:00 1:00 -
+Rule Iran 2021 2023 - Sep 22 0:00 0 -
+Rule Iran 2024 only - Mar 21 0:00 1:00 -
+Rule Iran 2024 only - Sep 21 0:00 0 -
+Rule Iran 2025 2027 - Mar 22 0:00 1:00 -
+Rule Iran 2025 2027 - Sep 22 0:00 0 -
+Rule Iran 2028 2029 - Mar 21 0:00 1:00 -
+Rule Iran 2028 2029 - Sep 21 0:00 0 -
+Rule Iran 2030 2031 - Mar 22 0:00 1:00 -
+Rule Iran 2030 2031 - Sep 22 0:00 0 -
+Rule Iran 2032 2033 - Mar 21 0:00 1:00 -
+Rule Iran 2032 2033 - Sep 21 0:00 0 -
+Rule Iran 2034 2035 - Mar 22 0:00 1:00 -
+Rule Iran 2034 2035 - Sep 22 0:00 0 -
#
# The following rules are approximations starting in the year 2038.
# These are the best post-2037 approximations available, given the
# restrictions of a single rule using a Gregorian-based data format.
# At some point this table will need to be extended, though quite
# possibly Iran will change the rules first.
-Rule Iran 2036 max - Mar 21 0:00 1:00 D
-Rule Iran 2036 max - Sep 21 0:00 0 S
+Rule Iran 2036 max - Mar 21 0:00 1:00 -
+Rule Iran 2036 max - Sep 21 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tehran 3:25:44 - LMT 1916
@@ -1219,17 +1220,17 @@
# https://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Iraq 1982 only - May 1 0:00 1:00 D
-Rule Iraq 1982 1984 - Oct 1 0:00 0 S
-Rule Iraq 1983 only - Mar 31 0:00 1:00 D
-Rule Iraq 1984 1985 - Apr 1 0:00 1:00 D
-Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 S
-Rule Iraq 1986 1990 - Mar lastSun 1:00s 1:00 D
+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 -
+Rule Iraq 1984 1985 - Apr 1 0:00 1:00 -
+Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 -
+Rule Iraq 1986 1990 - Mar lastSun 1:00s 1:00 -
# IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the ':01' is a typo.
# Shanks & Pottenger say Iraq did not observe DST 1992/1997; ignore this.
#
-Rule Iraq 1991 2007 - Apr 1 3:00s 1:00 D
-Rule Iraq 1991 2007 - Oct 1 3:00s 0 S
+Rule Iraq 1991 2007 - Apr 1 3:00s 1:00 -
+Rule Iraq 1991 2007 - Oct 1 3:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Baghdad 2:57:40 - LMT 1890
2:57:36 - BMT 1918 # Baghdad Mean Time?
@@ -1501,8 +1502,7 @@
# From Hideyuki Suzuki (1998-11-09):
# 'Tokyo' usually stands for the former location of Tokyo Astronomical
-# Observatory: 139 degrees 44' 40.90" E (9h 18m 58.727s),
-# 35 degrees 39' 16.0" N.
+# Observatory: 139° 44' 40.90" E (9h 18m 58.727s), 35° 39' 16.0" N.
# This data is from 'Rika Nenpyou (Chronological Scientific Tables) 1996'
# edited by National Astronomical Observatory of Japan....
# JST (Japan Standard Time) has been used since 1888-01-01 00:00 (JST).
@@ -1510,10 +1510,10 @@
# From Hideyuki Suzuki (1998-11-16):
# The ordinance No. 51 (1886) established "standard time" in Japan,
-# which stands for the time on 135 degrees E.
+# which stands for the time on 135° E.
# In the ordinance No. 167 (1895), "standard time" was renamed to "central
# standard time". And the same ordinance also established "western standard
-# time", which stands for the time on 120 degrees E.... But "western standard
+# time", which stands for the time on 120° E.... But "western standard
# time" was abolished in the ordinance No. 529 (1937). In the ordinance No.
# 167, there is no mention regarding for what place western standard time is
# standard....
@@ -1926,9 +1926,9 @@
# 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 Kyrgyz 1992 1996 - Apr Sun>=7 0:00s 1:00 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 S
+Rule Kyrgyz 1997 2005 - Mar lastSun 2:30 1:00 -
Rule Kyrgyz 1997 2004 - Oct lastSun 2:30 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Bishkek 4:58:24 - LMT 1924 May 2
@@ -2060,7 +2060,7 @@
# Malaysia
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule NBorneo 1935 1941 - Sep 14 0:00 0:20 TS # one-Third Summer
+Rule NBorneo 1935 1941 - Sep 14 0:00 0:20 -
Rule NBorneo 1935 1941 - Dec 14 0:00 0 -
#
# peninsular Malaysia
@@ -2205,7 +2205,7 @@
# http://zasag.mn/news/view/8969
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Mongol 1983 1984 - Apr 1 0:00 1:00 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,
# but McDow says the 2001 switches occurred at 02:00. Also, IATA SSIM
@@ -2222,13 +2222,13 @@
# Mongolian Government meeting has concluded today to cancel daylight
# saving time adoption in Mongolia. Source: http://zasag.mn/news/view/16192
-Rule Mongol 1985 1998 - Mar lastSun 0:00 1:00 S
+Rule Mongol 1985 1998 - Mar lastSun 0:00 1:00 -
Rule Mongol 1984 1998 - Sep lastSun 0:00 0 -
# IATA SSIM (1999-09) says Mongolia no longer observes DST.
-Rule Mongol 2001 only - Apr lastSat 2:00 1:00 S
+Rule Mongol 2001 only - Apr lastSat 2:00 1:00 -
Rule Mongol 2001 2006 - Sep lastSat 2:00 0 -
-Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 S
-Rule Mongol 2015 2016 - Mar lastSat 2:00 1:00 S
+Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 -
+Rule Mongol 2015 2016 - Mar lastSat 2:00 1:00 -
Rule Mongol 2015 2016 - Sep lastSat 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -2662,9 +2662,6 @@
# [Google translation]: "The Council also decided to start daylight
# saving in Palestine as of one o'clock on Saturday morning,
# 2016-03-26, to provide the clock 60 minutes ahead."
-#
-# From Paul Eggert (2016-03-12):
-# Predict spring transitions on March's last Saturday at 01:00 from now on.
# From Sharef Mustafa (2016-10-19):
# [T]he Palestinian cabinet decision (Mar 8th 2016) published on
@@ -2681,6 +2678,16 @@
# https://www.timeanddate.com/time/change/gaza-strip/gaza
# https://www.timeanddate.com/time/change/west-bank/hebron
+# From Sharef Mustafa (2018-03-16):
+# Palestine summer time will start on Mar 24th 2018 by advancing the
+# clock by 60 minutes as per Palestinian cabinet decision published on
+# the offical website, though the decree did not specify the exact
+# time of the time shift.
+# http://www.palestinecabinet.gov.ps/Website/AR/NDecrees/ViewFile.ashx?ID=e7a42ab7-ee23-435a-b9c8-a4f7e81f3817
+#
+# From Paul Eggert (2018-03-16):
+# For 2016 on, predict spring transitions on March's fourth Saturday at 01:00.
+
# Rule NAME FROM TO TYPE 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 -
@@ -2710,7 +2717,7 @@
Rule Palestine 2013 only - Sep Fri>=21 0:00 0 -
Rule Palestine 2014 2015 - Oct Fri>=21 0:00 0 -
Rule Palestine 2015 only - Mar lastFri 24:00 1:00 S
-Rule Palestine 2016 max - Mar lastSat 1:00 1:00 S
+Rule Palestine 2016 max - Mar Sat>=22 1:00 1:00 S
Rule Palestine 2016 max - Oct lastSat 1:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -2760,11 +2767,11 @@
# http://www.philstar.com/headlines/2014/08/05/1354152/pnoy-urged-declare-use-daylight-saving-time
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Phil 1936 only - Nov 1 0:00 1:00 S
+Rule Phil 1936 only - Nov 1 0:00 1:00 -
Rule Phil 1937 only - Feb 1 0:00 0 -
-Rule Phil 1954 only - Apr 12 0:00 1:00 S
+Rule Phil 1954 only - Apr 12 0:00 1:00 -
Rule Phil 1954 only - Jul 1 0:00 0 -
-Rule Phil 1978 only - Mar 22 0:00 1:00 S
+Rule Phil 1978 only - Mar 22 0:00 1:00 -
Rule Phil 1978 only - Sep 21 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Manila -15:56:00 - LMT 1844 Dec 31
@@ -3120,9 +3127,9 @@
# and is the basis for the information below.
#
# The 1906 transition was effective July 1 and standardized Indochina to
-# Phù Liễn Observatory, legally 104 deg. 17'17" east of Paris.
+# Phù Liễn Observatory, legally 104° 17' 17" east of Paris.
# It's unclear whether this meant legal Paris Mean Time (00:09:21) or
-# the Paris Meridian (2 deg. 20'14.03" E); the former yields 07:06:30.1333...
+# the Paris Meridian (2° 20' 14.03" E); the former yields 07:06:30.1333...
# and the latter 07:06:29.333... so either way it rounds to 07:06:30,
# which is used below even though the modern-day Phù Liễn Observatory
# is closer to 07:06:31. Abbreviate Phù Liễn Mean Time as PLMT.
--- a/test/jdk/sun/util/calendar/zi/tzdata/australasia Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/sun/util/calendar/zi/tzdata/australasia Mon Apr 09 08:34:30 2018 -0700
@@ -219,20 +219,20 @@
# Lord Howe Island
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule LH 1981 1984 - Oct lastSun 2:00 1:00 D
-Rule LH 1982 1985 - Mar Sun>=1 2:00 0 S
-Rule LH 1985 only - Oct lastSun 2:00 0:30 D
-Rule LH 1986 1989 - Mar Sun>=15 2:00 0 S
-Rule LH 1986 only - Oct 19 2:00 0:30 D
-Rule LH 1987 1999 - Oct lastSun 2:00 0:30 D
-Rule LH 1990 1995 - Mar Sun>=1 2:00 0 S
-Rule LH 1996 2005 - Mar lastSun 2:00 0 S
-Rule LH 2000 only - Aug lastSun 2:00 0:30 D
-Rule LH 2001 2007 - Oct lastSun 2:00 0:30 D
-Rule LH 2006 only - Apr Sun>=1 2:00 0 S
-Rule LH 2007 only - Mar lastSun 2:00 0 S
-Rule LH 2008 max - Apr Sun>=1 2:00 0 S
-Rule LH 2008 max - Oct Sun>=1 2:00 0:30 D
+Rule LH 1981 1984 - Oct lastSun 2:00 1:00 -
+Rule LH 1982 1985 - Mar Sun>=1 2:00 0 -
+Rule LH 1985 only - Oct lastSun 2:00 0:30 -
+Rule LH 1986 1989 - Mar Sun>=15 2:00 0 -
+Rule LH 1986 only - Oct 19 2:00 0:30 -
+Rule LH 1987 1999 - Oct lastSun 2:00 0:30 -
+Rule LH 1990 1995 - Mar Sun>=1 2:00 0 -
+Rule LH 1996 2005 - Mar lastSun 2:00 0 -
+Rule LH 2000 only - Aug lastSun 2:00 0:30 -
+Rule LH 2001 2007 - Oct lastSun 2:00 0:30 -
+Rule LH 2006 only - Apr Sun>=1 2:00 0 -
+Rule LH 2007 only - Mar lastSun 2:00 0 -
+Rule LH 2008 max - Apr Sun>=1 2:00 0 -
+Rule LH 2008 max - Oct Sun>=1 2:00 0:30 -
Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb
10:00 - AEST 1981 Mar
10:30 LH +1030/+1130 1985 Jul
@@ -390,15 +390,15 @@
# practice than guessing no DST.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 S
+Rule Fiji 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 S
+Rule Fiji 2009 only - Nov 29 2:00 1:00 -
Rule Fiji 2010 only - Mar lastSun 3:00 0 -
-Rule Fiji 2010 2013 - Oct Sun>=21 2:00 1:00 S
+Rule Fiji 2010 2013 - Oct Sun>=21 2:00 1:00 -
Rule Fiji 2011 only - Mar Sun>=1 3:00 0 -
Rule Fiji 2012 2013 - Jan Sun>=18 3:00 0 -
Rule Fiji 2014 only - Jan Sun>=18 2:00 0 -
-Rule Fiji 2014 max - Nov Sun>=1 2:00 1:00 S
+Rule Fiji 2014 max - Nov Sun>=1 2:00 1:00 -
Rule Fiji 2015 max - Jan Sun>=14 3:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva
@@ -429,11 +429,11 @@
12:00 - +12
Zone Pacific/Enderbury -11:24:20 - LMT 1901
-12:00 - -12 1979 Oct
- -11:00 - -11 1995
+ -11:00 - -11 1994 Dec 31
13:00 - +13
Zone Pacific/Kiritimati -10:29:20 - LMT 1901
-10:40 - -1040 1979 Oct
- -10:00 - -10 1995
+ -10:00 - -10 1994 Dec 31
14:00 - +14
# N Mariana Is
@@ -470,9 +470,9 @@
# New Caledonia
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule NC 1977 1978 - Dec Sun>=1 0:00 1:00 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 S
+Rule NC 1996 only - Dec 1 2:00s 1:00 -
# Shanks & Pottenger say the following was at 2:00; go with IATA.
Rule NC 1997 only - Mar 2 2:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -492,27 +492,28 @@
Rule NZ 1934 1940 - Apr lastSun 2:00 0 M
Rule NZ 1934 1940 - Sep lastSun 2:00 0:30 S
Rule NZ 1946 only - Jan 1 0:00 0 S
-# Since 1957 Chatham has been 45 minutes ahead of NZ, but there's no
-# convenient single notation for the date and time of this transition
-# so we must duplicate the Rule lines.
+# Since 1957 Chatham has been 45 minutes ahead of NZ, but until 2018a
+# there was no documented single notation for the date and time of this
+# transition. Duplicate the Rule lines for now, to give the 2018a change
+# time to percolate out.
Rule NZ 1974 only - Nov Sun>=1 2:00s 1:00 D
-Rule Chatham 1974 only - Nov Sun>=1 2:45s 1:00 D
+Rule Chatham 1974 only - Nov Sun>=1 2:45s 1:00 -
Rule NZ 1975 only - Feb lastSun 2:00s 0 S
-Rule Chatham 1975 only - Feb lastSun 2:45s 0 S
+Rule Chatham 1975 only - Feb lastSun 2:45s 0 -
Rule NZ 1975 1988 - Oct lastSun 2:00s 1:00 D
-Rule Chatham 1975 1988 - Oct lastSun 2:45s 1:00 D
+Rule Chatham 1975 1988 - Oct lastSun 2:45s 1:00 -
Rule NZ 1976 1989 - Mar Sun>=1 2:00s 0 S
-Rule Chatham 1976 1989 - Mar Sun>=1 2:45s 0 S
+Rule Chatham 1976 1989 - Mar Sun>=1 2:45s 0 -
Rule NZ 1989 only - Oct Sun>=8 2:00s 1:00 D
-Rule Chatham 1989 only - Oct Sun>=8 2:45s 1:00 D
+Rule Chatham 1989 only - Oct Sun>=8 2:45s 1:00 -
Rule NZ 1990 2006 - Oct Sun>=1 2:00s 1:00 D
-Rule Chatham 1990 2006 - Oct Sun>=1 2:45s 1:00 D
+Rule Chatham 1990 2006 - Oct Sun>=1 2:45s 1:00 -
Rule NZ 1990 2007 - Mar Sun>=15 2:00s 0 S
-Rule Chatham 1990 2007 - Mar Sun>=15 2:45s 0 S
+Rule Chatham 1990 2007 - Mar Sun>=15 2:45s 0 -
Rule NZ 2007 max - Sep lastSun 2:00s 1:00 D
-Rule Chatham 2007 max - Sep lastSun 2:45s 1:00 D
+Rule Chatham 2007 max - Sep lastSun 2:45s 1:00 -
Rule NZ 2008 max - Apr Sun>=1 2:00s 0 S
-Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 S
+Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Auckland 11:39:04 - LMT 1868 Nov 2
11:30 NZ NZ%sT 1946 Jan 1
@@ -536,9 +537,9 @@
# Cook Is
# From Shanks & Pottenger:
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Cook 1978 only - Nov 12 0:00 0:30 HS
+Rule Cook 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 HS
+Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua
-10:30 - -1030 1978 Nov 12
@@ -679,11 +680,11 @@
# Assume the pattern instituted in 2012 will continue indefinitely.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule WS 2010 only - Sep lastSun 0:00 1 D
-Rule WS 2011 only - Apr Sat>=1 4:00 0 S
-Rule WS 2011 only - Sep lastSat 3:00 1 D
-Rule WS 2012 max - Apr Sun>=1 4:00 0 S
-Rule WS 2012 max - Sep lastSun 3:00 1 D
+Rule WS 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 -
+Rule WS 2012 max - Apr Sun>=1 4:00 0 -
+Rule WS 2012 max - Sep lastSun 3:00 1 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Apia 12:33:04 - LMT 1892 Jul 5
-11:26:56 - LMT 1911
@@ -723,11 +724,11 @@
# Tonga
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Tonga 1999 only - Oct 7 2:00s 1:00 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 S
+Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 -
Rule Tonga 2001 2002 - Jan lastSun 2:00 0 -
-Rule Tonga 2016 only - Nov Sun>=1 2:00 1:00 S
+Rule Tonga 2016 only - Nov Sun>=1 2:00 1:00 -
Rule Tonga 2017 only - Jan Sun>=15 3:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Tongatapu 12:19:20 - LMT 1901
@@ -804,12 +805,12 @@
# Vanuatu
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Vanuatu 1983 only - Sep 25 0:00 1:00 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 S
-Rule Vanuatu 1985 1991 - Sep Sun>=23 0:00 1:00 S
+Rule Vanuatu 1984 only - Oct 23 0:00 1:00 -
+Rule Vanuatu 1985 1991 - Sep Sun>=23 0:00 1:00 -
Rule Vanuatu 1992 1993 - Jan Sun>=23 0:00 0 -
-Rule Vanuatu 1992 only - Oct Sun>=23 0:00 1:00 S
+Rule Vanuatu 1992 only - Oct Sun>=23 0:00 1:00 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
11:00 Vanuatu +11/+12
@@ -1108,6 +1109,13 @@
# South Australian time even though it's located in Western Australia.
# Queensland
+
+# From Paul Eggert (2018-02-26):
+# I lack access to the following source for Queensland DST:
+# Pearce C. History of daylight saving time in Queensland.
+# Queensland Hist J. 2017 Aug;23(6):389-403
+# https://search.informit.com.au/documentSummary;dn=994682348436426;res=IELHSS
+
# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
# # The state of QUEENSLAND.. [ Courtesy Qld. Dept Premier Econ&Trade Devel ]
# # [ Dec 1990 ]
@@ -1534,6 +1542,12 @@
# "declared it the same day [throughout] the country as of Jan. 1, 1995"
# as part of the competition to be first into the 21st century.
+# From Kerry Shetline (2018-02-03):
+# December 31 was the day that was skipped, so that the transition
+# would be from Friday December 30, 1994 to Sunday January 1, 1995.
+# From Paul Eggert (2018-02-04):
+# One source for this is page 202 of: Bartky IR. One Time Fits All:
+# The Campaigns for Global Uniformity (2007).
# Kwajalein
@@ -1626,7 +1640,7 @@
# From Howie Phelps (1999-11-10), who talked to a Pitcairner via shortwave:
# Betty Christian told me yesterday that their local time is the same as
-# Pacific Standard Time. They used to be 1/2 hour different from us here in
+# Pacific Standard Time. They used to be ½ hour different from us here in
# Sacramento but it was changed a couple of years ago.
@@ -1665,7 +1679,7 @@
# 12 hours and 20 minutes ahead of GMT. When New Zealand adjusted its
# standard time in 1940s, Tonga had the choice of subtracting from its
# local time to come on the same standard time as New Zealand or of
-# advancing its time to maintain the differential of 13 degrees
+# advancing its time to maintain the differential of 13°
# (approximately 50 minutes ahead of New Zealand time).
#
# Because His Majesty King Tāufaʻāhau Tupou IV, then Crown Prince
--- a/test/jdk/sun/util/calendar/zi/tzdata/europe Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/sun/util/calendar/zi/tzdata/europe Mon Apr 09 08:34:30 2018 -0700
@@ -140,8 +140,8 @@
# along the towpath within a few yards of it.'
#
# I have a one inch to one mile map of London and my estimate of the stone's
-# position is 51 degrees 28' 30" N, 0 degrees 18' 45" W. The longitude should
-# be within about +-2". The Ordnance Survey grid reference is TQ172761.
+# position is 51° 28' 30" N, 0° 18' 45" W. The longitude should
+# be within about ±2". The Ordnance Survey grid reference is TQ172761.
#
# [This yields GMTOFF = -0:01:15 for London LMT in the 18th century.]
@@ -181,7 +181,7 @@
# after-hours daylight in which to pursue his research.
# In 1895 he presented a paper to the Wellington Philosophical Society
# that proposed a two-hour daylight-saving shift. See:
-# Hudson GV. On seasonal time-adjustment in countries south of lat. 30 deg.
+# Hudson GV. On seasonal time-adjustment in countries south of lat. 30°.
# Transactions and Proceedings of the New Zealand Institute. 1895;28:734
# http://rsnz.natlib.govt.nz/volume/rsnz_28/rsnz_28_00_006110.html
# Although some interest was expressed in New Zealand, his proposal
@@ -531,11 +531,25 @@
Link Europe/London Europe/Guernsey
Link Europe/London Europe/Isle_of_Man
-# From Paul Eggert (2018-01-19):
+# From Paul Eggert (2018-02-15):
+# In January 2018 we discovered that the negative SAVE values in the
+# Eire rules cause problems with tests for ICU:
+# https://mm.icann.org/pipermail/tz/2018-January/025825.html
+# and with tests for OpenJDK:
+# https://mm.icann.org/pipermail/tz/2018-January/025822.html
+#
+# To work around this problem, the build procedure can translate the
+# following data into two forms, one with negative SAVE values and the
+# other form with a traditional approximation for Irish time stamps
+# after 1971-10-31 02:00 UTC; although this approximation has tm_isdst
+# flags that are reversed, its UTC offsets are correct and this often
+# suffices. This source file currently uses only nonnegative SAVE
+# values, but this is intended to change and downstream code should
+# not rely on it.
+#
# The following is like GB-Eire and EU, except with standard time in
-# summer and negative daylight saving time in winter.
-# Although currently commented out, this will need to become uncommented
-# once the ICU/OpenJDK workaround is removed; see below.
+# 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 Eire 1971 only - Oct 31 2:00u -1:00 GMT
#Rule Eire 1972 1980 - Mar Sun>=16 2:00u 0 IST
@@ -556,24 +570,12 @@
0:00 1:00 IST 1947 Nov 2 2:00s
0:00 - GMT 1948 Apr 18 2:00s
0:00 GB-Eire GMT/IST 1968 Oct 27
-# From Paul Eggert (2018-01-18):
-# The next line should look like this:
+# The next line is for when negative SAVE values are used.
# 1:00 Eire IST/GMT
-# However, in January 2018 we discovered that the Eire rules cause
-# problems with tests for ICU:
-# https://mm.icann.org/pipermail/tz/2018-January/025825.html
-# and with tests for OpenJDK:
-# https://mm.icann.org/pipermail/tz/2018-January/025822.html
-# To work around this problem, use a traditional approximation for
-# time stamps after 1971-10-31 02:00 UTC, to give ICU and OpenJDK
-# developers breathing room to fix bugs. This approximation has
-# correct UTC offsets, but results in tm_isdst flags are the reverse
-# of what they should be. This workaround is temporary and should be
-# removed reasonably soon.
+# These three lines are for when SAVE values are always nonnegative.
1:00 - IST 1971 Oct 31 2:00u
0:00 GB-Eire GMT/IST 1996
0:00 EU GMT/IST
-# End of workaround for ICU and OpenJDK bugs.
###############################################################################
@@ -1557,21 +1559,21 @@
# http://www.almanak.hi.is/klukkan.html
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Iceland 1917 1919 - Feb 19 23:00 1:00 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 -
-Rule Iceland 1921 only - Mar 19 23:00 1:00 S
+Rule Iceland 1921 only - Mar 19 23:00 1:00 -
Rule Iceland 1921 only - Jun 23 1:00 0 -
-Rule Iceland 1939 only - Apr 29 23:00 1:00 S
+Rule Iceland 1939 only - Apr 29 23:00 1:00 -
Rule Iceland 1939 only - Oct 29 2:00 0 -
-Rule Iceland 1940 only - Feb 25 2:00 1:00 S
+Rule Iceland 1940 only - Feb 25 2:00 1:00 -
Rule Iceland 1940 1941 - Nov Sun>=2 1:00s 0 -
-Rule Iceland 1941 1942 - Mar Sun>=2 1:00s 1:00 S
+Rule Iceland 1941 1942 - Mar Sun>=2 1:00s 1:00 -
# 1943-1946 - first Sunday in March until first Sunday in winter
-Rule Iceland 1943 1946 - Mar Sun>=1 1:00s 1:00 S
+Rule Iceland 1943 1946 - Mar Sun>=1 1:00s 1:00 -
Rule Iceland 1942 1948 - Oct Sun>=22 1:00s 0 -
# 1947-1967 - first Sunday in April until first Sunday in winter
-Rule Iceland 1947 1967 - Apr Sun>=1 1:00s 1:00 S
+Rule Iceland 1947 1967 - Apr Sun>=1 1:00s 1:00 -
# 1949 and 1967 Oct transitions delayed by 1 week
Rule Iceland 1949 only - Oct 30 1:00s 0 -
Rule Iceland 1950 1966 - Oct Sun>=22 1:00s 0 -
@@ -2161,15 +2163,19 @@
1:00 EU CE%sT
# Portugal
-#
+
# From Paul Eggert (2014-08-11), after a heads-up from Stephen Colebourne:
# According to a Portuguese decree (1911-05-26)
# https://dre.pt/application/dir/pdf1sdip/1911/05/12500/23132313.pdf
# Lisbon was at -0:36:44.68, but switched to GMT on 1912-01-01 at 00:00.
-# Round the old offset to -0:36:45. This agrees with Willett but disagrees
-# with Shanks, who says the transition occurred on 1911-05-24 at 00:00 for
-# Europe/Lisbon, Atlantic/Azores, and Atlantic/Madeira.
+# Round the old offset to -0:36:45. This agrees with Willett....
#
+# From Michael Deckers (2018-02-15):
+# article 5 [of the 1911 decree; Deckers's translation] ...:
+# These dispositions shall enter into force at the instant at which,
+# according to the 2nd article, the civil day January 1, 1912 begins,
+# all clocks therefore having to be advanced or set back correspondingly ...
+
# From Rui Pedro Salgueiro (1992-11-12):
# Portugal has recently (September, 27) changed timezone
# (from WET to MET or CET) to harmonize with EEC.
@@ -2252,7 +2258,7 @@
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Lisbon -0:36:45 - LMT 1884
- -0:36:45 - LMT 1912 Jan 1 # Lisbon Mean Time
+ -0:36:45 - LMT 1912 Jan 1 0:00u # Lisbon MT
0:00 Port WE%sT 1966 Apr 3 2:00
1:00 - CET 1976 Sep 26 1:00
0:00 Port WE%sT 1983 Sep 25 1:00s
@@ -2261,7 +2267,7 @@
0:00 EU WE%sT
# This Zone can be simplified once we assume zic %z.
Zone Atlantic/Azores -1:42:40 - LMT 1884 # Ponta Delgada
- -1:54:32 - HMT 1912 Jan 1 # Horta Mean Time
+ -1:54:32 - HMT 1912 Jan 1 2:00u # Horta MT
-2:00 Port -02/-01 1942 Apr 25 22:00s
-2:00 Port +00 1942 Aug 15 22:00s
-2:00 Port -02/-01 1943 Apr 17 22:00s
@@ -2277,7 +2283,7 @@
-1:00 EU -01/+00
# This Zone can be simplified once we assume zic %z.
Zone Atlantic/Madeira -1:07:36 - LMT 1884 # Funchal
- -1:07:36 - FMT 1912 Jan 1 # Funchal Mean Time
+ -1:07:36 - FMT 1912 Jan 1 1:00u # Funchal MT
-1:00 Port -01/+00 1942 Apr 25 22:00s
-1:00 Port +01 1942 Aug 15 22:00s
-1:00 Port -01/+00 1943 Apr 17 22:00s
@@ -2615,13 +2621,13 @@
# From Vladimir Karpinsky (2014-07-08):
# LMT in Moscow (before Jul 3, 1916) is 2:30:17, that was defined by Moscow
-# Observatory (coordinates: 55 deg. 45'29.70", 37 deg. 34'05.30")....
+# Observatory (coordinates: 55° 45' 29.70", 37° 34' 05.30")....
# LMT in Moscow since Jul 3, 1916 is 2:31:01 as a result of new standard.
# (The info is from the book by Byalokoz ... p. 18.)
# The time in St. Petersburg as capital of Russia was defined by
# Pulkov observatory, near St. Petersburg. In 1916 LMT Moscow
# was synchronized with LMT St. Petersburg (+30 minutes), (Pulkov observatory
-# coordinates: 59 deg. 46'18.70", 30 deg. 19'40.70") so 30 deg. 19'40.70" >
+# coordinates: 59° 46' 18.70", 30° 19' 40.70") so 30° 19' 40.70" >
# 2h01m18.7s = 2:01:19. LMT Moscow = LMT St.Petersburg + 30m 2:01:19 + 0:30 =
# 2:31:19 ...
#
@@ -3450,7 +3456,7 @@
# three degrees, or twelve minutes of time, to the west of the
# meridian of the Observatory of Stockholm". The law is dated 1878-05-31.
#
-# The observatory at that time had the meridian 18 degrees 03' 30"
+# The observatory at that time had the meridian 18° 03' 30"
# eastern longitude = 01:12:14 in time. Less 12 minutes gives the
# national standard time as 01:00:14 ahead of GMT....
#
@@ -3554,7 +3560,7 @@
# From Alois Treindl (2013-09-11):
# The Federal regulations say
# https://www.admin.ch/opc/de/classified-compilation/20071096/index.html
-# ... the meridian for Bern mean time ... is 7 degrees 26' 22.50".
+# ... the meridian for Bern mean time ... is 7° 26' 22.50".
# Expressed in time, it is 0h29m45.5s.
# From Pierre-Yves Berger (2013-09-11):
--- a/test/jdk/sun/util/calendar/zi/tzdata/northamerica Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/sun/util/calendar/zi/tzdata/northamerica Mon Apr 09 08:34:30 2018 -0700
@@ -48,7 +48,7 @@
# in New York City (1869-10). His 1870 proposal was based on Washington, DC,
# but in 1872-05 he moved the proposed origin to Greenwich.
-# From Paul Eggert (2016-09-21):
+# From Paul Eggert (2018-03-20):
# Dowd's proposal left many details unresolved, such as where to draw
# lines between time zones. The key individual who made time zones
# work in the US was William Frederick Allen - railway engineer,
@@ -59,10 +59,9 @@
# to the General Time Convention on 1883-04-11, saying that his plan
# meant "local time would be practically abolished" - a plus for
# railway scheduling. By the next convention on 1883-10-11 nearly all
-# railroads had agreed and it took effect on 1883-11-18 at 12:00.
-# That Sunday was called the "day of two noons", as the eastern parts
-# of the new zones observed noon twice. Allen witnessed the
-# transition in New York City, writing:
+# railroads had agreed and it took effect on 1883-11-18. That Sunday
+# was called the "day of two noons", as some locations observed noon
+# twice. Allen witnessed the transition in New York City, writing:
#
# I heard the bells of St. Paul's strike on the old time. Four
# minutes later, obedient to the electrical signal from the Naval
@@ -447,8 +446,7 @@
# ...according to the Census Bureau, the largest city is Beulah (although
# it's commonly referred to as Beulah-Hazen, with Hazen being the next
# largest city in Mercer County). Google Maps places Beulah's city hall
-# at 47 degrees 15' 51" N, 101 degrees 46' 40" W, which yields an offset
-# of 6h47'07".
+# at 47° 15' 51" N, 101° 46' 40" W, which yields an offset of 6h47'07".
Zone America/North_Dakota/Beulah -6:47:07 - LMT 1883 Nov 18 12:12:53
-7:00 US M%sT 2010 Nov 7 2:00
@@ -481,7 +479,7 @@
# California, northern Idaho (Benewah, Bonner, Boundary, Clearwater,
# Kootenai, Latah, Lewis, Nez Perce, and Shoshone counties, Idaho county
# north of the Salmon River, and the towns of Burgdorf and Warren),
-# Nevada (except West Wendover), Oregon (except the northern 3/4 of
+# Nevada (except West Wendover), Oregon (except the northern ¾ of
# Malheur county), and Washington
# From Paul Eggert (2016-08-20):
@@ -979,6 +977,13 @@
-5:00 - EST 2006
-5:00 US E%sT
+# From Paul Eggert (2018-03-20):
+# The Louisville & Nashville Railroad's 1883-11-18 change occurred at
+# 10:00 old local time; train were supposed to come to a standstill
+# for precisely 18 minutes. See Bartky Fig. 1 (page 50). It is not
+# clear how this matched civil time in Louisville, so for now continue
+# to assume Louisville switched at noon new local time, like New York.
+#
# 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
@@ -3287,8 +3292,8 @@
# http://www.jamaicaobserver.com/columns/The-politician-in-all-of-us_17573647
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Jamaica -5:07:11 - LMT 1890 # Kingston
- -5:07:11 - KMT 1912 Feb # Kingston Mean Time
+Zone America/Jamaica -5:07:10 - LMT 1890 # Kingston
+ -5:07:10 - KMT 1912 Feb # Kingston Mean Time
-5:00 - EST 1974
-5:00 US E%sT 1984
-5:00 - EST
@@ -3438,7 +3443,7 @@
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Grand_Turk -4:44:32 - LMT 1890
- -5:07:11 - KMT 1912 Feb # Kingston Mean Time
+ -5:07:10 - KMT 1912 Feb # Kingston Mean Time
-5:00 - EST 1979
-5:00 US E%sT 2015 Nov Sun>=1 2:00
-4:00 - AST 2018 Mar 11 3:00
--- a/test/jdk/sun/util/calendar/zi/tzdata/southamerica Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/sun/util/calendar/zi/tzdata/southamerica Mon Apr 09 08:34:30 2018 -0700
@@ -70,28 +70,28 @@
# AR was chosen because they are the ISO letters that represent Argentina.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Arg 1930 only - Dec 1 0:00 1:00 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 S
+Rule Arg 1931 only - Oct 15 0:00 1:00 -
Rule Arg 1932 1940 - Mar 1 0:00 0 -
-Rule Arg 1932 1939 - Nov 1 0:00 1:00 S
-Rule Arg 1940 only - Jul 1 0:00 1:00 S
+Rule Arg 1932 1939 - Nov 1 0:00 1:00 -
+Rule Arg 1940 only - Jul 1 0:00 1:00 -
Rule Arg 1941 only - Jun 15 0:00 0 -
-Rule Arg 1941 only - Oct 15 0:00 1:00 S
+Rule Arg 1941 only - Oct 15 0:00 1:00 -
Rule Arg 1943 only - Aug 1 0:00 0 -
-Rule Arg 1943 only - Oct 15 0:00 1:00 S
+Rule Arg 1943 only - Oct 15 0:00 1:00 -
Rule Arg 1946 only - Mar 1 0:00 0 -
-Rule Arg 1946 only - Oct 1 0:00 1:00 S
+Rule Arg 1946 only - Oct 1 0:00 1:00 -
Rule Arg 1963 only - Oct 1 0:00 0 -
-Rule Arg 1963 only - Dec 15 0:00 1:00 S
+Rule Arg 1963 only - Dec 15 0:00 1:00 -
Rule Arg 1964 1966 - Mar 1 0:00 0 -
-Rule Arg 1964 1966 - Oct 15 0:00 1:00 S
+Rule Arg 1964 1966 - Oct 15 0:00 1:00 -
Rule Arg 1967 only - Apr 2 0:00 0 -
-Rule Arg 1967 1968 - Oct Sun>=1 0:00 1:00 S
+Rule Arg 1967 1968 - Oct Sun>=1 0:00 1:00 -
Rule Arg 1968 1969 - Apr Sun>=1 0:00 0 -
-Rule Arg 1974 only - Jan 23 0:00 1:00 S
+Rule Arg 1974 only - Jan 23 0:00 1:00 -
Rule Arg 1974 only - May 1 0:00 0 -
-Rule Arg 1988 only - Dec 1 0:00 1:00 S
+Rule Arg 1988 only - Dec 1 0:00 1:00 -
#
# From Hernan G. Otero (1995-06-26):
# These corrections were contributed by InterSoft Argentina S.A.,
@@ -99,7 +99,7 @@
# Talleres de Hidrografía Naval Argentina
# (Argentine Naval Hydrography Institute)
Rule Arg 1989 1993 - Mar Sun>=1 0:00 0 -
-Rule Arg 1989 1992 - Oct Sun>=15 0:00 1:00 S
+Rule Arg 1989 1992 - Oct Sun>=15 0:00 1:00 -
#
# From Hernan G. Otero (1995-06-26):
# From this moment on, the law that mandated the daylight saving
@@ -110,7 +110,7 @@
# On October 3, 1999, 0:00 local, Argentina implemented daylight savings time,
# which did not result in the switch of a time zone, as they stayed 9 hours
# from the International Date Line.
-Rule Arg 1999 only - Oct Sun>=1 0:00 1:00 S
+Rule Arg 1999 only - Oct Sun>=1 0:00 1:00 -
# From Paul Eggert (2007-12-28):
# DST was set to expire on March 5, not March 3, but since it was converted
# to standard time on March 3 it's more convenient for us to pretend that
@@ -213,9 +213,9 @@
# la modificación del huso horario, ya que 2009 nos encuentra con
# crecimiento en la producción y distribución energética."
-Rule Arg 2007 only - Dec 30 0:00 1:00 S
+Rule Arg 2007 only - Dec 30 0:00 1:00 -
Rule Arg 2008 2009 - Mar Sun>=15 0:00 0 -
-Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 S
+Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 -
# From Mariano Absatz (2004-05-21):
# Today it was officially published that the Province of Mendoza is changing
@@ -225,12 +225,14 @@
# It's Law No. 7,210. This change is due to a public power emergency, so for
# now we'll assume it's for this year only.
#
-# From Paul Eggert (2014-08-09):
+# From Paul Eggert (2018-01-31):
# Hora de verano para la República Argentina
# http://buenasiembra.com.ar/esoterismo/astrologia/hora-de-verano-de-la-republica-argentina-27.html
# says that standard time in Argentina from 1894-10-31
# to 1920-05-01 was -4:16:48.25. Go with this more-precise value
-# over Shanks & Pottenger.
+# over Shanks & Pottenger. It is upward compatible with Milne, who
+# says Córdoba time was -4:16:48.2.
+
#
# From Mariano Absatz (2004-06-05):
# These media articles from a major newspaper mostly cover the current state:
@@ -404,9 +406,9 @@
# rules...San Luis is still using "Western ARgentina Time" and it got
# stuck on Summer daylight savings time even though the summer is over.
-# From Paul Eggert (2013-09-05):
+# From Paul Eggert (2018-01-23):
# Perhaps San Luis operates on the legal fiction that it is at -04
-# with perpetual summer time, but ordinary usage typically seems to
+# with perpetual daylight saving time, but ordinary usage typically seems to
# just say it's at -03; see, for example,
# https://es.wikipedia.org/wiki/Hora_oficial_argentina
# We've documented similar situations as being plain changes to
@@ -415,9 +417,6 @@
# plus is that this silences a zic complaint that there's no POSIX TZ
# setting for time stamps past 2038.
-# From Paul Eggert (2013-02-21):
-# Milne says Córdoba time was -4:16:48.2. Round to the nearest second.
-
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
#
# Buenos Aires (BA), Capital Federal (CF),
@@ -552,7 +551,7 @@
# San Luis (SL)
Rule SanLuis 2008 2009 - Mar Sun>=8 0:00 0 -
-Rule SanLuis 2007 2008 - Oct Sun>=8 0:00 1:00 S
+Rule SanLuis 2007 2008 - Oct Sun>=8 0:00 1:00 -
Zone America/Argentina/San_Luis -4:25:24 - LMT 1894 Oct 31
-4:16:48 - CMT 1920 May
@@ -794,14 +793,14 @@
# Rule NAME FROM TO TYPE 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 S
+Rule Brazil 1931 only - Oct 3 11:00 1:00 -
Rule Brazil 1932 1933 - Apr 1 0:00 0 -
-Rule Brazil 1932 only - Oct 3 0:00 1:00 S
+Rule Brazil 1932 only - Oct 3 0:00 1:00 -
# Decree 23,195 <http://pcdsh01.on.br/HV23195.htm> (1933-10-10)
# revoked DST.
# Decree 27,496 <http://pcdsh01.on.br/HV27496.htm> (1949-11-24)
# Decree 27,998 <http://pcdsh01.on.br/HV27998.htm> (1950-04-13)
-Rule Brazil 1949 1952 - Dec 1 0:00 1:00 S
+Rule Brazil 1949 1952 - Dec 1 0:00 1:00 -
Rule Brazil 1950 only - Apr 16 1:00 0 -
Rule Brazil 1951 1952 - Apr 1 0:00 0 -
# Decree 32,308 <http://pcdsh01.on.br/HV32308.htm> (1953-02-24)
@@ -813,51 +812,51 @@
# in SP, RJ, GB, MG, ES, due to the prolongation of the drought.
# Decree 53,071 <http://pcdsh01.on.br/HV53071.htm> (1963-12-03)
# extended the above decree to all of the national territory on 12-09.
-Rule Brazil 1963 only - Dec 9 0:00 1:00 S
+Rule Brazil 1963 only - Dec 9 0:00 1:00 -
# Decree 53,604 <http://pcdsh01.on.br/HV53604.htm> (1964-02-25)
# extended summer time by one day to 1964-03-01 00:00 (start of school).
Rule Brazil 1964 only - Mar 1 0:00 0 -
# Decree 55,639 <http://pcdsh01.on.br/HV55639.htm> (1965-01-27)
-Rule Brazil 1965 only - Jan 31 0:00 1:00 S
+Rule Brazil 1965 only - Jan 31 0:00 1:00 -
Rule Brazil 1965 only - Mar 31 0:00 0 -
# Decree 57,303 <http://pcdsh01.on.br/HV57303.htm> (1965-11-22)
-Rule Brazil 1965 only - Dec 1 0:00 1:00 S
+Rule Brazil 1965 only - Dec 1 0:00 1:00 -
# Decree 57,843 <http://pcdsh01.on.br/HV57843.htm> (1966-02-18)
Rule Brazil 1966 1968 - Mar 1 0:00 0 -
-Rule Brazil 1966 1967 - Nov 1 0:00 1:00 S
+Rule Brazil 1966 1967 - Nov 1 0:00 1:00 -
# Decree 63,429 <http://pcdsh01.on.br/HV63429.htm> (1968-10-15)
# revoked DST.
# Decree 91,698 <http://pcdsh01.on.br/HV91698.htm> (1985-09-27)
-Rule Brazil 1985 only - Nov 2 0:00 1:00 S
+Rule Brazil 1985 only - Nov 2 0:00 1:00 -
# Decree 92,310 (1986-01-21)
# Decree 92,463 (1986-03-13)
Rule Brazil 1986 only - Mar 15 0:00 0 -
# Decree 93,316 (1986-10-01)
-Rule Brazil 1986 only - Oct 25 0:00 1:00 S
+Rule Brazil 1986 only - Oct 25 0:00 1:00 -
Rule Brazil 1987 only - Feb 14 0:00 0 -
# Decree 94,922 <http://pcdsh01.on.br/HV94922.htm> (1987-09-22)
-Rule Brazil 1987 only - Oct 25 0:00 1:00 S
+Rule Brazil 1987 only - Oct 25 0:00 1:00 -
Rule Brazil 1988 only - Feb 7 0:00 0 -
# Decree 96,676 <http://pcdsh01.on.br/HV96676.htm> (1988-09-12)
# except for the states of AC, AM, PA, RR, RO, and AP (then a territory)
-Rule Brazil 1988 only - Oct 16 0:00 1:00 S
+Rule Brazil 1988 only - Oct 16 0:00 1:00 -
Rule Brazil 1989 only - Jan 29 0:00 0 -
# Decree 98,077 <http://pcdsh01.on.br/HV98077.htm> (1989-08-21)
# with the same exceptions
-Rule Brazil 1989 only - Oct 15 0:00 1:00 S
+Rule Brazil 1989 only - Oct 15 0:00 1:00 -
Rule Brazil 1990 only - Feb 11 0:00 0 -
# Decree 99,530 <http://pcdsh01.on.br/HV99530.htm> (1990-09-17)
# adopted by RS, SC, PR, SP, RJ, ES, MG, GO, MS, DF.
# Decree 99,629 (1990-10-19) adds BA, MT.
-Rule Brazil 1990 only - Oct 21 0:00 1:00 S
+Rule Brazil 1990 only - Oct 21 0:00 1:00 -
Rule Brazil 1991 only - Feb 17 0:00 0 -
# Unnumbered decree <http://pcdsh01.on.br/HV1991.htm> (1991-09-25)
# adopted by RS, SC, PR, SP, RJ, ES, MG, BA, GO, MT, MS, DF.
-Rule Brazil 1991 only - Oct 20 0:00 1:00 S
+Rule Brazil 1991 only - Oct 20 0:00 1:00 -
Rule Brazil 1992 only - Feb 9 0:00 0 -
# Unnumbered decree <http://pcdsh01.on.br/HV1992.htm> (1992-10-16)
# adopted by same states.
-Rule Brazil 1992 only - Oct 25 0:00 1:00 S
+Rule Brazil 1992 only - Oct 25 0:00 1:00 -
Rule Brazil 1993 only - Jan 31 0:00 0 -
# Decree 942 <http://pcdsh01.on.br/HV942.htm> (1993-09-28)
# adopted by same states, plus AM.
@@ -867,12 +866,12 @@
# adopted by same states, plus MT and TO.
# Decree 1,674 <http://pcdsh01.on.br/HV1674.htm> (1995-10-13)
# adds AL, SE.
-Rule Brazil 1993 1995 - Oct Sun>=11 0:00 1:00 S
+Rule Brazil 1993 1995 - Oct Sun>=11 0:00 1:00 -
Rule Brazil 1994 1995 - Feb Sun>=15 0:00 0 -
Rule Brazil 1996 only - Feb 11 0:00 0 -
# Decree 2,000 <http://pcdsh01.on.br/HV2000.htm> (1996-09-04)
# adopted by same states, minus AL, SE.
-Rule Brazil 1996 only - Oct 6 0:00 1:00 S
+Rule Brazil 1996 only - Oct 6 0:00 1:00 -
Rule Brazil 1997 only - Feb 16 0:00 0 -
# From Daniel C. Sobral (1998-02-12):
# In 1997, the DS began on October 6. The stated reason was that
@@ -882,19 +881,19 @@
# to help dealing with the shortages of electric power.
#
# Decree 2,317 (1997-09-04), adopted by same states.
-Rule Brazil 1997 only - Oct 6 0:00 1:00 S
+Rule Brazil 1997 only - Oct 6 0:00 1:00 -
# Decree 2,495 <http://pcdsh01.on.br/figuras/HV2495.JPG>
# (1998-02-10)
Rule Brazil 1998 only - Mar 1 0:00 0 -
# Decree 2,780 <http://pcdsh01.on.br/figuras/Hv98.jpg> (1998-09-11)
# adopted by the same states as before.
-Rule Brazil 1998 only - Oct 11 0:00 1:00 S
+Rule Brazil 1998 only - Oct 11 0:00 1:00 -
Rule Brazil 1999 only - Feb 21 0:00 0 -
# Decree 3,150 <http://pcdsh01.on.br/figuras/HV3150.gif>
# (1999-08-23) adopted by same states.
# Decree 3,188 <http://pcdsh01.on.br/DecHV99.gif> (1999-09-30)
# adds SE, AL, PB, PE, RN, CE, PI, MA and RR.
-Rule Brazil 1999 only - Oct 3 0:00 1:00 S
+Rule Brazil 1999 only - Oct 3 0:00 1:00 -
Rule Brazil 2000 only - Feb 27 0:00 0 -
# Decree 3,592 <http://pcdsh01.on.br/DEC3592.htm> (2000-09-06)
# adopted by the same states as before.
@@ -904,34 +903,34 @@
# repeals DST in SE, AL, PB, RN, CE, PI and MA, effective 2000-10-22 00:00.
# Decree 3,916 <http://pcdsh01.on.br/figuras/HV3916.gif>
# (2001-09-13) reestablishes DST in AL, CE, MA, PB, PE, PI, RN, SE.
-Rule Brazil 2000 2001 - Oct Sun>=8 0:00 1:00 S
+Rule Brazil 2000 2001 - Oct Sun>=8 0:00 1:00 -
Rule Brazil 2001 2006 - Feb Sun>=15 0:00 0 -
# Decree 4,399 (2002-10-01) repeals DST in AL, CE, MA, PB, PE, PI, RN, SE.
# 4,399 <http://www.presidencia.gov.br/CCIVIL/decreto/2002/D4399.htm>
-Rule Brazil 2002 only - Nov 3 0:00 1:00 S
+Rule Brazil 2002 only - Nov 3 0:00 1:00 -
# Decree 4,844 (2003-09-24; corrected 2003-09-26) repeals DST in BA, MT, TO.
# 4,844 <http://www.presidencia.gov.br/CCIVIL/decreto/2003/D4844.htm>
-Rule Brazil 2003 only - Oct 19 0:00 1:00 S
+Rule Brazil 2003 only - Oct 19 0:00 1:00 -
# Decree 5,223 (2004-10-01) reestablishes DST in MT.
# 5,223 <http://www.planalto.gov.br/ccivil_03/_Ato2004-2006/2004/Decreto/D5223.htm>
-Rule Brazil 2004 only - Nov 2 0:00 1:00 S
+Rule Brazil 2004 only - Nov 2 0:00 1:00 -
# Decree 5,539 <http://pcdsh01.on.br/DecHV5539.gif> (2005-09-19),
# adopted by the same states as before.
-Rule Brazil 2005 only - Oct 16 0:00 1:00 S
+Rule Brazil 2005 only - Oct 16 0:00 1:00 -
# Decree 5,920 <http://pcdsh01.on.br/DecHV5920.gif> (2006-10-03),
# adopted by the same states as before.
-Rule Brazil 2006 only - Nov 5 0:00 1:00 S
+Rule Brazil 2006 only - Nov 5 0:00 1:00 -
Rule Brazil 2007 only - Feb 25 0:00 0 -
# Decree 6,212 <http://pcdsh01.on.br/DecHV6212.gif> (2007-09-26),
# adopted by the same states as before.
-Rule Brazil 2007 only - Oct Sun>=8 0:00 1:00 S
+Rule Brazil 2007 only - Oct Sun>=8 0:00 1:00 -
# From Frederico A. C. Neves (2008-09-10):
# According to this decree
# http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm
# [t]he DST period in Brazil now on will be from the 3rd Oct Sunday to the
# 3rd Feb Sunday. There is an exception on the return date when this is
# the Carnival Sunday then the return date will be the next Sunday...
-Rule Brazil 2008 2017 - Oct Sun>=15 0:00 1:00 S
+Rule Brazil 2008 2017 - Oct Sun>=15 0:00 1:00 -
Rule Brazil 2008 2011 - Feb Sun>=15 0:00 0 -
# Decree 7,584 <http://pcdsh01.on.br/HVdecreto7584_20111013.jpg> (2011-10-13)
# added Bahia.
@@ -949,7 +948,7 @@
# ... https://www.timeanddate.com/news/time/brazil-delays-dst-2018.html
# From Steffen Thorsen (2017-12-20):
# http://www.planalto.gov.br/ccivil_03/_ato2015-2018/2017/decreto/D9242.htm
-Rule Brazil 2018 max - Nov Sun>=1 0:00 1:00 S
+Rule Brazil 2018 max - Nov Sun>=1 0:00 1:00 -
Rule Brazil 2023 only - Feb Sun>=22 0:00 0 -
Rule Brazil 2024 2025 - Feb Sun>=15 0:00 0 -
Rule Brazil 2026 only - Feb Sun>=22 0:00 0 -
@@ -1256,28 +1255,28 @@
# For now, assume that they will not revert.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Chile 1927 1931 - Sep 1 0:00 1:00 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 S
+Rule Chile 1968 only - Nov 3 4:00u 1:00 -
Rule Chile 1969 only - Mar 30 3:00u 0 -
-Rule Chile 1969 only - Nov 23 4:00u 1:00 S
+Rule Chile 1969 only - Nov 23 4:00u 1:00 -
Rule Chile 1970 only - Mar 29 3:00u 0 -
Rule Chile 1971 only - Mar 14 3:00u 0 -
-Rule Chile 1970 1972 - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 1970 1972 - Oct Sun>=9 4:00u 1:00 -
Rule Chile 1972 1986 - Mar Sun>=9 3:00u 0 -
-Rule Chile 1973 only - Sep 30 4:00u 1:00 S
-Rule Chile 1974 1987 - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 1973 only - Sep 30 4:00u 1:00 -
+Rule Chile 1974 1987 - Oct Sun>=9 4:00u 1:00 -
Rule Chile 1987 only - Apr 12 3:00u 0 -
Rule Chile 1988 1990 - Mar Sun>=9 3:00u 0 -
-Rule Chile 1988 1989 - Oct Sun>=9 4:00u 1:00 S
-Rule Chile 1990 only - Sep 16 4:00u 1:00 S
+Rule Chile 1988 1989 - Oct Sun>=9 4:00u 1:00 -
+Rule Chile 1990 only - Sep 16 4:00u 1:00 -
Rule Chile 1991 1996 - Mar Sun>=9 3:00u 0 -
-Rule Chile 1991 1997 - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 1991 1997 - Oct Sun>=9 4:00u 1:00 -
Rule Chile 1997 only - Mar 30 3:00u 0 -
Rule Chile 1998 only - Mar Sun>=9 3:00u 0 -
-Rule Chile 1998 only - Sep 27 4:00u 1:00 S
+Rule Chile 1998 only - Sep 27 4:00u 1:00 -
Rule Chile 1999 only - Apr 4 3:00u 0 -
-Rule Chile 1999 2010 - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 1999 2010 - Oct Sun>=9 4:00u 1:00 -
Rule Chile 2000 2007 - Mar Sun>=9 3:00u 0 -
# N.B.: the end of March 29 in Chile is March 30 in Universal time,
# which is used below in specifying the transition.
@@ -1285,11 +1284,11 @@
Rule Chile 2009 only - Mar Sun>=9 3:00u 0 -
Rule Chile 2010 only - Apr Sun>=1 3:00u 0 -
Rule Chile 2011 only - May Sun>=2 3:00u 0 -
-Rule Chile 2011 only - Aug Sun>=16 4:00u 1:00 S
+Rule Chile 2011 only - Aug Sun>=16 4:00u 1:00 -
Rule Chile 2012 2014 - Apr Sun>=23 3:00u 0 -
-Rule Chile 2012 2014 - Sep Sun>=2 4:00u 1:00 S
+Rule Chile 2012 2014 - Sep Sun>=2 4:00u 1:00 -
Rule Chile 2016 max - May Sun>=9 3:00u 0 -
-Rule Chile 2016 max - Aug Sun>=9 4:00u 1:00 S
+Rule Chile 2016 max - Aug Sun>=9 4:00u 1:00 -
# IATA SSIM anomalies: (1992-02) says 1992-03-14;
# (1996-09) says 1998-03-08. Ignore these.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -1354,7 +1353,7 @@
# "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 CO 1992 only - May 3 0:00 1:00 S
+Rule CO 1992 only - May 3 0:00 1:00 -
Rule CO 1993 only - Apr 4 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Bogota -4:56:16 - LMT 1884 Mar 13
@@ -1414,7 +1413,7 @@
# 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 Ecuador 1992 only - Nov 28 0:00 1:00 S
+Rule Ecuador 1992 only - Nov 28 0:00 1:00 -
Rule Ecuador 1993 only - Feb 5 0:00 0 -
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -1504,22 +1503,22 @@
# the maintainers of the database to inform them we're adopting
# the same policy this year and suggest recommendations for future years.
#
-# For now we will assume permanent summer time for the Falklands
+# 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 Falk 1937 1938 - Sep lastSun 0:00 1:00 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 S
-Rule Falk 1940 1942 - Sep lastSun 0:00 1:00 S
+Rule Falk 1939 only - Oct 1 0:00 1:00 -
+Rule Falk 1940 1942 - Sep lastSun 0:00 1:00 -
Rule Falk 1943 only - Jan 1 0:00 0 -
-Rule Falk 1983 only - Sep lastSun 0:00 1:00 S
+Rule Falk 1983 only - Sep lastSun 0:00 1:00 -
Rule Falk 1984 1985 - Apr lastSun 0:00 0 -
-Rule Falk 1984 only - Sep 16 0:00 1:00 S
-Rule Falk 1985 2000 - Sep Sun>=9 0:00 1:00 S
+Rule Falk 1984 only - Sep 16 0:00 1:00 -
+Rule Falk 1985 2000 - Sep Sun>=9 0:00 1:00 -
Rule Falk 1986 2000 - Apr Sun>=16 0:00 0 -
Rule Falk 2001 2010 - Apr Sun>=15 2:00 0 -
-Rule Falk 2001 2010 - Sep Sun>=1 2:00 1:00 S
+Rule Falk 2001 2010 - Sep Sun>=1 2:00 1:00 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Atlantic/Stanley -3:51:24 - LMT 1890
-3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time
@@ -1554,16 +1553,16 @@
# adjust their clocks at 0 hour of the given dates.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Para 1975 1988 - Oct 1 0:00 1:00 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 -
-Rule Para 1989 only - Oct 22 0:00 1:00 S
-Rule Para 1990 only - Oct 1 0:00 1:00 S
-Rule Para 1991 only - Oct 6 0:00 1:00 S
+Rule Para 1989 only - Oct 22 0:00 1:00 -
+Rule Para 1990 only - Oct 1 0:00 1:00 -
+Rule Para 1991 only - Oct 6 0:00 1:00 -
Rule Para 1992 only - Mar 1 0:00 0 -
-Rule Para 1992 only - Oct 5 0:00 1:00 S
+Rule Para 1992 only - Oct 5 0:00 1:00 -
Rule Para 1993 only - Mar 31 0:00 0 -
-Rule Para 1993 1995 - Oct 1 0:00 1:00 S
+Rule Para 1993 1995 - Oct 1 0:00 1:00 -
Rule Para 1994 1995 - Feb lastSun 0:00 0 -
Rule Para 1996 only - Mar 1 0:00 0 -
# IATA SSIM (2000-02) says 1999-10-10; ignore this for now.
@@ -1581,7 +1580,7 @@
# year, the time will change on the first Sunday of October; likewise, the
# clock will be set back on the first Sunday of March.
#
-Rule Para 1996 2001 - Oct Sun>=1 0:00 1:00 S
+Rule Para 1996 2001 - Oct Sun>=1 0:00 1:00 -
# IATA SSIM (1997-09) says Mar 1; go with Shanks & Pottenger.
Rule Para 1997 only - Feb lastSun 0:00 0 -
# Shanks & Pottenger say 1999-02-28; IATA SSIM (1999-02) says 1999-02-27, but
@@ -1592,7 +1591,7 @@
# dst method to be from the first Sunday in September to the first Sunday in
# April.
Rule Para 2002 2004 - Apr Sun>=1 0:00 0 -
-Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 S
+Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 -
#
# From Jesper Nørgaard Welen (2005-01-02):
# There are several sources that claim that Paraguay made
@@ -1601,7 +1600,7 @@
# Decree 1,867 (2004-03-05)
# From Carlos Raúl Perasso via Jesper Nørgaard Welen (2006-10-13)
# http://www.presidencia.gov.py/decretos/D1867.pdf
-Rule Para 2004 2009 - Oct Sun>=15 0:00 1:00 S
+Rule Para 2004 2009 - Oct Sun>=15 0:00 1:00 -
Rule Para 2005 2009 - Mar Sun>=8 0:00 0 -
# From Carlos Raúl Perasso (2010-02-18):
# By decree number 3958 issued yesterday
@@ -1614,7 +1613,7 @@
# and that on the first Sunday of the month of October, it is to be set
# forward 60 minutes, in all the territory of the Paraguayan Republic.
# ...
-Rule Para 2010 max - Oct Sun>=1 0:00 1:00 S
+Rule Para 2010 max - Oct Sun>=1 0:00 1:00 -
Rule Para 2010 2012 - Apr Sun>=8 0:00 0 -
#
# From Steffen Thorsen (2013-03-07):
@@ -1647,16 +1646,16 @@
# Shanks & Pottenger don't have this transition. Assume 1986 was like 1987.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Peru 1938 only - Jan 1 0:00 1:00 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 S
+Rule Peru 1938 1939 - Sep lastSun 0:00 1:00 -
Rule Peru 1939 1940 - Mar Sun>=24 0:00 0 -
-Rule Peru 1986 1987 - Jan 1 0:00 1:00 S
+Rule Peru 1986 1987 - Jan 1 0:00 1:00 -
Rule Peru 1986 1987 - Apr 1 0:00 0 -
-Rule Peru 1990 only - Jan 1 0:00 1:00 S
+Rule Peru 1990 only - Jan 1 0:00 1:00 -
Rule Peru 1990 only - Apr 1 0:00 0 -
# IATA is ambiguous for 1993/1995; go with Shanks & Pottenger.
-Rule Peru 1994 only - Jan 1 0:00 1:00 S
+Rule Peru 1994 only - Jan 1 0:00 1:00 -
Rule Peru 1994 only - Apr 1 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Lima -5:08:12 - LMT 1890
@@ -1702,72 +1701,201 @@
# Uruguay
# From Paul Eggert (1993-11-18):
# Uruguay wins the prize for the strangest peacetime manipulation of the rules.
-# From Shanks & Pottenger:
+#
+# From Tim Parenti (2018-02-20), per Jeremie Bonjour (2018-01-31) and Michael
+# Deckers (2018-02-20):
+# ... At least they kept good records...
+#
+# http://www.armada.mil.uy/ContenidosPDFs/sohma/web/almanaque/almanaque_2018.pdf#page=36
+# Page 36 of Almanaque 2018, published by the Oceanography, Hydrography, and
+# Meteorology Service of the Uruguayan Navy, seems to give many transitions
+# with greater clarity than we've had before. It directly references many laws
+# and decrees which are, in turn, referenced below. They can be viewed in the
+# public archives of the Diario Oficial (in Spanish) at
+# http://www.impo.com.uy/diariooficial/
+#
+# Ley No. 3920 of 1908-06-10 placed the determination of legal time under the
+# auspices of the National Institute for the Prediction of Time. It is unclear
+# exactly what offset was used during this period, though Ley No. 7200 of
+# 1920-04-23 used the Observatory of the National Meteorological Institute in
+# Montevideo (34° 54' 33" S, 56° 12' 45" W) as its reference meridian,
+# retarding legal time by 15 minutes 9 seconds from 1920-04-30 24:00,
+# resulting in UT-04. Assume the corresponding LMT of UT-03:44:51 (given on
+# page 725 of the Proceedings of the Second Pan-American Scientific Congress,
+# 1915-1916) was in use, and merely became official from 1908-06-10.
+# https://www.impo.com.uy/diariooficial/1908/06/18/12
+# https://www.impo.com.uy/diariooficial/1920/04/27/9
+#
+# Ley No. 7594 of 1923-06-28 specified legal time as Observatory time advanced
+# by 44 minutes 51 seconds (UT-03) "from 30 September to 31 March", and by 14
+# minutes 51 seconds (UT-03:30) "the rest of the year"; a message from the
+# National Council of Administration the same day, published directly below the
+# law in the Diario Oficial, specified the first transition to be 1923-09-30
+# 24:00. This effectively established standard time at UT-03:30 with 30
+# minutes DST. Assume transitions at 24:00 on the specified days until Ley No.
+# 7919 of 1926-03-05 ended this arrangement, repealing all "laws and other
+# provisions which oppose" it, resulting in year-round UT-03:30; a Resolución
+# of 1926-03-11 puts the final transition at 1926-03-31 24:00, the same as it
+# would have been under the previous law.
+# https://www.impo.com.uy/diariooficial/1923/07/02/2
+# 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
-# Whitman gives 1923 Oct 1; go with Shanks & Pottenger.
-Rule Uruguay 1923 only - Oct 2 0:00 0:30 HS
+Rule Uruguay 1923 1925 - Oct 1 0:00 0:30 -
Rule Uruguay 1924 1926 - Apr 1 0:00 0 -
-Rule Uruguay 1924 1925 - Oct 1 0:00 0:30 HS
-Rule Uruguay 1933 1935 - Oct lastSun 0:00 0:30 HS
-# Shanks & Pottenger give 1935 Apr 1 0:00 & 1936 Mar 30 0:00; go with Whitman.
-Rule Uruguay 1934 1936 - Mar Sat>=25 23:30s 0 -
-Rule Uruguay 1936 only - Nov 1 0:00 0:30 HS
-Rule Uruguay 1937 1941 - Mar lastSun 0:00 0 -
-# Whitman gives 1937 Oct 3; go with Shanks & Pottenger.
-Rule Uruguay 1937 1940 - Oct lastSun 0:00 0:30 HS
-# Whitman gives 1941 Oct 24 - 1942 Mar 27, 1942 Dec 14 - 1943 Apr 13,
-# and 1943 Apr 13 "to present time"; go with Shanks & Pottenger.
-Rule Uruguay 1941 only - Aug 1 0:00 0:30 HS
-Rule Uruguay 1942 only - Jan 1 0:00 0 -
-Rule Uruguay 1942 only - Dec 14 0:00 1:00 S
+# From Tim Parenti (2018-02-15):
+# http://www.impo.com.uy/diariooficial/1933/10/27/6
+#
+# It appears Ley No. 9122 of 1933 was never published as such in the Diario
+# Oficial, but instead appeared as Document 26 in the Diario on Friday
+# 1933-10-27 as a decree made Monday 1933-10-23 and filed under the Ministry of
+# National Defense. It reinstituted a DST of 30 minutes (to UT-03) "from the
+# last Sunday of October...until the last Saturday of March." In accordance
+# with this provision, the first transition was explicitly specified in Article
+# 2 of the decree as Saturday 1933-10-28 at 24:00; that is, Sunday 1933-10-29
+# at 00:00. Assume transitions at 00:00 Sunday throughout.
+#
+# Departing from the matter-of-fact nature of previous timekeeping laws, the
+# 1933 decree "consider[s] the advantages of...the advance of legal time":
+#
+# "Whereas: The measure adopted by almost all nations at the time of the last
+# World War still persists in North America and Europe, precisely because of
+# the economic, hygienic, and social advantages derived from such an
+# emergency measure...
+#
+# Whereas: The advance of the legal time during the summer seasons, by
+# displacing social activity near sunrise, favors the citizen populations
+# and especially the society that creates and works..."
+#
+# It further specified that "necessary measures" be taken to ensure that
+# "public spectacles finish, in general, before [01:00]."
+Rule Uruguay 1933 1938 - Oct lastSun 0:00 0:30 -
+Rule Uruguay 1934 1941 - Mar lastSat 24:00 0 -
+# From Tim Parenti (2018-02-15):
+# Most of the Rules below, and their contemporaneous Zone lines, have been
+# updated simply to match the Almanaque 2018. Although the document does not
+# list exact transition times, midnight transitions were already present in our
+# data here for all transitions through 2004-09, and this is both consistent
+# with prior transitions and verified in several decrees marked below between
+# 1939-09 and 2004-09, wherein the relevant text was typically of the form:
+#
+# "From 0 hours on [date], the legal time of the entire Republic will be...
+#
+# In accordance with [the preceding], on [previous date] at 24 hours, all
+# clocks throughout the Republic will be [advanced/retarded] by..."
+#
+# It is possible that there is greater specificity to be found for the Rules
+# below, but it is buried in no fewer than 40 different decrees individually
+# referenced by the Almanaque for the period from 1939-09 to 2014-09.
+# Four-fifths of these were promulgated less than two weeks before taking
+# effect; more than half within a week and none more than 5 weeks. Only the
+# handful with comments below have been checked with any thoroughness.
+Rule Uruguay 1939 only - Oct 1 0:00 0:30 -
+Rule Uruguay 1940 only - Oct 27 0:00 0:30 -
+# From Tim Parenti (2018-02-15):
+# Decreto 1145 of the Ministry of National Defense, dated 1941-07-26, specified
+# UT-03 from Friday 1941-08-01 00:00, citing an "urgent...need to save fuel".
+# http://www.impo.com.uy/diariooficial/1941/08/04/1
+Rule Uruguay 1941 only - Aug 1 0:00 0:30 -
+# From Tim Parenti (2018-02-15):
+# Decreto 1866 of the Ministry of National Defense, dated 1942-12-09, specified
+# further advancement (to UT-02:30) from Sunday 1942-12-13 24:00. Since clocks
+# never went back to UT-03:30 thereafter, this is modeled as advancing standard
+# time by 30 minutes to UT-03, while retaining 30 minutes of DST.
+# http://www.impo.com.uy/diariooficial/1942/12/16/3
+Rule Uruguay 1942 only - Dec 14 0:00 0:30 -
Rule Uruguay 1943 only - Mar 14 0:00 0 -
-Rule Uruguay 1959 only - May 24 0:00 1:00 S
+Rule Uruguay 1959 only - May 24 0:00 0:30 -
Rule Uruguay 1959 only - Nov 15 0:00 0 -
-Rule Uruguay 1960 only - Jan 17 0:00 1:00 S
+Rule Uruguay 1960 only - Jan 17 0:00 1:00 -
Rule Uruguay 1960 only - Mar 6 0:00 0 -
-Rule Uruguay 1965 1967 - Apr Sun>=1 0:00 1:00 S
+Rule Uruguay 1965 only - Apr 4 0:00 1:00 -
Rule Uruguay 1965 only - Sep 26 0:00 0 -
-Rule Uruguay 1966 1967 - Oct 31 0:00 0 -
-Rule Uruguay 1968 1970 - May 27 0:00 0:30 HS
-Rule Uruguay 1968 1970 - Dec 2 0:00 0 -
-Rule Uruguay 1972 only - Apr 24 0:00 1:00 S
-Rule Uruguay 1972 only - Aug 15 0:00 0 -
-Rule Uruguay 1974 only - Mar 10 0:00 0:30 HS
-Rule Uruguay 1974 only - Dec 22 0:00 1:00 S
-Rule Uruguay 1976 only - Oct 1 0:00 0 -
-Rule Uruguay 1977 only - Dec 4 0:00 1:00 S
-Rule Uruguay 1978 only - Apr 1 0:00 0 -
-Rule Uruguay 1979 only - Oct 1 0:00 1:00 S
-Rule Uruguay 1980 only - May 1 0:00 0 -
-Rule Uruguay 1987 only - Dec 14 0:00 1:00 S
-Rule Uruguay 1988 only - Mar 14 0:00 0 -
-Rule Uruguay 1988 only - Dec 11 0:00 1:00 S
-Rule Uruguay 1989 only - Mar 12 0:00 0 -
-Rule Uruguay 1989 only - Oct 29 0:00 1:00 S
-# Shanks & Pottenger say no DST was observed in 1990/1 and 1991/2,
-# and that 1992/3's DST was from 10-25 to 03-01. Go with IATA.
-Rule Uruguay 1990 1992 - Mar Sun>=1 0:00 0 -
-Rule Uruguay 1990 1991 - Oct Sun>=21 0:00 1:00 S
-Rule Uruguay 1992 only - Oct 18 0:00 1:00 S
+# From Tim Parenti (2018-02-15):
+# Decreto 321/968 of 1968-05-25, citing emergency drought measures decreed the
+# day before, brought clocks forward 30 minutes from Monday 1968-05-27 00:00.
+# http://www.impo.com.uy/diariooficial/1968/05/30/5
+Rule Uruguay 1968 only - May 27 0:00 0:30 -
+Rule Uruguay 1968 only - Dec 1 0:00 0 -
+# From Tim Parenti (2018-02-15):
+# Decreto 188/970 of 1970-04-23 instituted restrictions on electricity
+# consumption "as a consequence of the current rainfall regime in the country".
+# Articles 13 and 14 advanced clocks by an hour from Saturday 1970-04-25 00:00.
+# http://www.impo.com.uy/diariooficial/1970/04/29/4
+Rule Uruguay 1970 only - Apr 25 0:00 1:00 -
+Rule Uruguay 1970 only - Jun 14 0:00 0 -
+Rule Uruguay 1972 only - Apr 23 0:00 1:00 -
+Rule Uruguay 1972 only - Jul 16 0:00 0 -
+# From Tim Parenti (2018-02-15):
+# Decreto 29/974 of 1974-01-11, citing "the international rise in the price of
+# oil", advanced clocks by 90 minutes (to UT-01:30). Decreto 163/974 of
+# 1974-03-04 returned 60 of those minutes (to UT-02:30), and the remaining 30
+# minutes followed in Decreto 679/974 of 1974-08-29.
+# http://www.impo.com.uy/diariooficial/1974/01/22/11
+# http://www.impo.com.uy/diariooficial/1974/03/14/3
+# http://www.impo.com.uy/diariooficial/1974/09/04/6
+Rule Uruguay 1974 only - Jan 13 0:00 1:30 -
+Rule Uruguay 1974 only - Mar 10 0:00 0:30 -
+Rule Uruguay 1974 only - Sep 1 0:00 0 -
+Rule Uruguay 1974 only - Dec 22 0:00 1:00 -
+Rule Uruguay 1975 only - Mar 30 0:00 0 -
+Rule Uruguay 1976 only - Dec 19 0:00 1:00 -
+Rule Uruguay 1977 only - Mar 6 0:00 0 -
+Rule Uruguay 1977 only - Dec 4 0:00 1:00 -
+Rule Uruguay 1978 1979 - Mar Sun>=1 0:00 0 -
+Rule Uruguay 1978 only - Dec 17 0:00 1:00 -
+Rule Uruguay 1979 only - Apr 29 0:00 1:00 -
+Rule Uruguay 1980 only - Mar 16 0:00 0 -
+# From Tim Parenti (2018-02-15):
+# Decreto 725/987 of 1987-12-04 cited "better use of national tourist
+# attractions" to advance clocks one hour from Monday 1987-12-14 00:00.
+# http://www.impo.com.uy/diariooficial/1988/01/25/1
+Rule Uruguay 1987 only - Dec 14 0:00 1:00 -
+Rule Uruguay 1988 only - Feb 28 0:00 0 -
+Rule Uruguay 1988 only - Dec 11 0:00 1:00 -
+Rule Uruguay 1989 only - Mar 5 0:00 0 -
+Rule Uruguay 1989 only - Oct 29 0:00 1:00 -
+Rule Uruguay 1990 only - Feb 25 0:00 0 -
+# From Tim Parenti (2018-02-15), per Paul Eggert (1999-11-04):
+# IATA agrees as below for 1990-10 through 1993-02. Per Almanaque 2018, the
+# 1992/1993 season appears to be the first in over half a century where DST
+# both began and ended pursuant to the same decree.
+Rule Uruguay 1990 1991 - Oct Sun>=21 0:00 1:00 -
+Rule Uruguay 1991 1992 - Mar Sun>=1 0:00 0 -
+Rule Uruguay 1992 only - Oct 18 0:00 1:00 -
Rule Uruguay 1993 only - Feb 28 0:00 0 -
# From Eduardo Cota (2004-09-20):
# The Uruguayan government has decreed a change in the local time....
-# http://www.presidencia.gub.uy/decretos/2004091502.htm
-Rule Uruguay 2004 only - Sep 19 0:00 1:00 S
+# From Tim Parenti (2018-02-15):
+# Decreto 328/004 of 2004-09-15.
+# http://www.impo.com.uy/diariooficial/2004/09/23/documentos.pdf#page=1
+Rule Uruguay 2004 only - Sep 19 0:00 1:00 -
# From Steffen Thorsen (2005-03-11):
# Uruguay's DST was scheduled to end on Sunday, 2005-03-13, but in order to
# save energy ... it was postponed two weeks....
-# http://www.presidencia.gub.uy/_Web/noticias/2005/03/2005031005.htm
+# From Tim Parenti (2018-02-15):
+# This 2005 postponement is not in Almanaque 2018. Go with the contemporaneous
+# reporting, which is confirmed by Decreto 107/005 of 2005-03-10 amending
+# Decreto 328/004:
+# http://www.impo.com.uy/diariooficial/2005/03/15/documentos.pdf#page=1
+# The original decree specified a transition of 2005-03-12 24:00, but the new
+# one specified 2005-03-27 02:00.
Rule Uruguay 2005 only - Mar 27 2:00 0 -
# From Eduardo Cota (2005-09-27):
-# http://www.presidencia.gub.uy/_Web/decretos/2005/09/CM%20119_09%2009%202005_00001.PDF
-# This means that from 2005-10-09 at 02:00 local time, until 2006-03-12 at
-# 02:00 local time, official time in Uruguay will be at GMT -2.
-Rule Uruguay 2005 only - Oct 9 2:00 1:00 S
-Rule Uruguay 2006 only - Mar 12 2:00 0 -
-# From Jesper Nørgaard Welen (2006-09-06):
-# http://www.presidencia.gub.uy/_web/decretos/2006/09/CM%20210_08%2006%202006_00001.PDF
-#
+# ...from 2005-10-09 at 02:00 local time, until 2006-03-12 at 02:00 local time,
+# official time in Uruguay will be at GMT -2.
+# From Tim Parenti (2018-02-15):
+# Decreto 318/005 of 2005-09-19.
+# http://www.impo.com.uy/diariooficial/2005/09/23/documentos.pdf#page=1
+Rule Uruguay 2005 only - Oct 9 2:00 1:00 -
+Rule Uruguay 2006 2015 - Mar Sun>=8 2:00 0 -
+# From Tim Parenti (2018-02-15), per Jesper Nørgaard Welen (2006-09-06):
+# Decreto 311/006 of 2006-09-04 established regular DST from the first Sunday
+# of October at 02:00 through the second Sunday of March at 02:00. Almanaque
+# 2018 appears to have a few typoed dates through this period; ignore them.
+# http://www.impo.com.uy/diariooficial/2006/09/08/documentos.pdf#page=1
+Rule Uruguay 2006 2014 - Oct Sun>=1 2:00 1:00 -
# From Steffen Thorsen (2015-06-30):
# ... it looks like they will not be using DST the coming summer:
# http://www.elobservador.com.uy/gobierno-resolvio-que-no-habra-cambio-horario-verano-n656787
@@ -1777,17 +1905,19 @@
# instead of out to dinner.
# From Pablo Camargo (2015-07-13):
# http://archivo.presidencia.gub.uy/sci/decretos/2015/06/cons_min_201.pdf
-# [dated 2015-06-29; repeals Decree 311/006 dated 2006-09-04]
-Rule Uruguay 2006 2014 - Oct Sun>=1 2:00 1:00 S
-Rule Uruguay 2007 2015 - Mar Sun>=8 2:00 0 -
+# From Tim Parenti (2018-02-15):
+# Decreto 178/015 of 2015-06-29; repeals Decreto 311/006.
# This Zone can be simplified once we assume zic %z.
-Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28
- -3:44:44 - MMT 1920 May 1 # Montevideo MT
+Zone America/Montevideo -3:44:51 - LMT 1908 Jun 10
+ -3:44:51 - MMT 1920 May 1 # Montevideo MT
+ -4:00 - -04 1923 Oct 1
-3:30 Uruguay -0330/-03 1942 Dec 14
+ -3:00 Uruguay -03/-0230 1960
-3:00 Uruguay -03/-02 1968
- -3:00 Uruguay -03/-0230 1971
+ -3:00 Uruguay -03/-0230 1970
-3:00 Uruguay -03/-02 1974
+ -3:00 Uruguay -03/-0130 1974 Mar 10
-3:00 Uruguay -03/-0230 1974 Dec 22
-3:00 Uruguay -03/-02
--- a/test/jdk/sun/util/calendar/zi/tzdata/zone.tab Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/sun/util/calendar/zi/tzdata/zone.tab Mon Apr 09 08:34:30 2018 -0700
@@ -452,7 +452,7 @@
US +643004-1652423 America/Nome Alaska (west)
US +515248-1763929 America/Adak Aleutian Islands
US +211825-1575130 Pacific/Honolulu Hawaii
-UY -3453-05611 America/Montevideo
+UY -345433-0561245 America/Montevideo
UZ +3940+06648 Asia/Samarkand Uzbekistan (west)
UZ +4120+06918 Asia/Tashkent Uzbekistan (east)
VA +415408+0122711 Europe/Vatican
--- a/test/jdk/tools/launcher/InfoStreams.java Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/tools/launcher/InfoStreams.java Mon Apr 09 08:34:30 2018 -0700
@@ -52,27 +52,33 @@
String classPath = System.getProperty("java.class.path");
- run("-help").stderrShouldMatch(USAGE).stdoutShouldNotMatch(".");
- run("--help").stdoutShouldMatch(USAGE).stderrShouldNotMatch(".");
+ run("-help").stderrShouldMatch(USAGE).stdoutShouldNotMatch(USAGE);
+ run("--help").stdoutShouldMatch(USAGE).stderrShouldNotMatch(USAGE);
- run("-version").stderrShouldMatch(VERSION_ERR).stdoutShouldNotMatch(".");
- run("--version").stdoutShouldMatch(VERSION_OUT).stderrShouldNotMatch(".");
+ run("-version").stderrShouldMatch(VERSION_ERR)
+ .stdoutShouldNotMatch(VERSION_ERR)
+ .stdoutShouldNotMatch(VERSION_OUT);
+ run("--version").stdoutShouldMatch(VERSION_OUT)
+ .stderrShouldNotMatch(VERSION_OUT)
+ .stderrShouldNotMatch(VERSION_ERR);
run("-showversion", "--dry-run", "-cp", classPath, "InfoStreams")
.stderrShouldMatch(VERSION_ERR)
- .stdoutShouldNotMatch(".");
+ .stdoutShouldNotMatch(VERSION_ERR)
+ .stdoutShouldNotMatch(VERSION_OUT);
run("--show-version", "--dry-run", "-cp", classPath, "InfoStreams")
.stdoutShouldMatch(VERSION_OUT)
- .stderrShouldNotMatch(".");
+ .stderrShouldNotMatch(VERSION_OUT)
+ .stderrShouldNotMatch(VERSION_ERR);
run("-fullversion").stderrShouldMatch(FULLVERSION_ERR)
- .stdoutShouldNotMatch(".");
+ .stdoutShouldNotMatch(FULLVERSION_ERR)
+ .stdoutShouldNotMatch(FULLVERSION_OUT);
run("--full-version").stdoutShouldMatch(FULLVERSION_OUT)
- .stderrShouldNotMatch(".");
+ .stderrShouldNotMatch(FULLVERSION_OUT)
+ .stderrShouldNotMatch(FULLVERSION_ERR);
- run("-X").stderrShouldMatch(NONSTD).stdoutShouldNotMatch(".");
- run("--help-extra").stdoutShouldMatch(NONSTD).stderrShouldNotMatch(".");
-
+ run("-X").stderrShouldMatch(NONSTD).stdoutShouldNotMatch(NONSTD);
+ run("--help-extra").stdoutShouldMatch(NONSTD).stderrShouldNotMatch(NONSTD);
}
-
}
--- a/test/jdk/tools/launcher/ToolsOpts.java Thu Apr 05 19:08:48 2018 -0700
+++ b/test/jdk/tools/launcher/ToolsOpts.java Mon Apr 09 08:34:30 2018 -0700
@@ -184,7 +184,6 @@
break;
}
- String[] output = tr.testOutput.toArray(new String[tr.testOutput.size()]);
//-Joptions should not be passed to tool
if (jpos > -1) {
checkJoptionOutput(tr, arg);
@@ -194,14 +193,23 @@
+ "CMD: " + cmdString);
}
} else {
- //check that each non -J option was passed to tool.
+ // check that each non -J option was passed to tool. It looks for each arg in the output.
+ // Irrelevant lines in the output are skipped. Arguments order is checked as well.
+ int j = 0;
+ List<String> output = tr.testOutput;
for (int i = 0; i < arg.length; i++) {
- if (output[i].compareTo(arg[i]) != 0) {
+ boolean found = false;
+ for (; j < output.size(); j++) {
+ if (output.get(j).equals(arg[i])) {
+ pass("check " + output.get(j) + " == " + arg[i]);
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
throw new RuntimeException(
- "failed! CMD: " + cmdString + "\n case:" +
- output[i] + " != " + arg[i]);
- } else {
- pass("check " + output[i] + " == " + arg[i]);
+ "failed! Should have passed non -J option [" + arg[i] + "] to tool.\n"
+ + "CMD: " + cmdString);
}
}
}
--- a/test/langtools/jdk/javadoc/doclet/testModules/jdk/element-list Thu Apr 05 19:08:48 2018 -0700
+++ b/test/langtools/jdk/javadoc/doclet/testModules/jdk/element-list Mon Apr 09 08:34:30 2018 -0700
@@ -332,7 +332,6 @@
com.sun.security.auth.module
module:jdk.security.jgss
com.sun.security.jgss
-module:jdk.snmp
module:jdk.xml.dom
org.w3c.dom.css
org.w3c.dom.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/T8199744/IncorrectMsgQualifiedReceiverTest.java Mon Apr 09 08:34:30 2018 -0700
@@ -0,0 +1,11 @@
+/*
+ * @test /nodynamiccopyright/
+ * @bug 8199744
+ * @summary Incorrect compiler message for ReceiverParameter in inner class constructor
+ * @compile/fail/ref=IncorrectMsgQualifiedReceiverTest.out -XDrawDiagnostics IncorrectMsgQualifiedReceiverTest.java
+ */
+
+class IncorrectMsgQualifiedReceiverTest {
+ void foo(int any, IncorrectMsgQualifiedReceiverTest IncorrectMsgQualifiedReceiverTest.this) {}
+ void bar(int any, IncorrectMsgQualifiedReceiverTest IncorrectMsgQualifiedReceiverTest.this, int another) {}
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/T8199744/IncorrectMsgQualifiedReceiverTest.out Mon Apr 09 08:34:30 2018 -0700
@@ -0,0 +1,3 @@
+IncorrectMsgQualifiedReceiverTest.java:9:91: compiler.err.this.as.identifier
+IncorrectMsgQualifiedReceiverTest.java:10:91: compiler.err.this.as.identifier
+2 errors
--- a/test/langtools/tools/javac/annotations/repeatingAnnotations/BasicRepeatingAnnotations.java Thu Apr 05 19:08:48 2018 -0700
+++ b/test/langtools/tools/javac/annotations/repeatingAnnotations/BasicRepeatingAnnotations.java Mon Apr 09 08:34:30 2018 -0700
@@ -72,7 +72,7 @@
}
a = BasicNonRepeatingAnno.class.getAnnotation(Foo.class);
if (a == null) {
- throw new RuntimeException("Repeated annoation not directly present");
+ throw new RuntimeException("Repeated annotation not directly present");
}
}
}
--- a/test/langtools/tools/javac/annotations/typeAnnotations/referenceinfos/ExceptionParameters.java Thu Apr 05 19:08:48 2018 -0700
+++ b/test/langtools/tools/javac/annotations/typeAnnotations/referenceinfos/ExceptionParameters.java Mon Apr 09 08:34:30 2018 -0700
@@ -84,7 +84,7 @@
}
@TADescription(annotation = "RTAs", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
- public String exceptionRepeatableAnnoation() {
+ public String exceptionRepeatableAnnotation() {
return "void exception() { try { new Object(); } catch(@RTA @RTA Exception e) { } }";
}
--- a/test/langtools/tools/javac/annotations/typeAnnotations/referenceinfos/MethodParameters.java Thu Apr 05 19:08:48 2018 -0700
+++ b/test/langtools/tools/javac/annotations/typeAnnotations/referenceinfos/MethodParameters.java Mon Apr 09 08:34:30 2018 -0700
@@ -223,7 +223,7 @@
genericLocation = { 0, 0 }, paramIndex = 1)
@TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER,
genericLocation = { 0, 0, 0, 0 }, paramIndex = 1)
- public String methodParamAsVarargRepeatableAnnoattion() {
+ public String methodParamAsVarargRepeatableAnnotation() {
return "void test(Object b, @RTC @RTC String @RTA @RTA [] @RTB @RTB ... a) { }";
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/importChecks/ImportCanonicalSameName/ImportCanonicalSameName.java Mon Apr 09 08:34:30 2018 -0700
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2017, Google Inc. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8187247
+ * @summary canonical import check compares classes by simple name
+ * @author cushon
+ *
+ * @compile p1/A.java p2/A.java
+ * @compile/fail/ref=ImportCanonicalSameName.out -XDrawDiagnostics ImportCanonicalSameName.java
+ */
+
+package p1;
+
+import p1.A.I;
+
+class T {
+ I i;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/importChecks/ImportCanonicalSameName/ImportCanonicalSameName.out Mon Apr 09 08:34:30 2018 -0700
@@ -0,0 +1,2 @@
+ImportCanonicalSameName.java:36:12: compiler.err.import.requires.canonical: p2.A.I
+1 error
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/importChecks/ImportCanonicalSameName/p1/A.java Mon Apr 09 08:34:30 2018 -0700
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2017, Google Inc. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package p1;
+public class A extends p2.A {}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/importChecks/ImportCanonicalSameName/p2/A.java Mon Apr 09 08:34:30 2018 -0700
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2017, Google Inc. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package p2;
+public class A {
+ public static class I {}
+}
--- a/test/langtools/tools/javac/lambda/8131742/T8131742.out Thu Apr 05 19:08:48 2018 -0700
+++ b/test/langtools/tools/javac/lambda/8131742/T8131742.out Mon Apr 09 08:34:30 2018 -0700
@@ -1,4 +1,2 @@
-T8131742.java:8:38: compiler.err.expected3: ',', ')', '['
T8131742.java:8:39: compiler.err.this.as.identifier
-T8131742.java:8:43: compiler.err.expected: ';'
-3 errors
+1 error
--- a/test/langtools/tools/javac/lambda/deduplication/Deduplication.java Thu Apr 05 19:08:48 2018 -0700
+++ b/test/langtools/tools/javac/lambda/deduplication/Deduplication.java Mon Apr 09 08:34:30 2018 -0700
@@ -77,18 +77,45 @@
group((Function<Integer, Integer>) y -> j);
group(
- (Function<Integer, Integer>) y -> {
- while (true) {
- break;
- }
- return 42;
- },
- (Function<Integer, Integer>) y -> {
- while (true) {
- break;
- }
- return 42;
- });
+ (Function<Integer, Integer>)
+ y -> {
+ while (true) {
+ break;
+ }
+ return 42;
+ },
+ (Function<Integer, Integer>)
+ y -> {
+ while (true) {
+ break;
+ }
+ return 42;
+ });
+
+ group(
+ (Function<Integer, Integer>)
+ x -> {
+ int y = x;
+ return y;
+ },
+ (Function<Integer, Integer>)
+ x -> {
+ int y = x;
+ return y;
+ });
+
+ group(
+ (Function<Integer, Integer>)
+ x -> {
+ int y = 0, z = x;
+ return y;
+ });
+ group(
+ (Function<Integer, Integer>)
+ x -> {
+ int y = 0, z = x;
+ return z;
+ });
class Local {
int i;
--- a/test/langtools/tools/javac/lambda/deduplication/DeduplicationTest.java Thu Apr 05 19:08:48 2018 -0700
+++ b/test/langtools/tools/javac/lambda/deduplication/DeduplicationTest.java Mon Apr 09 08:34:30 2018 -0700
@@ -22,7 +22,7 @@
*/
/**
- * @test 8200301
+ * @test 8200301 8201194
* @summary deduplicate lambda methods with the same body, target type, and captured state
* @modules jdk.jdeps/com.sun.tools.classfile jdk.compiler/com.sun.tools.javac.api
* jdk.compiler/com.sun.tools.javac.code jdk.compiler/com.sun.tools.javac.comp
@@ -32,6 +32,7 @@
*/
import static java.nio.charset.StandardCharsets.UTF_8;
import static java.util.stream.Collectors.joining;
+import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toMap;
import static java.util.stream.Collectors.toSet;
@@ -57,7 +58,6 @@
import com.sun.tools.javac.tree.JCTree.JCLambda;
import com.sun.tools.javac.tree.JCTree.JCMethodInvocation;
import com.sun.tools.javac.tree.JCTree.JCTypeCast;
-import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
import com.sun.tools.javac.tree.JCTree.Tag;
import com.sun.tools.javac.tree.TreeScanner;
import com.sun.tools.javac.util.Context;
@@ -70,10 +70,8 @@
import java.util.List;
import java.util.Locale;
import java.util.Map;
-import java.util.Objects;
import java.util.Set;
import java.util.TreeSet;
-import java.util.function.BiFunction;
import javax.tools.Diagnostic;
import javax.tools.DiagnosticListener;
import javax.tools.JavaFileObject;
@@ -160,36 +158,9 @@
}
}
- /**
- * Returns a symbol comparator that treats symbols that correspond to the same parameter of each
- * of the given lambdas as equal.
- */
- private static BiFunction<Symbol, Symbol, Boolean> paramsEqual(JCLambda lhs, JCLambda rhs) {
- return (x, y) -> {
- Integer idx = paramIndex(lhs, x);
- if (idx != null && idx != -1) {
- if (Objects.equals(idx, paramIndex(rhs, y))) {
- return true;
- }
- }
- return null;
- };
- }
-
- /**
- * Returns the index of the given symbol as a parameter of the given lambda, or else {@code -1}
- * if is not a parameter.
- */
- private static Integer paramIndex(JCLambda lambda, Symbol sym) {
- if (sym != null) {
- int idx = 0;
- for (JCVariableDecl param : lambda.params) {
- if (sym == param.sym) {
- return idx;
- }
- }
- }
- return null;
+ /** Returns the parameter symbols of the given lambda. */
+ private static List<Symbol> paramSymbols(JCLambda lambda) {
+ return lambda.params.stream().map(x -> x.sym).collect(toList());
}
/** A diagnostic listener that records debug messages related to lambda desugaring. */
@@ -310,13 +281,14 @@
dedupedLambdas.put(lhs, first);
}
for (JCLambda rhs : curr) {
- if (!new TreeDiffer(paramsEqual(lhs, rhs)).scan(lhs.body, rhs.body)) {
+ if (!new TreeDiffer(paramSymbols(lhs), paramSymbols(rhs))
+ .scan(lhs.body, rhs.body)) {
throw new AssertionError(
String.format(
"expected lambdas to be equal\n%s\n%s", lhs, rhs));
}
- if (TreeHasher.hash(lhs, sym -> paramIndex(lhs, sym))
- != TreeHasher.hash(rhs, sym -> paramIndex(rhs, sym))) {
+ if (TreeHasher.hash(lhs, paramSymbols(lhs))
+ != TreeHasher.hash(rhs, paramSymbols(rhs))) {
throw new AssertionError(
String.format(
"expected lambdas to hash to the same value\n%s\n%s",
@@ -334,14 +306,15 @@
}
for (JCLambda lhs : curr) {
for (JCLambda rhs : lambdaGroups.get(j)) {
- if (new TreeDiffer(paramsEqual(lhs, rhs)).scan(lhs.body, rhs.body)) {
+ if (new TreeDiffer(paramSymbols(lhs), paramSymbols(rhs))
+ .scan(lhs.body, rhs.body)) {
throw new AssertionError(
String.format(
"expected lambdas to not be equal\n%s\n%s",
lhs, rhs));
}
- if (TreeHasher.hash(lhs, sym -> paramIndex(lhs, sym))
- == TreeHasher.hash(rhs, sym -> paramIndex(rhs, sym))) {
+ if (TreeHasher.hash(lhs, paramSymbols(lhs))
+ == TreeHasher.hash(rhs, paramSymbols(rhs))) {
throw new AssertionError(
String.format(
"expected lambdas to hash to different values\n%s\n%s",
--- a/test/lib/jdk/test/lib/SecurityTools.java Thu Apr 05 19:08:48 2018 -0700
+++ b/test/lib/jdk/test/lib/SecurityTools.java Mon Apr 09 08:34:30 2018 -0700
@@ -43,8 +43,10 @@
private static ProcessBuilder getProcessBuilder(String tool, List<String> args) {
JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK(tool)
.addVMArg("-Duser.language=en")
- .addVMArg("-Duser.country=US")
- .addVMArg("-Djava.security.egd=file:/dev/./urandom");
+ .addVMArg("-Duser.country=US");
+ if (!Platform.isWindows()) {
+ launcher.addVMArg("-Djava.security.egd=file:/dev/./urandom");
+ }
for (String arg : args) {
if (arg.startsWith("-J")) {
launcher.addVMArg(arg.substring(2));
--- a/test/tools/javac/importChecks/ImportCanonicalSameName/ImportCanonicalSameName.java Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2017, Google Inc. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 8187247
- * @summary canonical import check compares classes by simple name
- * @author cushon
- *
- * @compile p1/A.java p2/A.java
- * @compile/fail/ref=ImportCanonicalSameName.out -XDrawDiagnostics ImportCanonicalSameName.java
- */
-
-package p1;
-
-import p1.A.I;
-
-class T {
- I i;
-}
--- a/test/tools/javac/importChecks/ImportCanonicalSameName/ImportCanonicalSameName.out Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-ImportCanonicalSameName.java:36:12: compiler.err.import.requires.canonical: p2.A.I
-1 error
--- a/test/tools/javac/importChecks/ImportCanonicalSameName/p1/A.java Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-/*
- * Copyright (c) 2017, Google Inc. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package p1;
-public class A extends p2.A {}
--- a/test/tools/javac/importChecks/ImportCanonicalSameName/p2/A.java Thu Apr 05 19:08:48 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2017, Google Inc. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package p2;
-public class A {
- public static class I {}
-}