aboutsummaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authorMikhail Redko <ovitnez@gmail.com>2021-05-11 10:55:57 +0300
committerGitHub <noreply@github.com>2021-05-11 09:55:57 +0200
commit6c12f45f3b7d7eab32ed29860d2261fc8a512f0e (patch)
tree68225a2bb7662e4be2857e020c69996996427895 /src/common
parente203ecda88a327c4e93588f39cc4ffdcf99b30f7 (diff)
Core/Console: Improve ReadWinConsole logic and cosmetic changes (#26402)
* Core/Console: Improve ReadWinConsole logic and cosmetic changes * Core/Console: Fixed possible appearance of weird characters in the console when printing the output of child processes * Fix codestyle * Removed auto * Core/Misc: Explicit casting Difficulty values to uint8 before outputting to console * Core/Misc: Cast Difficulty to uint32 for output to console Co-authored-by: jackpoz <giacomopoz@gmail.com>
Diffstat (limited to 'src/common')
-rw-r--r--src/common/Utilities/StartProcess.cpp5
-rw-r--r--src/common/Utilities/Util.cpp15
-rw-r--r--src/common/Utilities/Util.h2
3 files changed, 16 insertions, 6 deletions
diff --git a/src/common/Utilities/StartProcess.cpp b/src/common/Utilities/StartProcess.cpp
index 5c8e0f79763..20be864ea1f 100644
--- a/src/common/Utilities/StartProcess.cpp
+++ b/src/common/Utilities/StartProcess.cpp
@@ -52,9 +52,8 @@ public:
std::streamsize write(char const* str, std::streamsize size)
{
std::string consoleStr(str, size);
- std::string utf8;
- if (consoleToUtf8(consoleStr, utf8))
- callback_(utf8);
+ RemoveCRLF(consoleStr);
+ callback_(consoleStr);
return size;
}
};
diff --git a/src/common/Utilities/Util.cpp b/src/common/Utilities/Util.cpp
index 6fa4825f06b..3fc026aaa74 100644
--- a/src/common/Utilities/Util.cpp
+++ b/src/common/Utilities/Util.cpp
@@ -607,7 +607,7 @@ bool ReadWinConsole(std::string& str, size_t size /*= 256*/)
HANDLE hConsole = GetStdHandle(STD_INPUT_HANDLE);
DWORD read = 0;
- if (!ReadConsoleW(hConsole, commandbuf, size, &read, nullptr))
+ if (!ReadConsoleW(hConsole, commandbuf, size, &read, nullptr) || read == 0)
{
delete[] commandbuf;
return false;
@@ -627,13 +627,22 @@ bool WriteWinConsole(std::string_view str, bool error /*= false*/)
return false;
HANDLE hConsole = GetStdHandle(error ? STD_ERROR_HANDLE : STD_OUTPUT_HANDLE);
- DWORD toWrite = wstr.size();
- DWORD write;
+ DWORD write = 0;
return WriteConsoleW(hConsole, wstr.c_str(), wstr.size(), &write, nullptr);
}
#endif
+TC_COMMON_API Optional<std::size_t> RemoveCRLF(std::string & str)
+{
+ std::size_t nextLineIndex = str.find_first_of("\r\n");
+ if (nextLineIndex == std::string::npos)
+ return std::nullopt;
+
+ str.erase(nextLineIndex);
+ return nextLineIndex;
+}
+
std::string Trinity::Impl::ByteArrayToHexStr(uint8 const* bytes, size_t arrayLen, bool reverse /* = false */)
{
int32 init = 0;
diff --git a/src/common/Utilities/Util.h b/src/common/Utilities/Util.h
index 5b90f0cf86e..87dd45d3cbc 100644
--- a/src/common/Utilities/Util.h
+++ b/src/common/Utilities/Util.h
@@ -297,6 +297,8 @@ TC_COMMON_API bool ReadWinConsole(std::string& str, size_t size = 256);
TC_COMMON_API bool WriteWinConsole(std::string_view str, bool error = false);
#endif
+TC_COMMON_API Optional<std::size_t> RemoveCRLF(std::string& str);
+
TC_COMMON_API bool IsIPAddress(char const* ipaddress);
TC_COMMON_API uint32 CreatePIDFile(std::string const& filename);