aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build2/diagnostics.cxx46
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.