This commit is contained in:
J. Duke 2017-07-05 17:16:42 +02:00
commit 77326c3251
277 changed files with 4090 additions and 1895 deletions

View File

@ -73,3 +73,4 @@ fd3663286e77b9f13c39eee124db2beb079b3ca6 jdk7-b95
cf71cb5151166f35433afebaf67dbf34a704a170 jdk7-b96
5e197c942c6ebd8b92f324a31049c5f1d26d40ef jdk7-b97
6cea9984d73d74de0cd01f30d07ac0a1ed196117 jdk7-b98
e7f18db469a3e947b7096bfd12e87380e5a042cd jdk7-b99

View File

@ -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 \

View File

@ -102,3 +102,4 @@ d38f45079fe98792a7381dbb4b64f5b589ec8c58 jdk7-b94
573e8ea5fd68e8e51eb6308d283ac3b3889d15e0 hs19-b02
5f42499e57adc16380780f40541e1a66cd601891 jdk7-b97
8a045b3f5c13eaad92ff4baf15ca671845fcad1a jdk7-b98
6a236384a379642b5a2398e2819db9ab4e711e9b jdk7-b99

View File

@ -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

View File

@ -73,3 +73,4 @@ db951e984ccf50756160fee3078c791300b0917e jdk7-b95
51b9e5dbc2da0631414484b934ac3fb62e48a2c6 jdk7-b96
b1903d7528d33b521df42bc9291bdcdd2f444a29 jdk7-b97
82593186fa54ab12f17af31f86a7bf364efaf4df jdk7-b98
2587c9f0b60dc3146b4247b8674ada456a643d6f jdk7-b99

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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 \

View File

@ -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

View File

@ -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

View File

@ -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
#

View File

@ -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

View File

@ -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)

View File

@ -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
#

View File

@ -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.

View File

@ -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

View File

@ -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>

View File

@ -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
#

View File

@ -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)

View File

@ -150,6 +150,7 @@ OTHER_INCLUDES += \
# Rules
#
CLASSDESTDIR = $(TEMPDIR)/classes
JAVAHFLAGS += -classpath $(CLASSDESTDIR)
include $(BUILDDIR)/common/Mapfile-vers.gmk

View File

@ -148,6 +148,7 @@ OTHER_INCLUDES += \
# Rules
#
CLASSDESTDIR = $(TEMPDIR)/classes
JAVAHFLAGS += -classpath $(CLASSDESTDIR)
include $(BUILDDIR)/common/Mapfile-vers.gmk

View File

@ -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

View File

@ -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)) {
/*

View File

@ -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;

View File

@ -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;
}

View File

@ -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);

View File

@ -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 {

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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.
*

View File

@ -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:

View File

@ -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

View File

@ -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

View File

@ -53,13 +53,13 @@ a:visited,a:visited code{color:#917E9C}
</tr>
<tr>
<td>&nbsp;</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>&nbsp;</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>&nbsp;</td>

View File

@ -50,11 +50,11 @@ a:visited,a:visited code{color:#917E9C}
<tr>
<td>&nbsp;</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>&nbsp;</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>&nbsp;</td>

View File

@ -51,11 +51,11 @@ a:visited,a:visited code{color:#917E9C}
<tr>
<td>&nbsp;</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>&nbsp;</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>&nbsp;</td>

View File

@ -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);
}
}

View File

@ -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();
}
/**

View File

@ -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");
}

View File

@ -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();
}
/**

View File

@ -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&nbsp;2279: UTF-8, a
* @see <a href="http://www.ietf.org/rfc/rfc2279.txt"><i>RFC&nbsp;2279: UTF-8, a
* transformation format of ISO 10646</i></a>, <br><a
* href="http://www.ietf.org/rfc/rfc2373.txt"><i>RFC&nbsp;2373: IPv6 Addressing
* Architecture</i></a>, <br><a

View File

@ -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&nbsp;2278</i></a>. A
href="http://www.ietf.org/rfc/rfc2278.txt"><i>RFC&nbsp;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

View File

@ -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);
}
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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

View File

@ -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

View File

@ -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.
*

View File

@ -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

View File

@ -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.
*

View File

@ -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&nbsp;2278:&nbsp;IANA Charset Registration Procedures</i></a>
* except where historical names are returned for compatibility with
* previous versions of the Java platform.

View File

@ -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;

View File

@ -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: " +

View File

@ -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();

View File

@ -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()];

View File

@ -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;
/**

View File

@ -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;

View File

@ -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;

View File

@ -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.

View File

@ -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

View File

@ -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;
}

View File

@ -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;

View File

@ -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) {

View File

@ -66,7 +66,7 @@ public class CharToBytePCK extends CharToByteSJIS {
switch (ch) {
case '\u2015':
return (int)0x815C;
return 0x815C;
case '\u2014':
return 0;
default:

View File

@ -1,5 +1,2 @@
# Jules Rendering Engine module
sun.java2d.jules.JulesRenderingEngine
# Pisces Rendering Engine module
sun.java2d.pisces.PiscesRenderingEngine
sun.java2d.pisces.PiscesRenderingEngine

View File

@ -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) {

View File

@ -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() {

View File

@ -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 {

View File

@ -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);

View File

@ -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) {

View File

@ -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) {

View File

@ -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) {

View File

@ -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;

View File

@ -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);

View File

@ -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++;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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:

View File

@ -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) {

View File

@ -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) {

View File

@ -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");
}

View File

@ -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;

View File

@ -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
}

View File

@ -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.

View File

@ -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 =

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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");
}
}

View File

@ -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

View File

@ -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"
}
}

View File

@ -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

View File

@ -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);

View File

@ -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 +

View File

@ -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;
}
}
}
}

View File

@ -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]);

View File

@ -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