diff options
| author | Peter LaFosse <peter@vector35.com> | 2017-07-03 17:58:04 -0400 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2017-07-03 17:58:04 -0400 |
| commit | c154e1f9400f6a8838405f4a4fd41dbc6f2fcba3 (patch) | |
| tree | a8d6b6164fd31dc442962d263c826d27b8349a26 | |
| parent | 88ec179d9519221744240e347bc94da09bbc2157 (diff) | |
Add setting removal APIs, allow negative integers
| -rw-r--r-- | binaryninjaapi.h | 11 | ||||
| -rw-r--r-- | binaryninjacore.h | 12 | ||||
| -rw-r--r-- | python/setting.py | 33 | ||||
| -rw-r--r-- | settings.cpp | 28 |
4 files changed, 61 insertions, 23 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 3eb8b82e..f5850ad0 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -2868,9 +2868,9 @@ namespace BinaryNinja { public: 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 int64_t GetInteger(const std::string& settingGroup, const std::string& name, int64_t defaultValue=0); static std::string GetString(const std::string& settingGroup, const std::string& name, const std::string& defaultValue=""); - static std::vector<uint64_t> GetIntegerList(const std::string& settingGroup, const std::string& name, const std::vector<uint64_t>& defaultValue={}); + static std::vector<int64_t> GetIntegerList(const std::string& settingGroup, const std::string& name, const std::vector<int64_t>& defaultValue={}); static std::vector<std::string> GetStringList(const std::string& settingGroup, const std::string& name, const std::vector<std::string>& defaultValue={}); static double GetDouble(const std::string& settingGroup, const std::string& name, double defaultValue=0.0); @@ -2888,7 +2888,7 @@ namespace BinaryNinja bool autoFlush=true); static bool Set(const std::string& settingGroup, const std::string& name, - uint64_t value, + int64_t value, bool autoFlush=true); static bool Set(const std::string& settingGroup, const std::string& name, @@ -2896,7 +2896,7 @@ namespace BinaryNinja bool autoFlush=true); static bool Set(const std::string& settingGroup, const std::string& name, - const std::vector<uint64_t>& value, + const std::vector<int64_t>& value, bool autoFlush=true); static bool Set(const std::string& settingGroup, const std::string& name, @@ -2906,6 +2906,9 @@ namespace BinaryNinja const std::string& name, double value, bool autoFlush=true); + + static bool RemoveSettingGroup(const std::string& settingGroup, bool autoFlush=true); + static bool RemoveSetting(const std::string& settingGroup, const std::string& setting, bool autoFlush=true); static bool FlushSettings(); }; diff --git a/binaryninjacore.h b/binaryninjacore.h index 0394517f..eb9927ab 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -2885,15 +2885,15 @@ extern "C" // Settings APIs 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 int64_t BNSettingGetInteger(const char* settingGroup, const char* name, int64_t defaultValue); BINARYNINJACOREAPI char* BNSettingGetString(const char* settingGroup, const char* name, const char* defaultValue); // intoutSize is number of elements in defaultValue one entry and number of elements in return type on exit - BINARYNINJACOREAPI uint64_t* BNSettingGetIntegerList(const char* settingGroup, const char* name, uint64_t* defaultValue, size_t* inoutSize); + BINARYNINJACOREAPI int64_t* BNSettingGetIntegerList(const char* settingGroup, const char* name, int64_t* defaultValue, size_t* inoutSize); // intoutSize is number of elements in defaultValue one entry and number of elements in return type on exit 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 BNFreeSettingIntegerList(uint64_t* integerList); + BINARYNINJACOREAPI void BNFreeSettingIntegerList(int64_t* integerList); //Check the type of a core setting BINARYNINJACOREAPI bool BNSettingIsBool(const char* name, const char* settingGroup); BINARYNINJACOREAPI bool BNSettingIsInteger(const char* name, const char* settingGroup); @@ -2905,12 +2905,14 @@ extern "C" BINARYNINJACOREAPI bool BNSettingIsPresent(const char* settingGroup, const char* name); BINARYNINJACOREAPI bool BNSettingSetBool(const char* settingGroup, const char* name, bool value, bool autoFlush); - BINARYNINJACOREAPI bool BNSettingSetInteger(const char* settingGroup, const char* name, uint64_t value, bool autoFlush); + BINARYNINJACOREAPI bool BNSettingSetInteger(const char* settingGroup, const char* name, int64_t value, bool autoFlush); BINARYNINJACOREAPI bool BNSettingSetString(const char* settingGroup, const char* name, const char* value, bool autoFlush); BINARYNINJACOREAPI bool BNSettingSetDouble(const char* settingGroup, const char* name, double value, bool autoFlush); - BINARYNINJACOREAPI bool BNSettingSetIntegerList(const char* settingGroup, const char* name, const uint64_t* value, size_t size, bool autoFlush); + BINARYNINJACOREAPI bool BNSettingSetIntegerList(const char* settingGroup, const char* name, const int64_t* value, size_t size, bool autoFlush); BINARYNINJACOREAPI bool BNSettingSetStringList(const char* settingGroup, const char* name, const char** value, size_t size, bool autoFlush); + BINARYNINJACOREAPI bool BNSettingRemoveSetting(const char* settingGroup, const char* setting, bool autoFlush); + BINARYNINJACOREAPI bool BNSettingRemoveSettingGroup(const char* settingGroup, bool autoFlush); BINARYNINJACOREAPI bool BNSettingFlushSettings(); //Metadata APIs diff --git a/python/setting.py b/python/setting.py index 975f393e..d52ac1ec 100644 --- a/python/setting.py +++ b/python/setting.py @@ -40,7 +40,7 @@ class Setting(object): def get_integer_list(self, name): length = ctypes.c_ulonglong() length.value = 0 - default_list = ctypes.POINTER(ctypes.c_ulonglong)() + default_list = ctypes.POINTER(ctypes.c_longlong)() result = core.BNSettingGetIntegerList(self.plugin_name, name, default_list, ctypes.byref(length)) out_list = [] for i in xrange(length.value): @@ -56,7 +56,7 @@ class Setting(object): out_list = [] for i in xrange(length.value): out_list.append(result[i]) - core.BNFreeSettingStringList(result, length) + core.BNFreeStringList(result, length) return out_list def get_double(self, name, default_value=0.0): @@ -92,16 +92,16 @@ class Setting(object): def set_string(self, name, value, auto_flush=True): return core.BNSettingSetString(self.plugin_name, name, value, auto_flush) - def set_integerList(self, name, value, auto_flush=True): + def set_integer_list(self, name, value, auto_flush=True): length = ctypes.c_ulonglong() length.value = len(value) - default_list = (ctypes.c_ulonglong * len(value))() + default_list = (ctypes.c_longlong * len(value))() for i in xrange(len(value)): default_list[i] = value[i] return core.BNSettingSetIntegerList(self.plugin_name, name, default_list, length, auto_flush) - def set_stringList(self, name, value, auto_flush=True): + def set_string_list(self, name, value, auto_flush=True): length = ctypes.c_ulonglong() length.value = len(value) default_list = (ctypes.c_char_p * len(value))() @@ -112,3 +112,26 @@ class Setting(object): def set_double(self, name, value, auto_flush=True): return core.BNSettingSetDouble(self.plugin_name, name, value, auto_flush) + + def set(self, name, value, auto_flush=True): + if isinstance(value, bool): + return self.set_bool(name, value, auto_flush) + elif isinstance(value, int): + return self.set_integer(name, value, auto_flush) + elif isinstance(value, str): + return self.set_string(name, value, auto_flush) + elif isinstance(value, list) and len(value) == 0: + return self.set_integer_list(name, value, auto_flush) + elif isinstance(value, list) and len(value) > 0 and isinstance(value[0], int): + return self.set_integer_list(name, value, auto_flush) + elif isinstance(value, list) and len(value) > 0 and isinstance(value[0], str): + return self.set_string_list(name, value, auto_flush) + elif isinstance(value, float): + return self.set_double(name, value, auto_flush) + raise ValueError("value is not one of (int, bool, float, str, [int], [str]) types") + + def remove_setting_group(self, auto_flush=True): + core.BNSettingRemoveSettingGroup(self.plugin_name, auto_flush) + + def remove_setting(self, setting, auto_flush=True): + core.BNSettingRemoveSetting(self.plugin_name, setting, auto_flush)
\ No newline at end of file diff --git a/settings.cpp b/settings.cpp index a60b7e3a..b30e6098 100644 --- a/settings.cpp +++ b/settings.cpp @@ -10,7 +10,7 @@ bool Setting::GetBool(const std::string& pluginName, const std::string& name, bo return BNSettingGetBool(pluginName.c_str(), name.c_str(), defaultValue); } -uint64_t Setting::GetInteger(const std::string& pluginName, const std::string& name, uint64_t defaultValue) +int64_t Setting::GetInteger(const std::string& pluginName, const std::string& name, int64_t defaultValue) { return BNSettingGetInteger(pluginName.c_str(), name.c_str(), defaultValue); } @@ -25,17 +25,17 @@ double Setting::GetDouble(const std::string& pluginName, const std::string& name return BNSettingGetDouble(pluginName.c_str(), name.c_str(), defaultValue); } -std::vector<uint64_t> Setting::GetIntegerList(const std::string& pluginName, +std::vector<int64_t> Setting::GetIntegerList(const std::string& pluginName, const std::string& name, - const std::vector<uint64_t>& defaultValue) + const std::vector<int64_t>& defaultValue) { - uint64_t* buffer = new uint64_t[defaultValue.size()]; - memcpy(&buffer[0], &defaultValue[0], sizeof(uint64_t) * defaultValue.size()); + int64_t* buffer = new int64_t[defaultValue.size()]; + memcpy(&buffer[0], &defaultValue[0], sizeof(int64_t) * defaultValue.size()); size_t size = defaultValue.size(); - uint64_t* outBuffer = BNSettingGetIntegerList(pluginName.c_str(), name.c_str(), buffer, &size); + int64_t* outBuffer = BNSettingGetIntegerList(pluginName.c_str(), name.c_str(), buffer, &size); delete[] buffer; - vector<uint64_t> out(outBuffer, outBuffer + size); + vector<int64_t> out(outBuffer, outBuffer + size); BNFreeSettingIntegerList(buffer); return out; } @@ -107,7 +107,7 @@ bool Setting::Set(const std::string& settingGroup, bool Setting::Set(const std::string& settingGroup, const std::string& name, - uint64_t value, + int64_t value, bool autoFlush) { return BNSettingSetInteger(settingGroup.c_str(), name.c_str(), value, autoFlush); @@ -123,7 +123,7 @@ bool Setting::Set(const std::string& settingGroup, bool Setting::Set(const std::string& settingGroup, const std::string& name, - const std::vector<uint64_t>& value, + const std::vector<int64_t>& value, bool autoFlush) { return BNSettingSetIntegerList(settingGroup.c_str(), name.c_str(), &value[0], value.size(), autoFlush); @@ -158,6 +158,16 @@ bool Setting::Set(const std::string& settingGroup, return BNSettingSetDouble(settingGroup.c_str(), name.c_str(), value, autoFlush); } +bool Setting::RemoveSettingGroup(const std::string& settingGroup, bool autoFlush) +{ + return BNSettingRemoveSettingGroup(settingGroup.c_str(), autoFlush); +} + +bool Setting::RemoveSetting(const std::string& settingGroup, const std::string& setting, bool autoFlush) +{ + return BNSettingRemoveSetting(settingGroup.c_str(), setting.c_str(), autoFlush); +} + bool Setting::FlushSettings() { return BNSettingFlushSettings(); |
