From e0fbcc712f8ca31914d2f1e04b7f8b16eff44d66 Mon Sep 17 00:00:00 2001 From: Peter LaFosse Date: Fri, 12 Jun 2020 16:27:36 -0400 Subject: Add BinaryView.parse_types_from_string to the python API and update how the underlying BNParseTypesString works --- binaryview.cpp | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) (limited to 'binaryview.cpp') diff --git a/binaryview.cpp b/binaryview.cpp index 0dfd0a8d..287dc94b 100644 --- a/binaryview.cpp +++ b/binaryview.cpp @@ -2466,26 +2466,38 @@ bool BinaryView::ParseTypeString(const string& text, QualifiedNameAndType& resul } -bool BinaryView::ParseTypeString(const string& text, std::map>& result, string& errors) +bool BinaryView::ParseTypeString(const string& source, map>& types, + map>& variables, map>& functions, string& errors) { - BNQualifiedNameAndType* nt; + BNTypeParserResult result; char* errorStr; - size_t count; - if (!BNParseTypesString(m_object, text.c_str(), &nt, &count, &errorStr)) - { - errors = errorStr; - BNFreeString(errorStr); + types.clear(); + variables.clear(); + functions.clear(); + + bool ok = BNParseTypesString(m_object, source.c_str(), &result, &errorStr); + errors = errorStr; + BNFreeString(errorStr); + if (!ok) return false; - } - for(size_t i = 0; i < count; i++) + for (size_t i = 0; i < result.typeCount; i++) { - result[QualifiedName::FromAPIObject(&nt[i].name)] = new Type(BNNewTypeReference(nt[i].type)); + QualifiedName name = QualifiedName::FromAPIObject(&result.types[i].name); + types[name] = new Type(BNNewTypeReference(result.types[i].type)); } - BNFreeQualifiedNameAndTypeArray(nt, count); - - errors = ""; + for (size_t i = 0; i < result.variableCount; i++) + { + QualifiedName name = QualifiedName::FromAPIObject(&result.variables[i].name); + variables[name] = new Type(BNNewTypeReference(result.variables[i].type)); + } + for (size_t i = 0; i < result.functionCount; i++) + { + QualifiedName name = QualifiedName::FromAPIObject(&result.functions[i].name); + functions[name] = new Type(BNNewTypeReference(result.functions[i].type)); + } + BNFreeTypeParserResult(&result); return true; } -- cgit v1.3.1