1*4882a593Smuzhiyun #include <sys/types.h> 2*4882a593Smuzhiyun #include <sys/wait.h> 3*4882a593Smuzhiyun #include <stdlib.h> 4*4882a593Smuzhiyun #include <stdio.h> 5*4882a593Smuzhiyun #include <unistd.h> 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #include "tests-common.h" 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun void run_test_in_child(int (* func)(void),const char * funcname)10*4882a593Smuzhiyunrun_test_in_child(int (*func)(void), const char *funcname) 11*4882a593Smuzhiyun { 12*4882a593Smuzhiyun int cpid; 13*4882a593Smuzhiyun int csts; 14*4882a593Smuzhiyun int exit_code = -1; 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun printf("\n---------------------\n%s...\n", funcname); 17*4882a593Smuzhiyun cpid = fork(); 18*4882a593Smuzhiyun if (cpid) { 19*4882a593Smuzhiyun waitpid(cpid, &csts, 0); 20*4882a593Smuzhiyun if (!WIFEXITED(csts)) 21*4882a593Smuzhiyun goto child_failed; 22*4882a593Smuzhiyun exit_code = WEXITSTATUS(csts); 23*4882a593Smuzhiyun if (exit_code == 0) 24*4882a593Smuzhiyun printf(" Pass\n"); 25*4882a593Smuzhiyun else { 26*4882a593Smuzhiyun child_failed: 27*4882a593Smuzhiyun printf(" FAIL\n"); 28*4882a593Smuzhiyun exit(exit_code); 29*4882a593Smuzhiyun } 30*4882a593Smuzhiyun } else { 31*4882a593Smuzhiyun exit(func()); 32*4882a593Smuzhiyun } 33*4882a593Smuzhiyun } 34