Merge branch 'GP-7120_ryanmkurtz_monitor'

This commit is contained in:
Ryan Kurtz
2026-08-06 12:54:20 -04:00
4 changed files with 31 additions and 10 deletions

View File

@@ -281,7 +281,7 @@ public abstract class AbstractProgramLoader implements Loader {
int id = prog.startTransaction("Set program properties");
boolean success = false;
try {
setProgramProperties(prog, settings.provider(), getName());
setProgramProperties(prog, settings.provider(), getName(), settings.monitor());
try {
if (shouldSetImageBase(prog, imageBase)) {
prog.setImageBase(imageBase, true);
@@ -327,17 +327,25 @@ public abstract class AbstractProgramLoader implements Loader {
* @param prog {@link Program} (with active transaction)
* @param provider {@link ByteProvider} that the program was created from
* @param executableFormatName executable format string
* @param monitor The {@link TaskMonitor}
* @throws IOException if error reading from ByteProvider
*/
public static void setProgramProperties(Program prog, ByteProvider provider,
String executableFormatName) throws IOException {
String executableFormatName, TaskMonitor monitor) throws IOException {
prog.setExecutablePath(provider.getAbsolutePath());
if (executableFormatName != null) {
prog.setExecutableFormat(executableFormatName);
}
FSRL fsrl = provider.getFSRL();
String md5 =
(fsrl != null && fsrl.getMD5() != null) ? fsrl.getMD5() : computeBinaryMD5(provider);
String md5;
monitor.setIndeterminate(true);
if (fsrl != null && fsrl.getMD5() != null) {
md5 = fsrl.getMD5();
}
else {
monitor.setMessage("Computing MD5...");
md5 = computeBinaryMD5(provider);
}
if (fsrl != null) {
if (fsrl.getMD5() == null) {
fsrl = fsrl.withMD5(md5);
@@ -345,8 +353,12 @@ public abstract class AbstractProgramLoader implements Loader {
FSRL.writeToProgramInfo(prog, fsrl);
}
prog.setExecutableMD5(md5);
monitor.setMessage("Computing SHA256...");
String sha256 = computeBinarySHA256(provider);
prog.setExecutableSHA256(sha256);
monitor.setIndeterminate(false);
}
/**

View File

@@ -50,7 +50,7 @@ public class LoaderService {
for (Loader loader : getAllLoaders()) {
if (loaderFilter.test(loader)) {
if (!loader.isFallback()) {
tryLoadSpecs(loader, provider, loaderMap);
tryLoadSpecs(loader, provider, loaderMap, monitor);
}
else {
fallback.add(loader);
@@ -64,7 +64,7 @@ public class LoaderService {
.map(Loader::getName)
.anyMatch(Predicate.not(BinaryLoader.BINARY_NAME::equals));
if (!matches) {
fallback.forEach(loader -> tryLoadSpecs(loader, provider, loaderMap));
fallback.forEach(loader -> tryLoadSpecs(loader, provider, loaderMap, monitor));
}
return loaderMap;
@@ -90,9 +90,13 @@ public class LoaderService {
* @param loader The {@link Loader} to query
* @param provider The {@link ByteProvider} to load from
* @param loaderMap The {@link LoaderMap} to populate with discovered {@link LoadSpec}s
* @param monitor The {@link TaskMonitor}
*/
private static void tryLoadSpecs(Loader loader, ByteProvider provider, LoaderMap loaderMap) {
private static void tryLoadSpecs(Loader loader, ByteProvider provider, LoaderMap loaderMap,
TaskMonitor monitor) {
try {
monitor.setMessage("Trying loader: " + loader.getName());
monitor.setIndeterminate(true);
Collection<LoadSpec> loadSpecs = loader.findSupportedLoadSpecs(provider);
if (!CollectionUtils.isBlank(loadSpecs)) {
loaderMap.put(loader, loadSpecs);
@@ -105,6 +109,9 @@ public class LoaderService {
Msg.error(LoaderService.class, "Unexpected Loader exception from " + loader.getName(),
e);
}
finally {
monitor.setIndeterminate(false);
}
}
/**

View File

@@ -191,7 +191,7 @@ public class MachoPrelinkFileSystem extends GFileSystemBase implements GFileSyst
new MessageLog(), monitor);
AbstractProgramLoader.setProgramProperties(program, providerWrapper,
MachoLoader.MACH_O_NAME);
MachoLoader.MACH_O_NAME, monitor);
program.setExecutablePath(file.getPath()); // override the value set by AbstractProgramLoader.setProgramProperties
if (file.equals(systemKextFile)) {

View File

@@ -4,9 +4,9 @@
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -172,6 +172,8 @@ class FileBytesAdapterV0 extends FileBytesAdapter {
monitor.initialize(size);
}
monitor.setMessage("Creating file bytes...");
int maxBufSize = getMaxBufferSize();
int bufCount = (int) (size / maxBufSize);
int sizeLastBuf = (int) (size % maxBufSize);