about summary refs log tree commit diff
path: root/src/libutil
diff options
context:
space:
mode:
Diffstat (limited to 'src/libutil')
-rw-r--r--src/libutil/util.cc13
-rw-r--r--src/libutil/util.hh5
2 files changed, 18 insertions, 0 deletions
diff --git a/src/libutil/util.cc b/src/libutil/util.cc
index 2cfada35450a..d3446d38a6d8 100644
--- a/src/libutil/util.cc
+++ b/src/libutil/util.cc
@@ -491,3 +491,16 @@ Strings unpackStrings(const string & s)
     
     return strings;
 }
+
+
+string statusToString(int status)
+{
+    if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) {
+        if (WIFEXITED(status))
+            return (format("failed with exit code %2%") % WEXITSTATUS(status)).str();
+        else if (WIFSIGNALED(status))
+            return (format("failed due to signal %2%") % WTERMSIG(status)).str();
+        else
+            return "died abnormally";
+    } else return "succeeded";
+}
diff --git a/src/libutil/util.hh b/src/libutil/util.hh
index e808f4e1b50b..21c6774b9d07 100644
--- a/src/libutil/util.hh
+++ b/src/libutil/util.hh
@@ -221,4 +221,9 @@ string packStrings(const Strings & strings);
 Strings unpackStrings(const string & s);
 
 
+/* Convert the exit status of a child as returned by wait() into an
+   error string. */
+string statusToString(int status);
+
+
 #endif /* !__UTIL_H */