diff options
| author | Brian Potchik <brian@vector35.com> | 2020-02-16 15:38:36 -0500 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2020-02-16 15:38:36 -0500 |
| commit | 5dde4481ed477dd67f3ef35364153f8243dbeb99 (patch) | |
| tree | 33732e8813ac346837e6a1a43f3ab74886614bd5 /binaryviewtype.cpp | |
| parent | 4842373127779da2471960cfb25a5d549c30f099 (diff) | |
Add parse-only BinaryView creation to the API.
Diffstat (limited to 'binaryviewtype.cpp')
| -rw-r--r-- | binaryviewtype.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/binaryviewtype.cpp b/binaryviewtype.cpp index 4c7504d6..f8f58da0 100644 --- a/binaryviewtype.cpp +++ b/binaryviewtype.cpp @@ -35,6 +35,17 @@ BNBinaryView* BinaryViewType::CreateCallback(void* ctxt, BNBinaryView* data) } +BNBinaryView* BinaryViewType::ParseCallback(void* ctxt, BNBinaryView* data) +{ + BinaryViewType* type = (BinaryViewType*)ctxt; + Ref<BinaryView> view = new BinaryView(BNNewViewReference(data)); + Ref<BinaryView> result = type->Parse(view); + if (!result) + return nullptr; + return BNNewViewReference(result->GetObject()); +} + + bool BinaryViewType::IsValidCallback(void* ctxt, BNBinaryView* data) { BinaryViewType* type = (BinaryViewType*)ctxt; @@ -72,6 +83,7 @@ void BinaryViewType::Register(BinaryViewType* type) BNCustomBinaryViewType callbacks; callbacks.context = type; callbacks.create = CreateCallback; + callbacks.parse = ParseCallback; callbacks.isValidForData = IsValidCallback; callbacks.getLoadSettingsForData = GetSettingsCallback; @@ -217,6 +229,15 @@ BinaryView* CoreBinaryViewType::Create(BinaryView* data) } +BinaryView* CoreBinaryViewType::Parse(BinaryView* data) +{ + BNBinaryView* view = BNParseBinaryViewOfType(m_object, data->GetObject()); + if (!view) + return nullptr; + return new BinaryView(view); +} + + bool CoreBinaryViewType::IsTypeValidForData(BinaryView* data) { return BNIsBinaryViewTypeValidForData(m_object, data->GetObject()); |
