From b3a31b101cf7283d753c71e211c78f5f0c1ee54c Mon Sep 17 00:00:00 2001 From: Peter LaFosse Date: Wed, 28 Jun 2017 00:29:00 -0400 Subject: Remove need for explicitly initializing settings file --- binaryninjaapi.h | 20 ------- binaryninjacore.h | 3 +- python/startup.py | 1 - setting.cpp | 162 ------------------------------------------------------ settings.cpp | 97 ++++++++++++++++++++++++++++++++ 5 files changed, 98 insertions(+), 185 deletions(-) delete mode 100644 setting.cpp create mode 100644 settings.cpp diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 10f021b4..426095b0 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -2866,7 +2866,6 @@ namespace BinaryNinja class Setting { public: - static bool ProcessMainSettingsFile(); static bool GetBool(const std::string& settingGroup, const std::string& name, bool defaultValue); static uint64_t GetInteger(const std::string& settingGroup, const std::string& name, uint64_t defaultValue=0); static std::string GetString(const std::string& settingGroup, const std::string& name, const std::string& defaultValue=""); @@ -2883,25 +2882,6 @@ namespace BinaryNinja static bool IsDouble(const std::string& settingGroup, const std::string& name); }; - class CoreSetting - { - public: - static bool GetBool(const std::string& name, bool defaultValue); - static uint64_t GetInteger(const std::string& name, uint64_t defaultValue=0); - static std::string GetString(const std::string& name, const std::string& defaultValue=""); - static std::vector GetIntegerList(const std::string& name, const std::vector& defaultValue={}); - static std::vector GetStringList(const std::string& name, const std::vector& defaultValue={}); - static double GetDouble(const std::string& name, double defaultValue=0.0); - - static bool IsPresent(const std::string& name); - static bool IsBool(const std::string& name); - static bool IsInteger(const std::string& name); - static bool IsString(const std::string& name); - static bool IsIntegerList(const std::string& name); - static bool IsStringList(const std::string& name); - static bool IsDouble(const std::string& name); - }; - typedef BNMetadataType MetadataType; class Metadata: public CoreRefCountObject diff --git a/binaryninjacore.h b/binaryninjacore.h index 58b0198a..25aa150d 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -1493,6 +1493,7 @@ extern "C" BINARYNINJACOREAPI char* BNAllocString(const char* contents); BINARYNINJACOREAPI void BNFreeString(char* str); + BINARYNINJACOREAPI char** BNAllocStringList(const char** contents, size_t size); BINARYNINJACOREAPI void BNFreeStringList(char** strs, size_t count); BINARYNINJACOREAPI void BNShutdown(void); @@ -2883,7 +2884,6 @@ extern "C" BINARYNINJACOREAPI bool BNIsPathRegularFile(const char* path); // Settings APIs - BINARYNINJACOREAPI bool BNProcessMainSettingsFile(); BINARYNINJACOREAPI bool BNSettingGetBool(const char* settingGroup, const char* name, bool defaultValue); BINARYNINJACOREAPI uint64_t BNSettingGetInteger(const char* settingGroup, const char* name, uint64_t defaultValue); BINARYNINJACOREAPI char* BNSettingGetString(const char* settingGroup, const char* name, const char* defaultValue); @@ -2893,7 +2893,6 @@ extern "C" BINARYNINJACOREAPI const char** BNSettingGetStringList(const char* settingGroup, const char* name, const char** defaultValue, size_t* inoutSize); BINARYNINJACOREAPI double BNSettingGetDouble(const char* settingGroup, const char* name, double defaultValue); - BINARYNINJACOREAPI void BNFreeSettingStringList(char** stringList, size_t size); BINARYNINJACOREAPI void BNFreeSettingIntegerList(uint64_t* integerList); //Check the type of a core setting BINARYNINJACOREAPI bool BNSettingIsBool(const char* name, const char* settingGroup); diff --git a/python/startup.py b/python/startup.py index d37b2f9b..0abc47cb 100644 --- a/python/startup.py +++ b/python/startup.py @@ -28,7 +28,6 @@ def _init_plugins(): global _plugin_init if not _plugin_init: _plugin_init = True - core.BNProcessMainSettingsFile() core.BNInitCorePlugins() core.BNInitUserPlugins() core.BNInitRepoPlugins() diff --git a/setting.cpp b/setting.cpp deleted file mode 100644 index b1efdbae..00000000 --- a/setting.cpp +++ /dev/null @@ -1,162 +0,0 @@ -#include "binaryninjaapi.h" - -using namespace BinaryNinja; -using namespace std; - - -bool Setting::ProcessMainSettingsFile() -{ - return BNProcessMainSettingsFile(); -} - -bool Setting::GetBool(const std::string& pluginName, const std::string& name, bool defaultValue) -{ - return BNSettingGetBool(pluginName.c_str(), name.c_str(), defaultValue); -} - -uint64_t Setting::GetInteger(const std::string& pluginName, const std::string& name, uint64_t defaultValue) -{ - return BNSettingGetInteger(pluginName.c_str(), name.c_str(), defaultValue); -} - -std::string Setting::GetString(const std::string& pluginName, const std::string& name, const std::string& defaultValue) -{ - return BNSettingGetString(pluginName.c_str(), name.c_str(), defaultValue.c_str()); -} - -double Setting::GetDouble(const std::string& pluginName, const std::string& name, double defaultValue) -{ - return BNSettingGetDouble(pluginName.c_str(), name.c_str(), defaultValue); -} - -std::vector Setting::GetIntegerList(const std::string& pluginName, const std::string& name, const std::vector& defaultValue) -{ - uint64_t* buffer = new uint64_t[defaultValue.size()]; - memcpy(&buffer[0], &defaultValue[0], sizeof(uint64_t) * defaultValue.size()); - size_t size = defaultValue.size(); - uint64_t* outBuffer = BNSettingGetIntegerList(pluginName.c_str(), name.c_str(), buffer, &size); - if (buffer == outBuffer) - return defaultValue; - - vector out(buffer, buffer + size); - delete[] buffer; - return out; -} - -std::vector Setting::GetStringList(const std::string& pluginName, const std::string& name, const std::vector& defaultValue) -{ - char** buffer = new char*[defaultValue.size()]; - for (size_t i = 0; i < defaultValue.size(); i++) - buffer[i] = BNAllocString(defaultValue[i].c_str()); - size_t size = defaultValue.size(); - const char** outBuffer = BNSettingGetStringList(pluginName.c_str(), name.c_str(), (const char**)buffer, &size); - if (buffer == outBuffer) - return defaultValue; - - vector out; - for (size_t i = 0; i < size; i++) - out.push_back(string(outBuffer[i])); - for (size_t i = 0; i < defaultValue.size(); i++) - BNFreeString(buffer[i]); - delete[] buffer; - return out; -} - - -bool Setting::IsPresent(const std::string& pluginName, const std::string& name) -{ - return BNSettingIsPresent(pluginName.c_str(), name.c_str()); -} - -bool Setting::IsBool(const std::string& pluginName, const std::string& name) -{ - return BNSettingIsBool(pluginName.c_str(), name.c_str()); -} - -bool Setting::IsInteger(const std::string& pluginName, const std::string& name) -{ - return BNSettingIsInteger(pluginName.c_str(), name.c_str()); -} - -bool Setting::IsString(const std::string& pluginName, const std::string& name) -{ - return BNSettingIsString(pluginName.c_str(), name.c_str()); -} - -bool Setting::IsIntegerList(const std::string& pluginName, const std::string& name) -{ - return BNSettingIsIntegerList(pluginName.c_str(), name.c_str()); -} - -bool Setting::IsStringList(const std::string& pluginName, const std::string& name) -{ - return BNSettingIsStringList(pluginName.c_str(), name.c_str()); -} - -bool Setting::IsDouble(const std::string& pluginName, const std::string& name) -{ - return BNSettingIsDouble(pluginName.c_str(), name.c_str()); -} - - - -bool CoreSetting::GetBool(const std::string& name, bool defaultValue) -{ - return BNSettingGetBool("core", name.c_str(), defaultValue); -} -uint64_t CoreSetting::GetInteger(const std::string& name, uint64_t defaultValue) -{ - return BNSettingGetInteger("core", name.c_str(), defaultValue); -} -std::string CoreSetting::GetString(const std::string& name, const std::string& defaultValue) -{ - return Setting::GetString("core", name.c_str(), defaultValue); -} -double CoreSetting::GetDouble(const std::string& name, double defaultValue) -{ - return BNSettingGetDouble("core", name.c_str(), defaultValue); -} -std::vector CoreSetting::GetIntegerList(const std::string& name, const std::vector& defaultValue) -{ - return Setting::GetIntegerList("core", name.c_str(), defaultValue); -} -std::vector CoreSetting::GetStringList(const std::string& name, const std::vector& defaultValue) -{ - return Setting::GetStringList("core", name.c_str(), defaultValue); -} - -bool CoreSetting::IsPresent(const std::string& name) -{ - return BNSettingIsPresent("core", name.c_str()); -} - -bool CoreSetting::IsBool(const std::string& name) -{ - return BNSettingIsBool("core", name.c_str()); -} - -bool CoreSetting::IsInteger(const std::string& name) -{ - return BNSettingIsInteger("core", name.c_str()); -} - -bool CoreSetting::IsString(const std::string& name) -{ - return BNSettingIsString("core", name.c_str()); -} - -bool CoreSetting::IsIntegerList(const std::string& name) -{ - return BNSettingIsIntegerList("core", name.c_str()); -} - -bool CoreSetting::IsStringList(const std::string& name) -{ - return BNSettingIsStringList("core", name.c_str()); -} - -bool CoreSetting::IsDouble(const std::string& name) -{ - return BNSettingIsDouble("core", name.c_str()); -} - diff --git a/settings.cpp b/settings.cpp new file mode 100644 index 00000000..97c2a232 --- /dev/null +++ b/settings.cpp @@ -0,0 +1,97 @@ +#include "binaryninjaapi.h" + +using namespace BinaryNinja; +using namespace std; + + +bool Setting::GetBool(const std::string& pluginName, const std::string& name, bool defaultValue) +{ + return BNSettingGetBool(pluginName.c_str(), name.c_str(), defaultValue); +} + +uint64_t Setting::GetInteger(const std::string& pluginName, const std::string& name, uint64_t defaultValue) +{ + return BNSettingGetInteger(pluginName.c_str(), name.c_str(), defaultValue); +} + +std::string Setting::GetString(const std::string& pluginName, const std::string& name, const std::string& defaultValue) +{ + return BNSettingGetString(pluginName.c_str(), name.c_str(), defaultValue.c_str()); +} + +double Setting::GetDouble(const std::string& pluginName, const std::string& name, double defaultValue) +{ + return BNSettingGetDouble(pluginName.c_str(), name.c_str(), defaultValue); +} + +std::vector Setting::GetIntegerList(const std::string& pluginName, + const std::string& name, + const std::vector& defaultValue) +{ + uint64_t* buffer = new uint64_t[defaultValue.size()]; + memcpy(&buffer[0], &defaultValue[0], sizeof(uint64_t) * defaultValue.size()); + size_t size = defaultValue.size(); + uint64_t* outBuffer = BNSettingGetIntegerList(pluginName.c_str(), name.c_str(), buffer, &size); + delete[] buffer; + + vector out(outBuffer, outBuffer + size); + BNFreeSettingIntegerList(buffer); + return out; +} + +std::vector Setting::GetStringList(const std::string& pluginName, + const std::string& name, + const std::vector& defaultValue) +{ + char** buffer = new char*[defaultValue.size()]; + for (size_t i = 0; i < defaultValue.size(); i++) + buffer[i] = BNAllocString(defaultValue[i].c_str()); + size_t size = defaultValue.size(); + char** outBuffer = (char**)BNSettingGetStringList(pluginName.c_str(), name.c_str(), (const char**)buffer, &size); + + vector result; + for (size_t i = 0; i < size; i++) + result.push_back(string(outBuffer[i])); + + for (size_t i = 0; i < defaultValue.size(); i++) + BNFreeString(buffer[i]); + delete[] buffer; + BNFreeStringList(outBuffer, size); + return result; +} + + +bool Setting::IsPresent(const std::string& pluginName, const std::string& name) +{ + return BNSettingIsPresent(pluginName.c_str(), name.c_str()); +} + +bool Setting::IsBool(const std::string& pluginName, const std::string& name) +{ + return BNSettingIsBool(pluginName.c_str(), name.c_str()); +} + +bool Setting::IsInteger(const std::string& pluginName, const std::string& name) +{ + return BNSettingIsInteger(pluginName.c_str(), name.c_str()); +} + +bool Setting::IsString(const std::string& pluginName, const std::string& name) +{ + return BNSettingIsString(pluginName.c_str(), name.c_str()); +} + +bool Setting::IsIntegerList(const std::string& pluginName, const std::string& name) +{ + return BNSettingIsIntegerList(pluginName.c_str(), name.c_str()); +} + +bool Setting::IsStringList(const std::string& pluginName, const std::string& name) +{ + return BNSettingIsStringList(pluginName.c_str(), name.c_str()); +} + +bool Setting::IsDouble(const std::string& pluginName, const std::string& name) +{ + return BNSettingIsDouble(pluginName.c_str(), name.c_str()); +} -- cgit v1.3.1