From dbe8d1f11e844dc73c9ce971421e1d71c41bea3d Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 14 Sep 2024 13:50:56 +0200 Subject: Core: Remove boost iostreams dependency --- src/common/Utilities/StartProcess.cpp | 73 ++++++----------------------- src/tools/vmap4_assembler/VMapAssembler.cpp | 4 +- 2 files changed, 17 insertions(+), 60 deletions(-) (limited to 'src') diff --git a/src/common/Utilities/StartProcess.cpp b/src/common/Utilities/StartProcess.cpp index 37c41f73a95..bc188a3f29e 100644 --- a/src/common/Utilities/StartProcess.cpp +++ b/src/common/Utilities/StartProcess.cpp @@ -18,10 +18,8 @@ #include "StartProcess.h" #include "Errors.h" #include "Log.h" +#include "Memory.h" #include "Optional.h" - -#include -#include #include #include #include @@ -29,51 +27,12 @@ #include #include #include +#include using namespace boost::process; -using namespace boost::iostreams; namespace Trinity { - -template -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 -auto MakeTCLogSink(T&& callback) - -> TCLogSink::type> -{ - return { std::forward(callback) }; -} - template static int CreateChildProcess(T waiter, std::string const& executable, std::vector const& argsVector, @@ -101,15 +60,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 inputFile(!input.empty() ? fopen(input.c_str(), "rb") : nullptr, [](FILE* ptr) - { - if (ptr != nullptr) - fclose(ptr); - }); + auto inputFile = Trinity::make_unique_ptr_with_deleter(!input.empty() ? fopen(input.c_str(), "rb") : nullptr, &::fclose); // Start the child process child c = [&]() @@ -140,18 +95,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. diff --git a/src/tools/vmap4_assembler/VMapAssembler.cpp b/src/tools/vmap4_assembler/VMapAssembler.cpp index a61d7341d22..444f748753c 100644 --- a/src/tools/vmap4_assembler/VMapAssembler.cpp +++ b/src/tools/vmap4_assembler/VMapAssembler.cpp @@ -97,13 +97,13 @@ Optional HandleArgs(int argc, char* argv[], std::string* src, std::string* return 1; } - if (variablesMap.contains("help")) + if (variablesMap.find("help") != variablesMap.end()) { std::cout << visible << '\n'; return 0; } - if (variablesMap.contains("version")) + if (variablesMap.find("version") != variablesMap.end()) { std::cout << GitRevision::GetFullVersion() << '\n'; return 0; -- cgit v1.2.3