#include #include #include #include #include #include #include #include "test.h" #define TEST(c, ...) ((c) ? 1 : (t_error(#c" failed: " __VA_ARGS__),0)) static void handler_errno(void) { errno = 0; } int main(void) { t_setrlim(RLIMIT_NPROC, 0); pthread_atfork(handler_errno, handler_errno, handler_errno); pid_t pid; if (!TEST((pid = fork()) == -1, "fork succeeded despite rlimit\n")) { if (!pid) _exit(0); while (waitpid(pid, NULL, 0)<0 && errno==EINTR); } else { TEST(errno != 0, "fork failed but errno was clobbered\n"); } return t_status; }