From 512ebc2ac144111702171d7ac8c6a1eb2d25b650 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Tue, 3 Mar 2015 16:43:50 -0500 Subject: Add a logging system --- log.cpp | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 log.cpp (limited to 'log.cpp') diff --git a/log.cpp b/log.cpp new file mode 100644 index 00000000..941414e5 --- /dev/null +++ b/log.cpp @@ -0,0 +1,135 @@ +#define _CRT_SECURE_NO_WARNINGS +#include +#include +#include "binaryninjaapi.h" + +using namespace BinaryNinja; +using namespace std; + + +void LogListener::LogMessageCallback(void* ctxt, BNLogLevel level, const char* msg) +{ + LogListener* listener = (LogListener*)ctxt; + listener->LogMessage(level, msg); +} + + +void LogListener::CloseLogCallback(void* ctxt) +{ + LogListener* listener = (LogListener*)ctxt; + listener->CloseLog(); +} + + +void LogListener::RegisterLogListener(LogListener* listener) +{ + BNLogListener callbacks; + callbacks.context = listener; + callbacks.log = LogMessageCallback; + callbacks.close = CloseLogCallback; + BNRegisterLogListener(&callbacks); +} + + +void LogListener::UnregisterLogListener(LogListener* listener) +{ + BNLogListener callbacks; + callbacks.context = listener; + callbacks.log = LogMessageCallback; + callbacks.close = CloseLogCallback; + BNUnregisterLogListener(&callbacks); +} + + +static void PerformLog(BNLogLevel level, const char* fmt, va_list args) +{ +#if defined(_MSC_VER) + int len = _vscprintf(fmt, args); + if (len < 0) + return; + char* msg = malloc(len + 1); + if (!msg) + return; + if (vsnprintf(msg, len + 1, fmt, args) >= 0) + BNLog(level, "%s", msg); + free(msg); +#else + char* msg; + if (vasprintf(&msg, fmt, args) < 0) + return; + BNLog(level, "%s", msg); + free(msg); +#endif +} + + +void BinaryNinja::Log(BNLogLevel level, const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + PerformLog(level, fmt, args); +} + + +void BinaryNinja::LogDebug(const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + PerformLog(DebugLog, fmt, args); +} + + +void BinaryNinja::LogInfo(const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + PerformLog(InfoLog, fmt, args); +} + + +void BinaryNinja::LogWarn(const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + PerformLog(WarningLog, fmt, args); +} + + +void BinaryNinja::LogError(const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + PerformLog(ErrorLog, fmt, args); +} + + +void BinaryNinja::LogAlert(const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + PerformLog(AlertLog, fmt, args); +} + + +void BinaryNinja::LogToStdout(BNLogLevel minimumLevel) +{ + BNLogToStdout(minimumLevel); +} + + +void BinaryNinja::LogToStderr(BNLogLevel minimumLevel) +{ + BNLogToStderr(minimumLevel); +} + + +bool BinaryNinja::LogToFile(BNLogLevel minimumLevel, const string& path, bool append) +{ + return BNLogToFile(minimumLevel, path.c_str(), append); +} + + +void BinaryNinja::CloseLogs() +{ + BNCloseLogs(); +} -- cgit v1.3.1