From 5823930694686322430747031324833666177725 Mon Sep 17 00:00:00 2001 From: Glenn Smith Date: Wed, 16 Aug 2023 17:34:39 -0400 Subject: Add DefineUserTypes to Rust/Python (+ fix return type) --- binaryview.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'binaryview.cpp') 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) } -void BinaryView::DefineTypes(const vector>& types, std::function progress) +std::unordered_map BinaryView::DefineTypes(const vector>& types, std::function 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>& 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 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>& t BNFreeString(apiTypes[i].id); } delete [] apiTypes; + + return result; } -- cgit v1.3.1