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