timeout: defensive handling of all wait() errors

* src/timeout.c (main): Handle all possible cases of unexpected
failures from wait().  This was prompted by the clang tool reporting
the possible non-initialization of the status variable.
This commit is contained in:
Pádraig Brady
2009-08-31 19:18:27 +01:00
parent a977dbbe78
commit 0b1dcf33f5

View File

@@ -317,12 +317,25 @@ main (int argc, char **argv)
child exits, not on this process receiving a signal. Also we're not
passing WUNTRACED | WCONTINUED to a waitpid() call and so will not get
indication that the child has stopped or continued. */
wait (&status);
if (WIFEXITED (status))
status = WEXITSTATUS (status);
else if (WIFSIGNALED (status))
status = WTERMSIG (status) + 128; /* what sh does at least. */
if (wait (&status) == -1)
{
/* shouldn't happen. */
error (0, errno, _("error waiting for command"));
status = EXIT_CANCELED;
}
else
{
if (WIFEXITED (status))
status = WEXITSTATUS (status);
else if (WIFSIGNALED (status))
status = WTERMSIG (status) + 128; /* what sh does at least. */
else
{
/* shouldn't happen. */
error (0, 0, _("unknown status from command (0x%X)"), status);
status = EXIT_FAILURE;
}
}
if (timed_out)
return EXIT_TIMEDOUT;