diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2019-01-02 10:01:54 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2019-01-16 07:48:19 +0100 |
commit | bc3c13ecc3692aca160ccfe4043c910dc1bd7e85 (patch) | |
tree | 2b713a00841fd5a8fea8bae69db8558096019408 | |
parent | 910fdea2a904cf17afc8ec0bcb1869b647acbb5e (diff) |
gui/init: enable custom Qt logger on non-win32
-rw-r--r-- | gui/init.cpp | 64 |
1 files changed, 40 insertions, 24 deletions
diff --git a/gui/init.cpp b/gui/init.cpp index 2b84beef..66fceb3f 100644 --- a/gui/init.cpp +++ b/gui/init.cpp @@ -93,40 +93,56 @@ static void set_qt_style() #endif } -#ifdef _WIN32 - #include "compat/spinlock.hpp" +#include <string> -#include <cstring> -#include <cwchar> -#include <windows.h> +#ifdef _WIN32 +# include <windows.h> +#endif static void qdebug_to_console(QtMsgType, const QMessageLogContext& ctx, const QString &msg) { - const auto str = (const wchar_t*)msg.utf16(); - static_assert(sizeof(*str) == sizeof(wchar_t)); + static std::atomic_flag lock = ATOMIC_FLAG_INIT; + const auto bytes{msg.toUtf8()}; - if (IsDebuggerPresent()) - { - static std::atomic_flag lock = ATOMIC_FLAG_INIT; - spinlock_guard l(lock); + constexpr bool is_win32 = +#ifdef _WIN32 + true; +#else + false; +#endif - OutputDebugStringW(str); - OutputDebugStringW(L"\n"); - } - else + + if constexpr (is_win32) { - std::fflush(stderr); - if (ctx.function) - std::fprintf(stderr, "[%s:%d%s]: %ls\n", ctx.file, ctx.line, ctx.function, str); - else if (ctx.file) - std::fprintf(stderr, "[%s:%d]: %ls\n", ctx.file, ctx.line, str); + if (IsDebuggerPresent()) + { + spinlock_guard l(lock); + + OutputDebugStringA(bytes.constData()); + OutputDebugStringA("\n"); + } else - std::fprintf(stderr, "%ls\n", str); - std::fflush(stderr); + { + std::fflush(stderr); + const char* const s = bytes.constData(); + { + spinlock_guard l(lock); + + if (ctx.function) + std::fprintf(stderr, "[%s:%d] %s: %s\n", ctx.file, ctx.line, ctx.function, s); + else if (ctx.file) + std::fprintf(stderr, "[%s:%d]: %s\n", ctx.file, ctx.line, s); + else + std::fprintf(stderr, "%s\n", s); + } + std::fflush(stderr); + } } } +#ifdef _WIN32 + static void add_win32_path() { // see https://software.intel.com/en-us/articles/limitation-to-the-length-of-the-system-path-variable @@ -198,8 +214,6 @@ static void attach_parent_console() fprintf(stderr, "\n"); fflush(stderr); } - - (void)qInstallMessageHandler(qdebug_to_console); } #endif @@ -235,6 +249,8 @@ int otr_main(int argc, char** argv, std::function<QWidget*()> const& make_main_w attach_parent_console(); #endif + (void)qInstallMessageHandler(qdebug_to_console); + QDir::setCurrent(OPENTRACK_BASE_PATH); set_qt_style(); |