diff --git a/src/share/native/java/lang/System.c b/src/share/native/java/lang/System.c index 84ae689b50f1569de5763ea03bd6910fa3483074..8efd95e09b7b44cf41a1b29817be8235ca50d4dc 100644 --- a/src/share/native/java/lang/System.c +++ b/src/share/native/java/lang/System.c @@ -389,11 +389,19 @@ Java_java_lang_System_initProperties(JNIEnv *env, jclass cla, jobject props) sprops->display_variant, sprops->format_variant, putID, getPropID); GETPROP(props, "file.encoding", jVMVal); if (jVMVal == NULL) { +#ifdef MACOSX + /* + * Since sun_jnu_encoding is now hard-coded to UTF-8 on Mac, we don't + * want to use it to overwrite file.encoding + */ + PUTPROP(props, "file.encoding", sprops->encoding); +#else if (fmtdefault) { PUTPROP(props, "file.encoding", sprops->encoding); } else { PUTPROP(props, "file.encoding", sprops->sun_jnu_encoding); } +#endif } else { (*env)->DeleteLocalRef(env, jVMVal); } diff --git a/src/solaris/native/java/lang/java_props_md.c b/src/solaris/native/java/lang/java_props_md.c index baba74fe8977bfafc0f23c8ce8d9251fd33b534c..c7d3ba6eff5fe768b0bc577b83ada10e09518506 100644 --- a/src/solaris/native/java/lang/java_props_md.c +++ b/src/solaris/native/java/lang/java_props_md.c @@ -538,7 +538,12 @@ GetJavaProperties(JNIEnv *env) sprops.display_script = sprops.script; sprops.display_country = sprops.country; sprops.display_variant = sprops.variant; + +#ifdef MACOSX + sprops.sun_jnu_encoding = "UTF-8"; +#else sprops.sun_jnu_encoding = sprops.encoding; +#endif #ifdef _ALLBSD_SOURCE #if BYTE_ORDER == _LITTLE_ENDIAN diff --git a/test/java/util/Properties/MacJNUEncoding/ExpectedEncoding.java b/test/java/util/Properties/MacJNUEncoding/ExpectedEncoding.java new file mode 100644 index 0000000000000000000000000000000000000000..b8835b8edb7ebc082685ed9629d33ffc2c97f30a --- /dev/null +++ b/test/java/util/Properties/MacJNUEncoding/ExpectedEncoding.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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. + */ + +/** + * Check that the value of file.encoding and sun.jnu.encoding match the expected + * values passed in on the command-line. + */ +public class ExpectedEncoding { + public static void main(String[] args) { + boolean failed = false; + if (args.length != 2) { + System.out.println("Usage:"); + System.out.println("$ java ExpectedEncoding "); + } + String expectFileEnc = args[0]; + String expectSunJnuEnc = args[1]; + + String fileEnc = System.getProperty("file.encoding"); + String jnuEnc = System.getProperty("sun.jnu.encoding"); + + if (fileEnc == null || !fileEnc.equals(expectFileEnc)) { + System.err.println("Expected file.encoding: " + expectFileEnc); + System.err.println("Actual file.encoding: " + fileEnc); + failed = true; + } + if (jnuEnc == null || !jnuEnc.equals(expectSunJnuEnc)) { + System.err.println("Expected sun.jnu.encoding: " + expectSunJnuEnc); + System.err.println("Actual sun.jnu.encoding: " + jnuEnc); + failed = true; + } + if (failed) { + System.err.println("Test Failed"); + System.exit(1); + } + } +} diff --git a/test/java/util/Properties/MacJNUEncoding/MacJNUEncoding.sh b/test/java/util/Properties/MacJNUEncoding/MacJNUEncoding.sh new file mode 100644 index 0000000000000000000000000000000000000000..0131467dba1246ca446093d1d8014684e3bf3356 --- /dev/null +++ b/test/java/util/Properties/MacJNUEncoding/MacJNUEncoding.sh @@ -0,0 +1,90 @@ +#!/bin/sh + +# +# Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. + +# @test +# @bug 8003228 +# @summary Test the value of sun.jnu.encoding on Mac +# @author Brent Christian +# +# @run shell MacJNUEncoding.sh + +# Only run test on Mac +OS=`uname -s` +case "$OS" in + Darwin ) ;; + * ) + exit 0 + ;; +esac + +if [ "${TESTJAVA}" = "" ] +then + echo "TESTJAVA not set. Test cannot execute. Failed." + exit 1 +fi + +if [ "${TESTSRC}" = "" ] +then + echo "TESTSRC not set. Test cannot execute. Failed." + exit 1 +fi + +if [ "${TESTCLASSES}" = "" ] +then + echo "TESTCLASSES not set. Test cannot execute. Failed." + exit 1 +fi + +JAVAC="${TESTJAVA}"/bin/javac +JAVA="${TESTJAVA}"/bin/java + +echo "Building test classes..." +"$JAVAC" -d "${TESTCLASSES}" "${TESTSRC}"/ExpectedEncoding.java + +echo "" +echo "Running test for LANG=C" +export LANG=C +"${JAVA}" ${TESTVMOPTS} -classpath "${TESTCLASSES}" ExpectedEncoding US-ASCII UTF-8 +result1=$? + +echo "" +echo "Running test for LANG=en_US.UTF-8" +export LANG=en_US.UTF-8 +"${JAVA}" ${TESTVMOPTS} -classpath "${TESTCLASSES}" ExpectedEncoding UTF-8 UTF-8 +result2=$? + +echo "" +echo "Cleanup" +rm ${TESTCLASSES}/ExpectedEncoding.class + +if [ ${result1} -ne 0 ] ; then + echo "Test failed for LANG=C" + exit ${result1} +fi +if [ ${result2} -ne 0 ] ; then + echo "Test failed for LANG=en_US.UTF-8" + exit ${result2} +fi +exit 0 +