diff options
author | dec05eba <dec05eba@protonmail.com> | 2017-12-11 18:19:11 +0100 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2017-12-11 18:22:00 +0100 |
commit | 43b37b2acc7e8876371741d4901cdc11ad7ecadd (patch) | |
tree | 36f657810e5ce24b94496d395fc72a634aeaed8a /src | |
parent | 87c378c20c30c9251c3787f6fd5496b72511f344 (diff) |
Fix WEXITSTATUS compile error on openbsd (and ubuntu)
I noticed that WEXITSTATUS was failing when compiling
sibs on ubuntu.
WEXITSTATUS uses address of input which fails if the input
is directly passed by return of a function call.
Also added error checking if the process was stopped/killed
by receiving a signal or if it failed in any other way.
Diffstat (limited to 'src')
-rw-r--r-- | src/Exec.cpp | 35 | ||||
-rw-r--r-- | src/main.cpp | 5 |
2 files changed, 36 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 diff --git a/src/main.cpp b/src/main.cpp index 151e5a5..b1982bd 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -9,6 +9,11 @@ using namespace std; using namespace sibs; +// TODO: Fail if multiple versions of the same dependency is used +// as linking will fail because of multiple definitions of the same thing + +// TODO: Detect recursive dependencies and give error. + void usage() { printf("usage: sibs COMMAND\n\n"); |