Permalink
Browse files

Fix reducing log paths when building with MSVC

The LogManager code had trouble detecting the "/Source/Core/" substring
for two reasons, neither of which seemed to happen a few years ago:

1. __FILE__ is in lowercase on MSVC
2. __FILE__ uses backslash as the directory separator on MSVC

Fixes https://bugs.dolphin-emu.org/issues/11366
  • Loading branch information...
JosJuice committed Aug 28, 2018
1 parent 762747f commit fbdc239199d838afb5cdd175d9002909686155ed
Showing with 14 additions and 2 deletions.
  1. +14 −2 Source/Core/Common/Logging/LogManager.cpp
@@ -2,8 +2,10 @@
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include <algorithm>
#include <cstdarg>
#include <cstring>
#include <locale>
#include <mutex>
#include <ostream>
#include <string>
@@ -67,8 +69,18 @@ void GenericLog(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char*
static size_t DeterminePathCutOffPoint()
{
constexpr const char* pattern = DIR_SEP "Source" DIR_SEP "Core" DIR_SEP;
size_t pos = std::string(__FILE__).find(pattern);
constexpr const char* pattern = "/source/core/";
#ifdef _WIN32
constexpr const char* pattern2 = "\\source\\core\\";
#endif
std::string path = __FILE__;
std::transform(path.begin(), path.end(), path.begin(),
[](char c) { return std::tolower(c, std::locale::classic()); });
size_t pos = path.find(pattern);
#ifdef _WIN32
if (pos == std::string::npos)
pos = path.find(pattern2);
#endif
if (pos != std::string::npos)
return pos + strlen(pattern);
return 0;

0 comments on commit fbdc239

Please sign in to comment.