GP-1039: Single jar mode now works when its path contains spaces

This commit is contained in:
Ryan Kurtz 2021-06-14 07:48:40 -04:00
parent cde02a91eb
commit a284316d81

View file

@ -17,6 +17,9 @@ package ghidra;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.net.URL;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.*; import java.util.*;
import generic.jar.ResourceFile; import generic.jar.ResourceFile;
@ -49,8 +52,10 @@ public class GhidraJarApplicationLayout extends GhidraApplicationLayout {
@Override @Override
protected Collection<ResourceFile> findGhidraApplicationRootDirs() { protected Collection<ResourceFile> findGhidraApplicationRootDirs() {
List<ResourceFile> dirs = new ArrayList<>(); List<ResourceFile> dirs = new ArrayList<>();
dirs.add(new ResourceFile(ApplicationLayout.class.getResource("/_Root/Ghidra/" + String appPropPath = "/_Root/Ghidra/" + ApplicationProperties.PROPERTY_FILE;
ApplicationProperties.PROPERTY_FILE).toExternalForm()).getParentFile()); URL appPropUrl = ApplicationLayout.class.getResource(appPropPath);
ResourceFile rootDir = fromUrl(appPropUrl).getParentFile();
dirs.add(rootDir);
return dirs; return dirs;
} }
@ -76,8 +81,18 @@ public class GhidraJarApplicationLayout extends GhidraApplicationLayout {
@Override @Override
protected List<ResourceFile> findExtensionInstallationDirectories() { protected List<ResourceFile> findExtensionInstallationDirectories() {
ResourceFile extensionInstallDir = new ResourceFile( URL extensionInstallUrl = ApplicationLayout.class.getResource("/_Root/Ghidra/Extensions");
ApplicationLayout.class.getResource("/_Root/Ghidra/Extensions").toExternalForm()); ResourceFile extensionInstallDir = fromUrl(extensionInstallUrl);
return Collections.singletonList(extensionInstallDir); return Collections.singletonList(extensionInstallDir);
} }
/**
* Gets a {@link ResourceFile} from a {@link URL}
*
* @param url The {@link URL}
* @return A {@link ResourceFile} from the given {@link URL}
*/
private ResourceFile fromUrl(URL url) {
return new ResourceFile(URLDecoder.decode(url.toExternalForm(), StandardCharsets.UTF_8));
}
} }