Rename newtestsuite to testsuite
[dyninst.git] / testsuite / src / dyninst / test_fork_6_mutatee.c
1 #include <sys/types.h>
2 #include <unistd.h>
3
4 #include "mutatee_util.h"
5
6 /* Externally accessed function prototypes.  These must have globally unique
7  * names.  I suggest following the pattern <testname>_<function>
8  */
9
10 void test_fork_6_func1();
11
12 /* Global variables accessed by the mutator.  These must have globally unique
13  * names.
14  */
15
16 int test_fork_6_global1 = 159;
17
18 /* Internally used function prototypes.  These should be declared with the
19  * keyword static so they don't interfere with other mutatees in the group.
20  */
21
22 /* Global variables used internally by the mutatee.  These should be declared
23  * with the keyword static so they don't interfere with other mutatees in the
24  * group.
25  */
26
27 static int dummyVal = 0;
28
29 /* Function definitions follow */
30
31 void test_fork_6_func1() {
32   dummyVal += 10;
33 }
34
35 int test_fork_6_mutatee()
36 {
37 #if defined(i386_unknown_nt4_0_test)
38   return 0; /* Skipped is not an error */
39 #endif
40   int pid;
41   /* dprintf("mutatee:  starting fork\n"); */
42   pid = fork();
43   /* dprintf("mutatee:  stopping fork\n"); */
44
45   /* mutatee will get paused here, temporarily, when the mutator receives
46      the postForkCallback */
47
48   if (pid == 0) {   /* child */
49     dprintf("Child: starting tests\n");
50     test_fork_6_func1();
51     dprintf("Child: done with tests, exiting\n");
52   } else if(pid > 0) {
53     registerPID(pid); /* Register for cleanup */
54     dprintf("Parent: starting tests\n");
55     test_fork_6_func1();
56     dprintf("Parent: done with tests, exiting\n");
57   } else if(pid < 0) {
58     logerror("error on fork\n");
59     return -1;  /* error case */
60   }
61
62   return 0; /* Mutatee return value doesn't matter for this test */
63 }