From f4f6d906733027a7bd802e035b3e9852db7be967 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Thu, 15 Sep 2016 21:49:24 +0300 Subject: Add process::print() --- butl/process.cxx | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'butl/process.cxx') diff --git a/butl/process.cxx b/butl/process.cxx index e13a8cd..38948a1 100644 --- a/butl/process.cxx +++ b/butl/process.cxx @@ -37,6 +37,7 @@ #include #include // size_t #include // strlen(), strchr() +#include #include // casecmp() #include // fdnull(), fdclose() @@ -120,6 +121,43 @@ namespace butl return r; } + void process:: + print (ostream& o, const char* const args[], size_t n) + { + size_t m (0); + const char* const* p (args); + do + { + if (m != 0) + o << " |"; // Trailing space will be added inside the loop. + + for (m++; *p != nullptr; p++, m++) + { + if (p != args) + o << ' '; + + // Quote if empty or contains spaces. + // + bool q (**p == '\0' || strchr (*p, ' ') != nullptr); + + if (q) + o << '"'; + + o << *p; + + if (q) + o << '"'; + } + + if (m < n) // Can we examine the next element? + { + p++; + m++; + } + + } while (*p != nullptr); + } + #ifndef _WIN32 static process_path -- cgit v1.1