--- a/jdk/src/share/bin/emessages.h Thu Jul 08 08:23:32 2010 -0700
+++ b/jdk/src/share/bin/emessages.h Fri Jul 16 09:26:55 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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
@@ -44,7 +44,7 @@
#define JVM_ERROR1 "Error: Could not create the Java Virtual Machine.\n" GEN_ERROR
#define JVM_ERROR2 "Error: Could not detach main thread.\n" JNI_ERROR
-#define JVM_ERROR3 "Error: SPARC V8 processor detected; Server compiler requires V9 or better.\nUse Client compiler on V8 processors.\nCould not create the Java virtual machine."
+#define JVM_ERROR3 "Error: SPARC V8 processor detected; Required V9 processors or better.\nUse JDK5 client compiler for V8 processors.\n" JVM_ERROR1
#define JAR_ERROR1 "Error: Failed to load Main-Class manifest attribute from\n%s\n%s"
#define JAR_ERROR2 "Error: Unable to access jarfile %s"
@@ -69,7 +69,8 @@
#define CFG_ERROR5 "Error: Could not determine application home."
#define CFG_ERROR6 "Error: could not open `%s'"
#define CFG_ERROR7 "Error: no known VMs. (check for corrupt jvm.cfg file)"
-#define CFG_ERROR8 "Error: no `%s' JVM at `%s'."
+#define CFG_ERROR8 "Error: missing `%s' JVM at `%s'.\nPlease install or use the JRE or JDK that contains these missing components."
+#define CFG_ERROR9 "Error: could not determine JVM type."
#define SPC_ERROR1 "Error: Syntax error in version specification \"%s\""
--- a/jdk/src/share/bin/java.c Thu Jul 08 08:23:32 2010 -0700
+++ b/jdk/src/share/bin/java.c Fri Jul 16 09:26:55 2010 -0700
@@ -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
@@ -192,8 +192,8 @@
int ret;
InvocationFunctions ifn;
jlong start, end;
- char jrepath[MAXPATHLEN], jvmpath[MAXPATHLEN];
- char ** original_argv = argv;
+ char jvmpath[MAXPATHLEN];
+ char jrepath[MAXPATHLEN];
_fVersion = fullversion;
_dVersion = dotversion;
@@ -225,14 +225,17 @@
*/
SelectVersion(argc, argv, &main_class);
- /* copy original argv */
- JLI_TraceLauncher("Command line Args:\n");
- original_argv = (JLI_CopyArgs(argc, (const char**)argv));
+ if (JLI_IsTraceLauncher()) {
+ int i;
+ printf("Command line args:\n");
+ for (i = 0; i < argc ; i++) {
+ printf("argv[%d] = %s\n", i, argv[i]);
+ }
+ }
CreateExecutionEnvironment(&argc, &argv,
jrepath, sizeof(jrepath),
- jvmpath, sizeof(jvmpath),
- original_argv);
+ jvmpath, sizeof(jvmpath));
ifn.CreateJavaVM = 0;
ifn.GetDefaultJavaVMInitArgs = 0;
@@ -301,22 +304,43 @@
return ContinueInNewThread(&ifn, argc, argv, jarfile, classname, ret);
}
+/*
+ * Always detach the main thread so that it appears to have ended when
+ * the application's main method exits. This will invoke the
+ * uncaught exception handler machinery if main threw an
+ * exception. An uncaught exception handler cannot change the
+ * launcher's return code except by calling System.exit.
+ *
+ * Wait for all non-daemon threads to end, then destroy the VM.
+ * This will actually create a trivial new Java waiter thread
+ * named "DestroyJavaVM", but this will be seen as a different
+ * thread from the one that executed main, even though they are
+ * the same C thread. This allows mainThread.join() and
+ * mainThread.isAlive() to work as expected.
+ */
+#define LEAVE() \
+ if ((*vm)->DetachCurrentThread(vm) != 0) { \
+ JLI_ReportErrorMessage(JVM_ERROR2); \
+ ret = 1; \
+ } \
+ (*vm)->DestroyJavaVM(vm); \
+ return ret \
#define CHECK_EXCEPTION_NULL_LEAVE(e) \
if ((*env)->ExceptionOccurred(env)) { \
JLI_ReportExceptionDescription(env); \
- goto leave; \
+ LEAVE(); \
} \
if ((e) == NULL) { \
JLI_ReportErrorMessage(JNI_ERROR); \
- goto leave; \
+ LEAVE(); \
}
#define CHECK_EXCEPTION_LEAVE(rv) \
if ((*env)->ExceptionOccurred(env)) { \
JLI_ReportExceptionDescription(env); \
ret = (rv); \
- goto leave; \
+ LEAVE(); \
}
int JNICALL
@@ -349,8 +373,7 @@
PrintJavaVersion(env, showVersion);
CHECK_EXCEPTION_LEAVE(0);
if (printVersion) {
- ret = 0;
- goto leave;
+ LEAVE();
}
}
@@ -358,7 +381,7 @@
if (printXUsage || printUsage || (jarfile == 0 && classname == 0)) {
PrintUsage(env, printXUsage);
CHECK_EXCEPTION_LEAVE(1);
- goto leave;
+ LEAVE();
}
FreeKnownVMs(); /* after last possible PrintUsage() */
@@ -430,30 +453,7 @@
* System.exit) will be non-zero if main threw an exception.
*/
ret = (*env)->ExceptionOccurred(env) == NULL ? 0 : 1;
-
-leave:
- /*
- * Always detach the main thread so that it appears to have ended when
- * the application's main method exits. This will invoke the
- * uncaught exception handler machinery if main threw an
- * exception. An uncaught exception handler cannot change the
- * launcher's return code except by calling System.exit.
- */
- if ((*vm)->DetachCurrentThread(vm) != 0) {
- JLI_ReportErrorMessage(JVM_ERROR2);
- ret = 1;
- }
- /*
- * Wait for all non-daemon threads to end, then destroy the VM.
- * This will actually create a trivial new Java waiter thread
- * named "DestroyJavaVM", but this will be seen as a different
- * thread from the one that executed main, even though they are
- * the same C thread. This allows mainThread.join() and
- * mainThread.isAlive() to work as expected.
- */
- (*vm)->DestroyJavaVM(vm);
-
- return ret;
+ LEAVE();
}
/*
@@ -1076,15 +1076,17 @@
if (--argc >= 0) {
if (jarflag) {
*pjarfile = *argv++;
- *pclassname = 0;
+ *pclassname = NULL;
} else {
- *pjarfile = 0;
+ *pjarfile = NULL;
*pclassname = *argv++;
}
*pargc = argc;
*pargv = argv;
}
-
+ if (*pjarfile == NULL && *pclassname == NULL) {
+ *pret = 1;
+ }
return JNI_TRUE;
}
--- a/jdk/src/share/bin/java.h Thu Jul 08 08:23:32 2010 -0700
+++ b/jdk/src/share/bin/java.h Fri Jul 16 09:26:55 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 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
@@ -114,13 +114,19 @@
#define GetArch() GetArchPath(CURRENT_DATA_MODEL)
-void CreateExecutionEnvironment(int *_argc,
- char ***_argv,
- char jrepath[],
- jint so_jrepath,
- char jvmpath[],
- jint so_jvmpath,
- char **original_argv);
+/*
+ * Different platforms will implement this, here
+ * pargc is a pointer to the original argc,
+ * pargv is a pointer to the original argv,
+ * jrepath is an accessible path to the jre as determined by the call
+ * so_jrepath is the length of the buffer jrepath
+ * jvmpath is an accessible path to the jvm as determined by the call
+ * so_jvmpath is the length of the buffer jvmpath
+ */
+void CreateExecutionEnvironment(int *argc, char ***argv,
+ char *jrepath, jint so_jrepath,
+ char *jvmpath, jint so_jvmpath);
+
/* Reports an error message to stderr or a window as appropriate. */
void JLI_ReportErrorMessage(const char * message, ...);
--- a/jdk/src/share/bin/jli_util.c Thu Jul 08 08:23:32 2010 -0700
+++ b/jdk/src/share/bin/jli_util.c Fri Jul 16 09:26:55 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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
@@ -85,23 +85,6 @@
}
/*
- * Makes a copy of arguments
- */
-char**
-JLI_CopyArgs(int argc, const char **iargv)
-{
- int i;
- char** oargv = (char**)JLI_MemAlloc(sizeof(char*)*(argc+1));
- for (i = 0 ; i < argc+1 ; i++) {
- oargv[i] = (iargv[i] == NULL) ? NULL : JLI_StringDup(iargv[i]);
- if (iargv[i] != NULL && JLI_IsTraceLauncher() == JNI_TRUE) {
- printf("\targv[%d] = '%s'\n",i,iargv[i]);
- }
- }
- return oargv;
-}
-
-/*
* debug helpers we use
*/
static jboolean _launcher_debug = JNI_FALSE;
--- a/jdk/src/share/bin/jli_util.h Thu Jul 08 08:23:32 2010 -0700
+++ b/jdk/src/share/bin/jli_util.h Fri Jul 16 09:26:55 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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
@@ -33,7 +33,6 @@
void *JLI_MemRealloc(void *ptr, size_t size);
char *JLI_StringDup(const char *s1);
void JLI_MemFree(void *ptr);
-char **JLI_CopyArgs(int argc, const char **iargv);
int JLI_StrCCmp(const char *s1, const char* s2);
@@ -56,10 +55,12 @@
#include <io.h>
#define JLI_StrCaseCmp(p1, p2) stricmp((p1), (p2))
#define JLI_StrNCaseCmp(p1, p2, p3) strnicmp((p1), (p2), (p3))
+#define JLI_Snprintf _snprintf
#else
#include <unistd.h>
#define JLI_StrCaseCmp(p1, p2) strcasecmp((p1), (p2))
#define JLI_StrNCaseCmp(p1, p2, p3) strncasecmp((p1), (p2), (p3))
+#define JLI_Snprintf snprintf
#endif /* _WIN32 */
/*
--- a/jdk/src/share/classes/java/lang/AutoCloseable.java Thu Jul 08 08:23:32 2010 -0700
+++ b/jdk/src/share/classes/java/lang/AutoCloseable.java Fri Jul 16 09:26:55 2010 -0700
@@ -41,6 +41,13 @@
* be declared to throw more specific exceptions (or no exception
* at all, if the close cannot fail).
*
+ * <p>Note that unlike the {@link java.io.Closeable#close close}
+ * method of {@link java.io.Closeable}, this {@code close} method
+ * is <em>not</em> required to be idempotent. In other words,
+ * calling this {@code close} method more than once may have some
+ * visible side effect, unlike {@code Closeable.close} which is
+ * required to have no effect if called more than once.
+ *
* @throws Exception if this resource cannot be closed
*/
void close() throws Exception;
--- a/jdk/src/share/classes/java/lang/System.java Thu Jul 08 08:23:32 2010 -0700
+++ b/jdk/src/share/classes/java/lang/System.java Fri Jul 16 09:26:55 2010 -0700
@@ -69,7 +69,7 @@
* corresponds to keyboard input or another input source specified by
* the host environment or user.
*/
- public final static InputStream in = nullInputStream();
+ public final static InputStream in = null;
/**
* The "standard" output stream. This stream is already
@@ -96,7 +96,7 @@
* @see java.io.PrintStream#println(java.lang.Object)
* @see java.io.PrintStream#println(java.lang.String)
*/
- public final static PrintStream out = nullPrintStream();
+ public final static PrintStream out = null;
/**
* The "standard" error output stream. This stream is already
@@ -110,7 +110,7 @@
* variable <code>out</code>, has been redirected to a file or other
* destination that is typically not continuously monitored.
*/
- public final static PrintStream err = nullPrintStream();
+ public final static PrintStream err = null;
/* The security manager for the system.
*/
@@ -1093,26 +1093,6 @@
public static native String mapLibraryName(String libname);
/**
- * The following two methods exist because in, out, and err must be
- * initialized to null. The compiler, however, cannot be permitted to
- * inline access to them, since they are later set to more sensible values
- * by initializeSystemClass().
- */
- private static InputStream nullInputStream() throws NullPointerException {
- if (currentTimeMillis() > 0) {
- return null;
- }
- throw new NullPointerException();
- }
-
- private static PrintStream nullPrintStream() throws NullPointerException {
- if (currentTimeMillis() > 0) {
- return null;
- }
- throw new NullPointerException();
- }
-
- /**
* Initialize the system class. Called after thread initialization.
*/
private static void initializeSystemClass() {
--- a/jdk/src/share/classes/java/lang/Throwable.java Thu Jul 08 08:23:32 2010 -0700
+++ b/jdk/src/share/classes/java/lang/Throwable.java Fri Jul 16 09:26:55 2010 -0700
@@ -28,12 +28,12 @@
import java.util.*;
/**
- * The <code>Throwable</code> class is the superclass of all errors and
+ * The {@code Throwable} class is the superclass of all errors and
* exceptions in the Java language. Only objects that are instances of this
* class (or one of its subclasses) are thrown by the Java Virtual Machine or
- * can be thrown by the Java <code>throw</code> statement. Similarly, only
+ * can be thrown by the Java {@code throw} statement. Similarly, only
* this class or one of its subclasses can be the argument type in a
- * <code>catch</code> clause.
+ * {@code catch} clause.
*
* For the purposes of compile-time checking of exceptions, {@code
* Throwable} and any subclass of {@code Throwable} that is not also a
@@ -73,11 +73,11 @@
* permit the method to throw the cause directly. For example, suppose
* a persistent collection conforms to the {@link java.util.Collection
* Collection} interface, and that its persistence is implemented atop
- * <tt>java.io</tt>. Suppose the internals of the <tt>add</tt> method
+ * {@code java.io}. Suppose the internals of the {@code add} method
* can throw an {@link java.io.IOException IOException}. The implementation
- * can communicate the details of the <tt>IOException</tt> to its caller
- * while conforming to the <tt>Collection</tt> interface by wrapping the
- * <tt>IOException</tt> in an appropriate unchecked exception. (The
+ * can communicate the details of the {@code IOException} to its caller
+ * while conforming to the {@code Collection} interface by wrapping the
+ * {@code IOException} in an appropriate unchecked exception. (The
* specification for the persistent collection should indicate that it is
* capable of throwing such exceptions.)
*
@@ -86,7 +86,7 @@
* {@link #initCause(Throwable)} method. New throwable classes that
* wish to allow causes to be associated with them should provide constructors
* that take a cause and delegate (perhaps indirectly) to one of the
- * <tt>Throwable</tt> constructors that takes a cause. For example:
+ * {@code Throwable} constructors that takes a cause. For example:
* <pre>
* try {
* lowLevelOp();
@@ -94,10 +94,10 @@
* throw new HighLevelException(le); // Chaining-aware constructor
* }
* </pre>
- * Because the <tt>initCause</tt> method is public, it allows a cause to be
+ * Because the {@code initCause} method is public, it allows a cause to be
* associated with any throwable, even a "legacy throwable" whose
* implementation predates the addition of the exception chaining mechanism to
- * <tt>Throwable</tt>. For example:
+ * {@code Throwable}. For example:
* <pre>
* try {
* lowLevelOp();
@@ -121,28 +121,28 @@
* use the standard exception chaining mechanism, while continuing to
* implement their "legacy" chaining mechanisms for compatibility.
*
- * <p>Further, as of release 1.4, many general purpose <tt>Throwable</tt>
+ * <p>Further, as of release 1.4, many general purpose {@code Throwable}
* classes (for example {@link Exception}, {@link RuntimeException},
* {@link Error}) have been retrofitted with constructors that take
* a cause. This was not strictly necessary, due to the existence of the
- * <tt>initCause</tt> method, but it is more convenient and expressive to
+ * {@code initCause} method, but it is more convenient and expressive to
* delegate to a constructor that takes a cause.
*
- * <p>By convention, class <code>Throwable</code> and its subclasses have two
+ * <p>By convention, class {@code Throwable} and its subclasses have two
* constructors, one that takes no arguments and one that takes a
- * <code>String</code> argument that can be used to produce a detail message.
+ * {@code String} argument that can be used to produce a detail message.
* Further, those subclasses that might likely have a cause associated with
* them should have two more constructors, one that takes a
- * <code>Throwable</code> (the cause), and one that takes a
- * <code>String</code> (the detail message) and a <code>Throwable</code> (the
+ * {@code Throwable} (the cause), and one that takes a
+ * {@code String} (the detail message) and a {@code Throwable} (the
* cause).
*
* <p>Also introduced in release 1.4 is the {@link #getStackTrace()} method,
* which allows programmatic access to the stack trace information that was
* previously available only in text form, via the various forms of the
* {@link #printStackTrace()} method. This information has been added to the
- * <i>serialized representation</i> of this class so <tt>getStackTrace</tt>
- * and <tt>printStackTrace</tt> will operate properly on a throwable that
+ * <i>serialized representation</i> of this class so {@code getStackTrace}
+ * and {@code printStackTrace} will operate properly on a throwable that
* was obtained by deserialization.
*
* @author unascribed
@@ -162,7 +162,7 @@
/**
* Specific details about the Throwable. For example, for
- * <tt>FileNotFoundException</tt>, this contains the name of
+ * {@code FileNotFoundException}, this contains the name of
* the file that could not be found.
*
* @serial
@@ -212,7 +212,7 @@
private static final String SUPPRESSED_CAPTION = "Suppressed: ";
/**
- * Constructs a new throwable with <code>null</code> as its detail message.
+ * Constructs a new throwable with {@code null} as its detail message.
* The cause is not initialized, and may subsequently be initialized by a
* call to {@link #initCause}.
*
@@ -242,7 +242,7 @@
/**
* Constructs a new throwable with the specified detail message and
* cause. <p>Note that the detail message associated with
- * <code>cause</code> is <i>not</i> automatically incorporated in
+ * {@code cause} is <i>not</i> automatically incorporated in
* this throwable's detail message.
*
* <p>The {@link #fillInStackTrace()} method is called to initialize
@@ -251,7 +251,7 @@
* @param message the detail message (which is saved for later retrieval
* by the {@link #getMessage()} method).
* @param cause the cause (which is saved for later retrieval by the
- * {@link #getCause()} method). (A <tt>null</tt> value is
+ * {@link #getCause()} method). (A {@code null} value is
* permitted, and indicates that the cause is nonexistent or
* unknown.)
* @since 1.4
@@ -264,8 +264,8 @@
/**
* Constructs a new throwable with the specified cause and a detail
- * message of <tt>(cause==null ? null : cause.toString())</tt> (which
- * typically contains the class and detail message of <tt>cause</tt>).
+ * message of {@code (cause==null ? null : cause.toString())} (which
+ * typically contains the class and detail message of {@code cause}).
* This constructor is useful for throwables that are little more than
* wrappers for other throwables (for example, {@link
* java.security.PrivilegedActionException}).
@@ -274,7 +274,7 @@
* the stack trace data in the newly created throwable.
*
* @param cause the cause (which is saved for later retrieval by the
- * {@link #getCause()} method). (A <tt>null</tt> value is
+ * {@link #getCause()} method). (A {@code null} value is
* permitted, and indicates that the cause is nonexistent or
* unknown.)
* @since 1.4
@@ -288,8 +288,8 @@
/**
* Returns the detail message string of this throwable.
*
- * @return the detail message string of this <tt>Throwable</tt> instance
- * (which may be <tt>null</tt>).
+ * @return the detail message string of this {@code Throwable} instance
+ * (which may be {@code null}).
*/
public String getMessage() {
return detailMessage;
@@ -300,7 +300,7 @@
* Subclasses may override this method in order to produce a
* locale-specific message. For subclasses that do not override this
* method, the default implementation returns the same result as
- * <code>getMessage()</code>.
+ * {@code getMessage()}.
*
* @return The localized description of this throwable.
* @since JDK1.1
@@ -310,22 +310,22 @@
}
/**
- * Returns the cause of this throwable or <code>null</code> if the
+ * Returns the cause of this throwable or {@code null} if the
* cause is nonexistent or unknown. (The cause is the throwable that
* caused this throwable to get thrown.)
*
* <p>This implementation returns the cause that was supplied via one of
- * the constructors requiring a <tt>Throwable</tt>, or that was set after
+ * the constructors requiring a {@code Throwable}, or that was set after
* creation with the {@link #initCause(Throwable)} method. While it is
* typically unnecessary to override this method, a subclass can override
* it to return a cause set by some other means. This is appropriate for
* a "legacy chained throwable" that predates the addition of chained
- * exceptions to <tt>Throwable</tt>. Note that it is <i>not</i>
- * necessary to override any of the <tt>PrintStackTrace</tt> methods,
- * all of which invoke the <tt>getCause</tt> method to determine the
+ * exceptions to {@code Throwable}. Note that it is <i>not</i>
+ * necessary to override any of the {@code PrintStackTrace} methods,
+ * all of which invoke the {@code getCause} method to determine the
* cause of a throwable.
*
- * @return the cause of this throwable or <code>null</code> if the
+ * @return the cause of this throwable or {@code null} if the
* cause is nonexistent or unknown.
* @since 1.4
*/
@@ -345,11 +345,11 @@
* even once.
*
* @param cause the cause (which is saved for later retrieval by the
- * {@link #getCause()} method). (A <tt>null</tt> value is
+ * {@link #getCause()} method). (A {@code null} value is
* permitted, and indicates that the cause is nonexistent or
* unknown.)
- * @return a reference to this <code>Throwable</code> instance.
- * @throws IllegalArgumentException if <code>cause</code> is this
+ * @return a reference to this {@code Throwable} instance.
+ * @throws IllegalArgumentException if {@code cause} is this
* throwable. (A throwable cannot be its own cause.)
* @throws IllegalStateException if this throwable was
* created with {@link #Throwable(Throwable)} or
@@ -375,7 +375,7 @@
* <li> the result of invoking this object's {@link #getLocalizedMessage}
* method
* </ul>
- * If <tt>getLocalizedMessage</tt> returns <tt>null</tt>, then just
+ * If {@code getLocalizedMessage} returns {@code null}, then just
* the class name is returned.
*
* @return a string representation of this throwable.
@@ -389,8 +389,8 @@
/**
* Prints this throwable and its backtrace to the
* standard error stream. This method prints a stack trace for this
- * <code>Throwable</code> object on the error output stream that is
- * the value of the field <code>System.err</code>. The first line of
+ * {@code Throwable} object on the error output stream that is
+ * the value of the field {@code System.err}. The first line of
* output contains the result of the {@link #toString()} method for
* this object. Remaining lines represent data previously recorded by
* the method {@link #fillInStackTrace()}. The format of this
@@ -435,7 +435,7 @@
* at Junk.c(Junk.java:21)
* ... 3 more
* </pre>
- * Note the presence of lines containing the characters <tt>"..."</tt>.
+ * Note the presence of lines containing the characters {@code "..."}.
* These lines indicate that the remainder of the stack trace for this
* exception matches the indicated number of frames from the bottom of the
* stack trace of the exception that was caused by this exception (the
@@ -542,14 +542,17 @@
/**
* Prints this throwable and its backtrace to the specified print stream.
*
- * @param s <code>PrintStream</code> to use for output
+ * @param s {@code PrintStream} to use for output
*/
public void printStackTrace(PrintStream s) {
printStackTrace(new WrappedPrintStream(s));
}
private void printStackTrace(PrintStreamOrWriter s) {
- Set<Throwable> dejaVu = new HashSet<Throwable>();
+ // Guard against malicious overrides of Throwable.equals by
+ // using a Set with identity equality semantics.
+ Set<Throwable> dejaVu =
+ Collections.newSetFromMap(new IdentityHashMap<Throwable, Boolean>());
dejaVu.add(this);
synchronized (s.lock()) {
@@ -616,7 +619,7 @@
* Prints this throwable and its backtrace to the specified
* print writer.
*
- * @param s <code>PrintWriter</code> to use for output
+ * @param s {@code PrintWriter} to use for output
* @since JDK1.1
*/
public void printStackTrace(PrintWriter s) {
@@ -669,10 +672,10 @@
/**
* Fills in the execution stack trace. This method records within this
- * <code>Throwable</code> object information about the current state of
+ * {@code Throwable} object information about the current state of
* the stack frames for the current thread.
*
- * @return a reference to this <code>Throwable</code> instance.
+ * @return a reference to this {@code Throwable} instance.
* @see java.lang.Throwable#printStackTrace()
*/
public synchronized native Throwable fillInStackTrace();
@@ -694,7 +697,7 @@
* this throwable is permitted to return a zero-length array from this
* method. Generally speaking, the array returned by this method will
* contain one element for every frame that would be printed by
- * <tt>printStackTrace</tt>.
+ * {@code printStackTrace}.
*
* @return an array of stack trace elements representing the stack trace
* pertaining to this throwable.
@@ -727,14 +730,14 @@
* read from a serialization stream.
*
* @param stackTrace the stack trace elements to be associated with
- * this <code>Throwable</code>. The specified array is copied by this
+ * this {@code Throwable}. The specified array is copied by this
* call; changes in the specified array after the method invocation
- * returns will have no affect on this <code>Throwable</code>'s stack
+ * returns will have no affect on this {@code Throwable}'s stack
* trace.
*
- * @throws NullPointerException if <code>stackTrace</code> is
- * <code>null</code>, or if any of the elements of
- * <code>stackTrace</code> are <code>null</code>
+ * @throws NullPointerException if {@code stackTrace} is
+ * {@code null}, or if any of the elements of
+ * {@code stackTrace} are {@code null}
*
* @since 1.4
*/
@@ -761,8 +764,8 @@
* package-protection for use by SharedSecrets.
*
* @param index index of the element to return.
- * @throws IndexOutOfBoundsException if <tt>index < 0 ||
- * index >= getStackTraceDepth() </tt>
+ * @throws IndexOutOfBoundsException if {@code index < 0 ||
+ * index >= getStackTraceDepth() }
*/
native StackTraceElement getStackTraceElement(int index);
@@ -794,14 +797,27 @@
* were suppressed, typically by the automatic resource management
* statement, in order to deliver this exception.
*
+ * <p>Note that when one exception {@linkplain
+ * #initCause(Throwable) causes} another exception, the first
+ * exception is usually caught and then the second exception is
+ * thrown in response. In contrast, when one exception suppresses
+ * another, two exceptions are thrown in sibling code blocks, such
+ * as in a {@code try} block and in its {@code finally} block, and
+ * control flow can only continue with one exception so the second
+ * is recorded as a suppressed exception of the first.
+ *
* @param exception the exception to be added to the list of
* suppressed exceptions
* @throws NullPointerException if {@code exception} is null
+ * @throws IllegalArgumentException if {@code exception} is this
+ * throwable; a throwable cannot suppress itself.
* @since 1.7
*/
public synchronized void addSuppressedException(Throwable exception) {
if (exception == null)
throw new NullPointerException(NULL_CAUSE_MESSAGE);
+ if (exception == this)
+ throw new IllegalArgumentException("Self-suppression not permitted");
if (suppressedExceptions.size() == 0)
suppressedExceptions = new ArrayList<Throwable>();
--- a/jdk/src/share/classes/java/net/Inet6Address.java Thu Jul 08 08:23:32 2010 -0700
+++ b/jdk/src/share/classes/java/net/Inet6Address.java Fri Jul 16 09:26:55 2010 -0700
@@ -427,8 +427,9 @@
try {
scope_id = deriveNumericScope (scope_ifname);
} catch (UnknownHostException e) {
- // should not happen
- assert false;
+ // typically should not happen, but it may be that
+ // the machine being used for deserialization has
+ // the same interface name but without IPv6 configured.
}
}
} catch (SocketException e) {}
--- a/jdk/src/share/classes/sun/net/httpserver/ExchangeImpl.java Thu Jul 08 08:23:32 2010 -0700
+++ b/jdk/src/share/classes/sun/net/httpserver/ExchangeImpl.java Fri Jul 16 09:26:55 2010 -0700
@@ -52,14 +52,16 @@
boolean http10 = false;
/* for formatting the Date: header */
- static TimeZone tz;
- static DateFormat df;
- static {
- String pattern = "EEE, dd MMM yyyy HH:mm:ss zzz";
- tz = TimeZone.getTimeZone ("GMT");
- df = new SimpleDateFormat (pattern, Locale.US);
- df.setTimeZone (tz);
- }
+ private static final String pattern = "EEE, dd MMM yyyy HH:mm:ss zzz";
+ private static final TimeZone gmtTZ = TimeZone.getTimeZone("GMT");
+ private static final ThreadLocal<DateFormat> dateFormat =
+ new ThreadLocal<DateFormat>() {
+ @Override protected DateFormat initialValue() {
+ DateFormat df = new SimpleDateFormat(pattern, Locale.US);
+ df.setTimeZone(gmtTZ);
+ return df;
+ }
+ };
private static final String HEAD = "HEAD";
@@ -206,7 +208,7 @@
PlaceholderOutputStream o = getPlaceholderResponseBody();
tmpout.write (bytes(statusLine, 0), 0, statusLine.length());
boolean noContentToSend = false; // assume there is content
- rspHdrs.set ("Date", df.format (new Date()));
+ rspHdrs.set ("Date", dateFormat.get().format (new Date()));
/* check for response type that is not allowed to send a body */
--- a/jdk/src/share/classes/sun/security/util/DerOutputStream.java Thu Jul 08 08:23:32 2010 -0700
+++ b/jdk/src/share/classes/sun/security/util/DerOutputStream.java Fri Jul 16 09:26:55 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 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
@@ -25,17 +25,16 @@
package sun.security.util;
-import java.io.FilterOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
-import java.util.Vector;
import java.util.Comparator;
import java.util.Arrays;
import java.math.BigInteger;
+import java.util.Locale;
/**
@@ -501,7 +500,7 @@
pattern = "yyyyMMddHHmmss'Z'";
}
- SimpleDateFormat sdf = new SimpleDateFormat(pattern);
+ SimpleDateFormat sdf = new SimpleDateFormat(pattern, Locale.US);
sdf.setTimeZone(tz);
byte[] time = (sdf.format(d)).getBytes("ISO-8859-1");
--- a/jdk/src/solaris/bin/java_md.c Thu Jul 08 08:23:32 2010 -0700
+++ b/jdk/src/solaris/bin/java_md.c Fri Jul 16 09:26:55 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 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
@@ -183,13 +183,9 @@
}
void
-CreateExecutionEnvironment(int *_argcp,
- char ***_argvp,
- char jrepath[],
- jint so_jrepath,
- char jvmpath[],
- jint so_jvmpath,
- char **original_argv) {
+CreateExecutionEnvironment(int *pargc, char ***pargv,
+ char jrepath[], jint so_jrepath,
+ char jvmpath[], jint so_jvmpath) {
/*
* First, determine if we are running the desired data model. If we
* are running the desired data model, all the error messages
@@ -200,18 +196,17 @@
* os/processor combination has dual mode capabilities.
*/
- int original_argc = *_argcp;
jboolean jvmpathExists;
/* Compute/set the name of the executable */
- SetExecname(*_argvp);
+ SetExecname(*pargv);
/* Check data model flags, and exec process, if needed */
{
char *arch = (char *)GetArch(); /* like sparc or sparcv9 */
char * jvmtype = NULL;
- int argc = *_argcp;
- char **argv = original_argv;
+ int argc = *pargc;
+ char **argv = *pargv;
int running = CURRENT_DATA_MODEL;
@@ -233,7 +228,7 @@
{ /* open new scope to declare local variables */
int i;
- newargv = (char **)JLI_MemAlloc((argc+1) * sizeof(*newargv));
+ newargv = (char **)JLI_MemAlloc((argc+1) * sizeof(char*));
newargv[newargc++] = argv[0];
/* scan for data model arguments and remove from argument list;
@@ -293,7 +288,11 @@
}
jvmpath[0] = '\0';
- jvmtype = CheckJvmType(_argcp, _argvp, JNI_FALSE);
+ jvmtype = CheckJvmType(pargc, pargv, JNI_FALSE);
+ if (JLI_StrCmp(jvmtype, "ERROR") == 0) {
+ JLI_ReportErrorMessage(CFG_ERROR9);
+ exit(4);
+ }
if (!GetJVMPath(jrepath, jvmtype, jvmpath, so_jvmpath, arch )) {
JLI_ReportErrorMessage(CFG_ERROR8, jvmtype, jvmpath);
@@ -309,7 +308,9 @@
if (running != wanted) {
/* Find out where the JRE is that we will be using. */
if (!GetJREPath(jrepath, so_jrepath, GetArchPath(wanted), JNI_TRUE)) {
- goto EndDataModelSpeculate;
+ /* give up and let other code report error message */
+ JLI_ReportErrorMessage(JRE_ERROR2, wanted);
+ exit(1);
}
/*
@@ -317,16 +318,21 @@
* selection options.
*/
if (ReadKnownVMs(jrepath, GetArchPath(wanted), JNI_TRUE) < 1) {
- goto EndDataModelSpeculate;
+ /* give up and let other code report error message */
+ JLI_ReportErrorMessage(JRE_ERROR2, wanted);
+ exit(1);
}
jvmpath[0] = '\0';
- jvmtype = CheckJvmType(_argcp, _argvp, JNI_TRUE);
+ jvmtype = CheckJvmType(pargc, pargv, JNI_TRUE);
+ if (JLI_StrCmp(jvmtype, "ERROR") == 0) {
+ JLI_ReportErrorMessage(CFG_ERROR9);
+ exit(4);
+ }
+
/* exec child can do error checking on the existence of the path */
jvmpathExists = GetJVMPath(jrepath, jvmtype, jvmpath, so_jvmpath, GetArchPath(wanted));
}
- EndDataModelSpeculate: /* give up and let other code report error message */
- ;
#else
JLI_ReportErrorMessage(JRE_ERROR2, wanted);
exit(1);
@@ -398,9 +404,9 @@
struct stat s;
if (JLI_StrChr(jvmtype, '/')) {
- sprintf(jvmpath, "%s/" JVM_DLL, jvmtype);
+ JLI_Snprintf(jvmpath, jvmpathsize, "%s/" JVM_DLL, jvmtype);
} else {
- sprintf(jvmpath, "%s/lib/%s/%s/" JVM_DLL, jrepath, arch, jvmtype);
+ JLI_Snprintf(jvmpath, jvmpathsize, "%s/lib/%s/%s/" JVM_DLL, jrepath, arch, jvmtype);
}
JLI_TraceLauncher("Does `%s' exist ... ", jvmpath);
@@ -424,26 +430,24 @@
if (GetApplicationHome(path, pathsize)) {
/* Is JRE co-located with the application? */
- sprintf(libjava, "%s/lib/%s/" JAVA_DLL, path, arch);
+ JLI_Snprintf(libjava, sizeof(libjava), "%s/lib/%s/" JAVA_DLL, path, arch);
if (access(libjava, F_OK) == 0) {
- goto found;
+ JLI_TraceLauncher("JRE path is %s\n", path);
+ return JNI_TRUE;
}
/* Does the app ship a private JRE in <apphome>/jre directory? */
- sprintf(libjava, "%s/jre/lib/%s/" JAVA_DLL, path, arch);
+ JLI_Snprintf(libjava, sizeof(libjava), "%s/jre/lib/%s/" JAVA_DLL, path, arch);
if (access(libjava, F_OK) == 0) {
JLI_StrCat(path, "/jre");
- goto found;
+ JLI_TraceLauncher("JRE path is %s\n", path);
+ return JNI_TRUE;
}
}
if (!speculative)
JLI_ReportErrorMessage(JRE_ERROR8 JAVA_DLL);
return JNI_FALSE;
-
- found:
- JLI_TraceLauncher("JRE path is %s\n", path);
- return JNI_TRUE;
}
jboolean
@@ -463,14 +467,18 @@
int location;
fp = fopen(jvmpath, "r");
- if(fp == NULL)
- goto error;
+ if (fp == NULL) {
+ JLI_ReportErrorMessage(DLL_ERROR2, jvmpath, dlerror());
+ return JNI_FALSE;
+ }
/* read in elf header */
count = fread((void*)(&elf_head), sizeof(Elf32_Ehdr), 1, fp);
fclose(fp);
- if(count < 1)
- goto error;
+ if (count < 1) {
+ JLI_ReportErrorMessage(DLL_ERROR2, jvmpath, dlerror());
+ return JNI_FALSE;
+ }
/*
* Check for running a server vm (compiled with -xarch=v8plus)
@@ -481,41 +489,42 @@
* does not have to be checked for in binaries with an LP64 data
* model.
*/
- if(elf_head.e_machine == EM_SPARC32PLUS) {
+ if (elf_head.e_machine == EM_SPARC32PLUS) {
char buf[257]; /* recommended buffer size from sysinfo man
page */
long length;
char* location;
length = sysinfo(SI_ISALIST, buf, 257);
- if(length > 0) {
- location = JLI_StrStr(buf, "sparcv8plus ");
- if(location == NULL) {
+ if (length > 0) {
+ location = JLI_StrStr(buf, "sparcv8plus ");
+ if (location == NULL) {
JLI_ReportErrorMessage(JVM_ERROR3);
return JNI_FALSE;
}
}
}
#endif
- JLI_ReportErrorMessage(DLL_ERROR1, __LINE__);
- goto error;
+ JLI_ReportErrorMessage(DLL_ERROR1, __LINE__);
+ JLI_ReportErrorMessage(DLL_ERROR2, jvmpath, dlerror());
+ return JNI_FALSE;
}
ifn->CreateJavaVM = (CreateJavaVM_t)
- dlsym(libjvm, "JNI_CreateJavaVM");
- if (ifn->CreateJavaVM == NULL)
- goto error;
+ dlsym(libjvm, "JNI_CreateJavaVM");
+ if (ifn->CreateJavaVM == NULL) {
+ JLI_ReportErrorMessage(DLL_ERROR2, jvmpath, dlerror());
+ return JNI_FALSE;
+ }
ifn->GetDefaultJavaVMInitArgs = (GetDefaultJavaVMInitArgs_t)
dlsym(libjvm, "JNI_GetDefaultJavaVMInitArgs");
- if (ifn->GetDefaultJavaVMInitArgs == NULL)
- goto error;
+ if (ifn->GetDefaultJavaVMInitArgs == NULL) {
+ JLI_ReportErrorMessage(DLL_ERROR2, jvmpath, dlerror());
+ return JNI_FALSE;
+ }
return JNI_TRUE;
-
-error:
- JLI_ReportErrorMessage(DLL_ERROR2, jvmpath, dlerror());
- return JNI_FALSE;
}
/*
@@ -575,7 +584,7 @@
char name[PATH_MAX + 2], *real;
if ((JLI_StrLen(indir) + JLI_StrLen(cmd) + 1) > PATH_MAX) return 0;
- sprintf(name, "%s%c%s", indir, FILE_SEPARATOR, cmd);
+ JLI_Snprintf(name, sizeof(name), "%s%c%s", indir, FILE_SEPARATOR, cmd);
if (!ProgramExists(name)) return 0;
real = JLI_MemAlloc(PATH_MAX + 2);
if (!realpath(name, real))
@@ -622,7 +631,7 @@
else {
/* relative path element */
char dir[2*PATH_MAX];
- sprintf(dir, "%s%c%s", getcwd(cwdbuf, sizeof(cwdbuf)),
+ JLI_Snprintf(dir, sizeof(dir), "%s%c%s", getcwd(cwdbuf, sizeof(cwdbuf)),
FILE_SEPARATOR, s);
result = Resolve(dir, program);
}
@@ -746,7 +755,7 @@
if (JLI_StrLen(path) + JLI_StrLen(dir) + 11 > PATH_MAX)
return (0); /* Silently reject "impossibly" long paths */
- sprintf(buffer, "%s/%s/bin/java", path, dir);
+ JLI_Snprintf(buffer, sizeof(buffer), "%s/%s/bin/java", path, dir);
return ((access(buffer, X_OK) == 0) ? 1 : 0);
}
--- a/jdk/src/solaris/native/java/net/NetworkInterface.c Thu Jul 08 08:23:32 2010 -0700
+++ b/jdk/src/solaris/native/java/net/NetworkInterface.c Fri Jul 16 09:26:55 2010 -0700
@@ -129,7 +129,7 @@
static struct sockaddr *getBroadcast(JNIEnv *env, int sock, const char *name, struct sockaddr *brdcast_store);
static short getSubnet(JNIEnv *env, int sock, const char *ifname);
-static int getIndex(JNIEnv *env, int sock, const char *ifname);
+static int getIndex(int sock, const char *ifname);
static int getFlags(JNIEnv *env, int sock, const char *ifname);
static int getMacAddress(JNIEnv *env, int sock, const char* ifname, const struct in_addr* addr, unsigned char *buf);
@@ -753,19 +753,27 @@
* If IPv6 is available then enumerate IPv6 addresses.
*/
#ifdef AF_INET6
- sock = openSocket(env, AF_INET6);
- if (sock < 0 && (*env)->ExceptionOccurred(env)) {
- freeif(ifs);
- return NULL;
- }
+
+ /* User can disable ipv6 expicitly by -Djava.net.preferIPv4Stack=true,
+ * so we have to call ipv6_available()
+ */
+ if (ipv6_available()) {
- ifs = enumIPv6Interfaces(env, sock, ifs);
- close(sock);
+ sock = openSocket(env, AF_INET6);
+ if (sock < 0 && (*env)->ExceptionOccurred(env)) {
+ freeif(ifs);
+ return NULL;
+ }
- if ((*env)->ExceptionOccurred(env)) {
- freeif(ifs);
- return NULL;
- }
+ ifs = enumIPv6Interfaces(env, sock, ifs);
+ close(sock);
+
+ if ((*env)->ExceptionOccurred(env)) {
+ freeif(ifs);
+ return NULL;
+ }
+
+ }
#endif
return ifs;
@@ -911,7 +919,7 @@
CHECKED_MALLOC3(currif, netif *, sizeof(netif)+IFNAMSIZ );
currif->name = (char *) currif+sizeof(netif);
strcpy(currif->name, name);
- currif->index = getIndex(env,sock,name);
+ currif->index = getIndex(sock, name);
currif->addr = NULL;
currif->childs = NULL;
currif->virtual = isVirtual;
@@ -946,7 +954,7 @@
CHECKED_MALLOC3(currif, netif *, sizeof(netif)+ IFNAMSIZ );
currif->name = (char *) currif + sizeof(netif);
strcpy(currif->name, vname);
- currif->index = getIndex(env,sock,vname);
+ currif->index = getIndex(sock, vname);
currif->addr = NULL;
/* Need to duplicate the addr entry? */
currif->virtual = 1;
@@ -1133,7 +1141,7 @@
#endif
-static int getIndex(JNIEnv *env, int sock, const char *name){
+static int getIndex(int sock, const char *name){
/*
* Try to get the interface index
* (Not supported on Solaris 2.6 or 7)
@@ -1390,6 +1398,13 @@
continue;
}
+#ifdef AF_INET6
+ if (ifr->lifr_addr.ss_family == AF_INET6) {
+ struct sockaddr_in6 *s6= (struct sockaddr_in6 *)&(ifr->lifr_addr);
+ s6->sin6_scope_id = getIndex(sock, ifr->lifr_name);
+ }
+#endif
+
/* add to the list */
ifs = addif(env, sock,ifr->lifr_name, ifs, (struct sockaddr *)&(ifr->lifr_addr),family, (short) ifr->lifr_addrlen);
@@ -1407,7 +1422,7 @@
return ifs;
}
-static int getIndex(JNIEnv *env, int sock, const char *name){
+static int getIndex(int sock, const char *name){
/*
* Try to get the interface index
* (Not supported on Solaris 2.6 or 7)
--- a/jdk/src/windows/bin/java_md.c Thu Jul 08 08:23:32 2010 -0700
+++ b/jdk/src/windows/bin/java_md.c Fri Jul 16 09:26:55 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2008, 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
@@ -80,26 +80,22 @@
*
*/
void
-CreateExecutionEnvironment(int *_argc,
- char ***_argv,
- char jrepath[],
- jint so_jrepath,
- char jvmpath[],
- jint so_jvmpath,
- char **original_argv) {
+CreateExecutionEnvironment(int *pargc, char ***pargv,
+ char *jrepath, jint so_jrepath,
+ char *jvmpath, jint so_jvmpath) {
char * jvmtype;
int i = 0;
- char** pargv = *_argv;
int running = CURRENT_DATA_MODEL;
int wanted = running;
- for (i = 0; i < *_argc ; i++) {
- if (JLI_StrCmp(pargv[i], "-J-d64") == 0 || JLI_StrCmp(pargv[i], "-d64") == 0) {
+ char** argv = *pargv;
+ for (i = 0; i < *pargc ; i++) {
+ if (JLI_StrCmp(argv[i], "-J-d64") == 0 || JLI_StrCmp(argv[i], "-d64") == 0) {
wanted = 64;
continue;
}
- if (JLI_StrCmp(pargv[i], "-J-d32") == 0 || JLI_StrCmp(pargv[i], "-d32") == 0) {
+ if (JLI_StrCmp(argv[i], "-J-d32") == 0 || JLI_StrCmp(argv[i], "-d32") == 0) {
wanted = 32;
continue;
}
@@ -123,7 +119,12 @@
JLI_ReportErrorMessage(CFG_ERROR7);
exit(1);
}
- jvmtype = CheckJvmType(_argc, _argv, JNI_FALSE);
+
+ jvmtype = CheckJvmType(pargc, pargv, JNI_FALSE);
+ if (JLI_StrCmp(jvmtype, "ERROR") == 0) {
+ JLI_ReportErrorMessage(CFG_ERROR9);
+ exit(4);
+ }
jvmpath[0] = '\0';
if (!GetJVMPath(jrepath, jvmtype, jvmpath, so_jvmpath)) {
@@ -131,7 +132,6 @@
exit(4);
}
/* If we got here, jvmpath has been correctly initialized. */
-
}
@@ -203,19 +203,21 @@
PREJVMSTART PreJVMStart;
struct stat s;
+ /* Make sure the jrepath contains something */
+ if (jrepath[0] == NULL) {
+ return;
+ }
/* 32 bit windows only please */
- if (strcmp(GetArch(), "i386") != 0 ) {
+ if (JLI_StrCmp(GetArch(), "i386") != 0 ) {
return;
}
/* Does our bundle directory exist ? */
- strcpy(tmpbuf, jrepath);
- strcat(tmpbuf, "\\lib\\bundles");
+ JLI_Snprintf(tmpbuf, sizeof(tmpbuf), "%s\\lib\\bundles", jrepath);
if (stat(tmpbuf, &s) != 0) {
return;
}
/* Does our jkernel dll exist ? */
- strcpy(tmpbuf, jrepath);
- strcat(tmpbuf, "\\bin\\jkernel.dll");
+ JLI_Snprintf(tmpbuf, sizeof(tmpbuf), "%s\\bin\\jkernel.dll", jrepath);
if (stat(tmpbuf, &s) != 0) {
return;
}
@@ -249,30 +251,30 @@
if (GetApplicationHome(path, pathsize)) {
/* Is JRE co-located with the application? */
- sprintf(javadll, "%s\\bin\\" JAVA_DLL, path);
+ JLI_Snprintf(javadll, sizeof(javadll), "%s\\bin\\" JAVA_DLL, path);
if (stat(javadll, &s) == 0) {
- goto found;
+ JLI_TraceLauncher("JRE path is %s\n", path);
+ return JNI_TRUE;
}
/* Does this app ship a private JRE in <apphome>\jre directory? */
- sprintf(javadll, "%s\\jre\\bin\\" JAVA_DLL, path);
+ JLI_Snprintf(javadll, sizeof (javadll), "%s\\jre\\bin\\" JAVA_DLL, path);
if (stat(javadll, &s) == 0) {
JLI_StrCat(path, "\\jre");
- goto found;
+ JLI_TraceLauncher("JRE path is %s\n", path);
+ return JNI_TRUE;
}
}
/* Look for a public JRE on this machine. */
if (GetPublicJREHome(path, pathsize)) {
- goto found;
+ JLI_TraceLauncher("JRE path is %s\n", path);
+ return JNI_TRUE;
}
JLI_ReportErrorMessage(JRE_ERROR8 JAVA_DLL);
return JNI_FALSE;
- found:
- JLI_TraceLauncher("JRE path is %s\n", path);
- return JNI_TRUE;
}
/*
@@ -286,9 +288,9 @@
{
struct stat s;
if (JLI_StrChr(jvmtype, '/') || JLI_StrChr(jvmtype, '\\')) {
- sprintf(jvmpath, "%s\\" JVM_DLL, jvmtype);
+ JLI_Snprintf(jvmpath, jvmpathsize, "%s\\" JVM_DLL, jvmtype);
} else {
- sprintf(jvmpath, "%s\\bin\\%s\\" JVM_DLL, jrepath, jvmtype);
+ JLI_Snprintf(jvmpath, jvmpathsize, "%s\\bin\\%s\\" JVM_DLL, jrepath, jvmtype);
}
if (stat(jvmpath, &s) == 0) {
return JNI_TRUE;
--- a/jdk/test/java/lang/Throwable/SuppressedExceptions.java Thu Jul 08 08:23:32 2010 -0700
+++ b/jdk/test/java/lang/Throwable/SuppressedExceptions.java Fri Jul 16 09:26:55 2010 -0700
@@ -26,7 +26,7 @@
/*
* @test
- * @bug 6911258 6962571
+ * @bug 6911258 6962571 6963622
* @summary Basic tests of suppressed exceptions
* @author Joseph D. Darcy
*/
@@ -35,11 +35,22 @@
private static String message = "Bad suppressed exception information";
public static void main(String... args) throws Exception {
+ noSelfSuppression();
basicSupressionTest();
serializationTest();
selfReference();
}
+ private static void noSelfSuppression() {
+ Throwable throwable = new Throwable();
+ try {
+ throwable.addSuppressedException(throwable);
+ throw new RuntimeException("IllegalArgumentException for self-suppresion not thrown.");
+ } catch (IllegalArgumentException iae) {
+ ; // Expected
+ }
+ }
+
private static void basicSupressionTest() {
Throwable throwable = new Throwable();
RuntimeException suppressed = new RuntimeException("A suppressed exception.");
@@ -156,9 +167,8 @@
throwable1.printStackTrace();
-
- throwable1.addSuppressedException(throwable1);
throwable1.addSuppressedException(throwable2);
+ throwable2.addSuppressedException(throwable1);
throwable1.printStackTrace();
}
--- a/jdk/test/java/net/Inet6Address/B6214234.java Thu Jul 08 08:23:32 2010 -0700
+++ b/jdk/test/java/net/Inet6Address/B6214234.java Fri Jul 16 09:26:55 2010 -0700
@@ -23,7 +23,7 @@
/**
* @test
- * @bug 6214234
+ * @bug 6214234 6967937
* @summary IPv6 scope_id for local addresses not set in Solaris 10
*/
@@ -51,6 +51,7 @@
return;
}
if (addr.getScopeId() == 0) {
+ System.out.println("addr: "+ addr);
throw new RuntimeException ("Non zero scope_id expected");
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/NetworkInterface/IPv4Only.java Fri Jul 16 09:26:55 2010 -0700
@@ -0,0 +1,51 @@
+/*
+ * 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.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 6964714
+ * @run main/othervm NetworkInterfaceV6List
+ * @summary Test the networkinterface listing with java.net.preferIPv4Stack=true.
+ */
+
+
+import java.net.*;
+import java.util.*;
+
+
+public class IPv4Only {
+ public static void main(String[] args) throws Exception {
+ System.setProperty("java.net.preferIPv4Stack","true");
+
+ Enumeration<NetworkInterface> nifs = NetworkInterface.getNetworkInterfaces();
+ while (nifs.hasMoreElements()) {
+ NetworkInterface nif = nifs.nextElement();
+ Enumeration<InetAddress> addrs = nif.getInetAddresses();
+ while (addrs.hasMoreElements()) {
+ InetAddress hostAddr = addrs.nextElement();
+ if ( hostAddr instanceof Inet6Address ){
+ throw new RuntimeException( "NetworkInterfaceV6List failed - found v6 address " + hostAddr.getHostAddress() );
+ }
+ }
+ }
+ }
+}
--- a/jdk/test/java/util/logging/AnonLoggerWeakRefLeak.sh Thu Jul 08 08:23:32 2010 -0700
+++ b/jdk/test/java/util/logging/AnonLoggerWeakRefLeak.sh Fri Jul 16 09:26:55 2010 -0700
@@ -23,6 +23,7 @@
# @test
# @bug 6942989
+# @ignore until 6964018 is fixed
# @summary Check for WeakReference leak in anonymous Logger objects
# @author Daniel D. Daugherty
#
--- a/jdk/test/java/util/logging/LoggerWeakRefLeak.sh Thu Jul 08 08:23:32 2010 -0700
+++ b/jdk/test/java/util/logging/LoggerWeakRefLeak.sh Fri Jul 16 09:26:55 2010 -0700
@@ -23,6 +23,7 @@
# @test
# @bug 6942989
+# @ignore until 6964018 is fixed
# @summary Check for WeakReference leak in Logger objects
# @author Daniel D. Daugherty
#
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/util/DerOutputStream/LocaleInTime.java Fri Jul 16 09:26:55 2010 -0700
@@ -0,0 +1,42 @@
+/*
+ * 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.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 6670889
+ * @summary Keystore created under Hindi Locale causing ArrayIndexOutOfBoundsException
+ * @run main/othervm -Duser.language=hi -Duser.region=IN LocaleInTime
+ */
+
+import java.util.Date;
+import sun.security.util.DerOutputStream;
+import sun.security.util.DerValue;
+
+public class LocaleInTime {
+ public static void main(String args[]) throws Exception {
+ DerOutputStream out = new DerOutputStream();
+ out.putUTCTime(new Date());
+ DerValue val = new DerValue(out.toByteArray());
+ System.out.println(val.getUTCTime());
+ }
+}
--- a/jdk/test/tools/launcher/Arrrghs.java Thu Jul 08 08:23:32 2010 -0700
+++ b/jdk/test/tools/launcher/Arrrghs.java Fri Jul 16 09:26:55 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 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
@@ -23,7 +23,7 @@
/**
* @test
- * @bug 5030233 6214916 6356475 6571029 6684582 6742159 4459600 6758881
+ * @bug 5030233 6214916 6356475 6571029 6684582 6742159 4459600 6758881 6753938
* @summary Argument parsing validation.
* @compile -XDignore.symbol.file Arrrghs.java TestHelper.java
* @run main Arrrghs
@@ -223,6 +223,20 @@
tr.checkPositive();
tr.isNotZeroOutput();
System.out.println(tr);
+
+ // 6753938, test for non-negative exit value for an incorrectly formed
+ // command line, '% java'
+ tr = TestHelper.doExec(TestHelper.javaCmd);
+ tr.checkNegative();
+ tr.isNotZeroOutput();
+ System.out.println(tr);
+
+ // 6753938, test for non-negative exit value for an incorrectly formed
+ // command line, '% java -Xcomp'
+ tr = TestHelper.doExec(TestHelper.javaCmd, "-Xcomp");
+ tr.checkNegative();
+ tr.isNotZeroOutput();
+ System.out.println(tr);
}
/*
--- a/jdk/test/tools/launcher/Makefile.SolarisRunpath Thu Jul 08 08:23:32 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-
-#
-
-# This is a not quite automated Makefile to generate the Solaris
-# binaries used for the SolarisRunpath.sh test. First,
-# libraryCaller.java program must be compiled. Next, javah is called
-# on the class file to generate the needed header file for the jni
-# code. Then, 2 Solaris executables are generated in separate
-# directories, a default one meant to be pointed to by LD_LIBRARY_PATH
-# (this function returns 0) and another one for the data model
-# specific LD_LIBRARY_PATH (this function returns the size of integers
-# in the data model, 32 or 64). A better makefile would run, say
-# isainfo -v, and generated binaries for all supported data models.
-# To do this a mapping would be needed from data models to
-# architecture dependent compiler options; e.g. 64 bit on sparc =>
-# -xarch=v9. Also, the settings for JINCLUDE, JAVAC, and JAVAH should
-# come from the current build. The C compiler should be the one
-# approved for the build. To be extra safe, the binaries should be
-# generated on the oldest Solaris release supported by the current
-# Java build.
-
-# Include directory in JRE or JDK install; e.g.
-JINCLUDE=/java/re/jdk/1.4.1/latest/binaries/solaris-sparc/include
-
-# Path to javac executable; e.g.
-JAVAC=/java/re/jdk/1.4.1/promoted/fcs/b21/binaries/solaris-sparc/bin/javac
-
-# Path to javah executable; e.g.
-JAVAH=/java/re/jdk/1.4.1/promoted/fcs/b21/binaries/solaris-sparc/bin/javah
-
-# Path to C compiler; e.g.
-CC=/java/devtools/sparc/SUNWspro/SC6.1/bin/cc
-
-
-ARCH=`uname -p`
-
-# 32-bit Solaris Options
-DM=32
-# Default architecture is fine for both sparc and x86 32-bit builds
-OPTIONS=
-
-# 64-bit Solaris Options
-#DM=64
-#OPTIONS=-xarch=v9
-
-
-all: libraryCaller.java libraryCaller.c
- $(JAVAC) libraryCaller.java; \
- $(JAVAH) libraryCaller; \
- $(CC) -G -I$(JINCLUDE) -I$(JINCLUDE)/solaris -DRETURN_VALUE=0 \
- $(OPTIONS) libraryCaller.c \
- -o lib/$(ARCH)/lib$(DM)/liblibrary.so; \
- $(CC) -G -I$(JINCLUDE) -I$(JINCLUDE)/solaris -DRETURN_VALUE=$(DM)\
- $(OPTIONS) libraryCaller.c \
- -o lib/$(ARCH)/lib$(DM)/lib$(DM)/liblibrary.so;
Binary file jdk/test/tools/launcher/lib/i386/lib32/lib32/liblibrary.so has changed
Binary file jdk/test/tools/launcher/lib/i386/lib32/liblibrary.so has changed
Binary file jdk/test/tools/launcher/lib/sparc/lib32/lib32/liblibrary.so has changed
Binary file jdk/test/tools/launcher/lib/sparc/lib32/liblibrary.so has changed
Binary file jdk/test/tools/launcher/lib/sparc/lib64/lib64/liblibrary.so has changed
Binary file jdk/test/tools/launcher/lib/sparc/lib64/liblibrary.so has changed