Merge
This commit is contained in:
commit
77326c3251
@ -73,3 +73,4 @@ fd3663286e77b9f13c39eee124db2beb079b3ca6 jdk7-b95
|
||||
cf71cb5151166f35433afebaf67dbf34a704a170 jdk7-b96
|
||||
5e197c942c6ebd8b92f324a31049c5f1d26d40ef jdk7-b97
|
||||
6cea9984d73d74de0cd01f30d07ac0a1ed196117 jdk7-b98
|
||||
e7f18db469a3e947b7096bfd12e87380e5a042cd jdk7-b99
|
||||
|
76
Makefile
76
Makefile
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 1995, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -29,10 +29,6 @@ ifndef TOPDIR
|
||||
TOPDIR:=.
|
||||
endif
|
||||
|
||||
ifndef CONTROL_TOPDIR
|
||||
CONTROL_TOPDIR=$(TOPDIR)
|
||||
endif
|
||||
|
||||
# Openjdk sources (only used if SKIP_OPENJDK_BUILD!=true)
|
||||
OPENJDK_SOURCETREE=$(TOPDIR)/openjdk
|
||||
OPENJDK_BUILDDIR:=$(shell \
|
||||
@ -120,7 +116,7 @@ endif
|
||||
all_product_build::
|
||||
@$(FINISH_ECHO)
|
||||
|
||||
# Generis build of basic repo series
|
||||
# Generic build of basic repo series
|
||||
generic_build_repo_series::
|
||||
$(MKDIR) -p $(OUTPUTDIR)
|
||||
$(MKDIR) -p $(OUTPUTDIR)/j2sdk-image
|
||||
@ -179,11 +175,15 @@ endif
|
||||
# The install process needs to know what the DEBUG_NAME is, so
|
||||
# look for INSTALL_DEBUG_NAME in the install rules.
|
||||
#
|
||||
# NOTE: On windows, do not use $(ABS_BOOTDIR_OUTPUTDIR)-$(DEBUG_NAME).
|
||||
# Due to the use of short paths in $(ABS_OUTPUTDIR), this may
|
||||
# not be the same location.
|
||||
#
|
||||
|
||||
# Location of fresh bootdir output
|
||||
ABS_BOOTDIR_OUTPUTDIR=$(ABS_OUTPUTDIR)/bootjdk
|
||||
FRESH_BOOTDIR=$(ABS_BOOTDIR_OUTPUTDIR)/j2sdk-image
|
||||
FRESH_DEBUG_BOOTDIR=$(ABS_BOOTDIR_OUTPUTDIR)-$(DEBUG_NAME)/j2sdk-image
|
||||
FRESH_DEBUG_BOOTDIR=$(ABS_BOOTDIR_OUTPUTDIR)/../$(PLATFORM)-$(ARCH)-$(DEBUG_NAME)/j2sdk-image
|
||||
|
||||
create_fresh_product_bootdir: FRC
|
||||
@$(START_ECHO)
|
||||
@ -248,10 +248,14 @@ build_product_image:
|
||||
generic_build_repo_series
|
||||
@$(FINISH_ECHO)
|
||||
|
||||
# NOTE: On windows, do not use $(ABS_OUTPUTDIR)-$(DEBUG_NAME).
|
||||
# Due to the use of short paths in $(ABS_OUTPUTDIR), this may
|
||||
# not be the same location.
|
||||
|
||||
generic_debug_build:
|
||||
@$(START_ECHO)
|
||||
$(MAKE) \
|
||||
ALT_OUTPUTDIR=$(ABS_OUTPUTDIR)-$(DEBUG_NAME) \
|
||||
ALT_OUTPUTDIR=$(ABS_OUTPUTDIR)/../$(PLATFORM)-$(ARCH)-$(DEBUG_NAME) \
|
||||
DEBUG_NAME=$(DEBUG_NAME) \
|
||||
GENERATE_DOCS=false \
|
||||
$(BOOT_CYCLE_DEBUG_SETTINGS) \
|
||||
@ -348,8 +352,8 @@ endif
|
||||
|
||||
clobber::
|
||||
$(RM) -r $(OUTPUTDIR)/*
|
||||
$(RM) -r $(OUTPUTDIR)-debug/*
|
||||
$(RM) -r $(OUTPUTDIR)-fastdebug/*
|
||||
$(RM) -r $(OUTPUTDIR)/../$(PLATFORM)-$(ARCH)-debug/*
|
||||
$(RM) -r $(OUTPUTDIR)/../$(PLATFORM)-$(ARCH)-fastdebug/*
|
||||
-($(RMDIR) -p $(OUTPUTDIR) > $(DEV_NULL) 2>&1; $(TRUE))
|
||||
|
||||
clean: clobber
|
||||
@ -550,6 +554,56 @@ ifeq ($(BUNDLE_RULES_AVAILABLE), true)
|
||||
include $(BUNDLE_RULES)
|
||||
endif
|
||||
|
||||
################################################################
|
||||
# rule to test
|
||||
################################################################
|
||||
|
||||
.NOTPARALLEL: test
|
||||
|
||||
test: test_clean test_start test_summary
|
||||
|
||||
test_start:
|
||||
@$(ECHO) "Tests started at `$(DATE)`"
|
||||
|
||||
test_clean:
|
||||
$(RM) $(OUTPUTDIR)/test_failures.txt $(OUTPUTDIR)/test_log.txt
|
||||
|
||||
test_summary: $(OUTPUTDIR)/test_failures.txt
|
||||
@$(ECHO) "#################################################"
|
||||
@$(ECHO) "Tests completed at `$(DATE)`"
|
||||
@( $(EGREP) '^TEST STATS:' $(OUTPUTDIR)/test_log.txt \
|
||||
|| $(ECHO) "No TEST STATS seen in log" )
|
||||
@$(ECHO) "For complete details see: $(OUTPUTDIR)/test_log.txt"
|
||||
@$(ECHO) "#################################################"
|
||||
@if [ -s $< ] ; then \
|
||||
$(ECHO) "ERROR: Test failure count: `$(CAT) $< | $(WC) -l`"; \
|
||||
$(CAT) $<; \
|
||||
exit 1; \
|
||||
else \
|
||||
$(ECHO) "Success! No failures detected"; \
|
||||
fi
|
||||
|
||||
# Get failure list from log
|
||||
$(OUTPUTDIR)/test_failures.txt: $(OUTPUTDIR)/test_log.txt
|
||||
@$(RM) $@
|
||||
@( $(EGREP) '^FAILED:' $< || $(ECHO) "" ) > $@
|
||||
|
||||
# Get log file of all tests run
|
||||
JDK_TO_TEST := $(shell \
|
||||
if [ -d "$(ABS_OUTPUTDIR)/j2sdk-image" ] ; then \
|
||||
$(ECHO) "$(ABS_OUTPUTDIR)/j2sdk-image"; \
|
||||
elif [ -d "$(ABS_OUTPUTDIR)/bin" ] ; then \
|
||||
$(ECHO) "$(ABS_OUTPUTDIR)"; \
|
||||
elif [ "$(PRODUCT_HOME)" != "" -a -d "$(PRODUCT_HOME)/bin" ] ; then \
|
||||
$(ECHO) "$(PRODUCT_HOME)"; \
|
||||
fi \
|
||||
)
|
||||
$(OUTPUTDIR)/test_log.txt:
|
||||
$(RM) $@
|
||||
( $(CD) test && \
|
||||
$(MAKE) NO_STOPPING=- PRODUCT_HOME=$(JDK_TO_TEST) \
|
||||
) | tee $@
|
||||
|
||||
################################################################
|
||||
# JPRT rule to build
|
||||
################################################################
|
||||
@ -560,7 +614,7 @@ include ./make/jprt.gmk
|
||||
# PHONY
|
||||
################################################################
|
||||
|
||||
.PHONY: all \
|
||||
.PHONY: all test test_start test_summary test_clean \
|
||||
generic_build_repo_series \
|
||||
what clobber insane \
|
||||
dev dev-build dev-sanity dev-clobber \
|
||||
|
@ -102,3 +102,4 @@ d38f45079fe98792a7381dbb4b64f5b589ec8c58 jdk7-b94
|
||||
573e8ea5fd68e8e51eb6308d283ac3b3889d15e0 hs19-b02
|
||||
5f42499e57adc16380780f40541e1a66cd601891 jdk7-b97
|
||||
8a045b3f5c13eaad92ff4baf15ca671845fcad1a jdk7-b98
|
||||
6a236384a379642b5a2398e2819db9ab4e711e9b jdk7-b99
|
||||
|
@ -32,6 +32,17 @@ SLASH_JAVA ?= J:
|
||||
PATH_SEP = ;
|
||||
|
||||
# Need PLATFORM (os-arch combo names) for jdk and hotspot, plus libarch name
|
||||
ifeq ($(ARCH_DATA_MODEL),32)
|
||||
ARCH_DATA_MODEL=32
|
||||
PLATFORM=windows-i586
|
||||
VM_PLATFORM=windows_i486
|
||||
HS_ARCH=x86
|
||||
MAKE_ARGS += ARCH=x86
|
||||
MAKE_ARGS += BUILDARCH=i486
|
||||
MAKE_ARGS += Platform_arch=x86
|
||||
MAKE_ARGS += Platform_arch_model=x86_32
|
||||
endif
|
||||
|
||||
ifneq ($(shell $(ECHO) $(PROCESSOR_IDENTIFIER) | $(GREP) x86),)
|
||||
ARCH_DATA_MODEL=32
|
||||
PLATFORM=windows-i586
|
||||
@ -43,55 +54,57 @@ ifneq ($(shell $(ECHO) $(PROCESSOR_IDENTIFIER) | $(GREP) x86),)
|
||||
MAKE_ARGS += Platform_arch_model=x86_32
|
||||
endif
|
||||
|
||||
ifneq ($(shell $(ECHO) $(PROCESSOR_IDENTIFIER) | $(GREP) ia64),)
|
||||
ARCH_DATA_MODEL=64
|
||||
PLATFORM=windows-ia64
|
||||
VM_PLATFORM=windows_ia64
|
||||
HS_ARCH=ia64
|
||||
MAKE_ARGS += LP64=1
|
||||
MAKE_ARGS += ARCH=ia64
|
||||
MAKE_ARGS += BUILDARCH=ia64
|
||||
MAKE_ARGS += Platform_arch=ia64
|
||||
MAKE_ARGS += Platform_arch_model=ia64
|
||||
endif
|
||||
ifneq ($(ARCH_DATA_MODEL),32)
|
||||
ifneq ($(shell $(ECHO) $(PROCESSOR_IDENTIFIER) | $(GREP) ia64),)
|
||||
ARCH_DATA_MODEL=64
|
||||
PLATFORM=windows-ia64
|
||||
VM_PLATFORM=windows_ia64
|
||||
HS_ARCH=ia64
|
||||
MAKE_ARGS += LP64=1
|
||||
MAKE_ARGS += ARCH=ia64
|
||||
MAKE_ARGS += BUILDARCH=ia64
|
||||
MAKE_ARGS += Platform_arch=ia64
|
||||
MAKE_ARGS += Platform_arch_model=ia64
|
||||
endif
|
||||
|
||||
# http://support.microsoft.com/kb/888731 : this can be either
|
||||
# AMD64 for AMD, or EM64T for Intel chips.
|
||||
ifneq ($(shell $(ECHO) $(PROCESSOR_IDENTIFIER) | $(GREP) AMD64),)
|
||||
ARCH_DATA_MODEL=64
|
||||
PLATFORM=windows-amd64
|
||||
VM_PLATFORM=windows_amd64
|
||||
HS_ARCH=x86
|
||||
MAKE_ARGS += LP64=1
|
||||
MAKE_ARGS += ARCH=x86
|
||||
MAKE_ARGS += BUILDARCH=amd64
|
||||
MAKE_ARGS += Platform_arch=x86
|
||||
MAKE_ARGS += Platform_arch_model=x86_64
|
||||
endif
|
||||
ifneq ($(shell $(ECHO) $(PROCESSOR_IDENTIFIER) | $(GREP) AMD64),)
|
||||
ARCH_DATA_MODEL=64
|
||||
PLATFORM=windows-amd64
|
||||
VM_PLATFORM=windows_amd64
|
||||
HS_ARCH=x86
|
||||
MAKE_ARGS += LP64=1
|
||||
MAKE_ARGS += ARCH=x86
|
||||
MAKE_ARGS += BUILDARCH=amd64
|
||||
MAKE_ARGS += Platform_arch=x86
|
||||
MAKE_ARGS += Platform_arch_model=x86_64
|
||||
endif
|
||||
|
||||
ifneq ($(shell $(ECHO) $(PROCESSOR_IDENTIFIER) | $(GREP) EM64T),)
|
||||
ARCH_DATA_MODEL=64
|
||||
PLATFORM=windows-amd64
|
||||
VM_PLATFORM=windows_amd64
|
||||
HS_ARCH=x86
|
||||
MAKE_ARGS += LP64=1
|
||||
MAKE_ARGS += ARCH=x86
|
||||
MAKE_ARGS += BUILDARCH=amd64
|
||||
MAKE_ARGS += Platform_arch=x86
|
||||
MAKE_ARGS += Platform_arch_model=x86_64
|
||||
endif
|
||||
ARCH_DATA_MODEL=64
|
||||
PLATFORM=windows-amd64
|
||||
VM_PLATFORM=windows_amd64
|
||||
HS_ARCH=x86
|
||||
MAKE_ARGS += LP64=1
|
||||
MAKE_ARGS += ARCH=x86
|
||||
MAKE_ARGS += BUILDARCH=amd64
|
||||
MAKE_ARGS += Platform_arch=x86
|
||||
MAKE_ARGS += Platform_arch_model=x86_64
|
||||
endif
|
||||
|
||||
# NB later OS versions than 2003 may report "Intel64"
|
||||
ifneq ($(shell $(ECHO) $(PROCESSOR_IDENTIFIER) | $(GREP) Intel64),)
|
||||
ARCH_DATA_MODEL=64
|
||||
PLATFORM=windows-amd64
|
||||
VM_PLATFORM=windows_amd64
|
||||
HS_ARCH=x86
|
||||
MAKE_ARGS += LP64=1
|
||||
MAKE_ARGS += ARCH=x86
|
||||
MAKE_ARGS += BUILDARCH=amd64
|
||||
MAKE_ARGS += Platform_arch=x86
|
||||
MAKE_ARGS += Platform_arch_model=x86_64
|
||||
ifneq ($(shell $(ECHO) $(PROCESSOR_IDENTIFIER) | $(GREP) Intel64),)
|
||||
ARCH_DATA_MODEL=64
|
||||
PLATFORM=windows-amd64
|
||||
VM_PLATFORM=windows_amd64
|
||||
HS_ARCH=x86
|
||||
MAKE_ARGS += LP64=1
|
||||
MAKE_ARGS += ARCH=x86
|
||||
MAKE_ARGS += BUILDARCH=amd64
|
||||
MAKE_ARGS += Platform_arch=x86
|
||||
MAKE_ARGS += Platform_arch_model=x86_64
|
||||
endif
|
||||
endif
|
||||
|
||||
JDK_INCLUDE_SUBDIR=win32
|
||||
|
@ -73,3 +73,4 @@ db951e984ccf50756160fee3078c791300b0917e jdk7-b95
|
||||
51b9e5dbc2da0631414484b934ac3fb62e48a2c6 jdk7-b96
|
||||
b1903d7528d33b521df42bc9291bdcdd2f444a29 jdk7-b97
|
||||
82593186fa54ab12f17af31f86a7bf364efaf4df jdk7-b98
|
||||
2587c9f0b60dc3146b4247b8674ada456a643d6f jdk7-b99
|
||||
|
@ -320,6 +320,7 @@ override LIBCXX = -lstdc++
|
||||
endif
|
||||
override LIBPOSIX4 =
|
||||
override LIBSOCKET =
|
||||
override LIBNSL =
|
||||
override LIBTHREAD =
|
||||
override MOOT_PRIORITIES = true
|
||||
override NO_INTERRUPTIBLE_IO = true
|
||||
|
@ -645,6 +645,9 @@ LIBM = /usr/lib$(ISA_DIR)/libm.so.2
|
||||
# Socket library
|
||||
LIBSOCKET = -lsocket
|
||||
|
||||
# Network Services library
|
||||
LIBNSL = -lnsl
|
||||
|
||||
# GLOBAL_KPIC: If set means all libraries are PIC, position independent code
|
||||
# EXCEPT for select compiles
|
||||
# If a .o file is compiled non-PIC then it should be forced
|
||||
|
@ -54,6 +54,13 @@ EXCLUDE_PROPWARN_PKGS = com.sun.java.swing.plaf.windows \
|
||||
# This is a stopgap until 6839872 is fixed.
|
||||
EXCLUDE_PROPWARN_PKGS += sun.dyn
|
||||
|
||||
#
|
||||
# Include the exported private packages in ct.sym.
|
||||
# This is an interim solution until the ct.sym is replaced
|
||||
# with a new module system (being discussed for JDK 7).
|
||||
#
|
||||
EXPORTED_PRIVATE_PKGS = com.sun.servicetag
|
||||
|
||||
# 64-bit solaris has a few special cases. We define the variable
|
||||
# SOLARIS64 for use in this Makefile to easily test those cases
|
||||
ifeq ($(PLATFORM), solaris)
|
||||
@ -982,7 +989,7 @@ initial-image-jdk:: initial-image-jdk-setup \
|
||||
-processor com.sun.tools.javac.sym.CreateSymbols \
|
||||
-Acom.sun.tools.javac.sym.Jar=$(RT_JAR) \
|
||||
-Acom.sun.tools.javac.sym.Dest=$(OUTPUTDIR)/symbols/META-INF/sym/rt.jar \
|
||||
$(CORE_PKGS) $(NON_CORE_PKGS) $(EXCLUDE_PROPWARN_PKGS)
|
||||
$(CORE_PKGS) $(NON_CORE_PKGS) $(EXCLUDE_PROPWARN_PKGS) $(EXPORTED_PRIVATE_PKGS)
|
||||
$(BOOT_JAR_CMD) c0f $(LIBDIR)/ct.sym \
|
||||
-C $(OUTPUTDIR)/symbols META-INF $(BOOT_JAR_JFLAGS)
|
||||
@$(java-vm-cleanup)
|
||||
|
@ -35,9 +35,6 @@ ifndef JDK_MAKE_SHARED_DIR
|
||||
JDK_MAKE_SHARED_DIR = $(JDK_TOPDIR)/make/common/shared
|
||||
endif
|
||||
|
||||
ifndef CONTROL_TOPDIR
|
||||
CONTROL_TOPDIR=$(TOPDIR)
|
||||
endif
|
||||
ifndef HOTSPOT_TOPDIR
|
||||
HOTSPOT_TOPDIR=$(TOPDIR)/hotspot
|
||||
endif
|
||||
|
@ -234,6 +234,7 @@ CORE_PKGS = \
|
||||
javax.xml.ws.http \
|
||||
javax.xml.ws.soap \
|
||||
javax.xml.ws.spi \
|
||||
javax.xml.ws.spi.http \
|
||||
javax.xml.ws.wsaddressing \
|
||||
javax.xml.transform \
|
||||
javax.xml.transform.sax \
|
||||
|
@ -86,5 +86,5 @@ endif
|
||||
# Things that must be linked in.
|
||||
#
|
||||
ifneq ($(PLATFORM), windows)
|
||||
OTHER_LDLIBS += $(LIBSOCKET) -lnsl $(LIBM) -ldl
|
||||
OTHER_LDLIBS += $(LIBSOCKET) $(LIBNSL) $(LIBM) -ldl
|
||||
endif
|
||||
|
@ -204,7 +204,7 @@ ifeq ($(PLATFORM),windows)
|
||||
OTHER_LDLIBS += $(JVMLIB) -libpath:$(OBJDIR)/../../../fdlibm/$(OBJDIRNAME) fdlibm.lib \
|
||||
-libpath:$(OBJDIR)/../../../verify/$(OBJDIRNAME) verify.lib
|
||||
else
|
||||
OTHER_LDLIBS += $(JVMLIB) -lverify $(LIBSOCKET) -lnsl -ldl \
|
||||
OTHER_LDLIBS += $(JVMLIB) -lverify $(LIBSOCKET) $(LIBNSL) -ldl \
|
||||
-L$(OBJDIR)/../../../fdlibm/$(OBJDIRNAME) -lfdlibm.$(ARCH)
|
||||
endif
|
||||
|
||||
|
@ -84,7 +84,7 @@ OTHER_INCLUDES = -I$(SRCDIR) \
|
||||
ifeq ($(PLATFORM), windows)
|
||||
OTHER_LDLIBS += wsock32.lib winmm.lib
|
||||
else
|
||||
OTHER_LDLIBS += $(LIBSOCKET) -lnsl -ldl
|
||||
OTHER_LDLIBS += $(LIBSOCKET) $(LIBNSL) -ldl
|
||||
endif
|
||||
|
||||
#
|
||||
|
@ -96,7 +96,7 @@ include $(BUILDDIR)/common/Library.gmk
|
||||
ifeq ($(PLATFORM), windows)
|
||||
OTHER_LDLIBS = ws2_32.lib $(JVMLIB)
|
||||
else
|
||||
OTHER_LDLIBS = $(LIBSOCKET) -lnsl -ldl $(JVMLIB)
|
||||
OTHER_LDLIBS = $(LIBSOCKET) $(LIBNSL) -ldl $(JVMLIB)
|
||||
endif
|
||||
ifeq ($(PLATFORM), linux)
|
||||
OTHER_LDLIBS += -lpthread
|
||||
|
@ -38,11 +38,11 @@ FILES_m = mapfile-vers
|
||||
include $(BUILDDIR)/common/Defs.gmk
|
||||
|
||||
ifeq ($(PLATFORM), linux)
|
||||
OTHER_LDLIBS += -lnsl $(LIBSOCKET) -lpthread
|
||||
OTHER_LDLIBS += $(LIBNSL) $(LIBSOCKET) -lpthread
|
||||
endif
|
||||
|
||||
ifeq ($(PLATFORM), solaris)
|
||||
OTHER_LDLIBS += -lnsl $(LIBSOCKET)
|
||||
OTHER_LDLIBS += $(LIBNSL) $(LIBSOCKET)
|
||||
endif
|
||||
|
||||
ifeq ($(PLATFORM), windows)
|
||||
|
@ -39,10 +39,10 @@ ifeq ($(PLATFORM), windows)
|
||||
EXTRA_LIBS += wsock32.lib winmm.lib
|
||||
endif
|
||||
ifeq ($(PLATFORM), solaris)
|
||||
OTHER_LDLIBS += $(LIBSOCKET) -lnsl -ldl
|
||||
OTHER_LDLIBS += $(LIBSOCKET) $(LIBNSL) -ldl
|
||||
endif
|
||||
ifeq ($(PLATFORM), linux)
|
||||
OTHER_LDLIBS += $(LIBSOCKET) -lnsl -ldl -lpthread
|
||||
OTHER_LDLIBS += $(LIBSOCKET) $(LIBNSL) -ldl -lpthread
|
||||
endif
|
||||
|
||||
#
|
||||
|
@ -204,8 +204,8 @@ Provided NetBeans projects
|
||||
note that pretty much regardless of your hardware, this *will* take
|
||||
a long time, and use *lots* of disk space (more than 3GB). The
|
||||
results of the build are in
|
||||
*install-dir*/control/build/*platform*-*arch* and
|
||||
*install-dir*/control/build/*platform*-*arch*-fastdebug.
|
||||
*install-dir*/build/*platform*-*arch* and
|
||||
*install-dir*/build/*platform*-*arch*-fastdebug.
|
||||
|
||||
Consult the project's README file for details.
|
||||
|
||||
|
@ -10,6 +10,6 @@ project code, you might prefer to build it from the command line using ant.
|
||||
Please note: the results of building this project are *not* put in the place
|
||||
used by other projects. In this case, the results are place in
|
||||
|
||||
<install-dir>/control/build/<platform>-<arch>
|
||||
<install-dir>/build/<platform>-<arch>
|
||||
and
|
||||
<install-dir>/control/build/<platform>-<arch>-fastdebug
|
||||
<install-dir>/build/<platform>-<arch>-fastdebug
|
||||
|
@ -34,11 +34,11 @@
|
||||
<import file="../common/shared.xml"/>
|
||||
|
||||
<target name="-build-make" depends="-make.init" if="use.make">
|
||||
<make-run target="dev" dir="${root}/../control/make" opts="SKIP_COMPARE_IMAGES=true"/>
|
||||
<make-run target="dev" dir="${root}/.." opts="SKIP_COMPARE_IMAGES=true"/>
|
||||
</target>
|
||||
|
||||
<target name="-clean-make" depends="-make.init" if="use.make">
|
||||
<make-run target="clean" dir="${root}/../control/make"/>
|
||||
<make-run target="clean" dir="${root}/.."/>
|
||||
</target>
|
||||
|
||||
</project>
|
||||
|
@ -37,7 +37,7 @@ PRODUCT = sun
|
||||
# This re-directs all the class files to a separate location
|
||||
CLASSDESTDIR = $(TEMPDIR)/classes
|
||||
|
||||
OTHER_JAVACFLAGS += -Xlint:serial -Werror
|
||||
OTHER_JAVACFLAGS += -Xlint:serial,-deprecation -Werror
|
||||
include $(BUILDDIR)/common/Defs.gmk
|
||||
|
||||
#
|
||||
|
@ -52,5 +52,11 @@ build: copy-files
|
||||
|
||||
copy-files: $(FILES_copy)
|
||||
|
||||
$(SERVICEDIR)/%: $(SHARE_SRC)/classes/sun/java2d/pisces/META-INF/services/%
|
||||
ifneq ($(PLATFORM), windows)
|
||||
SERVICE_SRC = $(PLATFORM_SRC)
|
||||
else
|
||||
SERVICE_SRC = $(SHARE_SRC)
|
||||
endif
|
||||
|
||||
$(SERVICEDIR)/%: $(SERVICE_SRC)/classes/sun/java2d/pisces/META-INF/services/%
|
||||
$(install-file)
|
||||
|
@ -150,6 +150,7 @@ OTHER_INCLUDES += \
|
||||
# Rules
|
||||
#
|
||||
CLASSDESTDIR = $(TEMPDIR)/classes
|
||||
JAVAHFLAGS += -classpath $(CLASSDESTDIR)
|
||||
|
||||
include $(BUILDDIR)/common/Mapfile-vers.gmk
|
||||
|
||||
|
@ -148,6 +148,7 @@ OTHER_INCLUDES += \
|
||||
# Rules
|
||||
#
|
||||
CLASSDESTDIR = $(TEMPDIR)/classes
|
||||
JAVAHFLAGS += -classpath $(CLASSDESTDIR)
|
||||
|
||||
include $(BUILDDIR)/common/Mapfile-vers.gmk
|
||||
|
||||
|
@ -49,7 +49,8 @@ AUTO_FILES_JAVA_DIRS = \
|
||||
|
||||
# Extra jstat files
|
||||
FILES_copy += \
|
||||
$(CLASSDESTDIR)/sun/tools/jstat/resources/jstat_options
|
||||
$(CLASSDESTDIR)/sun/tools/jstat/resources/jstat_options \
|
||||
$(CLASSDESTDIR)/sun/tools/jstat/resources/jstat_unsupported_options
|
||||
|
||||
# Extra jhat files
|
||||
JHAT_RESOURCEDIR = $(CLASSDESTDIR)/com/sun/tools/hat/resources
|
||||
|
@ -424,7 +424,7 @@ public class WindowsComboBoxUI extends BasicComboBoxUI {
|
||||
State rv;
|
||||
rv = super.getState();
|
||||
if (rv != State.DISABLED
|
||||
&& ! comboBox.isEditable()
|
||||
&& comboBox != null && ! comboBox.isEditable()
|
||||
&& XPStyle.getXP().isSkinDefined(comboBox,
|
||||
Part.CP_DROPDOWNBUTTONRIGHT)) {
|
||||
/*
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -47,10 +47,13 @@ interface Constants {
|
||||
|
||||
public final static short JAVA5_MAX_CLASS_MAJOR_VERSION = 49;
|
||||
public final static short JAVA5_MAX_CLASS_MINOR_VERSION = 0;
|
||||
// NOTE: ASSUMED for now
|
||||
|
||||
public final static short JAVA6_MAX_CLASS_MAJOR_VERSION = 50;
|
||||
public final static short JAVA6_MAX_CLASS_MINOR_VERSION = 0;
|
||||
|
||||
public final static short JAVA7_MAX_CLASS_MAJOR_VERSION = 51;
|
||||
public final static short JAVA7_MAX_CLASS_MINOR_VERSION = 0;
|
||||
|
||||
public final static int JAVA_PACKAGE_MAGIC = 0xCAFED00D;
|
||||
public final static int JAVA5_PACKAGE_MAJOR_VERSION = 150;
|
||||
public final static int JAVA5_PACKAGE_MINOR_VERSION = 7;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -57,8 +57,8 @@ class Package implements Constants {
|
||||
// These fields can be adjusted by driver properties.
|
||||
short min_class_majver = JAVA_MIN_CLASS_MAJOR_VERSION;
|
||||
short min_class_minver = JAVA_MIN_CLASS_MINOR_VERSION;
|
||||
short max_class_majver = JAVA6_MAX_CLASS_MAJOR_VERSION;
|
||||
short max_class_minver = JAVA6_MAX_CLASS_MINOR_VERSION;
|
||||
short max_class_majver = JAVA7_MAX_CLASS_MAJOR_VERSION;
|
||||
short max_class_minver = JAVA7_MAX_CLASS_MINOR_VERSION;
|
||||
|
||||
short observed_max_class_majver = min_class_majver;
|
||||
short observed_max_class_minver = min_class_minver;
|
||||
@ -122,13 +122,16 @@ class Package implements Constants {
|
||||
void choosePackageVersion() {
|
||||
assert(package_majver <= 0); // do not call this twice
|
||||
int classver = getHighestClassVersion();
|
||||
if (classver != 0 &&
|
||||
(classver >>> 16) < JAVA6_MAX_CLASS_MAJOR_VERSION) {
|
||||
// There are only old classfiles in this segment.
|
||||
if (classver == 0 || (classver >>> 16) < JAVA6_MAX_CLASS_MAJOR_VERSION) {
|
||||
// There are only old classfiles in this segment or resources
|
||||
package_majver = JAVA5_PACKAGE_MAJOR_VERSION;
|
||||
package_minver = JAVA5_PACKAGE_MINOR_VERSION;
|
||||
} else if ((classver >>> 16) == JAVA6_MAX_CLASS_MAJOR_VERSION) {
|
||||
package_majver = JAVA6_PACKAGE_MAJOR_VERSION;
|
||||
package_minver = JAVA6_PACKAGE_MINOR_VERSION;
|
||||
} else {
|
||||
// Normal case. Use the newest archive format.
|
||||
// Normal case. Use the newest archive format, when available
|
||||
// TODO: replace the following with JAVA7* when the need arises
|
||||
package_majver = JAVA6_PACKAGE_MAJOR_VERSION;
|
||||
package_minver = JAVA6_PACKAGE_MINOR_VERSION;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003,2010 Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -90,8 +90,8 @@ class PropMap extends TreeMap {
|
||||
props.put(Utils.PACK_DEFAULT_TIMEZONE,
|
||||
String.valueOf(Boolean.getBoolean(Utils.PACK_DEFAULT_TIMEZONE)));
|
||||
|
||||
// Limit segment size to less than a megabyte.
|
||||
props.put(Pack200.Packer.SEGMENT_LIMIT, ""+(1*1000*1000));
|
||||
// The segment size is unlimited
|
||||
props.put(Pack200.Packer.SEGMENT_LIMIT, "");
|
||||
|
||||
// Preserve file ordering by default.
|
||||
props.put(Pack200.Packer.KEEP_FILE_ORDER, Pack200.Packer.TRUE);
|
||||
|
@ -41,7 +41,7 @@ import org.w3c.dom.Text;
|
||||
* @author Raul Benito(Of the xerces copy, and little adaptations).
|
||||
* @author Anli Shundi
|
||||
* @author Christian Geuer-Pollmann
|
||||
* @see <A HREF="ftp://ftp.isi.edu/in-notes/rfc2045.txt">RFC 2045</A>
|
||||
* @see <A HREF="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045</A>
|
||||
* @see com.sun.org.apache.xml.internal.security.transforms.implementations.TransformBase64Decode
|
||||
*/
|
||||
public class Base64 {
|
||||
|
@ -31,7 +31,7 @@ import javax.naming.ldap.LdapName;
|
||||
|
||||
/**
|
||||
* A principal identified by a distinguished name as specified by
|
||||
* <a href="http://ietf.org//rfc/rfc2253.txt">RFC 2253</a>.
|
||||
* <a href="http://www.ietf.org/rfc/rfc2253.txt">RFC 2253</a>.
|
||||
*
|
||||
* <p>
|
||||
* After successful authentication, a user {@link java.security.Principal}
|
||||
@ -122,7 +122,7 @@ public final class LdapPrincipal implements Principal, java.io.Serializable {
|
||||
|
||||
/**
|
||||
* Creates a string representation of this principal's name in the format
|
||||
* defined by <a href="http://ietf.org/rfc/rfc2253.txt">RFC 2253</a>.
|
||||
* defined by <a href="http://www.ietf.org/rfc/rfc2253.txt">RFC 2253</a>.
|
||||
* If the name has zero components an empty string is returned.
|
||||
*
|
||||
* @return The principal's string name.
|
||||
|
@ -33,7 +33,7 @@ import java.util.logging.Level;
|
||||
|
||||
/**
|
||||
* Implements the CRAM-MD5 SASL client-side mechanism.
|
||||
* (<A HREF="ftp://ftp.isi.edu/in-notes/rfc2195.txt">RFC 2195</A>).
|
||||
* (<A HREF="http://www.ietf.org/rfc/rfc2195.txt">RFC 2195</A>).
|
||||
* CRAM-MD5 has no initial response. It receives bytes from
|
||||
* the server as a challenge, which it hashes by using MD5 and the password.
|
||||
* It concatenates the authentication ID with this result and returns it
|
||||
|
@ -38,7 +38,7 @@ import java.util.logging.Level;
|
||||
|
||||
/**
|
||||
* Implements the CRAM-MD5 SASL server-side mechanism.
|
||||
* (<A HREF="ftp://ftp.isi.edu/in-notes/rfc2195.txt">RFC 2195</A>).
|
||||
* (<A HREF="http://www.ietf.org/rfc/rfc2195.txt">RFC 2195</A>).
|
||||
* CRAM-MD5 has no initial response.
|
||||
*
|
||||
* client <---- M={random, timestamp, server-fqdn} ------- server
|
||||
|
@ -29,7 +29,7 @@ import javax.security.sasl.*;
|
||||
|
||||
/**
|
||||
* Implements the EXTERNAL SASL client mechanism.
|
||||
* (<A HREF="ftp://ftp.isi.edu/in-notes/rfc2222.txt">RFC 2222</A>).
|
||||
* (<A HREF="http://www.ietf.org/rfc/rfc2222.txt">RFC 2222</A>).
|
||||
* The EXTERNAL mechanism returns the optional authorization ID as
|
||||
* the initial response. It processes no challenges.
|
||||
*
|
||||
|
@ -39,10 +39,10 @@ import org.ietf.jgss.*;
|
||||
|
||||
/**
|
||||
* Implements the GSSAPI SASL client mechanism for Kerberos V5.
|
||||
* (<A HREF="ftp://ftp.isi.edu/in-notes/rfc2222.txt">RFC 2222</A>,
|
||||
* (<A HREF="http://www.ietf.org/rfc/rfc2222.txt">RFC 2222</A>,
|
||||
* <a HREF="http://www.ietf.org/internet-drafts/draft-ietf-cat-sasl-gssapi-04.txt">draft-ietf-cat-sasl-gssapi-04.txt</a>).
|
||||
* It uses the Java Bindings for GSSAPI
|
||||
* (<A HREF="ftp://ftp.isi.edu/in-notes/rfc2853.txt">RFC 2853</A>)
|
||||
* (<A HREF="http://www.ietf.org/rfc/rfc2853.txt">RFC 2853</A>)
|
||||
* for getting GSSAPI/Kerberos V5 support.
|
||||
*
|
||||
* The client/server interactions are:
|
||||
|
@ -39,7 +39,7 @@ import org.ietf.jgss.*;
|
||||
|
||||
/**
|
||||
* Implements the GSSAPI SASL server mechanism for Kerberos V5.
|
||||
* (<A HREF="ftp://ftp.isi.edu/in-notes/rfc2222.txt">RFC 2222</A>,
|
||||
* (<A HREF="http://www.ietf.org/rfc/rfc2222.txt">RFC 2222</A>,
|
||||
* <a HREF="http://www.ietf.org/internet-drafts/draft-ietf-cat-sasl-gssapi-00.txt">draft-ietf-cat-sasl-gssapi-00.txt</a>).
|
||||
*
|
||||
* Expects thread's Subject to contain server's Kerberos credentials
|
||||
|
@ -67,7 +67,6 @@ public class Registry {
|
||||
// The stclient output has to be an exported interface
|
||||
private static final String INSTANCE_URN_DESC = "Product instance URN=";
|
||||
private static boolean initialized = false;
|
||||
private static boolean supportsHelperClass = true; // default
|
||||
private static File stclient = null;
|
||||
private static String stclientPath = null;
|
||||
private static Registry registry = new Registry();
|
||||
@ -81,17 +80,6 @@ public class Registry {
|
||||
|
||||
private synchronized static String getSTclient() {
|
||||
if (!initialized) {
|
||||
// the system property always overrides the default setting
|
||||
if (System.getProperty(SVCTAG_STHELPER_SUPPORTED) != null) {
|
||||
supportsHelperClass = Boolean.getBoolean(SVCTAG_STHELPER_SUPPORTED);
|
||||
}
|
||||
|
||||
// This is only used for testing
|
||||
stclientPath = System.getProperty(SVCTAG_STCLIENT_CMD);
|
||||
if (stclientPath != null) {
|
||||
return stclientPath;
|
||||
}
|
||||
|
||||
// Initialization to determine the platform's stclient pathname
|
||||
String os = System.getProperty("os.name");
|
||||
if (os.equals("SunOS")) {
|
||||
@ -108,10 +96,26 @@ public class Registry {
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
boolean supportsHelperClass = true; // default
|
||||
if (System.getProperty(SVCTAG_STHELPER_SUPPORTED) != null) {
|
||||
// the system property always overrides the default setting
|
||||
supportsHelperClass = Boolean.getBoolean(SVCTAG_STHELPER_SUPPORTED);
|
||||
}
|
||||
|
||||
if (!supportsHelperClass) {
|
||||
// disable system registry
|
||||
return null;
|
||||
}
|
||||
|
||||
// This is only used for testing
|
||||
String path = System.getProperty(SVCTAG_STCLIENT_CMD);
|
||||
if (path != null) {
|
||||
return path;
|
||||
}
|
||||
|
||||
// com.sun.servicetag package has to be compiled with JDK 5 as well
|
||||
// JDK 5 doesn't support the File.canExecute() method.
|
||||
// Risk not checking isExecute() for the stclient command is very low.
|
||||
|
||||
if (stclientPath == null && stclient != null && stclient.exists()) {
|
||||
stclientPath = stclient.getAbsolutePath();
|
||||
}
|
||||
@ -142,8 +146,8 @@ public class Registry {
|
||||
* @return {@code true} if the {@code Registry} class is supported;
|
||||
* otherwise, return {@code false}.
|
||||
*/
|
||||
public static boolean isSupported() {
|
||||
return (getSTclient() != null && supportsHelperClass);
|
||||
public static synchronized boolean isSupported() {
|
||||
return getSTclient() != null;
|
||||
}
|
||||
|
||||
private static List<String> getCommandList() {
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 8.5 KiB |
@ -53,13 +53,13 @@ a:visited,a:visited code{color:#917E9C}
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td><p class="style1">Thank you for installing the
|
||||
<td><p class="style1">Thank you for installing the
|
||||
<strong> Java Development Kit @@JDK_VERSION@@ </strong>
|
||||
from Sun Microsystems. </p>
|
||||
from Oracle Corporation. </p>
|
||||
<p class="style1">Registering your product will give you the following benefits:</p>
|
||||
<ul class="style1">
|
||||
<li> Notification of new versions, patches, and updates</li>
|
||||
<li> Special offers on Sun developer products, services and training </li>
|
||||
<li> Special offers on Oracle developer products, services and training </li>
|
||||
<li> Access to early releases and documentation </li>
|
||||
</ul>
|
||||
<p class="style1">Product registration is FREE, quick and easy!</p>
|
||||
@ -68,11 +68,11 @@ a:visited,a:visited code{color:#917E9C}
|
||||
<table width="708" border="0" cellspacing="0" cellpadding="3">
|
||||
<tr valign="top">
|
||||
<td width="126" height="35">
|
||||
<form name="form1" method="post" action="@@REGISTRATION_URL@@">
|
||||
<form name="form1" method="post" action="@@REGISTRATION_URL@@" enctype="text/xml">
|
||||
<input type="hidden" name="servicetag_payload" value="@@REGISTRATION_PAYLOAD@@">
|
||||
<input type="submit" name="Submit"border="0" class="buttonblue" onmouseover="this.style.color='#fbe249';" onmouseout="this.style.color='#FFF';" value="Register My JDK">
|
||||
</form></td>
|
||||
<td width="570"><span class="style3">You need to be connected to the Internet to register this Sun product. </span></td>
|
||||
<td width="570"><span class="style3">You need to be connected to the Internet to register this Oracle product. </span></td>
|
||||
</tr>
|
||||
</table>
|
||||
</blockquote>
|
||||
@ -81,16 +81,16 @@ a:visited,a:visited code{color:#917E9C}
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td bgcolor="#f1f7df">
|
||||
<p class="style3">Sun Microsystems, Inc. respects your privacy.
|
||||
We will use your personal information for communications
|
||||
and management of your Sun Online Account, the services
|
||||
and applications you access using your Sun Online Account,
|
||||
<p class="style3">Oracle Corporation respects your privacy.
|
||||
We will use your personal information for communications
|
||||
and management of your Sun Online Account, the services
|
||||
and applications you access using your Sun Online Account,
|
||||
and the products and systems you register with your Sun Online Account.</p>
|
||||
<p class="style3">For more information on the data that will be collected as
|
||||
<p class="style3">For more information on the data that will be collected as
|
||||
part of the registration process and how it will be managed <br>
|
||||
see <a href="http://java.sun.com/javase/registration/JDKRegistrationPrivacy.html">http://java.sun.com/javase/registration/JDKRegistrationPrivacy.html</a>. <br>
|
||||
see <a href="http://java.sun.com/javase/registration/JDKRegistrationPrivacy.html">http://java.sun.com/javase/registration/JDKRegistrationPrivacy.html</a>. <br>
|
||||
<br>
|
||||
For more information on Sun's Privacy Policy see <a href="http://www.sun.com/privacy/">http://www.sun.com/privacy/</a> or contact <a class="moz-txt-link-rfc2396E" href="mailto:privacy@sun.com">privacy@sun.com.</a></p></td>
|
||||
For more information on Oracle's Privacy Policy see <a href="http://www.oracle.com/html/privacy.html">http://www.oracle.com/html/privacy.html</a> or contact <a class="moz-txt-link-rfc2396E" href="mailto:privacy_ww@oracle.com">privacy_ww@oracle.com.</a></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
|
@ -50,11 +50,11 @@ a:visited,a:visited code{color:#917E9C}
|
||||
<tr>
|
||||
<td> </td>
|
||||
|
||||
<td><p class="style1">Sun Microsystems の<strong> Java Development Kit @@JDK_VERSION@@ </strong>をインストールしていただき、ありがとうございます。 </p>
|
||||
<td><p class="style1">Oracle Corporation の<strong> Java Development Kit @@JDK_VERSION@@ </strong>をインストールしていただき、ありがとうございます。 </p>
|
||||
<p class="style1">製品登録をすると、次のような特典を受けることができます。</p>
|
||||
<ul class="style1">
|
||||
<li> 最新のバージョン、パッチ、および更新についての通知</li>
|
||||
<li> Sun の開発者向け製品、サービス、およびトレーニングの特別販売 </li>
|
||||
<li> Oracle の開発者向け製品、サービス、およびトレーニングの特別販売 </li>
|
||||
<li> アーリーリリースおよびドキュメントへのアクセス </li>
|
||||
</ul>
|
||||
<p class="style1">製品登録は無料であり、迅速で簡単です。</p>
|
||||
@ -62,11 +62,11 @@ a:visited,a:visited code{color:#917E9C}
|
||||
<p class="style1">必要になるのは、Sun 開発者向けネットワークアカウントまたはその他の Sun オンラインアカウントだけです。 まだアカウントがない場合は、アカウントの作成が求められます。 </p>
|
||||
<table width="708" border="0" cellspacing="0" cellpadding="3">
|
||||
<tr valign="top">
|
||||
<td width="126" height="35"><form name="form1" method="post" action="@@REGISTRATION_URL@@">
|
||||
<td width="126" height="35"><form name="form1" method="post" action="@@REGISTRATION_URL@@" enctype="text/xml">
|
||||
<input type="hidden" name="servicetag_payload" value="@@REGISTRATION_PAYLOAD@@">
|
||||
<input type="submit" name="Submit"border="0" class="buttonblue" onmouseover="this.style.color='#fbe249';" onmouseout="this.style.color='#FFF';" value="JDK 製品登録">
|
||||
</form></td>
|
||||
<td width="570"><span class="style3">この Sun 製品を登録するには、インターネットに接続している必要があります。 </span></td>
|
||||
<td width="570"><span class="style3">この Oracle 製品を登録するには、インターネットに接続している必要があります。 </span></td>
|
||||
</tr>
|
||||
</table>
|
||||
</blockquote>
|
||||
@ -75,8 +75,8 @@ a:visited,a:visited code{color:#917E9C}
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td bgcolor="#f1f7df">
|
||||
<p class="style3">Sun Microsystems, Inc. は、お客様のプライバシーを尊重します。 お客様の個人情報は、お客様の Sun オンラインアカウント、お客様が Sun オンラインアカウントを使用してアクセスするサービスとアプリケーション、およびお客様が Sun オンラインアカウントで登録する製品とシステムの通信と管理に使用します。</p>
|
||||
<p class="style3">登録の際に収集されるデータや、それらがどのように管理されるかについての詳細は、<br><a href="http://java.sun.com/javase/ja/registration/JDKRegistrationPrivacy.html">http://java.sun.com/javase/ja/registration/JDKRegistrationPrivacy.html</a> を参照してください。 <br> <br> Sun のプライバシーポリシーについての詳細は、<a href="http://jp.sun.com/privacy/">http://jp.sun.com/privacy/</a> を参照するか、<a class="moz-txt-link-rfc2396E" href="http://jp.sun.com/cgi-bin/contact/comment.cgi?url=http://jp.sun.com/privacy/">お問い合わせフォーム</a>からお問い合わせください。</p></td>
|
||||
<p class="style3">Oracle Corporation は、お客様のプライバシーを尊重します。 お客様の個人情報は、お客様の Sun オンラインアカウント、お客様が Sun オンラインアカウントを使用してアクセスするサービスとアプリケーション、およびお客様が Sun オンラインアカウントで登録する製品とシステムの通信と管理に使用します。</p>
|
||||
<p class="style3">登録の際に収集されるデータや、それらがどのように管理されるかについての詳細は、<br><a href="http://java.sun.com/javase/ja/registration/JDKRegistrationPrivacy.html">http://java.sun.com/javase/ja/registration/JDKRegistrationPrivacy.html</a> を参照してください。 <br> <br> Oracle のプライバシーポリシーについての詳細は、<a href="http://www.oracle.com/html/privacy.html">http://www.oracle.com/html/privacy.html</a> を参照するか、<a class="moz-txt-link-rfc2396E" href="mailto:privacy_ww@oracle.com">お問い合わせフォーム</a>からお問い合わせください。</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
|
@ -51,11 +51,11 @@ a:visited,a:visited code{color:#917E9C}
|
||||
<tr>
|
||||
<td> </td>
|
||||
|
||||
<td><p class="style1">感谢您安装 Sun Microsystems 的 <strong>Java Development Kit @@JDK_VERSION@@</strong>。 </p>
|
||||
<td><p class="style1">感谢您安装 Oracle Corporation 的 <strong>Java Development Kit @@JDK_VERSION@@</strong>。 </p>
|
||||
<p class="style1">注册产品后您将获得如下增值服务:</p>
|
||||
<ul class="style1">
|
||||
<li> 获得新版本、修补程序和更新的通知服务</li>
|
||||
<li> 获得有关 Sun 开发者产品、服务和培训的优惠 </li>
|
||||
<li> 获得有关 Oracle 开发者产品、服务和培训的优惠 </li>
|
||||
<li> 获得对早期版本和文档的访问权限 </li>
|
||||
</ul>
|
||||
<p class="style1">产品注册是免费的,即快速又轻松!</p>
|
||||
@ -63,11 +63,11 @@ a:visited,a:visited code{color:#917E9C}
|
||||
<p class="style1">您需要具有 Sun 开发者网络或其他 Sun 联机帐户。如果您没有,系统将提示您创建一个。 </p>
|
||||
<table width="708" border="0" cellspacing="0" cellpadding="3">
|
||||
<tr valign="top">
|
||||
<td width="126" height="35"><form name="form1" method="post" action="@@REGISTRATION_URL@@">
|
||||
<td width="126" height="35"><form name="form1" method="post" action="@@REGISTRATION_URL@@" enctype="text/xml">
|
||||
<input type="hidden" name="servicetag_payload" value="@@REGISTRATION_PAYLOAD@@">
|
||||
<input type="submit" name="Submit"border="0" class="buttonblue" onmouseover="this.style.color='#fbe249';" onmouseout="this.style.color='#FFF';" value="注册我的 JDK">
|
||||
</form></td>
|
||||
<td width="570"><span class="style3">您需要连接到 Internet 来注册此 Sun 产品。 </span></td>
|
||||
<td width="570"><span class="style3">您需要连接到 Internet 来注册此 Oracle 产品。 </span></td>
|
||||
</tr>
|
||||
</table>
|
||||
</blockquote>
|
||||
@ -76,8 +76,8 @@ a:visited,a:visited code{color:#917E9C}
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td bgcolor="#f1f7df">
|
||||
<p class="style3">Sun Microsystems, Inc. 尊重您的隐私。我们会将您的个人信息用于通信和 Sun 联机帐户的管理、Sun 联机帐户访问的服务和应用程序以及用于使用 Sun 联机帐户注册的产品和系统。</p>
|
||||
<p class="style3">有关注册过程中收集的数据以及这些数据的管理方式的更多信息,<br>请访问 <a href="http://java.sun.com/javase/registration/JDKRegistrationPrivacy.html">http://java.sun.com/javase/registration/JDKRegistrationPrivacy.html</a>。<br> <br>有关 Sun 隐私政策的更多信息,请访问 <a href="http://www.sun.com/privacy/">http://www.sun.com/privacy/</a> 或与 <a class="moz-txt-link-rfc2396E" href="mailto:privacy@sun.com">privacy@sun.com</a> 联系。</p></td>
|
||||
<p class="style3">Oracle 尊重您的隐私。我们会将您的个人信息用于通信和 Sun 联机帐户的管理、Sun 联机帐户访问的服务和应用程序以及用于使用 Sun 联机帐户注册的产品和系统。</p>
|
||||
<p class="style3">有关注册过程中收集的数据以及这些数据的管理方式的更多信息,<br>请访问 <a href="http://java.sun.com/javase/registration/JDKRegistrationPrivacy.html">http://java.sun.com/javase/registration/JDKRegistrationPrivacy.html</a>。<br> <br>有关 Oracle 隐私政策的更多信息,请访问 <a href="http://www.oracle.com/html/privacy.html">http://www.oracle.com/html/privacy.html</a> 或与 <a class="moz-txt-link-rfc2396E" href="mailto:privacy_ww@oracle.com">privacy_ww@oracle.com</a> 联系。</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
|
@ -66,7 +66,7 @@ public class AssertionError extends Error {
|
||||
* defined in <i>The Java Language Specification, Second
|
||||
* Edition</i>, Section 15.18.1.1.
|
||||
*<p>
|
||||
* If the specified object is an instance of <tt>Throwable</tt>, it
|
||||
* If the specified object is an instance of {@code Throwable}, it
|
||||
* becomes the <i>cause</i> of the newly constructed assertion error.
|
||||
*
|
||||
* @param detailMessage value to be used in constructing detail message
|
||||
@ -149,4 +149,21 @@ public class AssertionError extends Error {
|
||||
public AssertionError(double detailMessage) {
|
||||
this("" + detailMessage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new {@code AssertionError} with the specified
|
||||
* detail message and cause.
|
||||
*
|
||||
* <p>Note that the detail message associated with
|
||||
* {@code cause} is <i>not</i> automatically incorporated in
|
||||
* this error's detail message.
|
||||
*
|
||||
* @param message the detail message, may be {@code null}
|
||||
* @param cause the cause, may be {@code null}
|
||||
*
|
||||
* @since 1.7
|
||||
*/
|
||||
public AssertionError(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
}
|
||||
|
@ -681,9 +681,9 @@ public final class Math {
|
||||
|
||||
private static Random randomNumberGenerator;
|
||||
|
||||
private static synchronized void initRNG() {
|
||||
if (randomNumberGenerator == null)
|
||||
randomNumberGenerator = new Random();
|
||||
private static synchronized Random initRNG() {
|
||||
Random rnd = randomNumberGenerator;
|
||||
return (rnd == null) ? (randomNumberGenerator = new Random()) : rnd;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -694,9 +694,11 @@ public final class Math {
|
||||
*
|
||||
* <p>When this method is first called, it creates a single new
|
||||
* pseudorandom-number generator, exactly as if by the expression
|
||||
* <blockquote>{@code new java.util.Random}</blockquote> This
|
||||
* new pseudorandom-number generator is used thereafter for all
|
||||
* calls to this method and is used nowhere else.
|
||||
*
|
||||
* <blockquote>{@code new java.util.Random()}</blockquote>
|
||||
*
|
||||
* This new pseudorandom-number generator is used thereafter for
|
||||
* all calls to this method and is used nowhere else.
|
||||
*
|
||||
* <p>This method is properly synchronized to allow correct use by
|
||||
* more than one thread. However, if many threads need to generate
|
||||
@ -705,11 +707,12 @@ public final class Math {
|
||||
*
|
||||
* @return a pseudorandom {@code double} greater than or equal
|
||||
* to {@code 0.0} and less than {@code 1.0}.
|
||||
* @see java.util.Random#nextDouble()
|
||||
* @see Random#nextDouble()
|
||||
*/
|
||||
public static double random() {
|
||||
if (randomNumberGenerator == null) initRNG();
|
||||
return randomNumberGenerator.nextDouble();
|
||||
Random rnd = randomNumberGenerator;
|
||||
if (rnd == null) rnd = initRNG();
|
||||
return rnd.nextDouble();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -418,6 +418,8 @@ public final class ProcessBuilder
|
||||
* Implements a <a href="#redirect-output">null input stream</a>.
|
||||
*/
|
||||
static class NullInputStream extends InputStream {
|
||||
static final NullInputStream INSTANCE = new NullInputStream();
|
||||
private NullInputStream() {}
|
||||
public int read() { return -1; }
|
||||
public int available() { return 0; }
|
||||
}
|
||||
@ -426,6 +428,8 @@ public final class ProcessBuilder
|
||||
* Implements a <a href="#redirect-input">null output stream</a>.
|
||||
*/
|
||||
static class NullOutputStream extends OutputStream {
|
||||
static final NullOutputStream INSTANCE = new NullOutputStream();
|
||||
private NullOutputStream() {}
|
||||
public void write(int b) throws IOException {
|
||||
throw new IOException("Stream closed");
|
||||
}
|
||||
|
@ -667,9 +667,9 @@ public final class StrictMath {
|
||||
|
||||
private static Random randomNumberGenerator;
|
||||
|
||||
private static synchronized void initRNG() {
|
||||
if (randomNumberGenerator == null)
|
||||
randomNumberGenerator = new Random();
|
||||
private static synchronized Random initRNG() {
|
||||
Random rnd = randomNumberGenerator;
|
||||
return (rnd == null) ? (randomNumberGenerator = new Random()) : rnd;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -680,9 +680,11 @@ public final class StrictMath {
|
||||
*
|
||||
* <p>When this method is first called, it creates a single new
|
||||
* pseudorandom-number generator, exactly as if by the expression
|
||||
* <blockquote>{@code new java.util.Random}</blockquote> This
|
||||
* new pseudorandom-number generator is used thereafter for all
|
||||
* calls to this method and is used nowhere else.
|
||||
*
|
||||
* <blockquote>{@code new java.util.Random()}</blockquote>
|
||||
*
|
||||
* This new pseudorandom-number generator is used thereafter for
|
||||
* all calls to this method and is used nowhere else.
|
||||
*
|
||||
* <p>This method is properly synchronized to allow correct use by
|
||||
* more than one thread. However, if many threads need to generate
|
||||
@ -691,11 +693,12 @@ public final class StrictMath {
|
||||
*
|
||||
* @return a pseudorandom {@code double} greater than or equal
|
||||
* to {@code 0.0} and less than {@code 1.0}.
|
||||
* @see java.util.Random#nextDouble()
|
||||
* @see Random#nextDouble()
|
||||
*/
|
||||
public static double random() {
|
||||
if (randomNumberGenerator == null) initRNG();
|
||||
return randomNumberGenerator.nextDouble();
|
||||
Random rnd = randomNumberGenerator;
|
||||
if (rnd == null) rnd = initRNG();
|
||||
return rnd.nextDouble();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -457,7 +457,7 @@ import java.lang.NullPointerException; // for javadoc
|
||||
* @author Mark Reinhold
|
||||
* @since 1.4
|
||||
*
|
||||
* @see <a href="http://ietf.org/rfc/rfc2279.txt"><i>RFC 2279: UTF-8, a
|
||||
* @see <a href="http://www.ietf.org/rfc/rfc2279.txt"><i>RFC 2279: UTF-8, a
|
||||
* transformation format of ISO 10646</i></a>, <br><a
|
||||
* href="http://www.ietf.org/rfc/rfc2373.txt"><i>RFC 2373: IPv6 Addressing
|
||||
* Architecture</i></a>, <br><a
|
||||
|
@ -48,7 +48,7 @@ Unicode characters.
|
||||
|
||||
<p> A <i>charset</i> is named mapping between sequences of sixteen-bit Unicode
|
||||
characters and sequences of bytes, in the sense defined in <a
|
||||
href="http://ietf.org/rfc/rfc2278.txt"><i>RFC 2278</i></a>. A
|
||||
href="http://www.ietf.org/rfc/rfc2278.txt"><i>RFC 2278</i></a>. A
|
||||
<i>decoder</i> is an engine which transforms bytes in a specific charset into
|
||||
characters, and an <i>encoder</i> is an engine which transforms characters into
|
||||
bytes. Encoders and decoders operate on byte and character buffers. They are
|
||||
|
@ -678,7 +678,7 @@ public final class Security {
|
||||
spiMap.put(type, clazz);
|
||||
return clazz;
|
||||
} catch (ClassNotFoundException e) {
|
||||
throw (Error)new AssertionError("Spi class not found").initCause(e);
|
||||
throw new AssertionError("Spi class not found", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -463,10 +463,10 @@ public class Collections {
|
||||
* its list-iterator does not support the <tt>set</tt> operation.
|
||||
*/
|
||||
public static void shuffle(List<?> list) {
|
||||
if (r == null) {
|
||||
r = new Random();
|
||||
}
|
||||
shuffle(list, r);
|
||||
Random rnd = r;
|
||||
if (rnd == null)
|
||||
r = rnd = new Random();
|
||||
shuffle(list, rnd);
|
||||
}
|
||||
private static Random r;
|
||||
|
||||
|
@ -73,10 +73,10 @@ public class ThreadLocalRandom extends Random {
|
||||
private long rnd;
|
||||
|
||||
/**
|
||||
* Initialization flag to permit the first and only allowed call
|
||||
* to setSeed (inside Random constructor) to succeed. We can't
|
||||
* allow others since it would cause setting seed in one part of a
|
||||
* program to unintentionally impact other usages by the thread.
|
||||
* Initialization flag to permit calls to setSeed to succeed only
|
||||
* while executing the Random constructor. We can't allow others
|
||||
* since it would cause setting seed in one part of a program to
|
||||
* unintentionally impact other usages by the thread.
|
||||
*/
|
||||
boolean initialized;
|
||||
|
||||
@ -98,11 +98,10 @@ public class ThreadLocalRandom extends Random {
|
||||
|
||||
/**
|
||||
* Constructor called only by localRandom.initialValue.
|
||||
* We rely on the fact that the superclass no-arg constructor
|
||||
* invokes setSeed exactly once to initialize.
|
||||
*/
|
||||
ThreadLocalRandom() {
|
||||
super();
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -123,7 +122,6 @@ public class ThreadLocalRandom extends Random {
|
||||
public void setSeed(long seed) {
|
||||
if (initialized)
|
||||
throw new UnsupportedOperationException();
|
||||
initialized = true;
|
||||
rnd = (seed ^ multiplier) & mask;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003,2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -212,10 +212,18 @@ public abstract class Pack200 {
|
||||
* to produce a specific bytewise image for any given transmission
|
||||
* ordering of archive elements.)
|
||||
* <p>
|
||||
* In order to maintain backward compatibility, if the input JAR-files are
|
||||
* solely comprised of 1.5 (or lesser) classfiles, a 1.5 compatible
|
||||
* pack file is produced. Otherwise a 1.6 compatible pack200 file is
|
||||
* produced.
|
||||
* In order to maintain backward compatibility, the pack file's version is
|
||||
* set to accommodate the class files present in the input JAR file. In
|
||||
* other words, the pack file version will be the latest, if the class files
|
||||
* are the latest and conversely the pack file version will be the oldest
|
||||
* if the class file versions are also the oldest. For intermediate class
|
||||
* file versions the corresponding pack file version will be used.
|
||||
* For example:
|
||||
* If the input JAR-files are solely comprised of 1.5 (or lesser)
|
||||
* class files, a 1.5 compatible pack file is produced. This will also be
|
||||
* the case for archives that have no class files.
|
||||
* If the input JAR-files contains a 1.6 class file, then the pack file
|
||||
* version will be set to 1.6.
|
||||
* <p>
|
||||
* @since 1.5
|
||||
*/
|
||||
@ -236,9 +244,10 @@ public abstract class Pack200 {
|
||||
* input file to be transmitted in the segment, along with the size
|
||||
* of its name and other transmitted properties.
|
||||
* <p>
|
||||
* The default is 1000000 (a million bytes). This allows input JAR files
|
||||
* of moderate size to be transmitted in one segment. It also puts
|
||||
* a limit on memory requirements for packers and unpackers.
|
||||
* The default is -1, which means the packer will always create a single
|
||||
* segment output file. In cases where extremely large output files are
|
||||
* generated, users are strongly encouraged to use segmenting or break
|
||||
* up the input file into smaller JARs.
|
||||
* <p>
|
||||
* A 10Mb JAR packed without this limit will
|
||||
* typically pack about 10% smaller, but the packer may require
|
||||
|
@ -107,10 +107,10 @@ import java.util.StringTokenizer;
|
||||
* significant in the <code><em>url-path</em></code>.</p>
|
||||
*
|
||||
* @see <a
|
||||
* href="ftp://ftp.rfc-editor.org/in-notes/rfc2609.txt">RFC 2609,
|
||||
* href="http://www.ietf.org/rfc/rfc2609.txt">RFC 2609,
|
||||
* "Service Templates and <code>Service:</code> Schemes"</a>
|
||||
* @see <a
|
||||
* href="ftp://ftp.rfc-editor.org/in-notes/rfc3111.txt">RFC 3111,
|
||||
* href="http://www.ietf.org/rfc/rfc3111.txt">RFC 3111,
|
||||
* "Service Location Protocol Modifications for IPv6"</a>
|
||||
*
|
||||
* @since 1.5
|
||||
|
@ -42,7 +42,7 @@ import java.io.IOException;
|
||||
|
||||
/**
|
||||
* This class represents a distinguished name as specified by
|
||||
* <a href="http://ietf.org//rfc/rfc2253.txt">RFC 2253</a>.
|
||||
* <a href="http://www.ietf.org/rfc/rfc2253.txt">RFC 2253</a>.
|
||||
* A distinguished name, or DN, is composed of an ordered list of
|
||||
* components called <em>relative distinguished name</em>s, or RDNs.
|
||||
* Details of a DN's syntax are described in RFC 2253.
|
||||
@ -115,7 +115,7 @@ public class LdapName implements Name {
|
||||
*
|
||||
* @param name This is a non-null distinguished name formatted
|
||||
* according to the rules defined in
|
||||
* <a href="http://ietf.org/rfc/rfc2253.txt">RFC 2253</a>.
|
||||
* <a href="http://www.ietf.org/rfc/rfc2253.txt">RFC 2253</a>.
|
||||
*
|
||||
* @throws InvalidNameException if a syntax violation is detected.
|
||||
* @see Rdn#escapeValue(Object value)
|
||||
@ -614,7 +614,7 @@ public class LdapName implements Name {
|
||||
|
||||
/**
|
||||
* Returns a string representation of this LDAP name in a format
|
||||
* defined by <a href="http://ietf.org/rfc/rfc2253.txt">RFC 2253</a>
|
||||
* defined by <a href="http://www.ietf.org/rfc/rfc2253.txt">RFC 2253</a>
|
||||
* and described in the class description. If the name has zero
|
||||
* components an empty string is returned.
|
||||
*
|
||||
|
@ -45,7 +45,7 @@ import java.io.IOException;
|
||||
/**
|
||||
* This class represents a relative distinguished name, or RDN, which is a
|
||||
* component of a distinguished name as specified by
|
||||
* <a href="http://ietf.org/rfc/rfc2253.txt">RFC 2253</a>.
|
||||
* <a href="http://www.ietf.org/rfc/rfc2253.txt">RFC 2253</a>.
|
||||
* An example of an RDN is "OU=Sales+CN=J.Smith". In this example,
|
||||
* the RDN consist of multiple attribute type/value pairs. The
|
||||
* RDN is parsed as described in the class description for
|
||||
@ -117,7 +117,7 @@ public class Rdn implements Serializable, Comparable<Object> {
|
||||
* {@link javax.naming.directory.Attributes Attributes}.
|
||||
* <p>
|
||||
* The string attribute values are not interpretted as
|
||||
* <a href="http://ietf.org/rfc/rfc2253.txt">RFC 2253</a>
|
||||
* <a href="http://www.ietf.org/rfc/rfc2253.txt">RFC 2253</a>
|
||||
* formatted RDN strings. That is, the values are used
|
||||
* literally (not parsed) and assumed to be unescaped.
|
||||
*
|
||||
@ -152,7 +152,7 @@ public class Rdn implements Serializable, Comparable<Object> {
|
||||
/**
|
||||
* Constructs an Rdn from the given string.
|
||||
* This constructor takes a string formatted according to the rules
|
||||
* defined in <a href="http://ietf.org//rfc/rfc2253.txt">RFC 2253</a>
|
||||
* defined in <a href="http://www.ietf.org/rfc/rfc2253.txt">RFC 2253</a>
|
||||
* and described in the class description for
|
||||
* {@link javax.naming.ldap.LdapName}.
|
||||
*
|
||||
@ -180,7 +180,7 @@ public class Rdn implements Serializable, Comparable<Object> {
|
||||
* Constructs an Rdn from the given attribute type and
|
||||
* value.
|
||||
* The string attribute values are not interpretted as
|
||||
* <a href="http://ietf.org/rfc/rfc2253.txt">RFC 2253</a>
|
||||
* <a href="http://www.ietf.org/rfc/rfc2253.txt">RFC 2253</a>
|
||||
* formatted RDN strings. That is, the values are used
|
||||
* literally (not parsed) and assumed to be unescaped.
|
||||
*
|
||||
@ -216,7 +216,7 @@ public class Rdn implements Serializable, Comparable<Object> {
|
||||
/*
|
||||
* Adds the given attribute type and value to this Rdn.
|
||||
* The string attribute values are not interpretted as
|
||||
* <a href="http://ietf.org/rfc/rfc2253.txt">RFC 2253</a>
|
||||
* <a href="http://www.ietf.org/rfc/rfc2253.txt">RFC 2253</a>
|
||||
* formatted RDN strings. That is the values are used
|
||||
* literally (not parsed) and assumed to be unescaped.
|
||||
*
|
||||
@ -280,7 +280,7 @@ public class Rdn implements Serializable, Comparable<Object> {
|
||||
|
||||
/**
|
||||
* Returns this Rdn as a string represented in a format defined by
|
||||
* <a href="http://ietf.org//rfc/rfc2253.txt">RFC 2253</a> and described
|
||||
* <a href="http://www.ietf.org/rfc/rfc2253.txt">RFC 2253</a> and described
|
||||
* in the class description for {@link javax.naming.ldap.LdapName LdapName}.
|
||||
*
|
||||
* @return The string representation of the Rdn.
|
||||
@ -503,7 +503,7 @@ public class Rdn implements Serializable, Comparable<Object> {
|
||||
/**
|
||||
* Given the value of an attribute, returns a string escaped according
|
||||
* to the rules specified in
|
||||
* <a href="http://ietf.org/rfc/rfc2253.txt">RFC 2253</a>.
|
||||
* <a href="http://www.ietf.org/rfc/rfc2253.txt">RFC 2253</a>.
|
||||
* <p>
|
||||
* For example, if the val is "Sue, Grabbit and Runn", the escaped
|
||||
* value returned by this method is "Sue\, Grabbit and Runn".
|
||||
@ -582,7 +582,7 @@ public class Rdn implements Serializable, Comparable<Object> {
|
||||
/**
|
||||
* Given an attribute value string formated according to the rules
|
||||
* specified in
|
||||
* <a href="http://ietf.org//rfc/rfc2253.txt">RFC 2253</a>,
|
||||
* <a href="http://www.ietf.org/rfc/rfc2253.txt">RFC 2253</a>,
|
||||
* returns the unformated value. Escapes and quotes are
|
||||
* stripped away, and hex-encoded UTF-8 is converted to equivalent
|
||||
* UTF-16 characters. Returns a string value as a String, and a
|
||||
|
@ -160,7 +160,7 @@ public class SSLContext {
|
||||
*
|
||||
* @param protocol the standard name of the requested protocol.
|
||||
* See Appendix A in the <a href=
|
||||
* "{@docRoot}/../technotes/guides//security/jsse/JSSERefGuide.html#AppA">
|
||||
* "{@docRoot}/../technotes/guides/security/jsse/JSSERefGuide.html#AppA">
|
||||
* Java Secure Socket Extension Reference Guide </a>
|
||||
* for information about standard protocol names.
|
||||
*
|
||||
|
@ -450,7 +450,7 @@ public class DocFlavor implements Serializable, Cloneable {
|
||||
/**
|
||||
* A String representing the host operating system encoding.
|
||||
* This will follow the conventions documented in
|
||||
* <a href="http://ietf.org/rfc/rfc2278.txt">
|
||||
* <a href="http://www.ietf.org/rfc/rfc2278.txt">
|
||||
* <i>RFC 2278: IANA Charset Registration Procedures</i></a>
|
||||
* except where historical names are returned for compatibility with
|
||||
* previous versions of the Java platform.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -26,7 +26,6 @@ package javax.swing;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Font;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.border.*;
|
||||
|
||||
/**
|
||||
@ -74,10 +73,20 @@ public class BorderFactory
|
||||
return new LineBorder(color, thickness);
|
||||
}
|
||||
|
||||
// public static Border createLineBorder(Color color, int thickness,
|
||||
// boolean drawRounded) {
|
||||
// return new JLineBorder(color, thickness, drawRounded);
|
||||
// }
|
||||
/**
|
||||
* Creates a line border with the specified color, thickness, and corner shape.
|
||||
*
|
||||
* @param color the color of the border
|
||||
* @param thickness the thickness of the border
|
||||
* @param rounded whether or not border corners should be round
|
||||
* @return the {@code Border} object
|
||||
*
|
||||
* @see LineBorder#LineBorder(Color, int, boolean)
|
||||
* @since 1.7
|
||||
*/
|
||||
public static Border createLineBorder(Color color, int thickness, boolean rounded) {
|
||||
return new LineBorder(color, thickness, rounded);
|
||||
}
|
||||
|
||||
//// BevelBorder /////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
@ -180,7 +189,115 @@ public class BorderFactory
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
//// SoftBevelBorder ///////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
private static Border sharedSoftRaisedBevel;
|
||||
private static Border sharedSoftLoweredBevel;
|
||||
|
||||
/**
|
||||
* Creates a beveled border with a raised edge and softened corners,
|
||||
* using brighter shades of the component's current background color
|
||||
* for highlighting, and darker shading for shadows.
|
||||
* In a raised border, highlights are on top and shadows are underneath.
|
||||
*
|
||||
* @return the {@code Border} object
|
||||
*
|
||||
* @since 1.7
|
||||
*/
|
||||
public static Border createRaisedSoftBevelBorder() {
|
||||
if (sharedSoftRaisedBevel == null) {
|
||||
sharedSoftRaisedBevel = new SoftBevelBorder(BevelBorder.RAISED);
|
||||
}
|
||||
return sharedSoftRaisedBevel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a beveled border with a lowered edge and softened corners,
|
||||
* using brighter shades of the component's current background color
|
||||
* for highlighting, and darker shading for shadows.
|
||||
* In a lowered border, shadows are on top and highlights are underneath.
|
||||
*
|
||||
* @return the {@code Border} object
|
||||
*
|
||||
* @since 1.7
|
||||
*/
|
||||
public static Border createLoweredSoftBevelBorder() {
|
||||
if (sharedSoftLoweredBevel == null) {
|
||||
sharedSoftLoweredBevel = new SoftBevelBorder(BevelBorder.LOWERED);
|
||||
}
|
||||
return sharedSoftLoweredBevel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a beveled border of the specified type with softened corners,
|
||||
* using brighter shades of the component's current background color
|
||||
* for highlighting, and darker shading for shadows.
|
||||
* The type is either {@link BevelBorder#RAISED} or {@link BevelBorder#LOWERED}.
|
||||
*
|
||||
* @param type a type of a bevel
|
||||
* @return the {@code Border} object or {@code null}
|
||||
* if the specified type is not valid
|
||||
*
|
||||
* @see BevelBorder#BevelBorder(int)
|
||||
* @since 1.7
|
||||
*/
|
||||
public static Border createSoftBevelBorder(int type) {
|
||||
if (type == BevelBorder.RAISED) {
|
||||
return createRaisedSoftBevelBorder();
|
||||
}
|
||||
if (type == BevelBorder.LOWERED) {
|
||||
return createLoweredSoftBevelBorder();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a beveled border of the specified type with softened corners,
|
||||
* using the specified highlighting and shadowing.
|
||||
* The type is either {@link BevelBorder#RAISED} or {@link BevelBorder#LOWERED}.
|
||||
* The outer edge of the highlight area uses
|
||||
* a brighter shade of the {@code highlight} color.
|
||||
* The inner edge of the shadow area uses
|
||||
* a brighter shade of the {@code shadow} color.
|
||||
*
|
||||
* @param type a type of a bevel
|
||||
* @param highlight a basic color of the highlight area
|
||||
* @param shadow a basic color of the shadow area
|
||||
* @return the {@code Border} object
|
||||
*
|
||||
* @see BevelBorder#BevelBorder(int, Color, Color)
|
||||
* @since 1.7
|
||||
*/
|
||||
public static Border createSoftBevelBorder(int type, Color highlight, Color shadow) {
|
||||
return new BevelBorder(type, highlight, shadow);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a beveled border of the specified type with softened corners,
|
||||
* using the specified colors for the inner and outer edges
|
||||
* of the highlight and the shadow areas.
|
||||
* The type is either {@link BevelBorder#RAISED} or {@link BevelBorder#LOWERED}.
|
||||
* Note: The shadow inner and outer colors are switched
|
||||
* for a lowered bevel border.
|
||||
*
|
||||
* @param type a type of a bevel
|
||||
* @param highlightOuter a color of the outer edge of the highlight area
|
||||
* @param highlightInner a color of the inner edge of the highlight area
|
||||
* @param shadowOuter a color of the outer edge of the shadow area
|
||||
* @param shadowInner a color of the inner edge of the shadow area
|
||||
* @return the {@code Border} object
|
||||
*
|
||||
* @see BevelBorder#BevelBorder(int, Color, Color, Color, Color)
|
||||
* @since 1.7
|
||||
*/
|
||||
public static Border createSoftBevelBorder(int type, Color highlightOuter, Color highlightInner, Color shadowOuter, Color shadowInner) {
|
||||
return new BevelBorder(type, highlightOuter, highlightInner, shadowOuter, shadowInner);
|
||||
}
|
||||
|
||||
//// EtchedBorder ///////////////////////////////////////////////////////////
|
||||
|
||||
static final Border sharedEtchedBorder = new EtchedBorder();
|
||||
private static Border sharedRaisedEtchedBorder;
|
||||
|
||||
|
@ -658,8 +658,7 @@ class SynthParser extends DefaultHandler {
|
||||
}
|
||||
try {
|
||||
_colorTypes.add((ColorType)checkCast(typeClass.
|
||||
getField(typeName.substring(classIndex,
|
||||
typeName.length() - classIndex)).
|
||||
getField(typeName.substring(classIndex)).
|
||||
get(typeClass), ColorType.class));
|
||||
} catch (NoSuchFieldException nsfe) {
|
||||
throw new SAXException("Unable to find color type: " +
|
||||
|
@ -363,18 +363,24 @@ public class SynthToolBarUI extends BasicToolBarUI
|
||||
SynthIcon.getIconWidth(handleIcon, context) : 0;
|
||||
Dimension compDim;
|
||||
for (int i = 0; i < tb.getComponentCount(); i++) {
|
||||
compDim = tb.getComponent(i).getMinimumSize();
|
||||
dim.width += compDim.width;
|
||||
dim.height = Math.max(dim.height, compDim.height);
|
||||
Component component = tb.getComponent(i);
|
||||
if (component.isVisible()) {
|
||||
compDim = component.getMinimumSize();
|
||||
dim.width += compDim.width;
|
||||
dim.height = Math.max(dim.height, compDim.height);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
dim.height = tb.isFloatable() ?
|
||||
SynthIcon.getIconHeight(handleIcon, context) : 0;
|
||||
Dimension compDim;
|
||||
for (int i = 0; i < tb.getComponentCount(); i++) {
|
||||
compDim = tb.getComponent(i).getMinimumSize();
|
||||
dim.width = Math.max(dim.width, compDim.width);
|
||||
dim.height += compDim.height;
|
||||
Component component = tb.getComponent(i);
|
||||
if (component.isVisible()) {
|
||||
compDim = component.getMinimumSize();
|
||||
dim.width = Math.max(dim.width, compDim.width);
|
||||
dim.height += compDim.height;
|
||||
}
|
||||
}
|
||||
}
|
||||
dim.width += insets.left + insets.right;
|
||||
@ -395,18 +401,24 @@ public class SynthToolBarUI extends BasicToolBarUI
|
||||
SynthIcon.getIconWidth(handleIcon, context) : 0;
|
||||
Dimension compDim;
|
||||
for (int i = 0; i < tb.getComponentCount(); i++) {
|
||||
compDim = tb.getComponent(i).getPreferredSize();
|
||||
dim.width += compDim.width;
|
||||
dim.height = Math.max(dim.height, compDim.height);
|
||||
Component component = tb.getComponent(i);
|
||||
if (component.isVisible()) {
|
||||
compDim = component.getPreferredSize();
|
||||
dim.width += compDim.width;
|
||||
dim.height = Math.max(dim.height, compDim.height);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
dim.height = tb.isFloatable() ?
|
||||
SynthIcon.getIconHeight(handleIcon, context) : 0;
|
||||
Dimension compDim;
|
||||
for (int i = 0; i < tb.getComponentCount(); i++) {
|
||||
compDim = tb.getComponent(i).getPreferredSize();
|
||||
dim.width = Math.max(dim.width, compDim.width);
|
||||
dim.height += compDim.height;
|
||||
Component component = tb.getComponent(i);
|
||||
if (component.isVisible()) {
|
||||
compDim = component.getPreferredSize();
|
||||
dim.width = Math.max(dim.width, compDim.width);
|
||||
dim.height += compDim.height;
|
||||
}
|
||||
}
|
||||
}
|
||||
dim.width += insets.left + insets.right;
|
||||
@ -469,22 +481,24 @@ public class SynthToolBarUI extends BasicToolBarUI
|
||||
|
||||
for (int i = 0; i < tb.getComponentCount(); i++) {
|
||||
c = tb.getComponent(i);
|
||||
d = c.getPreferredSize();
|
||||
int y, h;
|
||||
if (d.height >= baseH || c instanceof JSeparator) {
|
||||
// Fill available height
|
||||
y = baseY;
|
||||
h = baseH;
|
||||
} else {
|
||||
// Center component vertically in the available space
|
||||
y = baseY + (baseH / 2) - (d.height / 2);
|
||||
h = d.height;
|
||||
if (c.isVisible()) {
|
||||
d = c.getPreferredSize();
|
||||
int y, h;
|
||||
if (d.height >= baseH || c instanceof JSeparator) {
|
||||
// Fill available height
|
||||
y = baseY;
|
||||
h = baseH;
|
||||
} else {
|
||||
// Center component vertically in the available space
|
||||
y = baseY + (baseH / 2) - (d.height / 2);
|
||||
h = d.height;
|
||||
}
|
||||
//if the component is a "glue" component then add to its
|
||||
//width the extraSpacePerGlue it is due
|
||||
if (isGlue(c)) d.width += extraSpacePerGlue;
|
||||
c.setBounds(ltr ? x : x - d.width, y, d.width, h);
|
||||
x = ltr ? x + d.width : x - d.width;
|
||||
}
|
||||
//if the component is a "glue" component then add to its
|
||||
//width the extraSpacePerGlue it is due
|
||||
if (isGlue(c)) d.width += extraSpacePerGlue;
|
||||
c.setBounds(ltr ? x : x - d.width, y, d.width, h);
|
||||
x = ltr ? x + d.width : x - d.width;
|
||||
}
|
||||
} else {
|
||||
int handleHeight = tb.isFloatable() ?
|
||||
@ -512,29 +526,31 @@ public class SynthToolBarUI extends BasicToolBarUI
|
||||
|
||||
for (int i = 0; i < tb.getComponentCount(); i++) {
|
||||
c = tb.getComponent(i);
|
||||
d = c.getPreferredSize();
|
||||
int x, w;
|
||||
if (d.width >= baseW || c instanceof JSeparator) {
|
||||
// Fill available width
|
||||
x = baseX;
|
||||
w = baseW;
|
||||
} else {
|
||||
// Center component horizontally in the available space
|
||||
x = baseX + (baseW / 2) - (d.width / 2);
|
||||
w = d.width;
|
||||
if (c.isVisible()) {
|
||||
d = c.getPreferredSize();
|
||||
int x, w;
|
||||
if (d.width >= baseW || c instanceof JSeparator) {
|
||||
// Fill available width
|
||||
x = baseX;
|
||||
w = baseW;
|
||||
} else {
|
||||
// Center component horizontally in the available space
|
||||
x = baseX + (baseW / 2) - (d.width / 2);
|
||||
w = d.width;
|
||||
}
|
||||
//if the component is a "glue" component then add to its
|
||||
//height the extraSpacePerGlue it is due
|
||||
if (isGlue(c)) d.height += extraSpacePerGlue;
|
||||
c.setBounds(x, y, w, d.height);
|
||||
y += d.height;
|
||||
}
|
||||
//if the component is a "glue" component then add to its
|
||||
//height the extraSpacePerGlue it is due
|
||||
if (isGlue(c)) d.height += extraSpacePerGlue;
|
||||
c.setBounds(x, y, w, d.height);
|
||||
y += d.height;
|
||||
}
|
||||
}
|
||||
context.dispose();
|
||||
}
|
||||
|
||||
private boolean isGlue(Component c) {
|
||||
if (c instanceof Box.Filler) {
|
||||
if (c.isVisible() && c instanceof Box.Filler) {
|
||||
Box.Filler f = (Box.Filler)c;
|
||||
Dimension min = f.getMinimumSize();
|
||||
Dimension pref = f.getPreferredSize();
|
||||
|
@ -25,15 +25,12 @@
|
||||
package javax.swing.text;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Font;
|
||||
import java.awt.FontMetrics;
|
||||
import java.awt.font.TextAttribute;
|
||||
import java.lang.ref.ReferenceQueue;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.Enumeration;
|
||||
import java.util.HashMap;
|
||||
import java.util.Hashtable;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Stack;
|
||||
@ -41,15 +38,14 @@ import java.util.Vector;
|
||||
import java.util.ArrayList;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.io.Serializable;
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.event.*;
|
||||
import javax.swing.undo.AbstractUndoableEdit;
|
||||
import javax.swing.undo.CannotRedoException;
|
||||
import javax.swing.undo.CannotUndoException;
|
||||
import javax.swing.undo.UndoableEdit;
|
||||
import javax.swing.SwingUtilities;
|
||||
import static sun.swing.SwingUtilities2.IMPLIED_CR;
|
||||
|
||||
/**
|
||||
* A document that can be marked up with character and paragraph
|
||||
@ -782,9 +778,18 @@ public class DefaultStyledDocument extends AbstractDocument implements StyledDoc
|
||||
// Check for the composed text element. If it is, merge the character attributes
|
||||
// into this element as well.
|
||||
if (Utilities.isComposedTextAttributeDefined(attr)) {
|
||||
((MutableAttributeSet)attr).addAttributes(cattr);
|
||||
((MutableAttributeSet)attr).addAttribute(AbstractDocument.ElementNameAttribute,
|
||||
AbstractDocument.ContentElementName);
|
||||
MutableAttributeSet mattr = (MutableAttributeSet) attr;
|
||||
mattr.addAttributes(cattr);
|
||||
mattr.addAttribute(AbstractDocument.ElementNameAttribute,
|
||||
AbstractDocument.ContentElementName);
|
||||
|
||||
// Assure that the composed text element is named properly
|
||||
// and doesn't have the CR attribute defined.
|
||||
mattr.addAttribute(StyleConstants.NameAttribute,
|
||||
AbstractDocument.ContentElementName);
|
||||
if (mattr.isDefined(IMPLIED_CR)) {
|
||||
mattr.removeAttribute(IMPLIED_CR);
|
||||
}
|
||||
}
|
||||
|
||||
ElementSpec[] spec = new ElementSpec[parseBuffer.size()];
|
||||
|
@ -32,6 +32,7 @@ import java.util.Locale;
|
||||
|
||||
import javax.swing.UIManager;
|
||||
import sun.swing.SwingUtilities2;
|
||||
import static sun.swing.SwingUtilities2.IMPLIED_CR;
|
||||
|
||||
/**
|
||||
* A GlyphView is a styled chunk of text that represents a view
|
||||
@ -1061,7 +1062,6 @@ public class GlyphView extends View implements TabableView, Cloneable {
|
||||
int length;
|
||||
// if it is an implied newline character
|
||||
boolean impliedCR;
|
||||
private static final String IMPLIED_CR = "CR";
|
||||
boolean skipWidth;
|
||||
|
||||
/**
|
||||
|
@ -403,6 +403,24 @@ public class Utilities {
|
||||
return txtCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adjust text offset so that the length of a resulting string as a whole
|
||||
* fits into the specified width.
|
||||
*/
|
||||
static int adjustOffsetForFractionalMetrics(
|
||||
Segment s, FontMetrics fm, int offset, int width) {
|
||||
// Sometimes the offset returned by getTabbedTextOffset is beyond the
|
||||
// available area, when fractional metrics are enabled. We should
|
||||
// guard against this.
|
||||
if (offset < s.count) {
|
||||
while (offset > 0 &&
|
||||
fm.charsWidth(s.array, s.offset, offset + 1) > width) {
|
||||
offset--;
|
||||
}
|
||||
}
|
||||
return offset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine where to break the given text to fit
|
||||
* within the given span. This tries to find a word boundary.
|
||||
@ -425,7 +443,7 @@ public class Utilities {
|
||||
int txtCount = s.count;
|
||||
int index = Utilities.getTabbedTextOffset(s, metrics, x0, x,
|
||||
e, startOffset, false);
|
||||
|
||||
index = adjustOffsetForFractionalMetrics(s, metrics, index, x - x0);
|
||||
|
||||
if (index >= txtCount - 1) {
|
||||
return txtCount;
|
||||
|
@ -108,7 +108,7 @@ public class WrappedPlainView extends BoxView implements TabExpander {
|
||||
|
||||
try {
|
||||
if (line.isLeaf()) {
|
||||
drawText(line, p0, p1, g, x, y);
|
||||
drawText(line, p0, p1, g, x, y);
|
||||
} else {
|
||||
// this line contains the composed text.
|
||||
int idx = line.getElementIndex(p0);
|
||||
@ -239,9 +239,11 @@ public class WrappedPlainView extends BoxView implements TabExpander {
|
||||
tabBase, tabBase + currentWidth,
|
||||
this, p0);
|
||||
} else {
|
||||
p = p0 + Utilities.getTabbedTextOffset(segment, metrics,
|
||||
tabBase, tabBase + currentWidth,
|
||||
this, p0, false);
|
||||
int offset = Utilities.getTabbedTextOffset(segment, metrics,
|
||||
tabBase, tabBase + currentWidth, this, p0, false);
|
||||
offset = Utilities.adjustOffsetForFractionalMetrics(
|
||||
segment, metrics, offset, currentWidth);
|
||||
p = p0 + offset;
|
||||
}
|
||||
SegmentCache.releaseSharedSegment(segment);
|
||||
return p;
|
||||
|
@ -24,20 +24,17 @@
|
||||
*/
|
||||
package javax.swing.text.html;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.font.TextAttribute;
|
||||
import java.util.*;
|
||||
import java.net.URL;
|
||||
import java.net.URLEncoder;
|
||||
import java.net.MalformedURLException;
|
||||
import java.io.*;
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.*;
|
||||
import javax.swing.text.*;
|
||||
import javax.swing.undo.*;
|
||||
import java.text.Bidi;
|
||||
import sun.swing.SwingUtilities2;
|
||||
import static sun.swing.SwingUtilities2.IMPLIED_CR;
|
||||
|
||||
/**
|
||||
* A document that models HTML. The purpose of this model is to
|
||||
@ -1819,7 +1816,6 @@ public class HTMLDocument extends DefaultStyledDocument {
|
||||
static String MAP_PROPERTY = "__MAP__";
|
||||
|
||||
private static char[] NEWLINE;
|
||||
private static final String IMPLIED_CR = "CR";
|
||||
|
||||
/**
|
||||
* I18N property key.
|
||||
|
@ -32,7 +32,7 @@ import java.awt.image.*;
|
||||
import java.awt.Color;
|
||||
|
||||
/** PNG - Portable Network Graphics - image file reader.
|
||||
See <a href=ftp://ds.internic.net/rfc/rfc2083.txt>RFC2083</a> for details. */
|
||||
See <a href=http://www.ietf.org/rfc/rfc2083.txt>RFC2083</a> for details. */
|
||||
|
||||
/* this is changed
|
||||
public class PNGImageDecoder extends FilterInputStream implements Runnable
|
||||
|
@ -124,15 +124,15 @@ public abstract class ByteToCharISO2022 extends ByteToCharConverter
|
||||
switch(shiftFlag) {
|
||||
case SOFlag:
|
||||
tmpIndex = curSODes;
|
||||
tmpConverter = (ByteToCharConverter [])SOConverter;
|
||||
tmpConverter = SOConverter;
|
||||
break;
|
||||
case SS2Flag:
|
||||
tmpIndex = curSS2Des;
|
||||
tmpConverter = (ByteToCharConverter [])SS2Converter;
|
||||
tmpConverter = SS2Converter;
|
||||
break;
|
||||
case SS3Flag:
|
||||
tmpIndex = curSS3Des;
|
||||
tmpConverter = (ByteToCharConverter [])SS3Converter;
|
||||
tmpConverter = SS3Converter;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -141,7 +141,7 @@ public class ByteToCharISO2022JP extends ByteToCharJIS0208 {
|
||||
} else {
|
||||
savedSize = 2;
|
||||
savedBytes[0] = (byte)byte1;
|
||||
savedBytes[1] = (byte)input[readOff + inputSize];
|
||||
savedBytes[1] = input[readOff + inputSize];
|
||||
inputSize++;
|
||||
}
|
||||
break;
|
||||
|
@ -34,14 +34,12 @@ public class ByteToCharJISAutoDetect extends ByteToCharConverter {
|
||||
private final static int SJIS1B_MASK = 0x04;
|
||||
private final static int EUCJP_KANA1_MASK = 0x08;
|
||||
private final static int EUCJP_KANA2_MASK = 0x10;
|
||||
private static byte[] maskTable1;
|
||||
private static byte[] maskTable2;
|
||||
private final static byte[] maskTable1 = JISAutoDetect.getByteMask1();
|
||||
private final static byte[] maskTable2 = JISAutoDetect.getByteMask2();
|
||||
|
||||
private final static int SS2 = 0x8e;
|
||||
private final static int SS3 = 0x8f;
|
||||
|
||||
private final static JISAutoDetect nioCoder = new JISAutoDetect();
|
||||
|
||||
// SJISName is set to either "SJIS" or "MS932"
|
||||
private String SJISName;
|
||||
private String EUCJPName;
|
||||
@ -57,8 +55,6 @@ public class ByteToCharJISAutoDetect extends ByteToCharConverter {
|
||||
defaultConv = new ByteToCharISO8859_1();
|
||||
defaultConv.subChars = subChars;
|
||||
defaultConv.subMode = subMode;
|
||||
maskTable1 = nioCoder.getByteMask1();
|
||||
maskTable2 = nioCoder.getByteMask2();
|
||||
}
|
||||
|
||||
public int flush(char [] output, int outStart, int outEnd)
|
||||
@ -133,7 +129,7 @@ public class ByteToCharJISAutoDetect extends ByteToCharConverter {
|
||||
break;
|
||||
}
|
||||
if ((mask == SJIS2B_MASK) || (mask == SJIS1B_MASK)
|
||||
|| (nioCoder.canBeSJIS1B(firstmask) && secondmask == 0)) {
|
||||
|| (JISAutoDetect.canBeSJIS1B(firstmask) && secondmask == 0)) {
|
||||
convName = SJISName;
|
||||
break;
|
||||
}
|
||||
@ -145,15 +141,15 @@ public class ByteToCharJISAutoDetect extends ByteToCharConverter {
|
||||
// character boundary. If we tried both
|
||||
// possibilities here, it might be able to be
|
||||
// determined correctly.
|
||||
if ((byte1 == SS3) && nioCoder.canBeEUCJP(secondmask)) {
|
||||
if ((byte1 == SS3) && JISAutoDetect.canBeEUCJP(secondmask)) {
|
||||
if (cnt+1 < inEnd) {
|
||||
int nextbyte = input[cnt+1] & 0xff;
|
||||
if (! nioCoder.canBeEUCJP(maskTable2[nextbyte]))
|
||||
if (! JISAutoDetect.canBeEUCJP(maskTable2[nextbyte]))
|
||||
convName = SJISName;
|
||||
} else
|
||||
convName = SJISName;
|
||||
}
|
||||
if (nioCoder.canBeEUCKana(firstmask, secondmask))
|
||||
if (JISAutoDetect.canBeEUCKana(firstmask, secondmask))
|
||||
euckana++;
|
||||
} else {
|
||||
if ((firstmask & SJIS1B_MASK) != 0) {
|
||||
|
@ -66,7 +66,7 @@ public class CharToBytePCK extends CharToByteSJIS {
|
||||
|
||||
switch (ch) {
|
||||
case '\u2015':
|
||||
return (int)0x815C;
|
||||
return 0x815C;
|
||||
case '\u2014':
|
||||
return 0;
|
||||
default:
|
||||
|
@ -1,5 +1,2 @@
|
||||
# Jules Rendering Engine module
|
||||
sun.java2d.jules.JulesRenderingEngine
|
||||
|
||||
# Pisces Rendering Engine module
|
||||
sun.java2d.pisces.PiscesRenderingEngine
|
||||
sun.java2d.pisces.PiscesRenderingEngine
|
||||
|
@ -171,10 +171,9 @@ public class DatagramSocketAdaptor
|
||||
|
||||
// Must hold dc.blockingLock()
|
||||
//
|
||||
private void receive(ByteBuffer bb) throws IOException {
|
||||
private SocketAddress receive(ByteBuffer bb) throws IOException {
|
||||
if (timeout == 0) {
|
||||
dc.receive(bb);
|
||||
return;
|
||||
return dc.receive(bb);
|
||||
}
|
||||
|
||||
// Implement timeout with a selector
|
||||
@ -183,8 +182,9 @@ public class DatagramSocketAdaptor
|
||||
dc.configureBlocking(false);
|
||||
try {
|
||||
int n;
|
||||
if (dc.receive(bb) != null)
|
||||
return;
|
||||
SocketAddress sender;
|
||||
if ((sender = dc.receive(bb)) != null)
|
||||
return sender;
|
||||
sel = Util.getTemporarySelector(dc);
|
||||
sk = dc.register(sel, SelectionKey.OP_READ);
|
||||
long to = timeout;
|
||||
@ -194,8 +194,8 @@ public class DatagramSocketAdaptor
|
||||
long st = System.currentTimeMillis();
|
||||
int ns = sel.select(to);
|
||||
if (ns > 0 && sk.isReadable()) {
|
||||
if (dc.receive(bb) != null)
|
||||
return;
|
||||
if ((sender = dc.receive(bb)) != null)
|
||||
return sender;
|
||||
}
|
||||
sel.selectedKeys().remove(sk);
|
||||
to -= System.currentTimeMillis() - st;
|
||||
@ -222,7 +222,8 @@ public class DatagramSocketAdaptor
|
||||
ByteBuffer bb = ByteBuffer.wrap(p.getData(),
|
||||
p.getOffset(),
|
||||
p.getLength());
|
||||
receive(bb);
|
||||
SocketAddress sender = receive(bb);
|
||||
p.setSocketAddress(sender);
|
||||
p.setLength(bb.position() - p.getOffset());
|
||||
}
|
||||
} catch (IOException x) {
|
||||
|
@ -144,11 +144,7 @@ public class ServerSocketAdaptor // package-private
|
||||
}
|
||||
|
||||
public void close() throws IOException {
|
||||
try {
|
||||
ssc.close();
|
||||
} catch (Exception x) {
|
||||
Net.translateException(x);
|
||||
}
|
||||
ssc.close();
|
||||
}
|
||||
|
||||
public ServerSocketChannel getChannel() {
|
||||
|
@ -404,11 +404,7 @@ public class SocketAdaptor
|
||||
}
|
||||
|
||||
public void close() throws IOException {
|
||||
try {
|
||||
sc.close();
|
||||
} catch (Exception x) {
|
||||
Net.translateToSocketException(x);
|
||||
}
|
||||
sc.close();
|
||||
}
|
||||
|
||||
public void shutdownInput() throws IOException {
|
||||
|
@ -103,7 +103,7 @@ public class DoubleByte {
|
||||
public final static char[] B2C_UNMAPPABLE;
|
||||
static {
|
||||
B2C_UNMAPPABLE = new char[0x100];
|
||||
Arrays.fill(B2C_UNMAPPABLE, (char)UNMAPPABLE_DECODING);
|
||||
Arrays.fill(B2C_UNMAPPABLE, UNMAPPABLE_DECODING);
|
||||
}
|
||||
|
||||
public static class Decoder extends CharsetDecoder
|
||||
@ -374,7 +374,7 @@ public class DoubleByte {
|
||||
static final char[] b2cSB;
|
||||
static {
|
||||
b2cSB = new char[0x100];
|
||||
Arrays.fill(b2cSB, (char)UNMAPPABLE_DECODING);
|
||||
Arrays.fill(b2cSB, UNMAPPABLE_DECODING);
|
||||
}
|
||||
Decoder_EBCDIC_DBCSONLY(Charset cs, char[][] b2c, int b2Min, int b2Max) {
|
||||
super(cs, 0.5f, 1.0f, b2c, b2cSB, b2Min, b2Max);
|
||||
|
@ -79,8 +79,10 @@ public class EUC_JP
|
||||
JIS_X_0201.Decoder decoderJ0201;
|
||||
JIS_X_0212_Decoder decoderJ0212;
|
||||
|
||||
short[] j0208Index1;
|
||||
String[] j0208Index2;
|
||||
private static final short[] j0208Index1 =
|
||||
JIS_X_0208_Decoder.getIndex1();
|
||||
private static final String[] j0208Index2 =
|
||||
JIS_X_0208_Decoder.getIndex2();
|
||||
|
||||
protected Decoder(Charset cs) {
|
||||
super(cs);
|
||||
@ -88,8 +90,6 @@ public class EUC_JP
|
||||
decoderJ0212 = new JIS_X_0212_Decoder(cs);
|
||||
start = 0xa1;
|
||||
end = 0xfe;
|
||||
j0208Index1 = super.getIndex1();
|
||||
j0208Index2 = super.getIndex2();
|
||||
}
|
||||
protected char decode0212(int byte1, int byte2) {
|
||||
return decoderJ0212.decodeDouble(byte1, byte2);
|
||||
@ -238,8 +238,10 @@ public class EUC_JP
|
||||
JIS_X_0201.Encoder encoderJ0201;
|
||||
JIS_X_0212_Encoder encoderJ0212;
|
||||
|
||||
short[] j0208Index1;
|
||||
String[] j0208Index2;
|
||||
private static final short[] j0208Index1 =
|
||||
JIS_X_0208_Encoder.getIndex1();
|
||||
private static final String[] j0208Index2 =
|
||||
JIS_X_0208_Encoder.getIndex2();
|
||||
|
||||
private final Surrogate.Parser sgp = new Surrogate.Parser();
|
||||
|
||||
@ -247,8 +249,6 @@ public class EUC_JP
|
||||
super(cs, 3.0f, 3.0f);
|
||||
encoderJ0201 = new JIS_X_0201.Encoder(cs);
|
||||
encoderJ0212 = new JIS_X_0212_Encoder(cs);
|
||||
j0208Index1 = super.getIndex1();
|
||||
j0208Index2 = super.getIndex2();
|
||||
}
|
||||
|
||||
public boolean canEncode(char c) {
|
||||
|
@ -65,20 +65,18 @@ public class EUC_JP_LINUX
|
||||
|
||||
private static class Decoder extends CharsetDecoder {
|
||||
JIS_X_0201.Decoder decoderJ0201;
|
||||
JIS_X_0208_Decoder decodeMappingJ0208;
|
||||
protected final char REPLACE_CHAR='\uFFFD';
|
||||
|
||||
short[] jis0208Index1;
|
||||
String[] jis0208Index2;
|
||||
private static final int start = 0xa1;
|
||||
private static final int end = 0xfe;
|
||||
private static final short[] jis0208Index1 =
|
||||
JIS_X_0208_Decoder.getIndex1();
|
||||
private static final String[] jis0208Index2 =
|
||||
JIS_X_0208_Decoder.getIndex2();
|
||||
|
||||
private Decoder(Charset cs) {
|
||||
super(cs, 1.0f, 1.0f);
|
||||
decoderJ0201 = new JIS_X_0201.Decoder(cs);
|
||||
decodeMappingJ0208 = new JIS_X_0208_Decoder(cs);
|
||||
decodeMappingJ0208.start = 0xa1;
|
||||
decodeMappingJ0208.end = 0xfe;
|
||||
jis0208Index1 = decodeMappingJ0208.getIndex1();
|
||||
jis0208Index2 = decodeMappingJ0208.getIndex2();
|
||||
}
|
||||
|
||||
protected char convSingleByte(int b) {
|
||||
@ -93,11 +91,11 @@ public class EUC_JP_LINUX
|
||||
}
|
||||
|
||||
if (((byte1 < 0) || (byte1 > jis0208Index1.length))
|
||||
|| ((byte2 < decodeMappingJ0208.start) || (byte2 > decodeMappingJ0208.end)))
|
||||
|| ((byte2 < start) || (byte2 > end)))
|
||||
return REPLACE_CHAR;
|
||||
|
||||
int n = (jis0208Index1[byte1 - 0x80] & 0xf) * (decodeMappingJ0208.end - decodeMappingJ0208.start + 1)
|
||||
+ (byte2 - decodeMappingJ0208.start);
|
||||
int n = (jis0208Index1[byte1 - 0x80] & 0xf) * (end - start + 1)
|
||||
+ (byte2 - start);
|
||||
return jis0208Index2[jis0208Index1[byte1 - 0x80] >> 4].charAt(n);
|
||||
}
|
||||
|
||||
@ -213,18 +211,16 @@ public class EUC_JP_LINUX
|
||||
private static class Encoder extends CharsetEncoder {
|
||||
|
||||
JIS_X_0201.Encoder encoderJ0201;
|
||||
JIS_X_0208_Encoder encoderJ0208;
|
||||
|
||||
private final Surrogate.Parser sgp = new Surrogate.Parser();
|
||||
short[] jis0208Index1;
|
||||
String[] jis0208Index2;
|
||||
private static final short[] jis0208Index1 =
|
||||
JIS_X_0208_Encoder.getIndex1();
|
||||
private static final String[] jis0208Index2 =
|
||||
JIS_X_0208_Encoder.getIndex2();
|
||||
|
||||
private Encoder(Charset cs) {
|
||||
super(cs, 2.0f, 2.0f);
|
||||
encoderJ0201 = new JIS_X_0201.Encoder(cs);
|
||||
encoderJ0208 = new JIS_X_0208_Encoder(cs);
|
||||
jis0208Index1 = encoderJ0208.getIndex1();
|
||||
jis0208Index2 = encoderJ0208.getIndex2();
|
||||
}
|
||||
|
||||
public boolean canEncode(char c) {
|
||||
|
@ -75,8 +75,12 @@ public class EUC_JP_Open
|
||||
JIS_X_0212_Solaris_Decoder decodeMappingJ0212;
|
||||
JIS_X_0208_Solaris_Decoder decodeMappingJ0208;
|
||||
|
||||
short[] j0208Index1;
|
||||
String[] j0208Index2;
|
||||
private static final short[] j0208Index1 =
|
||||
JIS_X_0208_Solaris_Decoder.getIndex1();
|
||||
private static final String[] j0208Index2 =
|
||||
JIS_X_0208_Solaris_Decoder.getIndex2();
|
||||
private static final int start = 0xa1;
|
||||
private static final int end = 0xfe;
|
||||
|
||||
protected final char REPLACE_CHAR='\uFFFD';
|
||||
|
||||
@ -84,11 +88,6 @@ public class EUC_JP_Open
|
||||
super(cs);
|
||||
decoderJ0201 = new JIS_X_0201.Decoder(cs);
|
||||
decodeMappingJ0212 = new JIS_X_0212_Solaris_Decoder(cs);
|
||||
decodeMappingJ0208 = new JIS_X_0208_Solaris_Decoder(cs);
|
||||
decodeMappingJ0208.start = 0xa1;
|
||||
decodeMappingJ0208.end = 0xfe;
|
||||
j0208Index1 = decodeMappingJ0208.getIndex1();
|
||||
j0208Index2 = decodeMappingJ0208.getIndex2();
|
||||
}
|
||||
|
||||
|
||||
@ -103,9 +102,9 @@ public class EUC_JP_Open
|
||||
}
|
||||
|
||||
if (((byte1 < 0)
|
||||
|| (byte1 > decodeMappingJ0208.getIndex1().length))
|
||||
|| ((byte2 < decodeMappingJ0208.start)
|
||||
|| (byte2 > decodeMappingJ0208.end)))
|
||||
|| (byte1 > j0208Index1.length))
|
||||
|| ((byte2 < start)
|
||||
|| (byte2 > end)))
|
||||
return REPLACE_CHAR;
|
||||
|
||||
char result = super.decodeDouble(byte1, byte2);
|
||||
@ -113,8 +112,8 @@ public class EUC_JP_Open
|
||||
return result;
|
||||
} else {
|
||||
int n = (j0208Index1[byte1 - 0x80] & 0xf) *
|
||||
(decodeMappingJ0208.end - decodeMappingJ0208.start + 1)
|
||||
+ (byte2 - decodeMappingJ0208.start);
|
||||
(end - start + 1)
|
||||
+ (byte2 - start);
|
||||
return j0208Index2[j0208Index1[byte1 - 0x80] >> 4].charAt(n);
|
||||
}
|
||||
}
|
||||
@ -125,10 +124,11 @@ public class EUC_JP_Open
|
||||
|
||||
JIS_X_0201.Encoder encoderJ0201;
|
||||
JIS_X_0212_Solaris_Encoder encoderJ0212;
|
||||
JIS_X_0208_Solaris_Encoder encoderJ0208;
|
||||
|
||||
short[] j0208Index1;
|
||||
String[] j0208Index2;
|
||||
private static final short[] j0208Index1 =
|
||||
JIS_X_0208_Solaris_Encoder.getIndex1();
|
||||
private static final String[] j0208Index2 =
|
||||
JIS_X_0208_Solaris_Encoder.getIndex2();
|
||||
|
||||
private final Surrogate.Parser sgp = new Surrogate.Parser();
|
||||
|
||||
@ -136,9 +136,6 @@ public class EUC_JP_Open
|
||||
super(cs);
|
||||
encoderJ0201 = new JIS_X_0201.Encoder(cs);
|
||||
encoderJ0212 = new JIS_X_0212_Solaris_Encoder(cs);
|
||||
encoderJ0208 = new JIS_X_0208_Solaris_Encoder(cs);
|
||||
j0208Index1 = encoderJ0208.getIndex1();
|
||||
j0208Index2 = encoderJ0208.getIndex2();
|
||||
}
|
||||
|
||||
protected int encodeSingle(char inputChar, byte[] outputByte) {
|
||||
|
@ -423,7 +423,7 @@ public class EUC_TW extends Charset implements HistoricallyNamedCharset
|
||||
if (dst.remaining() < outSize)
|
||||
return CoderResult.OVERFLOW;
|
||||
for (int i = 0; i < outSize; i++)
|
||||
dst.put((byte)bb[i]);
|
||||
dst.put(bb[i]);
|
||||
mark += inSize;
|
||||
}
|
||||
return CoderResult.UNDERFLOW;
|
||||
|
@ -12339,7 +12339,7 @@ public class GB18030
|
||||
int start = 0x40, end = 0xFE;
|
||||
if (((byte1 < 0) || (byte1 > index1.length))
|
||||
|| ((byte2 < start) || (byte2 > end)))
|
||||
return (char)'\uFFFD';
|
||||
return '\uFFFD';
|
||||
|
||||
int n = (index1[byte1] & 0xf) * (end - start + 1) + (byte2 - start);
|
||||
return index2[index1[byte1] >> 4].charAt(n);
|
||||
|
@ -43,7 +43,7 @@ public class HKSCS {
|
||||
|
||||
private char[][] b2cBmp;
|
||||
private char[][] b2cSupp;
|
||||
private static DoubleByte.Decoder big5Dec;
|
||||
private DoubleByte.Decoder big5Dec;
|
||||
|
||||
protected Decoder(Charset cs,
|
||||
DoubleByte.Decoder big5Dec,
|
||||
@ -355,7 +355,7 @@ public class HKSCS {
|
||||
c2b[hi] = new char[0x100];
|
||||
Arrays.fill(c2b[hi], (char)UNMAPPABLE_ENCODING);
|
||||
}
|
||||
c2b[hi][c & 0xff] = (char)bb;
|
||||
c2b[hi][c & 0xff] = bb;
|
||||
}
|
||||
c++;
|
||||
}
|
||||
|
@ -104,15 +104,15 @@ abstract class ISO2022
|
||||
switch(shiftFlag) {
|
||||
case SOFlag:
|
||||
tmpIndex = curSODes;
|
||||
tmpDecoder = (CharsetDecoder [])SODecoder;
|
||||
tmpDecoder = SODecoder;
|
||||
break;
|
||||
case SS2Flag:
|
||||
tmpIndex = curSS2Des;
|
||||
tmpDecoder = (CharsetDecoder [])SS2Decoder;
|
||||
tmpDecoder = SS2Decoder;
|
||||
break;
|
||||
case SS3Flag:
|
||||
tmpIndex = curSS3Des;
|
||||
tmpDecoder = (CharsetDecoder [])SS3Decoder;
|
||||
tmpDecoder = SS3Decoder;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -82,11 +82,11 @@ public class JISAutoDetect
|
||||
* with the sun.io JISAutoDetect implementation
|
||||
*/
|
||||
|
||||
public byte[] getByteMask1() {
|
||||
public static byte[] getByteMask1() {
|
||||
return Decoder.maskTable1;
|
||||
}
|
||||
|
||||
public byte[] getByteMask2() {
|
||||
public static byte[] getByteMask2() {
|
||||
return Decoder.maskTable2;
|
||||
}
|
||||
|
||||
|
@ -101,17 +101,15 @@ public class PCK
|
||||
private static class Encoder extends SJIS.Encoder {
|
||||
|
||||
private JIS_X_0201.Encoder jis0201;
|
||||
private JIS_X_0208_Solaris_Encoder jis0208;
|
||||
|
||||
short[] j0208Index1;
|
||||
String[] j0208Index2;
|
||||
private static final short[] j0208Index1 =
|
||||
JIS_X_0208_Solaris_Encoder.getIndex1();
|
||||
private static final String[] j0208Index2 =
|
||||
JIS_X_0208_Solaris_Encoder.getIndex2();
|
||||
|
||||
private Encoder(Charset cs) {
|
||||
super(cs);
|
||||
jis0201 = new JIS_X_0201.Encoder(cs);
|
||||
jis0208 = new JIS_X_0208_Solaris_Encoder(cs);
|
||||
j0208Index1 = jis0208.getIndex1();
|
||||
j0208Index2 = jis0208.getIndex2();
|
||||
}
|
||||
|
||||
protected int encodeDouble(char ch) {
|
||||
@ -121,7 +119,7 @@ public class PCK
|
||||
|
||||
switch (ch) {
|
||||
case '\u2015':
|
||||
return (int)0x815C;
|
||||
return 0x815C;
|
||||
case '\u2014':
|
||||
return 0;
|
||||
default:
|
||||
|
@ -114,14 +114,14 @@ public class SJIS
|
||||
|
||||
private JIS_X_0201.Encoder jis0201;
|
||||
|
||||
short[] j0208Index1;
|
||||
String[] j0208Index2;
|
||||
private static final short[] j0208Index1 =
|
||||
JIS_X_0208_Encoder.getIndex1();
|
||||
private static final String[] j0208Index2 =
|
||||
JIS_X_0208_Encoder.getIndex2();
|
||||
|
||||
protected Encoder(Charset cs) {
|
||||
super(cs);
|
||||
jis0201 = new JIS_X_0201.Encoder(cs);
|
||||
j0208Index1 = super.getIndex1();
|
||||
j0208Index2 = super.getIndex2();
|
||||
}
|
||||
|
||||
protected int encodeSingle(char inputChar) {
|
||||
|
@ -188,24 +188,13 @@ public class EncryptionKey
|
||||
etypes = EType.getBuiltInDefaults();
|
||||
}
|
||||
|
||||
// set the preferred etype for preauth
|
||||
if ((pa_exists) && (pa_etype != EncryptedData.ETYPE_NULL)) {
|
||||
if (DEBUG) {
|
||||
System.out.println("Pre-Authentication: " +
|
||||
"Set preferred etype = " + pa_etype);
|
||||
}
|
||||
if (EType.isSupported(pa_etype)) {
|
||||
// reset etypes to preferred value
|
||||
etypes = new int[1];
|
||||
etypes[0] = pa_etype;
|
||||
}
|
||||
}
|
||||
|
||||
EncryptionKey[] encKeys = new EncryptionKey[etypes.length];
|
||||
for (int i = 0; i < etypes.length; i++) {
|
||||
if (EType.isSupported(etypes[i])) {
|
||||
byte[] s2kparams = (pa_exists && etypes[i] == pa_etype)
|
||||
? pa_s2kparams : null;
|
||||
encKeys[i] = new EncryptionKey(
|
||||
stringToKey(password, salt, pa_s2kparams, etypes[i]),
|
||||
stringToKey(password, salt, s2kparams, etypes[i]),
|
||||
etypes[i], null);
|
||||
} else {
|
||||
if (DEBUG) {
|
||||
|
@ -342,20 +342,20 @@ public class KrbAsReq extends KrbKdcReq {
|
||||
}
|
||||
|
||||
princName = cname;
|
||||
|
||||
EncryptionKey key = null;
|
||||
int[] tktETypes = EType.getDefaults("default_tkt_enctypes");
|
||||
if (pa_exists && pa_etype != EncryptedData.ETYPE_NULL) {
|
||||
if (DEBUG) {
|
||||
System.out.println("Pre-Authenticaton: find key for etype = " + pa_etype);
|
||||
}
|
||||
key = EncryptionKey.findKey(pa_etype, keys);
|
||||
} else {
|
||||
key = EncryptionKey.findKey(tktETypes[0], keys);
|
||||
}
|
||||
|
||||
int[] tktETypes = EType.getDefaults("default_tkt_enctypes", keys);
|
||||
PAData[] paData = null;
|
||||
if (PA_ENC_TIMESTAMP_REQUIRED) {
|
||||
EncryptionKey key = null;
|
||||
if (pa_etype != EncryptedData.ETYPE_NULL) {
|
||||
if (DEBUG) {
|
||||
System.out.println("Pre-Authenticaton: find key for etype = " + pa_etype);
|
||||
}
|
||||
key = EncryptionKey.findKey(pa_etype, keys);
|
||||
} else {
|
||||
if (tktETypes.length > 0) {
|
||||
key = EncryptionKey.findKey(tktETypes[0], keys);
|
||||
}
|
||||
}
|
||||
if (DEBUG) {
|
||||
System.out.println("AS-REQ: Add PA_ENC_TIMESTAMP now");
|
||||
}
|
||||
|
@ -286,6 +286,19 @@ public class KRBError implements java.io.Serializable {
|
||||
salt = info.getSalt();
|
||||
if (DEBUG) {
|
||||
System.out.println("\t PA-ETYPE-INFO etype = " + etype);
|
||||
System.out.println("\t PA-ETYPE-INFO salt = " + salt);
|
||||
}
|
||||
while (der.data.available() > 0) {
|
||||
value = der.data.getDerValue();
|
||||
info = new ETypeInfo(value);
|
||||
if (DEBUG) {
|
||||
etype = info.getEType();
|
||||
System.out.println("\t salt for " + etype
|
||||
+ " is " + info.getSalt());
|
||||
}
|
||||
if (salt == null || salt.isEmpty()) {
|
||||
salt = info.getSalt();
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -299,6 +312,19 @@ public class KRBError implements java.io.Serializable {
|
||||
s2kparams = info2.getParams();
|
||||
if (DEBUG) {
|
||||
System.out.println("\t PA-ETYPE-INFO2 etype = " + etype);
|
||||
System.out.println("\t PA-ETYPE-INFO salt = " + salt);
|
||||
}
|
||||
while (der.data.available() > 0) {
|
||||
value = der.data.getDerValue();
|
||||
info2 = new ETypeInfo2(value);
|
||||
if (DEBUG) {
|
||||
etype = info2.getEType();
|
||||
System.out.println("\t salt for " + etype
|
||||
+ " is " + info2.getSalt());
|
||||
}
|
||||
if (salt == null || salt.isEmpty()) {
|
||||
salt = info2.getSalt();
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -53,7 +53,7 @@ public final class PKIXValidator extends Validator {
|
||||
private int certPathLength = -1;
|
||||
|
||||
// needed only for the validator
|
||||
private Map<X500Principal, X509Certificate> trustedSubjects;
|
||||
private Map<X500Principal, List<PublicKey>> trustedSubjects;
|
||||
private CertificateFactory factory;
|
||||
|
||||
private boolean plugin = false;
|
||||
@ -95,9 +95,17 @@ public final class PKIXValidator extends Validator {
|
||||
if (TRY_VALIDATOR == false) {
|
||||
return;
|
||||
}
|
||||
trustedSubjects = new HashMap<X500Principal, X509Certificate>();
|
||||
trustedSubjects = new HashMap<X500Principal, List<PublicKey>>();
|
||||
for (X509Certificate cert : trustedCerts) {
|
||||
trustedSubjects.put(cert.getSubjectX500Principal(), cert);
|
||||
X500Principal dn = cert.getSubjectX500Principal();
|
||||
List<PublicKey> keys;
|
||||
if (trustedSubjects.containsKey(dn)) {
|
||||
keys = trustedSubjects.get(dn);
|
||||
} else {
|
||||
keys = new ArrayList<PublicKey>();
|
||||
trustedSubjects.put(dn, keys);
|
||||
}
|
||||
keys.add(cert.getPublicKey());
|
||||
}
|
||||
try {
|
||||
factory = CertificateFactory.getInstance("X.509");
|
||||
@ -161,13 +169,21 @@ public final class PKIXValidator extends Validator {
|
||||
// chain is not ordered correctly, call builder instead
|
||||
return doBuild(chain, otherCerts);
|
||||
}
|
||||
if (trustedSubjects.containsKey(dn)
|
||||
&& trustedSubjects.get(dn).getPublicKey()
|
||||
.equals(cert.getPublicKey())) {
|
||||
|
||||
// Check if chain[i] is already trusted. It may be inside
|
||||
// trustedCerts, or has the same dn and public key as a cert
|
||||
// inside trustedCerts. The latter happens when a CA has
|
||||
// updated its cert with a stronger signature algorithm in JRE
|
||||
// but the weak one is still in circulation.
|
||||
|
||||
if (trustedCerts.contains(cert) || // trusted cert
|
||||
(trustedSubjects.containsKey(dn) && // replacing ...
|
||||
trustedSubjects.get(dn).contains( // ... weak cert
|
||||
cert.getPublicKey()))) {
|
||||
if (i == 0) {
|
||||
return new X509Certificate[] {chain[0]};
|
||||
}
|
||||
// Remove and call validator
|
||||
// Remove and call validator on partial chain [0 .. i-1]
|
||||
X509Certificate[] newChain = new X509Certificate[i];
|
||||
System.arraycopy(chain, 0, newChain, 0, i);
|
||||
return doValidate(newChain);
|
||||
@ -217,14 +233,17 @@ public final class PKIXValidator extends Validator {
|
||||
return doBuild(chain, otherCerts);
|
||||
}
|
||||
|
||||
private boolean isSignatureValid(X509Certificate iss, X509Certificate sub) {
|
||||
private boolean isSignatureValid(List<PublicKey> keys, X509Certificate sub) {
|
||||
if (plugin) {
|
||||
try {
|
||||
sub.verify(iss.getPublicKey());
|
||||
} catch (Exception ex) {
|
||||
return false;
|
||||
for (PublicKey key: keys) {
|
||||
try {
|
||||
sub.verify(key);
|
||||
return true;
|
||||
} catch (Exception ex) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
return true; // only check if PLUGIN is set
|
||||
}
|
||||
|
@ -108,6 +108,12 @@ public class SwingUtilities2 {
|
||||
public static final Object AA_TEXT_PROPERTY_KEY =
|
||||
new StringBuffer("AATextInfoPropertyKey");
|
||||
|
||||
/**
|
||||
* Attribute key for the content elements. If it is set on an element, the
|
||||
* element is considered to be a line break.
|
||||
*/
|
||||
public static final String IMPLIED_CR = "CR";
|
||||
|
||||
/**
|
||||
* Used to tell a text component, being used as an editor for table
|
||||
* or tree, how many clicks it took to start editing.
|
||||
|
@ -127,7 +127,7 @@ public class DefaultTableCellHeaderRenderer extends DefaultTableCellRenderer
|
||||
|
||||
public static SortOrder getColumnSortOrder(JTable table, int column) {
|
||||
SortOrder rv = null;
|
||||
if (table.getRowSorter() == null) {
|
||||
if (table == null || table.getRowSorter() == null) {
|
||||
return rv;
|
||||
}
|
||||
java.util.List<? extends RowSorter.SortKey> sortKeys =
|
||||
|
@ -47,6 +47,7 @@ public class Arguments {
|
||||
|
||||
private static final String JVMSTAT_USERDIR = ".jvmstat";
|
||||
private static final String OPTIONS_FILENAME = "jstat_options";
|
||||
private static final String UNSUPPORTED_OPTIONS_FILENAME = "jstat_unsupported_options";
|
||||
private static final String ALL_NAMES = "\\w*";
|
||||
|
||||
private Comparator<Monitor> comparator;
|
||||
@ -411,8 +412,8 @@ public class Arguments {
|
||||
return optionFormat;
|
||||
}
|
||||
|
||||
public URL[] optionsSources() {
|
||||
URL[] sources = new URL[2];
|
||||
public List<URL> optionsSources() {
|
||||
List<URL> sources = new ArrayList<URL>();
|
||||
int i = 0;
|
||||
|
||||
String filename = OPTIONS_FILENAME;
|
||||
@ -421,7 +422,7 @@ public class Arguments {
|
||||
String userHome = System.getProperty("user.home");
|
||||
String userDir = userHome + "/" + JVMSTAT_USERDIR;
|
||||
File home = new File(userDir + "/" + filename);
|
||||
sources[i++] = home.toURL();
|
||||
sources.add(home.toURI().toURL());
|
||||
} catch (Exception e) {
|
||||
if (debug) {
|
||||
System.err.println(e.getMessage());
|
||||
@ -430,8 +431,15 @@ public class Arguments {
|
||||
throw new IllegalArgumentException("Internal Error: Bad URL: "
|
||||
+ e.getMessage());
|
||||
}
|
||||
sources[i] = this.getClass().getResource("resources/" + filename);
|
||||
assert sources[i] != null;
|
||||
URL u = this.getClass().getResource("resources/" + filename);
|
||||
assert u != null;
|
||||
sources.add(u);
|
||||
|
||||
if (showUnsupported) {
|
||||
u = this.getClass().getResource("resources/" + UNSUPPORTED_OPTIONS_FILENAME);
|
||||
assert u != null;
|
||||
sources.add(u);
|
||||
}
|
||||
return sources;
|
||||
}
|
||||
}
|
||||
|
@ -39,9 +39,9 @@ public class OptionFinder {
|
||||
|
||||
private static final boolean debug = false;
|
||||
|
||||
URL[] optionsSources;
|
||||
List<URL> optionsSources;
|
||||
|
||||
public OptionFinder(URL[] optionsSources) {
|
||||
public OptionFinder(List<URL> optionsSources) {
|
||||
this.optionsSources = optionsSources;
|
||||
}
|
||||
|
||||
@ -59,24 +59,25 @@ public class OptionFinder {
|
||||
return of;
|
||||
}
|
||||
|
||||
protected OptionFormat getOptionFormat(String option, URL[] sources) {
|
||||
protected OptionFormat getOptionFormat(String option, List<URL> sources) {
|
||||
OptionFormat of = null;
|
||||
for (int i = 0; (i < sources.length) && (of == null); i++) {
|
||||
for (URL u : sources) {
|
||||
try {
|
||||
URL u = sources[i];
|
||||
Reader r = new BufferedReader(
|
||||
new InputStreamReader(u.openStream()));
|
||||
of = new Parser(r).parse(option);
|
||||
if (of != null)
|
||||
break;
|
||||
} catch (IOException e) {
|
||||
if (debug) {
|
||||
System.err.println("Error processing " + sources[i]
|
||||
System.err.println("Error processing " + u
|
||||
+ " : " + e.getMessage());
|
||||
e.printStackTrace();
|
||||
}
|
||||
} catch (ParserException e) {
|
||||
// Exception in parsing the options file.
|
||||
System.err.println(sources[i] + ": " + e.getMessage());
|
||||
System.err.println("Parsing of " + sources[i] + " aborted");
|
||||
System.err.println(u + ": " + e.getMessage());
|
||||
System.err.println("Parsing of " + u + " aborted");
|
||||
}
|
||||
}
|
||||
return of;
|
||||
|
@ -37,9 +37,9 @@ import java.io.*;
|
||||
*/
|
||||
public class OptionLister {
|
||||
private static final boolean debug = false;
|
||||
private URL[] sources;
|
||||
private List<URL> sources;
|
||||
|
||||
public OptionLister(URL[] sources) {
|
||||
public OptionLister(List<URL> sources) {
|
||||
this.sources = sources;
|
||||
}
|
||||
|
||||
@ -54,9 +54,8 @@ public class OptionLister {
|
||||
|
||||
Set<OptionFormat> options = new TreeSet<OptionFormat>(c);
|
||||
|
||||
for (int i = 0; i < sources.length; i++) {
|
||||
for (URL u : sources) {
|
||||
try {
|
||||
URL u = sources[i];
|
||||
Reader r = new BufferedReader(
|
||||
new InputStreamReader(u.openStream()));
|
||||
Set<OptionFormat> s = new Parser(r).parseOptions();
|
||||
@ -68,8 +67,8 @@ public class OptionLister {
|
||||
}
|
||||
} catch (ParserException e) {
|
||||
// Exception in parsing the options file.
|
||||
System.err.println(sources[i] + ": " + e.getMessage());
|
||||
System.err.println("Parsing of " + sources[i] + " aborted");
|
||||
System.err.println(u + ": " + e.getMessage());
|
||||
System.err.println("Parsing of " + u + " aborted");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -37,7 +37,7 @@ option timestamp {
|
||||
option class {
|
||||
column {
|
||||
header "^Loaded^" /* Number of classes loaded */
|
||||
data java.cls.loadedClasses
|
||||
data (java.cls.loadedClasses + java.cls.sharedLoadedClasses)
|
||||
align right
|
||||
scale raw
|
||||
width 5
|
||||
@ -45,7 +45,7 @@ option class {
|
||||
}
|
||||
column {
|
||||
header "^Bytes^" /* Accumulated Size of classes loaded */
|
||||
data sun.cls.loadedBytes
|
||||
data (sun.cls.loadedBytes + sun.cls.sharedLoadedBytes)
|
||||
align right
|
||||
scale K
|
||||
width 7
|
||||
@ -53,7 +53,7 @@ option class {
|
||||
}
|
||||
column {
|
||||
header "^Unloaded^" /* Number of classes unloaded */
|
||||
data java.cls.unloadedClasses
|
||||
data (java.cls.unloadedClasses + java.cls.sharedUnloadedClasses)
|
||||
align right
|
||||
width 5
|
||||
scale raw
|
||||
@ -61,7 +61,7 @@ option class {
|
||||
}
|
||||
column {
|
||||
header "^Bytes^" /* Accumulated size of classes unloaded */
|
||||
data sun.cls.unloadedBytes
|
||||
data (sun.cls.unloadedBytes + sun.cls.sharedUnloadedBytes)
|
||||
align right
|
||||
scale K
|
||||
width 7
|
||||
|
@ -0,0 +1,228 @@
|
||||
/*
|
||||
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle in the LICENSE file that accompanied this code.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
option classload {
|
||||
column {
|
||||
header "^Loaded^" /* Number of classes loaded */
|
||||
data (java.cls.loadedClasses + java.cls.sharedLoadedClasses)
|
||||
align right
|
||||
scale raw
|
||||
width 5
|
||||
format "0"
|
||||
}
|
||||
column {
|
||||
header "Time^" /* Accumulated time for class loading */
|
||||
data sun.cls.time/sun.os.hrt.frequency
|
||||
scale sec
|
||||
align right
|
||||
width 10
|
||||
format "0.000"
|
||||
}
|
||||
column {
|
||||
header "^Inited^" /* Number of initialized classes */
|
||||
data sun.cls.initializedClasses
|
||||
align right
|
||||
scale raw
|
||||
width 5
|
||||
format "0"
|
||||
}
|
||||
column {
|
||||
header "Time^" /* Accumulated time for class initialization */
|
||||
data sun.cls.classInitTime.self/sun.os.hrt.frequency
|
||||
scale raw
|
||||
align right
|
||||
width 10
|
||||
format "0.000"
|
||||
}
|
||||
column {
|
||||
header "Shared^" /* Number of system classes loaded from shared archive */
|
||||
data java.cls.sharedLoadedClasses
|
||||
align right
|
||||
scale raw
|
||||
width 5
|
||||
format "0"
|
||||
}
|
||||
column {
|
||||
header "Kbytes^" /* Accumulated Size of classes loaded */
|
||||
data sun.cls.sharedLoadedBytes
|
||||
align right
|
||||
scale K
|
||||
width 7
|
||||
format "0.0"
|
||||
}
|
||||
column {
|
||||
header "LoadTime^" /* Accumulated time for loading classes from shared archive */
|
||||
data sun.cls.sharedClassLoadTime/sun.os.hrt.frequency
|
||||
scale raw
|
||||
align right
|
||||
width 10
|
||||
format "0.000"
|
||||
}
|
||||
column {
|
||||
header "^SysClass^" /* Number of system classes loaded */
|
||||
data java.cls.loadedClasses
|
||||
align right
|
||||
scale raw
|
||||
width 5
|
||||
format "0"
|
||||
}
|
||||
column {
|
||||
header "Kbytes^" /* Bytes read from system class files */
|
||||
data sun.cls.sysClassBytes
|
||||
align right
|
||||
scale K
|
||||
width 7
|
||||
format "0.0"
|
||||
}
|
||||
column {
|
||||
header "LoadTime^" /* Accumulated time for loading non-shared system classes */
|
||||
data sun.cls.sysClassLoadTime/sun.os.hrt.frequency
|
||||
scale raw
|
||||
align right
|
||||
width 10
|
||||
format "0.000"
|
||||
}
|
||||
column {
|
||||
header "Lookup^" /* Time spent in looking up/reading of system classes */
|
||||
data sun.cls.lookupSysClassTime/sun.os.hrt.frequency
|
||||
scale raw
|
||||
align right
|
||||
width 10
|
||||
format "0.000"
|
||||
}
|
||||
column {
|
||||
header "Parse^" /* Time spent in parsing system classes */
|
||||
data sun.cls.parseClassTime.self/sun.os.hrt.frequency
|
||||
scale raw
|
||||
align right
|
||||
width 10
|
||||
format "0.000"
|
||||
}
|
||||
column {
|
||||
header "^Linked^" /* Number of linked classes */
|
||||
data sun.cls.linkedClasses
|
||||
align right
|
||||
scale raw
|
||||
width 5
|
||||
format "0"
|
||||
}
|
||||
column {
|
||||
header "Time^" /* Accumulated time for class linking */
|
||||
data sun.cls.classInitTime.self/sun.os.hrt.frequency
|
||||
scale raw
|
||||
align right
|
||||
width 10
|
||||
format "0.000"
|
||||
}
|
||||
column {
|
||||
header "^Verified^" /* Number of verified classes */
|
||||
data sun.cls.verifiedClasses
|
||||
align right
|
||||
scale raw
|
||||
width 5
|
||||
format "0"
|
||||
}
|
||||
column {
|
||||
header "Time^" /* Accumulated time for class verification */
|
||||
data sun.cls.classVerifyTime.self/sun.os.hrt.frequency
|
||||
scale raw
|
||||
align right
|
||||
width 10
|
||||
format "0.000"
|
||||
}
|
||||
column {
|
||||
header "AppClass^" /* Number of loaded application classes */
|
||||
data sun.cls.appClassLoadCount
|
||||
align right
|
||||
scale raw
|
||||
width 5
|
||||
format "0"
|
||||
}
|
||||
column {
|
||||
header "Kbytes^" /* Bytes read from app class files */
|
||||
data sun.cls.appClassBytes
|
||||
align right
|
||||
scale K
|
||||
width 7
|
||||
format "0.0"
|
||||
}
|
||||
column {
|
||||
header "AppCL^" /* Accumulated time for loading app classes */
|
||||
data sun.cls.appClassLoadTime/sun.os.hrt.frequency
|
||||
scale raw
|
||||
align right
|
||||
width 10
|
||||
format "0.000"
|
||||
}
|
||||
column {
|
||||
header "^DefineClass^" /* Number of defineClass calls */
|
||||
data sun.cls.defineAppClasses
|
||||
align right
|
||||
scale raw
|
||||
width 5
|
||||
format "0"
|
||||
}
|
||||
column {
|
||||
header "Time^" /* Accumulated time for defineClass */
|
||||
data sun.cls.defineAppClassTime.self/sun.os.hrt.frequency
|
||||
scale raw
|
||||
align right
|
||||
width 10
|
||||
format "0.000"
|
||||
}
|
||||
column {
|
||||
header "^FindClass^" /* Number of findClass calls */
|
||||
data sun.classloader.findClasses
|
||||
align right
|
||||
scale raw
|
||||
width 5
|
||||
format "0"
|
||||
}
|
||||
column {
|
||||
header "Time^" /* Accumulated time for findClass */
|
||||
data sun.classloader.findClassTime/1000000000
|
||||
scale raw
|
||||
align right
|
||||
width 10
|
||||
format "0.000"
|
||||
}
|
||||
column {
|
||||
header "Delegation^" /* Parent class loader delegation time */
|
||||
data sun.classloader.parentDelegationTime/1000000000
|
||||
scale raw
|
||||
align right
|
||||
width 10
|
||||
format "0.000"
|
||||
}
|
||||
column {
|
||||
header "URLCL Read^" /* Accumulated time for URLClassLoader reading bytes */
|
||||
data sun.urlClassLoader.readClassBytesTime/1000000000
|
||||
scale raw
|
||||
align right
|
||||
width 10
|
||||
format "0.000"
|
||||
}
|
||||
}
|
||||
|
@ -132,7 +132,7 @@ ifeq ($(OSNAME), linux)
|
||||
LIBRARY=lib$(LIBNAME).so
|
||||
LDFLAGS=-Wl,-soname=$(LIBRARY) -static-libgcc -mimpure-text
|
||||
# Libraries we are dependent on
|
||||
LIBRARIES= -lnsl -ldl -lc
|
||||
LIBRARIES= -ldl -lc
|
||||
# Building a shared library
|
||||
LINK_SHARED=$(LINK.c) -shared -o $@
|
||||
endif
|
||||
|
@ -182,7 +182,7 @@ SplashDecodePngStream(Splash * splash, SplashStream * stream)
|
||||
int success = 0;
|
||||
|
||||
stream->read(stream, sig, SIG_BYTES);
|
||||
if (!png_check_sig(sig, SIG_BYTES)) {
|
||||
if (png_sig_cmp(sig, 0, SIG_BYTES)) {
|
||||
goto done;
|
||||
}
|
||||
success = SplashDecodePng(splash, my_png_read_stream, stream);
|
||||
|
@ -490,22 +490,23 @@ Java_sun_font_FreetypeFontScaler_getFontMetricsNative(
|
||||
|
||||
/* ascent */
|
||||
ax = 0;
|
||||
ay = -(jfloat) FT26Dot6ToFloat(
|
||||
scalerInfo->face->size->metrics.ascender +
|
||||
bmodifier/2);
|
||||
ay = -(jfloat) FT26Dot6ToFloat(FT_MulFix(
|
||||
((jlong) scalerInfo->face->ascender + bmodifier/2),
|
||||
(jlong) scalerInfo->face->size->metrics.y_scale));
|
||||
/* descent */
|
||||
dx = 0;
|
||||
dy = -(jfloat) FT26Dot6ToFloat(
|
||||
scalerInfo->face->size->metrics.descender +
|
||||
bmodifier/2);
|
||||
dy = -(jfloat) FT26Dot6ToFloat(FT_MulFix(
|
||||
((jlong) scalerInfo->face->descender + bmodifier/2),
|
||||
(jlong) scalerInfo->face->size->metrics.y_scale));
|
||||
/* baseline */
|
||||
bx = by = 0;
|
||||
|
||||
/* leading */
|
||||
lx = 0;
|
||||
ly = (jfloat) FT26Dot6ToFloat(
|
||||
scalerInfo->face->size->metrics.height +
|
||||
bmodifier) + ay - dy;
|
||||
ly = (jfloat) FT26Dot6ToFloat(FT_MulFix(
|
||||
(jlong) scalerInfo->face->height + bmodifier,
|
||||
(jlong) scalerInfo->face->size->metrics.y_scale))
|
||||
+ ay - dy;
|
||||
/* max advance */
|
||||
mx = (jfloat) FT26Dot6ToFloat(
|
||||
scalerInfo->face->size->metrics.max_advance +
|
||||
|
@ -25,25 +25,42 @@
|
||||
|
||||
package java.lang;
|
||||
|
||||
import java.io.*;
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.Arrays;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
import java.security.AccessController;
|
||||
import java.security.PrivilegedAction;
|
||||
import java.security.PrivilegedActionException;
|
||||
import java.security.PrivilegedExceptionAction;
|
||||
|
||||
/* java.lang.Process subclass in the UNIX environment.
|
||||
/**
|
||||
* java.lang.Process subclass in the UNIX environment.
|
||||
*
|
||||
* @author Mario Wolczko and Ross Knippel.
|
||||
* @author Konstantin Kladko (ported to Linux)
|
||||
* @author Martin Buchholz
|
||||
*/
|
||||
|
||||
final class UNIXProcess extends Process {
|
||||
private static final sun.misc.JavaIOFileDescriptorAccess fdAccess
|
||||
= sun.misc.SharedSecrets.getJavaIOFileDescriptorAccess();
|
||||
|
||||
private int pid;
|
||||
private final int pid;
|
||||
private int exitcode;
|
||||
private boolean hasExited;
|
||||
|
||||
private OutputStream stdin_stream;
|
||||
private InputStream stdout_stream;
|
||||
private InputStream stderr_stream;
|
||||
private /* final */ OutputStream stdin;
|
||||
private /* final */ InputStream stdout;
|
||||
private /* final */ InputStream stderr;
|
||||
|
||||
/* this is for the reaping thread */
|
||||
private native int waitForProcessExit(int pid);
|
||||
@ -51,155 +68,136 @@ final class UNIXProcess extends Process {
|
||||
/**
|
||||
* Create a process using fork(2) and exec(2).
|
||||
*
|
||||
* @param std_fds array of file descriptors. Indexes 0, 1, and
|
||||
* 2 correspond to standard input, standard output and
|
||||
* standard error, respectively. On input, a value of -1
|
||||
* means to create a pipe to connect child and parent
|
||||
* processes. On output, a value which is not -1 is the
|
||||
* parent pipe fd corresponding to the pipe which has
|
||||
* been created. An element of this array is -1 on input
|
||||
* if and only if it is <em>not</em> -1 on output.
|
||||
* @param fds an array of three file descriptors.
|
||||
* Indexes 0, 1, and 2 correspond to standard input,
|
||||
* standard output and standard error, respectively. On
|
||||
* input, a value of -1 means to create a pipe to connect
|
||||
* child and parent processes. On output, a value which
|
||||
* is not -1 is the parent pipe fd corresponding to the
|
||||
* pipe which has been created. An element of this array
|
||||
* is -1 on input if and only if it is <em>not</em> -1 on
|
||||
* output.
|
||||
* @return the pid of the subprocess
|
||||
*/
|
||||
private native int forkAndExec(byte[] prog,
|
||||
byte[] argBlock, int argc,
|
||||
byte[] envBlock, int envc,
|
||||
byte[] dir,
|
||||
int[] std_fds,
|
||||
int[] fds,
|
||||
boolean redirectErrorStream)
|
||||
throws IOException;
|
||||
|
||||
/* In the process constructor we wait on this gate until the process */
|
||||
/* has been created. Then we return from the constructor. */
|
||||
/* fork() is called by the same thread which later waits for the process */
|
||||
/* to terminate */
|
||||
/**
|
||||
* The thread factory used to create "process reaper" daemon threads.
|
||||
*/
|
||||
private static class ProcessReaperThreadFactory implements ThreadFactory {
|
||||
private final static ThreadGroup group = getRootThreadGroup();
|
||||
|
||||
private static class Gate {
|
||||
|
||||
private boolean exited = false;
|
||||
private IOException savedException;
|
||||
|
||||
synchronized void exit() { /* Opens the gate */
|
||||
exited = true;
|
||||
this.notify();
|
||||
private static ThreadGroup getRootThreadGroup() {
|
||||
return AccessController.doPrivileged
|
||||
(new PrivilegedAction<ThreadGroup> () {
|
||||
public ThreadGroup run() {
|
||||
ThreadGroup root = Thread.currentThread().getThreadGroup();
|
||||
while (root.getParent() != null)
|
||||
root = root.getParent();
|
||||
return root;
|
||||
}});
|
||||
}
|
||||
|
||||
synchronized void waitForExit() { /* wait until the gate is open */
|
||||
boolean interrupted = false;
|
||||
while (!exited) {
|
||||
try {
|
||||
this.wait();
|
||||
} catch (InterruptedException e) {
|
||||
interrupted = true;
|
||||
}
|
||||
}
|
||||
if (interrupted) {
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
}
|
||||
|
||||
void setException (IOException e) {
|
||||
savedException = e;
|
||||
}
|
||||
|
||||
IOException getException() {
|
||||
return savedException;
|
||||
public Thread newThread(Runnable grimReaper) {
|
||||
// Our thread stack requirement is quite modest.
|
||||
Thread t = new Thread(group, grimReaper, "process reaper", 32768);
|
||||
t.setDaemon(true);
|
||||
// A small attempt (probably futile) to avoid priority inversion
|
||||
t.setPriority(Thread.MAX_PRIORITY);
|
||||
return t;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The thread pool of "process reaper" daemon threads.
|
||||
*/
|
||||
private static final Executor processReaperExecutor
|
||||
= Executors.newCachedThreadPool(new ProcessReaperThreadFactory());
|
||||
|
||||
UNIXProcess(final byte[] prog,
|
||||
final byte[] argBlock, final int argc,
|
||||
final byte[] envBlock, final int envc,
|
||||
final byte[] dir,
|
||||
final int[] std_fds,
|
||||
final int[] fds,
|
||||
final boolean redirectErrorStream)
|
||||
throws IOException {
|
||||
throws IOException {
|
||||
|
||||
final Gate gate = new Gate();
|
||||
/*
|
||||
* For each subprocess forked a corresponding reaper thread
|
||||
* is started. That thread is the only thread which waits
|
||||
* for the subprocess to terminate and it doesn't hold any
|
||||
* locks while doing so. This design allows waitFor() and
|
||||
* exitStatus() to be safely executed in parallel (and they
|
||||
* need no native code).
|
||||
*/
|
||||
pid = forkAndExec(prog,
|
||||
argBlock, argc,
|
||||
envBlock, envc,
|
||||
dir,
|
||||
fds,
|
||||
redirectErrorStream);
|
||||
|
||||
java.security.AccessController.doPrivileged(
|
||||
new java.security.PrivilegedAction<Void>() {
|
||||
public Void run() {
|
||||
Thread t = new Thread("process reaper") {
|
||||
public void run() {
|
||||
try {
|
||||
pid = forkAndExec(prog,
|
||||
argBlock, argc,
|
||||
envBlock, envc,
|
||||
dir,
|
||||
std_fds,
|
||||
redirectErrorStream);
|
||||
} catch (IOException e) {
|
||||
gate.setException(e); /*remember to rethrow later*/
|
||||
gate.exit();
|
||||
return;
|
||||
}
|
||||
java.security.AccessController.doPrivileged(
|
||||
new java.security.PrivilegedAction<Void>() {
|
||||
public Void run() {
|
||||
if (std_fds[0] == -1)
|
||||
stdin_stream = new ProcessBuilder.NullOutputStream();
|
||||
else {
|
||||
FileDescriptor stdin_fd = new FileDescriptor();
|
||||
fdAccess.set(stdin_fd, std_fds[0]);
|
||||
stdin_stream = new BufferedOutputStream(
|
||||
new FileOutputStream(stdin_fd));
|
||||
}
|
||||
try {
|
||||
AccessController.doPrivileged
|
||||
(new PrivilegedExceptionAction<Void>() {
|
||||
public Void run() throws IOException {
|
||||
initStreams(fds);
|
||||
return null;
|
||||
}});
|
||||
} catch (PrivilegedActionException ex) {
|
||||
throw (IOException) ex.getException();
|
||||
}
|
||||
}
|
||||
|
||||
if (std_fds[1] == -1)
|
||||
stdout_stream = new ProcessBuilder.NullInputStream();
|
||||
else {
|
||||
FileDescriptor stdout_fd = new FileDescriptor();
|
||||
fdAccess.set(stdout_fd, std_fds[1]);
|
||||
stdout_stream = new BufferedInputStream(
|
||||
new FileInputStream(stdout_fd));
|
||||
}
|
||||
static FileDescriptor newFileDescriptor(int fd) {
|
||||
FileDescriptor fileDescriptor = new FileDescriptor();
|
||||
fdAccess.set(fileDescriptor, fd);
|
||||
return fileDescriptor;
|
||||
}
|
||||
|
||||
if (std_fds[2] == -1)
|
||||
stderr_stream = new ProcessBuilder.NullInputStream();
|
||||
else {
|
||||
FileDescriptor stderr_fd = new FileDescriptor();
|
||||
fdAccess.set(stderr_fd, std_fds[2]);
|
||||
stderr_stream = new FileInputStream(stderr_fd);
|
||||
}
|
||||
void initStreams(int[] fds) throws IOException {
|
||||
stdin = (fds[0] == -1) ?
|
||||
ProcessBuilder.NullOutputStream.INSTANCE :
|
||||
new ProcessPipeOutputStream(fds[0]);
|
||||
|
||||
return null; }});
|
||||
gate.exit(); /* exit from constructor */
|
||||
int res = waitForProcessExit(pid);
|
||||
synchronized (UNIXProcess.this) {
|
||||
hasExited = true;
|
||||
exitcode = res;
|
||||
UNIXProcess.this.notifyAll();
|
||||
}
|
||||
}
|
||||
};
|
||||
t.setDaemon(true);
|
||||
t.start();
|
||||
return null; }});
|
||||
gate.waitForExit();
|
||||
IOException e = gate.getException();
|
||||
if (e != null)
|
||||
throw new IOException(e.toString());
|
||||
stdout = (fds[1] == -1) ?
|
||||
ProcessBuilder.NullInputStream.INSTANCE :
|
||||
new ProcessPipeInputStream(fds[1]);
|
||||
|
||||
stderr = (fds[2] == -1) ?
|
||||
ProcessBuilder.NullInputStream.INSTANCE :
|
||||
new ProcessPipeInputStream(fds[2]);
|
||||
|
||||
processReaperExecutor.execute(new Runnable() {
|
||||
public void run() {
|
||||
int exitcode = waitForProcessExit(pid);
|
||||
UNIXProcess.this.processExited(exitcode);
|
||||
}});
|
||||
}
|
||||
|
||||
synchronized void processExited(int exitcode) {
|
||||
if (stdout instanceof ProcessPipeInputStream)
|
||||
((ProcessPipeInputStream) stdout).processExited();
|
||||
|
||||
if (stderr instanceof ProcessPipeInputStream)
|
||||
((ProcessPipeInputStream) stderr).processExited();
|
||||
|
||||
if (stdin instanceof ProcessPipeOutputStream)
|
||||
((ProcessPipeOutputStream) stdin).processExited();
|
||||
|
||||
this.exitcode = exitcode;
|
||||
hasExited = true;
|
||||
notifyAll();
|
||||
}
|
||||
|
||||
public OutputStream getOutputStream() {
|
||||
return stdin_stream;
|
||||
return stdin;
|
||||
}
|
||||
|
||||
public InputStream getInputStream() {
|
||||
return stdout_stream;
|
||||
return stdout;
|
||||
}
|
||||
|
||||
public InputStream getErrorStream() {
|
||||
return stderr_stream;
|
||||
return stderr;
|
||||
}
|
||||
|
||||
public synchronized int waitFor() throws InterruptedException {
|
||||
@ -228,13 +226,9 @@ final class UNIXProcess extends Process {
|
||||
if (!hasExited)
|
||||
destroyProcess(pid);
|
||||
}
|
||||
try {
|
||||
stdin_stream.close();
|
||||
stdout_stream.close();
|
||||
stderr_stream.close();
|
||||
} catch (IOException e) {
|
||||
// ignore
|
||||
}
|
||||
try { stdin.close(); } catch (IOException ignored) {}
|
||||
try { stdout.close(); } catch (IOException ignored) {}
|
||||
try { stderr.close(); } catch (IOException ignored) {}
|
||||
}
|
||||
|
||||
/* This routine initializes JNI field offsets for the class */
|
||||
@ -243,4 +237,77 @@ final class UNIXProcess extends Process {
|
||||
static {
|
||||
initIDs();
|
||||
}
|
||||
|
||||
/**
|
||||
* A buffered input stream for a subprocess pipe file descriptor
|
||||
* that allows the underlying file descriptor to be reclaimed when
|
||||
* the process exits, via the processExited hook.
|
||||
*
|
||||
* This is tricky because we do not want the user-level InputStream to be
|
||||
* closed until the user invokes close(), and we need to continue to be
|
||||
* able to read any buffered data lingering in the OS pipe buffer.
|
||||
*/
|
||||
static class ProcessPipeInputStream extends BufferedInputStream {
|
||||
ProcessPipeInputStream(int fd) {
|
||||
super(new FileInputStream(newFileDescriptor(fd)));
|
||||
}
|
||||
|
||||
private static byte[] drainInputStream(InputStream in)
|
||||
throws IOException {
|
||||
if (in == null) return null;
|
||||
int n = 0;
|
||||
int j;
|
||||
byte[] a = null;
|
||||
while ((j = in.available()) > 0) {
|
||||
a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j);
|
||||
n += in.read(a, n, j);
|
||||
}
|
||||
return (a == null || n == a.length) ? a : Arrays.copyOf(a, n);
|
||||
}
|
||||
|
||||
/** Called by the process reaper thread when the process exits. */
|
||||
synchronized void processExited() {
|
||||
// Most BufferedInputStream methods are synchronized, but close()
|
||||
// is not, and so we have to handle concurrent racing close().
|
||||
try {
|
||||
InputStream in = this.in;
|
||||
if (in != null) {
|
||||
byte[] stragglers = drainInputStream(in);
|
||||
in.close();
|
||||
this.in = (stragglers == null) ?
|
||||
ProcessBuilder.NullInputStream.INSTANCE :
|
||||
new ByteArrayInputStream(stragglers);
|
||||
if (buf == null) // asynchronous close()?
|
||||
this.in = null;
|
||||
}
|
||||
} catch (IOException ignored) {
|
||||
// probably an asynchronous close().
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A buffered output stream for a subprocess pipe file descriptor
|
||||
* that allows the underlying file descriptor to be reclaimed when
|
||||
* the process exits, via the processExited hook.
|
||||
*/
|
||||
static class ProcessPipeOutputStream extends BufferedOutputStream {
|
||||
ProcessPipeOutputStream(int fd) {
|
||||
super(new FileOutputStream(newFileDescriptor(fd)));
|
||||
}
|
||||
|
||||
/** Called by the process reaper thread when the process exits. */
|
||||
synchronized void processExited() {
|
||||
OutputStream out = this.out;
|
||||
if (out != null) {
|
||||
try {
|
||||
out.close();
|
||||
} catch (IOException ignored) {
|
||||
// We know of no reason to get an IOException, but if
|
||||
// we do, there's nothing else to do but carry on.
|
||||
}
|
||||
this.out = ProcessBuilder.NullOutputStream.INSTANCE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -86,7 +86,7 @@ final class UNIXProcess extends Process {
|
||||
java.security.AccessController.doPrivileged(
|
||||
new java.security.PrivilegedAction<Void>() { public Void run() {
|
||||
if (std_fds[0] == -1)
|
||||
stdin_stream = new ProcessBuilder.NullOutputStream();
|
||||
stdin_stream = ProcessBuilder.NullOutputStream.INSTANCE;
|
||||
else {
|
||||
FileDescriptor stdin_fd = new FileDescriptor();
|
||||
fdAccess.set(stdin_fd, std_fds[0]);
|
||||
@ -95,7 +95,7 @@ final class UNIXProcess extends Process {
|
||||
}
|
||||
|
||||
if (std_fds[1] == -1)
|
||||
stdout_stream = new ProcessBuilder.NullInputStream();
|
||||
stdout_stream = ProcessBuilder.NullInputStream.INSTANCE;
|
||||
else {
|
||||
FileDescriptor stdout_fd = new FileDescriptor();
|
||||
fdAccess.set(stdout_fd, std_fds[1]);
|
||||
@ -104,7 +104,7 @@ final class UNIXProcess extends Process {
|
||||
}
|
||||
|
||||
if (std_fds[2] == -1)
|
||||
stderr_stream = new ProcessBuilder.NullInputStream();
|
||||
stderr_stream = ProcessBuilder.NullInputStream.INSTANCE;
|
||||
else {
|
||||
FileDescriptor stderr_fd = new FileDescriptor();
|
||||
fdAccess.set(stderr_fd, std_fds[2]);
|
||||
|
@ -275,7 +275,7 @@ public class XEmbeddedFramePeer extends XFramePeer {
|
||||
Point absoluteLoc = XlibUtil.translateCoordinates(getWindow(),
|
||||
XToolkit.getDefaultRootWindow(),
|
||||
new Point(0, 0));
|
||||
return absoluteLoc.x;
|
||||
return absoluteLoc != null ? absoluteLoc.x : 0;
|
||||
}
|
||||
|
||||
public int getAbsoluteY()
|
||||
@ -283,7 +283,7 @@ public class XEmbeddedFramePeer extends XFramePeer {
|
||||
Point absoluteLoc = XlibUtil.translateCoordinates(getWindow(),
|
||||
XToolkit.getDefaultRootWindow(),
|
||||
new Point(0, 0));
|
||||
return absoluteLoc.y;
|
||||
return absoluteLoc != null ? absoluteLoc.y : 0;
|
||||
}
|
||||
|
||||
public int getWidth() {
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user