pclose returns the exit status from wait, we need to check that to see if
the script itself failed or not. Tested a script that returned 0, 1, and
also one that did a sleep and then was killed by a signal.
Signed-off-by: Dwight Engen <dwight.engen@oracle.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
{
FILE *f;
char *output;
+ int ret;
f = popen(buffer, "r");
if (!f) {
free(output);
- if (pclose(f) == -1) {
+ ret = pclose(f);
+ if (ret == -1) {
SYSERROR("Script exited on error");
return -1;
+ } else if (WIFEXITED(ret) && WEXITSTATUS(ret) != 0) {
+ ERROR("Script exited with status %d", WEXITSTATUS(ret));
+ return -1;
+ } else if (WIFSIGNALED(ret)) {
+ ERROR("Script terminated by signal %d (%s)", WTERMSIG(ret),
+ strsignal(WTERMSIG(ret)));
+ return -1;
}
return 0;