mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-18 01:54:47 +02:00
Merge
This commit is contained in:
commit
d215683b97
147 changed files with 2495 additions and 3439 deletions
1
.hgtags
1
.hgtags
|
@ -478,3 +478,4 @@ e59941f7247d451fa7df9eaef3fce0f492f8420c jdk-11+4
|
|||
d5c43e9f08fb9a7c74aae0d48daf17f2ad2afaef jdk-11+5
|
||||
3acb379b86725c47e7f33358cb22efa8752ae532 jdk-11+6
|
||||
f7363de371c9a1f668bd0a01b7df3d1ddb9cc58b jdk-11+7
|
||||
755e1b55a4dff510f9639cdb5c5e82549a7e09b3 jdk-11+8
|
||||
|
|
|
@ -80,10 +80,15 @@ ifneq ($(MAN_DIR), )
|
|||
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))
|
||||
|
|
|
@ -81,7 +81,7 @@ AC_DEFUN([FLAGS_SETUP_LDFLAGS_HELPER],
|
|||
|
||||
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"
|
||||
|
|
|
@ -116,7 +116,7 @@ AC_DEFUN([FLAGS_SETUP_MACOSX_VERSION],
|
|||
# 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)
|
||||
|
@ -325,22 +325,18 @@ AC_DEFUN([FLAGS_SETUP_TOOLCHAIN_CONTROL],
|
|||
|
||||
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)
|
||||
|
||||
|
|
|
@ -395,7 +395,6 @@ COMPILER_COMMAND_FILE_FLAG:=@COMPILER_COMMAND_FILE_FLAG@
|
|||
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 @@ LD:=@FIXPATH@ @LD@
|
|||
# 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@
|
||||
|
|
|
@ -1022,24 +1022,6 @@ AC_DEFUN_ONCE([TOOLCHAIN_MISC_CHECKS],
|
|||
# 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
|
||||
|
|
|
@ -394,12 +394,11 @@ ifneq ($(OPENJDK_TARGET_OS), $(OPENJDK_TARGET_OS_TYPE))
|
|||
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))) \
|
||||
))
|
||||
|
||||
|
|
|
@ -860,10 +860,48 @@ define SetupNativeCompilationBody
|
|||
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 @@ define SetupNativeCompilationBody
|
|||
$(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 @@ define SetupNativeCompilationBody
|
|||
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 @@ define SetupNativeCompilationBody
|
|||
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 @@ define SetupNativeCompilationBody
|
|||
$(CODESIGN) -s openjdk_codesign $$@
|
||||
endif
|
||||
endif
|
||||
$$($1_CREATE_DEBUGINFO_CMDS)
|
||||
$$($1_STRIP_CMD)
|
||||
|
||||
endif
|
||||
endef
|
||||
|
||||
|
|
|
@ -432,7 +432,7 @@ var getJibProfilesProfiles = function (input, common, data) {
|
|||
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 @@ var getJibProfilesProfiles = function (input, common, data) {
|
|||
build_cpu: "x64",
|
||||
dependencies: ["devkit", "autoconf", "build_devkit", "cups"],
|
||||
configure_args: [
|
||||
"--openjdk-target=aarch64-linux-gnu"
|
||||
"--openjdk-target=aarch64-linux-gnu", "--with-freetype=bundled",
|
||||
],
|
||||
},
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#
|
||||
|
||||
include CopyCommon.gmk
|
||||
include Modules.gmk
|
||||
include TextFileProcessing.gmk
|
||||
|
||||
$(eval $(call IncludeCustomExtension, copy/Copy-java.base.gmk))
|
||||
|
@ -224,12 +225,27 @@ JDK_ADDITIONAL_LICENSE_INFO ?= $(wildcard $(TOPDIR)/ADDITIONAL_LICENSE_INFO)
|
|||
|
||||
$(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
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#
|
||||
|
||||
include CopyCommon.gmk
|
||||
include Modules.gmk
|
||||
|
||||
$(eval $(call IncludeCustomExtension, copy/Copy-java.desktop.gmk))
|
||||
|
||||
|
@ -48,3 +49,34 @@ $(LIB_DST_DIR)/%: $(PSFONTPROPFILE_SRC_DIR)/%
|
|||
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)
|
||||
|
||||
################################################################################
|
||||
|
|
|
@ -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 @@ ifneq ($(wildcard $(INCLUDE_SOURCE_OS_DIR)/*), )
|
|||
|
||||
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
|
||||
|
|
|
@ -21,4 +21,4 @@
|
|||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
tzdata2018c
|
||||
tzdata2018d
|
||||
|
|
|
@ -138,13 +138,13 @@ Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01
|
|||
|
||||
# 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 @@ Zone Africa/Cairo 2:05:09 - LMT 1900 Oct
|
|||
# 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 @@ Zone Africa/Accra -0:00:52 - LMT 1918
|
|||
|
||||
# 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 @@ Zone Africa/Tripoli 0:52:44 - LMT 1920
|
|||
# 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 @@ Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis
|
|||
|
||||
# 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 @@ Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis
|
|||
# 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
|
||||
|
||||
|
|
|
@ -98,7 +98,8 @@ Zone Antarctica/Casey 0 - -00 1969
|
|||
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
|
||||
|
|
|
@ -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 @@ Zone Asia/Kabul 4:36:48 - LMT 1890
|
|||
# (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 @@ Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2
|
|||
# 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 @@ Zone Asia/Baku 3:19:24 - LMT 1924 May 2
|
|||
# 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 1974 1977 - Oct Sun>=15 3:30 0 S
|
|||
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 @@ Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
|
|||
# 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 @@ Zone Asia/Tehran 3:25:44 - LMT 1916
|
|||
# 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 @@ Rule Japan 1950 1951 - May Sat>=1 24:00 1:00 D
|
|||
|
||||
# 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 @@ Rule Japan 1950 1951 - May Sat>=1 24:00 1:00 D
|
|||
|
||||
# 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 @@ Zone Asia/Oral 3:25:24 - LMT 1924 May 2 # or Ural'sk
|
|||
# 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 @@ Zone Asia/Beirut 2:22:00 - LMT 1880
|
|||
|
||||
# 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 @@ Zone Indian/Maldives 4:54:00 - LMT 1880 # Malé
|
|||
# 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 @@ Rule Mongol 1983 only - Oct 1 0:00 0 -
|
|||
# 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 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
|
|||
# [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 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
|
|||
# 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 2012 only - Sep 21 1:00 0 -
|
|||
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 @@ Zone Asia/Hebron 2:20:23 - LMT 1900 Oct
|
|||
# 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 @@ Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
|
|||
# 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.
|
||||
|
|
|
@ -219,20 +219,20 @@ Zone Australia/Broken_Hill 9:25:48 - LMT 1895 Feb
|
|||
|
||||
# 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 @@ Zone Indian/Cocos 6:27:40 - LMT 1900
|
|||
# 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 @@ Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki
|
|||
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 @@ Zone Pacific/Nauru 11:07:40 - LMT 1921 Jan 15 # Uaobe
|
|||
|
||||
# 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 1929 1933 - Mar Sun>=15 2:00 0 M
|
|||
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 @@ Link Pacific/Auckland Antarctica/McMurdo
|
|||
# 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 @@ Link Pacific/Pago_Pago Pacific/Midway # in US minor outlying islands
|
|||
# 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 @@ Zone Pacific/Fakaofo -11:24:56 - LMT 1901
|
|||
|
||||
# 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 @@ Zone Pacific/Wake 11:06:28 - LMT 1901
|
|||
|
||||
# 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 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
|
|||
# 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 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
|
|||
# "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 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
|
|||
|
||||
# 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 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
|
|||
# 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
|
||||
|
|
|
@ -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/Jersey
|
|||
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 @@ Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2
|
|||
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 @@ Zone Europe/Budapest 1:16:20 - LMT 1890 Oct
|
|||
# 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 @@ Zone Europe/Warsaw 1:24:00 - LMT 1880
|
|||
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 @@ Rule Port 1983 only - Mar lastSun 2:00s 1:00 S
|
|||
#
|
||||
# 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 @@ Zone Europe/Lisbon -0:36:45 - LMT 1884
|
|||
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 @@ Zone Atlantic/Azores -1:42:40 - LMT 1884 # Ponta Delgada
|
|||
-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 @@ Zone Europe/Kaliningrad 1:22:00 - LMT 1893 Apr
|
|||
|
||||
# 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 @@ Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
|
|||
# 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 @@ Zone Europe/Stockholm 1:12:12 - LMT 1879 Jan 1
|
|||
# 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):
|
||||
|
|
|
@ -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 @@ Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21
|
|||
# ...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 @@ Zone America/Denver -6:59:56 - LMT 1883 Nov 18 12:00:04
|
|||
# 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 @@ Zone America/Indiana/Vevay -5:40:16 - LMT 1883 Nov 18 12:19:44
|
|||
-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 @@ Zone America/Tegucigalpa -5:48:52 - LMT 1921 Apr
|
|||
# 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 America/Miquelon -3:44:40 - LMT 1911 May 15 # St Pierre
|
|||
#
|
||||
# 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
|
||||
|
|
|
@ -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 @@ Rule Arg 1988 only - Dec 1 0:00 1:00 S
|
|||
# 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 @@ Rule Arg 1989 1992 - Oct Sun>=15 0:00 1:00 S
|
|||
# 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 @@ Rule Arg 2000 only - Mar 3 0:00 0 -
|
|||
# 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 @@ Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 S
|
|||
# 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 @@ Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 S
|
|||
# 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 @@ Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 S
|
|||
# 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 @@ Zone America/Argentina/Mendoza -4:35:16 - LMT 1894 Oct 31
|
|||
# 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 @@ Zone America/La_Paz -4:32:36 - LMT 1890
|
|||
# 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 @@ Rule Brazil 1953 only - Mar 1 0:00 0 -
|
|||
# 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 @@ Rule Brazil 1993 only - Jan 31 0:00 0 -
|
|||
# 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 @@ Rule Brazil 1997 only - Feb 16 0:00 0 -
|
|||
# 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 @@ Rule Brazil 2000 only - Feb 27 0:00 0 -
|
|||
# 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 @@ Rule Brazil 2016 2022 - Feb Sun>=15 0:00 0 -
|
|||
# ... 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 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
|
|||
# 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 2008 only - Mar 30 3:00u 0 -
|
|||
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 @@ Zone Antarctica/Palmer 0 - -00 1965
|
|||
# "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 @@ Link America/Curacao America/Kralendijk # Caribbean Netherlands
|
|||
# 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 @@ Zone Pacific/Galapagos -5:58:24 - LMT 1931 # Puerto Baquerizo Moreno
|
|||
# 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 @@ Zone America/Guyana -3:52:40 - LMT 1915 Mar # Georgetown
|
|||
# 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 @@ Rule Para 1996 only - Mar 1 0:00 0 -
|
|||
# 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 @@ Rule Para 1998 2001 - Mar Sun>=1 0:00 0 -
|
|||
# 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 @@ Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 S
|
|||
# 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 @@ Rule Para 2005 2009 - Mar Sun>=8 0:00 0 -
|
|||
# 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 @@ Zone America/Asuncion -3:50:40 - LMT 1890
|
|||
# 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 @@ Link America/Port_of_Spain America/Tortola # Virgin Islands (UK)
|
|||
# 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 @@ Rule Uruguay 2006 only - Mar 12 2:00 0 -
|
|||
# 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
|
||||
|
||||
|
|
|
@ -452,7 +452,7 @@ US +593249-1394338 America/Yakutat Alaska - Yakutat
|
|||
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
|
||||
|
|
|
@ -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 @@ includes=\
|
|||
javax/management/ \
|
||||
org/omg/stub/javax/management/
|
||||
|
||||
excludes=\
|
||||
com/sun/jmx/snmp/
|
||||
excludes=
|
||||
|
||||
jtreg.tests=\
|
||||
com/sun/jmx/ \
|
||||
|
|
|
@ -34,6 +34,25 @@ $(eval $(call SetupBuildLauncher, pack200, \
|
|||
# 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 @@ else
|
|||
|
||||
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 @@ $(eval $(call SetupJdkExecutable, BUILD_UNPACKEXE, \
|
|||
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), \
|
||||
|
|
|
@ -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 @@ else
|
|||
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 @@ define SetupBuildLauncherBody
|
|||
$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 @@ define SetupBuildLauncherBody
|
|||
-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), \
|
||||
|
|
|
@ -651,10 +651,11 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBFONTMANAGER, \
|
|||
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 @@ ifneq (, $(findstring $(OPENJDK_TARGET_OS), solaris aix))
|
|||
$(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 @@ ifeq ($(OPENJDK_TARGET_OS), macosx)
|
|||
-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 \
|
||||
|
|
|
@ -105,7 +105,8 @@ ifeq ($(OPENJDK_TARGET_OS), macosx)
|
|||
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 := \
|
||||
|
|
|
@ -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:
|
||||
*;
|
||||
};
|
|
@ -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:
|
||||
*;
|
||||
};
|
|
@ -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:
|
||||
*;
|
||||
};
|
|
@ -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:
|
||||
*;
|
||||
};
|
|
@ -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:
|
||||
*;
|
||||
};
|
|
@ -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:
|
||||
*;
|
||||
};
|
|
@ -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:
|
||||
*;
|
||||
};
|
|
@ -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:
|
||||
*;
|
||||
};
|
|
@ -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:
|
||||
*;
|
||||
};
|
|
@ -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:
|
||||
*;
|
||||
};
|
|
@ -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:
|
||||
*;
|
||||
};
|
|
@ -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:
|
||||
*;
|
||||
};
|
|
@ -63,20 +63,14 @@ class EPollSelectorImpl extends SelectorImpl {
|
|||
// 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 @@ class EPollSelectorImpl extends SelectorImpl {
|
|||
}
|
||||
|
||||
/**
|
||||
* 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) {
|
||||
if (ski.isValid()) {
|
||||
int fd = ski.channel.getFDVal();
|
||||
SelectionKeyImpl previous = fdToKey.put(fd, ski);
|
||||
assert previous == null;
|
||||
assert ski.registeredEvents() == 0;
|
||||
}
|
||||
}
|
||||
|
||||
// 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)) {
|
||||
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 (newEvents == 0) {
|
||||
|
@ -206,11 +191,11 @@ class EPollSelectorImpl extends SelectorImpl {
|
|||
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++;
|
||||
|
@ -243,20 +228,12 @@ class EPollSelectorImpl extends SelectorImpl {
|
|||
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) {
|
||||
EPoll.ctl(epfd, EPOLL_CTL_DEL, fd, 0);
|
||||
|
@ -268,10 +245,9 @@ class EPollSelectorImpl extends SelectorImpl {
|
|||
}
|
||||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -62,11 +62,9 @@ class KQueueSelectorImpl extends SelectorImpl {
|
|||
// 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 @@ class KQueueSelectorImpl extends SelectorImpl {
|
|||
}
|
||||
|
||||
/**
|
||||
* 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) {
|
||||
if (ski.isValid()) {
|
||||
int fd = ski.channel.getFDVal();
|
||||
SelectionKeyImpl previous = fdToKey.put(fd, ski);
|
||||
assert previous == null;
|
||||
assert ski.registeredEvents() == 0;
|
||||
}
|
||||
}
|
||||
|
||||
// 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)) {
|
||||
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) {
|
||||
|
||||
|
@ -227,18 +216,15 @@ class KQueueSelectorImpl extends SelectorImpl {
|
|||
}
|
||||
|
||||
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++;
|
||||
|
@ -272,20 +258,12 @@ class KQueueSelectorImpl extends SelectorImpl {
|
|||
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();
|
||||
int registeredEvents = ski.registeredEvents();
|
||||
if (fdToKey.remove(fd) != null) {
|
||||
if (registeredEvents != 0) {
|
||||
|
@ -301,10 +279,9 @@ class KQueueSelectorImpl extends SelectorImpl {
|
|||
}
|
||||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 @@ public final class Class<T> implements java.io.Serializable,
|
|||
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);
|
||||
}
|
||||
|
|
|
@ -699,7 +699,7 @@ public abstract class ClassLoader {
|
|||
/**
|
||||
* 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 @@ public abstract class ClassLoader {
|
|||
|
||||
/**
|
||||
* 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 @@ public abstract class ClassLoader {
|
|||
* @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
|
||||
|
|
|
@ -152,7 +152,7 @@ public final class ModuleLayer {
|
|||
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 @@ public final class ModuleLayer {
|
|||
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());
|
||||
|
|
|
@ -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 @@ public class SecurityManager {
|
|||
*/
|
||||
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>.
|
||||
*
|
||||
|
@ -1080,28 +1067,6 @@ public class SecurityManager {
|
|||
SecurityConstants.PROPERTY_READ_ACTION));
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
|
@ -1124,44 +1089,6 @@ public class SecurityManager {
|
|||
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
|
||||
|
@ -1474,35 +1401,6 @@ public class SecurityManager {
|
|||
checkPermission(new RuntimePermission("setFactory"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
|
|
|
@ -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 @@ public abstract class VarHandle {
|
|||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1742,7 +1742,7 @@ public class ModuleDescriptor
|
|||
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 @@ public class ModuleDescriptor
|
|||
throw new IllegalArgumentException("Empty target set");
|
||||
if (strict) {
|
||||
requirePackageName(opens.source());
|
||||
targets.stream().forEach(Checks::requireModuleName);
|
||||
targets.forEach(Checks::requireModuleName);
|
||||
}
|
||||
return opens(opens);
|
||||
}
|
||||
|
|
|
@ -593,8 +593,7 @@ public class Proxy implements java.io.Serializable {
|
|||
module.getName(), cn, loader);
|
||||
}
|
||||
if (isDebug("debug")) {
|
||||
interfaces.stream()
|
||||
.forEach(c -> System.out.println(toDetails(c)));
|
||||
interfaces.forEach(c -> System.out.println(toDetails(c)));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -290,7 +290,10 @@ class InetAddress implements java.io.Serializable {
|
|||
/* 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 @@ class InetAddress implements java.io.Serializable {
|
|||
* @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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1411,7 +1411,7 @@ public final class URL implements java.io.Serializable {
|
|||
// 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) {
|
||||
|
|
|
@ -764,7 +764,7 @@ public class URLClassLoader extends SecureClassLoader implements Closeable {
|
|||
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
|
||||
|
|
|
@ -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 @@ alter the mechanisms and behavior of the various classes of the
|
|||
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>
|
||||
|
|
|
@ -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 @@ public final class PKCS12Attribute implements KeyStore.Entry.Attribute {
|
|||
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 @@ public final class PKCS12Attribute implements KeyStore.Entry.Attribute {
|
|||
if (!(obj instanceof PKCS12Attribute)) {
|
||||
return false;
|
||||
}
|
||||
return Arrays.equals(encoded, ((PKCS12Attribute) obj).getEncoded());
|
||||
return Arrays.equals(encoded, ((PKCS12Attribute) obj).encoded);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -210,10 +210,11 @@ public final class PKCS12Attribute implements KeyStore.Entry.Attribute {
|
|||
*/
|
||||
@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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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 @@ public class ChoiceFormat extends NumberFormat {
|
|||
* 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
|
||||
*/
|
||||
|
|
|
@ -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 @@ of common operations like making a Collection out of an array, and
|
|||
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>
|
||||
|
|
|
@ -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 @@ table:</p>
|
|||
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
|
||||
|
|
|
@ -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.</li>
|
|||
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 @@ Functionality-enhancing implementations for use with other
|
|||
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 @@ id=
|
|||
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 @@ possibility.</li>
|
|||
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 @@ asLifoQueue(Deque)</a></strong> - Returns a view of a
|
|||
"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 @@ access data store (such as a linked list).</li>
|
|||
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>
|
||||
|
|
|
@ -100,8 +100,8 @@ public class BootLoader {
|
|||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
|
|
|
@ -584,7 +584,7 @@ public class BuiltinClassLoader
|
|||
}
|
||||
|
||||
/**
|
||||
* 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 @@ public class BuiltinClassLoader
|
|||
}
|
||||
|
||||
/**
|
||||
* 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 @@ public class BuiltinClassLoader
|
|||
}
|
||||
|
||||
/**
|
||||
* 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 @@ public class BuiltinClassLoader
|
|||
}
|
||||
|
||||
/**
|
||||
* 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 @@ public class BuiltinClassLoader
|
|||
|
||||
/**
|
||||
* 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 @@ public class BuiltinClassLoader
|
|||
// -- 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);
|
||||
|
|
|
@ -90,7 +90,7 @@ public final class Loader extends SecureClassLoader {
|
|||
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 @@ public final class Loader extends SecureClassLoader {
|
|||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
|
|
|
@ -35,7 +35,6 @@ import java.util.Collections;
|
|||
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 @@ public class ModuleHashesBuilder {
|
|||
// 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 @@ public class ModuleHashesBuilder {
|
|||
}
|
||||
|
||||
/**
|
||||
* 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 @@ public class ModuleHashesBuilder {
|
|||
}
|
||||
|
||||
/**
|
||||
* 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 @@ public class ModuleHashesBuilder {
|
|||
}
|
||||
|
||||
/**
|
||||
* 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 @@ public class ModuleHashesBuilder {
|
|||
* 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 class ModuleHashesBuilder {
|
|||
|
||||
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 @@ public class ModuleHashesBuilder {
|
|||
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 @@ public class ModuleHashesBuilder {
|
|||
* 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 @@ public class ModuleHashesBuilder {
|
|||
}
|
||||
|
||||
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 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 Set<T> children(T node) {
|
||||
return graph.edges().get(node);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
else if (stack.contains(node)) {
|
||||
throw new IllegalArgumentException(
|
||||
"Cycle detected: " + node + " -> " + children(node));
|
||||
}
|
||||
visited.add(node);
|
||||
graph.edges().get(node).stream()
|
||||
.forEach(x -> visit(x, visited, done));
|
||||
done.add(node);
|
||||
result.addLast(node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -81,7 +81,7 @@ import java.lang.annotation.*;
|
|||
*
|
||||
* @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)
|
||||
|
|
|
@ -388,7 +388,10 @@ class NativeObject { // package-private
|
|||
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 @@ class NativeObject { // package-private
|
|||
* @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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -49,7 +49,7 @@ public interface SelChImpl extends Channel {
|
|||
* 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 @@ public interface SelChImpl extends Channel {
|
|||
* 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
|
||||
|
|
|
@ -39,7 +39,7 @@ import java.nio.channels.spi.AbstractSelectionKey;
|
|||
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 @@ public final class SelectionKeyImpl
|
|||
throw new CancelledKeyException();
|
||||
}
|
||||
|
||||
int getFDVal() {
|
||||
return channel.getFDVal();
|
||||
}
|
||||
|
||||
@Override
|
||||
public SelectableChannel channel() {
|
||||
return (SelectableChannel)channel;
|
||||
|
@ -103,8 +107,8 @@ public final class SelectionKeyImpl
|
|||
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 @@ public final class SelectionKeyImpl
|
|||
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;
|
||||
|
|
|
@ -64,17 +64,20 @@ public abstract class SelectorImpl
|
|||
publicSelectedKeys = Util.ungrowableSet(selectedKeys);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Set<SelectionKey> keys() {
|
||||
private void ensureOpen() {
|
||||
if (!isOpen())
|
||||
throw new ClosedSelectorException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Set<SelectionKey> keys() {
|
||||
ensureOpen();
|
||||
return publicKeys;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Set<SelectionKey> selectedKeys() {
|
||||
if (!isOpen())
|
||||
throw new ClosedSelectorException();
|
||||
ensureOpen();
|
||||
return publicSelectedKeys;
|
||||
}
|
||||
|
||||
|
@ -112,8 +115,7 @@ public abstract class SelectorImpl
|
|||
|
||||
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 @@ public abstract class SelectorImpl
|
|||
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 @@ public abstract class SelectorImpl
|
|||
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 @@ public abstract class SelectorImpl
|
|||
/**
|
||||
* Change the event set in the selector
|
||||
*/
|
||||
protected abstract void putEventOps(SelectionKeyImpl ski, int events);
|
||||
protected abstract void setEventOps(SelectionKeyImpl ski);
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -445,7 +445,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle {
|
|||
"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},
|
||||
|
|
|
@ -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 @@ WinMain(HINSTANCE inst, HINSTANCE previnst, LPSTR cmdline, int cmdshow)
|
|||
__initenv = _environ;
|
||||
|
||||
#else /* JAVAW */
|
||||
int
|
||||
JNIEXPORT int JNICALL
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int margc;
|
||||
|
|
|
@ -55,17 +55,14 @@ class DevPollSelectorImpl
|
|||
// 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 @@ class DevPollSelectorImpl
|
|||
}
|
||||
|
||||
@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 @@ class DevPollSelectorImpl
|
|||
}
|
||||
|
||||
/**
|
||||
* 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 @@ class DevPollSelectorImpl
|
|||
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 @@ class DevPollSelectorImpl
|
|||
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 @@ class DevPollSelectorImpl
|
|||
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 @@ class DevPollSelectorImpl
|
|||
}
|
||||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -72,12 +72,10 @@ class EventPortSelectorImpl
|
|||
// 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 @@ class EventPortSelectorImpl
|
|||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
// 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)) {
|
||||
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();
|
||||
if (newEvents != ski.registeredEvents()) {
|
||||
if (newEvents == 0) {
|
||||
port_dissociate(pfd, PORT_SOURCE_FD, fd);
|
||||
|
@ -199,22 +188,20 @@ class EventPortSelectorImpl
|
|||
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;
|
||||
|
@ -244,20 +231,12 @@ class EventPortSelectorImpl
|
|||
pollArray.free();
|
||||
}
|
||||
|
||||
@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 @@ class EventPortSelectorImpl
|
|||
}
|
||||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 "nio.h"
|
||||
#include "nio_util.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
|
||||
|
||||
#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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL
|
||||
Java_sun_nio_ch_DevPollArrayWrapper_init(JNIEnv *env, jobject this)
|
||||
|
@ -153,26 +89,24 @@ Java_sun_nio_ch_DevPollArrayWrapper_registerMultiple(JNIEnv *env, jobject this,
|
|||
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -60,7 +60,6 @@ class PollSelectorImpl extends SelectorImpl {
|
|||
// 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 @@ class PollSelectorImpl extends SelectorImpl {
|
|||
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 @@ class PollSelectorImpl extends SelectorImpl {
|
|||
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 @@ class PollSelectorImpl extends SelectorImpl {
|
|||
}
|
||||
|
||||
@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 @@ class PollSelectorImpl extends SelectorImpl {
|
|||
|
||||
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 @@ class PollSelectorImpl extends SelectorImpl {
|
|||
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 @@ class PollSelectorImpl extends SelectorImpl {
|
|||
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 @@ class PollSelectorImpl extends SelectorImpl {
|
|||
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);
|
||||
|
|
|
@ -64,7 +64,7 @@ class PollArrayWrapper {
|
|||
|
||||
// Prepare another pollfd struct for use.
|
||||
void putEntry(int index, SelectionKeyImpl ski) {
|
||||
putDescriptor(index, ski.channel.getFDVal());
|
||||
putDescriptor(index, ski.getFDVal());
|
||||
putEventOps(index, 0);
|
||||
}
|
||||
|
||||
|
|
|
@ -83,12 +83,12 @@ class WindowsSelectorImpl extends SelectorImpl {
|
|||
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 @@ class WindowsSelectorImpl extends SelectorImpl {
|
|||
private static final class MapEntry {
|
||||
final SelectionKeyImpl ski;
|
||||
long updateCount = 0;
|
||||
long clearedCount = 0;
|
||||
MapEntry(SelectionKeyImpl ski) {
|
||||
this.ski = ski;
|
||||
}
|
||||
|
@ -114,11 +113,10 @@ class WindowsSelectorImpl extends SelectorImpl {
|
|||
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 @@ class WindowsSelectorImpl extends SelectorImpl {
|
|||
}
|
||||
|
||||
// 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 @@ class WindowsSelectorImpl extends SelectorImpl {
|
|||
}
|
||||
|
||||
/**
|
||||
* 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 @@ class WindowsSelectorImpl extends SelectorImpl {
|
|||
}
|
||||
|
||||
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 @@ class WindowsSelectorImpl extends SelectorImpl {
|
|||
}
|
||||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
@ -370,30 +370,6 @@ class AppletSecurity extends AWTSecurityManager {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
|
|
|
@ -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 @@ public class MsgAppletViewer extends ListResourceBundle {
|
|||
{"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}"},
|
||||
|
|
|
@ -183,15 +183,7 @@ public class LambdaToMethod extends TreeTranslator {
|
|||
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 @@ public class LambdaToMethod extends TreeTranslator {
|
|||
}
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -89,24 +89,34 @@ import com.sun.tools.javac.tree.JCTree.TypeBoundKind;
|
|||
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 @@ public class TreeDiffer extends TreeScanner {
|
|||
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 @@ public class TreeDiffer extends TreeScanner {
|
|||
&& 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
|
||||
|
|
|
@ -30,26 +30,31 @@ import com.sun.tools.javac.tree.JCTree;
|
|||
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 class TreeHasher extends TreeScanner {
|
|||
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 @@ public class TreeHasher extends TreeScanner {
|
|||
hash(tree.sym);
|
||||
super.visitSelect(tree);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitVarDef(JCVariableDecl tree) {
|
||||
symbolHashes.computeIfAbsent(tree.sym, k -> symbolHashes.size());
|
||||
super.visitVarDef(tree);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3106,35 +3106,34 @@ public class JavacParser implements Parser {
|
|||
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 @@ public class JavacParser implements Parser {
|
|||
JCVariableDecl lastParam;
|
||||
accept(LPAREN);
|
||||
if (token.kind != RPAREN) {
|
||||
this.allowThisIdent = true;
|
||||
this.allowThisIdent = !lambdaParameters;
|
||||
lastParam = formalParameter(lambdaParameters);
|
||||
if (lastParam.nameexpr != null) {
|
||||
this.receiverParam = lastParam;
|
||||
|
|
|
@ -2740,7 +2740,8 @@ compiler.err.assert.as.identifier=\
|
|||
|
||||
# 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
|
||||
|
|
|
@ -446,7 +446,7 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle {
|
|||
"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},
|
||||
|
|
|
@ -446,7 +446,7 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle {
|
|||
"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},
|
||||
|
|
|
@ -446,7 +446,7 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle {
|
|||
"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},
|
||||
|
|
|
@ -446,7 +446,7 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle {
|
|||
"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},
|
||||
|
|
|
@ -446,7 +446,7 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle {
|
|||
"\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},
|
||||
|
|
|
@ -446,7 +446,7 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle {
|
|||
"\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},
|
||||
|
|
|
@ -446,7 +446,7 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle {
|
|||
"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},
|
||||
|
|
|
@ -446,7 +446,7 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle {
|
|||
"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},
|
||||
|
|
|
@ -446,7 +446,7 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle {
|
|||
"\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},
|
||||
|
|
|
@ -446,7 +446,7 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle {
|
|||
"\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},
|
||||
|
|
|
@ -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.jdp.JdpException;
|
|||
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 @@ public class Agent {
|
|||
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 @@ public class Agent {
|
|||
"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 @@ public class Agent {
|
|||
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 @@ public class Agent {
|
|||
}
|
||||
}
|
||||
|
||||
// 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 @@ public class Agent {
|
|||
}
|
||||
|
||||
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 @@ public class Agent {
|
|||
}
|
||||
|
||||
try {
|
||||
if (snmpPort != null) {
|
||||
loadSnmpAgent(props);
|
||||
}
|
||||
|
||||
/*
|
||||
* If the jmxremote.port property is set then we start the
|
||||
|
@ -533,12 +530,10 @@ public class Agent {
|
|||
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 @@ public class Agent {
|
|||
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 @@ public class Agent {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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");
|
||||
|
||||
|
|
|
@ -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
|
||||
|
@ -49,82 +46,6 @@
|
|||
# To enable thread contention monitoring, uncomment the following line
|
||||
# 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
|
||||
#####################################################################
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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 @@ public class WalkThroughInvoke {
|
|||
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.
|
||||
|
|
|
@ -49,7 +49,7 @@ public class IsAnnotationType {
|
|||
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 @@ public class IsAnnotationType {
|
|||
failures += test(AnnotationPoseur.class, false);
|
||||
|
||||
if (failures > 0) {
|
||||
throw new RuntimeException("Unexepcted annotation " +
|
||||
throw new RuntimeException("Unexpected annotation " +
|
||||
"status detected.");
|
||||
}
|
||||
}
|
||||
|
|
114
test/jdk/java/lang/Enum/ConstantDirectoryOptimalCapacity.java
Normal file
114
test/jdk/java/lang/Enum/ConstantDirectoryOptimalCapacity.java
Normal file
|
@ -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 }
|
||||
}
|
|
@ -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 @@ public class DestroyTest {
|
|||
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;
|
||||
}
|
||||
|
|
|
@ -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) { }
|
||||
}
|
||||
}
|
|
@ -38,8 +38,8 @@ import jdk.internal.org.objectweb.asm.*;
|
|||
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 @@ public class ClassFileGenerator {
|
|||
|
||||
*/
|
||||
|
||||
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 @@ public class ClassFileGenerator {
|
|||
|
||||
*/
|
||||
|
||||
private static class AnnoationWithParameterDump implements Opcodes {
|
||||
private static class AnnotationWithParameterDump implements Opcodes {
|
||||
public static byte[] dump() throws Exception {
|
||||
|
||||
ClassWriter cw = new ClassWriter(0);
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue