Utils/Console: Add control char escaping to string formatter
[senf.git] / senf / Utils / Console / Traits.cc
index f85d6f5..64daded 100644 (file)
@@ -27,6 +27,7 @@
 #include "Traits.ih"
 
 // Custom includes
+#include <boost/format.hpp>
 #include <senf/Utils/senfassert.hh>
 
 //#include "Traits.mpp"
@@ -42,6 +43,13 @@ prefix_ std::string senf::console::ArgumentTraits<std::string>::str(std::string
         for (std::string::size_type i (0); i < rv.size(); ++i)
             if (rv[i] == '"' || rv[i] == '\\')
                 rv.insert(i++,"\\");
+            else if (rv[i] < ' ' || rv[i] > 126) {
+                rv.insert(i+1, (boost::format("x%02x") 
+                                % unsigned(static_cast<unsigned char>(rv[i]))).str().c_str());
+                rv[i] = '\\';
+                i += 3;
+            }
+        
         rv.insert(0,"\"");
         rv.push_back('"');
         return rv;