mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 10:49:34 +02:00
Merge remote-tracking branch
'origin/GP-1788_ghidra1_ComponentChangeTimeUpdate--SQUASHED' (Closes #3966)
This commit is contained in:
commit
27afe73487
2 changed files with 38 additions and 42 deletions
|
@ -208,15 +208,9 @@ class DataTypeComponentDB implements InternalDataTypeComponent {
|
|||
|
||||
@Override
|
||||
public void setComment(String comment) {
|
||||
try {
|
||||
if (record != null) {
|
||||
record.setString(ComponentDBAdapter.COMPONENT_COMMENT_COL, comment);
|
||||
adapter.updateRecord(record);
|
||||
dataMgr.dataTypeChanged(getParent(), false);
|
||||
}
|
||||
}
|
||||
catch (IOException e) {
|
||||
dataMgr.dbError(e);
|
||||
if (record != null) {
|
||||
record.setString(ComponentDBAdapter.COMPONENT_COMMENT_COL, comment);
|
||||
updateRecord(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -233,26 +227,19 @@ class DataTypeComponentDB implements InternalDataTypeComponent {
|
|||
|
||||
@Override
|
||||
public void setFieldName(String name) throws DuplicateNameException {
|
||||
try {
|
||||
if (record != null) {
|
||||
if (name != null) {
|
||||
name = name.trim();
|
||||
if (name.length() == 0 || name.equals(getDefaultFieldName())) {
|
||||
name = null;
|
||||
}
|
||||
else {
|
||||
checkDuplicateName(name);
|
||||
}
|
||||
if (record != null) {
|
||||
if (name != null) {
|
||||
name = name.trim();
|
||||
if (name.length() == 0 || name.equals(getDefaultFieldName())) {
|
||||
name = null;
|
||||
}
|
||||
else {
|
||||
checkDuplicateName(name);
|
||||
}
|
||||
record.setString(ComponentDBAdapter.COMPONENT_FIELD_NAME_COL, name);
|
||||
adapter.updateRecord(record);
|
||||
dataMgr.dataTypeChanged(getParent(), false);
|
||||
}
|
||||
record.setString(ComponentDBAdapter.COMPONENT_FIELD_NAME_COL, name);
|
||||
updateRecord(true);
|
||||
}
|
||||
catch (IOException e) {
|
||||
dataMgr.dbError(e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void checkDuplicateName(String name) throws DuplicateNameException {
|
||||
|
@ -351,7 +338,7 @@ class DataTypeComponentDB implements InternalDataTypeComponent {
|
|||
record.setIntValue(ComponentDBAdapter.COMPONENT_ORDINAL_COL, ordinal);
|
||||
record.setIntValue(ComponentDBAdapter.COMPONENT_OFFSET_COL, offset);
|
||||
record.setIntValue(ComponentDBAdapter.COMPONENT_SIZE_COL, length);
|
||||
updateRecord();
|
||||
updateRecord(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -361,7 +348,7 @@ class DataTypeComponentDB implements InternalDataTypeComponent {
|
|||
record.setIntValue(ComponentDBAdapter.COMPONENT_OFFSET_COL, offset);
|
||||
}
|
||||
if (updateRecord) {
|
||||
updateRecord();
|
||||
updateRecord(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -371,7 +358,7 @@ class DataTypeComponentDB implements InternalDataTypeComponent {
|
|||
record.setIntValue(ComponentDBAdapter.COMPONENT_ORDINAL_COL, ordinal);
|
||||
}
|
||||
if (updateRecord) {
|
||||
updateRecord();
|
||||
updateRecord(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -385,14 +372,23 @@ class DataTypeComponentDB implements InternalDataTypeComponent {
|
|||
record.setIntValue(ComponentDBAdapter.COMPONENT_SIZE_COL, length);
|
||||
}
|
||||
if (updateRecord) {
|
||||
updateRecord();
|
||||
updateRecord(false);
|
||||
}
|
||||
}
|
||||
|
||||
void updateRecord() {
|
||||
/**
|
||||
* Update component record and option update composite last modified time.
|
||||
* @param setLastChangeTime if true update composite last modified time and
|
||||
* invoke dataTypeChanged for composite, else update component record only.
|
||||
*/
|
||||
void updateRecord(boolean setLastChangeTime) {
|
||||
if (record != null) {
|
||||
try {
|
||||
adapter.updateRecord(record);
|
||||
if (setLastChangeTime) {
|
||||
long timeNow = System.currentTimeMillis();
|
||||
parent.setLastChangeTime(timeNow);
|
||||
}
|
||||
}
|
||||
catch (IOException e) {
|
||||
dataMgr.dbError(e);
|
||||
|
@ -410,7 +406,7 @@ class DataTypeComponentDB implements InternalDataTypeComponent {
|
|||
if (record != null) {
|
||||
record.setLongValue(ComponentDBAdapter.COMPONENT_DT_ID_COL,
|
||||
dataMgr.getResolvedID(newDt));
|
||||
updateRecord();
|
||||
updateRecord(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1740,14 +1740,13 @@ class StructureDB extends CompositeDB implements StructureInternal {
|
|||
}
|
||||
if (length < dtcLen) {
|
||||
dtc.setLength(length, true);
|
||||
shiftOffsets(i + 1, dtcLen - length, 0);
|
||||
shiftOffsets(i + 1, dtcLen - length, 0); // updates structure record and last modified time
|
||||
changed = true;
|
||||
}
|
||||
else if (length > dtcLen) {
|
||||
int consumed = consumeBytesAfter(i, length - dtcLen);
|
||||
int consumed = consumeBytesAfter(i, length - dtcLen); // updates component record
|
||||
if (consumed > 0) {
|
||||
dtc.updateRecord();
|
||||
shiftOffsets(i + 1, -consumed, 0);
|
||||
shiftOffsets(i + 1, -consumed, 0); // updates structure record and last modified time
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
@ -1803,14 +1802,13 @@ class StructureDB extends CompositeDB implements StructureInternal {
|
|||
}
|
||||
else if (length < dtcLen) {
|
||||
dtc.setLength(length, true);
|
||||
shiftOffsets(i + 1, dtcLen - length, 0);
|
||||
shiftOffsets(i + 1, dtcLen - length, 0); // updates structure record and last modified time
|
||||
didChange = true;
|
||||
}
|
||||
else if (length > dtcLen) {
|
||||
int consumed = consumeBytesAfter(i, length - dtcLen);
|
||||
int consumed = consumeBytesAfter(i, length - dtcLen); // updates component record
|
||||
if (consumed > 0) {
|
||||
dtc.updateRecord();
|
||||
shiftOffsets(i + 1, -consumed, 0);
|
||||
shiftOffsets(i + 1, -consumed, 0); // updates structure record and last modified time
|
||||
didChange = true;
|
||||
}
|
||||
}
|
||||
|
@ -1902,7 +1900,9 @@ class StructureDB extends CompositeDB implements StructureInternal {
|
|||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Adjust length of specified component (by index) by consuming available undefined
|
||||
* bytes upto the specified number of bytes (numBytes). The associated component record will
|
||||
* be updated without adjusting structure last modified or providing notification.
|
||||
* @param definedComponentIndex the index of the defined component that is consuming the bytes.
|
||||
* @param numBytes the number of undefined bytes to consume
|
||||
* @return the number of bytes actually consumed
|
||||
|
@ -1963,7 +1963,7 @@ class StructureDB extends CompositeDB implements StructureInternal {
|
|||
protected void shiftOffset(DataTypeComponentDB dtc, int deltaOrdinal, int deltaOffset) {
|
||||
dtc.setOffset(dtc.getOffset() + deltaOffset, false);
|
||||
dtc.setOrdinal(dtc.getOrdinal() + deltaOrdinal, false);
|
||||
dtc.updateRecord();
|
||||
dtc.updateRecord(false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue