summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--binaryninjaapi.h2
-rw-r--r--binaryninjacore.h24
-rw-r--r--binaryview.cpp42
-rw-r--r--metadata.cpp26
-rw-r--r--settings.cpp1
5 files changed, 43 insertions, 52 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index 426095b0..13ca3446 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -1128,7 +1128,7 @@ namespace BinaryNinja
std::vector<BNAddressRange> GetAllocatedRanges();
void StoreMetadata(const std::string& key, Metadata* inValue);
- bool QueryMetadata(const std::string& key, Metadata** outValue);
+ std::unique_ptr<Metadata> QueryMetadata(const std::string& key);
std::string GetStringMetadata(const std::string& key);
std::vector<uint8_t> GetRawMetadata(const std::string& key);
uint64_t GetUIntMetadata(const std::string& key);
diff --git a/binaryninjacore.h b/binaryninjacore.h
index 25aa150d..0394517f 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -2917,17 +2917,17 @@ extern "C"
// Create Metadata of various types
BINARYNINJACOREAPI BNMetadata* BNNewMetadataReference(BNMetadata* data);
- BINARYNINJACOREAPI BNMetadata* BNCreateStructuredBooleanData(bool data);
- BINARYNINJACOREAPI BNMetadata* BNCreateStructuredStringData(const char* data);
- BINARYNINJACOREAPI BNMetadata* BNCreateStructuredUnsignedIntegerData(uint64_t data);
- BINARYNINJACOREAPI BNMetadata* BNCreateStructuredSignedIntegerData(int64_t data);
- BINARYNINJACOREAPI BNMetadata* BNCreateStructuredDoubleData(double data);
- BINARYNINJACOREAPI BNMetadata* BNCreateStructuredBooleanListData(const bool* data, size_t size);
- BINARYNINJACOREAPI BNMetadata* BNCreateStructuredStringListData(const char** data, size_t size);
- BINARYNINJACOREAPI BNMetadata* BNCreateStructuredUnsignedIntegerListData(const uint64_t* data, size_t size);
- BINARYNINJACOREAPI BNMetadata* BNCreateStructuredSignedIntegerListData(const int64_t* data, size_t size);
- BINARYNINJACOREAPI BNMetadata* BNCreateStructuredDoubleListData(const double* data, size_t size);
- BINARYNINJACOREAPI BNMetadata* BNCreateStructuredRawData(const uint8_t* data, size_t size);
+ BINARYNINJACOREAPI BNMetadata* BNCreateMetadataBooleanData(bool data);
+ BINARYNINJACOREAPI BNMetadata* BNCreateMetadataStringData(const char* data);
+ BINARYNINJACOREAPI BNMetadata* BNCreateMetadataUnsignedIntegerData(uint64_t data);
+ BINARYNINJACOREAPI BNMetadata* BNCreateMetadataSignedIntegerData(int64_t data);
+ BINARYNINJACOREAPI BNMetadata* BNCreateMetadataDoubleData(double data);
+ BINARYNINJACOREAPI BNMetadata* BNCreateMetadataBooleanListData(const bool* data, size_t size);
+ BINARYNINJACOREAPI BNMetadata* BNCreateMetadataStringListData(const char** data, size_t size);
+ BINARYNINJACOREAPI BNMetadata* BNCreateMetadataUnsignedIntegerListData(const uint64_t* data, size_t size);
+ BINARYNINJACOREAPI BNMetadata* BNCreateMetadataSignedIntegerListData(const int64_t* data, size_t size);
+ BINARYNINJACOREAPI BNMetadata* BNCreateMetadataDoubleListData(const double* data, size_t size);
+ BINARYNINJACOREAPI BNMetadata* BNCreateMetadataRawData(const uint8_t* data, size_t size);
BINARYNINJACOREAPI void BNFreeMetadata(BNMetadata* data);
BINARYNINJACOREAPI void BNFreeMetadataBooleanList(bool* data);
BINARYNINJACOREAPI void BNFreeMetadataStringList(char** data, size_t size);
@@ -2963,7 +2963,7 @@ extern "C"
// Store/Query structured data to/from a BinaryView
BINARYNINJACOREAPI void BNBinaryViewStoreMetadata(BNBinaryView* view, const char* key, BNMetadata* value);
- BINARYNINJACOREAPI bool BNBinaryViewQueryMetadata(BNBinaryView* view, const char* key, BNMetadata** value);
+ BINARYNINJACOREAPI BNMetadata* BNBinaryViewQueryMetadata(BNBinaryView* view, const char* key);
#ifdef __cplusplus
}
#endif
diff --git a/binaryview.cpp b/binaryview.cpp
index 6eb299a3..b330508d 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -20,6 +20,7 @@
#include <algorithm>
#include <iterator>
+#include <memory>
#include "binaryninjaapi.h"
using namespace BinaryNinja;
@@ -1833,48 +1834,37 @@ void BinaryView::StoreMetadata(const std::string& key, Metadata* inValue)
BNBinaryViewStoreMetadata(m_object, key.c_str(), inValue->GetObject());
}
-
-bool BinaryView::QueryMetadata(const std::string& key, Metadata** outValue)
+unique_ptr<Metadata> BinaryView::QueryMetadata(const std::string& key)
{
- BNMetadata* value = nullptr;
- bool status = BNBinaryViewQueryMetadata(m_object, key.c_str(), &value);
- if (!status)
- {
- *outValue = nullptr;
- return false;
- }
- *outValue = new Metadata(value);
- return true;
+ BNMetadata* value = BNBinaryViewQueryMetadata(m_object, key.c_str());
+ if (!value)
+ return nullptr;
+ auto a = new Metadata(value);
+ return unique_ptr<Metadata>(a);
}
string BinaryView::GetStringMetadata(const string& key)
{
- Metadata* data;
- if (!QueryMetadata(key, &data) || !data || data->IsString())
+ auto data = QueryMetadata(key);
+ if (!data || !data->IsString())
throw QueryMetadataException("Failed to find key: " + key);
- auto result = data->GetString();
- delete data;
- return result;
+ return data->GetString();
}
vector<uint8_t> BinaryView::GetRawMetadata(const string& key)
{
- Metadata* data;
- if (!QueryMetadata(key, &data) || !data || data->IsRaw())
+ auto data = QueryMetadata(key);
+ if (!data || !data->IsRaw())
throw QueryMetadataException("Failed to find key: " + key);
- auto result = data->GetRaw();
- delete data;
- return result;
+ return data->GetRaw();
}
uint64_t BinaryView::GetUIntMetadata(const string& key)
{
- Metadata* data;
- if (!QueryMetadata(key, &data) || !data || data->IsUnsignedInteger())
+ auto data = QueryMetadata(key);
+ if (!data || !data->IsUnsignedInteger())
throw QueryMetadataException("Failed to find key: " + key);
- auto result = data->GetUnsignedInteger();
- delete data;
- return result;
+ return data->GetUnsignedInteger();
}
BinaryData::BinaryData(FileMetadata* file): BinaryView(BNCreateBinaryDataView(file->GetObject()))
diff --git a/metadata.cpp b/metadata.cpp
index 2f398940..3f01f4bb 100644
--- a/metadata.cpp
+++ b/metadata.cpp
@@ -3,34 +3,34 @@
using namespace std;
using namespace BinaryNinja;
-Metadata::Metadata(BNMetadata* structuredData)
+Metadata::Metadata(BNMetadata* metadata)
{
- m_object = structuredData;
+ m_object = metadata;
}
Metadata::Metadata(bool data)
{
- m_object = BNCreateStructuredBooleanData(data);
+ m_object = BNCreateMetadataBooleanData(data);
}
Metadata::Metadata(const string& data)
{
- m_object = BNCreateStructuredStringData(data.c_str());
+ m_object = BNCreateMetadataStringData(data.c_str());
}
Metadata::Metadata(uint64_t data)
{
- m_object = BNCreateStructuredUnsignedIntegerData(data);
+ m_object = BNCreateMetadataUnsignedIntegerData(data);
}
Metadata::Metadata(int64_t data)
{
- m_object = BNCreateStructuredSignedIntegerData(data);
+ m_object = BNCreateMetadataSignedIntegerData(data);
}
Metadata::Metadata(double data)
{
- m_object = BNCreateStructuredDoubleData(data);
+ m_object = BNCreateMetadataDoubleData(data);
}
Metadata::Metadata(const vector<bool>& data)
@@ -39,7 +39,7 @@ Metadata::Metadata(const vector<bool>& data)
for (size_t i = 0; i < data.size(); i++)
input[i] = data[i];
- m_object = BNCreateStructuredBooleanListData(input, data.size());
+ m_object = BNCreateMetadataBooleanListData(input, data.size());
delete[] input;
}
@@ -49,7 +49,7 @@ Metadata::Metadata(const vector<string>& data)
for (size_t i = 0; i < data.size(); i++)
input[i] = BNAllocString(data[i].c_str());
- m_object = BNCreateStructuredStringListData((const char**)input, data.size());
+ m_object = BNCreateMetadataStringListData((const char**)input, data.size());
for (size_t i = 0; i < data.size(); i++)
BNFreeString(input[i]);
@@ -62,7 +62,7 @@ Metadata::Metadata(const vector<uint64_t>& data)
for (size_t i = 0; i < data.size(); i++)
input[i] = data[i];
- m_object = BNCreateStructuredUnsignedIntegerListData(input, data.size());
+ m_object = BNCreateMetadataUnsignedIntegerListData(input, data.size());
delete[] input;
}
@@ -72,7 +72,7 @@ Metadata::Metadata(const vector<int64_t>& data)
for (size_t i = 0; i < data.size(); i++)
input[i] = data[i];
- m_object = BNCreateStructuredSignedIntegerListData(input, data.size());
+ m_object = BNCreateMetadataSignedIntegerListData(input, data.size());
delete[] input;
}
@@ -82,7 +82,7 @@ Metadata::Metadata(const vector<double>& data)
for (size_t i = 0; i < data.size(); i++)
input[i] = data[i];
- m_object = BNCreateStructuredDoubleListData(input, data.size());
+ m_object = BNCreateMetadataDoubleListData(input, data.size());
delete[] input;
}
@@ -92,7 +92,7 @@ Metadata::Metadata(const vector<uint8_t>& data)
for (size_t i = 0; i < data.size(); i++)
input[i] = data[i];
- m_object = BNCreateStructuredRawData(input, data.size());
+ m_object = BNCreateMetadataRawData(input, data.size());
delete[] input;
}
diff --git a/settings.cpp b/settings.cpp
index 97c2a232..b7e08793 100644
--- a/settings.cpp
+++ b/settings.cpp
@@ -1,4 +1,5 @@
#include "binaryninjaapi.h"
+#include <string.h>
using namespace BinaryNinja;
using namespace std;