break;
default:
/* Parent. */
- do {
+ for (;;) {
rv = waitpid(pid, &status, 0);
- } while (rv == -1 && errno == EINTR);
+ if (rv == -1 && errno != EINTR)
+ break;
+ if (rv != -1 && !WIFSTOPPED(status))
+ break;
+ }
return true; /* not debug */
}
fputs("\n\n", mail);
fclose(mail);
- do {
- rv = waitpid(pid, &status, 0);
- } while (rv == -1 && errno == EINTR);
+ for (;;) {
+ rv = waitpid(pid, &status, 0);
+ if (rv == -1 && errno != EINTR)
+ break;
+ if (rv != -1 && !WIFSTOPPED(status))
+ break;
+ }
sudo_debug_exit(__func__, __FILE__, __LINE__, sudo_debug_subsys);
_exit(0);
}
break; /* NOTREACHED */
}
- do {
+ for (;;) {
rv = waitpid(pid, &status, 0);
- } while (rv == -1 && errno == EINTR);
+ if (rv == -1 && errno != EINTR)
+ break;
+ if (rv != -1 && !WIFSTOPPED(status))
+ break;
+ }
if (rv != -1)
rv = WIFEXITED(status) ? WEXITSTATUS(status) : -1;
(void) sigaction(SIGPIPE, &saved_sa_pipe, NULL);
/* Wait for child to exit. */
- while (waitpid(child, &status, 0) == -1 && errno == EINTR)
- continue;
+ for (;;) {
+ pid_t rv = waitpid(child, &status, 0);
+ if (rv == -1 && errno != EINTR)
+ break;
+ if (rv != -1 && !WIFSTOPPED(status))
+ break;
+ }
if (pass == NULL)
errno = EINTR; /* make cancel button simulate ^C */