RFR 8124977 cmdline encoding challenges on Windows

Kumar Srinivasan kumar.x.srinivasan at oracle.com
Tue Jul 14 13:33:27 UTC 2015


Hi Kirk,

I took another pass over the changes.

IMHO, we need to make it easier for people to use this feature,
and eliminate these two, atleast externally.

"-Dwindows.UnicodeConsole=true",
"-Dfile.encoding.unicode=\"UTF-8\"",

Can we invent a new command line arg ? we can make it an -X
flag, by inspecting the args, we can set the two properties,
preferably one ? and also make the decision to use Wide
character translations etc.

1. java_md.c

a.> + ConvertWinArgsToCommonFormat(cmdLineUtf8, pargc, pargv); + 
JLI_MemFree(cmdLineUtf8); The free may not happen under error 
conditions, though we return immediately memory checking tools are 
likely to complain about memory leak.
b.>

+        if (stricmp(arg, "-Dwindows.UnicodeConsole=true") == 0) {
For consistency sake there there is a wrapper for this.
69 #define JLI_StrCaseCmp(p1, p2)          stricmp((p1), (p2))


As for the test you can delete the shell test and all you need is the
following, I have not tested it, but it should work.
#####################
UnicodeCmdVerifier.java
#####################
<Copyright deleted for clarity>

/*
* @test
* @bug 8124977
* @summary ensures that the command line argument, passed as Unicode,
* matches the desired value.
* @compile -XDignore.symbol.file UnicodeCmdVerifier.java
* @run main UnicodeCmdVerifier
*/
public class UnicodeCmdVerifier extends TestHelper {
public static void main(String[] args) {
if (!isWindows) { // test is applicable only on Windows
return;
}
if (args != null && args.length > 0) {
String desired = new String("\u042e\u043d\u0438\u043a\u043e\u0434");
if (args[1].equals(desired)) {
System.out.println("The argument matches the desired text: " + args[0]);
return;
} else {
throw new Error("The argument does not match the desired text: "
+ args[0] + " != " + desired);
}
return;
}
TestResult tr = doExec(javaCmd,
"-cp", TEST_CLASSES_DIR.getAbsolutePath(),
"-Dwindows.UnicodeConsole=true",
"-Dfile.encoding.unicode=\"UTF-8\"",
"UnicodeCmdVerifier", "testme", "Юникод");
if (!tr.isOK()) {
throw new Error("test failed with a non-zero exit");
}
}
}


Thanks
Kumar

On 7/8/2015 9:50 AM, Kirk Shoop wrote:
>> -----Original Message-----
>> From: Kumar Srinivasan [mailto:kumar.x.srinivasan at oracle.com]
>>
>> Hi Kirk,
>>
>> Thanks for proposing this change.
>>
>> If you notice all the posix calls are wrapped in JLI_* this  gives us the
>> ability to use "W" functions.  I almost got it done, several years ago,
>> but we upgraded to VS2010 and my work based on VS2003 keeled over,
>> meanwhile my focus was  "shifted" to something else.
>>
>> main.c: is really envisioned to be a stub  compiled by the tool launchers,
>> like java, javac, javah, jar etc. I prefer to see all the heavy logic in
>> this file moved to the platform specific file windows/java_md.*
>>
> Heavy logic is moved out of main.c file.
>
>> For the reason specified above we need to move fprintf or any naked posix
>> calls to JLI_* indirections.
>>
> Posix calls are wrapped in JLI_* functions.
>
>> I don't see any tests ? The tests must be written in java and placed in
>> jdk/test/tools/launcher, there is a helper framework TestHelper.java.
>>
> A new test for our changes is added.
>
>> There are other changes in nio, charsets etc, this will be reviewed by my
>> colleague specializing in that area (Sherman) cc'ed.
>>
>>
>> Thanks
>>
>> Kumar
> Thank you for the feedback!
>
> Valery prepared a new webrev which I placed here:
>    http://cr.openjdk.java.net/~kshoop/8124977/webrev.01
>
> Thanks,
> Kirk




More information about the core-libs-dev mailing list