summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2017-07-03 17:58:04 -0400
committerPeter LaFosse <peter@vector35.com>2017-07-03 17:58:04 -0400
commitc154e1f9400f6a8838405f4a4fd41dbc6f2fcba3 (patch)
treea8d6b6164fd31dc442962d263c826d27b8349a26
parent88ec179d9519221744240e347bc94da09bbc2157 (diff)
Add setting removal APIs, allow negative integers
-rw-r--r--binaryninjaapi.h11
-rw-r--r--binaryninjacore.h12
-rw-r--r--python/setting.py33
-rw-r--r--settings.cpp28
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();