summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSvante Signell <svante.signell@gmail.com>2014-08-19 19:52:01 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2014-08-19 19:54:55 +0200
commitd324631edd3c2549a8cda05c2fc56ceea7fe0593 (patch)
treec11f12ae0e0d34011d0c017cf1e5c410ad8bfc76
parentc025e6a9881527d5b0e5b2398278410fb4e42138 (diff)
Make settrans return value returned by chroot command
* utils/settrans.c (main): In case of chroot_command, get status from waitpid() call, and call error() appropriately.
-rw-r--r--utils/settrans.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/utils/settrans.c b/utils/settrans.c
index 84b271ab..cd40c56f 100644
--- a/utils/settrans.c
+++ b/utils/settrans.c
@@ -310,8 +310,9 @@ main(int argc, char *argv[])
if (chroot_command)
{
- pid_t pid;
- switch ((pid = fork ()))
+ pid_t child;
+ int status;
+ switch ((child = fork ()))
{
case -1:
error (6, errno, "fork");
@@ -348,12 +349,19 @@ main(int argc, char *argv[])
break;
default: /* Parent. */
- if (waitpid (pid, NULL, 0) == -1)
- error (8, errno, "waitpid");
+ if (waitpid (child, &status, 0) != child)
+ error (8, errno, "waitpid on %d", child);
err = fsys_goaway (active_control, goaway_flags);
if (err && err != EBUSY)
error (9, err, "fsys_goaway");
+
+ if (WIFSIGNALED (status))
+ error (WTERMSIG (status) + 128, 0,
+ "%s for child %d", strsignal (WTERMSIG (status)), child);
+ if (WEXITSTATUS (status) != 0)
+ error (WEXITSTATUS (status), 0,
+ "Error %d for child %d", WEXITSTATUS (status), child);
}
}