diff options
-rw-r--r-- | build2/diagnostics.cxx | 46 |
1 files changed, 14 insertions, 32 deletions
diff --git a/build2/diagnostics.cxx b/build2/diagnostics.cxx index 1265f73..ca395ab 100644 --- a/build2/diagnostics.cxx +++ b/build2/diagnostics.cxx @@ -22,41 +22,23 @@ namespace build2 print_process (r, args, n); } - void - print_process (diag_record& r, const char* const* args, size_t n) + struct process_args { - size_t m (0); - const char* const* p (args); - do - { - if (m != 0) - r << " |"; // Trailing space will be added inside the loop. - - for (m++; *p != nullptr; p++, m++) - { - if (p != args) - r << ' '; - - // Quote if empty or contains spaces. - // - bool q (**p == '\0' || strchr (*p, ' ') != nullptr); - - if (q) - r << '"'; - - r << *p; + const char* const* a; + size_t n; + }; - if (q) - r << '"'; - } - - if (m < n) // Can we examine the next element? - { - p++; - m++; - } + inline static ostream& + operator<< (ostream& o, const process_args& p) + { + process::print (o, p.a, p.n); + return o; + } - } while (*p != nullptr); + void + print_process (diag_record& r, const char* const* args, size_t n) + { + r << process_args {args, n}; } // Diagnostics verbosity level. |