From 8dd7d30903b62115ccd962f6727e80e8be8800b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Radovan=20=C4=8Cerven=C3=BD?= <radovan.cerveny@gmail.com> Date: Mon, 15 Feb 2016 20:05:09 +0100 Subject: [PATCH] clog relinking to descriptor 4 with fallback to stderr --- alib2std/src/extensions/iostream.cpp | 20 ++++++++++++++++---- alib2std/src/extensions/iostream.hpp | 16 ++++++++++++---- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/alib2std/src/extensions/iostream.cpp b/alib2std/src/extensions/iostream.cpp index e47263d247..2c45e69254 100644 --- a/alib2std/src/extensions/iostream.cpp +++ b/alib2std/src/extensions/iostream.cpp @@ -3,16 +3,28 @@ */ #include "iostream.hpp" +#include <bits/../iostream> namespace std { const int CERR_FD = 2; - // used for alib special logging -const int CALOG_FD = 4; -ofdstream calog ( CALOG_FD, CERR_FD ); - // used for measurements output const int CMEASURE_FD = 5; ofdstream cmeasure ( CMEASURE_FD, CERR_FD ); + +const int CLOG_FD = 4; +fdaccessor clog_fdaccessor ( CLOG_FD, CERR_FD ); +fdstreambuf clog_fdstreambuf ( clog_fdaccessor.get_fd ( ) ); + +RelinkIO::RelinkIO ( ) { + std::clog.rdbuf ( & clog_fdstreambuf ); + std::clog.clear ( ); +} + +RelinkIO::~RelinkIO ( ) { + std::clog.flush ( ); +} + +RelinkIO relinkio; } diff --git a/alib2std/src/extensions/iostream.hpp b/alib2std/src/extensions/iostream.hpp index e8152327a2..1f0dc06079 100644 --- a/alib2std/src/extensions/iostream.hpp +++ b/alib2std/src/extensions/iostream.hpp @@ -11,13 +11,21 @@ namespace std { extern const int CERR_FD; - // used for alib special logging -extern const int CALOG_FD; -extern ofdstream calog; - // used for measurements output extern const int CMEASURE_FD; extern ofdstream cmeasure; + +extern fdaccessor clog_fdaccessor; +extern fdstreambuf clog_fdstreambuf; + +class RelinkIO { +public: + RelinkIO ( ); + ~RelinkIO ( ); +}; + + // following the way of stdlibc++ +extern RelinkIO relinkio; } #endif /* IOSTREAM_HPP_ */ -- GitLab