C/C++ determination/reporting.
[dyninst.git] / dyninstAPI / tests / src / test4b.mutatee.c
1
2 /* Test application (Mutatee) */
3
4 /* $Id: test4b.mutatee.c,v 1.4 2000/06/20 21:45:58 wylie Exp $ */
5
6 #include <stdio.h>
7 #include <assert.h>
8 #include <sys/types.h>
9 #include <signal.h>
10 #include <string.h>
11 #include <stdlib.h>
12
13
14 #if defined(i386_unknown_nt4_0) && !defined(__GNUC__)
15 #define WIN32_LEAN_AND_MEAN
16 #include <windows.h>
17 #define getpid _getpid
18 #else
19 #include <unistd.h>
20 #endif
21
22 #ifdef __cplusplus
23 int mutateeCplusplus = 1;
24 #else
25 int mutateeCplusplus = 0;
26 #endif
27
28 /* control debug printf statements */
29 #define dprintf if (debugPrint) printf
30 int debugPrint = 0;
31
32 #define TRUE    1
33 #define FALSE   0
34
35 int runAllTests = TRUE;
36 #define MAX_TEST 5
37 int runTest[MAX_TEST+1];
38
39 int globalVariable3_1;
40
41 void func3_2() 
42 {
43     dprintf("in func3_2\n");
44     globalVariable3_1 = 3000002;
45 }
46
47 void func3_1()
48 {
49     dprintf("in func3_1\n");
50 }
51
52 int globalVariable4_1;
53
54 void func4_4()
55 {
56     dprintf("in test4b func4_4\n");
57
58     globalVariable4_1 = 4000003;
59 }
60
61 void func4_2()
62 {
63     dprintf("in test4b func4_2\n");
64
65     /* a call to func4_4 gets hooked onto the exit of this */
66 }
67
68 void func4_1()
69 {
70 #ifndef i386_unknown_nt4_0
71     dprintf("in test4b func4_1\n");
72
73     func4_2();
74
75     exit(getpid());
76 #endif
77 }
78
79 int main(int argc, char *argv[])
80 {                                       
81     int i, j;
82
83     for (i=1; i < argc; i++) {
84         if (!strcmp(argv[i], "-verbose")) {
85             debugPrint = TRUE;
86         } else if (!strcmp(argv[i], "-run")) {
87             runAllTests = FALSE;
88             for (j=0; j <= MAX_TEST; j++) runTest[j] = FALSE;
89             for (j=i+1; j < argc; j++) {
90                 unsigned int testId;
91                 if ((testId = atoi(argv[j]))) {
92                     if ((testId > 0) && (testId <= MAX_TEST)) {
93                         runTest[testId] = TRUE;
94                     } else {
95                         printf("invalid test %d requested\n", testId);
96                         exit(-1);
97                     }
98                 } else {
99                     /* end of test list */
100                     break;
101                 }
102             }
103             i=j-1;
104         } else {
105             fprintf(stderr, "Usage: %s [-verbose] [-run <num> ..]\n", argv[0]);
106             exit(-1);
107         }
108     }
109
110     dprintf("Mutatee %s running (%s).\n", argv[0], 
111                 mutateeCplusplus ? "C++" : "C");
112
113     if (runTest[3]) func3_1();
114     if (runTest[4]) func4_1();
115
116     dprintf("Mutatee %s terminating.\n", argv[0]);
117     return 0;
118 }