--- a/jdk/make/modules/modules.config Wed Jul 05 17:34:21 2017 +0200
+++ b/jdk/make/modules/modules.config Wed Feb 09 21:20:41 2011 -0800
@@ -771,12 +771,7 @@
/**************************************************************************/
-module jkernel {
- include sun.jkernel.*;
-}
-
module deploy {
- include jkernel;
// For now, all plugin and JNLP
include com.sun.java.browser.**,
--- a/jdk/make/sun/Makefile Wed Jul 05 17:34:21 2017 +0200
+++ b/jdk/make/sun/Makefile Wed Feb 09 21:20:41 2011 -0800
@@ -74,8 +74,7 @@
$(HEADLESS_SUBDIR) $(DGA_SUBDIR) \
jawt font jpeg cmm applet beans
SUBDIRS_management = management
-SUBDIRS_misc = jkernel $(ORG_SUBDIR) \
- rmi $(JDBC_SUBDIR) tracing
+SUBDIRS_misc = $(ORG_SUBDIR) rmi $(JDBC_SUBDIR) tracing
SUBDIRS_tools = native2ascii serialver tools jconsole
include $(BUILDDIR)/common/Subdirs.gmk
--- a/jdk/make/sun/jkernel/FILES_c_windows.gmk Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-#
-# Copyright (c) 2008, 2009, 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.
-#
-
-FILES_cpp = \
- stdafx.cpp \
- kernel.cpp \
- DownloadDialog.cpp \
- DownloadHelper.cpp \
- DownloadHelper.cpp
-
-
-FILES_rc = kernel.rc
-
-# FILES_export definitions for Win32
-
-FILES_export = \
- sun/jkernel/DownloadManager.java \
- sun/jkernel/Mutex.java \
- sun/jkernel/Bundle.java \
- sun/jkernel/BackgroundDownloader.java \
--- a/jdk/make/sun/jkernel/FILES_java.gmk Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-#
-# Copyright (c) 2008, 2009, 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.
-#
-
-FILES_java = \
- $(TARGDIR)sun/jkernel/BackgroundDownloader.java \
- $(TARGDIR)sun/jkernel/Bundle.java \
- $(TARGDIR)sun/jkernel/ByteArrayToFromHexDigits.java \
- $(TARGDIR)sun/jkernel/BundleCheck.java \
- $(TARGDIR)sun/jkernel/DownloadManager.java \
- $(TARGDIR)sun/jkernel/Mutex.java \
- $(TARGDIR)sun/jkernel/StandaloneByteArrayAccess.java \
- $(TARGDIR)sun/jkernel/StandaloneMessageDigest.java \
- $(TARGDIR)sun/jkernel/StandaloneSHA.java \
-
-FILES_export = \
- sun/jkernel/DownloadManager.java \
- sun/jkernel/Mutex.java \
- sun/jkernel/Bundle.java \
- sun/jkernel/BackgroundDownloader.java
--- a/jdk/make/sun/jkernel/Makefile Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,94 +0,0 @@
-#
-# Copyright (c) 2008, 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.
-#
-
-BUILDDIR = ../..
-MODULE = jkernel
-PACKAGE = sun.jkernel
-LIBRARY = jkernel
-PRODUCT = sun
-
-include $(BUILDDIR)/common/Defs.gmk
-
-#
-# Use highest optimization level
-#
-_OPT = $(CC_HIGHEST_OPT)
-
-#
-# Java source files
-#
-include FILES_java.gmk
-AUTO_FILES_JAVA_DIRS = sun/jkernel
-
-LOCALE_SUFFIXES = $(JDK_LOCALES)
-
-#
-# Native source files
-#
-
-ifeq ($(ARCH_DATA_MODEL), 32)
-
-ifeq ($(PLATFORM), windows)
-
-# If this is the VS Express compiler it will lack vc/atlmfc/
-ATL_MFC_DIR :=$(call DirExists,$(COMPILER_PATH)/../atlmfc,,)
-
-ifneq ($(ATL_MFC_DIR),)
-
-include FILES_c_windows.gmk
-
-vpath %.cpp $(PLATFORM_SRC)/native/sun/jkernel
-
-
-VERSIONINFO_RESOURCE = $(PLATFORM_SRC)/native/sun/jkernel/kernel.rc
-
-LDLIBS += urlmon.lib wininet.lib shlwapi.lib version.lib comctl32.lib gdi32.lib -def:$(PLATFORM_SRC)/native/sun/jkernel/kernel.def
-
-include $(BUILDDIR)/common/Library.gmk
-
-endif
-
-endif
-
-endif
-
-#
-# Resources
-#
-include $(TOPDIR)/make/common/internal/Resources.gmk
-
-#
-# Rules
-#
-include $(BUILDDIR)/common/Classes.gmk
-
-# If extra compression is going to be available in the deploy build enable
-# its use here by defining the JRE-relative pathname of the shared library
-
-ifeq ($(PLATFORM), windows)
- ifdef EXTRA_COMP_INSTALL_PATH
- CPPFLAGS += -DEXTRA_COMP_INSTALL_PATH=$(EXTRA_COMP_INSTALL_PATH)
- endif
-endif
--- a/jdk/src/share/classes/java/awt/color/ICC_Profile.java Wed Jul 05 17:34:21 2017 +0200
+++ b/jdk/src/share/classes/java/awt/color/ICC_Profile.java Wed Feb 09 21:20:41 2011 -0800
@@ -1856,13 +1856,6 @@
File.separatorChar + "lib" + File.separatorChar + "cmm";
String fullPath = dir + File.separatorChar + fileName;
File f = new File(fullPath);
- if (!f.isFile()) {
- //make sure file was installed in the kernel mode
- BootClassLoaderHook hook = BootClassLoaderHook.getHook();
- if (hook != null) {
- hook.prefetchFile("lib/cmm/"+fileName);
- }
- }
return (f.isFile() && isChildOf(f, dir)) ? f : null;
}
--- a/jdk/src/share/classes/java/util/zip/ZipEntry.java Wed Jul 05 17:34:21 2017 +0200
+++ b/jdk/src/share/classes/java/util/zip/ZipEntry.java Wed Feb 09 21:20:41 2011 -0800
@@ -110,19 +110,7 @@
* @see #getTime()
*/
public void setTime(long time) {
- // Same value as defined in sun.jkernel.DownloadManager.KERNEL_STATIC_MODTIME
- // to avoid direct reference to DownoadManager class. Need to revisit
- // if this is needed any more (see comment in the DownloadManager class)
- final int KERNEL_STATIC_MODTIME = 10000000;
- BootClassLoaderHook hook = BootClassLoaderHook.getHook();
- if (hook != null && hook.isCurrentThreadPrefetching()) {
- // fix for bug 6625963: we bypass time calculations while Kernel is
- // downloading bundles, since they aren't necessary and would cause
- // the Kernel core to depend upon the (very large) time zone data
- this.time = KERNEL_STATIC_MODTIME;
- } else {
- this.time = javaToDosTime(time);
- }
+ this.time = javaToDosTime(time);
}
/**
--- a/jdk/src/share/classes/sun/jkernel/BackgroundDownloader.java Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,209 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package sun.jkernel;
-
-import java.io.*;
-
-/**
- * Invoked by DownloadManager to begin (in a new JRE) the process of downloading
- * all remaining JRE components in the background. A mutex is used to ensure
- * that only one BackgroundDownloader can be active at a time.
- *
- */
-public class BackgroundDownloader {
- public static final String BACKGROUND_DOWNLOAD_PROPERTY = "kernel.background.download";
- // relative to the bundle directory
- public static final String PID_PATH = "tmp" + File.separator + "background.pid";
-
- // Time to wait before beginning to download components. Gives the JRE
- // which spawned this one a chance to get its downloads going.
- private static final int WAIT_TIME = 10000;
-
- private static Mutex backgroundMutex;
-
- static synchronized Mutex getBackgroundMutex() {
- if (backgroundMutex == null)
- backgroundMutex = Mutex.create(DownloadManager.MUTEX_PREFIX + "background");
- return backgroundMutex;
- }
-
- private static void doBackgroundDownloads() {
- if (DownloadManager.isJREComplete())
- return;
- if (getBackgroundMutex().acquire(0)) { // give up and exit immediately if we can't acquire mutex
- try {
- writePid();
- Thread.sleep(WAIT_TIME);
- DownloadManager.doBackgroundDownloads(false);
- DownloadManager.performCompletionIfNeeded();
- }
- catch (InterruptedException e) {
- }
- finally {
- getBackgroundMutex().release();
- }
- }
- else {
- System.err.println("Unable to acquire background download mutex.");
- System.exit(1);
- }
- }
-
-
- /**
- * Writes the current process ID to a file, so that the uninstaller can
- * find and kill this process if needed.
- */
- private static void writePid() {
- try {
- File pid = new File(DownloadManager.getBundlePath(), PID_PATH);
- pid.getParentFile().mkdirs();
- PrintStream out = new PrintStream(new FileOutputStream(pid));
- pid.deleteOnExit();
- out.println(DownloadManager.getCurrentProcessId());
- out.close();
- }
- catch (IOException e) {
- e.printStackTrace();
- System.exit(1);
- }
- }
-
-
- /**
- * Reads from an InputStream until exhausted, writing all data to the
- * specified OutputStream.
- */
- private static void send(InputStream in, OutputStream out)
- throws IOException {
- int c;
- byte[] buffer = new byte[2048];
- while ((c = in.read(buffer)) > 0)
- out.write(buffer, 0, c);
- }
-
- /*
- * Returns the value of the BACKGROUND_DOWNLOAD_PROPERTY.
- * Checks if system property has been set first
- * then checks if registry key to disable background download
- * has been set.
- */
- public static boolean getBackgroundDownloadProperty(){
- /*
- * Check registry key value
- */
- boolean bgDownloadEnabled = getBackgroundDownloadKey();
-
- /*
- * Check system property - it should override the registry
- * key value.
- */
- if (System.getProperty(BACKGROUND_DOWNLOAD_PROPERTY) != null){
- bgDownloadEnabled = Boolean.valueOf(
- System.getProperty(BACKGROUND_DOWNLOAD_PROPERTY));
- }
- return bgDownloadEnabled;
-
- }
-
- // This method is to retrieve the value of registry key
- // that disables background download.
- static native boolean getBackgroundDownloadKey();
-
-
- static void startBackgroundDownloads() {
- if (!getBackgroundDownloadProperty()){
- // If getBackgroundDownloadProperty() returns false
- // we're doing the downloads from this VM; we don't want to
- // spawn another one
- return;
- }
-
- // if System.err isn't initialized yet, it means the charsets aren't
- // available yet and we're going to run into trouble down below. Wait
- // until it's ready.
- while (System.err == null) {
- try {
- Thread.sleep(1000);
- }
- catch (InterruptedException e) {
- return;
- }
- }
-
- try {
- String args = "-D" + BACKGROUND_DOWNLOAD_PROPERTY + "=false -Xmx256m";
- String backgroundDownloadURL = DownloadManager.getBaseDownloadURL();
-
- // only set KERNEL_DOWNLOAD_URL_PROPERTY if we override
- // the default download url
- if (backgroundDownloadURL != null &&
- backgroundDownloadURL.equals(
- DownloadManager.DEFAULT_DOWNLOAD_URL) == false) {
- args += " -D" + DownloadManager.KERNEL_DOWNLOAD_URL_PROPERTY +
- "=" + backgroundDownloadURL;
- };
- args += " sun.jkernel.BackgroundDownloader";
- final Process jvm = Runtime.getRuntime().exec("\"" + new File(System.getProperty("java.home"), "bin" +
- File.separator + "java.exe") + "\" " + args);
- Thread outputReader = new Thread("kernelOutputReader") {
- public void run() {
- try {
- InputStream in = jvm.getInputStream();
- send(in, new PrintStream(new ByteArrayOutputStream()));
- }
- catch (IOException e) {
- e.printStackTrace();
- }
- }
- };
- outputReader.setDaemon(true);
- outputReader.start();
-
- Thread errorReader = new Thread("kernelErrorReader") {
- public void run() {
- try {
- InputStream in = jvm.getErrorStream();
- send(in, new PrintStream(new ByteArrayOutputStream()));
- }
- catch (IOException e) {
- e.printStackTrace();
- }
- }
- };
- errorReader.setDaemon(true);
- errorReader.start();
- }
- catch (Exception e) {
- e.printStackTrace();
- // TODO: error handling
- }
- }
-
-
- public static void main(String[] arg) {
- doBackgroundDownloads();
- }
-}
--- a/jdk/src/share/classes/sun/jkernel/Bundle.java Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,922 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package sun.jkernel;
-
-import java.io.*;
-import java.net.HttpRetryException;
-import java.util.*;
-import java.util.concurrent.*;
-import java.util.jar.*;
-import java.util.zip.GZIPInputStream;
-
-/**
- * Represents a bundle which may or may not currently be installed.
- *
- *@author Ethan Nicholas
- */
-public class Bundle {
- static {
- if (!DownloadManager.jkernelLibLoaded) {
- // This code can be invoked directly by the deploy build.
- System.loadLibrary("jkernel");
- }
- }
- /**
- * Compress file sourcePath with "extra" algorithm (e.g. 7-Zip LZMA)
- * if available, put the uncompressed data into file destPath and
- * return true. If not available return false and do nothing with destPath.
- *
- * @param srcPath path to existing uncompressed file
- * @param destPath path for the compressed file to be created
- * @returns true if extra algorithm used, false if not
- * @throws IOException if the extra compression code should be available
- * but cannot be located or linked to, the destination file already
- * exists or cannot be opened for writing, or the compression fails
- */
- public static native boolean extraCompress(String srcPath,
- String destPath) throws IOException;
-
- /**
- * Decompress file sourcePath with "extra" algorithm (e.g. 7-Zip LZMA)
- * if available, put the uncompressed data into file destPath and
- * return true. If not available return false and do nothing with
- * destPath.
- * @param srcPath path to existing compressed file
- * @param destPath path to uncompressed file to be created
- * @returns true if extra algorithm used, false if not
- * @throws IOException if the extra uncompression code should be available
- * but cannot be located or linked to, the destination file already
- * exists or cannot be opened for writing, or the uncompression fails
- */
- public static native boolean extraUncompress(String srcPath,
- String destPath) throws IOException;
-
- private static final String BUNDLE_JAR_ENTRY_NAME = "classes.jar";
-
- /** The bundle is not present. */
- protected static final int NOT_DOWNLOADED = 0;
-
- /**
- * The bundle is in the download queue but has not finished downloading.
- */
- protected static final int QUEUED = 1;
-
- /** The bundle has finished downloading but is not installed. */
- protected static final int DOWNLOADED = 2;
-
- /** The bundle is fully installed and functional. */
- protected static final int INSTALLED = 3;
-
- /** Thread pool used to manage dependency downloads. */
- private static ExecutorService threadPool;
-
- /** Size of thread pool. */
- static final int THREADS;
-
- static {
- String downloads = System.getProperty(
- DownloadManager.KERNEL_SIMULTANEOUS_DOWNLOADS_PROPERTY);
- if (downloads != null)
- THREADS = Integer.parseInt(downloads.trim());
- else
- THREADS = 1;
- }
-
- /** Mutex used to safely access receipts file. */
- private static Mutex receiptsMutex;
-
- /** Maps bundle names to known bundle instances. */
- private static Map<String, Bundle> bundles =
- new HashMap<String, Bundle>();
-
- /** Contains the names of currently-installed bundles. */
- static Set<String> receipts = new HashSet<String>();
-
- private static int bytesDownloaded;
-
- /** Path where bundle receipts are written. */
- private static File receiptPath = new File(DownloadManager.getBundlePath(),
- "receipts");
-
- /** The size of the receipts file the last time we saw it. */
- private static int receiptsSize;
-
- /** The bundle name, e.g. "java_awt". */
- private String name;
-
- /** The path to which we are saving the downloaded bundle file. */
- private File localPath;
-
- /**
- * The path of the extracted JAR file containing the bundle's classes.
- */
- private File jarPath;
-
- // for vista IE7 protected mode
- private File lowJarPath;
- private File lowJavaPath = null;
-
- /** The current state (DOWNLOADED, INSTALLED, etc.). */
- protected int state;
-
- /**
- * True if we should delete the downloaded bundle after installing it.
- */
- protected boolean deleteOnInstall = true;
-
- private static Mutex getReceiptsMutex() {
- if (receiptsMutex == null)
- receiptsMutex = Mutex.create(DownloadManager.MUTEX_PREFIX +
- "receipts");
- return receiptsMutex;
- }
-
-
- /**
- * Reads the receipts file in order to seed the list of currently
- * installed bundles.
- */
- static synchronized void loadReceipts() {
- getReceiptsMutex().acquire();
- try {
- if (receiptPath.exists()) {
- int size = (int) receiptPath.length();
- if (size != receiptsSize) { // ensure that it has actually
- // been modified
- DataInputStream in = null;
- try {
- receipts.clear();
- for (String bundleName : DownloadManager.getBundleNames()) {
- if ("true".equals(DownloadManager.getBundleProperty(bundleName,
- DownloadManager.INSTALL_PROPERTY)))
- receipts.add(bundleName);
- }
- if (receiptPath.exists()) {
- in = new DataInputStream(new BufferedInputStream(
- new FileInputStream(receiptPath)));
- String line;
- while ((line = in.readLine()) != null) {
- receipts.add(line.trim());
- }
- }
- receiptsSize = size;
- }
- catch (IOException e) {
- DownloadManager.log(e);
- // safe to continue, as the worst that happens is
- // we re-download existing bundles
- } finally {
- if (in != null) {
- try {
- in.close();
- } catch (IOException ioe) {
- DownloadManager.log(ioe);
- }
- }
- }
- }
- }
- }
- finally {
- getReceiptsMutex().release();
- }
- }
-
-
- /** Returns the bundle corresponding to the specified name. */
- public static synchronized Bundle getBundle(String bundleId)
- throws IOException {
- Bundle result =(Bundle) bundles.get(bundleId);
- if (result == null && (bundleId.equals("merged") ||
- Arrays.asList(DownloadManager.getBundleNames()).contains(bundleId))) {
- result = new Bundle();
- result.name = bundleId;
-
- if (DownloadManager.isWindowsVista()) {
- result.localPath =
- new File(DownloadManager.getLocalLowTempBundlePath(),
- bundleId + ".zip");
- result.lowJavaPath = new File(
- DownloadManager.getLocalLowKernelJava() + bundleId);
- } else {
- result.localPath = new File(DownloadManager.getBundlePath(),
- bundleId + ".zip");
- }
-
- String jarPath = DownloadManager.getBundleProperty(bundleId,
- DownloadManager.JAR_PATH_PROPERTY);
- if (jarPath != null) {
- if (DownloadManager.isWindowsVista()) {
- result.lowJarPath = new File(
- DownloadManager.getLocalLowKernelJava() + bundleId,
- jarPath);
- }
- result.jarPath = new File(DownloadManager.JAVA_HOME,
- jarPath);
-
- } else {
-
- if (DownloadManager.isWindowsVista()) {
- result.lowJarPath = new File(
- DownloadManager.getLocalLowKernelJava() + bundleId +
- "\\lib\\bundles",
- bundleId + ".jar");
- }
-
- result.jarPath = new File(DownloadManager.getBundlePath(),
- bundleId + ".jar");
-
- }
-
- bundles.put(bundleId, result);
- }
- return result;
- }
-
-
- /**
- * Returns the name of this bundle. The name is typically defined by
- * the bundles.xml file.
- */
- public String getName() {
- return name;
- }
-
-
- /**
- * Sets the name of this bundle.
- */
- public void setName(String name) {
- this.name = name;
- }
-
-
- /**
- * Returns the path to the bundle file on the local filesystem. The file
- * will only exist if the bundle has already been downloaded; otherwise
- * it will be created when download() is called.
- */
- public File getLocalPath() {
- return localPath;
- }
-
-
- /**
- * Sets the location of the bundle file on the local filesystem. If the
- * file already exists, the bundle will be considered downloaded;
- * otherwise the file will be created when download() is called.
- */
- public void setLocalPath(File localPath) {
- this.localPath = localPath;
- }
-
-
- /**
- * Returns the path to the extracted JAR file containing this bundle's
- * classes. This file should only exist after the bundle has been
- * installed.
- */
- public File getJarPath() {
- return jarPath;
- }
-
-
- /**
- * Sets the path to the extracted JAR file containing this bundle's
- * classes. This file will be created as part of installing the bundle.
- */
- public void setJarPath(File jarPath) {
- this.jarPath = jarPath;
- }
-
-
- /**
- * Returns the size of the bundle download in bytes.
- */
- public int getSize() {
- return Integer.valueOf(DownloadManager.getBundleProperty(getName(),
- DownloadManager.SIZE_PROPERTY));
- }
-
-
- /**
- * Returns true if the bundle file (getLocalPath()) should be deleted
- * when the bundle is successfully installed. Defaults to true.
- */
- public boolean getDeleteOnInstall() {
- return deleteOnInstall;
- }
-
-
- /**
- * Sets whether the bundle file (getLocalPath()) should be deleted
- * when the bundle is successfully installed. Defaults to true.
- */
- public void setDeleteOnInstall(boolean deleteOnInstall) {
- this.deleteOnInstall = deleteOnInstall;
- }
-
-
- /** Sets the current state of this bundle to match reality. */
- protected void updateState() {
- synchronized(Bundle.class) {
- loadReceipts();
- if (receipts.contains(name) ||
- "true".equals(DownloadManager.getBundleProperty(name,
- DownloadManager.INSTALL_PROPERTY)))
- state = Bundle.INSTALLED;
- else if (localPath.exists())
- state = Bundle.DOWNLOADED;
- }
- }
-
-
- private String getURL(boolean showUI) throws IOException {
- Properties urls = DownloadManager.getBundleURLs(showUI);
- String result = urls.getProperty(name + ".zip");
- if (result == null) {
- result = urls.getProperty(name);
- if (result == null) {
- DownloadManager.log("Unable to determine bundle URL for " + this);
- DownloadManager.log("Bundle URLs: " + urls);
- DownloadManager.sendErrorPing(DownloadManager.ERROR_NO_SUCH_BUNDLE);
-
- throw new NullPointerException("Unable to determine URL " +
- "for bundle: " + this);
- }
- }
- return result;
- }
-
-
- /**
- * Downloads the bundle. This method blocks until the download is
- * complete.
- *
- *@param showProgress true to display a progress dialog
- */
- private void download(boolean showProgress) {
- if (DownloadManager.isJREComplete())
- return;
- Mutex mutex = Mutex.create(DownloadManager.MUTEX_PREFIX + name +
- ".download");
- mutex.acquire();
- try {
- long start = System.currentTimeMillis();
-
- boolean retry;
-
- do {
- retry = false;
- updateState();
- if (state == DOWNLOADED || state == INSTALLED) {
- return;
- }
- File tmp = null;
- try {
- tmp = new File(localPath + ".tmp");
-
- // tmp.deleteOnExit();
-
- if (DownloadManager.getBaseDownloadURL().equals(
- DownloadManager.RESOURCE_URL)) {
- // RESOURCE_URL is used during build process, to
- // avoid actual network traffic. This is called in
- // the SplitJRE DownloadTest to determine which
- // classes are needed to support downloads, but we
- // bypass the actual HTTP download to simplify the
- // build process (it's all native code, so from
- // DownloadTest's standpoint it doesn't matter if we
- // really call it or not).
- String path = "/" + name + ".zip";
- InputStream in =
- getClass().getResourceAsStream(path);
- if (in == null)
- throw new IOException("could not locate " +
- "resource: " + path);
- FileOutputStream out = new FileOutputStream(tmp);
- DownloadManager.send(in, out);
- in.close();
- out.close();
- }
- else {
- try {
- String bundleURL = getURL(showProgress);
- DownloadManager.log("Downloading from: " +
- bundleURL);
- DownloadManager.downloadFromURL(bundleURL, tmp,
- name.replace('_', '.'), showProgress);
- }
- catch (HttpRetryException e) {
- // Akamai returned a 403, get new URL
- DownloadManager.flushBundleURLs();
- String bundleURL = getURL(showProgress);
- DownloadManager.log("Retrying at new " +
- "URL: " + bundleURL);
- DownloadManager.downloadFromURL(bundleURL, tmp,
- name.replace('_', '.'),
- showProgress);
- // we intentionally don't do a 403 retry
- // again, to avoid infinite retries
- }
- }
- if (!tmp.exists() || tmp.length() == 0) {
- if (showProgress) {
- // since showProgress = true, native code should
- // have offered to retry. Since we ended up here,
- // we conclude that download failed & user opted to
- // cancel. Set complete to true to stop bugging
- // him in the future (if one bundle fails, the
- // rest are virtually certain to).
- DownloadManager.complete = true;
- }
- DownloadManager.fatalError(DownloadManager.ERROR_UNSPECIFIED);
- }
-
- /**
- * Bundle security
- *
- * Check for corruption/spoofing
- */
-
-
- /* Create a bundle check from the tmp file */
- BundleCheck gottenCheck = BundleCheck.getInstance(tmp);
-
- /* Get the check expected for the Bundle */
- BundleCheck expectedCheck = BundleCheck.getInstance(name);
-
- // Do they match?
-
- if (expectedCheck.equals(gottenCheck)) {
-
- // Security check OK, uncompress the bundle file
- // into the local path
-
- long uncompressedLength = tmp.length();
- localPath.delete();
-
- File uncompressedPath = new File(tmp.getPath() +
- ".jar0");
- if (! extraUncompress(tmp.getPath(),
- uncompressedPath.getPath())) {
- // Extra uncompression not available, fall
- // back to alternative if it is enabled.
- if (DownloadManager.debug) {
- DownloadManager.log("Uncompressing with GZIP");
- }
- GZIPInputStream in = new GZIPInputStream( new
- BufferedInputStream(new FileInputStream(tmp),
- DownloadManager.BUFFER_SIZE));
- BufferedOutputStream out = new BufferedOutputStream(
- new FileOutputStream(uncompressedPath),
- DownloadManager.BUFFER_SIZE);
- DownloadManager.send(in,out);
- in.close();
- out.close();
- if (! uncompressedPath.renameTo(localPath)) {
- throw new IOException("unable to rename " +
- uncompressedPath + " to " + localPath);
- }
- } else {
- if (DownloadManager.debug) {
- DownloadManager.log("Uncompressing with LZMA");
- }
- if (! uncompressedPath.renameTo(localPath)) {
- throw new IOException("unable to rename " +
- uncompressedPath + " to " + localPath);
- }
- }
- state = DOWNLOADED;
- bytesDownloaded += uncompressedLength;
- long time = (System.currentTimeMillis() -
- start);
- DownloadManager.log("Downloaded " + name +
- " in " + time + "ms. Downloaded " +
- bytesDownloaded + " bytes this session.");
-
- // Normal completion
- } else {
-
- // Security check not OK: remove the temp file
- // and consult the user
-
- tmp.delete();
-
- DownloadManager.log(
- "DownloadManager: Security check failed for " +
- "bundle " + name);
-
- // only show dialog if we are not in silent mode
- if (showProgress) {
- retry = DownloadManager.askUserToRetryDownloadOrQuit(
- DownloadManager.ERROR_UNSPECIFIED);
- }
-
- if (!retry) {
- // User wants to give up
- throw new RuntimeException(
- "Failed bundle security check and user " +
- "canceled");
- }
- }
- }
- catch (IOException e) {
- // Look for "out of space" using File.getUsableSpace()
- // here when downloadFromURL starts throwing IOException
- // (or preferably a distinct exception for this case).
- DownloadManager.log(e);
- }
- } while (retry);
- } finally {
- mutex.release();
- }
- }
-
-
- /**
- * Calls {@link #queueDownload()} on all of this bundle's dependencies.
- */
- void queueDependencies(boolean showProgress) {
- try {
- String dependencies =
- DownloadManager.getBundleProperty(name,
- DownloadManager.DEPENDENCIES_PROPERTY);
- if (dependencies != null) {
- StringTokenizer st = new StringTokenizer(dependencies,
- " ,");
- while (st.hasMoreTokens()) {
- Bundle b = getBundle(st.nextToken());
- if (b != null && !b.isInstalled()) {
- if (DownloadManager.debug) {
- DownloadManager.log("Queueing " + b.name +
- " as a dependency of " + name + "...");
- }
- b.install(showProgress, true, false);
- }
- }
- }
- } catch (IOException e) {
- // shouldn't happen
- DownloadManager.log(e);
- }
- }
-
-
- static synchronized ExecutorService getThreadPool() {
- if (threadPool == null) {
- threadPool = Executors.newFixedThreadPool(THREADS,
- new ThreadFactory () {
- public Thread newThread(Runnable r) {
- Thread result = new Thread(r);
- result.setDaemon(true);
- return result;
- }
- }
- );
- }
- return threadPool;
- }
-
-
- private void unpackBundle() throws IOException {
- File useJarPath = null;
- if (DownloadManager.isWindowsVista()) {
- useJarPath = lowJarPath;
- File jarDir = useJarPath.getParentFile();
- if (jarDir != null) {
- jarDir.mkdirs();
- }
- } else {
- useJarPath = jarPath;
- }
-
- DownloadManager.log("Unpacking " + this + " to " + useJarPath);
-
- InputStream rawStream = new FileInputStream(localPath);
- JarInputStream in = new JarInputStream(rawStream) {
- public void close() throws IOException {
- // prevent any sub-processes here from actually closing the
- // input stream; we'll use rawsStream.close() when we're
- // done with it
- }
- };
-
- try {
- File jarTmp = null;
- JarEntry entry;
- while ((entry = in.getNextJarEntry()) != null) {
- String entryName = entry.getName();
- if (entryName.equals("classes.pack")) {
- File packTmp = new File(useJarPath + ".pack");
- packTmp.getParentFile().mkdirs();
- DownloadManager.log("Writing temporary .pack file " + packTmp);
- OutputStream tmpOut = new FileOutputStream(packTmp);
- try {
- DownloadManager.send(in, tmpOut);
- } finally {
- tmpOut.close();
- }
- // we unpack to a temporary file and then, towards the end
- // of this method, use a (hopefully atomic) rename to put it
- // into its final location; this should avoid the problem of
- // partially-completed downloads. Doing the rename last
- // allows us to check for the presence of the JAR file to
- // see whether the bundle has in fact been downloaded.
- jarTmp = new File(useJarPath + ".tmp");
- DownloadManager.log("Writing temporary .jar file " + jarTmp);
- unpack(packTmp, jarTmp);
- packTmp.delete();
- } else if (!entryName.startsWith("META-INF")) {
- File dest;
- if (DownloadManager.isWindowsVista()) {
- dest = new File(lowJavaPath,
- entryName.replace('/', File.separatorChar));
- } else {
- dest = new File(DownloadManager.JAVA_HOME,
- entryName.replace('/', File.separatorChar));
- }
- if (entryName.equals(BUNDLE_JAR_ENTRY_NAME))
- dest = useJarPath;
- File destTmp = new File(dest + ".tmp");
- boolean exists = dest.exists();
- if (!exists) {
- DownloadManager.log(dest + ".mkdirs()");
- dest.getParentFile().mkdirs();
- }
- try {
- DownloadManager.log("Using temporary file " + destTmp);
- FileOutputStream out =
- new FileOutputStream(destTmp);
- try {
- byte[] buffer = new byte[2048];
- int c;
- while ((c = in.read(buffer)) > 0)
- out.write(buffer, 0, c);
- } finally {
- out.close();
- }
- if (exists)
- dest.delete();
- DownloadManager.log("Renaming from " + destTmp + " to " + dest);
- if (!destTmp.renameTo(dest)) {
- throw new IOException("unable to rename " +
- destTmp + " to " + dest);
- }
-
- } catch (IOException e) {
- if (!exists)
- throw e;
- // otherwise the file already existed and the fact
- // that we failed to re-write it probably just
- // means that it was in use
- }
- }
- }
-
- // rename the temporary jar into its final location
- if (jarTmp != null) {
- if (useJarPath.exists())
- jarTmp.delete();
- else if (!jarTmp.renameTo(useJarPath)) {
- throw new IOException("unable to rename " + jarTmp +
- " to " + useJarPath);
- }
- }
- if (DownloadManager.isWindowsVista()) {
- // move bundle to real location
- DownloadManager.log("Using broker to move " + name);
- if (!DownloadManager.moveDirWithBroker(
- DownloadManager.getKernelJREDir() + name)) {
- throw new IOException("unable to create " + name);
- }
- DownloadManager.log("Broker finished " + name);
- }
- DownloadManager.log("Finished unpacking " + this);
- } finally {
- rawStream.close();
- }
- if (deleteOnInstall) {
- localPath.delete();
- }
-
- }
-
-
- public static void unpack(File pack, File jar) throws IOException {
- Process p = Runtime.getRuntime().exec(DownloadManager.JAVA_HOME + File.separator +
- "bin" + File.separator + "unpack200 -Hoff \"" + pack + "\" \"" + jar + "\"");
- try {
- p.waitFor();
- }
- catch (InterruptedException e) {
- }
- }
-
-
- /**
- * Unpacks and installs the bundle. The bundle's classes are not
- * immediately added to the boot class path; this happens when the VM
- * attempts to load a class and calls getBootClassPathEntryForClass().
- */
- public void install() throws IOException {
- install(true, false, true);
- }
-
-
- /**
- * Unpacks and installs the bundle, optionally hiding the progress
- * indicator. The bundle's classes are not immediately added to the
- * boot class path; this happens when the VM attempts to load a class
- * and calls getBootClassPathEntryForClass().
- *
- *@param showProgress true to display a progress dialog
- *@param downloadOnly true to download but not install
- *@param block true to wait until the operation is complete before returning
- */
- public synchronized void install(final boolean showProgress,
- final boolean downloadOnly, boolean block) throws IOException {
- if (DownloadManager.isJREComplete())
- return;
- if (state == NOT_DOWNLOADED || state == QUEUED) {
- // we allow an already-queued bundle to be placed into the queue
- // again, to handle the case where the bundle is queued with
- // downloadOnly true and then we try to queue it again with
- // downloadOnly false -- the second queue entry will actually
- // install it.
- if (state != QUEUED) {
- DownloadManager.addToTotalDownloadSize(getSize());
- state = QUEUED;
- }
- if (getThreadPool().isShutdown()) {
- if (state == NOT_DOWNLOADED || state == QUEUED)
- doInstall(showProgress, downloadOnly);
- }
- else {
- Future task = getThreadPool().submit(new Runnable() {
- public void run() {
- try {
- if (state == NOT_DOWNLOADED || state == QUEUED ||
- (!downloadOnly && state == DOWNLOADED)) {
- doInstall(showProgress, downloadOnly);
- }
- }
- catch (IOException e) {
- // ignore
- }
- }
- });
- queueDependencies(showProgress);
- if (block) {
- try {
- task.get();
- }
- catch (Exception e) {
- throw new Error(e);
- }
- }
- }
- }
- else if (state == DOWNLOADED && !downloadOnly)
- doInstall(showProgress, false);
- }
-
-
- private void doInstall(boolean showProgress, boolean downloadOnly)
- throws IOException {
- Mutex mutex = Mutex.create(DownloadManager.MUTEX_PREFIX + name +
- ".install");
- DownloadManager.bundleInstallStart();
- try {
- mutex.acquire();
- updateState();
- if (state == NOT_DOWNLOADED || state == QUEUED) {
- download(showProgress);
- }
-
- if (state == DOWNLOADED && downloadOnly) {
- return;
- }
-
- if (state == INSTALLED) {
- return;
- }
- if (state != DOWNLOADED) {
- DownloadManager.fatalError(DownloadManager.ERROR_UNSPECIFIED);
- }
-
- DownloadManager.log("Calling unpackBundle for " + this);
- unpackBundle();
- DownloadManager.log("Writing receipt for " + this);
- writeReceipt();
- updateState();
- DownloadManager.log("Finished installing " + this + ", state=" + state);
- } finally {
- if (lowJavaPath != null) {
- lowJavaPath.delete();
- }
- mutex.release();
- DownloadManager.bundleInstallComplete();
- }
- }
-
-
- synchronized void setState(int state) {
- this.state = state;
- }
-
-
- /** Returns <code>true</code> if this bundle has been installed. */
- public boolean isInstalled() {
- synchronized (Bundle.class) {
- updateState();
- return state == INSTALLED;
- }
- }
-
-
- /**
- * Adds an entry to the receipts file indicating that this bundle has
- * been successfully downloaded.
- */
- private void writeReceipt() {
- getReceiptsMutex().acquire();
- File useReceiptPath = null;
- try {
-
- try {
-
- receipts.add(name);
-
- if (DownloadManager.isWindowsVista()) {
- // write out receipts to locallow
- useReceiptPath = new File(
- DownloadManager.getLocalLowTempBundlePath(),
- "receipts");
-
- if (receiptPath.exists()) {
- // copy original file to locallow location
- DownloadManager.copyReceiptFile(receiptPath,
- useReceiptPath);
- }
-
- // update receipt in locallow path
- // only append if original receipt path exists
- FileOutputStream out = new FileOutputStream(useReceiptPath,
- receiptPath.exists());
- out.write((name + System.getProperty("line.separator")).getBytes("utf-8"));
- out.close();
-
- // use broker to move back to real path
- if (!DownloadManager.moveFileWithBroker(
- DownloadManager.getKernelJREDir()
- + "-bundles" + File.separator + "receipts")) {
- throw new IOException("failed to write receipts");
- }
- } else {
- useReceiptPath = receiptPath;
- FileOutputStream out = new FileOutputStream(useReceiptPath,
- true);
- out.write((name + System.getProperty("line.separator")).getBytes("utf-8"));
- out.close();
- }
-
-
- } catch (IOException e) {
- DownloadManager.log(e);
- // safe to continue, as the worst that happens is we
- // re-download existing bundles
- }
- }
- finally {
- getReceiptsMutex().release();
- }
- }
-
-
- public String toString() {
- return "Bundle[" + name + "]";
- }
-}
--- a/jdk/src/share/classes/sun/jkernel/BundleCheck.java Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,330 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-/*
- *
- * The Java Kernel Bundle security check.
- *
- * This class is responsible for detail of creating, storing, dispensing, and
- * updating bundle security checks and security checks for all the files
- * extracted from a bundle. Security checks are cryptographic
- * hashcodes that make it impractical to counterfeit a file. The security
- * check algorithm is defined by peer class StandaloneMessageDigest. The
- * cryptographic
- * hashcodes are held in instances of this class as byte arrays and externally
- * as hexidecimal string values for Bundle name Property keys. The properties
- * are a resource in the Java Kernel core JRE rt.jar and accessed after a
- * real or simulated bundle download by peer classes DownloadManager and
- * Bundle. Build-time deployment class SplitJRE uses this class to create file
- * security checks directly and via a special execution of DownloadManager.
- * The main method of this class can be used to create a
- * new set of security codes and updated properties for a given JRE path
- * and set of bundle names (CWD assume to contain bundle files as <name>.zip).
- *
- * This is a Sun internal class defined by the Sun implementation and
- * intended for JRE/JDK release deployment.
- *
- * @see sun.jkernel.DownloadManager
- * @see sun.jkernel.Bundle
- * @see sun.jkernel.StandaloneSHA
- * @see sun.jkernel.ByteArrayToFromHexDigits
- * See also deploy/src/kernel/share/classes/sun/kernel/SplitJRE.java
- */
-
-package sun.jkernel;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.Properties;
-
-
-public class BundleCheck {
-
- /* File buffer size */
-
- private static final int DIGEST_STREAM_BUFFER_SIZE = 2048;
-
- /* The bundle filename suffix */
-
- private static final String BUNDLE_SUFFIX = ".zip";
-
- /* Mutable static state. */
-
- /* Properties (Bundle name/check hex String pairs) for a set of Bundles.
- Guarded by this class' object. */
-
- private static volatile Properties properties;
-
- /* Mutable instance state. */
-
- /**
- * The bytes of the check value. Guarded by the bundle Mutex (in
- * sun.jkernel.DownloadManager) or the fact that sun.kernel.SplitJRE
- * and/or DownloadManager with "-download all" runs a single thread.
- */
-
- private byte[] checkBytes;
-
- /* Prevent instantiation by default constructor */
-
- private BundleCheck(){}
-
- /**
- * Store the bundle check values as properties to the path specified.
- * Only invoked by SplitJRE.
- */
-
- public static void storeProperties(String fullPath) {
-
- try {
- File f = new File(fullPath);
- f.getParentFile().mkdirs();
- OutputStream out = new FileOutputStream(f);
- properties.store(out, null);
- out.close();
- } catch (Exception e) {
- throw new RuntimeException(
- "BundleCheck: storing properties threw: " + e);
- }
- }
-
- /**
- * Fetch the check value properties as a DownloadManager resource.
- */
-
- private static void loadProperties() {
- properties = new Properties();
- try {
- InputStream in = new BufferedInputStream(
- DownloadManager.class.getResourceAsStream(
- DownloadManager.CHECK_VALUES_FILE));
- if (in == null)
- throw new RuntimeException("BundleCheck: unable to locate " +
- DownloadManager.CHECK_VALUES_FILE + " as resource");
- properties.load(in);
- in.close();
- } catch (Exception e) {
- throw new RuntimeException("BundleCheck: loadProperties threw " +
- e);
- }
- }
-
- /* Get the check value Properties object */
-
- private synchronized static Properties getProperties() {
- if (properties == null) {
- // If this fails it means addProperty has been used inappropriately
- loadProperties();
- }
- return properties;
- }
-
- /* Reset the properties with an empty Properties object */
-
- public static void resetProperties() {
- properties = null;
- }
-
- /* The BundleCheck expressed as a String */
-
- public String toString() {
- return ByteArrayToFromHexDigits.bytesToHexString(checkBytes);
- }
-
- /* Add the given BundleCheck as a property to bundleCheckvalueProperties */
-
- private void addProperty(String name) {
- // When first called by SplitJRE just start with empty object
- // rather than allowing a load to happen, as it does at install time.
- if (properties == null) {
- properties = new Properties();
- }
- getProperties().put(name, toString());
- }
-
- /* private ctor for creating/initializing a BundleCheck */
-
- private BundleCheck(byte[] checkBytes) {
- this.checkBytes = checkBytes;
- }
-
- /* private ctor for creating a BundleCheck with a given name and known
- Property value. */
-
- private BundleCheck(String name) {
- String hexString = getProperties().getProperty(name);
- if (hexString == null) {
- throw new RuntimeException(
- "BundleCheck: no check property for bundle: " + name);
- }
- this.checkBytes = ByteArrayToFromHexDigits.hexStringToBytes(hexString);
- }
-
- /* Make a BundleCheck from the contents of the given file or a Bundle
- name. Save the new object's value as a property if saveProperty is
- true. Behavior is only defined for name or file being null, but not
- both, and for saveProperty to be true only when both name and file
- are not null.
- Any IO or other exception implies an unexpected and fatal internal
- error and results in a RuntimeException. */
-
- private static BundleCheck getInstance(String name,
- File file, boolean saveProperty) {
- if (file == null ) {
- return new BundleCheck(name);
-
- } else {
- StandaloneMessageDigest checkDigest = null;
- try {
- FileInputStream checkFileStream = new FileInputStream(file);
- checkDigest = StandaloneMessageDigest.getInstance("SHA-1");
-
- // Compute a check code across all of the file bytes.
- // NOTE that every time a bundle is created, even from
- // the "same bits", it may be different wrt to the security
- // code because of slight variations build to build. For
- // example, the JVM build normally contains an
- // auto-incrementing build number, built archives might have
- // timestamps, etc.
-
- int readCount;
- byte[] messageStreamBuff =
- new byte[DIGEST_STREAM_BUFFER_SIZE];
- do {
- readCount = checkFileStream.read(messageStreamBuff);
- if (readCount > 0) {
- checkDigest.update(messageStreamBuff,0,readCount);
- }
- } while (readCount != -1);
- checkFileStream.close();
-
- } catch (Exception e) {
- throw new RuntimeException(
- "BundleCheck.addProperty() caught: " + e);
- }
- BundleCheck bc = new BundleCheck(checkDigest.digest());
- if (saveProperty) {
- bc.addProperty(name);
- }
- return bc;
- }
- }
-
- /* Create a BundleCheck from the given file */
-
- public static BundleCheck getInstance(File file) {
- return getInstance(null, file, false);
- }
-
- /* Create a BundleCheck from the given bundle name */
-
- static BundleCheck getInstance(String name) {
- return getInstance(name, null, false);
- }
-
- /* Create a BundleCheck from the given bundle name and file and
- use it to make and save a security check Property value. */
-
- public static void addProperty(String name, File file) {
- getInstance(name, file, true);
- }
-
- /* Create a bundlecheck from the given bundle name and file and
- add a Property value for it. */
-
- static void add(String name, File file) {
- getInstance(name, file, true).addProperty(name);
- }
-
- /* Compare two BundkCheck instances for equal check values */
-
- boolean equals(BundleCheck b) {
- if ((checkBytes == null) || (b.checkBytes == null)) {
- return false;
- }
- if (checkBytes.length != b.checkBytes.length) {
- return false;
- }
- for (int i = 0; i < checkBytes.length; i++) {
- if (checkBytes[i] != b.checkBytes[i]) {
- if (DownloadManager.debug) {
- System.out.println(
- "BundleCheck.equals mismatch between this: " +
- toString() + " and param: " + b.toString());
- }
- return false;
- }
- }
- return true;
- }
-
- /* After SplitJRE is used to restructure the JRE into a "core JRE" and
- a set of Java Kernel "bundles", if extra compression is available
- the bundles are extracted and rearchived with zero compression by
- deploy build make steps. The newly compressed bundle names are then
- passed to this main with the path of the kernel core JRE to have new
- bundle security check values computed and the corresponding properties
- updated in rt.jar. If extra compression isn't available then this main is
- never used and the default jar/zip bundle compression and security
- codes created by SplitJRE are left in place and ready to use. */
-
- public static void main(String[] args) {
- if (args.length < 2) {
- System.err.println("Usage: java BundleCheck <jre path> " +
- "<bundle 1 name> ... <bundle N name>");
- return;
- }
-
- // Make a security check code for each bundle file
- for (int arg = 1; arg < args.length; arg++) {
- BundleCheck.addProperty(args[arg],
- new File(args[arg] + BUNDLE_SUFFIX));
- }
-
- // Store the new check code properties below the current directory
- BundleCheck.storeProperties(DownloadManager.CHECK_VALUES_DIR);
-
- // Now swap the new properties file into the core rt.jar
- try {
- int status = Runtime.getRuntime().exec(
- "jar uf " + args[0] + "\\lib\\rt.jar " +
- DownloadManager.CHECK_VALUES_DIR).waitFor();
- if (status != 0) {
- System.err.println(
- "BundleCheck: exec of jar uf gave nonzero status");
- return;
- }
- } catch (Exception e) {
- System.err.println("BundleCheck: exec of jar uf threw: " + e);
- return;
- }
- } // main
-}
--- a/jdk/src/share/classes/sun/jkernel/ByteArrayToFromHexDigits.java Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,138 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.jkernel;
-
-/**
- * TODO: The JRE and deploy build code (SplitJRE) can be made a bit smarter
- * then cryto hashcode byte arrays can be used directly, eliminating the need
- * for this class altogether. So just leave this alone until it can be removed.
- * TODO: Change "Digits" to "String" for uniformity and more intuitive names.
- * A lightweight class to provide convert between hex digits and
- * <code>byte[]</code>.
- *<p>
- * TODO: Try to get this built without the -source 1.3 -target -1.3 options,
- * which prevent use of java.text.Format, assuming this wouldn't bloat the
- * JK rt.jar. Also, there still might be equivalent code hiding in the JDK
- * already, but preliminary searches havn't found it.
- */
-
-public final class ByteArrayToFromHexDigits {
-
- private static final char [] chars = new char[]
- {'0','1','2','3','4','5','6','7','8','9', 'A','B','C','D','E','F'};
-
- private static final boolean debug = false;
-
- /**
- * Converts the <code>byte[] b</code> into a <code>String</code> of
- * hex digits representing the integer values of all the bytes.
- *
- * @param b byte array to be converted
- * @return String representing <code>b</code> in hexadecimal
- * @throws IllegalArgumentException if <code>b</code> is null or zero length
- */
- public static String bytesToHexString(byte[] b) {
- if (debug ) {
- System.out.print("I: ");
- for(int i=0;i<b.length;i++) {
- System.out.format("%02X",b[i]);
- }
- System.out.println();
- }
- if ((b == null) || (b.length == 0)) {
- throw new IllegalArgumentException("argument null or zero length");
- }
- StringBuffer buff = new StringBuffer(b.length * 2);
- for (int i = 0; i < b.length; i++ ) {
- buff.insert(i*2,chars[(b[i] >> 4) & 0xf]);
- buff.insert(i*2+1,chars[b[i] & 0xf]);
- }
- if (debug ) {
- System.out.println("O: " + buff.toString());
- }
- return buff.toString();
- }
-
- // Convert one hex character to a 4 bit byte value
-
- private static byte hexCharToByte(char c) throws IllegalArgumentException {
- if ((c < '0') ||
- ( ((c < 'A') && (c > 'F')) && ((c < 'a') && (c > 'f'))) ) {
-
- throw new IllegalArgumentException("not a hex digit");
- }
-
- if (c > '9') {
- if (c > 'F') {
- return (byte) ((c - 'a' + 10) & 0xf);
- } else {
- return (byte) ((c - 'A' + 10) & 0xf);
- }
- } else {
- return (byte) ((c - '0') & 0xf);
- }
-
- }
-
- /**
- * Converts the <code>String d</code> assumed to contain a sequence
- * of hexadecimal digit characters into a <code>byte[]</code>.
- *
- * @param d String to be converted
- * @return byte array representing the hex string
- * @throws IllegalArgumentException if <code>d</code> is odd length,
- * contains a character outside the ranges of 0-9, a-f, and A-F,
- * or is zero length or null
- */
-
- public static byte[] hexStringToBytes(String d) throws IllegalArgumentException {
- if (d == null) {
- throw new IllegalArgumentException(
- "parameter cannot be null");
- }
-
- if (d.length() == 0) {
- throw new IllegalArgumentException(
- "parameter cannot be zero length");
- }
-
- if ((d.length() & 1) != 0) {
- throw new IllegalArgumentException(
- "odd length string");
- }
-
- byte[] b = new byte[d.length() / 2];
-
- // TODO Might be code in the JK initial bundle to do this better (i.e.
- // method that tests for a hex char?)
-
- for (int i=0;i<d.length();i+=2) {
- b[i/2] = (byte) (( (byte) (hexCharToByte(d.charAt(i))) << 4) +
- (byte) hexCharToByte(d.charAt(i+1)));
- }
- return b;
- }
-}
--- a/jdk/src/share/classes/sun/jkernel/DigestOutputStream.java Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,255 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package sun.jkernel;
-
-import java.io.FilterOutputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-import java.security.NoSuchAlgorithmException;
-import sun.jkernel.StandaloneMessageDigest;
-
-
-/*
- * This class provides the main functionality of <code>FilterOutputStream</code>,
- * and accumulates a check value as bytes are written to
- * it. The check value is available by method <code>getCheckValue</code>.
- *<p>
- * Operations on the public <code>out</code> field of this class should be
- * avoided to prevent an invalid check code being generated.
- *
- * TODO: The javadoc HTML hasn't been generated and eyeballed for yet.
- * TODO: There is a javadoc trick to cause the parent class javadoc to be
- * automagically used: try to take advantage of this.
- * TODO: Add javadoc links instead of <code>API</code> where it would be useful.
- * TODO: Go visit the Docs style guide again and get the periods right and
- * consistent for all sun.* classes.
- * @author Pete Soper
- * @see java.lang.FilterOutputStream
- * @see getCheckValue
- */
-
-public class DigestOutputStream extends FilterOutputStream {
- private static final String DEFAULT_ALGORITHM = "SHA-1";
-
- private final boolean debug = false;
-
- private StandaloneMessageDigest smd = null;
-
- private void initDigest(String algorithm) throws NoSuchAlgorithmException {
- smd = StandaloneMessageDigest.getInstance(algorithm);
- }
-
- // The underlying stream.
-
- protected volatile OutputStream out;
-
- /**
- * Creates a <code>DigestOutputStream</code> with stream <code>s</code>
- * to be checked with using <code>algorithm</code>.
- * <p>
- * If <code>algorithm</code> is not supported then
- * <code>NoSuchAlgorithm</code> is thrown.
- * <p>
- * See {linkplain sun.security.provider.StandaloneMessageDigest} for an
- * implementation-specific list of supported algorithms.
- *
- * @throws NoSuchAlgorithm if <code>algorithm</code> is not supported
- * @see sun.security.provider.StandaloneMessageDigest
- */
-
- /**
- * Creates an output stream filter built on top of
- * underlying output stream <code>out</code> for checking with
- * algorithm <code>algorithm</code>.
- * <p>
- * If <code>algorithm</code> is not supported then
- * <code>NoSuchAlgorithm</code> is thrown.
- * <p>
- * See {linkplain sun.security.provider.StandaloneMessageDigest} for an
- * implementation-specific list of supported algorithms.
- *
- * @param out the underlying output stream to be assigned to
- * the field <tt>this.out</tt> for later use, or
- * <code>null</code> if this instance is to be
- * created without an underlying stream.
- * @param algorithm the check algorithm to use.
- * @throws NoSuchAlgorithm if <code>algorithm</code> is not supported
- * @see sun.security.provider.StandaloneMessageDigest
- * @see DigestInputStream(InputStream, String)
- */
-
- public DigestOutputStream(OutputStream out, String algorithm) throws NoSuchAlgorithmException {
- super(out);
- initDigest(algorithm);
- this.out = out;
- }
-
- /**
- * Creates an output stream filter built on top of
- * underlying output stream <code>out</code> for the default checking
- * algorithm.
- * <p>
- * This implemention provides "SHA-1" as the default checking algorithm.
- *
- * @param out the underlying output stream to be assigned to
- * the field <tt>this.out</tt> for later use, or
- * <code>null</code> if this instance is to be
- * created without an underlying stream.
- * @see DigestInputStream(InputStream)
- */
-
- public DigestOutputStream(OutputStream out) {
- super(out);
- try {
- initDigest(DEFAULT_ALGORITHM);
- } catch (NoSuchAlgorithmException e) {
- // Impossible to get here, but stranger things have happened...
- throw new RuntimeException("DigestOutputStream() unknown algorithm");
- }
- // superstition from a test failure this.out = out;
- }
-
- /**
- * Writes a byte specified by <code>v</code> to this stream
- * and updates the check information.
- *
- *
- * @param v the byte to be written.
- * @throws IOException if an I/O error occurs.
- */
- public void write(int v) throws IOException {
- super.write(v);
- // TODO Could create this array once
- byte[] b = new byte[] {(byte) (v & 0xff)};
- smd.update(b,0,1);
- }
-
- /**
- * Writes the bytes in array <code>data</code>
- * to this stream and updates the check information.
- *
- * @param data the data.
- * @throws IOException if an I/O error occurs.
- * @throws NullPointerException if <code>data</code> is <code>null</code>
- */
- public void write(byte[] data) throws IOException {
- write(data,0,data.length);
- }
-
- /**
- * Writes a sub array as a sequence of bytes to this output stream and
- * updates the check information.
- * @param data the data to be written
- * @param ofs the start offset in the data
- * @param len the number of bytes that are written
- * @throws IOException If an I/O error has occurred.
- * @throws NullPointerException if <code>data</code> is <code>null</code>
- * @throws IndexOutOfBoundsException If <code>ofs</code> is negative,
- * <code>len</code> is negative, or <code>len</code> is greater than
- * <code>b.length - ofs</code>
- */
- public void write(byte[] data, int ofs, int len) throws IOException {
- if (debug) {
- System.out.print("DigestOutputStream.write: ");
- for (int i=ofs; i<(len - ofs); i++) {
- System.out.format("%02X",data[i]);
- }
- System.out.println();
- }
- if (data == null) {
- throw new NullPointerException("null array in DigestOutputStream.write");
- } else if (ofs < 0 || len < 0 || len > data.length - ofs) {
- throw new IndexOutOfBoundsException();
- }
- //super.write(data,ofs,len);
- // WATCH OUT: FilterOutputStream does a byte at a time write(byte)
- // TODO: Will this work all the time, or is there another caveat
- // to publish
- out.write(data,ofs,len);
- if (debug) {
- System.out.println("DigestOutputStream.write before");
- }
- smd.update(data,ofs,len);
- if (debug) {
- System.out.println("DigestOutputStream.write after");
- }
- }
-
- /**
- * Closes this file output stream and releases any system resources
- * associated with this stream and makes the check value for the stream
- * available via <code>getCheckValue</code>. This file output stream may
- * no longer be used for writing bytes.
- *
- * @throws IOException if an I/O error occurs.
- * @see getCheckValue
- */
- public void close() throws IOException {
- super.close();
- }
-
- /**
- * Return the check value computed for the stream and reset the state of
- * check value generation.
- *
- * @return the check value bytes
- */
- public byte[] getCheckValue() {
- byte[] b = smd.digest();
- if (debug) {
- System.out.print("DigestOutputStream.getCheckValue: ");
- for (int i=0; i<b.length; i++) {
- System.out.format("%02X",b[i]);
- }
- System.out.println();
- }
- smd.reset();
- return b;
- }
-
- /**
- * Flushes this output stream.
- *
- * @throws IOException if an I/O error occurs.
- * @see java.io.FilterOutputStream#flush()
- */
- public void flush() throws IOException {
- super.flush();
- }
-
- /**
- * Compares two digests for equality. Does a simple byte compare.
- *
- * @param digesta one of the digests to compare.
- *
- * @param digestb the other digest to compare.
- *
- * @return true if the digests are equal, false otherwise.
- */
-// public static boolean isEqual(byte digesta[], byte digestb[]) {
-// return StandaloneMessageDigest.isEqual(digesta, digestb);
-// }
-
-}
--- a/jdk/src/share/classes/sun/jkernel/DownloadManager.java Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1786 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-package sun.jkernel;
-
-import java.io.*;
-import java.net.URLStreamHandlerFactory;
-import java.net.URL;
-import java.net.MalformedURLException;
-import java.security.*;
-import java.util.*;
-import java.util.concurrent.*;
-import java.util.jar.*;
-import java.util.zip.*;
-import sun.misc.BootClassLoaderHook;
-import sun.misc.Launcher;
-import sun.misc.URLClassPath;
-import sun.net.www.ParseUtil;
-
-/**
- * Handles the downloading of additional JRE components. The bootstrap class
- * loader automatically invokes DownloadManager when it comes across a resource
- * that can't be located.
- *
- *@author Ethan Nicholas
- */
-public class DownloadManager extends BootClassLoaderHook {
- public static final String KERNEL_DOWNLOAD_URL_PROPERTY =
- "kernel.download.url";
- public static final String KERNEL_DOWNLOAD_ENABLED_PROPERTY =
- "kernel.download.enabled";
-
- public static final String KERNEL_DOWNLOAD_DIALOG_PROPERTY =
- "kernel.download.dialog";
-
- public static final String KERNEL_DEBUG_PROPERTY = "kernel.debug";
- // disables JRE completion when set to true, used as part of the build
- // process
- public static final String KERNEL_NOMERGE_PROPERTY = "kernel.nomerge";
-
- public static final String KERNEL_SIMULTANEOUS_DOWNLOADS_PROPERTY =
- "kernel.simultaneous.downloads";
-
- // used to bypass some problems with JAR entry modtimes not matching.
- // originally was set to zero, but apparently the epochs are different
- // for zip and pack so the pack/unpack cycle was causing the modtimes
- // to change. With some recent changes to the reconstruction, I'm
- // not sure if this is actually necessary anymore.
- public static final int KERNEL_STATIC_MODTIME = 10000000;
-
- // indicates that bundles should be grabbed using getResource(), rather
- // than downloaded from a network path -- this is used during the build
- // process
- public static final String RESOURCE_URL = "internal-resource/";
- public static final String REQUESTED_BUNDLES_PATH = "lib" + File.separator +
- "bundles" + File.separator + "requested.list";
-
- private static final boolean disableDownloadDialog = "false".equals(
- System.getProperty(KERNEL_DOWNLOAD_DIALOG_PROPERTY));
-
- static boolean debug = "true".equals(
- System.getProperty(KERNEL_DEBUG_PROPERTY));
- // points to stderr in case we need to println before System.err is
- // initialized
- private static OutputStream errorStream;
- private static OutputStream logStream;
-
- static String MUTEX_PREFIX;
-
- static boolean complete;
-
- // 1 if jbroker started; 0 otherwise
- private static int _isJBrokerStarted = -1;
-
- // maps bundle names to URL strings
- private static Properties bundleURLs;
-
- public static final String JAVA_HOME = System.getProperty("java.home");
- public static final String USER_HOME = System.getProperty("user.home");
- public static final String JAVA_VERSION =
- System.getProperty("java.version");
- static final int BUFFER_SIZE = 2048;
-
- static volatile boolean jkernelLibLoaded = false;
-
- public static String DEFAULT_DOWNLOAD_URL =
- "http://javadl.sun.com/webapps/download/GetList/"
- + System.getProperty("java.runtime.version") + "-kernel/windows-i586/";
-
- private static final String CUSTOM_PREFIX = "custom";
- private static final String KERNEL_PATH_SUFFIX = "-kernel";
-
- public static final String JAR_PATH_PROPERTY = "jarpath";
- public static final String SIZE_PROPERTY = "size";
- public static final String DEPENDENCIES_PROPERTY = "dependencies";
- public static final String INSTALL_PROPERTY = "install";
-
- private static boolean reportErrors = true;
-
- static final int ERROR_UNSPECIFIED = 0;
- static final int ERROR_DISK_FULL = 1;
- static final int ERROR_MALFORMED_BUNDLE_PROPERTIES = 2;
- static final int ERROR_DOWNLOADING_BUNDLE_PROPERTIES = 3;
- static final int ERROR_MALFORMED_URL = 4;
- static final int ERROR_RETRY_CANCELLED = 5;
- static final int ERROR_NO_SUCH_BUNDLE = 6;
-
-
- // tracks whether the current thread is downloading. A count of zero means
- // not currently downloading, >0 means the current thread is downloading or
- // installing a bundle.
- static ThreadLocal<Integer> downloading = new ThreadLocal<Integer>() {
- protected Integer initialValue() {
- return 0;
- }
- };
-
- private static File[] additionalBootStrapPaths = { };
-
- private static String[] bundleNames;
- private static String[] criticalBundleNames;
-
- private static String downloadURL;
-
- private static boolean visitorIdDetermined;
- private static String visitorId;
-
- /**
- * File and path where the Check value properties are gotten from
- */
- public static String CHECK_VALUES_FILE = "check_value.properties";
- static String CHECK_VALUES_DIR = "sun/jkernel/";
- static String CHECK_VALUES_PATH = CHECK_VALUES_DIR + CHECK_VALUES_FILE;
-
- /**
- * The contents of the bundle.properties file, which contains various
- * information about individual bundles.
- */
- private static Map<String, Map<String, String>> bundleProperties;
-
-
- /**
- * The contents of the resource_map file, which maps resources
- * to their respective bundles.
- */
- private static Map<String, String> resourceMap;
-
-
- /**
- * The contents of the file_map file, which maps files
- * to their respective bundles.
- */
- private static Map<String, String> fileMap;
-
- private static boolean extDirDetermined;
- private static boolean extDirIncluded;
-
- static {
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- if (debug)
- println("DownloadManager startup");
-
- // this mutex is global and will apply to all different
- // version of java kernel installed on the local machine
- MUTEX_PREFIX = "jkernel";
- boolean downloadEnabled = !"false".equals(
- System.getProperty(KERNEL_DOWNLOAD_ENABLED_PROPERTY));
- complete = !getBundlePath().exists() ||
- !downloadEnabled;
-
- // only load jkernel.dll if we are not "complete".
- // DownloadManager will be loaded during build time, before
- // jkernel.dll is built. We only need to load jkernel.dll
- // when DownloadManager needs to download something, which is
- // not necessary during build time
- if (!complete) {
- loadJKernelLibrary();
- log("Log opened");
-
- if (isWindowsVista()) {
- getLocalLowTempBundlePath().mkdirs();
- }
-
- new Thread() {
- public void run() {
- startBackgroundDownloads();
- }
- }.start();
-
- try {
- String dummyPath;
- if (isWindowsVista()) {
- dummyPath = USER_HOME +
- "\\appdata\\locallow\\dummy.kernel";
- } else {
- dummyPath = USER_HOME + "\\dummy.kernel";
- }
-
- File f = new File(dummyPath);
- FileOutputStream out = new FileOutputStream(f, true);
- out.close();
- f.deleteOnExit();
-
- } catch (IOException e) {
- log(e);
- }
- // end of warm up code
-
- new Thread("BundleDownloader") {
- public void run() {
- downloadRequestedBundles();
- }
- }.start();
- }
- return null;
- }
- });
- }
-
-
- static synchronized void loadJKernelLibrary() {
- if (!jkernelLibLoaded) {
- try {
- System.loadLibrary("jkernel");
- jkernelLibLoaded = true;
- debug = getDebugProperty();
- } catch (Exception e) {
- throw new Error(e);
- }
- }
- }
-
- static String appendTransactionId(String url) {
- StringBuilder result = new StringBuilder(url);
- String visitorId = DownloadManager.getVisitorId();
- if (visitorId != null) {
- if (url.indexOf("?") == -1)
- result.append('?');
- else
- result.append('&');
- result.append("transactionId=");
- result.append(DownloadManager.getVisitorId());
- }
- return result.toString();
- }
-
-
- /**
- * Returns the URL for the directory from which bundles should be
- * downloaded.
- */
- static synchronized String getBaseDownloadURL() {
- if (downloadURL == null) {
- log("Determining download URL...");
- loadJKernelLibrary();
-
- /*
- * First check if system property has been set - system
- * property should take over registry key setting.
- */
- downloadURL = System.getProperty(
- DownloadManager.KERNEL_DOWNLOAD_URL_PROPERTY);
- log("System property kernel.download.url = " + downloadURL);
-
- /*
- * Now check if registry key has been set
- */
- if (downloadURL == null){
- downloadURL = getUrlFromRegistry();
- log("getUrlFromRegistry = " + downloadURL);
- }
-
- /*
- * Use default download url
- */
- if (downloadURL == null)
- downloadURL = DEFAULT_DOWNLOAD_URL;
- log("Final download URL: " + downloadURL);
- }
- return downloadURL;
- }
-
-
- /**
- * Loads a file representing a node tree. The format is described in
- * SplitJRE.writeTreeMap(). The node paths (such as
- * core/java/lang/Object.class) are interpreted with the root node as the
- * value and the remaining nodes as
- * the key, so the mapping for this entry would be java/lang/Object.class =
- * core.
- */
- static Map<String, String> readTreeMap(InputStream rawIn)
- throws IOException {
- // "token level" refers to the 0-31 byte that occurs prior to every
- // token in the stream, and would be e.g. <0> core <1> java <2> lang
- // <3> Object.class <3> String.class, which gives us two mappings:
- // java/lang/Object.class = core, and java/lang/String.class = core.
- // See the format description in SplitJRE.writeTreeMap for more details.
- Map<String, String> result = new HashMap<String, String>();
- InputStream in = new BufferedInputStream(rawIn);
- // holds the current token sequence,
- // e.g. {"core", "java", "lang", "Object.class"}
- List<String> tokens = new ArrayList<String>();
- StringBuilder currentToken = new StringBuilder();
- for (;;) {
- int c = in.read();
- if (c == -1) // eof
- break;
- if (c < 32) { // new token level
- if (tokens.size() > 0) {
- // replace the null at the end of the list with the token
- // we just finished reading
- tokens.set(tokens.size() - 1, currentToken.toString());
- }
-
- currentToken.setLength(0);
-
- if (c > tokens.size()) {
- // can't increase by more than one token level at a step
- throw new InternalError("current token level is " +
- (tokens.size() - 1) + " but encountered token " +
- "level " + c);
- }
- else if (c == tokens.size()) {
- // token level increased by 1; this means we are still
- // adding tokens for the current mapping -- e.g. we have
- // read "core", "java", "lang" and are just about to read
- // "Object.class"
- // add a placeholder for the new token
- tokens.add(null);
- }
- else {
- // we just stayed at the same level or backed up one or more
- // token levels; this means that the current sequence is
- // complete and needs to be added to the result map
- StringBuilder key = new StringBuilder();
- // combine all tokens except the first into a single string
- for (int i = 1; i < tokens.size(); i++) {
- if (i > 1)
- key.append('/');
- key.append(tokens.get(i));
- }
- // map the combined string to the first token, e.g.
- // java/lang/Object.class = core
- result.put(key.toString(), tokens.get(0));
- // strip off tokens until we get back to the current token
- // level
- while (c < tokens.size())
- tokens.remove(c);
- // placeholder for upcoming token
- tokens.add(null);
- }
- }
- else if (c < 254) // character
- currentToken.append((char) c);
- else if (c == 255)
- currentToken.append(".class");
- else { // out-of-band value
- throw new InternalError("internal error processing " +
- "resource_map (can't-happen error)");
- }
- }
- if (tokens.size() > 0) // add token we just finished reading
- tokens.set(tokens.size() - 1, currentToken.toString());
- StringBuilder key = new StringBuilder();
- // add the last entry to the map
- for (int i = 1; i < tokens.size(); i++) {
- if (i > 1)
- key.append('/');
- key.append(tokens.get(i));
- }
- if (!tokens.isEmpty())
- result.put(key.toString(), tokens.get(0));
- in.close();
- return Collections.unmodifiableMap(result);
- }
-
-
- /**
- * Returns the contents of the resource_map file, which maps
- * resources names to their respective bundles.
- */
- public static Map<String, String> getResourceMap() throws IOException {
- if (resourceMap == null) {
- InputStream in = DownloadManager.class.getResourceAsStream("resource_map");
- if (in != null) {
- in = new BufferedInputStream(in);
- try {
- resourceMap = readTreeMap(in);
- in.close();
- }
- catch (IOException e) {
- // turns out we can be returned a broken stream instead of
- // just null
- resourceMap = new HashMap<String, String>();
- complete = true;
- log("Can't find resource_map, forcing complete to true");
- }
- in.close();
- }
- else {
- resourceMap = new HashMap<String, String>();
- complete = true;
- log("Can't find resource_map, forcing complete to true");
- }
-
- for (int i = 1; ; i++) { // run through the numbered custom bundles
- String name = CUSTOM_PREFIX + i;
- File customPath = new File(getBundlePath(), name + ".jar");
- if (customPath.exists()) {
- JarFile custom = new JarFile(customPath);
- Enumeration entries = custom.entries();
- while (entries.hasMoreElements()) {
- JarEntry entry = (JarEntry) entries.nextElement();
- if (!entry.isDirectory())
- resourceMap.put(entry.getName(), name);
- }
- }
- else
- break;
- }
- }
- return resourceMap;
- }
-
-
- /**
- * Returns the contents of the file_map file, which maps
- * file names to their respective bundles.
- */
- public static Map<String, String> getFileMap() throws IOException {
- if (fileMap == null) {
- InputStream in = DownloadManager.class.getResourceAsStream("file_map");
- if (in != null) {
- in = new BufferedInputStream(in);
- try {
- fileMap = readTreeMap(in);
- in.close();
- }
- catch (IOException e) {
- // turns out we can be returned a broken stream instead of
- // just null
- fileMap = new HashMap<String, String>();
- complete = true;
- log("Can't find file_map, forcing complete to true");
- }
- in.close();
- }
- else {
- fileMap = new HashMap<String, String>();
- complete = true;
- log("Can't find file_map, forcing complete to true");
- }
- }
- return fileMap;
- }
-
-
- /**
- * Returns the contents of the bundle.properties file, which maps
- * bundle names to a pipe-separated list of their properties. Properties
- * include:
- * jarpath - By default, the JAR files (unpacked from classes.pack in the
- * bundle) are stored under lib/bundles. The jarpath property
- * overrides this default setting, causing the JAR to be unpacked
- * at the specified location. This is used to preserve the
- * identity of JRE JAR files such as lib/deploy.jar.
- * size - The size of the download in bytes.
- */
- private static synchronized Map<String, Map<String, String>> getBundleProperties()
- throws IOException {
- if (bundleProperties == null) {
- InputStream in = DownloadManager.class.getResourceAsStream("bundle.properties");
- if (in == null) {
- complete = true;
- log("Can't find bundle.properties, forcing complete to true");
- return null;
- }
- in = new BufferedInputStream(in);
- Properties tmp = new Properties();
- tmp.load(in);
- bundleProperties = new HashMap<String, Map<String, String>>();
- for (Map.Entry e : tmp.entrySet()) {
- String key = (String) e.getKey();
- String[] properties = ((String) e.getValue()).split("\\|");
- Map<String, String> map = new HashMap<String, String>();
- for (String entry : properties) {
- int equals = entry.indexOf("=");
- if (equals == -1)
- throw new InternalError("error parsing bundle.properties: " +
- entry);
- map.put(entry.substring(0, equals).trim(),
- entry.substring(equals + 1).trim());
- }
- bundleProperties.put(key, map);
- }
- in.close();
- }
- return bundleProperties;
- }
-
-
- /**
- * Returns a single bundle property value loaded from the bundle.properties
- * file.
- */
- static String getBundleProperty(String bundleName, String property) {
- try {
- Map<String, Map<String, String>> props = getBundleProperties();
- Map/*<String, String>*/ map = props != null ? props.get(bundleName) : null;
- return map != null ? (String) map.get(property) : null;
- }
- catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
-
- /** Returns an array of all supported bundle names. */
- static String[] getBundleNames() throws IOException {
- if (bundleNames == null) {
- Set<String> result = new HashSet<String>();
- Map<String, String> resourceMap = getResourceMap();
- if (resourceMap != null)
- result.addAll(resourceMap.values());
- Map<String, String> fileMap = getFileMap();
- if (fileMap != null)
- result.addAll(fileMap.values());
- bundleNames = result.toArray(new String[result.size()]);
- }
- return bundleNames;
- }
-
-
- /**
- * Returns an array of all "critical" (must be downloaded prior to
- * completion) bundle names.
- */
- private static String[] getCriticalBundleNames() throws IOException {
- if (criticalBundleNames == null) {
- Set<String> result = new HashSet<String>();
- Map<String, String> fileMap = getFileMap();
- if (fileMap != null)
- result.addAll(fileMap.values());
- criticalBundleNames = result.toArray(new String[result.size()]);
- }
- return criticalBundleNames;
- }
-
-
- public static void send(InputStream in, OutputStream out)
- throws IOException {
- byte[] buffer = new byte[BUFFER_SIZE];
- int c;
- while ((c = in.read(buffer)) > 0)
- out.write(buffer, 0, c);
- }
-
-
- /**
- * Determine whether all bundles have been downloaded, and if so create
- * the merged jars that will eventually replace rt.jar and resoures.jar.
- * IMPORTANT: this method should only be called from the background
- * download process.
- */
- static void performCompletionIfNeeded() {
- if (debug)
- log("DownloadManager.performCompletionIfNeeded: checking (" +
- complete + ", " + System.getProperty(KERNEL_NOMERGE_PROPERTY)
- + ")");
- if (complete ||
- "true".equals(System.getProperty(KERNEL_NOMERGE_PROPERTY)))
- return;
- Bundle.loadReceipts();
- try {
- if (debug) {
- List critical = new ArrayList(Arrays.asList(getCriticalBundleNames()));
- critical.removeAll(Bundle.receipts);
- log("DownloadManager.performCompletionIfNeeded: still need " +
- critical.size() + " bundles (" + critical + ")");
- }
- if (Bundle.receipts.containsAll(Arrays.asList(getCriticalBundleNames()))) {
- log("DownloadManager.performCompletionIfNeeded: running");
- // all done!
- new Thread("JarMerger") {
- public void run() {
- createMergedJars();
- }
- }.start();
- }
- }
- catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
-
- /**
- * Returns the bundle corresponding to a given resource path (e.g.
- * "java/lang/Object.class"). If the resource does not appear in a bundle,
- * null is returned.
- */
- public static Bundle getBundleForResource(String resource)
- throws IOException {
- String bundleName = getResourceMap().get(resource);
- return bundleName != null ? Bundle.getBundle(bundleName) : null;
- }
-
-
- /**
- * Returns the bundle corresponding to a given JRE file path (e.g.
- * "bin/awt.dll"). If the file does not appear in a bundle, null is
- * returned.
- */
- private static Bundle getBundleForFile(String file) throws IOException {
- String bundleName = getFileMap().get(file);
- return bundleName != null ? Bundle.getBundle(bundleName) : null;
- }
-
-
- /**
- * Returns the path to the lib/bundles directory.
- */
- static File getBundlePath() {
- return new File(JAVA_HOME, "lib" + File.separatorChar + "bundles");
- }
-
- private static String getAppDataLocalLow() {
- return USER_HOME + "\\appdata\\locallow\\";
- }
-
- public static String getKernelJREDir() {
- return "kerneljre" + JAVA_VERSION;
- }
-
- static File getLocalLowTempBundlePath() {
- return new File(getLocalLowKernelJava() + "-bundles");
- }
-
- static String getLocalLowKernelJava() {
- return getAppDataLocalLow() + getKernelJREDir();
- }
-
- // To be revisited:
- // How DownloadManager maintains its bootstrap class path.
- // sun.misc.Launcher.getBootstrapClassPath() returns
- // DownloadManager.getBootstrapClassPath() instead.
- //
- // So should no longer need to lock the Launcher.class.
- // In addition, additionalBootStrapPaths is not really needed
- // if it obtains the initial bootclasspath during DownloadManager's
- // initialization.
- private static void addEntryToBootClassPath(File path) {
- // Must acquire these locks in this order
- synchronized(Launcher.class) {
- synchronized(DownloadManager.class) {
- File[] newBootStrapPaths = new File[
- additionalBootStrapPaths.length + 1];
- System.arraycopy(additionalBootStrapPaths, 0, newBootStrapPaths,
- 0, additionalBootStrapPaths.length);
- newBootStrapPaths[newBootStrapPaths.length - 1] = path;
- additionalBootStrapPaths = newBootStrapPaths;
- if (bootstrapClassPath != null)
- bootstrapClassPath.addURL(getFileURL(path));
- }
- }
- }
-
- /**
- * Returns the kernel's bootstrap class path which includes the additional
- * JARs downloaded
- */
- private static URLClassPath bootstrapClassPath = null;
- private synchronized static
- URLClassPath getBootClassPath(URLClassPath bcp,
- URLStreamHandlerFactory factory)
- {
- if (bootstrapClassPath == null) {
- bootstrapClassPath = new URLClassPath(bcp.getURLs(), factory);
- for (File path : additionalBootStrapPaths) {
- bootstrapClassPath.addURL(getFileURL(path));
- }
- }
- return bootstrapClassPath;
- }
-
- private static URL getFileURL(File file) {
- try {
- file = file.getCanonicalFile();
- } catch (IOException e) {}
-
- try {
- return ParseUtil.fileToEncodedURL(file);
- } catch (MalformedURLException e) {
- // Should never happen since we specify the protocol...
- throw new InternalError();
- }
- }
-
- /**
- * Scan through java.ext.dirs to see if the lib/ext directory is included.
- * If not, we shouldn't be "finding" lib/ext jars for download.
- */
- private static synchronized boolean extDirIsIncluded() {
- if (!extDirDetermined) {
- extDirDetermined = true;
- String raw = System.getProperty("java.ext.dirs");
- String ext = JAVA_HOME + File.separator + "lib" + File.separator + "ext";
- int index = 0;
- while (index < raw.length()) {
- int newIndex = raw.indexOf(File.pathSeparator, index);
- if (newIndex == -1)
- newIndex = raw.length();
- String path = raw.substring(index, newIndex);
- if (path.equals(ext)) {
- extDirIncluded = true;
- break;
- }
- index = newIndex + 1;
- }
- }
- return extDirIncluded;
- }
-
-
- private static String doGetBootClassPathEntryForResource(
- String resourceName) {
- boolean retry = false;
- do {
- Bundle bundle = null;
- try {
- bundle = getBundleForResource(resourceName);
- if (bundle != null) {
- File path = bundle.getJarPath();
- boolean isExt = path.getParentFile().getName().equals("ext");
- if (isExt && !extDirIsIncluded()) // this is a lib/ext jar, but
- return null; // lib/ext isn't in the path
- if (getBundleProperty(bundle.getName(), JAR_PATH_PROPERTY) == null) {
- // if the bundle doesn't have its own JAR path, that means it's
- // going to be merged into rt.jar. If we already have the
- // merged rt.jar, we can simply point to that.
- Bundle merged = Bundle.getBundle("merged");
- if (merged != null && merged.isInstalled()) {
- File jar;
- if (resourceName.endsWith(".class"))
- jar = merged.getJarPath();
- else
- jar = new File(merged.getJarPath().getPath().replaceAll("merged-rt.jar",
- "merged-resources.jar"));
- addEntryToBootClassPath(jar);
- return jar.getPath();
- }
- }
- if (!bundle.isInstalled()) {
- bundle.queueDependencies(true);
- log("On-demand downloading " +
- bundle.getName() + " for resource " +
- resourceName + "...");
- bundle.install();
- log(bundle + " install finished.");
- }
- log("Double-checking " + bundle + " state...");
- if (!bundle.isInstalled()) {
- throw new IllegalStateException("Expected state of " +
- bundle + " to be INSTALLED");
- }
- if (isExt) {
- // don't add lib/ext entries to the boot class path, add
- // them to the extension classloader instead
- Launcher.addURLToExtClassLoader(path.toURL());
- return null;
- }
-
- if ("javaws".equals(bundle.getName())) {
- Launcher.addURLToAppClassLoader(path.toURL());
- log("Returning null for javaws");
- return null;
- }
-
- if ("core".equals(bundle.getName()))
- return null;
-
- // else add to boot class path
- addEntryToBootClassPath(path);
-
- return path.getPath();
- }
- return null; // not one of the JRE's classes
- }
- catch (Throwable e) {
- retry = handleException(e);
- log("Error downloading bundle for " +
- resourceName + ":");
- log(e);
- if (e instanceof IOException) {
- // bundle did not get installed correctly, remove incomplete
- // bundle files
- if (bundle != null) {
- if (bundle.getJarPath() != null) {
- File packTmp = new File(bundle.getJarPath() + ".pack");
- packTmp.delete();
- bundle.getJarPath().delete();
- }
- if (bundle.getLocalPath() != null) {
- bundle.getLocalPath().delete();
- }
- bundle.setState(Bundle.NOT_DOWNLOADED);
- }
- }
- }
- } while (retry);
- sendErrorPing(ERROR_RETRY_CANCELLED); // bundle failed to install, user cancelled
-
- return null; // failed, user chose not to retry
- }
-
- static synchronized void sendErrorPing(int code) {
- try {
- File bundlePath;
- if (isWindowsVista()) {
- bundlePath = getLocalLowTempBundlePath();
- } else {
- bundlePath = getBundlePath();
- }
- File tmp = new File(bundlePath, "tmp");
- File errors = new File(tmp, "errors");
- String errorString = String.valueOf(code);
- if (errors.exists()) {
- BufferedReader in = new BufferedReader(new FileReader(errors));
- String line = in.readLine();
- while (line != null) {
- if (line.equals(errorString))
- return; // we have already pinged this error
- line = in.readLine();
- }
- }
- tmp.mkdirs();
- Writer out = new FileWriter(errors, true);
- out.write(errorString + System.getProperty("line.separator"));
- out.close();
- postDownloadError(code);
- }
- catch (IOException e) {
- e.printStackTrace();
- }
- }
-
-
-
- /**
- * Displays an error dialog and prompts the user to retry or cancel.
- * Returns true if the user chose to retry, false if he chose to cancel.
- */
- static boolean handleException(Throwable e) {
- if (e instanceof IOException) {
- // I don't know of a better method to determine the root cause of
- // the exception, unfortunately...
- int code = ERROR_UNSPECIFIED;
- if (e.getMessage().indexOf("not enough space") != -1)
- code = ERROR_DISK_FULL;
- return askUserToRetryDownloadOrQuit(code);
- }
- else
- return false;
- }
-
-
- static synchronized void flushBundleURLs() {
- bundleURLs = null;
- }
-
-
- static synchronized Properties getBundleURLs(boolean showUI)
- throws IOException {
- if (bundleURLs == null) {
- log("Entering DownloadManager.getBundleURLs");
- String base = getBaseDownloadURL();
- String url = appendTransactionId(base);
- // use PID instead of createTempFile or other random filename so as
- // to avoid dependencies on the random number generator libraries
- File bundlePath = null;
- // write temp file to locallow directory on vista
- if (isWindowsVista()) {
- bundlePath = getLocalLowTempBundlePath();
- } else {
- bundlePath = getBundlePath();
- }
- File tmp = new File(bundlePath, "urls." + getCurrentProcessId() +
- ".properties");
- try {
- log("Downloading from " + url + " to " + tmp);
- downloadFromURL(url, tmp, "", showUI);
- bundleURLs = new Properties();
- if (tmp.exists()) {
- addToTotalDownloadSize((int) tmp.length()); // better late than never
- InputStream in = new FileInputStream(tmp);
- in = new BufferedInputStream(in);
- bundleURLs.load(in);
- in.close();
- if (bundleURLs.isEmpty()) {
- fatalError(ERROR_MALFORMED_BUNDLE_PROPERTIES);
- }
- } else {
- fatalError(ERROR_DOWNLOADING_BUNDLE_PROPERTIES);
- }
- } finally {
- // delete the temp file
- if (!debug)
- tmp.delete();
- }
- log("Leaving DownloadManager.getBundleURLs");
- // else an error occurred and user chose not to retry; leave
- // bundleURLs empty so we don't continually try to re-download it
- }
- return bundleURLs;
- }
-
- /**
- * Checks to see if the specified resource is part of a bundle, and if so
- * downloads it. Returns either a string which should be added to the boot
- * class path (the newly-downloaded JAR's location), or null to indicate
- * that it isn't one of the JRE's resources or could not be downloaded.
- */
- public static String getBootClassPathEntryForResource(
- final String resourceName) {
- if (debug)
- log("Entering getBootClassPathEntryForResource(" + resourceName + ")");
- if (isJREComplete() || downloading == null ||
- resourceName.startsWith("sun/jkernel")) {
- if (debug)
- log("Bailing: " + isJREComplete() + ", " + (downloading == null));
- return null;
- }
- incrementDownloadCount();
- try {
- String result = (String) AccessController.doPrivileged(
- new PrivilegedAction() {
- public Object run() {
- return (String) doGetBootClassPathEntryForResource(
- resourceName);
- }
- }
- );
- log("getBootClassPathEntryForResource(" + resourceName + ") == " + result);
- return result;
- }
- finally {
- decrementDownloadCount();
- }
- }
-
-
- /**
- * Called by the boot class loader when it encounters a class it can't find.
- * This method will check to see if the class is part of a bundle, and if so
- * download it. Returns either a string which should be added to the boot
- * class path (the newly-downloaded JAR's location), or null to indicate
- * that it isn't one of the JRE's classes or could not be downloaded.
- */
- public static String getBootClassPathEntryForClass(final String className) {
- return getBootClassPathEntryForResource(className.replace('.', '/') +
- ".class");
- }
-
-
- private static boolean doDownloadFile(String relativePath)
- throws IOException {
- Bundle bundle = getBundleForFile(relativePath);
- if (bundle != null) {
- bundle.queueDependencies(true);
- log("On-demand downloading " + bundle.getName() +
- " for file " + relativePath + "...");
- bundle.install();
- return true;
- }
- return false;
- }
-
-
- /**
- * Locates the bundle for the specified JRE file (e.g. "bin/awt.dll") and
- * installs it. Returns true if the file is indeed part of the JRE and has
- * now been installed, false if the file is not part of the JRE, and throws
- * an IOException if the file is part of the JRE but could not be
- * downloaded.
- */
- public static boolean downloadFile(final String relativePath)
- throws IOException {
- if (isJREComplete() || downloading == null)
- return false;
-
- incrementDownloadCount();
- try {
- Object result =
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- File path = new File(JAVA_HOME,
- relativePath.replace('/', File.separatorChar));
- if (path.exists())
- return true;
- try {
- return new Boolean(doDownloadFile(relativePath));
- }
- catch (IOException e) {
- return e;
- }
- }
- });
- if (result instanceof Boolean)
- return ((Boolean) result).booleanValue();
- else
- throw (IOException) result;
- }
- finally {
- decrementDownloadCount();
- }
- }
-
-
- // increments the counter that tracks whether the current thread is involved
- // in any download-related activities. A non-zero count indicates that the
- // thread is currently downloading or installing a bundle.
- static void incrementDownloadCount() {
- downloading.set(downloading.get() + 1);
- }
-
-
- // increments the counter that tracks whether the current thread is involved
- // in any download-related activities. A non-zero count indicates that the
- // thread is currently downloading or installing a bundle.
- static void decrementDownloadCount() {
- // will generate an exception if incrementDownloadCount() hasn't been
- // called first, this is intentional
- downloading.set(downloading.get() - 1);
- }
-
-
- /**
- * Returns <code>true</code> if the current thread is in the process of
- * downloading a bundle. This is called by DownloadManager.loadLibrary()
- * that is called by System.loadLibrary(), so
- * that when we run into a library required by the download process itself,
- * we don't call back into DownloadManager in an attempt to download it
- * (which would lead to infinite recursion).
- *
- * All classes and libraries required to download classes must by
- * definition already be present. So if this method returns true, we are
- * currently in the middle of performing a download, and the class or
- * library load must be happening due to the download itself. We can
- * immediately abort such requests -- the class or library should already
- * be present. If it isn't, we're not going to be able to download it,
- * since we have just established that it is required to perform a
- * download, and we might as well just let the NoClassDefFoundError /
- * UnsatisfiedLinkError occur.
- */
- public static boolean isCurrentThreadDownloading() {
- return downloading != null ? downloading.get() > 0 : false;
- }
-
-
- /**
- * Returns true if everything is downloaded and the JRE has been
- * reconstructed. Also returns true if kernel functionality is disabled
- * for any other reason.
- */
- public static boolean isJREComplete() {
- return complete;
- }
-
-
- // called by BackgroundDownloader
- static void doBackgroundDownloads(boolean showProgress) {
- if (!complete) {
- if (!showProgress && !debug)
- reportErrors = false;
- try {
- // install swing first for ergonomic reasons
- Bundle swing = Bundle.getBundle("javax_swing_core");
- if (!swing.isInstalled())
- swing.install(showProgress, false, false);
- // install remaining bundles
- for (String name : getCriticalBundleNames()) {
- Bundle bundle = Bundle.getBundle(name);
- if (!bundle.isInstalled()) {
- bundle.install(showProgress, false, true);
- }
- }
- shutdown();
- }
- catch (IOException e) {
- log(e);
- }
- }
- }
-
- // copy receipt file to destination path specified
- static void copyReceiptFile(File from, File to) throws IOException {
- DataInputStream in = new DataInputStream(
- new BufferedInputStream(new FileInputStream(from)));
- OutputStream out = new FileOutputStream(to);
- String line = in.readLine();
- while (line != null) {
- out.write((line + '\n').getBytes("utf-8"));
- line = in.readLine();
- }
- in.close();
- out.close();
- }
-
-
- private static void downloadRequestedBundles() {
- log("Checking for requested bundles...");
- try {
- File list = new File(JAVA_HOME, REQUESTED_BUNDLES_PATH);
- if (list.exists()) {
- FileInputStream in = new FileInputStream(list);
- ByteArrayOutputStream buffer = new ByteArrayOutputStream();
- send(in, buffer);
- in.close();
-
- // split string manually to avoid relying on regexes or
- // StringTokenizer
- String raw = new String(buffer.toByteArray(), "utf-8");
- List/*<String>*/ bundles = new ArrayList/*<String>*/();
- StringBuilder token = new StringBuilder();
- for (int i = 0; i < raw.length(); i++) {
- char c = raw.charAt(i);
- if (c == ',' || Character.isWhitespace(c)) {
- if (token.length() > 0) {
- bundles.add(token.toString());
- token.setLength(0);
- }
- }
- else
- token.append(c);
- }
- if (token.length() > 0)
- bundles.add(token.toString());
- log("Requested bundles: " + bundles);
- for (int i = 0; i < bundles.size(); i++) {
- Bundle bundle = Bundle.getBundle((String) bundles.get(i));
- if (bundle != null && !bundle.isInstalled()) {
- log("Downloading " + bundle + " due to requested.list");
- bundle.install(true, false, false);
- }
- }
- }
- }
- catch (IOException e) {
- log(e);
- }
- }
-
-
- static void fatalError(int code) {
- fatalError(code, null);
- }
-
-
- /**
- * Called to cleanly shut down the VM when a fatal download error has
- * occurred. Calls System.exit() if outside of the Java Plug-In, otherwise
- * throws an error.
- */
- static void fatalError(int code, String arg) {
- sendErrorPing(code);
-
- for (int i = 0; i < Bundle.THREADS; i++)
- bundleInstallComplete();
- if (reportErrors)
- displayError(code, arg);
- // inPlugIn check isn't 100% reliable but should be close enough.
- // headless is for the browser side of things in the out-of-process
- // plug-in
- boolean inPlugIn = (Boolean.getBoolean("java.awt.headless") ||
- System.getProperty("javaplugin.version") != null);
- KernelError error = new KernelError("Java Kernel bundle download failed");
- if (inPlugIn)
- throw error;
- else {
- log(error);
- System.exit(1);
- }
- }
-
-
- // start the background download process using the jbroker broker process
- // the method will first launch the broker process, if it is not already
- // running
- // it will then send the command necessary to start the background download
- // process to the broker process
- private static void startBackgroundDownloadWithBroker() {
-
- if (!BackgroundDownloader.getBackgroundDownloadProperty()) {
- // If getBackgroundDownloadProperty() returns false
- // we're doing the downloads from this VM; we don't want to
- // spawn another one
- return;
- }
-
- // launch broker process if necessary
- if (!launchBrokerProcess()) {
- return;
- }
-
-
- String kernelDownloadURLProperty = getBaseDownloadURL();
-
- String kernelDownloadURL;
-
- // only set KERNEL_DOWNLOAD_URL_PROPERTY if we override
- // the default download url
- if (kernelDownloadURLProperty == null ||
- kernelDownloadURLProperty.equals(DEFAULT_DOWNLOAD_URL)) {
- kernelDownloadURL = " ";
- } else {
- kernelDownloadURL = kernelDownloadURLProperty;
- }
-
- startBackgroundDownloadWithBrokerImpl(kernelDownloadURLProperty);
- }
-
- private static void startBackgroundDownloads() {
- if (!complete) {
- if (BackgroundDownloader.getBackgroundMutex().acquire(0)) {
- // we don't actually need to hold the mutex -- it was just a
- // quick check to see if there is any point in even attempting
- // to start the background downloader
- BackgroundDownloader.getBackgroundMutex().release();
- if (isWindowsVista()) {
- // use broker process to start background download
- // at high integrity
- startBackgroundDownloadWithBroker();
- } else {
- BackgroundDownloader.startBackgroundDownloads();
- }
- }
- }
- }
-
-
- /**
- * Increases the total download size displayed in the download progress
- * dialog.
- */
- static native void addToTotalDownloadSize(int size);
-
-
- /**
- * Displays a progress dialog while downloading from the specified URL.
- *
- *@param url the URL string from which to download
- *@param file the destination path
- *@param name the user-visible name of the component we are downloading
- */
- static void downloadFromURL(String url, File file, String name,
- boolean showProgress) {
- // do not show download dialog if kernel.download.dialog is false
- downloadFromURLImpl(url, file, name,
- disableDownloadDialog ? false : showProgress);
- }
-
- private static native void downloadFromURLImpl(String url, File file,
- String name, boolean showProgress);
-
- // This is for testing purposes only - allows to specify URL
- // to download kernel bundles from through the registry key.
- static native String getUrlFromRegistry();
-
- static native String getVisitorId0();
-
- static native void postDownloadComplete();
-
- static native void postDownloadError(int code);
-
- // Returns the visitor ID set by the installer, will be sent to the server
- // during bundle downloads for logging purposes.
- static synchronized String getVisitorId() {
- if (!visitorIdDetermined) {
- visitorIdDetermined = true;
- visitorId = getVisitorId0();
- }
- return visitorId;
- }
-
- // display an error message using a native dialog
- public static native void displayError(int code, String arg);
-
- // prompt user whether to retry download, or quit
- // returns true if the user chose to retry
- public static native boolean askUserToRetryDownloadOrQuit(int code);
-
- // returns true if we are running Windows Vista; false otherwise
- static native boolean isWindowsVista();
-
- private static native void startBackgroundDownloadWithBrokerImpl(
- String command);
-
- private static int isJBrokerStarted() {
- if (_isJBrokerStarted == -1) {
- // initialize state of jbroker
- _isJBrokerStarted = isJBrokerRunning() ? 1 : 0;
- }
- return _isJBrokerStarted;
- }
-
- // returns true if broker process (jbroker) is running; false otherwise
- private static native boolean isJBrokerRunning();
-
- // returns true if we are running in IE protected mode; false otherwise
- private static native boolean isIEProtectedMode();
-
- private static native boolean launchJBroker(String jbrokerPath);
-
- static native void bundleInstallStart();
-
- static native void bundleInstallComplete();
-
- private static native boolean moveFileWithBrokerImpl(String fromPath,
- String userHome);
-
- private static native boolean moveDirWithBrokerImpl(String fromPath,
- String userHome);
-
- static boolean moveFileWithBroker(String fromPath) {
- // launch jbroker if necessary
- if (!launchBrokerProcess()) {
- return false;
- }
-
- return moveFileWithBrokerImpl(fromPath, USER_HOME);
- }
-
- static boolean moveDirWithBroker(String fromPath) {
- // launch jbroker if necessary
- if (!launchBrokerProcess()) {
- return false;
- }
-
- return moveDirWithBrokerImpl(fromPath, USER_HOME);
- }
-
- private static synchronized boolean launchBrokerProcess() {
- // launch jbroker if necessary
- if (isJBrokerStarted() == 0) {
- // launch jbroker if needed
- boolean ret = launchJBroker(JAVA_HOME);
- // set state of jbroker
- _isJBrokerStarted = ret ? 1 : 0;
- return ret;
- }
- return true;
- }
-
- private static class StreamMonitor implements Runnable {
- private InputStream istream;
- public StreamMonitor(InputStream stream) {
- istream = new BufferedInputStream(stream);
- new Thread(this).start();
- }
- public void run() {
- byte[] buffer = new byte[4096];
- try {
- int ret = istream.read(buffer);
- while (ret != -1) {
- ret = istream.read(buffer);
- }
- } catch (IOException e) {
- try {
- istream.close();
- } catch (IOException e2) {
- } // Should allow clean exit when process shuts down
- }
- }
- }
-
-
- /** Copy a file tree, excluding certain named files. */
- private static void copyAll(File src, File dest, Set/*<String>*/ excludes)
- throws IOException {
- if (!excludes.contains(src.getName())) {
- if (src.isDirectory()) {
- File[] children = src.listFiles();
- if (children != null) {
- for (int i = 0; i < children.length; i++)
- copyAll(children[i],
- new File(dest, children[i].getName()),
- excludes);
- }
- }
- else {
- dest.getParentFile().mkdirs();
- FileInputStream in = new FileInputStream(src);
- FileOutputStream out = new FileOutputStream(dest);
- send(in, out);
- in.close();
- out.close();
- }
- }
- }
-
-
- public static void dumpOutput(final Process p) {
- Thread outputReader = new Thread("outputReader") {
- public void run() {
- try {
- InputStream in = p.getInputStream();
- DownloadManager.send(in, System.out);
- } catch (IOException e) {
- log(e);
- }
- }
- };
- outputReader.start();
- Thread errorReader = new Thread("errorReader") {
- public void run() {
- try {
- InputStream in = p.getErrorStream();
- DownloadManager.send(in, System.err);
- } catch (IOException e) {
- log(e);
- }
- }
- };
- errorReader.start();
- }
-
-
- /**
- * Creates the merged rt.jar and resources.jar files.
- */
- private static void createMergedJars() {
- log("DownloadManager.createMergedJars");
- File bundlePath;
- if (isWindowsVista()) {
- bundlePath = getLocalLowTempBundlePath();
- } else {
- bundlePath = getBundlePath();
- }
- File tmp = new File(bundlePath, "tmp");
- // explicitly check the final location, not the (potentially) local-low
- // location -- a local-low finished isn't good enough to call it done
- if (new File(getBundlePath(), "tmp" + File.separator + "finished").exists())
- return; // already done
- log("DownloadManager.createMergedJars: running");
- tmp.mkdirs();
- boolean retry = false;
- do {
- try {
- Bundle.getBundle("merged").install(false, false, true);
- postDownloadComplete();
- // done, write an empty "finished" file to flag completion
- File finished = new File(tmp, "finished");
- new FileOutputStream(finished).close();
- if (isWindowsVista()) {
- if (!moveFileWithBroker(getKernelJREDir() +
- "-bundles\\tmp\\finished")) {
- throw new IOException("unable to create 'finished' file");
- }
- }
- log("DownloadManager.createMergedJars: created " + finished);
- // next JRE startup will move these files into their final
- // locations, as long as no other JREs are running
-
- // clean up the local low bundle directory on vista
- if (isWindowsVista()) {
- File tmpDir = getLocalLowTempBundlePath();
- File[] list = tmpDir.listFiles();
- if (list != null) {
- for (int i = 0; i < list.length; i++) {
- list[i].delete();
- }
- }
- tmpDir.delete();
- log("Finished cleanup, " + tmpDir + ".exists(): " + tmpDir.exists());
- }
- }
- catch (IOException e) {
- log(e);
- }
- }
- while (retry);
- log("DownloadManager.createMergedJars: finished");
- }
-
-
- private static void shutdown() {
- try {
- ExecutorService e = Bundle.getThreadPool();
- e.shutdown();
- e.awaitTermination(60 * 60 * 24, TimeUnit.SECONDS);
- }
- catch (InterruptedException e) {
- }
- }
-
-
- // returns the registry key for kernel.debug
- static native boolean getDebugKey();
-
-
- // returns the final value for the kernel debug property
- public static boolean getDebugProperty(){
- /*
- * Check registry key value
- */
- boolean debugEnabled = getDebugKey();
-
- /*
- * Check system property - it should override the registry
- * key value.
- */
- if (System.getProperty(KERNEL_DEBUG_PROPERTY) != null) {
- debugEnabled = Boolean.valueOf(
- System.getProperty(KERNEL_DEBUG_PROPERTY));
- }
- return debugEnabled;
-
- }
-
-
- /**
- * Outputs to the error stream even when System.err has not yet been
- * initialized.
- */
- static void println(String msg) {
- if (System.err != null)
- System.err.println(msg);
- else {
- try {
- if (errorStream == null)
- errorStream = new FileOutputStream(FileDescriptor.err);
- errorStream.write((msg +
- System.getProperty("line.separator")).getBytes("utf-8"));
- }
- catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
- }
-
-
- static void log(String msg) {
- if (debug) {
- println(msg);
- try {
- if (logStream == null) {
- loadJKernelLibrary();
- File path = isWindowsVista() ? getLocalLowTempBundlePath() :
- getBundlePath();
- path = new File(path, "kernel." + getCurrentProcessId() + ".log");
- logStream = new FileOutputStream(path);
- }
- logStream.write((msg +
- System.getProperty("line.separator")).getBytes("utf-8"));
- logStream.flush();
- }
- catch (IOException e) {
- // ignore
- }
- }
- }
-
-
- static void log(Throwable e) {
- ByteArrayOutputStream buffer = new ByteArrayOutputStream();
- PrintStream p = new PrintStream(buffer);
- e.printStackTrace(p);
- p.close();
- log(buffer.toString(0));
- }
-
-
- /** Dump the contents of a map to System.out. */
- private static void printMap(Map/*<String, String>*/ map) {
- int size = 0;
- Set<Integer> identityHashes = new HashSet<Integer>();
- Iterator/*<Map.Entry<String, String>>*/ i = map.entrySet().iterator();
- while (i.hasNext()) {
- Map.Entry/*<String, String>*/ e = (Map.Entry) i.next();
- String key = (String) e.getKey();
- String value = (String) e.getValue();
- System.out.println(key + ": " + value);
- Integer keyHash = Integer.valueOf(System.identityHashCode(key));
- if (!identityHashes.contains(keyHash)) {
- identityHashes.add(keyHash);
- size += key.length();
- }
- Integer valueHash = Integer.valueOf(System.identityHashCode(value));
- if (!identityHashes.contains(valueHash)) {
- identityHashes.add(valueHash);
- size += value.length();
- }
- }
- System.out.println(size + " bytes");
- }
-
-
- /** Process the "-dumpmaps" command-line argument. */
- private static void dumpMaps() throws IOException {
- System.out.println("Resources:");
- System.out.println("----------");
- printMap(getResourceMap());
- System.out.println();
- System.out.println("Files:");
- System.out.println("----------");
- printMap(getFileMap());
- }
-
-
- /** Process the "-download" command-line argument. */
- private static void processDownload(String bundleName) throws IOException {
- if (bundleName.equals("all")) {
- debug = true;
- doBackgroundDownloads(true);
- performCompletionIfNeeded();
- }
- else {
- Bundle bundle = Bundle.getBundle(bundleName);
- if (bundle == null) {
- println("Unknown bundle: " + bundleName);
- System.exit(1);
- }
- else
- bundle.install();
- }
- }
-
-
- static native int getCurrentProcessId();
-
- private DownloadManager() {
- }
-
- // Invoked by jkernel VM after the VM is initialized
- static void setBootClassLoaderHook() {
- if (!isJREComplete()) {
- sun.misc.BootClassLoaderHook.setHook(new DownloadManager());
- }
- }
-
- // Implementation of the BootClassLoaderHook interface
- public String loadBootstrapClass(String name) {
- // Check for download before we look for it. If
- // DownloadManager ends up downloading it, it will add it to
- // our search path before we proceed to the findClass().
- return DownloadManager.getBootClassPathEntryForClass(name);
- }
-
- public boolean loadLibrary(String name) {
- try {
- if (!DownloadManager.isJREComplete() &&
- !DownloadManager.isCurrentThreadDownloading()) {
- return DownloadManager.downloadFile("bin/" +
- System.mapLibraryName(name));
- // it doesn't matter if the downloadFile call returns false --
- // it probably just means that this is a user library, as
- // opposed to a JRE library
- }
- } catch (IOException e) {
- throw new UnsatisfiedLinkError("Error downloading library " +
- name + ": " + e);
- } catch (NoClassDefFoundError e) {
- // This happens while Java itself is being compiled; DownloadManager
- // isn't accessible when this code is first invoked. It isn't an
- // issue, as if we can't find DownloadManager, we can safely assume
- // that additional code is not available for download.
- }
- return false;
- }
-
- public boolean prefetchFile(String name) {
- try {
- return sun.jkernel.DownloadManager.downloadFile(name);
- } catch (IOException ioe) {
- return false;
- }
- }
-
- public String getBootstrapResource(String name) {
- try {
- // If this is a known JRE resource, ensure that its bundle is
- // downloaded. If it isn't known, we just ignore the download
- // failure and check to see if we can find the resource anyway
- // (which is possible if the boot class path has been modified).
- return DownloadManager.getBootClassPathEntryForResource(name);
- } catch (NoClassDefFoundError e) {
- // This happens while Java itself is being compiled; DownloadManager
- // isn't accessible when this code is first invoked. It isn't an
- // issue, as if we can't find DownloadManager, we can safely assume
- // that additional code is not available for download.
- return null;
- }
- }
-
- public URLClassPath getBootstrapClassPath(URLClassPath bcp,
- URLStreamHandlerFactory factory)
- {
- return DownloadManager.getBootClassPath(bcp, factory);
- }
-
- public boolean isCurrentThreadPrefetching() {
- return DownloadManager.isCurrentThreadDownloading();
- }
-
- public static void main(String[] arg) throws Exception {
- AccessController.checkPermission(new AllPermission());
-
- boolean valid = false;
- if (arg.length == 2 && arg[0].equals("-install")) {
- valid = true;
- Bundle bundle = new Bundle() {
- protected void updateState() {
- // the bundle path was provided on the command line, so we
- // just claim it has already been "downloaded" to the local
- // filesystem
- state = DOWNLOADED;
- }
- };
-
- File jarPath;
- int index = 0;
- do {
- index++;
- jarPath = new File(getBundlePath(),
- CUSTOM_PREFIX + index + ".jar");
- }
- while (jarPath.exists());
- bundle.setName(CUSTOM_PREFIX + index);
- bundle.setLocalPath(new File(arg[1]));
- bundle.setJarPath(jarPath);
- bundle.setDeleteOnInstall(false);
- bundle.install();
- }
- else if (arg.length == 2 && arg[0].equals("-download")) {
- valid = true;
- processDownload(arg[1]);
- }
- else if (arg.length == 1 && arg[0].equals("-dumpmaps")) {
- valid = true;
- dumpMaps();
- }
- else if (arg.length == 2 && arg[0].equals("-sha1")) {
- valid = true;
- System.out.println(BundleCheck.getInstance(new File(arg[1])));
- }
- else if (arg.length == 1 && arg[0].equals("-downloadtest")) {
- valid = true;
- File file = File.createTempFile("download", ".test");
- for (;;) {
- file.delete();
- downloadFromURL(getBaseDownloadURL(), file, "URLS", true);
- System.out.println("Downloaded " + file.length() + " bytes");
- }
- }
- if (!valid) {
- System.out.println("usage: DownloadManager -install <path>.zip |");
- System.out.println(" DownloadManager -download " +
- "<bundle_name> |");
- System.out.println(" DownloadManager -dumpmaps");
- System.exit(1);
- }
- }
-}
--- a/jdk/src/share/classes/sun/jkernel/KernelError.java Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package sun.jkernel;
-
-/**
- * Thrown to indicate that Java Kernel is unable to install a required bundle
- * and the JRE is therefore not adhering to specifications.
- */
-public class KernelError extends VirtualMachineError {
- /**
- * Constructs a <code>KernelError</code> with no detail message.
- */
- public KernelError() {
- super();
- }
-
- /**
- * Constructs a <code>KernelError</code> with the specified
- * detail message.
- *
- * @param s the detail message.
- */
- public KernelError(String s) {
- super(s);
- }
-}
--- a/jdk/src/share/classes/sun/jkernel/Mutex.java Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package sun.jkernel;
-
-/**
- * A mutex which works even between different processes. Currently implemented
- * only on Win32.
- *
- *@author Ethan Nicholas
- */
-public class Mutex {
- static {
- try {
- System.loadLibrary("jkernel");
- }
- catch (Exception e) {
- throw new Error(e);
- }
- }
-
- private String uniqueId;
- private long handle;
-
- public static Mutex create(String uniqueId) {
- return new Mutex(uniqueId);
- }
-
-
- private Mutex(String uniqueId) {
- this.uniqueId = uniqueId;
- this.handle = createNativeMutex(uniqueId);
- }
-
-
- private static native long createNativeMutex(String uniqueId);
-
-
- public native void acquire();
-
-
- public native boolean acquire(int timeout);
-
-
- public native void release();
-
-
- public native void destroyNativeMutex();
-
-
- public void dispose() {
- destroyNativeMutex();
- handle = 0;
- }
-
-
- public void finalize() {
- dispose();
- }
-
-
- public String toString() {
- return "Mutex[" + uniqueId + "]";
- }
-}
--- a/jdk/src/share/classes/sun/jkernel/StandaloneByteArrayAccess.java Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,155 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-/*
- * This is a pure subset of package-private class
- * sun.security.provider.ByteArrayAccess. The subset consists of only the simple
- * shift and boolean operations needed for the one current client of this
- * class (sun.jkernel.StandaloneSHA) and omits optimization code and comments
- * not relevant to the subset. No semantic changes have been made.
- * A few long lines were broken to conform to JDK coding style.
- * Pete Soper, August, 2007.
- */
-
-package sun.jkernel;
-
-/**
- * Methods for converting between byte[] and int[]/long[].
- *
- * @since 1.6
- * @version 1.1, 05/26/06
- * @author Andreas Sterbenz
- */
-final class StandaloneByteArrayAccess {
-
- private StandaloneByteArrayAccess() {
- // empty
- }
-
- /**
- * byte[] to int[] conversion, little endian byte order.
- */
- static void b2iLittle(byte[] in, int inOfs, int[] out, int outOfs,
- int len) {
- len += inOfs;
- while (inOfs < len) {
- out[outOfs++] = ((in[inOfs ] & 0xff) )
- | ((in[inOfs + 1] & 0xff) << 8)
- | ((in[inOfs + 2] & 0xff) << 16)
- | ((in[inOfs + 3] ) << 24);
- inOfs += 4;
- }
- }
-
- /**
- * int[] to byte[] conversion, little endian byte order.
- */
- static void i2bLittle(int[] in, int inOfs, byte[] out, int outOfs,
- int len) {
- len += outOfs;
- while (outOfs < len) {
- int i = in[inOfs++];
- out[outOfs++] = (byte)(i );
- out[outOfs++] = (byte)(i >> 8);
- out[outOfs++] = (byte)(i >> 16);
- out[outOfs++] = (byte)(i >> 24);
- }
- }
-
- /**
- * byte[] to int[] conversion, big endian byte order.
- */
- static void b2iBig(byte[] in, int inOfs, int[] out, int outOfs, int len) {
- len += inOfs;
- while (inOfs < len) {
- out[outOfs++] = ((in[inOfs + 3] & 0xff) )
- | ((in[inOfs + 2] & 0xff) << 8)
- | ((in[inOfs + 1] & 0xff) << 16)
- | ((in[inOfs ] ) << 24);
- inOfs += 4;
- }
- }
-
- /**
- * int[] to byte[] conversion, big endian byte order.
- */
- static void i2bBig(int[] in, int inOfs, byte[] out, int outOfs, int len) {
- len += outOfs;
- while (outOfs < len) {
- int i = in[inOfs++];
- out[outOfs++] = (byte)(i >> 24);
- out[outOfs++] = (byte)(i >> 16);
- out[outOfs++] = (byte)(i >> 8);
- out[outOfs++] = (byte)(i );
- }
- }
-
- // Store one 32-bit value into out[outOfs..outOfs+3] in big endian order.
- static void i2bBig4(int val, byte[] out, int outOfs) {
- out[outOfs ] = (byte)(val >> 24);
- out[outOfs + 1] = (byte)(val >> 16);
- out[outOfs + 2] = (byte)(val >> 8);
- out[outOfs + 3] = (byte)(val );
- }
-
- /**
- * byte[] to long[] conversion, big endian byte order.
- */
- static void b2lBig(byte[] in, int inOfs, long[] out, int outOfs, int len) {
- len += inOfs;
- while (inOfs < len) {
- int i1 = ((in[inOfs + 3] & 0xff) )
- | ((in[inOfs + 2] & 0xff) << 8)
- | ((in[inOfs + 1] & 0xff) << 16)
- | ((in[inOfs ] ) << 24);
- inOfs += 4;
- int i2 = ((in[inOfs + 3] & 0xff) )
- | ((in[inOfs + 2] & 0xff) << 8)
- | ((in[inOfs + 1] & 0xff) << 16)
- | ((in[inOfs ] ) << 24);
- out[outOfs++] = ((long)i1 << 32) | (i2 & 0xffffffffL);
- inOfs += 4;
- }
- }
-
- /**
- * long[] to byte[] conversion
- */
- static void l2bBig(long[] in, int inOfs, byte[] out, int outOfs, int len) {
- len += outOfs;
- while (outOfs < len) {
- long i = in[inOfs++];
- out[outOfs++] = (byte)(i >> 56);
- out[outOfs++] = (byte)(i >> 48);
- out[outOfs++] = (byte)(i >> 40);
- out[outOfs++] = (byte)(i >> 32);
- out[outOfs++] = (byte)(i >> 24);
- out[outOfs++] = (byte)(i >> 16);
- out[outOfs++] = (byte)(i >> 8);
- out[outOfs++] = (byte)(i );
- }
- }
-
-}
--- a/jdk/src/share/classes/sun/jkernel/StandaloneMessageDigest.java Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,395 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-/*
- * This is a combination and adaptation of subsets of
- * <code>java.security.MessageDigest</code> and
- * <code>sun.security.provider.DigestBase</code> to provide a class offering
- * most of the same public methods of <code>MessageDigest</code> while not
- * depending on the Java Security Framework.
- * <p>
- * One algorithm is currently supported: "SHA-1".
- * <p>
- * NOTE If <code>java.security.MessageDigest</code>,
- * <code>sun.security.provider.DigestBase</code> or
- * <code>sun.security.provider.SHA</code> are modified, review of those
- * modifications should be done to determine any possible implications for this
- * class and <code>StandaloneSHA</code>.
- */
-
-package sun.jkernel;
-
-import java.security.DigestException;
-import java.security.ProviderException;
-import java.security.NoSuchAlgorithmException;
-
-/**
- * (Adapted from the <code>sun.security.provider.DigestBase</code> doc).
- * This is a simple subset of the Common base message digest implementation
- * for the Sun provider.
- * It implements most of the JCA methods as suitable for a Java message
- * digest
- * implementation of an algorithm based on a compression function (as all
- * commonly used algorithms are). The individual digest subclasses only need to
- * implement the following methods:
- *
- * . abstract void implCompress(byte[] b, int ofs);
- * . abstract void implDigest(byte[] out, int ofs);
- * . abstract void implReset();
- * <p>
- * No support for a clone() method is provided.
- * <p>
- * See the inline documentation for details.
- *
- * @since 1.5
- * @version 1.3, 08/08/07
- * @author Andreas Sterbenz (MessageDigest)
- * @author Pete Soper (this derived class)
- */
-public abstract class StandaloneMessageDigest {
-
- public static final boolean debug = false;
-
- /*
- * (Copied/adapted from <code>java.security.MessageDigest</code>
- *
- * This is a subset/simplification <code>java.security.MessageDigest</code>
- * that supports a fixed set of hashcode mechanisms (currently just
- * SHA-1) while preserving the following MessageDigest methods:
- *
- * public MessageDigest getInstance(String algorithm)
- * public final int getDigestLength()
- * public void reset()
- * public byte[] digest()
- * public void update(byte[] input, int offset, int len)
- * public final String getAlgorithm()
- * <p>
- * NOTE that the clone() method is not provided.
- */
-
- /**
- * Prevent direct instantiation except via the factory method.
- */
-
- private StandaloneMessageDigest() {
- // Keep javac happy.
- digestLength = 0;
- blockSize = 0;
- algorithm = null;
- buffer = null;
- }
-
- private String algorithm;
-
- // The state of this digest
- private static final int INITIAL = 0;
- private static final int IN_PROGRESS = 1;
- private int state = INITIAL;
-
- /**
- * Returns a StandaloneMessageDigest object that implements the specified
- * digest algorithm.
- *
- * <p> This method returns a new StandaloneMessageDigest for a single
- * algorithm provider.
- *
- * @param algorithm the name of the algorithm requested.
- *
- * @return a standalone Message Digest object that implements the specified algorithm.
- *
- * @exception NoSuchAlgorithmException if algorithm not supported
- *
- */
- public static StandaloneMessageDigest getInstance(String algorithm)
- throws NoSuchAlgorithmException {
- if (! algorithm.equals("SHA-1")) {
- throw new NoSuchAlgorithmException(algorithm + " not found");
- } else {
- return new StandaloneSHA();
- }
- }
-
- /**
- * Updates the digest using the specified array of bytes, starting
- * at the specified offset.
- *
- * @param input the array of bytes.
- *
- * @param offset the offset to start from in the array of bytes.
- *
- * @param len the number of bytes to use, starting at
- * <code>offset</code>.
- */
- public void update(byte[] input, int offset, int len) {
- if (debug) {
- System.out.println("StandaloneMessageDigest.update");
- (new Exception()).printStackTrace();
- }
- if (input == null) {
- throw new IllegalArgumentException("No input buffer given");
- }
- if (input.length - offset < len) {
- throw new IllegalArgumentException("Input buffer too short");
- }
- // No need to check for negative offset: engineUpdate does this
-
- engineUpdate(input, offset, len);
- state = IN_PROGRESS;
- }
-
- /**
- * Completes the hash computation by performing final operations
- * such as padding. The digest is reset after this call is made.
- *
- * @return the array of bytes for the resulting hash value.
- */
- public byte[] digest() {
- if (debug) {
- System.out.println("StandaloneMessageDigest.digest");
- }
- /* Resetting is the responsibility of implementors. */
- byte[] result = engineDigest();
- state = INITIAL;
- return result;
- }
-
- /**
- * Compares two digests for equality. Does a simple byte compare.
- *
- * @param digesta one of the digests to compare.
- *
- * @param digestb the other digest to compare.
- *
- * @return true if the digests are equal, false otherwise.
- */
- public static boolean isEqual(byte digesta[], byte digestb[]) {
- if (digesta.length != digestb.length)
- return false;
-
- for (int i = 0; i < digesta.length; i++) {
- if (digesta[i] != digestb[i]) {
- return false;
- }
- }
- return true;
- }
-
- /**
- * Resets the digest for further use.
- */
- public void reset() {
- if (debug) {
- System.out.println("StandaloneMessageDigest.reset");
- }
- engineReset();
- state = INITIAL;
- }
-
- /**
- * Returns a string that identifies the algorithm, independent of
- * implementation details. The name should be a standard
- * Java Security name (such as "SHA", "MD5", and so on).
- * See Appendix A in the <a href=
- * "../../../technotes/guides/security/crypto/CryptoSpec.html#AppA">
- * Java Cryptography Architecture API Specification & Reference </a>
- * for information about standard algorithm names.
- *
- * @return the name of the algorithm
- */
- public final String getAlgorithm() {
- return this.algorithm;
- }
-
- /**
- * Returns the length of the digest in bytes.
- *
- * @return the digest length in bytes.
- *
- * @since 1.2
- */
- public final int getDigestLength() {
- return engineGetDigestLength();
- }
-
- //* End of copied/adapted <code>java.security.MessageDigest</code>
-
- // Start of copied/adapted <code>sun.security.provider.DigestBase</code>
-
- // one element byte array, temporary storage for update(byte)
- private byte[] oneByte;
-
- // length of the message digest in bytes
- private final int digestLength;
-
- // size of the input to the compression function in bytes
- private final int blockSize;
- // buffer to store partial blocks, blockSize bytes large
- // Subclasses should not access this array directly except possibly in their
- // implDigest() method. See MD5.java as an example.
- final byte[] buffer;
- // offset into buffer
- private int bufOfs;
-
- // number of bytes processed so far. subclasses should not modify
- // this value.
- // also used as a flag to indicate reset status
- // -1: need to call engineReset() before next call to update()
- // 0: is already reset
- long bytesProcessed;
-
- /**
- * Main constructor.
- */
- StandaloneMessageDigest(String algorithm, int digestLength, int blockSize) {
- // super();
- this.algorithm = algorithm;
- this.digestLength = digestLength;
- this.blockSize = blockSize;
- buffer = new byte[blockSize];
- }
-
- // return digest length. See JCA doc.
- protected final int engineGetDigestLength() {
- return digestLength;
- }
-
- // single byte update. See JCA doc.
- protected final void engineUpdate(byte b) {
- if (oneByte == null) {
- oneByte = new byte[1];
- }
- oneByte[0] = b;
- engineUpdate(oneByte, 0, 1);
- }
-
- // array update. See JCA doc.
- protected final void engineUpdate(byte[] b, int ofs, int len) {
- if (len == 0) {
- return;
- }
- if ((ofs < 0) || (len < 0) || (ofs > b.length - len)) {
- throw new ArrayIndexOutOfBoundsException();
- }
- if (bytesProcessed < 0) {
- engineReset();
- }
- bytesProcessed += len;
- // if buffer is not empty, we need to fill it before proceeding
- if (bufOfs != 0) {
- int n = Math.min(len, blockSize - bufOfs);
- System.arraycopy(b, ofs, buffer, bufOfs, n);
- bufOfs += n;
- ofs += n;
- len -= n;
- if (bufOfs >= blockSize) {
- // compress completed block now
- implCompress(buffer, 0);
- bufOfs = 0;
- }
- }
- // compress complete blocks
- while (len >= blockSize) {
- implCompress(b, ofs);
- len -= blockSize;
- ofs += blockSize;
- }
- // copy remainder to buffer
- if (len > 0) {
- System.arraycopy(b, ofs, buffer, 0, len);
- bufOfs = len;
- }
- }
-
- // reset this object. See JCA doc.
- protected final void engineReset() {
- if (bytesProcessed == 0) {
- // already reset, ignore
- return;
- }
- implReset();
- bufOfs = 0;
- bytesProcessed = 0;
- }
-
- // return the digest. See JCA doc.
- protected final byte[] engineDigest() throws ProviderException {
- byte[] b = new byte[digestLength];
- try {
- engineDigest(b, 0, b.length);
- } catch (DigestException e) {
- throw (ProviderException)
- new ProviderException("Internal error").initCause(e);
- }
- return b;
- }
-
- // return the digest in the specified array. See JCA doc.
- protected final int engineDigest(byte[] out, int ofs, int len)
- throws DigestException {
- if (len < digestLength) {
- throw new DigestException("Length must be at least "
- + digestLength + " for " + algorithm + "digests");
- }
- if ((ofs < 0) || (len < 0) || (ofs > out.length - len)) {
- throw new DigestException("Buffer too short to store digest");
- }
- if (bytesProcessed < 0) {
- engineReset();
- }
- implDigest(out, ofs);
- bytesProcessed = -1;
- return digestLength;
- }
-
- /**
- * Core compression function. Processes blockSize bytes at a time
- * and updates the state of this object.
- */
- abstract void implCompress(byte[] b, int ofs);
-
- /**
- * Return the digest. Subclasses do not need to reset() themselves,
- * StandaloneMessageDigest calls implReset() when necessary.
- */
- abstract void implDigest(byte[] out, int ofs);
-
- /**
- * Reset subclass specific state to their initial values. StandaloneMessageDigest
- * calls this method when necessary.
- */
- abstract void implReset();
-
- // padding used for the MD5, and SHA-* message digests
- static final byte[] padding;
-
- static {
- // we need 128 byte padding for SHA-384/512
- // and an additional 8 bytes for the high 8 bytes of the 16
- // byte bit counter in SHA-384/512
- padding = new byte[136];
- padding[0] = (byte)0x80;
- }
-
-}
--- a/jdk/src/share/classes/sun/jkernel/StandaloneSHA.java Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,190 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.jkernel;
-
-import static sun.jkernel.StandaloneByteArrayAccess.*;
-
-/**
- * This is a slightly modified subset of the
- * <code>sun.security.provider.SHA</code> class that
- * is not dependent on the regular Java Security framework classes. It
- * implements the Secure Hash Algorithm (SHA-1) developed by
- * the National Institute of Standards and Technology along with the
- * National Security Agency. This is the updated version of SHA
- * fip-180 as superseded by fip-180-1.
- * <p>
- * The <code>sun.security.provider.SHA.clonde()</code> method is not
- * implemented and other, formerly public methods, are package private.
- *
- */
-final class StandaloneSHA extends StandaloneMessageDigest {
-
- static final boolean debug = false;
-
- // Buffer of int's and count of characters accumulated
- // 64 bytes are included in each hash block so the low order
- // bits of count are used to know how to pack the bytes into ints
- // and to know when to compute the block and start the next one.
- private final int[] W;
-
- // state of this
- private final int[] state;
-
- /**
- * Creates a new StandaloneSHA object.
- */
- StandaloneSHA() {
- super("SHA-1", 20, 64);
- state = new int[5];
- W = new int[80];
- implReset();
- }
-
- /**
- * Resets the buffers and hash value to start a new hash.
- */
- void implReset() {
- if (debug) {
- System.out.print("StandaloneSHA.implR: " );
- }
- state[0] = 0x67452301;
- state[1] = 0xefcdab89;
- state[2] = 0x98badcfe;
- state[3] = 0x10325476;
- state[4] = 0xc3d2e1f0;
- }
-
- /**
- * Computes the final hash and copies the 20 bytes to the output array.
- */
- void implDigest(byte[] out, int ofs) {
- if (debug) {
- System.out.print("StandaloneSHA.implD: " );
- }
- long bitsProcessed = bytesProcessed << 3;
-
- int index = (int)bytesProcessed & 0x3f;
- int padLen = (index < 56) ? (56 - index) : (120 - index);
-
- engineUpdate(padding, 0, padLen);
-
- // System.out.println("Inserting: " + bitsProcessed);
- StandaloneByteArrayAccess.i2bBig4((int)(bitsProcessed >>> 32), buffer, 56);
- StandaloneByteArrayAccess.i2bBig4((int)bitsProcessed, buffer, 60);
- implCompress(buffer, 0);
-
- StandaloneByteArrayAccess.i2bBig(state, 0, out, ofs, 20);
- }
-
- // Constants for each round
- private final static int round1_kt = 0x5a827999;
- private final static int round2_kt = 0x6ed9eba1;
- private final static int round3_kt = 0x8f1bbcdc;
- private final static int round4_kt = 0xca62c1d6;
-
- /**
- * Compute a the hash for the current block.
- *
- * This is in the same vein as Peter Gutmann's algorithm listed in
- * the back of Applied Cryptography, Compact implementation of
- * "old" NIST Secure Hash Algorithm.
- */
- void implCompress(byte[] buf, int ofs) {
-
- if (debug) {
- System.out.print("StandaloneSHA.implC: " );
- for (int i=ofs; i<buf.length; i++) {
- System.out.format("%02X",buf[i]);
- }
- System.out.println();
- }
-
- StandaloneByteArrayAccess.b2iBig(buf, ofs, W, 0, 64);
-
- // The first 16 ints have the byte stream, compute the rest of
- // the buffer
- for (int t = 16; t <= 79; t++) {
- int temp = W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16];
- W[t] = (temp << 1) | (temp >>> 31);
- }
-
- int a = state[0];
- int b = state[1];
- int c = state[2];
- int d = state[3];
- int e = state[4];
-
- // Round 1
- for (int i = 0; i < 20; i++) {
- int temp = ((a<<5) | (a>>>(32-5))) +
- ((b&c)|((~b)&d))+ e + W[i] + round1_kt;
- e = d;
- d = c;
- c = ((b<<30) | (b>>>(32-30)));
- b = a;
- a = temp;
- }
-
- // Round 2
- for (int i = 20; i < 40; i++) {
- int temp = ((a<<5) | (a>>>(32-5))) +
- (b ^ c ^ d) + e + W[i] + round2_kt;
- e = d;
- d = c;
- c = ((b<<30) | (b>>>(32-30)));
- b = a;
- a = temp;
- }
-
- // Round 3
- for (int i = 40; i < 60; i++) {
- int temp = ((a<<5) | (a>>>(32-5))) +
- ((b&c)|(b&d)|(c&d)) + e + W[i] + round3_kt;
- e = d;
- d = c;
- c = ((b<<30) | (b>>>(32-30)));
- b = a;
- a = temp;
- }
-
- // Round 4
- for (int i = 60; i < 80; i++) {
- int temp = ((a<<5) | (a>>>(32-5))) +
- (b ^ c ^ d) + e + W[i] + round4_kt;
- e = d;
- d = c;
- c = ((b<<30) | (b>>>(32-30)));
- b = a;
- a = temp;
- }
- state[0] += a;
- state[1] += b;
- state[2] += c;
- state[3] += d;
- state[4] += e;
- }
-
-}
--- a/jdk/src/share/classes/sun/jvmstat/monitor/MonitoredVmUtil.java Wed Jul 05 17:34:21 2017 +0200
+++ b/jdk/src/share/classes/sun/jvmstat/monitor/MonitoredVmUtil.java Wed Feb 09 21:20:41 2011 -0800
@@ -179,18 +179,4 @@
}
}
- /**
- * Returns true if the target VM is a kernel VM
- *
- * @param vm the target MonitoredVm
- */
- public static boolean isKernelVM(MonitoredVm vm) throws MonitorException {
- StringMonitor jvmCapabilities =
- (StringMonitor)vm.findByName("sun.rt.jvmCapabilities");
- if (jvmCapabilities == null) {
- return false;
- } else {
- return jvmCapabilities.stringValue().charAt(IS_KERNEL_VM) == '1';
- }
- }
}
--- a/jdk/src/share/classes/sun/misc/BootClassLoaderHook.java Wed Jul 05 17:34:21 2017 +0200
+++ b/jdk/src/share/classes/sun/misc/BootClassLoaderHook.java Wed Feb 09 21:20:41 2011 -0800
@@ -34,10 +34,7 @@
* BootClassLoaderHook defines an interface for a hook to inject
* into the bootstrap class loader.
*
- * In jkernel build, the sun.jkernel.DownloadManager is set as
- * a BootClassLoaderHook by the jkernel VM after the VM is initialized.
- *
- * In other JDK builds, no hook is set.
+ * With jkernel now removed, no hook is set
*/
public abstract class BootClassLoaderHook {
private static BootClassLoaderHook bootLoaderHook = null;
--- a/jdk/src/share/classes/sun/tools/attach/HotSpotAttachProvider.java Wed Jul 05 17:34:21 2017 +0200
+++ b/jdk/src/share/classes/sun/tools/attach/HotSpotAttachProvider.java Wed Feb 09 21:20:41 2011 -0800
@@ -138,7 +138,6 @@
*/
void testAttachable(String id) throws AttachNotSupportedException {
MonitoredVm mvm = null;
- boolean isKernelVM = false;
try {
VmIdentifier vmid = new VmIdentifier(id);
MonitoredHost host = MonitoredHost.getMonitoredHost(vmid);
@@ -148,7 +147,6 @@
// it's attachable; so return false
return;
}
- isKernelVM = MonitoredVmUtil.isKernelVM(mvm);
} catch (Throwable t) {
if (t instanceof ThreadDeath) {
ThreadDeath td = (ThreadDeath)t;
@@ -163,11 +161,8 @@
}
// we're sure it's not attachable; throw exception
- if (isKernelVM) {
- throw new AttachNotSupportedException("Kernel VM does not support the attach mechanism");
- } else {
- throw new AttachNotSupportedException("The VM does not support the attach mechanism");
- }
+ throw new AttachNotSupportedException(
+ "The VM does not support the attach mechanism");
}
--- a/jdk/src/windows/bin/java_md.c Wed Jul 05 17:34:21 2017 +0200
+++ b/jdk/src/windows/bin/java_md.c Wed Feb 09 21:20:41 2011 -0800
@@ -49,7 +49,6 @@
static jboolean GetJVMPath(const char *jrepath, const char *jvmtype,
char *jvmpath, jint jvmpathsize);
static jboolean GetJREPath(char *path, jint pathsize);
-static void EnsureJreInstallation(const char *jrepath);
/* We supports warmup for UI stack that is performed in parallel
* to VM initialization.
@@ -201,9 +200,6 @@
exit(2);
}
- /* Do this before we read jvm.cfg and after jrepath is initialized */
- EnsureJreInstallation(jrepath);
-
/* Find the specified JVM type */
if (ReadKnownVMs(jrepath, (char*)GetArch(), JNI_FALSE) < 1) {
JLI_ReportErrorMessage(CFG_ERROR7);
@@ -296,68 +292,6 @@
return JNI_TRUE;
}
-/*
- * The preJVMStart is a function in the jkernel.dll, which
- * performs the final step of synthesizing back the decomposed
- * modules (partial install) to the full JRE. Any tool which
- * uses the JRE must peform this step to ensure the complete synthesis.
- * The EnsureJreInstallation function calls preJVMStart based on
- * the conditions outlined below, noting that the operation
- * will fail silently if any of conditions are not met.
- * NOTE: this call must be made before jvm.dll is loaded, or jvm.cfg
- * is read, since jvm.cfg will be modified by the preJVMStart.
- * 1. Are we on a supported platform.
- * 2. Find the location of the JRE or the Kernel JRE.
- * 3. check existence of JREHOME/lib/bundles
- * 4. check jkernel.dll and invoke the entry-point
- */
-typedef VOID (WINAPI *PREJVMSTART)();
-
-static void
-EnsureJreInstallation(const char* jrepath)
-{
- HINSTANCE handle;
- char tmpbuf[MAXPATHLEN];
- PREJVMSTART PreJVMStart;
- struct stat s;
-
- /* Make sure the jrepath contains something */
- if ((void*)jrepath[0] == NULL) {
- return;
- }
- /* 32 bit windows only please */
- if (JLI_StrCmp(GetArch(), "i386") != 0 ) {
- return;
- }
- /* Does our bundle directory exist ? */
- JLI_Snprintf(tmpbuf, sizeof(tmpbuf), "%s\\lib\\bundles", jrepath);
- JLI_TraceLauncher("EnsureJreInstallation: %s\n", tmpbuf);
- if (stat(tmpbuf, &s) != 0) {
- return;
- }
- /* Does our jkernel dll exist ? */
- JLI_Snprintf(tmpbuf, sizeof(tmpbuf), "%s\\bin\\jkernel.dll", jrepath);
- if (stat(tmpbuf, &s) != 0) {
- return;
- }
- /* The Microsoft C Runtime Library needs to be loaded first. */
- if (!LoadMSVCRT()) {
- return;
- }
- /* Load the jkernel.dll */
- if ((handle = LoadLibrary(tmpbuf)) == 0) {
- return;
- }
- /* Get the function address */
- PreJVMStart = (PREJVMSTART)GetProcAddress(handle, "preJVMStart");
- if (PreJVMStart == NULL) {
- FreeLibrary(handle);
- return;
- }
- PreJVMStart();
- FreeLibrary(handle);
- return;
-}
/*
* Find path to JRE based on .exe's location or registry settings.
--- a/jdk/src/windows/native/sun/jkernel/DownloadDialog.cpp Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,894 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-
-#define STRICT
-#ifndef _WIN32_WINNT
-/* REMIND : 0x500 means Windows 2000 .. seems like we can update
- * for Windows XP when we move the SDK and build platform
- */
-#define _WIN32_WINNT 0x0500
-#endif
-#define _ATL_APARTMENT_THREADED
-
-#include <atlbase.h>
-//You may derive a class from CComModule and use it if you want to override
-//something, but do not change the name of _Module
-extern CComModule _Module;
-#include <atlcom.h>
-#include <atlwin.h>
-
-#include <atlhost.h>
-#include <commdlg.h>
-#include <commctrl.h>
-#include <windowsx.h>
-#include <urlmon.h>
-#include <wininet.h>
-#include <shellapi.h>
-#include <time.h>
-#include <math.h>
-#include <stdio.h>
-#include <jni.h>
-
-#include "DownloadDialog.h"
-
-#define UPDATE_INTERVAL 500
-#define INITIAL_DELAY 2000
-#define POST_DELAY 1000
-
-/////////////////////////////////////////////////////////////////////////////
-// CDownloadDialog
-
-typedef BOOL (WINAPI * InitCommonControlsType)();
-
-CDownloadDialog::CDownloadDialog()
-{
- m_numDownloadThreadsRunning = 0;
-
- m_destroyWindowTimerStarted = FALSE;
- m_pszFileName = NULL;
- m_jvm = NULL;
-
- m_ulProgress = 0;
- m_ulProgressMax = 0;
- m_iProgressFactor = 0;
- m_iMaxProgressFactor = 1;
-
-
- m_hCancelEvent = ::CreateEvent(NULL, TRUE, FALSE, NULL);
- m_hDownloadThreadExitEvent = ::CreateEvent(NULL, TRUE, FALSE, NULL);
- m_hDialogInitializedEvent = ::CreateEvent(NULL, TRUE, FALSE, NULL);
-
- // Load up commctrl.dll
- // Loading dll dynamically we can use latest available version
- // (i.e. latest native components and extended API)
- HMODULE hModComCtl32 = ::LoadLibrary(TEXT("comctl32.dll"));
- if (hModComCtl32 != NULL) {
- /* Initialize controls to ensure proper appearance */
- InitCommonControlsType fn_InitCommonControls = (InitCommonControlsType)
- ::GetProcAddress(hModComCtl32, "InitCommonControls");
- fn_InitCommonControls();
-
- /* MessageBox replacement introduced in Vista */
- taskDialogFn = (TaskDialogIndirectFn)
- ::GetProcAddress(hModComCtl32, "TaskDialogIndirect");
- }
-}
-
-
-CDownloadDialog::~CDownloadDialog()
-{
- ::CloseHandle(m_hCancelEvent);
- ::CloseHandle(m_hDownloadThreadExitEvent);
- ::CloseHandle(m_hDialogInitializedEvent);
-}
-
-void CDownloadDialog::addToTotalContentLength(DWORD contentLength) {
- __try
- {
- m_csDownload.Lock();
- if (m_ulProgressMax == 0) {
- // first download this session, initialize start time
- time(&m_startTime);
- }
-
- m_ulProgressMax = m_ulProgressMax + contentLength;
- logProgress();
- }
- __finally
- {
- m_csDownload.Unlock();
- }
-}
-
-
-
-void CDownloadDialog::initDialogText(LPCTSTR downloadURL, LPCTSTR bundleName) {
-
- // reset status text
- HWND hStatusWnd = GetDlgItem(IDC_TIME_REMAINING);
- ::SetWindowText(hStatusWnd, "");
-
- // reset progress bar
- HWND hProgressWnd = GetDlgItem(IDC_DOWNLOAD_PROGRESS);
-
- ::PostMessage(hProgressWnd, PBM_SETPOS, (WPARAM) 0, NULL);
-
- m_hMastheadFont = NULL;
- m_hDialogFont = NULL;
- m_hSixPointFont = NULL;
-
- m_hMemDC = NULL;
-
- TCHAR szDownloadText[BUFFER_SIZE];
-
- HWND hWndDownloadText = GetDlgItem(IDC_DOWNLOAD_TEXT);
- ::LoadString(_Module.GetModuleInstance(), IDS_DOWNLOAD_TEXT, szDownloadText, BUFFER_SIZE);
- ::SetWindowText(hWndDownloadText, szDownloadText);
-
- TCHAR szMasthead[BUFFER_SIZE];
-
- HWND hWndMastheadText = GetDlgItem(IDC_MASTHEAD_TEXT);
- ::LoadString(_Module.GetModuleInstance(), IDS_DOWNLOAD, szMasthead, BUFFER_SIZE);
- ::SetWindowText(hWndMastheadText, szMasthead);
-
-
-}
-
-BOOL CDownloadDialog::isDownloading() {
- return m_numDownloadThreadsRunning > 0;
-}
-
-
-void CDownloadDialog::bundleInstallStart() {
- __try
- {
- m_csNumDownloadThreads.Lock();
- m_numDownloadThreadsRunning++;
- // another download request has came in, kill the destroyWindowTimer
- KillTimer(destroyWindowTimerID);
- m_destroyWindowTimerStarted = FALSE;
- }
- __finally
- {
- m_csNumDownloadThreads.Unlock();
- }
-}
-
-void CDownloadDialog::bundleInstallComplete() {
- __try
- {
- m_csNumDownloadThreads.Lock();
- m_numDownloadThreadsRunning = max(m_numDownloadThreadsRunning - 1, 0);
- if (m_numDownloadThreadsRunning == 0) {
- m_ulProgress = m_ulProgressMax;
- logProgress();
- }
- // Signal main thread
- ::SetEvent(m_hDownloadThreadExitEvent);
- }
- __finally
- {
- m_csNumDownloadThreads.Unlock();
- }
-}
-
-
-//=--------------------------------------------------------------------------=
-// CDownloadDialog::OnInitDialog
-//=--------------------------------------------------------------------------=
-// Message handler for WM_INITDIALOG
-//
-// Parameters:
-// uMsg Windows Message
-// wParam WPARAM
-// lParam LPARAM
-// bHandled FALSE if not handled
-//
-// Output:
-// LRESULT
-//
-// Notes:
-//
-LRESULT CDownloadDialog::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-{
- __try
- {
- m_csDownload.Lock();
- }
- __finally
- {
- m_csDownload.Unlock();
- }
- // Set timer
- SetTimer(iTimerID, UPDATE_INTERVAL);
-
- m_hMastheadFont = NULL;
- m_hDialogFont = NULL;
- m_hSixPointFont = NULL;
- m_feedbackOnCancel = TRUE;
-
- m_hMemDC = NULL;
-
- TCHAR szDownloadText[BUFFER_SIZE];
-
- HWND hWndDownloadText = GetDlgItem(IDC_DOWNLOAD_TEXT);
- ::LoadString(_Module.GetModuleInstance(), IDS_DOWNLOAD_TEXT, szDownloadText, BUFFER_SIZE);
- ::SetWindowText(hWndDownloadText, szDownloadText);
-
- TCHAR szMasthead[BUFFER_SIZE];
-
- HWND hWndMastheadText = GetDlgItem(IDC_MASTHEAD_TEXT);
- ::LoadString(_Module.GetModuleInstance(), IDS_DOWNLOAD, szMasthead, BUFFER_SIZE);
- ::SetWindowText(hWndMastheadText, szMasthead);
-
- HICON javaCupIcon = ::LoadIcon(_Module.GetModuleInstance(), MAKEINTRESOURCE(IDI_JAVA));
- SetIcon(javaCupIcon, FALSE);
-
- ::SetEvent(m_hDialogInitializedEvent);
-
- return 0; // do not set initial focus to cancel button
-}
-
-
-//=--------------------------------------------------------------------------=
-// CDownloadDialog::OnOK
-//=--------------------------------------------------------------------------=
-// Message handler for WM_COMMAND with IDOK
-//
-// Parameters:
-// wNotifyCode Notify Code
-// wID ID of control
-// hWndCtl HWND of control
-// bHandled FALSE if not handled
-//
-// Output:
-// LRESULT
-//
-// Notes:
-//
-LRESULT CDownloadDialog::OnOK(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
-{
- // do nothing for now
- return 0;
-}
-
-
-
-//=--------------------------------------------------------------------------=
-// CDownloadDialog::OnCancel
-//=--------------------------------------------------------------------------=
-// Message handler for WM_COMMAND with IDCANCEL
-//
-// Parameters:
-// wNotifyCode Notify Code
-// wID ID of control
-// hWndCtl HWND of control
-// bHandled FALSE if not handled
-//
-// Output:
-// LRESULT
-//
-// Notes:
-//
-LRESULT CDownloadDialog::OnCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
-{
- // Disable window first to avoid any keyboard input
- EnableWindow(FALSE);
-
- if (m_feedbackOnCancel) {
- int r = SafeMessageBox(IDS_DOWNLOAD_CANCEL_MESSAGE,
- IDS_DOWNLOAD_CANCEL_INSTRUCTION,
- IDS_DOWNLOAD_CANCEL_CAPTION,
- DIALOG_WARNING_CANCELOK,
- NULL, NULL);
- if (!::IsWindow(hWndCtl)) {
- /* It is possible that download was finished and download
- window hidden by the time user close this message box.
- If such case we should simply return. */
- return 0;
- }
- if (r == IDCANCEL) {
- EnableWindow(TRUE);
- return 0;
- }
- }
-
- __try
- {
- m_csDownload.Lock();
- // if we are downloading, signal download thread to stop downloading
- if (m_numDownloadThreadsRunning > 0) {
- SetEvent(m_hCancelEvent);
- }
- }
- __finally
- {
- m_csDownload.Unlock();
- }
-
- // Kill timer
- KillTimer(iTimerID);
- KillTimer(destroyWindowTimerID);
-
- FreeGDIResources();
-
- // Destroy dialog
- EndDialog(wID);
-
- return 0;
-}
-
-void CDownloadDialog::destroyDialog() {
- m_feedbackOnCancel = FALSE;
- ::PostMessage(m_hWnd, WM_COMMAND, IDCANCEL, NULL);
-}
-
-
-void CDownloadDialog::delayedDoModal() {
- __try
- {
- __try
- {
- m_csMessageBox.Lock();
- m_dialogUp = true;
- Sleep(INITIAL_DELAY);
- }
- __finally
- {
- m_csMessageBox.Unlock();
- }
-
- if (isDownloading())
- DoModal();
- }
- __finally
- {
- m_dialogUp = false;
- }
-}
-
-
-//=--------------------------------------------------------------------------=
-// CDownloadDialog::SafeMessageBox
-//=--------------------------------------------------------------------------=
-// Helper method that uses best availble API to show native error/information
-// dialog. In particular, it uses TaskDialog if availble (Vista specific)
-// and MessageBox otherwise.
-//
-// It also ensures that the message box is always displayed on top of
-// the progress dialog instead of underneath
-//
-
-//helper structures to define XP vs Vista style differences
-static TASKDIALOG_COMMON_BUTTON_FLAGS vistaDialogButtons[] = {
- TDCBF_RETRY_BUTTON | TDCBF_CANCEL_BUTTON,
- TDCBF_OK_BUTTON | TDCBF_CANCEL_BUTTON
-};
-static PCWSTR vistaIcons[] = {
- TD_ERROR_ICON,
- TD_WARNING_ICON
-};
-
-static UINT xpStyle[] = {
- MB_ICONERROR | MB_RETRYCANCEL,
- MB_ICONWARNING | MB_OKCANCEL | MB_DEFBUTTON2
-};
-
-int CDownloadDialog::SafeMessageBox(UINT details, UINT mainInstruction, UINT caption, DialogType type, LPCWSTR instructionArg, LPCWSTR detailsArg) {
- WCHAR textCaption[BUFFER_SIZE+1];
- WCHAR textDetails[BUFFER_SIZE+1];
- WCHAR textInstruction[BUFFER_SIZE+1];
- WCHAR tmpBuffer[BUFFER_SIZE+1];
-
- /* make sure buffers are terminated */
- textCaption[BUFFER_SIZE] = textDetails[BUFFER_SIZE] = 0;
- textInstruction[BUFFER_SIZE] = tmpBuffer[BUFFER_SIZE] = 0;
-
- if (detailsArg != NULL) {
- ::LoadStringW(_Module.GetResourceInstance(),
- details,
- tmpBuffer,
- BUFFER_SIZE);
- _snwprintf(textDetails, BUFFER_SIZE, tmpBuffer, detailsArg);
- } else {
- ::LoadStringW(_Module.GetResourceInstance(),
- details,
- textDetails,
- BUFFER_SIZE);
- }
-
- if (instructionArg != NULL) {
- ::LoadStringW(_Module.GetResourceInstance(),
- mainInstruction,
- tmpBuffer,
- BUFFER_SIZE);
- _snwprintf(textInstruction, BUFFER_SIZE, tmpBuffer, instructionArg);
- } else {
- ::LoadStringW(_Module.GetResourceInstance(),
- mainInstruction,
- textInstruction,
- BUFFER_SIZE);
- }
-
- ::LoadStringW(_Module.GetResourceInstance(),
- caption,
- textCaption,
- BUFFER_SIZE);
-
- __try
- {
- m_csMessageBox.Lock();
- if (m_dialogUp) {
- waitUntilInitialized();
- }
- /* If TaskDialog availble - use it! */
- if (taskDialogFn != NULL) {
- TASKDIALOGCONFIG tc = { 0 };
- int nButton;
-
- tc.cbSize = sizeof(tc);
- tc.hwndParent = ::IsWindow(m_hWnd) ? m_hWnd : NULL;
- tc.dwCommonButtons = vistaDialogButtons[type];
- tc.pszWindowTitle = textCaption;
- tc.pszMainInstruction = textInstruction;
- tc.pszContent = textDetails;
- tc.pszMainIcon = vistaIcons[type];
- /* workaround: we need to make sure Cancel is default
- for this type of Dialog */
- if (type == DIALOG_WARNING_CANCELOK) {
- tc.nDefaultButton = IDCANCEL;
- }
-
- taskDialogFn(&tc, &nButton, NULL, NULL);
- return nButton;
- } else { /* default: use MessageBox */
- /* Note that MessageBox API expects content as single string
- and therefore we need to concatenate instruction
- and details as 2 paragraphs.
-
- The only exception is empty instruction. */
- if (wcslen(textInstruction) > 0) {
- wcsncat(textInstruction, L"\n\n",
- BUFFER_SIZE - wcslen(textInstruction));
- }
- wcsncat(textInstruction, textDetails,
- BUFFER_SIZE - wcslen(textInstruction));
-
- return ::MessageBoxW(::IsWindow(m_hWnd) ? m_hWnd : NULL,
- textInstruction, textCaption, xpStyle[type]);
- }
- }
- __finally
- {
- m_csMessageBox.Unlock();
- }
-}
-
-
-//=--------------------------------------------------------------------------=
-// CDownloadDialog::OnTimer
-//=--------------------------------------------------------------------------=
-// Message handler for WM_TIMER
-//
-// Parameters:
-// uMsg Windows Message
-// wParam WPARAM
-// lParam LPARAM
-// bHandled FALSE if not handled
-//
-// Output:
-// LRESULT
-//
-// Notes:
-//
-LRESULT CDownloadDialog::OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-{
- if (destroyWindowTimerID == (int)wParam) {
- KillTimer(destroyWindowTimerID);
- m_destroyWindowTimerStarted = FALSE;
- m_ulProgressMax = max(0, m_ulProgressMax - m_ulProgress);
- logProgress();
- m_ulProgress = 0;
- logProgress();
- m_feedbackOnCancel = FALSE;
- ::PostMessage(m_hWnd, WM_COMMAND, IDCANCEL, NULL);
- }
-
- if (iTimerID == (int)wParam)
- {
-
- __try
- {
- m_csDownload.Lock();
-
- HWND hStatusWnd = GetDlgItem(IDC_TIME_REMAINING);
- HWND hProgressWnd = GetDlgItem(IDC_DOWNLOAD_PROGRESS);
-
- if (m_ulProgress && m_ulProgressMax)
- {
- ::PostMessage(hProgressWnd, PBM_SETPOS,
- (WPARAM) (m_ulProgress * 100
- / m_ulProgressMax), NULL);
-
- time_t currentTime;
- time(¤tTime);
-
- double elapsed_time = difftime(currentTime, m_startTime);
- double remain_time = (elapsed_time / m_ulProgress) *
- (m_ulProgressMax - m_ulProgress);
- int hr = 0, min = 0;
-
- if (remain_time > 60 * 60)
- {
- hr = int(remain_time / (60 * 60));
- remain_time = remain_time - hr * 60 * 60;
- }
-
- if (remain_time > 60)
- {
- min = int(remain_time / 60);
- remain_time = remain_time - min * 60;
- }
-
- TCHAR szBuffer[BUFFER_SIZE];
- TCHAR szTimeBuffer[BUFFER_SIZE];
-
- if (hr > 0)
- {
- if (hr > 1)
- LoadString(_Module.GetResourceInstance(), IDS_HOURSMINUTESECOND,
- szTimeBuffer, BUFFER_SIZE);
- else
- LoadString(_Module.GetResourceInstance(), IDS_HOURMINUTESECOND,
- szTimeBuffer, BUFFER_SIZE);
-
- sprintf(szBuffer, szTimeBuffer, hr, min, remain_time);
- }
- else
- {
- if (min > 0)
- {
- LoadString(_Module.GetResourceInstance(), IDS_MINUTESECOND,
- szTimeBuffer, BUFFER_SIZE);
- sprintf(szBuffer, szTimeBuffer, min, remain_time);
-
- }
- else
- {
- LoadString(_Module.GetResourceInstance(), IDS_SECOND,
- szTimeBuffer, BUFFER_SIZE);
- sprintf(szBuffer, szTimeBuffer, remain_time);
-
- }
- }
-
- if (m_ulProgress == m_ulProgressMax) {
- // download is done, unpacking bundle now, and waiting
- // for another download to take place
- ::LoadString(_Module.GetResourceInstance(),
- IDS_DOWNLOAD_UNPACKING, szBuffer, BUFFER_SIZE);
- __try
- {
- m_csNumDownloadThreads.Lock();
- // both download and unpacking is done, start
- // timer to destroy the progress window in 500ms
- if (!m_destroyWindowTimerStarted &&
- m_numDownloadThreadsRunning == 0) {
- SetTimer(destroyWindowTimerID, POST_DELAY);
- m_destroyWindowTimerStarted = TRUE;
- }
- }
- __finally
- {
- m_csNumDownloadThreads.Unlock();
- }
- }
-
- // Update status message
- ::SetWindowText(hStatusWnd, szBuffer);
- }
- }
- __finally
- {
- m_csDownload.Unlock();
- }
- }
-
- return 0;
-}
-
-// Message handler for WM_ONCTLCOLORSTATIC.
-// this message is sent each time a static control is drawn.
-// we get the Control ID and then set background color and font
-// as appropriate for that control.
-LRESULT CDownloadDialog::OnCtlColorStatic(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-{
- HDC hdc = (HDC) wParam;
- HWND hwnd = (HWND) lParam;
-
- int DlgCtrlID = ::GetDlgCtrlID(hwnd);
-
- if (DlgCtrlID == IDC_DOWNLOAD_TEXT )
- {
- if (m_hDialogFont == NULL)
- {
- m_hDialogFont = CreateDialogFont(hdc, TEXT("MS Shell Dlg"), 8);
- }
-
- ::SelectObject(hdc, m_hDialogFont);
- return 0;
- }
- else if (DlgCtrlID == IDC_TIME_REMAINING)
- {
- if (m_hSixPointFont == NULL)
- {
- m_hSixPointFont = CreateDialogFont(hdc, TEXT("MS Shell Dlg"), 8);
- }
-
- ::SelectObject(hdc, m_hSixPointFont);
- return 0;
- }
- else if (DlgCtrlID == IDC_MASTHEAD_TEXT)
- {
- if (m_hMastheadFont == NULL)
- {
- m_hMastheadFont = CreateDialogFont(hdc, TEXT("MS Shell Dlg"), 12, 1);
- }
-
- ::SelectObject(hdc, m_hMastheadFont);
- return (LRESULT) GetStockObject(WHITE_BRUSH);
- }
- else if (DlgCtrlID == IDC_DOWNLOAD_MASTHEAD)
- {
- if (m_hMemDC == NULL)
- {
- m_hBitmap = LoadBitmap(_Module.GetModuleInstance(),
- MAKEINTRESOURCE(IDI_MASTHEAD));
- GetObject(m_hBitmap, sizeof(BITMAP), &m_bmMasthead);
- m_hMemDC = CreateCompatibleDC(NULL);
- SelectObject(m_hMemDC, m_hBitmap);
- }
-
- RECT rect;
- ::GetClientRect(hwnd, &rect);
-
- StretchBlt(hdc, rect.left, rect.top, (rect.right - rect.left), (rect.bottom - rect.top),
- m_hMemDC, 0, 0, m_bmMasthead.bmWidth, m_bmMasthead.bmHeight, SRCCOPY);
-
- return (LRESULT) GetStockObject(NULL_BRUSH);
- }
-
-
- return 0;
-}
-
-
-//=--------------------------------------------------------------------------=
-// CDownloadDialog::OnStartBinding
-//=--------------------------------------------------------------------------=
-// Called when download is started
-//
-// Parameters:
-//
-// Output:
-// HRESULT
-//
-// Notes:
-//
-STDMETHODIMP CDownloadDialog::OnStartBinding()
-{
- __try
- {
- m_csDownload.Lock();
- time(&m_startTime);
- }
- __finally
- {
- m_csDownload.Unlock();
- }
-
- return S_OK;
-}
-
-
-//=--------------------------------------------------------------------------=
-// CDownloadDialog::OnProgress
-//=--------------------------------------------------------------------------=
-// Called when download is in progress
-//
-// Parameters: ULONG ulProgress
-//
-// Output:
-// HRESULT
-//
-// Notes:
-//
-STDMETHODIMP CDownloadDialog::OnProgress(ULONG ulProgress)
-{
- __try
- {
- m_csDownload.Lock();
- m_ulProgress = m_ulProgress + ulProgress;
- logProgress();
-
- }
- __finally
- {
- m_csDownload.Unlock();
- }
-
- return S_OK;
-}
-
-void CDownloadDialog::decrementProgressMax(ULONG contentLength, ULONG readSoFar) {
- __try
- {
- m_csDownload.Lock();
- m_ulProgressMax = m_ulProgressMax - contentLength;
- m_ulProgress = m_ulProgress - readSoFar;
- logProgress();
- }
- __finally
- {
- m_csDownload.Unlock();
- }
-
-}
-
-void CDownloadDialog::waitUntilInitialized() {
- // wait until download progress dialog is initialized and ready to show
- WaitForSingleObject(m_hDialogInitializedEvent, INFINITE);
- ResetEvent(m_hDialogInitializedEvent);
-
-}
-
-// Check if download has been cancelled
-BOOL CDownloadDialog::isDownloadCancelled() {
- if (WAIT_OBJECT_0 == WaitForSingleObject(m_hCancelEvent, 0)) {
- return TRUE;
- }
- return FALSE;
-}
-
-
-
-// Create the fonts we need for the download and
-// install UE
-HFONT CDownloadDialog::CreateDialogFont(HDC hdc, LPCTSTR lpszFaceName, int ptSize, int isBold)
-{
- POINT pt;
- FLOAT cxDPI, cyDPI;
- HFONT hFont;
- LOGFONT lf;
-
- int iDeciPtWidth = 0;
- int iDeciPtHeight = 10 * ptSize;
-
- int iSavedDC = SaveDC(hdc);
-
- SetGraphicsMode (hdc, GM_ADVANCED);
- ModifyWorldTransform(hdc, NULL, MWT_IDENTITY);
- SetViewportOrgEx (hdc, 0,0, NULL);
- SetWindowOrgEx (hdc, 0,0, NULL);
-
- cxDPI = (FLOAT) GetDeviceCaps(hdc, LOGPIXELSX);
- cyDPI = (FLOAT) GetDeviceCaps(hdc, LOGPIXELSY);
-
- pt.x = (int) (iDeciPtWidth * cxDPI / 72);
- pt.y = (int) (iDeciPtHeight * cyDPI / 72);
-
- DPtoLP(hdc, &pt, 1);
-
- lf.lfHeight = - (int) (fabs ((double) pt.y) / 10.0 + 0.5);
- lf.lfWidth = 0;
- lf.lfEscapement = 0;
- lf.lfOrientation = 0;
- lf.lfWeight = (isBold > 0) ? FW_BOLD : 0;
- lf.lfItalic = 0;
- lf.lfUnderline = 0;
- lf.lfStrikeOut = 0;
- lf.lfCharSet = 0;
- lf.lfOutPrecision = 0;
- lf.lfClipPrecision = 0;
- lf.lfQuality = 0;
- lf.lfPitchAndFamily = 0;
-
- TCHAR szLocaleData[BUFFER_SIZE];
- GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SENGCOUNTRY,
- szLocaleData, BUFFER_SIZE);
-
- if (strncmp(szLocaleData, "Japan", 5) == 0) {
- // need special font for _ja locale
- strcpy (lf.lfFaceName, TEXT("MS UI Gothic"));
- } else {
- strcpy (lf.lfFaceName, lpszFaceName);
- }
-
- hFont = CreateFontIndirect(&lf);
-
- RestoreDC (hdc, iSavedDC);
- return hFont;
-}
-
-void CDownloadDialog::FreeGDIResources ()
-{
- ::DeleteObject(m_hMastheadFont);
- m_hMastheadFont = NULL;
-
- ::DeleteObject(m_hDialogFont);
- m_hDialogFont = NULL;
-
- ::DeleteObject(m_hSixPointFont);
- m_hSixPointFont = NULL;
-
- ::DeleteObject(m_hBitmap);
- m_hBitmap = NULL;
-
- ::DeleteDC(m_hMemDC);
- m_hMemDC = NULL;
-}
-
-
-JNIEnv* CDownloadDialog::getJNIEnv() {
- if (m_jvm == NULL)
- return NULL;
- JNIEnv *env;
- m_jvm->AttachCurrentThread((void**) &env, NULL);
- return env;
-}
-
-
-void CDownloadDialog::log(char *msg) {
- JNIEnv *env = getJNIEnv();
- if (env != NULL) {
- jclass dm = env->FindClass("sun/jkernel/DownloadManager");
- if (dm == NULL) {
- printf("Cound not find class sun.jkernel.DownloadManager\n");
- return;
- }
- jmethodID log = env->GetStaticMethodID(dm, "log", "(Ljava/lang/String;)V");
- if (log == NULL) {
- printf("Could not find method sun.jkernel.DownloadManager.log(String)\n");
- return;
- }
- jstring string = env->NewStringUTF(msg);
- if (string == NULL) {
- printf("Error creating log string\n");
- return;
- }
- env->CallStaticVoidMethod(dm, log, string);
- }
-}
-
-
-void CDownloadDialog::logProgress() {
- char msg[256];
- sprintf(msg, "Progress: %d / %d", m_ulProgress, m_ulProgressMax);
- log(msg);
-}
--- a/jdk/src/windows/native/sun/jkernel/DownloadDialog.h Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,329 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-//
-// DownloadDialog.h : Declaration of the CDownloadDialog
-//
-
-#ifndef __DOWNLOADDIALOG_H_
-#define __DOWNLOADDIALOG_H_
-
-#include "resource.h" // main symbols
-#include <time.h>
-#include "jni.h"
-
-#ifndef BUFFER_SIZE
-#define BUFFER_SIZE 2048
-#endif
-
-#define iTimerID 1000
-#define destroyWindowTimerID 2000
-
-#define E_JDHELPER_TIMEOUT 12002
-#define E_JDHELPER_NAME_NOT_RESOLVED 12007
-#define E_JDHELPER_CANNOT_CONNECT 12029
-
-/* Following lines were copied from the new version of commctrl.h
- These definitions are not available in default version of
- this header file in VS 2003 but they are needed to use
- new Vista task dialog API.
-*/
-#ifndef TD_ERROR_ICON
-
-/* These modifiers have sense with new VS only,
- reset them to get code to compile */
-#define __in
-#define __in_opt
-#define __out_opt
-
-#ifdef _WIN32
-#include <pshpack1.h>
-#endif
-
-
-typedef HRESULT (CALLBACK *PFTASKDIALOGCALLBACK)(HWND hwnd, __in UINT msg, __in WPARAM wParam, __in LPARAM lParam, __in LONG_PTR lpRefData);
-
-enum _TASKDIALOG_FLAGS
-{
- TDF_ENABLE_HYPERLINKS = 0x0001,
- TDF_USE_HICON_MAIN = 0x0002,
- TDF_USE_HICON_FOOTER = 0x0004,
- TDF_ALLOW_DIALOG_CANCELLATION = 0x0008,
- TDF_USE_COMMAND_LINKS = 0x0010,
- TDF_USE_COMMAND_LINKS_NO_ICON = 0x0020,
- TDF_EXPAND_FOOTER_AREA = 0x0040,
- TDF_EXPANDED_BY_DEFAULT = 0x0080,
- TDF_VERIFICATION_FLAG_CHECKED = 0x0100,
- TDF_SHOW_PROGRESS_BAR = 0x0200,
- TDF_SHOW_MARQUEE_PROGRESS_BAR = 0x0400,
- TDF_CALLBACK_TIMER = 0x0800,
- TDF_POSITION_RELATIVE_TO_WINDOW = 0x1000,
- TDF_RTL_LAYOUT = 0x2000,
- TDF_NO_DEFAULT_RADIO_BUTTON = 0x4000,
- TDF_CAN_BE_MINIMIZED = 0x8000
-};
-typedef int TASKDIALOG_FLAGS; // Note: _TASKDIALOG_FLAGS is an int
-
-typedef enum _TASKDIALOG_MESSAGES
-{
- TDM_NAVIGATE_PAGE = WM_USER+101,
- TDM_CLICK_BUTTON = WM_USER+102, // wParam = Button ID
- TDM_SET_MARQUEE_PROGRESS_BAR = WM_USER+103, // wParam = 0 (nonMarque) wParam != 0 (Marquee)
- TDM_SET_PROGRESS_BAR_STATE = WM_USER+104, // wParam = new progress state
- TDM_SET_PROGRESS_BAR_RANGE = WM_USER+105, // lParam = MAKELPARAM(nMinRange, nMaxRange)
- TDM_SET_PROGRESS_BAR_POS = WM_USER+106, // wParam = new position
- TDM_SET_PROGRESS_BAR_MARQUEE = WM_USER+107, // wParam = 0 (stop marquee), wParam != 0 (start marquee), lparam = speed (milliseconds between repaints)
- TDM_SET_ELEMENT_TEXT = WM_USER+108, // wParam = element (TASKDIALOG_ELEMENTS), lParam = new element text (LPCWSTR)
- TDM_CLICK_RADIO_BUTTON = WM_USER+110, // wParam = Radio Button ID
- TDM_ENABLE_BUTTON = WM_USER+111, // lParam = 0 (disable), lParam != 0 (enable), wParam = Button ID
- TDM_ENABLE_RADIO_BUTTON = WM_USER+112, // lParam = 0 (disable), lParam != 0 (enable), wParam = Radio Button ID
- TDM_CLICK_VERIFICATION = WM_USER+113, // wParam = 0 (unchecked), 1 (checked), lParam = 1 (set key focus)
- TDM_UPDATE_ELEMENT_TEXT = WM_USER+114, // wParam = element (TASKDIALOG_ELEMENTS), lParam = new element text (LPCWSTR)
- TDM_SET_BUTTON_ELEVATION_REQUIRED_STATE = WM_USER+115, // wParam = Button ID, lParam = 0 (elevation not required), lParam != 0 (elevation required)
- TDM_UPDATE_ICON = WM_USER+116 // wParam = icon element (TASKDIALOG_ICON_ELEMENTS), lParam = new icon (hIcon if TDF_USE_HICON_* was set, PCWSTR otherwise)
-} TASKDIALOG_MESSAGES;
-
-typedef enum _TASKDIALOG_NOTIFICATIONS
-{
- TDN_CREATED = 0,
- TDN_NAVIGATED = 1,
- TDN_BUTTON_CLICKED = 2, // wParam = Button ID
- TDN_HYPERLINK_CLICKED = 3, // lParam = (LPCWSTR)pszHREF
- TDN_TIMER = 4, // wParam = Milliseconds since dialog created or timer reset
- TDN_DESTROYED = 5,
- TDN_RADIO_BUTTON_CLICKED = 6, // wParam = Radio Button ID
- TDN_DIALOG_CONSTRUCTED = 7,
- TDN_VERIFICATION_CLICKED = 8, // wParam = 1 if checkbox checked, 0 if not, lParam is unused and always 0
- TDN_HELP = 9,
- TDN_EXPANDO_BUTTON_CLICKED = 10 // wParam = 0 (dialog is now collapsed), wParam != 0 (dialog is now expanded)
-} TASKDIALOG_NOTIFICATIONS;
-
-typedef struct _TASKDIALOG_BUTTON
-{
- int nButtonID;
- PCWSTR pszButtonText;
-} TASKDIALOG_BUTTON;
-
-typedef enum _TASKDIALOG_ELEMENTS
-{
- TDE_CONTENT,
- TDE_EXPANDED_INFORMATION,
- TDE_FOOTER,
- TDE_MAIN_INSTRUCTION
-} TASKDIALOG_ELEMENTS;
-
-typedef enum _TASKDIALOG_ICON_ELEMENTS
-{
- TDIE_ICON_MAIN,
- TDIE_ICON_FOOTER
-} TASKDIALOG_ICON_ELEMENTS;
-
-#define TD_WARNING_ICON MAKEINTRESOURCEW(-1)
-#define TD_ERROR_ICON MAKEINTRESOURCEW(-2)
-#define TD_INFORMATION_ICON MAKEINTRESOURCEW(-3)
-#define TD_SHIELD_ICON MAKEINTRESOURCEW(-4)
-
-
-enum _TASKDIALOG_COMMON_BUTTON_FLAGS
-{
- TDCBF_OK_BUTTON = 0x0001, // selected control return value IDOK
- TDCBF_YES_BUTTON = 0x0002, // selected control return value IDYES
- TDCBF_NO_BUTTON = 0x0004, // selected control return value IDNO
- TDCBF_CANCEL_BUTTON = 0x0008, // selected control return value IDCANCEL
- TDCBF_RETRY_BUTTON = 0x0010, // selected control return value IDRETRY
- TDCBF_CLOSE_BUTTON = 0x0020 // selected control return value IDCLOSE
-};
-typedef int TASKDIALOG_COMMON_BUTTON_FLAGS; // Note: _TASKDIALOG_COMMON_BUTTON_FLAGS is an int
-
-typedef struct _TASKDIALOGCONFIG
-{
- UINT cbSize;
- HWND hwndParent;
- HINSTANCE hInstance; // used for MAKEINTRESOURCE() strings
- TASKDIALOG_FLAGS dwFlags; // TASKDIALOG_FLAGS (TDF_XXX) flags
- TASKDIALOG_COMMON_BUTTON_FLAGS dwCommonButtons; // TASKDIALOG_COMMON_BUTTON (TDCBF_XXX) flags
- PCWSTR pszWindowTitle; // string or MAKEINTRESOURCE()
- union
- {
- HICON hMainIcon;
- PCWSTR pszMainIcon;
- };
- PCWSTR pszMainInstruction;
- PCWSTR pszContent;
- UINT cButtons;
- const TASKDIALOG_BUTTON *pButtons;
- int nDefaultButton;
- UINT cRadioButtons;
- const TASKDIALOG_BUTTON *pRadioButtons;
- int nDefaultRadioButton;
- PCWSTR pszVerificationText;
- PCWSTR pszExpandedInformation;
- PCWSTR pszExpandedControlText;
- PCWSTR pszCollapsedControlText;
- union
- {
- HICON hFooterIcon;
- PCWSTR pszFooterIcon;
- };
- PCWSTR pszFooter;
- PFTASKDIALOGCALLBACK pfCallback;
- LONG_PTR lpCallbackData;
- UINT cxWidth; // width of the Task Dialog's client area in DLU's. If 0, Task Dialog will calculate the ideal width.
-} TASKDIALOGCONFIG;
-
-WINCOMMCTRLAPI HRESULT WINAPI TaskDialogIndirect(const TASKDIALOGCONFIG *pTaskConfig, __out_opt int *pnButton, __out_opt int *pnRadioButton, __out_opt BOOL *pfVerificationFlagChecked);
-WINCOMMCTRLAPI HRESULT WINAPI TaskDialog(__in_opt HWND hwndParent, __in_opt HINSTANCE hInstance, __in_opt PCWSTR pszWindowTitle, __in_opt PCWSTR pszMainInstruction, __in_opt PCWSTR pszContent, TASKDIALOG_COMMON_BUTTON_FLAGS dwCommonButtons, __in_opt PCWSTR pszIcon, __out_opt int *pnButton);
-
-#ifdef _WIN32
-#include <poppack.h>
-#endif
-
-#endif /* end of copy from commctrl.h */
-
-typedef HRESULT (WINAPI *TaskDialogIndirectFn) (const TASKDIALOGCONFIG *pTaskConfig, __out_opt int *pnButton, __out_opt int *pnRadioButton, __out_opt BOOL *pfVerificationFlagChecked);
-
-typedef enum {
- DIALOG_ERROR_RETRYCANCEL = 0,
- DIALOG_WARNING_CANCELOK
-} DialogType;
-
-
-/////////////////////////////////////////////////////////////////////////////
-// CDownloadDialog
-class CDownloadDialog :
- public CAxDialogImpl<CDownloadDialog>
-{
-public:
- CDownloadDialog();
- ~CDownloadDialog();
-
- enum { IDD = IDD_DOWNLOAD_DIALOG };
-
-BEGIN_MSG_MAP(CDownloadDialog)
- MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
- MESSAGE_HANDLER(WM_TIMER, OnTimer)
- MESSAGE_HANDLER(WM_CTLCOLORSTATIC, OnCtlColorStatic)
- COMMAND_ID_HANDLER(IDOK, OnOK)
- COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
-END_MSG_MAP()
-
- LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
- LRESULT OnOK(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
- LRESULT OnCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
- LRESULT OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
- LRESULT OnCtlColorStatic(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
-
- STDMETHODIMP OnStartBinding();
-
- STDMETHODIMP OnProgress(ULONG ulProgress);
-
- void initDialogText(LPCTSTR pszDownloadURL, LPCTSTR pszBundleName);
-
- BOOL isDownloading();
- BOOL isDownloadCancelled();
-
- void addToTotalContentLength(DWORD contentLength);
-
- void decrementProgressMax(ULONG contentLength, ULONG readSoFar);
-
- void bundleInstallStart();
- void bundleInstallComplete();
-
- void waitUntilInitialized();
-
- void log(char *msg);
- void logProgress();
-
- void setFile(LPCTSTR pszFileName)
- {
- m_pszFileName = pszFileName;
- }
-
- void setURL(LPCTSTR pszURL)
- {
- m_pszURL = pszURL;
- }
-
- void setNameText(LPTSTR pszNameText)
- {
- m_pszNameText = pszNameText;
- }
-
-
- JNIEnv* getJNIEnv();
-
-
- void setJavaVM(JavaVM *jvm)
- {
- m_jvm = jvm;
- }
-
-
- HRESULT DownloadConfiguration(LPTSTR pszConfigURL, LPTSTR pszConfigFile);
-
- void delayedDoModal();
-
- int SafeMessageBox(UINT details, UINT mainInstruction, UINT caption,
- DialogType type, LPCWSTR instructionArg = NULL,
- LPCWSTR detailsArg = NULL);
-
- void destroyDialog();
-
- private:
-
- HFONT CreateDialogFont (HDC hdc, LPCTSTR lpszFaceName, int ptSize, int isBold = 0);
- void FreeGDIResources ();
-
- BOOL m_feedbackOnCancel;
- TaskDialogIndirectFn taskDialogFn;
- LPCTSTR m_pszFileName;
- LPCTSTR m_pszURL;
- time_t m_startTime;
- ULONG m_ulProgress;
- ULONG m_ulProgressMax;
- int m_iProgressFactor;
- int m_iMaxProgressFactor;
- int m_numDownloadThreadsRunning;
- BOOL m_destroyWindowTimerStarted;
- volatile BOOL m_dialogUp;
- CComAutoCriticalSection m_csDownload;
- CComAutoCriticalSection m_csNumDownloadThreads;
- HANDLE m_hCancelEvent;
- HANDLE m_hDownloadThreadExitEvent;
- HANDLE m_hDialogInitializedEvent;
- HFONT m_hMastheadFont;
- HFONT m_hDialogFont;
- HFONT m_hSixPointFont;
- LPTSTR m_pszNameText;
- BITMAP m_bmMasthead;
- HBITMAP m_hBitmap;
- HDC m_hMemDC;
- TCHAR m_szUrlPath[BUFFER_SIZE];
- TCHAR m_szHostName[BUFFER_SIZE];
- JavaVM* m_jvm;
- CComAutoCriticalSection m_csMessageBox;
-};
-
-#endif //__DOWNLOADDIALOG_H_
--- a/jdk/src/windows/native/sun/jkernel/DownloadHelper.cpp Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,655 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-
-#define STRICT
-#ifndef _WIN32_WINNT
-/* REMIND : 0x500 means Windows 2000 .. seems like we can update
- * for Windows XP when we move the SDK and build platform
- */
-#define _WIN32_WINNT 0x0500
-#endif
-#define _ATL_APARTMENT_THREADED
-
-
-#include <atlbase.h>
-//You may derive a class from CComModule and use it if you want to override
-//something, but do not change the name of _Module
-extern CComModule _Module;
-#include <atlcom.h>
-#include <atlwin.h>
-
-#include <atlhost.h>
-#include <commdlg.h>
-#include <commctrl.h>
-#include <windowsx.h>
-#include <urlmon.h>
-#include <wininet.h>
-#include <shellapi.h>
-#include <time.h>
-#include <math.h>
-#include <stdio.h>
-
-#include <jni.h>
-
-#include "resource.h" // main symbols
-#include "DownloadHelper.h"
-
-DownloadHelper::DownloadHelper() {
-
- m_showProgressDialog = TRUE;
- m_pszURL = NULL;
- m_pszFileName = NULL;
- m_pszNameText = NULL;
-}
-
-DownloadHelper::~DownloadHelper() {
-
-}
-
-HRESULT DownloadHelper::doDownload() {
- return DownloadFile(m_pszURL, m_pszFileName, FALSE, m_showProgressDialog);
-}
-
-HRESULT DownloadHelper::DownloadFile(const TCHAR* szURL,
- const TCHAR* szLocalFile, BOOL bResumable, BOOL bUIFeedback) {
- HINTERNET hOpen = NULL;
- HINTERNET hConnect = NULL;
- HINTERNET hRequest = NULL;
- HANDLE hFile = INVALID_HANDLE_VALUE;
- DWORD dwDownloadError = 0;
- DWORD nContentLength = 0;
-
- /* Some of error messages use drive letter.
- Result is something like "(C:)".
- NB: Parentheses are added here because in some other places
- we same message but can not provide disk label info */
- TCHAR drivePath[5];
- /* assuming szLocalFile is not NULL */
- _sntprintf(drivePath, 5, "(%c:)", szLocalFile[0]);
- WCHAR* wName = CT2CW(drivePath);
-
- __try {
- m_csDownload.Lock();
-
- time(&m_startTime);
-
- }
- __finally {
- m_csDownload.Unlock();
- }
-
- __try {
- // block potential security hole
- if (strstr(szURL, TEXT("file://")) != NULL) {
- dwDownloadError = 1;
- __leave;
- }
-
- HWND hProgressInfo = NULL;
- TCHAR szStatus[BUFFER_SIZE];
-
- if (bUIFeedback) {
- // init download dialg text
- m_dlg->initDialogText(m_pszURL, m_pszNameText);
- }
-
- // Open Internet Call
- hOpen = ::InternetOpen("deployHelper", INTERNET_OPEN_TYPE_PRECONFIG,
- NULL, NULL, NULL);
-
- if (hOpen == NULL) {
- dwDownloadError = 1;
- __leave;
- }
-
- // URL components
- URL_COMPONENTS url_components;
- ::ZeroMemory(&url_components, sizeof(URL_COMPONENTS));
-
- TCHAR szHostName[BUFFER_SIZE], szUrlPath[BUFFER_SIZE],
- szExtraInfo[BUFFER_SIZE];
- url_components.dwStructSize = sizeof(URL_COMPONENTS);
- url_components.lpszHostName = szHostName;
- url_components.dwHostNameLength = BUFFER_SIZE;
- url_components.nPort = NULL;
- url_components.lpszUrlPath = szUrlPath;
- url_components.dwUrlPathLength = BUFFER_SIZE;
- url_components.lpszExtraInfo = szExtraInfo;
- url_components.dwExtraInfoLength = BUFFER_SIZE;
-
- // Crack the URL into pieces
- ::InternetCrackUrl(szURL, lstrlen(szURL), NULL, &url_components);
-
- // Open Internet Connection
- hConnect = ::InternetConnect(hOpen, url_components.lpszHostName,
- url_components.nPort, "", "", INTERNET_SERVICE_HTTP, NULL,
- NULL);
-
- if (hConnect == NULL) {
- dwDownloadError = 1;
- __leave;
- }
-
- // Determine the relative URL path by combining
- // Path and ExtraInfo
- char szURL[4096];
-
- if (url_components.dwUrlPathLength != 0)
- lstrcpy(szURL, url_components.lpszUrlPath);
- else
- lstrcpy(szURL, "/");
-
- if (url_components.dwExtraInfoLength != 0)
- lstrcat(szURL, url_components.lpszExtraInfo);
-
- BOOL bRetryHttpRequest = FALSE;
- int numberOfRetry = 0;
- long secondsToWait = 60;
-
- do {
- bRetryHttpRequest = FALSE;
-
- // Make a HTTP GET request
- hRequest = ::HttpOpenRequest(hConnect, "GET", szURL, "HTTP/1.1",
- "", NULL,
- INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_DONT_CACHE,
- 0);
-
- if (hRequest == NULL) {
- dwDownloadError = 1;
- __leave;
- }
-
- // Create or open existing destination file
- hFile = ::CreateFile(szLocalFile, GENERIC_WRITE, 0, NULL,
- OPEN_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, NULL);
-
- if (hFile == INVALID_HANDLE_VALUE) {
- if (bUIFeedback) {
- if (IDRETRY == m_dlg->SafeMessageBox(
- IDS_DISK_WRITE_ERROR,
- IDS_DISK_WRITE_ERROR_CAPTION,
- IDS_ERROR_CAPTION,
- DIALOG_ERROR_RETRYCANCEL,
- wName)) {
- bRetryHttpRequest = TRUE;
- continue;
- }
- }
- dwDownloadError = 1;
- __leave;
- }
- DWORD fileSize = GetFileSize(hFile, NULL);
-
- // Check if resumable download is enabled
- if (bResumable == FALSE) {
- // Start from scratch
- fileSize = 0;
- }
-
- FILETIME tWrite;
- BOOL rangereq = FALSE;
- if ((fileSize != 0) && (fileSize != 0xFFFFFFFF) &&
- GetFileTime(hFile, NULL, NULL, &tWrite)) {
- char szHead[100];
- SYSTEMTIME tLocal;
- char buf[INTERNET_RFC1123_BUFSIZE];
-
- FileTimeToSystemTime(&tWrite, &tLocal);
- InternetTimeFromSystemTime(&tLocal, INTERNET_RFC1123_FORMAT,
- buf, INTERNET_RFC1123_BUFSIZE);
- sprintf(szHead, "Range: bytes=%d-\r\nIf-Range: %s\r\n",
- fileSize, buf);
- HttpAddRequestHeaders(hRequest, szHead, lstrlen(szHead),
- HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);
- rangereq = TRUE;
- }
-
- // This is a loop to handle various potential error when the
- // connection is made
- BOOL bCont = TRUE;
-
- while ((FALSE == ::HttpSendRequest(hRequest, NULL, NULL, NULL, NULL))
- && bCont ) {
- // We might have an invalid CA.
- DWORD dwErrorCode = GetLastError();
-
- switch(dwErrorCode) {
- case E_JDHELPER_TIMEOUT:
- case E_JDHELPER_NAME_NOT_RESOLVED:
- case E_JDHELPER_CANNOT_CONNECT: {
- bCont = FALSE;
- // Display the information dialog
- if (bUIFeedback) {
- // decrement download counter to prevent progress
- // dialog from popping up while the message box is
- // up
- m_dlg->bundleInstallComplete();
- if (dwErrorCode == E_JDHELPER_TIMEOUT) {
- bRetryHttpRequest =
- (IDRETRY == m_dlg->SafeMessageBox(
- IDS_HTTP_STATUS_REQUEST_TIMEOUT,
- IDS_HTTP_INSTRUCTION_REQUEST_TIMEOUT,
- IDS_ERROR_CAPTION,
- DIALOG_ERROR_RETRYCANCEL));
- } else {
- bRetryHttpRequest =
- (IDRETRY == m_dlg->SafeMessageBox(
- IDS_HTTP_STATUS_SERVER_NOT_REACHABLE,
- IDS_HTTP_INSTRUCTION_SERVER_NOT_REACHABLE,
- IDS_ERROR_CAPTION,
- DIALOG_ERROR_RETRYCANCEL));
- }
- // re-increment counter because it will be decremented
- // again upon return
- m_dlg->bundleInstallStart();
- bCont = bRetryHttpRequest;
- }
- break;
- }
- case ERROR_INTERNET_INVALID_CA:
- case ERROR_INTERNET_SEC_CERT_CN_INVALID:
- case ERROR_INTERNET_SEC_CERT_DATE_INVALID:
- case ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR:
- case ERROR_INTERNET_INCORRECT_PASSWORD:
- case ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED:
- default: {
- // Unless the user agrees to continue, we just
- // abandon now !
- bCont = FALSE;
-
- // Make sure to test the return code from
- // InternetErrorDlg user may click OK or Cancel. In
- // case of Cancel, request should not be resubmitted
- if (bUIFeedback) {
- if (ERROR_SUCCESS == ::InternetErrorDlg(
- NULL, hRequest,
- dwErrorCode,
- FLAGS_ERROR_UI_FILTER_FOR_ERRORS |
- FLAGS_ERROR_UI_FLAGS_GENERATE_DATA |
- FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS,
- NULL))
- bCont = TRUE;
- }
- }
- }
- }
-
- if (bCont == FALSE) {
- // User has denied the request
- dwDownloadError = 1;
- __leave;
- }
-
- //
- // Read HTTP status code
- //
- DWORD dwErrorCode = GetLastError();
- DWORD dwStatus=0;
- DWORD dwStatusSize = sizeof(DWORD);
-
- if (FALSE == ::HttpQueryInfo(hRequest, HTTP_QUERY_FLAG_NUMBER |
- HTTP_QUERY_STATUS_CODE, &dwStatus, &dwStatusSize, NULL)) {
- dwErrorCode = GetLastError();
- }
-
- bCont = TRUE;
- while ((dwStatus == HTTP_STATUS_PROXY_AUTH_REQ ||
- dwStatus == HTTP_STATUS_DENIED) &&
- bCont) {
- int result = ::InternetErrorDlg(GetDesktopWindow(), hRequest, ERROR_INTERNET_INCORRECT_PASSWORD,
- FLAGS_ERROR_UI_FILTER_FOR_ERRORS |
- FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS |
- FLAGS_ERROR_UI_FLAGS_GENERATE_DATA,
- NULL);
- if (ERROR_CANCELLED == result) {
- bCont = FALSE;
- }
- else {
- ::HttpSendRequest(hRequest, NULL, 0, NULL, 0);
-
- // Reset buffer length
- dwStatusSize = sizeof(DWORD);
-
- ::HttpQueryInfo(hRequest, HTTP_QUERY_FLAG_NUMBER |
- HTTP_QUERY_STATUS_CODE, &dwStatus, &dwStatusSize,
- NULL);
- }
- }
-
- if (dwStatus == HTTP_STATUS_OK ||
- dwStatus == HTTP_STATUS_PARTIAL_CONTENT) {
- // Determine content length, so we may show the progress bar
- // meaningfully
- //
- nContentLength = 0;
- DWORD nLengthSize = sizeof(DWORD);
- ::HttpQueryInfo(hRequest,
- HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER,
- &nContentLength, &nLengthSize, NULL);
-
- if (nContentLength <= 0) {
- // If can't estimate content length, estimate it
- // to be 6MB
- nContentLength = 15000000;
- }
- else if (rangereq && (fileSize != 0) &&
- (nContentLength == fileSize)) {
- // If the file is already downloaded completely and then
- // we send a range request, the whole file is sent instead
- // of nothing. So avoid downloading again.
- // Some times return value is 206, even when whole file
- // is sent. So check if "Content-range:" is present in the
- // reply
- char buffer[256];
- DWORD length = sizeof(buffer);
- if(!HttpQueryInfo(hRequest, HTTP_QUERY_CONTENT_RANGE,
- buffer, &length, NULL)) {
- if(HttpQueryInfo(hRequest, HTTP_QUERY_LAST_MODIFIED,
- buffer, &length, NULL)) {
- SYSTEMTIME systime;
- FILETIME filtime;
- InternetTimeToSystemTime(buffer, &systime, NULL);
- SystemTimeToFileTime(&systime, &filtime);
- if ((CompareFileTime(&tWrite, &filtime)) == 1) {
- // no need to download
- dwDownloadError = 0;
- __leave;
- }
- }
- else {
- ::SetFilePointer(hFile, 0, 0, FILE_BEGIN);
- ::SetEndOfFile(hFile); // truncate the file
- }
- }
-
- }
-
- TCHAR szBuffer[8096];
- DWORD dwBufferSize = 8096;
-
- // Read from HTTP connection and write into
- // destination file
- //
- DWORD nRead = 0;
- DWORD dwTotalRead = 0;
- BOOL bCancel = FALSE;
-
- if (dwStatus == HTTP_STATUS_PARTIAL_CONTENT) {
- // If we are using resumable download, fake
- // start time so it looks like we have begun
- // the download several minutes again.
- //
- m_startTime = m_startTime - 100;
-
- ::SetFilePointer(hFile, 0, 0, FILE_END); // seek to end
- }
- else {
- ::SetFilePointer(hFile, 0, 0, FILE_BEGIN);
- ::SetEndOfFile(hFile); // truncate the file
- }
-
- do {
- nRead=0;
-
- if (::InternetReadFile(hRequest, szBuffer, dwBufferSize,
- &nRead)) {
- if (nRead) {
- DWORD dwNumberOfBytesWritten = NULL;
-
- BOOL ret = WriteFile(hFile, szBuffer, nRead,
- &dwNumberOfBytesWritten, NULL);
-
- if (!ret) {
- // WriteFile failed
- if (bUIFeedback) {
- if (GetLastError() == ERROR_DISK_FULL) {
- bRetryHttpRequest =
- (IDRETRY == m_dlg->SafeMessageBox(
- IDS_DISK_FULL_ERROR,
- IDS_DISK_FULL_ERROR_CAPTION,
- IDS_ERROR_CAPTION,
- DIALOG_ERROR_RETRYCANCEL,
- wName));
- } else {
- bRetryHttpRequest =
- (IDRETRY == m_dlg->SafeMessageBox(
- IDS_DISK_WRITE_ERROR,
- IDS_DISK_WRITE_ERROR_CAPTION,
- IDS_ERROR_CAPTION,
- DIALOG_ERROR_RETRYCANCEL,
- wName));
- }
- if (!bRetryHttpRequest) {
- dwDownloadError = 1;
- break;
- }
- }
- continue;
- }
- }
-
- dwTotalRead += nRead;
-
- // update download progress dialog
- m_dlg->OnProgress(nRead);
- // Check if download has been cancelled
- if (m_dlg->isDownloadCancelled()) {
- m_dlg->decrementProgressMax(nContentLength,
- dwTotalRead);
- bCancel = TRUE;
- break;
- }
-
- }
- else {
- bCancel = TRUE;
- break;
- }
- }
- while (nRead);
-
-
- if (bCancel) {
- // User has cancelled the operation or InternetRead failed
- // don't do return here, we need to cleanup
- dwDownloadError = 1;
- __leave;
- }
- }
- else if (dwStatus == 416 && (fileSize != 0) &&
- (fileSize != 0xFFFFFFFF)) {
- // This error could be returned, When the full file exists
- // and a range request is sent with range beyond filessize.
- // The best way to fix this is in future is, to send HEAD
- // request and get filelength before sending range request.
- dwDownloadError = 0;
- __leave;
- }
- else if (dwStatus == 403) { // Forbidden from Akamai means we need to get a new download token
- JNIEnv *env = m_dlg->getJNIEnv();
- jclass exceptionClass = env->FindClass("java/net/HttpRetryException");
- if (exceptionClass == NULL) {
- /* Unable to find the exception class, give up. */
- __leave;
- }
- jmethodID constructor;
- constructor = env->GetMethodID(exceptionClass,
- "<init>", "(Ljava/lang/String;I)V");
- if (constructor != NULL) {
- jobject exception = env->NewObject(exceptionClass,
- constructor, env->NewStringUTF("Forbidden"),
- 403);
- env->Throw((jthrowable) exception);
- }
- __leave;
- }
- else if(dwStatus >= 400 && dwStatus < 600) {
- /* NB: Following case seems to be never used!
-
- HTTP_STATUS_FORBIDDEN is the same as 403 and
- 403 was specially handled few lines above! */
- if (dwStatus == HTTP_STATUS_FORBIDDEN) {
- if (bUIFeedback) {
- bRetryHttpRequest = (IDRETRY == m_dlg->SafeMessageBox(
- IDS_HTTP_STATUS_FORBIDDEN,
- IDS_HTTP_INSTRUCTION_FORBIDDEN,
- IDS_ERROR_CAPTION,
- DIALOG_ERROR_RETRYCANCEL,
- L"403"));
- }
- }
- else if (dwStatus == HTTP_STATUS_SERVER_ERROR) {
- if (bUIFeedback) {
- bRetryHttpRequest = (IDRETRY == m_dlg->SafeMessageBox(
- IDS_HTTP_STATUS_SERVER_ERROR,
- IDS_HTTP_INSTRUCTION_UNKNOWN_ERROR,
- IDS_ERROR_CAPTION,
- DIALOG_ERROR_RETRYCANCEL,
- L"500"));
- }
- }
- else if (dwStatus == HTTP_STATUS_SERVICE_UNAVAIL) {
- if (numberOfRetry < 5) {
- // If the server is busy, automatically retry
-
- // We wait couple seconds before retry to avoid
- // congestion
- for (long i = (long) secondsToWait; i >= 0; i--) {
- // Update status
- if (bUIFeedback) {
- char szBuffer[BUFFER_SIZE];
- ::LoadString(_Module.GetResourceInstance(),
- IDS_DOWNLOAD_STATUS_RETRY, szStatus,
- BUFFER_SIZE);
- wsprintf(szBuffer, szStatus, i);
-
- ::SetWindowText(hProgressInfo, szBuffer);
- }
-
- // Sleep 1 second
- ::Sleep(1000);
- }
-
- // We use a semi-binary backoff algorithm to
- // determine seconds to wait
- numberOfRetry += 1;
- secondsToWait = secondsToWait + 30;
- bRetryHttpRequest = TRUE;
-
- continue;
- }
- else {
- if (bUIFeedback) {
- bRetryHttpRequest = (IDRETRY == m_dlg->SafeMessageBox(
- IDS_HTTP_STATUS_SERVICE_UNAVAIL,
- IDS_HTTP_INSTRUCTION_SERVICE_UNAVAIL,
- IDS_ERROR_CAPTION,
- DIALOG_ERROR_RETRYCANCEL,
- L"503"));
-
- if (bRetryHttpRequest) {
- numberOfRetry = 0;
- secondsToWait = 60;
- continue;
- }
- }
- }
- }
- else {
- if (bUIFeedback) {
- WCHAR szBuffer[10];
- _snwprintf(szBuffer, 10, L"%d", dwStatus);
- bRetryHttpRequest = (IDRETRY == m_dlg->SafeMessageBox(
- IDS_HTTP_STATUS_OTHER,
- IDS_HTTP_INSTRUCTION_UNKNOWN_ERROR,
- IDS_ERROR_CAPTION,
- DIALOG_ERROR_RETRYCANCEL,
- szBuffer));
- }
- }
- if (!bRetryHttpRequest) {
- dwDownloadError = 1;
- }
- }
- else {
- if (bUIFeedback) {
- WCHAR szBuffer[10];
- _snwprintf(szBuffer, 10, L"%d", dwStatus);
- bRetryHttpRequest = (IDRETRY == m_dlg->SafeMessageBox(
- IDS_HTTP_STATUS_OTHER,
- IDS_HTTP_INSTRUCTION_UNKNOWN_ERROR,
- IDS_ERROR_CAPTION,
- DIALOG_ERROR_RETRYCANCEL,
- szBuffer));
- }
- if (!bRetryHttpRequest) {
- dwDownloadError = 1;
- }
- }
-
-
-
- // Close HTTP request
- //
- // This is necessary if the HTTP request
- // is retried
- if (hRequest)
- ::InternetCloseHandle(hRequest);
- if (hFile != INVALID_HANDLE_VALUE) {
- ::CloseHandle(hFile);
- hFile = INVALID_HANDLE_VALUE;
- }
- }
- while (bRetryHttpRequest);
- }
- __finally {
- if (hRequest)
- ::InternetCloseHandle(hRequest);
-
- if (hConnect)
- ::InternetCloseHandle(hConnect);
-
- if (hOpen)
- ::InternetCloseHandle(hOpen);
-
- if (hFile != INVALID_HANDLE_VALUE)
- ::CloseHandle(hFile);
- }
-
-
-
- // Exit dialog
- if (dwDownloadError == 0) {
- return S_OK;
- } else {
- DeleteFile(szLocalFile);
- return E_FAIL;
- }
-}
--- a/jdk/src/windows/native/sun/jkernel/DownloadHelper.h Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-#ifndef BUFFER_SIZE
-#define BUFFER_SIZE 2048
-#endif
-
-#define E_JDHELPER_TIMEOUT 12002
-#define E_JDHELPER_NAME_NOT_RESOLVED 12007
-#define E_JDHELPER_CANNOT_CONNECT 12029
-
-#include <jni.h>
-#include "DownloadDialog.h"
-
-class DownloadHelper {
-public:
- DownloadHelper();
- ~DownloadHelper();
-
- HRESULT doDownload();
-
- void setFile(LPCTSTR pszFileName) {
- m_pszFileName = pszFileName;
- }
-
- void setURL(LPCTSTR pszURL) {
- m_pszURL = pszURL;
- }
-
- void setNameText(LPTSTR pszNameText) {
- m_pszNameText = pszNameText;
- }
-
- void setShowProgressDialog(BOOL showProgress) {
- m_showProgressDialog = showProgress;
- }
-
- void setDownloadDialog(CDownloadDialog* dialog) {
- m_dlg = dialog;
- }
-
- void setJavaVM(JavaVM *jvm) {
- m_jvm = jvm;
- }
-
-private:
- HRESULT DownloadFile(const TCHAR* szURL, const TCHAR* szLocalFile,
- BOOL bResumable, BOOL bUIFeedback);
-
- BOOL m_showProgressDialog;
- LPCTSTR m_pszURL;
- LPCTSTR m_pszFileName;
- LPTSTR m_pszNameText;
- time_t m_startTime;
- CComAutoCriticalSection m_csDownload;
- CDownloadDialog* m_dlg;
- JavaVM* m_jvm;
-};
Binary file jdk/src/windows/native/sun/jkernel/graphics/bullet.bmp has changed
Binary file jdk/src/windows/native/sun/jkernel/graphics/cautionshield32.bmp has changed
Binary file jdk/src/windows/native/sun/jkernel/graphics/java-icon.ico has changed
Binary file jdk/src/windows/native/sun/jkernel/graphics/masthead.bmp has changed
Binary file jdk/src/windows/native/sun/jkernel/graphics/warningmasthead.bmp has changed
--- a/jdk/src/windows/native/sun/jkernel/kernel.cpp Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1621 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-#define _WIN32_WINNT 0x0500
-#define WINVER 0x0500
-
-#include "stdafx.h"
-#include <shlobj.h>
-#include <atlbase.h>
-#include <locale.h>
-
-CComModule _Module;
-
-#include <atlwin.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include "Windows.h"
-#include "WinNT.h"
-#include <shellapi.h>
-#include "DownloadDialog.h"
-#include "DownloadHelper.h"
-#include "kernel.h"
-#include "sun_jkernel_DownloadManager.h"
-#include "sun_jkernel_Bundle.h"
-#include "sun_jkernel_Mutex.h"
-#include "sun_jkernel_BackgroundDownloader.h"
-#include <stdio.h>
-#include <windows.h>
-#include <conio.h>
-#include <tchar.h>
-#include <tchar.h>
-#include <sddl.h>
-#include <Aclapi.h>
-#include <strsafe.h>
-
-BOOL IsPlatformWindowsVista();
-
-#define BUFSIZE 4096
-
-#define JBROKERPIPE "\\\\.\\pipe\\jbrokerpipe"
-#define JREMAINKEY "SOFTWARE\\JavaSoft\\Java Runtime Environment"
-#define JRE_VERSION_REGISTRY_KEY JREMAINKEY "\\" VERSION
-#define ReleaseAndClose(mutex) \
- if (mutex != NULL) { \
- ReleaseMutex(mutex); \
- CloseHandle(mutex); \
- mutex = NULL; \
- }
-
-#define KERNEL_DEBUG false
-
-// used to inform kernel that we believe it is running in high integrity
-#define JBROKER_KEY "-Dkernel.spawned.from.jbroker=true -Dkernel.background.download=false"
-
-// this is only available on Vista SDK, hard code it here for now
-#define LABEL_SECURITY_INFORMATION (0x00000010L)
-
-// The LABEL_SECURITY_INFORMATION SDDL SACL to be set for low integrity
-LPCSTR LOW_INTEGRITY_SDDL_SACL = "S:(ML;;NW;;;LW)";
-
-CDownloadDialog dlg;
-BOOL createDialog = TRUE;
-
-CComAutoCriticalSection m_csCreateDialog;
-
-typedef BOOL (WINAPI *LPFNInitializeSecurityDescriptor)(
- PSECURITY_DESCRIPTOR pSecurityDescriptor, DWORD dwRevision);
-typedef BOOL (WINAPI *LPFNSetSecurityDescriptorDacl)(
- PSECURITY_DESCRIPTOR pSecurityDescriptor, BOOL bDaclPresent, PACL pDacl,
- BOOL bDaclDefaulted);
-
-typedef BOOL (WINAPI *LPFNConvertStringSecurityDescriptorToSecurityDescriptorA)(
- LPCSTR StringSecurityDescriptor, DWORD StringSDRevision,
- PSECURITY_DESCRIPTOR* SecurityDescriptor,
- PULONG SecurityDescriptorSize);
-
-typedef BOOL (WINAPI *LPFNGetSecurityDescriptorSacl)(
- PSECURITY_DESCRIPTOR pSecurityDescriptor, LPBOOL lpbSaclPresent,
- PACL* pSacl, LPBOOL lpbSaclDefaulted);
-
-typedef DWORD (WINAPI *LPFNSetSecurityInfo)(HANDLE handle,
- SE_OBJECT_TYPE ObjectType, SECURITY_INFORMATION SecurityInfo,
- PSID psidOwner, PSID psidGroup, PACL pDacl, PACL pSacl);
-
-BOOL APIENTRY DllMain( HANDLE hModule,
- DWORD ul_reason_for_call,
- LPVOID lpReserved
- )
-{
- return TRUE;
-}
-
-char* getStringPlatformChars(JNIEnv* env, jstring jstr) {
- char *result = NULL;
- size_t len;
- const jchar* utf16 = env->GetStringChars(jstr, NULL);
- len = wcstombs(NULL, (const wchar_t*)utf16, env->GetStringLength(jstr) * 4) + 1;
- if (len == -1)
- return NULL;
- result = (char*) malloc(len);
- if (wcstombs(result, (const wchar_t*)utf16, len) == -1)
- return NULL;
- env->ReleaseStringChars(jstr, utf16);
- return result;
-}
-
-bool SetObjectToLowIntegrity ( HANDLE hObject,
- SE_OBJECT_TYPE type = SE_KERNEL_OBJECT ) {
-
- bool bRet = false;
- DWORD dwErr = ERROR_SUCCESS;
- PSECURITY_DESCRIPTOR pSD = NULL;
- PACL pSacl = NULL;
- BOOL fSaclPresent = FALSE;
- BOOL fSaclDefaulted = FALSE;
-
- // initialize function pointers
- HMODULE hModule = LoadLibrary("Advapi32.dll");
-
- // ConvertStringSecurityDescriptorToSecurityDescriptorA
- LPFNConvertStringSecurityDescriptorToSecurityDescriptorA
- lpfnConvertStringSecurityDescriptorToSecurityDescriptorA =
- (LPFNConvertStringSecurityDescriptorToSecurityDescriptorA)GetProcAddress(
- hModule,
- "ConvertStringSecurityDescriptorToSecurityDescriptorA");
-
- // GetSecurityDescriptorSacl
- LPFNGetSecurityDescriptorSacl lpfnGetSecurityDescriptorSacl =
- (LPFNGetSecurityDescriptorSacl)GetProcAddress(hModule,
- "GetSecurityDescriptorSacl");
-
- // SetSecurityInfo
- LPFNSetSecurityInfo lpfnSetSecurityInfo =
- (LPFNSetSecurityInfo)GetProcAddress(hModule,
- "SetSecurityInfo");
-
- if (lpfnConvertStringSecurityDescriptorToSecurityDescriptorA == NULL ||
- lpfnGetSecurityDescriptorSacl == NULL ||
- lpfnSetSecurityInfo == NULL) {
- if (KERNEL_DEBUG) {
- printf("Fail to initialize function pointer\n");
- }
- FreeLibrary(hModule);
- return FALSE;
- }
-
- // Set object to lower integrity
- if ( lpfnConvertStringSecurityDescriptorToSecurityDescriptorA(
- LOW_INTEGRITY_SDDL_SACL, SDDL_REVISION_1, &pSD, NULL ) ) {
- if ( lpfnGetSecurityDescriptorSacl(
- pSD, &fSaclPresent, &pSacl, &fSaclDefaulted ) ) {
- dwErr = lpfnSetSecurityInfo(
- hObject, type, LABEL_SECURITY_INFORMATION,
- NULL, NULL, NULL, pSacl );
-
- bRet = (ERROR_SUCCESS == dwErr);
- }
-
- LocalFree( pSD );
- }
-
- FreeLibrary(hModule);
- return bRet;
-}
-
-
-JNIEXPORT jlong JNICALL Java_sun_jkernel_Mutex_createNativeMutex
- (JNIEnv *env , jclass cls, jstring id) {
- SECURITY_ATTRIBUTES sa;
- PSECURITY_DESCRIPTOR pSD = NULL;
- BOOL saInitialized = FALSE;
-
- // initialize function pointers
- HMODULE hModule = LoadLibrary("Advapi32.dll");
-
- // InitializeSecurityDescriptor
- LPFNInitializeSecurityDescriptor lpfnInitializeSecurityDescriptor =
- (LPFNInitializeSecurityDescriptor)GetProcAddress(hModule,
- "InitializeSecurityDescriptor");
-
- // SetSecurityDescriptorDacl
- LPFNSetSecurityDescriptorDacl lpfnSetSecurityDescriptorDacl =
- (LPFNSetSecurityDescriptorDacl)GetProcAddress(hModule,
- "SetSecurityDescriptorDacl");
-
- if (lpfnInitializeSecurityDescriptor != NULL &&
- lpfnSetSecurityDescriptorDacl != NULL) {
-
- // Initialize a security descriptor.
- pSD = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR,
- SECURITY_DESCRIPTOR_MIN_LENGTH);
- if (NULL == pSD) {
- if (KERNEL_DEBUG) {
- printf("LocalAlloc Error %u\n", GetLastError());
- }
- FreeLibrary(hModule);
- return NULL;
- }
-
- if (!lpfnInitializeSecurityDescriptor(pSD,
- SECURITY_DESCRIPTOR_REVISION)) {
- if (KERNEL_DEBUG) {
- printf("InitializeSecurityDescriptor Error %u\n", GetLastError());
- }
- FreeLibrary(hModule);
- return NULL;
-
- }
- // Add the ACL to the security descriptor.
- if (!lpfnSetSecurityDescriptorDacl(pSD,
- TRUE, // bDaclPresent flag
- NULL, // NULL DACL is assigned to the security descriptor,
- // which allows all access to the object.
- // This is to allow the mutex to be accessbile by
- // all users; The background downloader launched
- // by the installer will be running as SYSTEM user;
- // while other java process started by the current
- // user will be running as the current username.
- FALSE)) // not a default DACL
- {
- if (KERNEL_DEBUG) {
- printf("SetSecurityDescriptorDacl Error %u\n",
- GetLastError());
- }
- FreeLibrary(hModule);
- return NULL;
- }
-
- // Initialize a security attributes structure.
- sa.nLength = sizeof (SECURITY_ATTRIBUTES);
- sa.lpSecurityDescriptor = pSD;
- sa.bInheritHandle = FALSE;
-
- saInitialized = TRUE;
- FreeLibrary(hModule);
- }
-
- HANDLE m = CreateMutex(saInitialized ? &sa : NULL, FALSE,
- (LPCSTR) getStringPlatformChars(env, id));
- if (m == NULL) {
- if (KERNEL_DEBUG) {
- printf("CreateMutex Error %u\n", GetLastError());
- }
- }
-
- // set the mutex object to low integrity on vista, so the mutex
- // can be accessed by different integrity level
- if (IsPlatformWindowsVista()) {
- if (!SetObjectToLowIntegrity(m)) {
- if (KERNEL_DEBUG) {
- printf("Fail to set Mutex object to low integrity\n");
- }
- }
- }
- return (jlong)m ;
-}
-
-
-HANDLE getMutexHandle(JNIEnv *env, jobject mutex) {
- jfieldID handle = env->GetFieldID(env->GetObjectClass(mutex), "handle", "J");
- return (HANDLE) env->GetLongField(mutex, handle);
-}
-
-JNIEXPORT jboolean JNICALL Java_sun_jkernel_Mutex_acquire__I
- (JNIEnv *env, jobject mutex, jint timeout) {
- HANDLE hmutex = getMutexHandle(env, mutex);
- if (hmutex != NULL) {
- int result = WaitForSingleObject(hmutex, timeout);
- if (result == WAIT_ABANDONED)
- result = WaitForSingleObject(hmutex, timeout);
- return (result == WAIT_OBJECT_0);
- }
- else
- return false;
-}
-
-void ThrowByName(JNIEnv *env, const char *name, const char *msg) {
- jclass cls = env->FindClass(name);
- /* if cls is NULL, an exception has already been thrown */
- if (cls != NULL) {
- env->ThrowNew(cls, msg);
- }
- /* free the local ref */
- env->DeleteLocalRef(cls);
-}
-
-JNIEXPORT void JNICALL Java_sun_jkernel_Mutex_acquire__
- (JNIEnv *env, jobject mutex) {
- if (!Java_sun_jkernel_Mutex_acquire__I(env, mutex, INFINITE)) {
- // failed to acquire mutex, most likely because it was already disposed
- ThrowByName(env, "java/lang/IllegalStateException",
- "error acquiring mutex");
- }
-}
-
-JNIEXPORT void JNICALL Java_sun_jkernel_Mutex_release
- (JNIEnv *env, jobject mutex) {
- HANDLE hmutex = getMutexHandle(env, mutex);
- if (hmutex != NULL)
- ReleaseMutex(hmutex);
- else
- ThrowByName(env, "java/lang/IllegalStateException",
- "releasing disposed mutex");
-}
-
-JNIEXPORT void JNICALL Java_sun_jkernel_Mutex_destroyNativeMutex
- (JNIEnv *env, jobject mutex) {
- HANDLE hmutex = getMutexHandle(env, mutex);
- if (hmutex != NULL) {
- Java_sun_jkernel_Mutex_release(env, mutex);
- CloseHandle(hmutex);
- }
-}
-
-void createDownloadWindowProc(LPVOID lpParameter) {
- CDownloadDialog* pDlg = (CDownloadDialog *) lpParameter;
-
- pDlg->delayedDoModal();
-
- // dialog destroyed, need to create a new one next time
- createDialog = TRUE;
-}
-
-
-void createDownloadWindow(LPVOID lpParameter) {
- // Create a new thread for download window
- DWORD dwThreadId = NULL;
- ::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) createDownloadWindowProc, lpParameter, 0, &dwThreadId);
-}
-
-JNIEXPORT void JNICALL Java_sun_jkernel_DownloadManager_bundleInstallComplete
- (JNIEnv *env, jclass dm) {
- dlg.bundleInstallComplete();
-}
-
-JNIEXPORT void JNICALL Java_sun_jkernel_DownloadManager_bundleInstallStart
- (JNIEnv *env, jclass dm) {
-
- dlg.bundleInstallStart();
-}
-
-typedef HRESULT (WINAPI *LPFNIEIsProtectedModeProcess)(BOOL *pbResult);
-
-BOOL isRunningIEProtectedMode() {
-
- HMODULE hModule = NULL;
- LPFNIEIsProtectedModeProcess lpfnIEIsProtectedModeProcess;
-
- __try {
- hModule = LoadLibrary("ieframe.dll");
- if (hModule != NULL) {
-
- lpfnIEIsProtectedModeProcess = (LPFNIEIsProtectedModeProcess)
- GetProcAddress(hModule, "IEIsProtectedModeProcess");
-
- if (lpfnIEIsProtectedModeProcess != NULL) {
- BOOL bProtectedMode = FALSE;
- HRESULT hr = lpfnIEIsProtectedModeProcess(&bProtectedMode);
- if ( SUCCEEDED(hr) && bProtectedMode ) {
- // IE is running in protected mode
- return TRUE;
- } else {
- // IE isn't running in protected mode
- return FALSE;
- }
- }
- }
- } __finally {
- if (hModule != NULL) {
- FreeLibrary(hModule);
- }
- }
- return FALSE;
-}
-
-/* Return TRUE if current running platform is Windows Vista, FALSE otherwise */
-BOOL IsPlatformWindowsVista() {
- static BOOL initialized = FALSE;
- static BOOL isVista = FALSE;
- OSVERSIONINFO osvi;
-
- if (initialized) {
- return isVista;
- }
-
- // Initialize the OSVERSIONINFO structure.
- ZeroMemory( &osvi, sizeof( osvi ) );
- osvi.dwOSVersionInfoSize = sizeof( osvi );
-
- GetVersionEx( &osvi ); // Assume this function succeeds.
-
- if ( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT &&
- osvi.dwMajorVersion == 6 ) {
- isVista = TRUE;
- } else {
- isVista = FALSE;
- }
-
- initialized = TRUE;
-
- return isVista;
-}
-
-JNIEXPORT jboolean JNICALL Java_sun_jkernel_DownloadManager_isIEProtectedMode
- (JNIEnv *env, jclass dm) {
-
- if (isRunningIEProtectedMode()) {
- return TRUE;
- }
- return FALSE;
-}
-
-JNIEXPORT jboolean JNICALL Java_sun_jkernel_DownloadManager_isWindowsVista
- (JNIEnv *env, jclass dm) {
-
- if (IsPlatformWindowsVista()) {
- return TRUE;
- }
- return FALSE;
-}
-
-int sendMessageToBroker(const char * message) {
- char ackString[1024];
- HANDLE hp = INVALID_HANDLE_VALUE;
-
- while (hp == INVALID_HANDLE_VALUE) {
- hp = CreateNamedPipe(_T(JBROKERPIPE),
- PIPE_ACCESS_DUPLEX | FILE_FLAG_FIRST_PIPE_INSTANCE ,
- PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,
- 1, // number of pipes that can exist
- 1024, // output buffer
- 1024, // input buffer
- 0, // timeout
- NULL); // security attributes
-
- if (hp == INVALID_HANDLE_VALUE) {
- DWORD err = GetLastError();
- // we only allow one instance of the pipe; if the instance
- // already exists, we will get ERROR_ACCESS_DENIED, which means
- // some other process is using the pipe, so let's try again
- if (err != ERROR_ACCESS_DENIED && err != ERROR_PIPE_BUSY) {
- // create pipe failed
- return 0;
- }
- // pipe instance might be in use, keep trying
- }
- }
-
- // Wait for the client to connect; if it succeeds,
- // the function returns a nonzero value. If the function
- // returns zero, GetLastError returns ERROR_PIPE_CONNECTED.
- BOOL fConnected = ConnectNamedPipe(hp, NULL) ?
- TRUE : (GetLastError() == ERROR_PIPE_CONNECTED);
-
- if (fConnected)
- {
- // Send message to the pipe server.
- DWORD cbWritten;
-
- BOOL fSuccess = WriteFile(
- hp, // pipe handle
- message, // message
- (strlen(message)+1)*sizeof(char), // message length
- &cbWritten, // bytes written
- NULL); // not overlapped
-
- if (!fSuccess)
- {
- // WriteFile failed
- CloseHandle(hp);
- return 0;
- }
-
- // wait for ack from server
- DWORD cbRead;
- TCHAR chBuf[BUFSIZE];
-
- do
- {
- // Read from the pipe.
- fSuccess = ReadFile(
- hp, // pipe handle
- chBuf, // buffer to receive reply
- BUFSIZE*sizeof(TCHAR), // size of buffer
- &cbRead, // number of bytes read
- NULL); // not overlapped
-
- if (! fSuccess && GetLastError() != ERROR_MORE_DATA)
- break;
-
- sprintf(ackString, "%s", chBuf);
-
-
- } while (!fSuccess); // repeat loop if ERROR_MORE_DATA
- }
-
- CloseHandle(hp);
-
- if (strcmp(ackString, "SUCCESS") == 0) {
- // server completed move command successfully
- return 1;
- }
-
- return 0;
-}
-
-int sendMoveMessageToBroker(const char * fromPath, const char * userHome) {
- // Send move message
- char * movecmd = "MOVEFILE";
-
- char * msg = (char*)malloc((strlen(fromPath) + strlen(movecmd) +
- strlen(userHome) + 3) * sizeof(char));
-
- sprintf(msg, "%s*%s*%s", movecmd, fromPath, userHome);
-
- return sendMessageToBroker(msg);
-}
-
-int sendMoveDirMessageToBroker(const char * fromPath, const char * userHome) {
- // Send move dir message
- char * movecmd = "MOVEDIR";
-
- char * msg = (char*)malloc((strlen(fromPath) + strlen(movecmd) +
- strlen(userHome) + 3) * sizeof(char));
-
- sprintf(msg, "%s*%s*%s", movecmd, fromPath, userHome);
-
- return sendMessageToBroker(msg);
-}
-
-
-int sendKillMessageToBroker() {
- // Send move message
- char * killcmd = "KILLBROKER";
- return sendMessageToBroker(killcmd);
-}
-
-
-int sendPerformCompletionMessageToBroker(const char *javaHome) {
- const char *cmd = "PERFORMCOMPLETION";
-
- int result = sendMessageToBroker(cmd);
-
- if (result)
- sendKillMessageToBroker();
- return result;
-}
-
-int getConstantInt(JNIEnv *env, jclass cls, const char *name) {
- jfieldID handle = env->GetStaticFieldID(cls, name, "I");
- return env->GetStaticIntField(cls, handle);
-}
-
-JNIEXPORT void JNICALL Java_sun_jkernel_DownloadManager_displayError
- (JNIEnv *env, jclass dm, jint code, jstring arg) {
- int messageId = IDS_FATAL_ERROR;
- int titleId = IDS_ERROR_CAPTION;
- if (code == getConstantInt(env, dm, "ERROR_MALFORMED_BUNDLE_PROPERTIES"))
- messageId = IDS_ERROR_MALFORMED_BUNDLE_PROPERTIES;
- else if (code == getConstantInt(env, dm, "ERROR_DOWNLOADING_BUNDLE_PROPERTIES"))
- messageId = IDS_ERROR_DOWNLOADING_BUNDLE_PROPERTIES;
- else if (code == getConstantInt(env, dm, "ERROR_MALFORMED_URL"))
- messageId = IDS_ERROR_MALFORMED_URL;
- char message[BUFFER_SIZE];
- char rawMessage[BUFFER_SIZE];
- char title[BUFFER_SIZE];
- ::LoadString(_Module.GetModuleInstance(), titleId, title, BUFFER_SIZE);
- ::LoadString(_Module.GetModuleInstance(), messageId, rawMessage, BUFFER_SIZE);
- if (arg != NULL) {
- char *chars = getStringPlatformChars(env, arg);
- sprintf(message, rawMessage, chars);
- }
- else
- strcpy(message, rawMessage);
-
- MessageBox(NULL, message, title, MB_OK|MB_TASKMODAL);
-}
-
-JNIEXPORT jboolean JNICALL Java_sun_jkernel_DownloadManager_askUserToRetryDownloadOrQuit
- (JNIEnv *env, jclass dm, jint code) {
-
- int ret;
- if (code == getConstantInt(env, dm, "ERROR_DISK_FULL")) {
- ret = dlg.SafeMessageBox(IDS_DISK_FULL_ERROR,
- IDS_DISK_FULL_ERROR_CAPTION,
- IDS_ERROR_CAPTION,
- DIALOG_ERROR_RETRYCANCEL);
- } else {
- ret = dlg.SafeMessageBox(IDS_DOWNLOAD_RETRY_TEXT,
- IDS_DOWNLOAD_RETRY,
- IDS_ERROR_CAPTION,
- DIALOG_ERROR_RETRYCANCEL);
- }
- if (ret != IDRETRY) {
- // user choose to exit, return 0
- return JNI_FALSE;
- }
-
- // return 1 (retry the download)
- return JNI_TRUE;
-}
-
-JNIEXPORT void JNICALL Java_sun_jkernel_DownloadManager_startBackgroundDownloadWithBrokerImpl
-(JNIEnv *env, jclass dm, jstring command) {
-
- char* szCommand = getStringPlatformChars(env, command);
-
- // Send createprocess message
- char * createproccmd = "STARTBACKGROUNDDOWNLOAD";
-
- char * msg = (char*)malloc((strlen(createproccmd) + strlen(szCommand) + 2) * sizeof(char));
-
- sprintf(msg, "%s*%s", createproccmd, szCommand);
-
- sendMessageToBroker(msg);
-
- free(szCommand);
-}
-
-
-void getParent(TCHAR *path, TCHAR *dest) {
- char* lastSlash = max(strrchr(path, '\\'), strrchr(path, '/'));
- if (lastSlash == NULL) {
- *dest = NULL;
- return;
- }
- if (path != dest)
- strcpy(dest, path);
- *lastSlash = NULL;
-}
-
-
-bool createProcess(const TCHAR *path, const TCHAR *args) {
- SHELLEXECUTEINFOA shInfo;
-
- shInfo.cbSize = sizeof(SHELLEXECUTEINFOA);
- shInfo.fMask = 0;
- shInfo.hwnd = NULL;
- shInfo.lpVerb = "runas";
- shInfo.lpFile = path;
- shInfo.lpParameters = args;
- shInfo.lpDirectory = NULL;
- shInfo.nShow = SW_NORMAL;
- shInfo.hInstApp = NULL;
-
- int result = (int) ::ShellExecuteExA(&shInfo);
- // ShellExecute is documented to return >32 on success, but I'm consistently
- // getting a return of 1 despite obviously successful results. 1 is not a
- // documented return code from ShellExecute, and this may have something to
- // do with the fact that we're using an undocumented verb in the first place
- // ("runas").
- return result > 32 || result == 1;
-}
-
-
-bool launchJBroker(const char *szJavaHome) {
- char szPath[2048];
- wsprintf(szPath, "%s\\bin\\jbroker.exe", szJavaHome);
- return createProcess(szPath, NULL);
-}
-
-
-JNIEXPORT jboolean JNICALL Java_sun_jkernel_DownloadManager_launchJBroker
-(JNIEnv *env, jclass dm, jstring javaHomePath) {
- char* szJavaHome = getStringPlatformChars(env, javaHomePath);
- bool result = launchJBroker(szJavaHome);
- free(szJavaHome);
- return result ? TRUE : FALSE;
-}
-
-
-bool isJBrokerRunning() {
- HANDLE hMutex = NULL;
- DWORD ret = 0;
-
- if (isRunningIEProtectedMode()) {
-
- // check if jbroker process is running
- // Use OpenMutex since we have limited access rights.
- // CreateMutex function will fail with ERROR_ACCESS_DENIED in protected mode
- hMutex = OpenMutex(SYNCHRONIZE, FALSE, "SunJavaBrokerMutex");
-
- ret = ::GetLastError();
-
- if (hMutex != NULL) {
- CloseHandle(hMutex);
- }
-
- if (ret == ERROR_FILE_NOT_FOUND)
- {
- // jbroker not running yet, launch it
- return FALSE;
- }
-
- return TRUE;
-
- } else {
- hMutex = ::CreateMutex(NULL, TRUE, "SunJavaBrokerMutex");
-
- if ( (hMutex == NULL) || (::GetLastError() == ERROR_ALREADY_EXISTS)) {
- // jbroker already running
- if (hMutex != NULL) ::CloseHandle(hMutex);
- return TRUE;
- }
-
- if (hMutex != NULL) ::CloseHandle(hMutex);
-
- return FALSE;
- }
-}
-
-
-JNIEXPORT jboolean JNICALL Java_sun_jkernel_DownloadManager_isJBrokerRunning
-(JNIEnv *env, jclass dm) {
- return isJBrokerRunning() ? TRUE : FALSE;
-}
-
-
-JNIEXPORT jboolean JNICALL Java_sun_jkernel_DownloadManager_moveDirWithBrokerImpl
- (JNIEnv *env, jclass dm, jstring fromPath, jstring userHome) {
-
- char* fromPathChars = getStringPlatformChars(env, fromPath);
-
- char* userHomeChars = getStringPlatformChars(env, userHome);
-
- int ret = sendMoveDirMessageToBroker(fromPathChars, userHomeChars);
-
- free(fromPathChars);
-
- free(userHomeChars);
-
- if (ret == 0) {
- return FALSE;
- }
- return TRUE;
-}
-
-JNIEXPORT jboolean JNICALL Java_sun_jkernel_DownloadManager_moveFileWithBrokerImpl
- (JNIEnv *env, jclass dm, jstring fromPath, jstring userHome) {
-
- char* fromPathChars = getStringPlatformChars(env, fromPath);
-
- char* userHomeChars = getStringPlatformChars(env, userHome);
-
- int ret = sendMoveMessageToBroker(fromPathChars, userHomeChars);
-
- free(fromPathChars);
-
- free(userHomeChars);
-
- if (ret == 0) {
- return FALSE;
- }
- return TRUE;
-}
-
-/**
- * Throw an exception with the last Windows error code if available.
- */
-
-void ThrowByNameWithLastError(JNIEnv *env, char *exception, char* msg) {
- char fullMsg[1024] = {0};
- if (StringCbPrintf(fullMsg, 1024, "%s. Windows error: %d\n",
- msg, GetLastError()) != S_OK) {
-
- // Formatting failed: fall back to msg w/o error code
- ThrowByName(env, exception, msg);
- } else {
- ThrowByName(env, exception, fullMsg);
- }
-}
-
-/**
- * Common code for "extra" compression or uncompression. If extra code
- * not available do nothing but return false. If available, return true
- * after locating the extra compression library at ".." and the defined
- * path relative to the native library containing this method's code.
- * If enabled, compress or uncompress the srcPath file into destpath,
- * throwing exceptions for errors (see JNI routine docs below for details).
- */
-
-jboolean extraCommon(BOOL docompress,
- JNIEnv *env, jclass dm, jstring srcPath, jstring destPath) {
-#ifdef EXTRA_COMP_INSTALL_PATH
- const char *operation = (docompress == true) ? "e" : "d";
-
- // This should be shared with the deploy tree and should be defined
- // in an implementation like LzmaAlone.h. However the deploy build
- // doesn't exit yet wrt to this function pointer type.
-
- typedef int (*EXTRACOMPTRTYPE) (int, const char**);
-
- // Function pointer for invoking the encoder/decoder (uncompressor)
- static volatile EXTRACOMPTRTYPE mptr = NULL;
- // Volatile boolean becomes true when mptr init is finished
-
-// Stringifier macros to get the relative library path
-
-#define K_STRING(x) #x
-#define K_GETSTRING(x) K_STRING(x)
-
- char *srcPathChars = getStringPlatformChars(env, srcPath);
-
- if (srcPathChars == NULL) {
- // TODO (for all throw calls). If the class&method are *reliably*
- // reported to the user these message prefixes are silly.
- ThrowByName(env, "java/io/IOException",
- "Bundle.uncompress: GetStringPlatformChars failed");
- return true;
- }
-
- char *destPathChars = getStringPlatformChars(env, destPath);
- if (destPathChars == NULL) {
- free(srcPathChars);
- ThrowByName(env, "java/io/IOException",
- "Bundle.uncompress: GetStringPlatformChars failed");
- return true;
- }
- if (KERNEL_DEBUG) {
- printf("LZMA: %s %s to %s\n", operation, srcPathChars, destPathChars);
- }
-
-
- // This loop avoids a lot of repetitious code for exception handling.
- // If any loops are put inside this one be careful to properly
- // handle exceptions within the inner loops.
-
- do {
-
- if (mptr == NULL) {
-
- // Need to locate and link to the extra compression lib, which
- // has a pathname relative to the directory containing the library
- // containing this code, which is assumed to be one directory
- // "below" the JRE base path. That is, the JRE base path is
- // assumed to be ".." from the path of this library and then
- // EXTRA_COMP_INSTALL_PATH from the JRE base path is expected to
- // be the compression lib path.
- // But this code is defensive and tries not to fail if the
- // currently executing library is in ".". It will fail in a
- // case like this if the extra compression lib path isn't
- // "./EXTRA_CMP_INSTALL_PATH" (or just "EXTRA_CMP_INSTALL_PATH").
- // Use macro magic to get the path macro as a string value.
-
- const char *libRelativePath = K_GETSTRING(EXTRA_COMP_INSTALL_PATH);
-
- // The max length the base JRE path can be to safely concatenate
- // libRelativePath, a (possible) separator, and a null terminator.
- int jreMaxPathLength = MAX_PATH - sizeof(libRelativePath) - 2;
-
- TCHAR extraLibPath[MAX_PATH] = {0};
- HMODULE kernel = GetModuleHandle("jkernel");
- if (kernel != NULL) {
- DWORD result = GetModuleFileName(kernel, extraLibPath,
- MAX_PATH-1);
- if (result > 0) {
- // remove the name of this library (and maybe a
- // separator)
- getParent(extraLibPath, extraLibPath);
- if (extraLibPath[0] != NULL) {
- // There was a directory containing the library
- // (probably "<something or nothing\\>bin"), so
- // remove that to go up to the assumed JRE base path
- getParent(extraLibPath, extraLibPath);
- } else {
- ThrowByName(env, "java/io/IOException",
- "bundle uncompression: expected lib path component not found");
- break;
- }
- // This is effectively an assertion that the concat
- // below cannot overflow
- if (extraLibPath[0] != NULL) {
- // Current dir is not ".", so add a separator
- strcat(extraLibPath, "\\");
- }
- if ((strlen(extraLibPath) + 1) > jreMaxPathLength) {
- ThrowByName(env, "java/io/IOException",
- "bundle uncompression: JRE base pathname too long");
- break;
- }
- strcat(extraLibPath, libRelativePath);
- } else {
- ThrowByName(env, "java/io/IOException",
- "bundle uncompression: GetModuleFileName failed");
- break;
- }
- } else {
- ThrowByNameWithLastError(env, "java/io/IOException",
- "bundle uncompression: GetModuleHandle failed");
- break;
- }
-
- // Load the library and develop a pointer to the decoder routine
-
- if (KERNEL_DEBUG) {
- printf("bundle uncompression: extra library path %s\n",
- extraLibPath);
- }
-
- HMODULE handle = LoadLibrary(extraLibPath);
- if (handle == NULL) {
- ThrowByNameWithLastError(env, "java/io/IOException",
- "bundle uncompression: LoadLibrary failed");
- break;
- }
-
- // find the extra uncompression routine
-
- mptr = (EXTRACOMPTRTYPE) GetProcAddress(handle,
- "ExtraCompressionMain");
-
- if (mptr == NULL) {
- ThrowByNameWithLastError(env, "java/io/IOException",
- "bundle uncompression: GetProcAddress failed");
- break;
- }
- }
-
- // Create the arguments for the decoder
- // Decoder options must go *between* the "d" argument and the
- // source path arguments and don't forget to keep the 1st arg to
- // (*mptr) the same as the number of elements of args.
- const char *args[] = {
- "", // the shared lib makes no attempt access it's "command name"
- operation,
-
- // Special decoder/encoder switch strings would go here
-
- // For example: "-d24", to set the dictionary size to 16MB
-
- "-q", // Suppress banner msg output
-
- // No special option switch strings after here
-
- srcPathChars,
- destPathChars
- };
- int argc = sizeof(args) / sizeof(const char *);
- if ((*mptr)(argc, args) != 0) {
- if (KERNEL_DEBUG) {
- printf("uncompress lib call failed with args: ");
- for (int i = 0; i < argc; i++) {
- printf("%s", args[i]);
- }
- printf("\n");
- }
- ThrowByName(env, "java/io/IOException",
- "bundle uncompression: uncompression failed");
- break;
- }
- } while (false);
-
- free(srcPathChars);
- free(destPathChars);
- return TRUE;
-#else
- if (KERNEL_DEBUG) {
- printf("LZMA not compiled in!\n");
- }
-
- return FALSE;
-#endif // EXTRA_COMP_INSTALL_PATH
-}
-
-/**
- * Compress file sourcePath with "extra" algorithm (e.g. 7-Zip LZMA)
- * if available, put the compressed data into file destPath and
- * return true. If extra compression is not available do nothing
- * with destPath and return false;
- * @param srcPath the path of the uncompressed file
- * @param destPath the path of the compressed file, if used
- * @return true if the extra algorithm was used and destPath created
- *
- * @throws IOException if the extra compression code should be available
- * but cannot be located or linked to, the destination file already
- * exists or cannot be opened for writing, or the compression fails
- */
-JNIEXPORT jboolean JNICALL Java_sun_jkernel_Bundle_extraCompress
- (JNIEnv *env, jclass dm, jstring srcPath, jstring destPath) {
- return extraCommon(true, env, dm, srcPath, destPath);
-}
-
-/**
- * Uncompress file sourcePath with "extra" algorithm (e.g. 7-Zip LZMA)
- * if available, put the uncompressed data into file destPath and
- * return true. If if the extra algorithm is not available, leave the
- * destination path unchanged and return false;
- * @param srcPath the path of the file having extra compression
- * @param destPath the path of the uncompressed file
- * @return true if the extra algorithm was used
- *
- * @throws IOException if the extra uncompression code should be available
- * but cannot be located or linked to, the destination file already
- * exists or cannot be opened for writing, or the uncompression fails
- */
-
-JNIEXPORT jboolean JNICALL Java_sun_jkernel_Bundle_extraUncompress
- (JNIEnv *env, jclass dm, jstring srcPath, jstring destPath) {
- return extraCommon(false, env, dm, srcPath, destPath);
-}
-
-
-JNIEXPORT void JNICALL Java_sun_jkernel_DownloadManager_addToTotalDownloadSize
- (JNIEnv *env, jclass dm, jint size) {
- dlg.addToTotalContentLength(size);
-}
-
-JNIEXPORT void JNICALL Java_sun_jkernel_DownloadManager_downloadFromURLImpl
- (JNIEnv *env, jclass dm, jstring url, jobject file, jstring name,
- jboolean showProgress) {
- jclass object = env->FindClass("java/lang/Object");
- jmethodID toString = env->GetMethodID(object, "toString", "()Ljava/lang/String;");
- jstring urlString = (jstring) env->CallObjectMethod(url, toString);
- char* urlChars = getStringPlatformChars(env, urlString);
- if (KERNEL_DEBUG) {
- printf("Kernel downloadFromURL: %s\n", urlChars);
- }
- jstring fileString = (jstring) env->CallObjectMethod(file, toString);
- char* fileChars = getStringPlatformChars(env, fileString);
- char* nameChars = getStringPlatformChars(env, name);
-
- JavaVM *jvm;
- env->GetJavaVM(&jvm);
-
- __try
- {
-
- m_csCreateDialog.Lock();
- if (createDialog && showProgress) {
- // create download progress dialog in a new thread
- dlg.setJavaVM(jvm);
- createDownloadWindow(&dlg);
- createDialog = FALSE;
- }
-
- }
- __finally
- {
- m_csCreateDialog.Unlock();
- }
-
- DownloadHelper dh;
-
- dh.setJavaVM(jvm);
- dh.setURL(urlChars);
- dh.setFile(fileChars);
- dh.setNameText((char*) nameChars);
- dh.setShowProgressDialog(showProgress);
- dh.setDownloadDialog(&dlg);
-
- if (dh.doDownload() != S_OK) {
- // remove incomplete file
- int ret = DeleteFile(fileChars);
- }
-
- free(urlChars);
- free(fileChars);
- free(nameChars);
-}
-
-
-void error(char* msg) {
- MessageBox(NULL, msg, "Java Error", MB_OK);
-}
-
-
-// Replace the dest file with the src file. Returns zero on success, Windows
-// error code otherwise.
-int replace(TCHAR* fullDest, TCHAR* fullSrc) {
- struct _stat stat;
- int result = _stat(fullSrc, &stat);
- if (result == 0) {
- DeleteFile(fullDest);
- if (MoveFile(fullSrc, fullDest))
- return 0;
- else
- return GetLastError();
- }
- else
- return ENOENT; // src file not found
-}
-
-
-// Replace the dest file with the src file, where both paths are relative to
-// the specified root. Returns zero on success, Windows error code otherwise.
-int replaceRelative(TCHAR* root, TCHAR* dest, TCHAR* src) {
- TCHAR fullDest[MAX_PATH];
- TCHAR fullSrc[MAX_PATH];
- strcpy(fullDest, root);
- strcat(fullDest, dest);
- strcpy(fullSrc, root);
- strcat(fullSrc, src);
- return replace(fullDest, fullSrc);
-}
-
-
-// Atomically deletes a file tree. Returns zero on success, Windows
-// error code otherwise.
-int deleteAll(TCHAR* root) {
- TCHAR tmp[MAX_PATH];
- if (strlen(root) + 5 > MAX_PATH)
- return ERROR_BUFFER_OVERFLOW;
- strcpy(tmp, root);
- strcat(tmp, ".tmp");
- struct _stat stat;
- int result = _stat(tmp, &stat);
- if (result == 0) {
- result = !deleteAll(tmp);
- if (result)
- return result;
- }
- if (!MoveFile(root, tmp))
- return GetLastError();
- struct _SHFILEOPSTRUCTA fileOp;
- memset(&fileOp, NULL, sizeof(fileOp));
- fileOp.wFunc = FO_DELETE;
- TCHAR pFrom[MAX_PATH + 1];
- strcpy(pFrom, tmp);
- pFrom[strlen(pFrom) + 1] = NULL; // extra null to signify that there is only one file in the list
- fileOp.pFrom = pFrom;
- fileOp.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_NOERRORUI;
- return SHFileOperation(&fileOp);
-}
-
-
-// moves all file with "wait='true'" specified in bundles.xml into their final
-// locations. These files are stored under lib/bundles/tmp, e.g. lib/meta-index
-// is stored at lib/bundles/tmp/lib/meta-index.
-// relativePath is the current relative path we are searching (e.g. "lib" for the
-// example above), which begins as the empty string.
-int moveDelayedFiles(TCHAR* javaHome, TCHAR* relativePath) {
- TCHAR src[MAX_PATH];
- TCHAR* tmp = "lib\\bundles\\tmp";
- if (strlen(javaHome) + strlen(relativePath) + strlen(tmp) > MAX_PATH) {
- error("Path too long.");
- return ERROR_BUFFER_OVERFLOW;
- }
- strcpy(src, javaHome);
- strcat(src, tmp);
- if (relativePath[0] != NULL) {
- strcat(src, "\\");
- strcat(src, relativePath);
- }
-
- struct _stat stat;
- int result = _stat(src, &stat);
- if (result == 0) {
- if (stat.st_mode & _S_IFDIR) { // is a directory, loop through contents
- strcat(src, "\\*");
- struct _WIN32_FIND_DATAA file;
- HANDLE findHandle = FindFirstFile(src, &file);
- if (findHandle != INVALID_HANDLE_VALUE) {
- do {
- if (file.cFileName[0] != '.') {
- char child[MAX_PATH];
- strcpy(child, relativePath);
- strcat(child, "\\");
- strcat(child, file.cFileName);
- moveDelayedFiles(javaHome, child);
- }
- }
- while (FindNextFile(findHandle, &file) != 0);
- FindClose(findHandle);
- }
- }
- else { // normal file, move into place
- if (strcmp(relativePath, "\\finished")) {
- TCHAR dest[MAX_PATH];
- strcpy(dest, javaHome);
- strcat(dest, relativePath);
-
- DeleteFile(dest); // just in case; ignore failures
- if (MoveFile(src, dest))
- return 0;
- else
- return GetLastError();
- }
- }
- }
- return result;
-}
-
-
-// activates Class Data Sharing
-void activateCDS(const char *javaHome) {
- char java[MAX_PATH];
- strcpy(java, javaHome);
- strcat(java, "bin\\javaw.exe");
-
- STARTUPINFO si;
- PROCESS_INFORMATION pi;
- ZeroMemory(&si, sizeof(si));
- si.cb = sizeof(si);
- ZeroMemory(&pi, sizeof(pi));
- const char *args = " -Xshare:dump";
- const int argLength = 13;
- char commandLine[MAX_PATH + argLength + 2];
- strcpy(commandLine, "\"");
- strcat(commandLine, java);
- strcat(commandLine, "\"");
- strcat(commandLine, args);
- if (KERNEL_DEBUG)
- printf("Exec: %s\n", commandLine);
- if (CreateProcess(java, commandLine, NULL, NULL, FALSE, 0,
- NULL, NULL, &si, &pi)) {
- CloseHandle(pi.hProcess);
- CloseHandle(pi.hThread);
- }
- else
- printf("Error initializing Class Data Sharing: %d", GetLastError());
-}
-
-typedef BOOL (*LPFNInstallJQS)();
-
-// activates the Java Quickstart Service
-void activateJQS(HMODULE hModule) {
- LPFNInstallJQS lpfnInstallJQS;
-
- if (hModule != NULL) {
- lpfnInstallJQS = (LPFNInstallJQS)GetProcAddress(hModule, "InstallJQS");
- if (lpfnInstallJQS != NULL) {
- if ((lpfnInstallJQS)() == false && KERNEL_DEBUG) {
- printf("InstallJQS returned FALSE\n");
- }
- }
- }
-}
-
-// determines JAVA_HOME and stores it in the specified buffer. Returns true on success.
-BOOL getJavaHome(char* buffer, int bufferSize) {
- HMODULE kernel = GetModuleHandle("jkernel");
- if (kernel != NULL) {
- DWORD result = GetModuleFileName(kernel, buffer, bufferSize);
- if (result > 0) {
- getParent(buffer, buffer); // remove "jkernel.dll"
- if (buffer[0] != NULL)
- getParent(buffer, buffer); // remove "bin"
- if (buffer[0] != NULL) {
- strcat(buffer, "\\");
- return TRUE;
- }
- }
- }
- return FALSE;
-}
-
-typedef unsigned int (WINAPI *LPFNPostPing)(LPVOID err);
-HANDLE PostPing(HMODULE hModule, char* fname, DWORD err)
-{
- LPFNPostPing lpfnPostPing;
- HANDLE hThread = NULL;
- lpfnPostPing = (LPFNPostPing)GetProcAddress(hModule, fname);
- if (lpfnPostPing != NULL) {
- printf("############# ERROR CODE: %d\n", err);
- hThread = (HANDLE)_beginthreadex(NULL, 0, lpfnPostPing,
- (LPVOID)err, 0, NULL);
- if (hThread == NULL)
- lpfnPostPing((LPVOID)err);
- }
- return hThread;
-}
-
-void postPingAndWait(char* fname, DWORD err) {
- TCHAR path[MAX_PATH];
- if (getJavaHome(path, MAX_PATH)) {
- strcat(path, "bin\\regutils.dll");
- HANDLE hThread = NULL;
- HMODULE hModule = LoadLibrary(path);
- if (hModule != NULL) {
- hThread = PostPing(hModule, fname, err);
- if (hThread != NULL) {
- DWORD dwRet = 0;
- WaitForSingleObject(hThread, 60*1000);
- GetExitCodeThread(hThread, &dwRet);
- CloseHandle(hThread);
- }
- }
- }
- else
- printf("error determining JAVA_HOME for ping\n");
-}
-
-JNIEXPORT void JNICALL Java_sun_jkernel_DownloadManager_postDownloadError
- (JNIEnv *env, jclass dm, jint error) {
- postPingAndWait("PostKernelDLComp", error);
-}
-
-JNIEXPORT void JNICALL Java_sun_jkernel_DownloadManager_postDownloadComplete
- (JNIEnv *env, jclass dm) {
- Java_sun_jkernel_DownloadManager_postDownloadError(env, dm, ERROR_SUCCESS);
-}
-
-bool spawnedFromJBroker() {
- return strstr(GetCommandLine(), JBROKER_KEY) != NULL;
-}
-
-
-// Determines if we have sufficient access to go ahead and perform completion.
-// This is true either if we are not on Vista (in which case we can't elevate
-// privileges anyway and have to hope for the best) or if we are on Vista and
-// running at High integrity level.
-bool highIntegrity() {
- if (!IsPlatformWindowsVista())
- return TRUE;
- else {
- // directly determining this would require access to Vista-specific
- // APIs, which aren't supported by our current build configurations.
- // Instead we look for the presence of a flag on the command line to
- // indicate that we were launched by the jbroker process. This is
- // actually safer, as it prevents us from re-launching another JRE in
- // the event that we somehow didn't end up with high integrity.
- return spawnedFromJBroker();
- }
-}
-
-JNIEXPORT jint JNICALL Java_sun_jkernel_DownloadManager_getCurrentProcessId
- (JNIEnv *env, jclass dm) {
- return (jint) GetCurrentProcessId();
-}
-
-JNIEXPORT jstring JNICALL Java_sun_jkernel_DownloadManager_getVisitorId0
- (JNIEnv *env, jclass dm) {
- CRegKey swKey, jsKey, juKey, pKey;
- if (swKey.Open(HKEY_LOCAL_MACHINE, "SOFTWARE", KEY_READ) != ERROR_SUCCESS){
- return NULL;
- }
-
- if (jsKey.Open(swKey, "JavaSoft", KEY_READ) != ERROR_SUCCESS){
- return NULL;
- }
-
- if (juKey.Open(jsKey, "Java Update", KEY_READ) != ERROR_SUCCESS){
- return NULL;
- }
-
- if (pKey.Open(juKey, "Policy", KEY_READ) != ERROR_SUCCESS){
- return NULL;
- }
-
- DWORD dwCount = BUFSIZE;
- char* keyValue = new char[BUFSIZE];
- if (pKey.QueryValue(keyValue, "VisitorId", &dwCount) != ERROR_SUCCESS){
- return NULL;
- }
- jstring visitorId = env->NewStringUTF(keyValue);
-
- return visitorId;
-}
-
-
-JNIEXPORT jstring JNICALL Java_sun_jkernel_DownloadManager_getUrlFromRegistry
- (JNIEnv *env, jclass dm) {
-
- CRegKey swKey, jsKey;
- if (swKey.Open(HKEY_LOCAL_MACHINE, "SOFTWARE", KEY_READ) != ERROR_SUCCESS){
- return NULL;
- }
-
- if (jsKey.Open(swKey, "JavaSoft", KEY_READ) != ERROR_SUCCESS){
- return NULL;
- }
-
- DWORD dwCount = BUFSIZE;
- char * keyValue = new char[BUFSIZE];
- if (jsKey.QueryValue(keyValue, "KernelDownloadUrl", &dwCount) != ERROR_SUCCESS){
- return NULL;
- }
-
- jstring downloadKeyValue = env->NewStringUTF(keyValue);
-
- return downloadKeyValue;
-}
-
-
-
-jboolean getBooleanRegistryKey(char *name, jboolean defaultValue) {
- // Check DWORD registry key
- // HKEY_LOCAL_MACHINE/Software/JavaSoft/<name>
-
- CRegKey swKey, jsKey;
- if (swKey.Open(HKEY_LOCAL_MACHINE, "SOFTWARE", KEY_READ) != ERROR_SUCCESS){
- return NULL;
- }
-
- if (jsKey.Open(swKey, "JavaSoft", KEY_READ) != ERROR_SUCCESS){
- return NULL;
- }
-
- DWORD dwValue = 0;
- if (jsKey.QueryValue(dwValue, name) != ERROR_SUCCESS){
-
- // Key does not exist, will return default value
- return defaultValue;
- }
-
- return dwValue != 0;
-}
-
-
-JNIEXPORT jboolean JNICALL Java_sun_jkernel_BackgroundDownloader_getBackgroundDownloadKey
- (JNIEnv *env, jclass dm) {
- return getBooleanRegistryKey("KernelBackgroundDownload", TRUE);
-}
-
-
-JNIEXPORT jboolean JNICALL Java_sun_jkernel_DownloadManager_getDebugKey
- (JNIEnv *env, jclass dm) {
- return getBooleanRegistryKey("KernelDebug", FALSE);
-}
-
-
-// Called by the launcher before the JVM starts. If all kernel bundles have been
-// downloaded, this function performs various post-download cleanups such as
-// moving the merged rt.jar into place. At the end of cleanup, the JRE should
-// be indistinguishable from the non-kernel JRE.
-void preJVMStart() {
- char rawMsg[BUFFER_SIZE];
- char msg[BUFFER_SIZE];
- HMODULE kernel = GetModuleHandle("jkernel");
- if (kernel != NULL) {
- TCHAR javaHome[MAX_PATH];
- DWORD result = GetModuleFileName(kernel, javaHome, MAX_PATH);
- if (result > 0) {
- getParent(javaHome, javaHome); // remove "jkernel.dll"
- if (javaHome[0] != NULL)
- getParent(javaHome, javaHome); // remove "bin"
- if (javaHome[0] != NULL) {
- // should now be pointing to correct java.home
- strcat(javaHome, "\\");
- bool jbroker = spawnedFromJBroker();
- HANDLE file;
- TCHAR rt[MAX_PATH];
- strcpy(rt, javaHome);
- strcat(rt, "lib\\rt.jar");
- HANDLE startMutex = CreateMutex(NULL, FALSE, "jvmStart");
- if (!jbroker) { // else mutex is already held by the pre-jbroker JVM
- if (KERNEL_DEBUG)
- printf("Locking startMutex\n");
- WaitForSingleObject(startMutex, INFINITE);
- if (KERNEL_DEBUG)
- printf("Locked startMutex\n");
- // open rt.jar for reading. This prevents other JREs from being
- // able to acquire a write lock on rt.jar, which is used as a test
- // to ensure that no other JREs are running.
- // The failure to close the file handle is intentional -- if we
- // close it, there will be a brief window between the close and
- // when the JRE reopens it during which another jre could get
- // a write lock on it, hosing us.
- file = CreateFile(rt, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
- if (file == INVALID_HANDLE_VALUE) {
- ReleaseAndClose(startMutex);
- return;
- }
- if (KERNEL_DEBUG)
- printf("Opened rt.jar for reading\n");
- }
- TCHAR finished[MAX_PATH];
- TCHAR* finishedPath = "lib\\bundles\\tmp\\finished";
- if (strlen(javaHome) + strlen(finishedPath) < MAX_PATH) {
- strcpy(finished, javaHome);
- strcat(finished, finishedPath);
- struct _stat finishedStat;
- result = _stat(finished, &finishedStat);
- if (result == 0) { // JRE has been fully downloaded but not yet cleaned up
- if (KERNEL_DEBUG)
- printf("Beginning completion.\n");
- if (!jbroker)
- CloseHandle(file);
- if (highIntegrity()) {
- // attempt to open rt.jar for exclusive write access -- if this succeeds,
- // we know no other JREs are running
- file = CreateFile(rt, GENERIC_WRITE, NULL, NULL, OPEN_EXISTING, NULL, NULL);
- if (file == INVALID_HANDLE_VALUE) {
- // must be another JRE running...
- ReleaseAndClose(startMutex);
- return;
- }
- if (KERNEL_DEBUG)
- printf("Opened rt.jar for writing.\n");
- CloseHandle(file);
- if (KERNEL_DEBUG)
- printf("Closed rt.jar.\n");
- int result = replaceRelative(javaHome, "lib\\rt.jar",
- "lib\\bundles\\tmp\\merged-rt.jar");
- if (result != 0 && result != ENOENT) {
- ::LoadString(_Module.GetModuleInstance(), IDS_FILE_UPDATE_ERROR, rawMsg, BUFFER_SIZE);
- wsprintf(msg, rawMsg, javaHome, "lib\\rt.jar");
- error(msg);
- ReleaseAndClose(startMutex);
- return;
- }
- result = replaceRelative(javaHome, "lib\\resources.jar",
- "lib\\bundles\\tmp\\merged-resources.jar");
- if (result != 0 && result != ENOENT) {
- ::LoadString(_Module.GetModuleInstance(), IDS_FILE_UPDATE_ERROR, rawMsg, BUFFER_SIZE);
- wsprintf(msg, rawMsg, javaHome, "lib\\resources.jar");
- error(msg);
- ReleaseAndClose(startMutex);
- return;
- }
-
- TCHAR bundles[MAX_PATH];
- strcpy(bundles, javaHome);
- strcat(bundles, "lib\\bundles");
- if (moveDelayedFiles(javaHome, "")) {
- ::LoadString(_Module.GetModuleInstance(), IDS_FILE_UPDATE_ERROR, msg, BUFFER_SIZE);
- error(msg);
- ReleaseAndClose(startMutex);
- return;
- }
-
- TCHAR kernel[MAX_PATH];
- strcpy(kernel, javaHome);
- strcat(kernel, "bin\\kernel");
- result = deleteAll(kernel);
- if (result != 0 && result != ENOENT) {
- ::LoadString(_Module.GetModuleInstance(), IDS_FILE_DELETE_ERROR, rawMsg, BUFFER_SIZE);
- wsprintf(msg, rawMsg, kernel);
- error(msg);
- ReleaseAndClose(startMutex);
- return;
- }
-
- if (deleteAll(bundles)) {
- // fail silently, CR #6643218
- printf("deleteAll failed!\n");
- ReleaseAndClose(startMutex);
- return;
- }
-
- TCHAR kernelMap[MAX_PATH];
- strcpy(kernelMap, javaHome);
- strcat(kernelMap, "lib\\kernel.map");
- result = deleteAll(kernelMap);
- if (result != 0 && result != ENOENT) {
- ::LoadString(_Module.GetModuleInstance(), IDS_FILE_DELETE_ERROR, rawMsg, BUFFER_SIZE);
- wsprintf(msg, rawMsg, kernelMap);
- error(msg);
- ReleaseAndClose(startMutex);
- return;
- }
-
- strcpy(rt, javaHome);
- strcat(rt, "bin\\regutils.dll");
- HANDLE hThread = NULL;
- HMODULE hModule = LoadLibrary(rt);
- if (hModule != NULL)
- hThread = PostPing(hModule, "PostKernelComp", ERROR_SUCCESS);
- if (KERNEL_DEBUG)
- printf("Activating JQS.\n");
- activateJQS(hModule);
-
- if (KERNEL_DEBUG)
- printf("Activating CDS.\n");
- activateCDS(javaHome);
-
- if (hThread != NULL) {
- DWORD dwRet = 0;
- WaitForSingleObject(hThread, 60*1000);
- GetExitCodeThread(hThread, &dwRet);
- CloseHandle(hThread);
- }
- if (hModule != NULL)
- FreeLibrary(hModule);
- } else {
- bool jbroker = isJBrokerRunning();
- if (!jbroker) {
- // remove trailing slash
- javaHome[strlen(javaHome) - 1] = 0;
- jbroker = launchJBroker(javaHome);
- if (!jbroker) {
- ::LoadString(_Module.GetModuleInstance(),
- IDS_JBROKER_ERROR,
- msg,
- BUFFER_SIZE);
- error(msg);
- }
- }
- if (jbroker)
- sendPerformCompletionMessageToBroker(javaHome);
- }
- }
- }
- if (KERNEL_DEBUG)
- printf("Releasing startMutex.\n");
- ReleaseAndClose(startMutex);
- } else {
- ::LoadString(_Module.GetModuleInstance(), IDS_JAVA_HOME_ERROR, msg, BUFFER_SIZE);
- error(msg);
- }
- } else {
- ::LoadString(_Module.GetModuleInstance(), IDS_KERNEL_HOME_ERROR, msg, BUFFER_SIZE);
- error(msg);
- }
- } else {
- ::LoadString(_Module.GetModuleInstance(), IDS_KERNEL_HOME_ERROR, msg, BUFFER_SIZE);
- error(msg);
- }
-}
--- a/jdk/src/windows/native/sun/jkernel/kernel.def Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-;
-; Copyright 2008 - 2009 Sun Microsystems, Inc. All Rights Reserved.
-; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-;
-; This code is free software; you can redistribute it and/or modify it
-; under the terms of the GNU General Public License version 2 only, as
-; published by the Free Software Foundation. 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.
-;
-
-LIBRARY jkernel
-EXPORTS
- preJVMStart @1
--- a/jdk/src/windows/native/sun/jkernel/kernel.h Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-void preJVMStart();
--- a/jdk/src/windows/native/sun/jkernel/kernel.rc Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,210 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-#include "version.rc"
-
-#include "resource.h"
-#define APSTUDIO_READONLY_SYMBOLS
-#include "afxres.h"
-#undef APSTUDIO_READONLY_SYMBOLS
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Icon
-//
-IDI_JAVA ICON DISCARDABLE "graphics\\java-icon.ico"
-IDI_MASTHEAD BITMAP DISCARDABLE "graphics\\masthead.bmp"
-
-/////////////////////////////////////////////////////////////////////////////
-// Include foreign resources
-/////////////////////////////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////////////////////////////
-// Japanese resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
-#ifdef _WIN32
-LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
-#pragma code_page(932)
-#endif //_WIN32
-#include "kernel_ja.rc"
-#endif // Japanese resources
-/////////////////////////////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////////////////////////////
-// Chinese (P.R.C.) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
-#ifdef _WIN32
-LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
-#pragma code_page(936)
-#endif //_WIN32
-#include "kernel_zh.rc"
-#endif // Chinese (P.R.C.) resources
-/////////////////////////////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////////////////////////////
-// Korean resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_KOR)
-#ifdef _WIN32
-LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT
-#pragma code_page(949)
-#endif //_WIN32
-#include "kernel_ko.rc"
-#endif // Korean resources
-/////////////////////////////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////////////////////////////
-// Chinese (Taiwan) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHT)
-#ifdef _WIN32
-LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
-#pragma code_page(950)
-#endif //_WIN32
-#include "kernel_zh_TW.rc"
-#endif // Chinese (Taiwan) resources
-/////////////////////////////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////////////////////////////
-// German (Germany) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
-#ifdef _WIN32
-LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
-#pragma code_page(1252)
-#endif //_WIN32
-#include "kernel_de.rc"
-#endif // German (Germany) resources
-/////////////////////////////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////////////////////////////
-// Spanish (Castilian) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ESP)
-#ifdef _WIN32
-LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
-#pragma code_page(1252)
-#endif //_WIN32
-#include "kernel_es.rc"
-#endif // Spanish (Castilian) resources
-/////////////////////////////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////////////////////////////
-// French (France) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)
-#ifdef _WIN32
-LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
-#pragma code_page(1252)
-#endif //_WIN32
-#include "kernel_fr.rc"
-#endif // French (France) resources
-/////////////////////////////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////////////////////////////
-// Italian (Italy) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ITA)
-#ifdef _WIN32
-LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
-#pragma code_page(1252)
-#endif //_WIN32
-#include "kernel_it.rc"
-#endif // Italian (Italy) resources
-/////////////////////////////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////////////////////////////
-// Swedish resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_SVE)
-#ifdef _WIN32
-LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL
-#pragma code_page(1252)
-#endif //_WIN32
-#include "kernel_sv.rc"
-#endif // Swedish resources
-/////////////////////////////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////////////////////////////
-// Brazilian Portuguese resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_PTB)
-#ifdef _WIN32
-LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
-#pragma code_page(1252)
-#endif //_WIN32
-#include "kernel_pt_BR.rc"
-#endif // Brazilian Portuguese resources
-/////////////////////////////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////////////////////////////
-// English (U.S.) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-#ifdef _WIN32
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-#pragma code_page(1252)
-#endif //_WIN32
-#include "kernel_en.rc"
-#endif // English resources
-
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE DISCARDABLE
-BEGIN
- "#include ""afxres.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE DISCARDABLE
-BEGIN
- "\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
--- a/jdk/src/windows/native/sun/jkernel/kernel_de.rc Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_DOWNLOAD_DIALOG DIALOGEX 0, 0, 340, 120
-STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP |
- WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Zusätzliche Komponenten erforderlich"
-EXSTYLE WS_EX_APPWINDOW
-FONT 8, "MS Sans Serif"
-BEGIN
- LTEXT "", IDC_DOWNLOAD_MASTHEAD, 0, 0, 340, 39
- LTEXT "", IDC_MASTHEAD_TEXT, 60, 4, 220, 30
- CONTROL "", IDC_STATIC,"Static", SS_BLACKFRAME | SS_SUNKEN,
- 0, 39, 340, 1
- LTEXT "", IDC_DOWNLOAD_TEXT, 12, 60, 316, 20
- LTEXT "", IDC_TIME_REMAINING, 12, 90, 316, 10
- CONTROL "Progress1",1006,"msctls_progress32",PBS_SMOOTH,
- 12, 100, 265, 14
- PUSHBUTTON "Abbrechen", 2, 285, 100, 46, 14
-END
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO DISCARDABLE
-BEGIN
- 105, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 236
- TOPMARGIN, 7
- BOTTOMMARGIN, 63
- END
-END
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_DOWNLOAD_CANCEL_MESSAGE "Wenn Sie die Installation zusätzlicher Komponenten, die für die Anwendung erforderlich sind, abbrechen, wird die Anwendung möglicherweise geschlossen.\n\nMöchten Sie die Installation zusätzlicher Komponenten wirklich abbrechen?"
- IDS_DOWNLOAD_CANCEL_CAPTION "Abbrechen - Zusätzliche Komponenten"
- IDS_DOWNLOAD_CANCEL_INSTRUCTION ""
- IDS_HTTP_INSTRUCTION_REQUEST_TIMEOUT "Verbindungszeitüberschreitung"
- IDS_HTTP_INSTRUCTION_SERVER_NOT_REACHABLE "Internetverbindung kann nicht hergestellt werden"
- IDS_HTTP_INSTRUCTION_UNKNOWN_ERROR "Serverfehler (Fehler %s)"
- IDS_HTTP_INSTRUCTION_SERVICE_UNAVAIL "Der Dienst nicht verfügbar (Fehler %s)"
- IDS_HTTP_INSTRUCTION_FORBIDDEN "Zugriff verweigert oder verboten (Fehler %s)"
- IDS_HTTP_STATUS_OTHER "Bei der Anfrage ist ein Fehler aufgetreten. Möchten Sie die Anfrage wiederholen?"
-
-// HTTP status code
- IDS_HTTP_STATUS_REQUEST_TIMEOUT "Während der Server auf die Anforderung wartete, kam es zu einer Zeitüberschreitung."
- IDS_HTTP_STATUS_FORBIDDEN "Der Server hat die Anforderung verstanden, verweigert jedoch deren Ausführung."
- IDS_HTTP_STATUS_SERVER_ERROR "Der Server stieß auf eine unerwartete Bedingung, die das Ausführen der Anforderung verhinderte."
- IDS_HTTP_STATUS_SERVICE_UNAVAIL "Der Dienst ist vorübergehend überlastet."
-
-
- IDS_DOWNLOAD_STATUS_RETRY "Server beschäftigt. Erneuter Versuch in %ld Sekunden ..."
-
- IDS_ERROR_CAPTION "Fehler - Java Kernel"
- IDS_HOURSMINUTESECOND "Verbleibende Zeit (geschätzt): %d Stunden, %d Minuten und %.0f Sekunden"
- IDS_HOURMINUTESECOND "Verbleibende Zeit (geschätzt): %d Stunde, %d Minuten und %.0f Sekunden"
- IDS_MINUTESECOND "Verbleibende Zeit (geschätzt): %d Minuten %.0f Sekunden"
- IDS_SECOND "Verbleibende Zeit (geschätzt): %.0f Sekunden"
- IDS_DISK_FULL_ERROR_CAPTION "Festplatte voll"
- IDS_DISK_FULL_ERROR "Java Kernel konnte erforderliche Komponenten nicht herunterladen, da der Datenträger voll ist. Noch einmal versuchen?"
- IDS_DISK_WRITE_ERROR_CAPTION "Fehler beim Schreiben auf Datenträger"
- IDS_DISK_WRITE_ERROR "Java Kernel hat beim Schreiben uf den Datenträger einen Fehler verursacht Noch einmal versuchen?"
- IDS_HTTP_STATUS_SERVER_NOT_REACHABLE "Java Kernel kann aufgrund der aktuellen Internetverbindungseinstellungen Ihres Systems nicht fortfahren. Überprüfen Sie in der Windows-Systemsteuerung unter 'Internetoptionen -> Verbindungen' die Einstellungen und Proxy-Angaben."
-
- IDS_DOWNLOAD_RETRY "Downloadfehler"
- IDS_DOWNLOAD_RETRY_TEXT "Beim Herunterladen einiger benötigter Komponenten ist ein Fehler aufgetreten. Möchten Sie noch einmal versuchen, diese Komponenten herunterzuladen?"
-
- IDS_DOWNLOAD "Zusätzliche Komponenten werden installiert."
- IDS_DOWNLOAD_UNPACKING "Entpacken des Pakets"
- IDS_DOWNLOAD_TEXT "Die Java-Anwendung wird starten, sobald zusätzliche Komponenten heruntergeladen und installiert sind."
-
- IDS_FILE_UPDATE_ERROR "Beim Aktualisieren von %s%s ist ein Fehler aufgetreten."
- IDS_FILE_DELETE_ERROR "Beim Entfernen von %s ist ein Fehler aufgetreten."
- IDS_JAVA_HOME_ERROR "Java-Verzeichnis kann nicht ermittelt werden."
- IDS_KERNEL_HOME_ERROR "Pfad der jkernel.dll kann nicht ermittelt werden."
- IDS_JBROKER_ERROR "jbroker.exe kann nicht gestartet werden."
- IDS_FATAL_ERROR "Java konnte einige erforderliche Komponenten nicht herunterladen. Das Programm wird geschlossen."
- IDS_ERROR_DOWNLOADING_BUNDLE_PROPERTIES "Java konnte keine Verbindung zum Downloadserver herstellen. Das Programm wird geschlossen."
- IDS_ERROR_MALFORMED_BUNDLE_PROPERTIES "Bei der Verbindung mit dem Downloadserver ist ein Fehler aufgetreten. Das Programm wird geschlossen."
- IDS_ERROR_MALFORMED_URL "Java konnte von URL '%s' keinen Dowload ausführen. Das Programm wird geschlossen."
-END
--- a/jdk/src/windows/native/sun/jkernel/kernel_en.rc Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_DOWNLOAD_DIALOG DIALOGEX 0, 0, 340, 120
-STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP |
- WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Additional Components Needed"
-EXSTYLE WS_EX_APPWINDOW
-FONT 8, "MS Sans Serif"
-BEGIN
- LTEXT "", IDC_DOWNLOAD_MASTHEAD, 0, 0, 340, 39
- LTEXT "", IDC_MASTHEAD_TEXT, 60, 14, 200, 12
- CONTROL "", IDC_STATIC,"Static", SS_BLACKFRAME | SS_SUNKEN,
- 0, 39, 340, 1
- LTEXT "", IDC_DOWNLOAD_TEXT, 12, 60, 316, 20
- LTEXT "", IDC_TIME_REMAINING, 12, 90, 316, 10
- CONTROL "Progress1",1006,"msctls_progress32",PBS_SMOOTH,
- 12, 100, 265, 14
- PUSHBUTTON "Cancel", 2, 285, 100, 46, 14
-END
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO DISCARDABLE
-BEGIN
- 105, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 236
- TOPMARGIN, 7
- BOTTOMMARGIN, 63
- END
-END
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_DOWNLOAD_CANCEL_MESSAGE "Canceling the installation of additional components which the application needs may cause the application to exit.\n\nAre you sure you want to cancel the installation of additional components?"
- IDS_DOWNLOAD_CANCEL_CAPTION "Cancel - Additional Components"
- IDS_DOWNLOAD_CANCEL_INSTRUCTION ""
- IDS_HTTP_INSTRUCTION_REQUEST_TIMEOUT "Connection Timed Out"
- IDS_HTTP_INSTRUCTION_SERVER_NOT_REACHABLE "Unable to connect to the Internet"
- IDS_HTTP_INSTRUCTION_UNKNOWN_ERROR "Server error (Error %s)"
- IDS_HTTP_INSTRUCTION_SERVICE_UNAVAIL "Service Unavailable (Error %s)"
- IDS_HTTP_INSTRUCTION_FORBIDDEN "Access Denied or Forbidden (Error %s)"
- IDS_HTTP_STATUS_OTHER "An error has occured during this request. Do you want to try the request again?"
-
-// HTTP status code
- IDS_HTTP_STATUS_REQUEST_TIMEOUT "The server used to download the requested components is not responding and the connection has timed out. Do you want to try to connect again?"
- IDS_HTTP_STATUS_FORBIDDEN "You do not have permission to access the server to download the components requested by the application. Retry your access to the server?"
- IDS_HTTP_STATUS_SERVER_ERROR "An error occured on the server and it could not complete the request. Do you want to try the request again?"
- IDS_HTTP_STATUS_SERVICE_UNAVAIL "The requested service is temporarily unavailable. Do you want to try the request again?"
-
-
- IDS_DOWNLOAD_STATUS_RETRY "Server is currently busy, retry in %ld seconds ..."
-
- IDS_ERROR_CAPTION "Java Installer"
- IDS_HOURSMINUTESECOND "Estimated time remaining: %d hours %d minutes %.0f seconds"
- IDS_HOURMINUTESECOND "Estimated time remaining: %d hour %d minutes %.0f seconds"
- IDS_MINUTESECOND "Estimated time remaining: %d minutes %.0f seconds"
- IDS_SECOND "Estimated time remaining: %.0f seconds"
- IDS_DISK_FULL_ERROR_CAPTION "Disk Full %s"
- IDS_DISK_FULL_ERROR "There is not enough space on the disk to download the requested components. Clear space on the disk and then Retry."
- IDS_DISK_WRITE_ERROR_CAPTION "Can't write to the disk %s"
- IDS_DISK_WRITE_ERROR "An error occurred during writing to the disk. Please check that the disk is not write protected."
- IDS_HTTP_STATUS_SERVER_NOT_REACHABLE "Java cannot connect to the Internet. Please check that the Internet Connection settings are correct (these can be found in the Windows Control Panel under Internet Options > Connection) and that your firewall allows java.exe to access the Internet."
-
- IDS_DOWNLOAD_RETRY "Download error"
- IDS_DOWNLOAD_RETRY_TEXT "An error occurred during the download of some requested components. Do you want to try the download of these components again?"
-
- IDS_DOWNLOAD "Installing Additional Components"
- IDS_DOWNLOAD_UNPACKING "Unpacking bundle"
- IDS_DOWNLOAD_TEXT "The Java application will start when additional components that it requires are downloaded and installed."
-
- IDS_FILE_UPDATE_ERROR "An error occurred while updating %s%s."
- IDS_FILE_DELETE_ERROR "An error occurred while removing %s."
- IDS_JAVA_HOME_ERROR "Unable to determine Java home directory."
- IDS_KERNEL_HOME_ERROR "Unable to determine path to jkernel.dll."
- IDS_JBROKER_ERROR "Unable to launch jbroker.exe."
- IDS_FATAL_ERROR "Java was unable to download required components. The program will now exit."
- IDS_ERROR_DOWNLOADING_BUNDLE_PROPERTIES "Java was unable to communicate with the download server. The program will now exit."
- IDS_ERROR_MALFORMED_BUNDLE_PROPERTIES "Java encountered an error communicating with the download server. The program will now exit."
- IDS_ERROR_MALFORMED_URL "Java was unable to download from the URL '%s'. The program will now exit."
-END
--- a/jdk/src/windows/native/sun/jkernel/kernel_es.rc Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_DOWNLOAD_DIALOG DIALOGEX 0, 0, 340, 120
-STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP |
- WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Componentes adicionales necesarios"
-EXSTYLE WS_EX_APPWINDOW
-FONT 8, "MS Sans Serif"
-BEGIN
- LTEXT "", IDC_DOWNLOAD_MASTHEAD, 0, 0, 340, 39
- LTEXT "", IDC_MASTHEAD_TEXT, 60, 8, 225, 20
- CONTROL "", IDC_STATIC,"Static", SS_BLACKFRAME | SS_SUNKEN,
- 0, 39, 340, 1
- LTEXT "", IDC_DOWNLOAD_TEXT, 12, 60, 316, 20
- LTEXT "", IDC_TIME_REMAINING, 12, 90, 316, 10
- CONTROL "Progress1",1006,"msctls_progress32",PBS_SMOOTH,
- 12, 100, 265, 14
- PUSHBUTTON "Cancelar", 2, 285, 100, 46, 14
-END
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO DISCARDABLE
-BEGIN
- 105, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 236
- TOPMARGIN, 7
- BOTTOMMARGIN, 63
- END
-END
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_DOWNLOAD_CANCEL_MESSAGE "Cancelar la instalación de los componentes adicionales que necesita la aplicación puede hacer que se cierre la aplicación.\n\n¿Seguro que desea cancelar la instalación de componentes adicionales?"
- IDS_DOWNLOAD_CANCEL_CAPTION "Cancelar - Componentes adicionales"
- IDS_DOWNLOAD_CANCEL_INSTRUCTION ""
- IDS_HTTP_INSTRUCTION_REQUEST_TIMEOUT "Se ha agotado el tiempo de espera de la conexión"
- IDS_HTTP_INSTRUCTION_SERVER_NOT_REACHABLE "No es posible conectarse a Internet"
- IDS_HTTP_INSTRUCTION_UNKNOWN_ERROR "Ha habido un error en el servidor (error %s)"
- IDS_HTTP_INSTRUCTION_SERVICE_UNAVAIL "El servicio no está disponible (error %s)"
- IDS_HTTP_INSTRUCTION_FORBIDDEN "El acceso se ha denegado o está prohibido (error %s)"
- IDS_HTTP_STATUS_OTHER "Ha habido un error en el transcurso de esta solicitud. ¿Desea ejecutar de nuevo la solicitud?"
-
-// HTTP status code
- IDS_HTTP_STATUS_REQUEST_TIMEOUT "El servidor ha agotado el tiempo de espera de la solicitud."
- IDS_HTTP_STATUS_FORBIDDEN "El servidor ha podido interpretar la solicitud, pero la rechaza."
- IDS_HTTP_STATUS_SERVER_ERROR "El servidor ha encontrado una condición inesperada que le ha impedido satisfacer la solicitud."
- IDS_HTTP_STATUS_SERVICE_UNAVAIL "El servicio está temporalmente sobrecargado."
-
-
- IDS_DOWNLOAD_STATUS_RETRY "El servidor está ocupado en este momento, se volverá a intentar la conexión en %ld segundos..."
-
- IDS_ERROR_CAPTION "Error - Java Kernel"
- IDS_HOURSMINUTESECOND "Tiempo restante estimado: %d horas %d minutos %.0f segundos"
- IDS_HOURMINUTESECOND "Tiempo restante estimado: %d hora %d minutos %.0f segundos"
- IDS_MINUTESECOND "Tiempo restante estimado: %d minutos %.0f segundos"
- IDS_SECOND "Tiempo restante estimado: %.0f segundos"
- IDS_DISK_FULL_ERROR_CAPTION "Disco lleno"
- IDS_DISK_FULL_ERROR "Java Kernel no puede descargar los componentes necesarios porque el disco está lleno. ¿Desea volver a intentarlo?"
- IDS_DISK_WRITE_ERROR_CAPTION "Error de escritura en disco"
- IDS_DISK_WRITE_ERROR "Se ha producido un error cuando Java Kernel intentaba escribir en el disco. ¿Desea volver a intentarlo?"
- IDS_HTTP_STATUS_SERVER_NOT_REACHABLE "Java Kernel no puede continuar con la configuración actual de conexión a Internet del sistema. En el Panel de control de Windows, compruebe Opciones de Internet -> Conexiones para verificar que la información de la configuración y de proxy sea la correcta."
-
- IDS_DOWNLOAD_RETRY "Error de descarga"
- IDS_DOWNLOAD_RETRY_TEXT "Se ha producido un error durante la descarga de algunos componentes solicitados. ¿Quiere volver a intentar descargar estos componentes?"
-
- IDS_DOWNLOAD "Instalación de componentes adicionales"
- IDS_DOWNLOAD_UNPACKING "Desempaquetando paquete"
- IDS_DOWNLOAD_TEXT "La aplicación Java se iniciará cuando los componentes adicionales necesarios se hayan descargado e instalado."
-
- IDS_FILE_UPDATE_ERROR "Se ha producido un error al actualizar %s%s."
- IDS_FILE_DELETE_ERROR "Se ha producido un error al eliminar %s."
- IDS_JAVA_HOME_ERROR "Imposible determinar el directorio de inicio Java."
- IDS_KERNEL_HOME_ERROR "Imposible determinar la ruta a jkernel.dll."
- IDS_JBROKER_ERROR "Imposible iniciar jbroker.exe."
- IDS_FATAL_ERROR "Java no ha podido descargar los componentes necesarios. El programa se cerrará."
- IDS_ERROR_DOWNLOADING_BUNDLE_PROPERTIES "Java no ha podido comunicarse con el servidor de descarga. El programa se cerrará."
- IDS_ERROR_MALFORMED_BUNDLE_PROPERTIES "Se ha producido un error en la comunicación entre Java y el servidor de descarga. El programa se cerrará."
- IDS_ERROR_MALFORMED_URL "Java no ha podido realizar la descarga desde el URL '%s'. El programa se cerrará."
-END
--- a/jdk/src/windows/native/sun/jkernel/kernel_fr.rc Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_DOWNLOAD_DIALOG DIALOGEX 0, 0, 340, 120
-STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP |
- WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Composants supplémentaires requis"
-EXSTYLE WS_EX_APPWINDOW
-FONT 8, "MS Sans Serif"
-BEGIN
- LTEXT "", IDC_DOWNLOAD_MASTHEAD, 0, 0, 340, 39
- LTEXT "", IDC_MASTHEAD_TEXT, 60, 4, 220, 30
- CONTROL "", IDC_STATIC,"Static", SS_BLACKFRAME | SS_SUNKEN,
- 0, 39, 340, 1
- LTEXT "", IDC_DOWNLOAD_TEXT, 12, 60, 316, 20
- LTEXT "", IDC_TIME_REMAINING, 12, 90, 316, 10
- CONTROL "Progress1",1006,"msctls_progress32",PBS_SMOOTH,
- 12, 100, 265, 14
- PUSHBUTTON "Annuler", 2, 285, 100, 46, 14
-END
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO DISCARDABLE
-BEGIN
- 105, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 236
- TOPMARGIN, 7
- BOTTOMMARGIN, 63
- END
-END
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_DOWNLOAD_CANCEL_MESSAGE "L'annulation de l'installation de composants supplémentaires nécessaires à l'application risque d'entraîner la fermeture de celle-ci.\n\nVoulez-vous vraiment annuler l'installation des composants supplémentaires ?"
- IDS_DOWNLOAD_CANCEL_CAPTION "Annuler : composants supplémentaires"
- IDS_DOWNLOAD_CANCEL_INSTRUCTION ""
- IDS_HTTP_INSTRUCTION_REQUEST_TIMEOUT "Délai de connexion dépassé"
- IDS_HTTP_INSTRUCTION_SERVER_NOT_REACHABLE "Connexion à Internet impossible"
- IDS_HTTP_INSTRUCTION_UNKNOWN_ERROR "Erreur de serveur (erreur %s)"
- IDS_HTTP_INSTRUCTION_SERVICE_UNAVAIL "Service non disponible (erreur %s)"
- IDS_HTTP_INSTRUCTION_FORBIDDEN "Accès refusé ou interdit (erreur %s)"
- IDS_HTTP_STATUS_OTHER "Une erreur s'est produite lors de cette demande. Voulez-vous effectuer à nouveau la demande ?"
-
-// HTTP status code
- IDS_HTTP_STATUS_REQUEST_TIMEOUT "Temporisation du serveur lors de l'attente de la requête."
- IDS_HTTP_STATUS_FORBIDDEN "Le serveur a compris la requête mais refuse de la satisfaire."
- IDS_HTTP_STATUS_SERVER_ERROR "Le serveur a rencontré une condition inattendue l'empêchant de satisfaire la requête."
- IDS_HTTP_STATUS_SERVICE_UNAVAIL "Le service est temporairement surchargé."
-
-
- IDS_DOWNLOAD_STATUS_RETRY "Le serveur est occupé ; veuillez réessayer dans %ld secondes..."
-
- IDS_ERROR_CAPTION "Erreur - Java Kernel"
- IDS_HOURSMINUTESECOND "Temps restant prévu : %d heures %d minutes %.0f secondes"
- IDS_HOURMINUTESECOND "Temps restant prévu : %d heure %d minutes %.0f secondes"
- IDS_MINUTESECOND "Temps restant prévu : %d minutes %.0f secondes"
- IDS_SECOND "Temps restant prévu : %.0f secondes"
- IDS_DISK_FULL_ERROR_CAPTION "Disque saturé"
- IDS_DISK_FULL_ERROR "En raison de la saturation du disque, Java Kernel n'a pas été en mesure de télécharger les composants requis. Voulez-vous réessayer ?"
- IDS_DISK_WRITE_ERROR_CAPTION "Erreur d'écriture sur le disque"
- IDS_DISK_WRITE_ERROR "Java Kernel a rencontré une erreur lors de l'écriture sur le disque. Voulez-vous réessayer ?"
- IDS_HTTP_STATUS_SERVER_NOT_REACHABLE "Java Kernel ne peut pas s'exécuter avec les paramètres de connexion Internet actuels de votre système. Dans le Panneau de configuration de Windows, cliquez sur Options Internet -> Connexions pour vérifier les paramètres et informations de proxy."
-
- IDS_DOWNLOAD_RETRY "Erreur de téléchargement"
- IDS_DOWNLOAD_RETRY_TEXT "Une erreur s'est produite lors du téléchargement de certains composants requis. Souhaitez-vous réessayer de télécharger ces composants ?"
-
- IDS_DOWNLOAD "Installation de composants supplémentaires"
- IDS_DOWNLOAD_UNPACKING "Décompression du bundle"
- IDS_DOWNLOAD_TEXT "L'application Java démarre lorsque des composants supplémentaires requis sont téléchargés et installés."
-
- IDS_FILE_UPDATE_ERROR "Une erreur s'est produite lors de la mise à jour de %s%s."
- IDS_FILE_DELETE_ERROR "Une erreur s'est produite lors de la suppression de %s."
- IDS_JAVA_HOME_ERROR "Le répertoire d'accueil Java est introuvable."
- IDS_KERNEL_HOME_ERROR "Le chemin de jkernel.dll est introuvable."
- IDS_JBROKER_ERROR "Impossible de lancer jbroker.exe."
- IDS_FATAL_ERROR "Java n'a pas été en mesure de télécharger les composants requis. Fermeture imminente du programme."
- IDS_ERROR_DOWNLOADING_BUNDLE_PROPERTIES "Java n'a pas été en mesure de communiquer avec le serveur de téléchargement. Fermeture imminente du programme."
- IDS_ERROR_MALFORMED_BUNDLE_PROPERTIES "Java a rencontré une erreur lors de la communication avec le serveur de téléchargement. Fermeture imminente du programme."
- IDS_ERROR_MALFORMED_URL "Java n'a pas été en mesure de réaliser le téléchargement à partir de l'URL '%s'. Fermeture imminente du programme."
-END
--- a/jdk/src/windows/native/sun/jkernel/kernel_it.rc Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_DOWNLOAD_DIALOG DIALOGEX 0, 0, 340, 120
-STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP |
- WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Componenti aggiuntivi richiesti"
-EXSTYLE WS_EX_APPWINDOW
-FONT 8, "MS Sans Serif"
-BEGIN
- LTEXT "", IDC_DOWNLOAD_MASTHEAD, 0, 0, 340, 39
- LTEXT "", IDC_MASTHEAD_TEXT, 60, 4, 220, 30
- CONTROL "", IDC_STATIC,"Static", SS_BLACKFRAME | SS_SUNKEN,
- 0, 39, 340, 1
- LTEXT "", IDC_DOWNLOAD_TEXT, 12, 60, 316, 20
- LTEXT "", IDC_TIME_REMAINING, 12, 90, 316, 10
- CONTROL "Progress1",1006,"msctls_progress32",PBS_SMOOTH,
- 12, 100, 265, 14
- PUSHBUTTON "Annulla", 2, 285, 100, 46, 14
-END
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO DISCARDABLE
-BEGIN
- 105, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 236
- TOPMARGIN, 7
- BOTTOMMARGIN, 63
- END
-END
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_DOWNLOAD_CANCEL_MESSAGE "Se si annulla l'installazione di componenti aggiuntivi necessari per l'applicazione, quest'ultima potrebbe chiudersi.\n\nAnnullare l'installazione di componenti aggiuntivi?"
- IDS_DOWNLOAD_CANCEL_CAPTION "Annulla - Componenti aggiuntivi"
- IDS_DOWNLOAD_CANCEL_INSTRUCTION ""
- IDS_HTTP_INSTRUCTION_REQUEST_TIMEOUT "Timeout della connessione"
- IDS_HTTP_INSTRUCTION_SERVER_NOT_REACHABLE "Impossibile stabilire una connessione a Internet"
- IDS_HTTP_INSTRUCTION_UNKNOWN_ERROR "Errore del server (errore %s)"
- IDS_HTTP_INSTRUCTION_SERVICE_UNAVAIL "Servizio non disponibile (errore %s)"
- IDS_HTTP_INSTRUCTION_FORBIDDEN "Accesso negato o vietato (errore %s)"
- IDS_HTTP_STATUS_OTHER "Errore durante la richiesta. Provare a reinviare la richiesta?"
-
-// HTTP status code
- IDS_HTTP_STATUS_REQUEST_TIMEOUT "Tempo scaduto del server in attesa della richiesta."
- IDS_HTTP_STATUS_FORBIDDEN "Il server ha ricevuto la richiesta ma non ne consente l'elaborazione."
- IDS_HTTP_STATUS_SERVER_ERROR "Il server ha rilevato una condizione imprevista che ha impedito di soddisfare la richiesta."
- IDS_HTTP_STATUS_SERVICE_UNAVAIL "Il servizio è temporaneamente sovraccarico."
-
-
- IDS_DOWNLOAD_STATUS_RETRY "Server occupato, riprovare tra %ld secondi..."
-
- IDS_ERROR_CAPTION "Errore - Java Kernel"
- IDS_HOURSMINUTESECOND "Tempo rimanente previsto: %d ore %d minuti %.0f secondi"
- IDS_HOURMINUTESECOND "Tempo rimanente previsto: %d ora %d minuti %.0f secondi"
- IDS_MINUTESECOND "Tempo rimanente previsto: %d minuti %.0f secondi"
- IDS_SECOND "Tempo rimanente previsto: %.0f secondi"
- IDS_DISK_FULL_ERROR_CAPTION "Disco pieno"
- IDS_DISK_FULL_ERROR "Java Kernel non ha effettuato il download dei componenti necessari perché il disco è pieno. Riprovare?"
- IDS_DISK_WRITE_ERROR_CAPTION "Errore di scrittura sul disco"
- IDS_DISK_WRITE_ERROR "Java Kernel ha rilevato un errore durante la scrittura sul disco. Riprovare?"
- IDS_HTTP_STATUS_SERVER_NOT_REACHABLE "Non è possibile utilizzare Java Kernel con le impostazioni di connessione Internet attive nel sistema. Nel Pannello di controllo di Windows, selezionare Opzioni Internet -> Connessioni per controllare che le impostazioni e le informazioni sul proxy siano corrette."
-
- IDS_DOWNLOAD_RETRY "Errore di download"
- IDS_DOWNLOAD_RETRY_TEXT "Si è verificato un errore durante il download di alcuni componenti richiesti. Ritentare il download di tali componenti?"
-
- IDS_DOWNLOAD "Installazione di componenti aggiuntivi in corso"
- IDS_DOWNLOAD_UNPACKING "Decompressione del bundle in corso"
- IDS_DOWNLOAD_TEXT "L'applicazione Java verrà avviata dopo il download e l'installazione dei componenti richiesti."
-
- IDS_FILE_UPDATE_ERROR "Errore durante l'aggiornamento di %s%s."
- IDS_FILE_DELETE_ERROR "Errore durante la rimozione di %s."
- IDS_JAVA_HOME_ERROR "Impossibile determinare la directory home di Java."
- IDS_KERNEL_HOME_ERROR "Impossibile determinare il percorso di jkernel.dll."
- IDS_JBROKER_ERROR "Impossibile avviare jbroker.exe."
- IDS_FATAL_ERROR "Java non è in grado di scaricare i componenti necessari. Il programma verrà terminato."
- IDS_ERROR_DOWNLOADING_BUNDLE_PROPERTIES "Java non è in grado di comunicare con il server di download. Il programma verrà terminato."
- IDS_ERROR_MALFORMED_BUNDLE_PROPERTIES "Java ha rilevato un errore durante la comunicazione con il server di download. Il programma verrà terminato."
- IDS_ERROR_MALFORMED_URL "Java non è in grado di eseguire il download dall'URL '%s'. Il programma verrà terminato."
-END
--- a/jdk/src/windows/native/sun/jkernel/kernel_ja.rc Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_DOWNLOAD_DIALOG DIALOGEX 0, 0, 340, 120
-STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP |
- WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "’ljÁƒRƒ“ƒ|[ƒlƒ“ƒg‚ª•K—v"
-EXSTYLE WS_EX_APPWINDOW
-FONT 10, "MS UI Gothic"
-BEGIN
- LTEXT "", IDC_DOWNLOAD_MASTHEAD, 0, 0, 340, 39
- LTEXT "", IDC_MASTHEAD_TEXT, 60, 14, 200, 12
- CONTROL "", IDC_STATIC,"Static", SS_BLACKFRAME | SS_SUNKEN,
- 0, 39, 340, 1
- LTEXT "", IDC_DOWNLOAD_TEXT, 12, 60, 316, 20
- LTEXT "", IDC_TIME_REMAINING, 12, 90, 316, 10
- CONTROL "Progress1",1006,"msctls_progress32",PBS_SMOOTH,
- 12, 100, 265, 14
- PUSHBUTTON "ŽæÁ‚µ", 2, 285, 100, 46, 14
-END
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO DISCARDABLE
-BEGIN
- 105, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 236
- TOPMARGIN, 7
- BOTTOMMARGIN, 63
- END
-END
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_DOWNLOAD_CANCEL_MESSAGE "ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ª•K—v‚Æ‚·‚é’ljÁƒRƒ“ƒ|[ƒlƒ“ƒg‚̃Cƒ“ƒXƒg[ƒ‹‚ðƒLƒƒƒ“ƒZƒ‹‚·‚é‚ÆAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªI—¹‚·‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B\n\n’ljÁƒRƒ“ƒ|[ƒlƒ“ƒg‚̃Cƒ“ƒXƒg[ƒ‹‚ðƒLƒƒƒ“ƒZƒ‹‚µ‚Ä‚æ‚낵‚¢‚Å‚·‚©H"
- IDS_DOWNLOAD_CANCEL_CAPTION "ƒLƒƒƒ“ƒZƒ‹ - ’ljÁƒRƒ“ƒ|[ƒlƒ“ƒg"
- IDS_DOWNLOAD_CANCEL_INSTRUCTION ""
- IDS_HTTP_INSTRUCTION_REQUEST_TIMEOUT "Ú‘±‚ªƒ^ƒCƒ€ƒAƒEƒg‚µ‚Ü‚µ‚½"
- IDS_HTTP_INSTRUCTION_SERVER_NOT_REACHABLE "ƒCƒ“ƒ^[ƒlƒbƒg‚ÉÚ‘±‚Å‚«‚Ü‚¹‚ñ"
- IDS_HTTP_INSTRUCTION_UNKNOWN_ERROR "ƒT[ƒo[ƒGƒ‰[ (ƒGƒ‰[ %s)"
- IDS_HTTP_INSTRUCTION_SERVICE_UNAVAIL "ƒT[ƒrƒX—˜—p•s‰Â (ƒGƒ‰[ %s)"
- IDS_HTTP_INSTRUCTION_FORBIDDEN "ƒAƒNƒZƒX‚ª‹‘”Û‚Ü‚½‚Í‹ÖŽ~‚³‚ê‚Ä‚¢‚Ü‚· (ƒGƒ‰[ %s)"
- IDS_HTTP_STATUS_OTHER "‚±‚Ì—v‹‚̈—’†‚ɃGƒ‰[‚ª”¶‚µ‚Ü‚µ‚½B—v‹‚ðÄŽŽs‚µ‚Ü‚·‚©?"
-
-// HTTP status code
- IDS_HTTP_STATUS_REQUEST_TIMEOUT "—v‹‚ð‘Ò‹@’†‚ɃT[ƒo[‚ªƒ^ƒCƒ€ƒAƒEƒg‚µ‚Ü‚µ‚½B"
- IDS_HTTP_STATUS_FORBIDDEN "ƒT[ƒo[‚ÍA—v‹‚ð”FŽ¯‚µ‚Ä‚¢‚Ü‚·‚ªAŽÀs‚ð‹‘”Û‚µ‚Ä‚¢‚Ü‚·B"
- IDS_HTTP_STATUS_SERVER_ERROR "ƒT[ƒo[‚ÍA—v‹‚ÌŽÀs‚ð–W‚°‚é—\Šú‚µ‚È‚¢ó‹µ‚É‘˜‹ö‚µ‚Ü‚µ‚½B"
- IDS_HTTP_STATUS_SERVICE_UNAVAIL "ƒT[ƒrƒX‚ªˆêŽž“I‚ɃI[ƒo[ƒ[ƒh‚µ‚Ä‚¢‚Ü‚·B"
-
-
- IDS_DOWNLOAD_STATUS_RETRY "ƒT[ƒo[‚ÍŒ»ÝƒrƒW[‚Å‚·B%ld •bŒã‚ÉÄŽŽs‚µ‚Ü‚· ..."
-
- IDS_ERROR_CAPTION "ƒGƒ‰[ - Java ƒJ[ƒlƒ‹"
- IDS_HOURSMINUTESECOND "—\‘zŽc‚莞ŠÔ: %d ŽžŠÔ %d •ª %.0f •b"
- IDS_HOURMINUTESECOND "—\‘zŽc‚莞ŠÔ: %d ŽžŠÔ %d •ª %.0f •b"
- IDS_MINUTESECOND "—\‘zŽc‚莞ŠÔ: %d •ª %.0f •b"
- IDS_SECOND "—\‘zŽc‚莞ŠÔ: %.0f •b"
- IDS_DISK_FULL_ERROR_CAPTION "ƒfƒBƒXƒN‚ª‚¢‚Á‚Ï‚¢‚Å‚·"
- IDS_DISK_FULL_ERROR "ƒfƒBƒXƒN‚ª‚¢‚Á‚Ï‚¢‚Ì‚½‚ßAJava ƒJ[ƒlƒ‹‚ª•K—v‚ȃRƒ“ƒ|[ƒlƒ“ƒg‚ðƒ_ƒEƒ“ƒ[ƒh‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½B‚à‚¤ˆê“xŽŽ‚µ‚Ü‚·‚©?"
- IDS_DISK_WRITE_ERROR_CAPTION "ƒfƒBƒXƒN‘‚«ž‚݃Gƒ‰["
- IDS_DISK_WRITE_ERROR "Java ƒJ[ƒlƒ‹‚ªƒfƒBƒXƒN‚Ö‚Ì‘‚«ž‚ÝŽž‚ɃGƒ‰[‚ðŒŸo‚µ‚Ü‚µ‚½B‚à‚¤ˆê“xŽŽ‚µ‚Ü‚·‚©?"
- IDS_HTTP_STATUS_SERVER_NOT_REACHABLE "Java ƒJ[ƒlƒ‹‚ÍA‚¨Žg‚¢‚̃VƒXƒeƒ€‚ÌŒ»Ý‚̃Cƒ“ƒ^[ƒlƒbƒgÚ‘±Ý’è‚Å‚Í“®ì‚µ‚Ü‚¹‚ñBWindows ‚̃Rƒ“ƒgƒ[ƒ‹ƒpƒlƒ‹‚ÅAuƒCƒ“ƒ^[ƒlƒbƒgƒIƒvƒVƒ‡ƒ“v -> uÚ‘±v‚ð‘I‘ð‚µ‚ÄAݒ肨‚æ‚уvƒƒLƒVî•ñ‚ª³‚µ‚¢‚±‚Æ‚ðŠm”F‚µ‚Ä‚‚¾‚³‚¢B"
-
- IDS_DOWNLOAD_RETRY "ƒ_ƒEƒ“ƒ[ƒhƒGƒ‰["
- IDS_DOWNLOAD_RETRY_TEXT "—v‹‚³‚ꂽƒRƒ“ƒ|[ƒlƒ“ƒg‚̈ꕔ‚ðƒ_ƒEƒ“ƒ[ƒh’†‚ɃGƒ‰[‚ª”¶‚µ‚Ü‚µ‚½B‚±‚ê‚ç‚̃Rƒ“ƒ|[ƒlƒ“ƒg‚̃_ƒEƒ“ƒ[ƒh‚ðÄ“xŽŽ‚Ý‚Ü‚·‚© ?"
-
- IDS_DOWNLOAD "’ljÁƒRƒ“ƒ|[ƒlƒ“ƒg‚ðƒCƒ“ƒXƒg[ƒ‹‚µ‚Ä‚¢‚Ü‚·"
- IDS_DOWNLOAD_UNPACKING "ƒoƒ“ƒhƒ‹‚ð“WŠJ‚µ‚Ä‚¢‚Ü‚·"
- IDS_DOWNLOAD_TEXT "Java ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ÍA•K{‚̒ljÁƒRƒ“ƒ|[ƒlƒ“ƒg‚̃_ƒEƒ“ƒ[ƒh‚¨‚æ‚уCƒ“ƒXƒg[ƒ‹Œã‚É‹N“®‚µ‚Ü‚·B"
-
- IDS_FILE_UPDATE_ERROR "%s%s ‚ÌXV’†‚ɃGƒ‰[‚ª”¶‚µ‚Ü‚µ‚½B"
- IDS_FILE_DELETE_ERROR "%s ‚Ì휒†‚ɃGƒ‰[‚ª”¶‚µ‚Ü‚µ‚½B"
- IDS_JAVA_HOME_ERROR "Java ƒz[ƒ€ƒfƒBƒŒƒNƒgƒŠ‚ð”»’è‚Å‚«‚Ü‚¹‚ñB"
- IDS_KERNEL_HOME_ERROR "jkernel.dll ‚̃pƒX‚ð”»’è‚Å‚«‚Ü‚¹‚ñB"
- IDS_JBROKER_ERROR "jbroker.exe ‚ð‹N“®‚Å‚«‚Ü‚¹‚ñB"
- IDS_FATAL_ERROR "Java ‚ª•K—v‚ȃRƒ“ƒ|[ƒlƒ“ƒg‚ðƒ_ƒEƒ“ƒ[ƒh‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½BƒvƒƒOƒ‰ƒ€‚ÍI—¹‚µ‚Ü‚·B"
- IDS_ERROR_DOWNLOADING_BUNDLE_PROPERTIES "Java ‚ªƒ_ƒEƒ“ƒ[ƒhƒT[ƒo[‚Æ’ÊM‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½BƒvƒƒOƒ‰ƒ€‚ÍI—¹‚µ‚Ü‚·B"
- IDS_ERROR_MALFORMED_BUNDLE_PROPERTIES "Java ‚ªƒ_ƒEƒ“ƒ[ƒhƒT[ƒo[‚Æ‚Ì’ÊM’†‚ɃGƒ‰[‚ðŒŸo‚µ‚Ü‚µ‚½BƒvƒƒOƒ‰ƒ€‚ÍI—¹‚µ‚Ü‚·B"
- IDS_ERROR_MALFORMED_URL "Java ‚ª URL '%s' ‚©‚çƒ_ƒEƒ“ƒ[ƒh‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½BƒvƒƒOƒ‰ƒ€‚ÍI—¹‚µ‚Ü‚·B"
-END
--- a/jdk/src/windows/native/sun/jkernel/kernel_ko.rc Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_DOWNLOAD_DIALOG DIALOGEX 0, 0, 340, 120
-STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP |
- WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Ãß°¡ ±¸¼º ¿ä¼Ò ÇÊ¿ä"
-EXSTYLE WS_EX_APPWINDOW
-FONT 8, "MS Sans Serif"
-BEGIN
- LTEXT "", IDC_DOWNLOAD_MASTHEAD, 0, 0, 340, 39
- LTEXT "", IDC_MASTHEAD_TEXT, 60, 14, 200, 12
- CONTROL "", IDC_STATIC,"Static", SS_BLACKFRAME | SS_SUNKEN,
- 0, 39, 340, 1
- LTEXT "", IDC_DOWNLOAD_TEXT, 12, 60, 316, 20
- LTEXT "", IDC_TIME_REMAINING, 12, 90, 316, 10
- CONTROL "Progress1",1006,"msctls_progress32",PBS_SMOOTH,
- 12, 100, 265, 14
- PUSHBUTTON "Ãë¼Ò", 2, 285, 100, 46, 14
-END
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO DISCARDABLE
-BEGIN
- 105, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 236
- TOPMARGIN, 7
- BOTTOMMARGIN, 63
- END
-END
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_DOWNLOAD_CANCEL_MESSAGE "ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ ÇÊ¿äÇÑ Ãß°¡ ±¸¼º ¿ä¼ÒÀÇ ¼³Ä¡¸¦ Ãë¼ÒÇϸé ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ Á¾·áµÉ ¼ö ÀÖ½À´Ï´Ù.\n\nÃß°¡ ±¸¼º ¿ä¼ÒÀÇ ¼³Ä¡¸¦ Ãë¼ÒÇϽðڽÀ´Ï±î?"
- IDS_DOWNLOAD_CANCEL_CAPTION "Ãë¼Ò - Ãß°¡ ±¸¼º ¿ä¼Ò"
- IDS_DOWNLOAD_CANCEL_INSTRUCTION ""
- IDS_HTTP_INSTRUCTION_REQUEST_TIMEOUT "¿¬°á ½Ã°£ ÃÊ°ú"
- IDS_HTTP_INSTRUCTION_SERVER_NOT_REACHABLE "ÀÎÅͳݿ¡ ¿¬°áÇÒ ¼ö ¾ø½À´Ï´Ù."
- IDS_HTTP_INSTRUCTION_UNKNOWN_ERROR "¼¹ö ¿À·ù(¿À·ù %s)"
- IDS_HTTP_INSTRUCTION_SERVICE_UNAVAIL "¼ºñ½º¸¦ »ç¿ëÇÒ ¼ö ¾øÀ½(¿À·ù %s)"
- IDS_HTTP_INSTRUCTION_FORBIDDEN "¾×¼¼½º°¡ °ÅºÎµÇ¾ú°Å³ª ±ÝÁöµÊ(¿À·ù %s)"
- IDS_HTTP_STATUS_OTHER "ÀÌ ¿äû µ¿¾È ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù. ¿äûÀ» ´Ù½Ã ½ÃµµÇϽðڽÀ´Ï±î?"
-
-// HTTP status code
- IDS_HTTP_STATUS_REQUEST_TIMEOUT "¼¹ö°¡ ¿äûÀ» ±â´Ù¸®´Â µ¿¾È ½Ã°£ÀÌ ÃÊ°úµÇ¾ú½À´Ï´Ù."
- IDS_HTTP_STATUS_FORBIDDEN "¼¹ö°¡ ¿äûÀ» ÀÌÇØÇßÁö¸¸ ÀÌÇàÇϱ⸦ °ÅºÎÇÕ´Ï´Ù."
- IDS_HTTP_STATUS_SERVER_ERROR "¼¹ö¿¡¼ ¿äû ÀÌÇàÀ» ¹æÇØÇÏ´Â ¿¹»óÄ¡ ¸øÇÑ Á¶°ÇÀÌ ¹ß°ßµÇ¾ú½À´Ï´Ù."
- IDS_HTTP_STATUS_SERVICE_UNAVAIL "¼¹ö°¡ ÀϽÃÀûÀ¸·Î °úºÎÇϵǾú½À´Ï´Ù."
-
-
- IDS_DOWNLOAD_STATUS_RETRY "ÇöÀç ¼¹ö°¡ »ç¿ë ÁßÀ̹ǷΠ%ldÃÊ ÈÄ¿¡ ´Ù½Ã ½ÃµµÇϽʽÿÀ."
-
- IDS_ERROR_CAPTION "¿À·ù - Java Ä¿³Î"
- IDS_HOURSMINUTESECOND "¿¹»óµÈ ³²Àº ½Ã°£: %d½Ã°£ %dºÐ %.0fÃÊ"
- IDS_HOURMINUTESECOND "¿¹»óµÈ ³²Àº ½Ã°£: %d½Ã°£ %dºÐ %.0fÃÊ"
- IDS_MINUTESECOND "¿¹»óµÈ ³²Àº ½Ã°£: %dºÐ %.0fÃÊ"
- IDS_SECOND "¿¹»óµÈ ³²Àº ½Ã°£: %.0fÃÊ"
- IDS_DISK_FULL_ERROR_CAPTION "µð½ºÅ©°¡ °¡µæ Âü"
- IDS_DISK_FULL_ERROR "µð½ºÅ©°¡ °¡µæ Â÷¼ Java Kernel¿¡¼ ÇÊ¿äÇÑ ±¸¼º ¿ä¼Ò¸¦ ´Ù¿î·ÎµåÇÏÁö ¸øÇß½À´Ï´Ù. ´Ù½Ã ½ÃµµÇϽðڽÀ´Ï±î?"
- IDS_DISK_WRITE_ERROR_CAPTION "µð½ºÅ© ¾²±â ¿À·ù"
- IDS_DISK_WRITE_ERROR "µð½ºÅ©¿¡ ¾²´Â µ¿¾È Java Kernel¿¡¼ ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù. ´Ù½Ã ½ÃµµÇϽðڽÀ´Ï±î?"
- IDS_HTTP_STATUS_SERVER_NOT_REACHABLE "½Ã½ºÅÛÀÇ ÇöÀç ÀÎÅÍ³Ý ¿¬°á ¼³Á¤À¸·Î´Â Java KernelÀ» °è¼ÓÇÒ ¼ö ¾ø½À´Ï´Ù. Windows Á¦¾îÆÇ¿¡¼ ÀÎÅÍ³Ý ¿É¼Ç -> ¿¬°áÀ» ¼±ÅÃÇÏ¿© ¼³Á¤ ¹× ÇÁ·Ï½Ã Á¤º¸°¡ ¿Ã¹Ù¸¥Áö È®ÀÎÇϽʽÿÀ."
-
- IDS_DOWNLOAD_RETRY "´Ù¿î·Îµå ¿À·ù"
- IDS_DOWNLOAD_RETRY_TEXT "¿äûµÈ ±¸¼º ¿ä¼Ò¸¦ ´Ù¿î·ÎµåÇÏ´Â µ¿¾È ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù. ÀÌ ±¸¼º ¿ä¼Ò¸¦ ´Ù½Ã ´Ù¿î·ÎµåÇϽðڽÀ´Ï±î?"
-
- IDS_DOWNLOAD "Ãß°¡ ±¸¼º ¿ä¼Ò ¼³Ä¡"
- IDS_DOWNLOAD_UNPACKING "¹øµé ¾ÐÃà Ç®±â"
- IDS_DOWNLOAD_TEXT "ÇÊ¿äÇÑ Ãß°¡ ±¸¼º ¿ä¼Ò°¡ ´Ù¿î·ÎµåµÇ¾î ¼³Ä¡µÇ¸é Java ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ½ÃÀ۵˴ϴÙ."
-
- IDS_FILE_UPDATE_ERROR "%s%sÀ»(¸¦) ¾÷µ¥ÀÌÆ®ÇÏ´Â µ¿¾È ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù."
- IDS_FILE_DELETE_ERROR "%sÀ»(¸¦) Á¦°ÅÇÏ´Â µ¿¾È ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù."
- IDS_JAVA_HOME_ERROR "Java Ȩ µð·ºÅ丮¸¦ È®ÀÎÇÒ ¼ö ¾ø½À´Ï´Ù."
- IDS_KERNEL_HOME_ERROR "jkernel.dllÀÇ °æ·Î¸¦ È®ÀÎÇÒ ¼ö ¾ø½À´Ï´Ù."
- IDS_JBROKER_ERROR "jbroker.exe¸¦ ½ÃÀÛÇÒ ¼ö ¾ø½À´Ï´Ù."
- IDS_FATAL_ERROR "ÇÊ¿äÇÑ ±¸¼º ¿ä¼Ò¸¦ ´Ù¿î·ÎµåÇÏÁö ¸øÇß½À´Ï´Ù. ÇÁ·Î±×·¥ÀÌ Á¾·áµË´Ï´Ù."
- IDS_ERROR_DOWNLOADING_BUNDLE_PROPERTIES "´Ù¿î·Îµå ¼¹ö¿Í Åë½ÅÇÏÁö ¸øÇß½À´Ï´Ù. ÇÁ·Î±×·¥ÀÌ Á¾·áµË´Ï´Ù."
- IDS_ERROR_MALFORMED_BUNDLE_PROPERTIES "´Ù¿î·Îµå ¼¹ö¿ÍÀÇ Åë½Å ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù. ÇÁ·Î±×·¥ÀÌ Á¾·áµË´Ï´Ù."
- IDS_ERROR_MALFORMED_URL "URL '%s'¿¡¼ ´Ù¿î·ÎµåÇÏÁö ¸øÇß½À´Ï´Ù. ÇÁ·Î±×·¥ÀÌ Á¾·áµË´Ï´Ù."
-END
--- a/jdk/src/windows/native/sun/jkernel/kernel_pt_BR.rc Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_DOWNLOAD_DIALOG DIALOGEX 0,0,340,120
-STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP |
- WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Componentes adicionais necessários"
-EXSTYLE WS_EX_APPWINDOW
-FONT 8, "MS Sans Serif"
-BEGIN
- LTEXT "", IDC_DOWNLOAD_MASTHEAD,0,0,340,39
- LTEXT "", IDC_MASTHEAD_TEXT,60,8,225,12
- CONTROL "", IDC_STATIC,"Static", SS_BLACKFRAME | SS_SUNKEN,0,39,340,1
- LTEXT "", IDC_DOWNLOAD_TEXT,12,60,316,20
- LTEXT "", IDC_TIME_REMAINING,12,90,316,10
- CONTROL "Progress1",1006,"msctls_progress32",PBS_SMOOTH,12,100,265,14
- PUSHBUTTON "Cancelar", 2,285,100,46,14
-END
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO DISCARDABLE
-BEGIN
- 105, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 236
- TOPMARGIN, 7
- BOTTOMMARGIN, 63
- END
-END
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_DOWNLOAD_CANCEL_MESSAGE "O cancelamento da instalação dos componentes adicionais necessários ao aplicativo pode fazer com que o aplicativo se feche.\n\nTem certeza que deseja cancelar a instalação dos componentes adicionais?"
- IDS_DOWNLOAD_CANCEL_CAPTION "Cancelar - Componentes adicionais"
- IDS_DOWNLOAD_CANCEL_INSTRUCTION ""
- IDS_HTTP_INSTRUCTION_REQUEST_TIMEOUT "Tempo limite de conexão excedido"
- IDS_HTTP_INSTRUCTION_SERVER_NOT_REACHABLE "Não é possível se conectar à Internet"
- IDS_HTTP_INSTRUCTION_UNKNOWN_ERROR "Erro de servidor (Erro %s)"
- IDS_HTTP_INSTRUCTION_SERVICE_UNAVAIL "Serviço não disponível (Erro %s)"
- IDS_HTTP_INSTRUCTION_FORBIDDEN "Acesso negado ou proibido (Erro %s)"
- IDS_HTTP_STATUS_OTHER "Ocorreu um erro durante esta solicitação. Deseja tentar a solicitação novamente?"
-
-// HTTP status code
- IDS_HTTP_STATUS_REQUEST_TIMEOUT "O servidor usado para baixar os componentes necessários não está respondendo e o tempo limite da conexão foi excedido. Deseja tentar se conectar novamente?"
- IDS_HTTP_STATUS_FORBIDDEN "Você não tem permissão para acessar o servidor para baixar os componentes necessários ao aplicativo. Tentar acessar o servidor novamente?"
- IDS_HTTP_STATUS_SERVER_ERROR "Ocorreu um erro no servidor e não foi possível concluir a solicitação. Deseja tentar a solicitação novamente?"
- IDS_HTTP_STATUS_SERVICE_UNAVAIL "O serviço solicitado não está disponível temporariamente. Deseja tentar a solicitação novamente?"
-
-
- IDS_DOWNLOAD_STATUS_RETRY "O servidor está ocupado atualmente, tente novamente em %ld segundos ..."
-
- IDS_ERROR_CAPTION "Instalador Java"
- IDS_HOURSMINUTESECOND "Tempo restante estimado: %d horas %d minutos %.0f segundos"
- IDS_HOURMINUTESECOND "Tempo restante estimado: %d hora %d minutos %.0f segundos"
- IDS_MINUTESECOND "Tempo restante estimado: %d minutos %.0f segundos"
- IDS_SECOND "Tempo restante estimado: %.0f segundos"
- IDS_DISK_FULL_ERROR_CAPTION "Disco cheio %s"
- IDS_DISK_FULL_ERROR "Não há espaço em disco suficiente para baixar os componentes solicitados. Libere espaço em disco e, a seguir, tente novamente."
- IDS_DISK_WRITE_ERROR_CAPTION "Não é possível gravar no disco %s"
- IDS_DISK_WRITE_ERROR "Ocorreu um erro durante a gravação no disco. Verifique se o disco não está protegido contra gravação."
- IDS_HTTP_STATUS_SERVER_NOT_REACHABLE "O Java não pode se conectar à Internet. Verifique se as configurações de conexão à Internet estão corretas (isso pode ser encontrado no painel de controle do Windows em Opções de Internet > Conexão) e se o firewall permite que java.exe acesse a Internet."
-
- IDS_DOWNLOAD_RETRY "Erro de download"
- IDS_DOWNLOAD_RETRY_TEXT "Ocorreu um erro durante o download de alguns componentes solicitados. Deseja tentar o download destes componentes novamente?"
-
- IDS_DOWNLOAD "Instalando componentes adicionais"
- IDS_DOWNLOAD_UNPACKING "Descompactando pacotes"
- IDS_DOWNLOAD_TEXT "O aplicativo Java se iniciará quando os componentes adicionais que ele precisa tiverem sido baixados e instalados."
-
- IDS_FILE_UPDATE_ERROR "Ocorreu um erro durante a atualização de %s%s."
- IDS_FILE_DELETE_ERROR "Ocorreu um erro durante a remoção de %s%s."
- IDS_JAVA_HOME_ERROR "Não é possível determinar o diretório base Java."
- IDS_KERNEL_HOME_ERROR "Não é possível determinar o caminho para o jkernel.dll."
- IDS_JBROKER_ERROR "Não é possível iniciar jbroker.exe"
- IDS_FATAL_ERROR "O Java não pôde baixar os componentes necessários. O programa se fechará agora."
- IDS_ERROR_DOWNLOADING_BUNDLE_PROPERTIES "O Java não pôde estabelecer comunicação com o servidor de downloads. O programa se fechará agora."
- IDS_ERROR_MALFORMED_BUNDLE_PROPERTIES "O Java encontrou um erro ao estabelecer comunicação com o servidor de downloads. O programa se fechará agora."
- IDS_ERROR_MALFORMED_URL "O Java não pôde baixar da URL '%s'. O programa se fechará agora."
-END
--- a/jdk/src/windows/native/sun/jkernel/kernel_sv.rc Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_DOWNLOAD_DIALOG DIALOGEX 0, 0, 340, 120
-STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP |
- WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Ytterligare komponenter behövs"
-EXSTYLE WS_EX_APPWINDOW
-FONT 8, "MS Sans Serif"
-BEGIN
- LTEXT "", IDC_DOWNLOAD_MASTHEAD, 0, 0, 340, 39
- LTEXT "", IDC_MASTHEAD_TEXT, 60, 14, 200, 12
- CONTROL "", IDC_STATIC,"Static", SS_BLACKFRAME | SS_SUNKEN,
- 0, 39, 340, 1
- LTEXT "", IDC_DOWNLOAD_TEXT, 12, 60, 316, 20
- LTEXT "", IDC_TIME_REMAINING, 12, 90, 316, 10
- CONTROL "Progress1",1006,"msctls_progress32",PBS_SMOOTH,
- 12, 100, 265, 14
- PUSHBUTTON "Avbryt", 2, 285, 100, 46, 14
-END
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO DISCARDABLE
-BEGIN
- 105, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 236
- TOPMARGIN, 7
- BOTTOMMARGIN, 63
- END
-END
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_DOWNLOAD_CANCEL_MESSAGE "Programmet kan avslutas om du avbryter installationen av ytterligare komponenter som är nödvändiga för programmet.\n\nVill du avbryta installationen av ytterligare komponenter?"
- IDS_DOWNLOAD_CANCEL_CAPTION "Avbryt - Ytterligare komponenter"
- IDS_DOWNLOAD_CANCEL_INSTRUCTION ""
- IDS_HTTP_INSTRUCTION_REQUEST_TIMEOUT "Anslutningen avbröts på grund av timeout"
- IDS_HTTP_INSTRUCTION_SERVER_NOT_REACHABLE "Det går inte att ansluta till Internet."
- IDS_HTTP_INSTRUCTION_UNKNOWN_ERROR "Serverfel (Fel %s)"
- IDS_HTTP_INSTRUCTION_SERVICE_UNAVAIL "Tjänsten är inte tillgänglig (Fel %s)"
- IDS_HTTP_INSTRUCTION_FORBIDDEN "Åtkomst nekad eller förbjuden (Fel %s)"
- IDS_HTTP_STATUS_OTHER "Ett fel inträffade i samband med begäran. Vill du försöka skicka begäran igen?"
-
-// HTTP status code
- IDS_HTTP_STATUS_REQUEST_TIMEOUT "Ett tidsfel inträffade medan servern väntade på begäran."
- IDS_HTTP_STATUS_FORBIDDEN "Servern förstod begäran men vägrar uppfylla den."
- IDS_HTTP_STATUS_SERVER_ERROR "Ett oväntat tillstånd som innebär att begäran inte kan uppfyllas påträffades."
- IDS_HTTP_STATUS_SERVICE_UNAVAIL "Tjänsten är tillfälligt överbelastad."
-
-
- IDS_DOWNLOAD_STATUS_RETRY "Servern är upptagen för närvarande. Försök igen om %ld sekund(er) ..."
-
- IDS_ERROR_CAPTION "Fel - Java Kernel"
- IDS_HOURSMINUTESECOND "Återstående tid: %d timmar %d minuter %.0f sekunder"
- IDS_HOURMINUTESECOND "Återstående tid: %d timme %d minuter %.0f sekunder"
- IDS_MINUTESECOND "Återstående tid: %d minuter %.0f sekunder"
- IDS_SECOND "Återstående tid: %.0f sekunder"
- IDS_DISK_FULL_ERROR_CAPTION "Disken är full"
- IDS_DISK_FULL_ERROR "Java Kernel kunde inte ladda ned nödvändiga komponenter därför att disken är full. Försöka igen?"
- IDS_DISK_WRITE_ERROR_CAPTION "Fel vid skrivning till disk"
- IDS_DISK_WRITE_ERROR "Java Kernel stötte på ett fel vid skrivning till disken. Försöka igen?"
- IDS_HTTP_STATUS_SERVER_NOT_REACHABLE "Java Kernel kan inte fortsätta med systemets aktuella inställningar för Internetanslutning. Öppna Kontrollpanelen, Internet-alternativ > Anslutningar och kontrollera att inställningarna och proxyinformationen stämmer."
-
- IDS_DOWNLOAD_RETRY "Nedladdningsfel"
- IDS_DOWNLOAD_RETRY_TEXT "Ett fel uppstod under nedladdning av vissa begärda komponenter. Vill du försöka ladda ned dessa komponenter igen?"
-
- IDS_DOWNLOAD "Ytterligare komponenter installeras"
- IDS_DOWNLOAD_UNPACKING "Uppackning av paket"
- IDS_DOWNLOAD_TEXT "Java-applikationen startar när ytterligare komponenter som krävs är nedladdade och installerade."
-
- IDS_FILE_UPDATE_ERROR "Ett fel uppstod när %s%s uppdaterades."
- IDS_FILE_DELETE_ERROR "Ett fel uppstod när %s skulle tas bort."
- IDS_JAVA_HOME_ERROR "Det går inte att avgöra Javas hemkatalog"
- IDS_KERNEL_HOME_ERROR "Det går inte att avgöra sökvägen till jkernell.dll."
- IDS_JBROKER_ERROR "Det går inte att starta jbroker.exe."
- IDS_FATAL_ERROR "Det gick inte att ladda ned de nödvändiga komponenterna med Java. Programmet avslutas."
- IDS_ERROR_DOWNLOADING_BUNDLE_PROPERTIES "Det gick inte att upprätta någon kommunikation mellan Java och nedladdningsservern. Programmet avslutas."
- IDS_ERROR_MALFORMED_BUNDLE_PROPERTIES "Det uppstod ett fel i kommunikationen mellan Java och nedladdningsservern. Programmet avslutas."
- IDS_ERROR_MALFORMED_URL "Det gick inte att ladda ned från webbadressen '%s'. Programmet avslutas."
-END
--- a/jdk/src/windows/native/sun/jkernel/kernel_zh.rc Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_DOWNLOAD_DIALOG DIALOGEX 0, 0, 340, 120
-STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP |
- WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "ËùÐèµÄÆäËû×é¼þ"
-EXSTYLE WS_EX_APPWINDOW
-FONT 8, "MS Sans Serif"
-BEGIN
- LTEXT "", IDC_DOWNLOAD_MASTHEAD, 0, 0, 340, 39
- LTEXT "", IDC_MASTHEAD_TEXT, 60, 14, 200, 12
- CONTROL "", IDC_STATIC,"Static", SS_BLACKFRAME | SS_SUNKEN,
- 0, 39, 340, 1
- LTEXT "", IDC_DOWNLOAD_TEXT, 12, 60, 316, 20
- LTEXT "", IDC_TIME_REMAINING, 12, 90, 316, 10
- CONTROL "Progress1",1006,"msctls_progress32",PBS_SMOOTH,
- 12, 100, 265, 14
- PUSHBUTTON "È¡Ïû", 2, 285, 100, 46, 14
-END
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO DISCARDABLE
-BEGIN
- 105, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 236
- TOPMARGIN, 7
- BOTTOMMARGIN, 63
- END
-END
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_DOWNLOAD_CANCEL_MESSAGE "È¡Ïû°²×°Ó¦ÓóÌÐòËùÐèµÄ¶îÍâ×é¼þ¿ÉÄܻᵼÖ¸ÃÓ¦ÓóÌÐòÍ˳ö¡£\n\nÊÇ·ñÈ·¶¨ÒªÈ¡Ïû°²×°¶îÍâ×é¼þ£¿"
- IDS_DOWNLOAD_CANCEL_CAPTION "È¡Ïû - ¶îÍâ×é¼þ"
- IDS_DOWNLOAD_CANCEL_INSTRUCTION ""
- IDS_HTTP_INSTRUCTION_REQUEST_TIMEOUT "Á¬½ÓÒѳ¬Ê±"
- IDS_HTTP_INSTRUCTION_SERVER_NOT_REACHABLE "ÎÞ·¨Á¬½Óµ½ Internet"
- IDS_HTTP_INSTRUCTION_UNKNOWN_ERROR "·þÎñÆ÷´íÎ󣨴íÎó %s£©"
- IDS_HTTP_INSTRUCTION_SERVICE_UNAVAIL "·þÎñ²»¿ÉÓ㨴íÎó %s£©"
- IDS_HTTP_INSTRUCTION_FORBIDDEN "¾Ü¾ø·ÃÎÊ»ò½ûÖ¹·ÃÎÊ£¨´íÎó %s£©"
- IDS_HTTP_STATUS_OTHER "ÔÚ´ËÇëÇóÆÚ¼ä³öÏÖ´íÎó¡£ÄúÊÇ·ñÒªÖØÊÔÇëÇó£¿"
-
-// HTTP status code
- IDS_HTTP_STATUS_REQUEST_TIMEOUT "·þÎñÆ÷µÈ´ýÇëÇóʱ³¬Ê±¡£"
- IDS_HTTP_STATUS_FORBIDDEN "·þÎñÆ÷ÒѽÓÊÜÇëÇ󣬵«¾Ü¾øÖ´ÐС£"
- IDS_HTTP_STATUS_SERVER_ERROR "·þÎñÆ÷Óöµ½ÒâÍâÇé¿ö£¬ÎÞ·¨Íê³ÉÇëÇó¡£"
- IDS_HTTP_STATUS_SERVICE_UNAVAIL "·þÎñÔÝʱ¹ýÔØ¡£"
-
-
- IDS_DOWNLOAD_STATUS_RETRY "·þÎñÆ÷Õý棬ÇëÔÚ %ld ÃëºóÖØÊÔ..."
-
- IDS_ERROR_CAPTION "´íÎó - Java Kernel"
- IDS_HOURSMINUTESECOND "¹À¼ÆÊ£Óàʱ¼ä:%d Сʱ %d ·ÖÖÓ %.0f Ãë"
- IDS_HOURMINUTESECOND "¹À¼ÆÊ£Óàʱ¼ä:%d Сʱ %d ·ÖÖÓ %.0f Ãë"
- IDS_MINUTESECOND "¹À¼ÆÊ£Óàʱ¼ä:%d ·ÖÖÓ %.0f Ãë"
- IDS_SECOND "¹À¼ÆÊ£Óàʱ¼ä:%.0f Ãë"
- IDS_DISK_FULL_ERROR_CAPTION "´ÅÅÌÒÑÂú"
- IDS_DISK_FULL_ERROR "ÓÉÓÚ´ÅÅÌÒÑÂú£¬Java Kernel ÎÞ·¨ÏÂÔØËùÐèµÄ×é¼þ¡£ÊÇ·ñÖØÊÔ£¿"
- IDS_DISK_WRITE_ERROR_CAPTION "´ÅÅÌдÈë´íÎó"
- IDS_DISK_WRITE_ERROR "ÔÚÏò´ÅÅÌÖ´ÐÐдÈë²Ù×÷ʱ Java Kernel Óöµ½´íÎó¡£ÊÇ·ñÖØÊÔ£¿"
- IDS_HTTP_STATUS_SERVER_NOT_REACHABLE "ÔÚʹÓÃϵͳµ±Ç°µÄ Internet Á¬½ÓÉèÖõÄÇé¿öÏ£¬Java Kernel ÎÞ·¨¼ÌÐøÖ´ÐС£ÔÚ Windows""¿ØÖÆÃæ°å""ÖУ¬Çë¼ì²é""Internet Ñ¡Ïî""->""Á¬½Ó""ÒÔÈ·±£ÉèÖúʹúÀíÐÅÏ¢ÕýÈ·¡£"
-
- IDS_DOWNLOAD_RETRY "ÏÂÔØ´íÎó"
- IDS_DOWNLOAD_RETRY_TEXT "ÔÚÏÂÔØijЩÇëÇóµÄ×é¼þÆڼ䷢Éú´íÎó¡£ÊÇ·ñÒªÔÙÊÔÒ»´ÎÏÂÔØÕâЩ×é¼þ£¿"
-
- IDS_DOWNLOAD "°²×°ÆäËû×é¼þ"
- IDS_DOWNLOAD_UNPACKING "ÕýÔÚ½âѹËõ°ü"
- IDS_DOWNLOAD_TEXT "ÏÂÔز¢°²×° Java Ó¦ÓóÌÐòËùÐèµÄÆäËû×é¼þºó£¬¸ÃÓ¦ÓóÌÐò½«Æô¶¯¡£"
-
- IDS_FILE_UPDATE_ERROR "¸üР%s%s ʱ·¢Éú´íÎó¡£"
- IDS_FILE_DELETE_ERROR "ɾ³ý %s ʱ·¢Éú´íÎó¡£"
- IDS_JAVA_HOME_ERROR "ÎÞ·¨È·¶¨ Java Ö÷Ŀ¼¡£"
- IDS_KERNEL_HOME_ERROR "ÎÞ·¨È·¶¨ jkernel.dll µÄ·¾¶¡£"
- IDS_JBROKER_ERROR "ÎÞ·¨Æô¶¯ jbroker.exe¡£"
- IDS_FATAL_ERROR "Java ÎÞ·¨ÏÂÔØËùÐèµÄ×é¼þ¡£ÏÖÔÚ³ÌÐò½«Í˳ö¡£"
- IDS_ERROR_DOWNLOADING_BUNDLE_PROPERTIES "Java ÎÞ·¨ÓëÏÂÔØ·þÎñÆ÷½øÐÐͨÐÅ¡£ÏÖÔÚ³ÌÐò½«Í˳ö¡£"
- IDS_ERROR_MALFORMED_BUNDLE_PROPERTIES "Java ÔÚÓëÏÂÔØ·þÎñÆ÷½øÐÐͨÐÅʱÓöµ½´íÎó¡£ÏÖÔÚ³ÌÐò½«Í˳ö¡£"
- IDS_ERROR_MALFORMED_URL "Java ÎÞ·¨´Ó URL '%s' Ö´ÐÐÏÂÔØ¡£ÏÖÔÚ³ÌÐò½«Í˳ö¡£"
-END
--- a/jdk/src/windows/native/sun/jkernel/kernel_zh_TW.rc Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_DOWNLOAD_DIALOG DIALOGEX 0, 0, 340, 120
-STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP |
- WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "©Ò»Ýªº¨ä¥L¤¸¥ó"
-EXSTYLE WS_EX_APPWINDOW
-FONT 8, "MS Sans Serif"
-BEGIN
- LTEXT "", IDC_DOWNLOAD_MASTHEAD, 0, 0, 340, 39
- LTEXT "", IDC_MASTHEAD_TEXT, 60, 14, 200, 12
- CONTROL "", IDC_STATIC,"Static", SS_BLACKFRAME | SS_SUNKEN,
- 0, 39, 340, 1
- LTEXT "", IDC_DOWNLOAD_TEXT, 12, 60, 316, 20
- LTEXT "", IDC_TIME_REMAINING, 12, 90, 316, 10
- CONTROL "Progress1",1006,"msctls_progress32",PBS_SMOOTH,
- 12, 100, 265, 14
- PUSHBUTTON "¨ú®ø", 2, 285, 100, 46, 14
-END
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO DISCARDABLE
-BEGIN
- 105, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 236
- TOPMARGIN, 7
- BOTTOMMARGIN, 63
- END
-END
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_DOWNLOAD_CANCEL_MESSAGE "¨ú®ø¦w¸ËÀ³¥Îµ{¦¡©Ò»Ýªº¨ä¥L¤¸¥ó¡A¥i¯à·|¾ÉPÀ³¥Îµ{¦¡µ²§ô¡C\n\n±z½T©wn¨ú®ø¦w¸Ë¨ä¥L¤¸¥ó¡H"
- IDS_DOWNLOAD_CANCEL_CAPTION "¨ú®ø - ¨ä¥L¤¸¥ó"
- IDS_DOWNLOAD_CANCEL_INSTRUCTION ""
- IDS_HTTP_INSTRUCTION_REQUEST_TIMEOUT "³s½u¹O®É"
- IDS_HTTP_INSTRUCTION_SERVER_NOT_REACHABLE "µLªk³s½u¦Üºô»Úºô¸ô"
- IDS_HTTP_INSTRUCTION_UNKNOWN_ERROR "¦øªA¾¹¿ù»~ (¿ù»~ %s)"
- IDS_HTTP_INSTRUCTION_SERVICE_UNAVAIL "µLªk¨Ï¥ÎªA°È (¿ù»~ %s)"
- IDS_HTTP_INSTRUCTION_FORBIDDEN "©Úµ´©Î¸T¤î¦s¨ú (¿ù»~ %s)"
- IDS_HTTP_STATUS_OTHER "¦b¦¹½Ð¨D´Á¶¡µo¥Í¿ù»~¡C¬O§_n«¸Õ½Ð¨D¡H"
-
-// HTTP status code
- IDS_HTTP_STATUS_REQUEST_TIMEOUT "¦øªA¾¹µ¥«Ý½Ð¨D®É¥X²{¹O®É¡C"
- IDS_HTTP_STATUS_FORBIDDEN "¦øªA¾¹ÁA¸Ñ¸Ó½Ð¨D¡A¦ý¥¿¦b©Úµ´¹ê²{¥¦¡C"
- IDS_HTTP_STATUS_SERVER_ERROR "¦øªA¾¹¹J¨ìªý¤î¨ä¹ê²{½Ð¨Dªº¥¼¹w´Á±ø¥ó¡C"
- IDS_HTTP_STATUS_SERVICE_UNAVAIL "ªA°È¼È®É¶W¸ü¡C"
-
-
- IDS_DOWNLOAD_STATUS_RETRY "¦øªA¾¹¥Ø«e³B©ó¦£¸Lª¬ºA¡A½Ð¦b %ld ¬í«á«¸Õ..."
-
- IDS_ERROR_CAPTION "¿ù»~ - Java Kernel"
- IDS_HOURSMINUTESECOND "¹w¦ô³Ñ¾l®É¶¡¡G%d ¤p®É %d ¤À %.0f ¬í"
- IDS_HOURMINUTESECOND "¹w¦ô³Ñ¾l®É¶¡¡G%d ¤p®É %d ¤À %.0f ¬í"
- IDS_MINUTESECOND "¹w¦ô³Ñ¾l®É¶¡¡G%d ¤À %.0f ¬í"
- IDS_SECOND "¹w¦ô³Ñ¾l®É¶¡¡G%.0f ¬í"
- IDS_DISK_FULL_ERROR_CAPTION "ºÏºÐ¤wº¡"
- IDS_DISK_FULL_ERROR "¥Ñ©óºÏºÐ¤wº¡¡AJava Kernel µLªk¤U¸ü©Ò»Ýªº¤¸¥ó¡C¬O§_n«¸Õ¡H"
- IDS_DISK_WRITE_ERROR_CAPTION "ºÏºÐ¼g¤J¿ù»~"
- IDS_DISK_WRITE_ERROR "Java Kernel ¦b¼g¤J¦ÜºÏºÐ®É¹J¨ì¿ù»~¡C¬O§_n«¸Õ¡H"
- IDS_HTTP_STATUS_SERVER_NOT_REACHABLE "¦b¨t²Î¥Ø«eªººô»Úºô¸ô³s½u³]©w¤U¡AJava Kernel µLªkÄ~Äò°õ¦æ¡C¦b Windows¡u±±¨î¥x¡v¤¤¡A½Ð®Ö¹ï¡uºô»Úºô¸ô¿ï¶µ¡v->¡u³s½u¡v¡A¥H½T©w³]©w©M¥N²z¦øªA¾¹¸ê°T¥¿½T¡C"
-
- IDS_DOWNLOAD_RETRY "¤U¸ü¿ù»~"
- IDS_DOWNLOAD_RETRY_TEXT "¤U¸ü¬Y¨Ç©Ò»Ý¤¸¥ó®Éµo¥Í¿ù»~¡C¬O§_n«¸Õ¤U¸ü³o¨Ç¤¸¥ó¡H"
-
- IDS_DOWNLOAD "¥¿¦b¦w¸Ë¨ä¥L¤¸¥ó"
- IDS_DOWNLOAD_UNPACKING "¥¿¦b¸ÑÀ£ÁY§ô"
- IDS_DOWNLOAD_TEXT "¤U¸ü¨Ã¦w¸Ë¨ä¥L©Ò»Ý¤¸¥ó«á¡AJava À³¥Îµ{¦¡±N±Ò°Ê¡C"
-
- IDS_FILE_UPDATE_ERROR "§ó·s %s%s ®Éµo¥Í¿ù»~¡C"
- IDS_FILE_DELETE_ERROR "²¾°£ %s ®Éµo¥Í¿ù»~¡C"
- IDS_JAVA_HOME_ERROR "µLªk½T©w Java ¥D¥Ø¿ý¡C"
- IDS_KERNEL_HOME_ERROR "µLªk½T©w jkernel.dll ªº¸ô®|¡C"
- IDS_JBROKER_ERROR "µLªk±Ò°Ê jbroker.exe¡C"
- IDS_FATAL_ERROR "Java µLªk¤U¸ü©Ò»Ýªº¤¸¥ó¡Cµ{¦¡±N¥ß§Yµ²§ô¡C"
- IDS_ERROR_DOWNLOADING_BUNDLE_PROPERTIES "Java µLªk»P¤U¸ü¦øªA¾¹¶i¦æ³q°T¡Cµ{¦¡±N¥ß§Yµ²§ô¡C"
- IDS_ERROR_MALFORMED_BUNDLE_PROPERTIES "Java ¦b»P¤U¸ü¦øªA¾¹¶i¦æ³q°T®É¹J¨ì¤F¤@Ó¿ù»~¡Cµ{¦¡±N¥ß§Yµ²§ô¡C"
- IDS_ERROR_MALFORMED_URL "Java µLªk±q URL¡u%s¡v¤U¸ü¡Cµ{¦¡±N¥ß§Yµ²§ô¡C"
-END
--- a/jdk/src/windows/native/sun/jkernel/resource.h Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,105 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-//{{NO_DEPENDENCIES}}
-// Microsoft Developer Studio generated include file.
-//
-//
-
-
-// HTTP status code
-#define IDS_HTTP_STATUS_FORBIDDEN 403
-#define IDS_HTTP_STATUS_REQUEST_TIMEOUT 408
-#define IDS_HTTP_STATUS_SERVER_ERROR 500
-#define IDS_HTTP_STATUS_SERVICE_UNAVAIL 503
-
-
-
-#define IDS_HTTP_INSTRUCTION_REQUEST_TIMEOUT 2408
-#define IDS_HTTP_INSTRUCTION_SERVICE_UNAVAIL 2503
-#define IDS_HTTP_INSTRUCTION_FORBIDDEN 2403
-#define IDS_HTTP_INSTRUCTION_SERVER_NOT_REACHABLE 2035
-#define IDS_HTTP_INSTRUCTION_UNKNOWN_ERROR 2036
-#define IDS_HTTP_STATUS_OTHER 2037
-
-#define IDS_DOWNLOAD_STATUS_RETRY 3004
-
-#define IDD_DOWNLOAD_DIALOG 105
-#define IDI_JAVA 114
-#define IDI_MASTHEAD 115
-#define IDC_DOWNLOAD_PROGRESS 1006
-#define IDC_DOWNLOAD_INFO 1007
-#define IDC_DOWNLOAD_STATUS 1008
-#define IDC_DOWNLOAD_ANIMATE 1009
-#define IDS_ERROR_CAPTION 2004
-#define IDS_HOURSMINUTESECOND 2007
-#define IDS_HOURMINUTESECOND 2008
-#define IDS_MINUTESECOND 2009
-#define IDS_SECOND 2010
-#define IDS_DISK_FULL_ERROR 2023
-#define IDS_DISK_FULL_ERROR_CAPTION 2024
-#define IDS_DISK_WRITE_ERROR 2025
-#define IDS_DISK_WRITE_ERROR_CAPTION 2026
-#define IDS_HTTP_STATUS_SERVER_NOT_REACHABLE 2028
-#define IDS_FATAL_ERROR 2029
-#define IDS_ERROR_DOWNLOADING_BUNDLE_PROPERTIES 2030
-#define IDS_ERROR_MALFORMED_BUNDLE_PROPERTIES 2031
-#define IDS_ERROR_MALFORMED_URL 2032
-
-#define IDS_DOWNLOAD_CANCEL_CAPTION 2038
-#define IDS_DOWNLOAD_CANCEL_INSTRUCTION 2039
-#define IDS_DOWNLOAD_CANCEL_MESSAGE 2040
-
-// codes for download and install dialog
-#define IDC_MASTHEAD_TEXT 116
-#define IDC_DOWNLOAD_MASTHEAD 121
-#define IDC_TIME_REMAINING 122
-#define IDC_DOWNLOAD_TEXT 123
-
-// codes for download retry dialog
-#define IDS_DOWNLOAD_RETRY 130
-#define IDS_DOWNLOAD_RETRY_TEXT 131
-
-#define IDS_DOWNLOAD_UNPACKING 3900
-#define IDS_DOWNLOAD 4000
-#define IDS_DOWNLOAD_TEXT 4001
-
-// codes for completion cleanup
-#define IDS_FILE_UPDATE_ERROR 4101
-#define IDS_FILE_DELETE_ERROR 4103
-#define IDS_JAVA_HOME_ERROR 4104
-#define IDS_KERNEL_HOME_ERROR 4105
-#define IDS_JBROKER_ERROR 4106
-
-// Next default values for new objects
-//
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 128
-#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1016
-#define _APS_NEXT_SYMED_VALUE 103
-#endif
-#endif
--- a/jdk/src/windows/native/sun/jkernel/stdafx.cpp Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-// stdafx.cpp : source file that includes just the standard includes
-// stdafx.pch will be the pre-compiled header
-// stdafx.obj will contain the pre-compiled type information
-
-#include "stdafx.h"
-
-#ifdef _ATL_STATIC_REGISTRY
-#include <statreg.h>
-#include <statreg.cpp>
-#endif
-
-#include <atlimpl.cpp>
--- a/jdk/src/windows/native/sun/jkernel/stdafx.h Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-
-// stdafx.h : include file for standard system include files,
-// or project specific include files that are used frequently,
-// but are changed infrequently
-
-#if !defined(AFX_STDAFX_H__FBC6C744_18F8_11D6_9DF1_0001023B10AA__INCLUDED_)
-#define AFX_STDAFX_H__FBC6C744_18F8_11D6_9DF1_0001023B10AA__INCLUDED_
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-
-#define STRICT
-#ifndef _WIN32_WINNT
-/* REMIND : 0x500 means Windows 2000 .. seems like we can update
- * for Windows XP when we move the SDK and build platform
- */
-#define _WIN32_WINNT 0x0500
-#endif
-#define _ATL_APARTMENT_THREADED
-
-#include <atlbase.h>
-//You may derive a class from CComModule and use it if you want to override
-//something, but do not change the name of _Module
-extern CComModule _Module;
-#include <atlcom.h>
-#include <atlwin.h>
-
-//{{AFX_INSERT_LOCATION}}
-// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
-
-#endif // !defined(AFX_STDAFX_H__FBC6C744_18F8_11D6_9DF1_0001023B10AA__INCLUDED)
--- a/jdk/src/windows/native/sun/jkernel/version.rc Wed Jul 05 17:34:21 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-#include "afxres.h"
-
-// Need 2 defines so macro argument to XSTR will get expanded before quoting.
-#define XSTR(x) STR(x)
-#define STR(x) #x
-
-LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION JDK_FVER
- PRODUCTVERSION JDK_FVER
- FILEFLAGSMASK 0x3fL
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- // FILEOS 0x4 is Win32, 0x40004 is Win32 NT only
- FILEOS 0x4L
- // FILETYPE should be 0x1 for .exe and 0x2 for .dll
- FILETYPE JDK_FTYPE
- FILESUBTYPE 0x0L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "000004b0"
- BEGIN
- VALUE "CompanyName", XSTR(JDK_COMPANY) "\0"
- VALUE "FileDescription", XSTR(JDK_COMPONENT) "\0"
- VALUE "FileVersion", XSTR(JDK_VER) "\0"
- VALUE "Full Version", XSTR(JDK_BUILD_ID) "\0"
- VALUE "InternalName", XSTR(JDK_INTERNAL_NAME) "\0"
- VALUE "LegalCopyright", XSTR(JDK_COPYRIGHT) "\0"
- VALUE "OriginalFilename", XSTR(JDK_FNAME) "\0"
- VALUE "ProductName", XSTR(JDK_NAME) "\0"
- VALUE "ProductVersion", XSTR(JDK_VER) "\0"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x0, 1200
- END
-END