8264403: [macos]: App names containing '.' characters results in an error message when launching

Reviewed-by: asemenyuk
This commit is contained in:
Andy Herrick 2021-04-01 20:39:38 +00:00
parent b953386de1
commit 04f24fe9ad
5 changed files with 80 additions and 3 deletions

View File

@ -93,9 +93,8 @@ tstring findJvmLib(const CfgFile& cfgFile, const tstring& defaultRuntimePath,
Jvm* AppLauncher::createJvmLauncher() const {
const tstring cfgFilePath = FileUtils::mkpath()
<< appDirPath
<< FileUtils::basename(FileUtils::replaceSuffix(
launcherPath, _T(".cfg")));
<< appDirPath << FileUtils::stripExeSuffix(
FileUtils::basename(launcherPath)) + _T(".cfg");
LOG_TRACE(tstrings::any() << "Launcher config file path: \""
<< cfgFilePath << "\"");

View File

@ -72,6 +72,9 @@ namespace FileUtils {
*/
tstring replaceSuffix(const tstring& path, const tstring& suffix=tstring());
// remove the executable suffix if there is one
tstring stripExeSuffix(const tstring& path);
/**
* Returns absolute path of the given path.
* If the given string is empty, returns absolute path to the current

View File

@ -62,4 +62,9 @@ tstring toAbsolutePath(const tstring& path) {
return mkpath() << toAbsolutePath("") << path;
}
tstring stripExeSuffix(const tstring& path) {
// for unix - there is no suffix to remove
return path;
}
} // namespace FileUtils

View File

@ -658,4 +658,13 @@ void FileWriter::finalize() {
cleaner.cancel();
}
tstring stripExeSuffix(const tstring& path) {
// for windows - there is a ".exe" suffix to remove
const tstring::size_type pos = path.rfind(_T(".exe"));
if (pos == tstring::npos) {
return path;
}
return path.substr(0, pos);
}
} // namespace FileUtils

View File

@ -0,0 +1,61 @@
/*
* Copyright (c) 2021, 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.
*/
package jdk.jpackage.tests;
import jdk.jpackage.test.JPackageCommand;
import jdk.jpackage.test.HelloApp;
import jdk.jpackage.test.TKit;
import jdk.jpackage.test.Annotations.Parameters;
import jdk.jpackage.test.Annotations.Test;
/*
* @test
* @summary jpackage create image with --java-options test
* @library ../../../../helpers
* @build jdk.jpackage.test.*
* @modules jdk.jpackage/jdk.jpackage.internal
* @compile DotInNameTest.java
* @run main/othervm/timeout=360 -Xmx512m jdk.jpackage.test.Main
* --jpt-run=jdk.jpackage.tests.DotInNameTest
* --jpt-before-run=jdk.jpackage.test.JPackageCommand.useToolProviderByDefault
*/
public class DotInNameTest {
@Test
public void test() {
JPackageCommand cmd = JPackageCommand.helloAppImage("Hello");
cmd.setArgumentValue("--name",
cmd.getArgumentValue("--name") + ".with.dot");
// run the jpackage command
cmd.executeAndAssertImageCreated();
// run the launcher it generated
HelloApp.executeLauncherAndVerifyOutput(cmd);
}
}