aboutsummaryrefslogtreecommitdiff
path: root/src/Exec.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Exec.cpp')
-rw-r--r--src/Exec.cpp35
1 files changed, 31 insertions, 4 deletions
diff --git a/src/Exec.cpp b/src/Exec.cpp
index b245fd4..37ffef5 100644
--- a/src/Exec.cpp
+++ b/src/Exec.cpp
@@ -1,5 +1,7 @@
#include "../include/Exec.hpp"
+using namespace std;
+
namespace sibs
{
Result<ExecResult> exec(const char *cmd, bool print)
@@ -20,9 +22,34 @@ namespace sibs
}
}
- ExecResult execResult;
- execResult.execStdout = result;
- execResult.exitCode = WEXITSTATUS(pclose(pipe));
- return Result<ExecResult>::Ok(execResult);
+ int processCloseResult = pclose(pipe);
+ if(WIFEXITED(processCloseResult))
+ {
+ int returned = WEXITSTATUS(processCloseResult);
+ ExecResult execResult;
+ execResult.execStdout = result;
+ execResult.exitCode = returned;
+ return Result<ExecResult>::Ok(execResult);
+ }
+ else if(WIFSIGNALED(processCloseResult))
+ {
+ int signum = WSTOPSIG(processCloseResult);
+ string errMsg = "Exited due to receiving signal ";
+ errMsg += to_string(signum);
+ return Result<ExecResult>::Err(errMsg);
+ }
+ else if(WIFSTOPPED(processCloseResult))
+ {
+ int signum = WSTOPSIG(processCloseResult);
+ string errMsg = "Stopped due to receiving signal ";
+ errMsg += to_string(signum);
+ return Result<ExecResult>::Err(errMsg);
+ }
+ else
+ {
+ string errMsg = "exec unexpected error on pclose: ";
+ errMsg += to_string(processCloseResult);
+ return Result<ExecResult>::Err(errMsg);
+ }
}
} \ No newline at end of file