aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libbutl/process.cxx17
-rw-r--r--libbutl/process.mxx12
2 files changed, 29 insertions, 0 deletions
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<uint16_t> (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: