< prev index next >

test/jdk/tools/jpackage/helpers/JPackageHelper.java

Print this page




 471             int codeLen = in.codePointCount(0, in.length());
 472             for (int i = 0; i < codeLen; i++) {
 473                 int code = in.codePointAt(i);
 474                 // Note: No need to escape '\' on Linux or OS X
 475                 // jpackage expects us to pass arguments and properties with
 476                 // quotes and spaces as a map
 477                 // with quotes being escaped with additional \ for
 478                 // internal quotes.
 479                 // So if we want two properties below:
 480                 // -Djnlp.Prop1=Some "Value" 1
 481                 // -Djnlp.Prop2=Some Value 2
 482                 // jpackage will need:
 483                 // "-Djnlp.Prop1=\"Some \\"Value\\" 1\" -Djnlp.Prop2=\"Some Value 2\""
 484                 // but since we using ProcessBuilder to run jpackage we will need to escape
 485                 // our escape symbols as well, so we will need to pass string below to ProcessBuilder:
 486                 // "-Djnlp.Prop1=\\\"Some \\\\\\\"Value\\\\\\\" 1\\\" -Djnlp.Prop2=\\\"Some Value 2\\\""
 487                 switch (code) {
 488                     case '"':
 489                         // " -> \" -> \\\"
 490                         if (i == 0 || in.codePointAt(i - 1) != '\\') {
 491                             if (!toolProvider && isWindows()) {
 492                                 sb.appendCodePoint('\\');
 493                                 sb.appendCodePoint('\\');
 494                             }
 495                             sb.appendCodePoint('\\');
 496                             sb.appendCodePoint(code);
 497                         }
 498                         break;
 499                     case '\\':
 500                         // We need to escape already escaped symbols as well
 501                         if ((i + 1) < codeLen) {
 502                             int nextCode = in.codePointAt(i + 1);
 503                             if (nextCode == '"') {
 504                                 // \" -> \\\"
 505                                 sb.appendCodePoint('\\');
 506                                 sb.appendCodePoint('\\');
 507                                 sb.appendCodePoint('\\');
 508                                 sb.appendCodePoint(nextCode);
 509                             } else {
 510                                 sb.appendCodePoint('\\');
 511                                 sb.appendCodePoint(code);
 512                             }
 513                         } else {
 514                             if (isWindows()) {
 515                                 sb.appendCodePoint('\\');
 516                             }
 517                             sb.appendCodePoint(code);
 518                         }
 519                         break;
 520                     default:
 521                         sb.appendCodePoint(code);
 522                         break;
 523                 }
 524             }
 525             return sb.toString();
 526         }
 527 
 528         return in;
 529     }
 530 
 531 }


 471             int codeLen = in.codePointCount(0, in.length());
 472             for (int i = 0; i < codeLen; i++) {
 473                 int code = in.codePointAt(i);
 474                 // Note: No need to escape '\' on Linux or OS X
 475                 // jpackage expects us to pass arguments and properties with
 476                 // quotes and spaces as a map
 477                 // with quotes being escaped with additional \ for
 478                 // internal quotes.
 479                 // So if we want two properties below:
 480                 // -Djnlp.Prop1=Some "Value" 1
 481                 // -Djnlp.Prop2=Some Value 2
 482                 // jpackage will need:
 483                 // "-Djnlp.Prop1=\"Some \\"Value\\" 1\" -Djnlp.Prop2=\"Some Value 2\""
 484                 // but since we using ProcessBuilder to run jpackage we will need to escape
 485                 // our escape symbols as well, so we will need to pass string below to ProcessBuilder:
 486                 // "-Djnlp.Prop1=\\\"Some \\\\\\\"Value\\\\\\\" 1\\\" -Djnlp.Prop2=\\\"Some Value 2\\\""
 487                 switch (code) {
 488                     case '"':
 489                         // " -> \" -> \\\"
 490                         if (i == 0 || in.codePointAt(i - 1) != '\\') {




 491                             sb.appendCodePoint('\\');
 492                             sb.appendCodePoint(code);
 493                         }
 494                         break;
 495                     case '\\':
 496                         // We need to escape already escaped symbols as well
 497                         if ((i + 1) < codeLen) {
 498                             int nextCode = in.codePointAt(i + 1);
 499                             if (nextCode == '"') {
 500                                 // \" -> \\\"
 501                                 sb.appendCodePoint('\\');
 502                                 sb.appendCodePoint('\\');
 503                                 sb.appendCodePoint('\\');
 504                                 sb.appendCodePoint(nextCode);
 505                             } else {
 506                                 sb.appendCodePoint('\\');
 507                                 sb.appendCodePoint(code);
 508                             }
 509                         } else {



 510                             sb.appendCodePoint(code);
 511                         }
 512                         break;
 513                     default:
 514                         sb.appendCodePoint(code);
 515                         break;
 516                 }
 517             }
 518             return sb.toString();
 519         }
 520 
 521         return in;
 522     }
 523 
 524 }
< prev index next >