diff options
| author | Brian Potchik <brian@vector35.com> | 2019-08-11 23:04:17 -0400 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2019-08-11 23:04:17 -0400 |
| commit | 02023064fc5e112985035a9c0b3dc0957cdfda02 (patch) | |
| tree | 9fb0048fd2ecac09311cb4dc153f7a43be03f669 | |
| parent | 472cbb7a1cb3b51846abd3bda810c5dcc644acd7 (diff) | |
Eliminate mandatory ephemeral view creation during open with options.
| -rw-r--r-- | binaryninjaapi.h | 7 | ||||
| -rw-r--r-- | binaryninjacore.h | 2 | ||||
| -rw-r--r-- | binaryview.cpp | 4 | ||||
| -rw-r--r-- | python/settings.py | 8 | ||||
| -rw-r--r-- | settings.cpp | 12 |
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; |
