aboutsummaryrefslogtreecommitdiff
path: root/src/utility.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/utility.h')
-rw-r--r--src/utility.h26
1 files changed, 21 insertions, 5 deletions
diff --git a/src/utility.h b/src/utility.h
index 96ee15c..1dc44ed 100644
--- a/src/utility.h
+++ b/src/utility.h
@@ -3,6 +3,8 @@
#include <ext/stdio_filebuf.h>
+#include <boost/process.hpp>
+
#include <iostream>
namespace utility {
@@ -10,16 +12,30 @@ namespace utility {
class Logger {
public:
Logger(const int target_fd):
- buffer(target_fd, std::ios::out),
- stream(&this->buffer) { }
+ buffer_(target_fd, std::ios::out),
+ stream_(&this->buffer) { }
void append(const std::string& msg) {
- this->stream << msg << std::endl;
+ this->stream_ << msg << std::endl;
+ }
+
+ // Forward the contents of a given standard output stream to the log target
+ //
+ // While `this->stream_ << stream.rdbuf()` would be more effective it sadly
+ // does not work with `boost::process::pistream` due to a broken pipe error
+ // in conjunction with the required `boost::process::capture_stream` context
+ // flag.
+ //
+ void forward(boost::process::pistream& stream) {
+ this->stream << std::string(
+ (std::istreambuf_iterator<char>(stream)),
+ (std::istreambuf_iterator<char>())
+ );
}
private:
- __gnu_cxx::stdio_filebuf<char> buffer;
- std::ostream stream;
+ __gnu_cxx::stdio_filebuf<char> buffer_;
+ std::ostream stream_;
};