aboutsummaryrefslogtreecommitdiff
path: root/src/common/Utilities/StartProcess.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-09-14 13:50:56 +0200
committerShauren <shauren.trinity@gmail.com>2025-04-13 19:05:27 +0200
commitbbc8e2213b4b49e0a0c59cf2d82c5fa17cfcffeb (patch)
tree8d8e4c8ccdf02b66bb862428fa991ef63248d126 /src/common/Utilities/StartProcess.cpp
parent8719b30d57dcde2dd25f8fc464bde960d1dd19fd (diff)
Core: Remove boost iostreams dependency
(cherry picked from commit dbe8d1f11e844dc73c9ce971421e1d71c41bea3d)
Diffstat (limited to 'src/common/Utilities/StartProcess.cpp')
-rw-r--r--src/common/Utilities/StartProcess.cpp72
1 files changed, 14 insertions, 58 deletions
diff --git a/src/common/Utilities/StartProcess.cpp b/src/common/Utilities/StartProcess.cpp
index 37c41f73a95..7b6a1409b3d 100644
--- a/src/common/Utilities/StartProcess.cpp
+++ b/src/common/Utilities/StartProcess.cpp
@@ -19,9 +19,6 @@
#include "Errors.h"
#include "Log.h"
#include "Optional.h"
-
-#include <boost/algorithm/string/join.hpp>
-#include <boost/iostreams/copy.hpp>
#include <boost/process/args.hpp>
#include <boost/process/child.hpp>
#include <boost/process/env.hpp>
@@ -29,51 +26,12 @@
#include <boost/process/io.hpp>
#include <boost/process/pipe.hpp>
#include <boost/process/search_path.hpp>
+#include <fmt/ranges.h>
using namespace boost::process;
-using namespace boost::iostreams;
namespace Trinity
{
-
-template<typename T>
-class TCLogSink
-{
- T callback_;
-
-public:
- typedef char char_type;
- typedef sink_tag category;
-
- // Requires a callback type which has a void(std::string) signature
- TCLogSink(T callback)
- : callback_(std::move(callback)) { }
-
- std::streamsize write(char const* str, std::streamsize size)
- {
- std::string_view consoleStr(str, size);
- size_t lineEnd = consoleStr.find_first_of("\r\n");
- std::streamsize processedCharacters = size;
- if (lineEnd != std::string_view::npos)
- {
- consoleStr = consoleStr.substr(0, lineEnd);
- processedCharacters = lineEnd + 1;
- }
-
- if (!consoleStr.empty())
- callback_(consoleStr);
-
- return processedCharacters;
- }
-};
-
-template<typename T>
-auto MakeTCLogSink(T&& callback)
- -> TCLogSink<typename std::decay<T>::type>
-{
- return { std::forward<T>(callback) };
-}
-
template<typename T>
static int CreateChildProcess(T waiter, std::string const& executable,
std::vector<std::string> const& argsVector,
@@ -101,15 +59,11 @@ static int CreateChildProcess(T waiter, std::string const& executable,
if (!secure)
{
TC_LOG_TRACE(logger, "Starting process \"{}\" with arguments: \"{}\".",
- executable, boost::algorithm::join(argsVector, " "));
+ executable, fmt::join(argsVector, " "));
}
// prepare file with only read permission (boost process opens with read_write)
- std::shared_ptr<FILE> inputFile(!input.empty() ? fopen(input.c_str(), "rb") : nullptr, [](FILE* ptr)
- {
- if (ptr != nullptr)
- fclose(ptr);
- });
+ auto inputFile = std::shared_ptr<FILE>(!input.empty() ? fopen(input.c_str(), "rb") : nullptr, [](FILE* f) { if (f) fclose(f); });
// Start the child process
child c = [&]()
@@ -140,18 +94,20 @@ static int CreateChildProcess(T waiter, std::string const& executable,
}
}();
- auto outInfo = MakeTCLogSink([&](std::string_view msg)
+ std::string line;
+ while (std::getline(outStream, line, '\n'))
{
- TC_LOG_INFO(logger, "{}", msg);
- });
+ std::erase(line, '\r');
+ if (!line.empty())
+ TC_LOG_INFO(logger, "{}", line);
+ }
- auto outError = MakeTCLogSink([&](std::string_view msg)
+ while (std::getline(errStream, line, '\n'))
{
- TC_LOG_ERROR(logger, "{}", msg);
- });
-
- copy(outStream, outInfo);
- copy(errStream, outError);
+ std::erase(line, '\r');
+ if (!line.empty())
+ TC_LOG_ERROR(logger, "{}", line);
+ }
// Call the waiter in the current scope to prevent
// the streams from closing too early on leaving the scope.