From c90760488f8a11886d2bb2baee4cc2714ac2fc83 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Sun, 17 Dec 2017 08:51:35 +0200 Subject: Add support for printing canonical process exit status description --- libbutl/process.cxx | 17 +++++++++++++++++ libbutl/process.mxx | 12 ++++++++++++ 2 files changed, 29 insertions(+) diff --git a/libbutl/process.cxx b/libbutl/process.cxx index d5a35c0..f6c498e 100644 --- a/libbutl/process.cxx +++ b/libbutl/process.cxx @@ -104,6 +104,23 @@ using namespace butl::win32; namespace butl { + // process_exit + // + ostream& + operator<< (ostream& os, process_exit pe) + { + if (pe.normal ()) + os << "exited with code " << static_cast (pe.code ()); + else + { + os << "terminated abnormally: " << pe.description (); + if (pe.core ()) + os << " (core dumped)"; + } + + return os; + } + // process // static process_path diff --git a/libbutl/process.mxx b/libbutl/process.mxx index af6f995..27c13fa 100644 --- a/libbutl/process.mxx +++ b/libbutl/process.mxx @@ -200,6 +200,18 @@ LIBBUTL_MODEXPORT namespace butl description () const; }; + // Print canonical exit status diagnostics: + // + // "terminated abnormally: <...> (core dumped)" + // "exited with code <...>" + // + // So you would normally do: + // + // cerr << "process " << args[0] << " " << *pr.exit << endl; + // + LIBBUTL_SYMEXPORT std::ostream& + operator<< (std::ostream&, process_exit); + class LIBBUTL_SYMEXPORT process { public: -- cgit v1.1