1#include <errno.h> 2#include <pthread.h> 3#include <stdio.h> 4#include <unistd.h> 5#include <sys/resource.h> 6#include <sys/types.h> 7#include <sys/wait.h> 8#include "test.h" 9 10#define TEST(c, ...) ((c) ? 1 : (t_error(#c" failed: " __VA_ARGS__),0)) 11 12static void handler_errno(void) 13{ 14 errno = 0; 15} 16 17int main(void) 18{ 19 t_setrlim(RLIMIT_NPROC, 0); 20 pthread_atfork(handler_errno, handler_errno, handler_errno); 21 22 pid_t pid; 23 if (!TEST((pid = fork()) == -1, "fork succeeded despite rlimit\n")) { 24 if (!pid) _exit(0); 25 while (waitpid(pid, NULL, 0)<0 && errno==EINTR); 26 } else { 27 TEST(errno != 0, "fork failed but errno was clobbered\n"); 28 } 29 30 return t_status; 31} 32 33