summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGlenn Smith <glenn@vector35.com>2022-05-25 20:33:02 -0400
committerGlenn Smith <glenn@vector35.com>2022-05-25 20:33:02 -0400
commit6e3f710c4ab4a5d874dc7ef6ddccb65c93b5f4f8 (patch)
tree46f933ed597b2e112ba035362a16d38ac0a3cef2
parentcd85acfec04e9204ba9caeb4f3feed27359e950d (diff)
BinaryView::DefineTypes with type ids
-rw-r--r--binaryninjaapi.h2
-rw-r--r--binaryninjacore.h2
-rw-r--r--binaryview.cpp10
3 files changed, 8 insertions, 6 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index a65bff45..22b72ee4 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -2126,7 +2126,7 @@ namespace BinaryNinja {
QualifiedName GetTypeNameById(const std::string& id);
bool IsTypeAutoDefined(const QualifiedName& name);
QualifiedName DefineType(const std::string& id, const QualifiedName& defaultName, Ref<Type> type);
- void DefineTypes(const std::vector<QualifiedNameAndType>& types, std::function<bool(size_t, size_t)> progress = {});
+ void DefineTypes(const std::vector<std::pair<std::string, QualifiedNameAndType>>& types, std::function<bool(size_t, size_t)> progress = {});
void DefineUserType(const QualifiedName& name, Ref<Type> type);
void DefineUserTypes(const std::vector<QualifiedNameAndType>& types, std::function<bool(size_t, size_t)> progress = {});
void UndefineType(const std::string& id);
diff --git a/binaryninjacore.h b/binaryninjacore.h
index 263f885e..9961f45b 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -4192,7 +4192,7 @@ extern "C"
BINARYNINJACOREAPI BNQualifiedName BNDefineAnalysisType(
BNBinaryView* view, const char* id, BNQualifiedName* defaultName, BNType* type);
BINARYNINJACOREAPI void BNDefineUserAnalysisType(BNBinaryView* view, BNQualifiedName* name, BNType* type);
- BINARYNINJACOREAPI void BNDefineAnalysisTypes(BNBinaryView* view, BNQualifiedNameAndType* types, size_t count, bool (*progress)(void*, size_t, size_t), void* progressContext);
+ BINARYNINJACOREAPI void BNDefineAnalysisTypes(BNBinaryView* view, BNQualifiedNameTypeAndId* types, size_t count, bool (*progress)(void*, size_t, size_t), void* progressContext);
BINARYNINJACOREAPI void BNDefineUserAnalysisTypes(BNBinaryView* view, BNQualifiedNameAndType* types, size_t count, bool (*progress)(void*, size_t, size_t), void* progressContext);
BINARYNINJACOREAPI void BNUndefineAnalysisType(BNBinaryView* view, const char* id);
BINARYNINJACOREAPI void BNUndefineUserAnalysisType(BNBinaryView* view, BNQualifiedName* name);
diff --git a/binaryview.cpp b/binaryview.cpp
index 35097619..70d866ce 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -3250,13 +3250,14 @@ struct ProgressCallback
};
-void BinaryView::DefineTypes(const vector<QualifiedNameAndType>& types, std::function<bool(size_t, size_t)> progress)
+void BinaryView::DefineTypes(const vector<pair<string, QualifiedNameAndType>>& types, std::function<bool(size_t, size_t)> progress)
{
- BNQualifiedNameAndType* apiTypes = new BNQualifiedNameAndType[types.size()];
+ BNQualifiedNameTypeAndId* apiTypes = new BNQualifiedNameTypeAndId[types.size()];
for (size_t i = 0; i < types.size(); i++)
{
- apiTypes[i].name = types[i].name.GetAPIObject();
- apiTypes[i].type = types[i].type->GetObject();
+ apiTypes[i].name = types[i].second.name.GetAPIObject();
+ apiTypes[i].type = types[i].second.type->GetObject();
+ apiTypes[i].id = BNAllocString(types[i].first.c_str());
}
ProgressCallback cb;
@@ -3271,6 +3272,7 @@ void BinaryView::DefineTypes(const vector<QualifiedNameAndType>& types, std::fun
for (size_t i = 0; i < types.size(); i++)
{
QualifiedName::FreeAPIObject(&apiTypes[i].name);
+ BNFreeString(apiTypes[i].id);
}
delete [] apiTypes;
}