diff options
-rw-r--r-- | bpkg/diagnostics.cxx | 49 |
1 files changed, 17 insertions, 32 deletions
diff --git a/bpkg/diagnostics.cxx b/bpkg/diagnostics.cxx index 41f08b4..9d1f96d 100644 --- a/bpkg/diagnostics.cxx +++ b/bpkg/diagnostics.cxx @@ -9,7 +9,10 @@ #include <odb/statement.hxx> +#include <butl/process> + using namespace std; +using namespace butl; namespace bpkg { @@ -22,41 +25,23 @@ namespace bpkg 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 << '"'; + const char* const* a; + size_t n; + }; - r << *p; - - 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. |