mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-03 17:59:46 +02:00
GP-3921 Improved Diff data instance settings support
This commit is contained in:
parent
d1b0828af9
commit
b4308f76f8
5 changed files with 455 additions and 270 deletions
|
@ -310,6 +310,7 @@ public abstract class ProgramBasedDataTypeManagerDB extends DataTypeManagerDB
|
|||
if (instanceSettingsAdapter == null) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
lock.acquire();
|
||||
try {
|
||||
Address dataAddr = getDataSettingsAddress(data);
|
||||
return instanceSettingsAdapter
|
||||
|
@ -318,6 +319,9 @@ public abstract class ProgramBasedDataTypeManagerDB extends DataTypeManagerDB
|
|||
catch (IOException e) {
|
||||
errHandler.dbError(e);
|
||||
}
|
||||
finally {
|
||||
lock.release();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -427,14 +431,15 @@ public abstract class ProgramBasedDataTypeManagerDB extends DataTypeManagerDB
|
|||
}
|
||||
}
|
||||
|
||||
private static Address getDataSettingsAddress(Data data) {
|
||||
Data parent = data.getParent();
|
||||
if (parent != null) {
|
||||
public static Address getDataSettingsAddress(Data data) {
|
||||
Address addr = data.getAddress();
|
||||
for (Data parent = data.getParent(); parent != null; parent = parent.getParent()) {
|
||||
DataType dataType = parent.getDataType();
|
||||
if (dataType instanceof Array) {
|
||||
return getDataSettingsAddress(parent);
|
||||
if (!(dataType instanceof Array a)) {
|
||||
break;
|
||||
}
|
||||
addr = parent.getAddress();
|
||||
}
|
||||
return data.getAddress();
|
||||
return addr;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue