summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Potchik <brian@vector35.com>2019-08-11 23:04:17 -0400
committerBrian Potchik <brian@vector35.com>2019-08-11 23:04:17 -0400
commit02023064fc5e112985035a9c0b3dc0957cdfda02 (patch)
tree9fb0048fd2ecac09311cb4dc153f7a43be03f669
parent472cbb7a1cb3b51846abd3bda810c5dcc644acd7 (diff)
Eliminate mandatory ephemeral view creation during open with options.
-rw-r--r--binaryninjaapi.h7
-rw-r--r--binaryninjacore.h2
-rw-r--r--binaryview.cpp4
-rw-r--r--python/settings.py8
-rw-r--r--settings.cpp12
5 files changed, 29 insertions, 4 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index b67ea0a2..20db0aef 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -1698,8 +1698,8 @@ namespace BinaryNinja
std::vector<uint8_t> GetRawMetadata(const std::string& key);
uint64_t GetUIntMetadata(const std::string& key);
- Ref<Settings> GetLoadSettings(std::string typeName);
- void SetLoadSettings(std::string typeName, Ref<Settings> settings);
+ Ref<Settings> GetLoadSettings(const std::string& typeName);
+ void SetLoadSettings(const std::string& typeName, Ref<Settings> settings);
BNAnalysisParameters GetParametersForAnalysis();
void SetParametersForAnalysis(BNAnalysisParameters params);
@@ -4531,9 +4531,12 @@ namespace BinaryNinja
static Ref<Settings> Instance(const std::string& schemaId = "");
virtual ~Settings() {}
+ void SetResourceId(const std::string& resourceId = "");
+
bool RegisterGroup(const std::string& group, const std::string& title);
bool RegisterSetting(const std::string& key, const std::string& properties);
bool Contains(const std::string& key);
+ bool IsEmpty();
template<typename T> T QueryProperty(const std::string& key, const std::string& property);
diff --git a/binaryninjacore.h b/binaryninjacore.h
index 9e70251e..0472560d 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -3939,9 +3939,11 @@ extern "C"
BINARYNINJACOREAPI BNSettings* BNCreateSettings(const char* schemaId);
BINARYNINJACOREAPI BNSettings* BNNewSettingsReference(BNSettings* settings);
BINARYNINJACOREAPI void BNFreeSettings(BNSettings* settings);
+ BINARYNINJACOREAPI void BNSettingsSetResourceId(BNSettings* settings, const char* resourceId);
BINARYNINJACOREAPI bool BNSettingsRegisterGroup(BNSettings* settings, const char* group, const char* title);
BINARYNINJACOREAPI bool BNSettingsRegisterSetting(BNSettings* settings, const char* key, const char* properties);
BINARYNINJACOREAPI bool BNSettingsContains(BNSettings* settings, const char* key);
+ BINARYNINJACOREAPI bool BNSettingsIsEmpty(BNSettings* settings);
BINARYNINJACOREAPI const char** BNSettingsQueryPropertyStringList(BNSettings* settings, const char* key, const char* property, size_t* inoutSize);
BINARYNINJACOREAPI bool BNSettingsUpdateProperty(BNSettings* settings, const char* key, const char* property);
BINARYNINJACOREAPI bool BNSettingsUpdateBoolProperty(BNSettings* settings, const char* key, const char* property, bool value);
diff --git a/binaryview.cpp b/binaryview.cpp
index e44bca2b..853d42d3 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -2994,7 +2994,7 @@ uint64_t BinaryView::GetUIntMetadata(const string& key)
}
-Ref<Settings> BinaryView::GetLoadSettings(string typeName)
+Ref<Settings> BinaryView::GetLoadSettings(const string& typeName)
{
BNSettings* settings = BNBinaryViewGetLoadSettings(m_object, typeName.c_str());
if (!settings)
@@ -3003,7 +3003,7 @@ Ref<Settings> BinaryView::GetLoadSettings(string typeName)
}
-void BinaryView::SetLoadSettings(string typeName, Ref<Settings> settings)
+void BinaryView::SetLoadSettings(const string& typeName, Ref<Settings> settings)
{
BNBinaryViewSetLoadSettings(m_object, typeName.c_str(), settings->GetObject());
}
diff --git a/python/settings.py b/python/settings.py
index abb859a7..95501622 100644
--- a/python/settings.py
+++ b/python/settings.py
@@ -67,6 +67,11 @@ class Settings(object):
"""(read-only)"""
return self._instance_id
+ def set_resource_id(self, resource_id = None):
+ if resource_id is None:
+ resource_id = ""
+ core.BNSettingsSetResourceId(self.handle, resource_id)
+
def register_group(self, group, title):
"""
``register_group`` registers a group for use with this Settings instance. Groups provide a simple way to organize settings.
@@ -103,6 +108,9 @@ class Settings(object):
def contains(self, key):
return core.BNSettingsContains(self.handle, key)
+ def is_empty(self):
+ return core.BNSettingsIsEmpty(self.handle)
+
def query_property_string_list(self, key, property_name):
length = ctypes.c_ulonglong()
result = core.BNSettingsQueryPropertyStringList(self.handle, key, property_name, ctypes.byref(length))
diff --git a/settings.cpp b/settings.cpp
index 3ea43a7e..fdc74335 100644
--- a/settings.cpp
+++ b/settings.cpp
@@ -28,6 +28,12 @@ Ref<Settings> Settings::Instance(const std::string& instanceId)
}
+void Settings::SetResourceId(const string& resourceId)
+{
+ return BNSettingsSetResourceId(m_object, resourceId.c_str());
+}
+
+
bool Settings::RegisterGroup(const string& group, const string& title)
{
return BNSettingsRegisterGroup(m_object, group.c_str(), title.c_str());
@@ -46,6 +52,12 @@ bool Settings::Contains(const string& key)
}
+bool Settings::IsEmpty()
+{
+ return BNSettingsIsEmpty(m_object);
+}
+
+
template<> vector<string> Settings::QueryProperty<vector<string>>(const string& key, const string& property)
{
size_t size = 0;