xref: /OK3568_Linux_fs/external/xserver/test/tests-common.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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*4882a593Smuzhiyun run_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