summaryrefslogtreecommitdiff
path: root/binaryviewtype.cpp
diff options
context:
space:
mode:
authorBrian Potchik <brian@vector35.com>2020-02-16 15:38:36 -0500
committerBrian Potchik <brian@vector35.com>2020-02-16 15:38:36 -0500
commit5dde4481ed477dd67f3ef35364153f8243dbeb99 (patch)
tree33732e8813ac346837e6a1a43f3ab74886614bd5 /binaryviewtype.cpp
parent4842373127779da2471960cfb25a5d549c30f099 (diff)
Add parse-only BinaryView creation to the API.
Diffstat (limited to 'binaryviewtype.cpp')
-rw-r--r--binaryviewtype.cpp21
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());