summaryrefslogtreecommitdiff
path: root/binaryview.cpp
diff options
context:
space:
mode:
authorGlenn Smith <glenn@vector35.com>2023-08-16 17:34:39 -0400
committerGlenn Smith <glenn@vector35.com>2023-08-16 17:34:39 -0400
commit5823930694686322430747031324833666177725 (patch)
treea20930a37a49eee0f0ecc0d287049e2b34825b73 /binaryview.cpp
parente613b78c2fda396ffb7d54261681db88a788bd87 (diff)
Add DefineUserTypes to Rust/Python (+ fix return type)
Diffstat (limited to 'binaryview.cpp')
-rw-r--r--binaryview.cpp19
1 files changed, 17 insertions, 2 deletions
diff --git a/binaryview.cpp b/binaryview.cpp
index b1bd6f4d..6120e10f 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -3731,7 +3731,7 @@ void BinaryView::DefineUserType(const QualifiedName& name, Ref<Type> type)
}
-void BinaryView::DefineTypes(const vector<pair<string, QualifiedNameAndType>>& types, std::function<bool(size_t, size_t)> progress)
+std::unordered_map<std::string, QualifiedName> BinaryView::DefineTypes(const vector<pair<string, QualifiedNameAndType>>& types, std::function<bool(size_t, size_t)> progress)
{
BNQualifiedNameTypeAndId* apiTypes = new BNQualifiedNameTypeAndId[types.size()];
for (size_t i = 0; i < types.size(); i++)
@@ -3743,7 +3743,20 @@ void BinaryView::DefineTypes(const vector<pair<string, QualifiedNameAndType>>& t
ProgressContext cb;
cb.callback = progress;
- BNDefineAnalysisTypes(m_object, apiTypes, types.size(), ProgressCallback, &cb);
+ char** resultIds;
+ BNQualifiedName* resultNames;
+ size_t resultCount = BNDefineAnalysisTypes(m_object, apiTypes, types.size(), ProgressCallback, &cb, &resultIds, &resultNames);
+
+ unordered_map<string, QualifiedName> result;
+ for (size_t i = 0; i < resultCount; i ++)
+ {
+ string id = resultIds[i];
+ QualifiedName name = QualifiedName::FromAPIObject(&resultNames[i]);
+ result.insert({id, name});
+ }
+
+ BNFreeStringList(resultIds, resultCount);
+ BNFreeTypeNameList(resultNames, resultCount);
for (size_t i = 0; i < types.size(); i++)
{
@@ -3751,6 +3764,8 @@ void BinaryView::DefineTypes(const vector<pair<string, QualifiedNameAndType>>& t
BNFreeString(apiTypes[i].id);
}
delete [] apiTypes;
+
+ return result;
}