1 /* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 #include <stdio.h>
3 #include <string.h>
4 #include <stdlib.h>
5 #include "com_err.h"
6 #include "et1.h"
7 #include "et2.h"
8
9 int misc_err, known_err; /* known_err is err in whether or not
10 table is 'known' to library */
11 int fail;
12
13 static void
try_one(errcode_t code,int known,int table,int msgno)14 try_one (errcode_t code, int known, int table, int msgno)
15 {
16 const char *msg = error_message (code);
17 char buffy[1024];
18
19 snprintf (buffy, sizeof(buffy), "error table %d message %d", table, msgno);
20 if (0 == strcmp (buffy, msg)) {
21 if (!known) {
22 known_err++;
23 }
24 return;
25 }
26 snprintf (buffy, sizeof(buffy), "Unknown code et%d %d", table, msgno);
27 if (!strcmp (buffy, msg)) {
28 if (known)
29 known_err++;
30 return;
31 }
32 printf ("error code %ld got unrecognized message '%s',\n"
33 "should have been table %d message %d\n",
34 (long) code, msg, table, msgno);
35 misc_err++;
36 }
37
38 static void
try_table(int table,int known,int lineno,errcode_t c0,errcode_t c1,errcode_t c2)39 try_table (int table, int known, int lineno,
40 errcode_t c0, errcode_t c1, errcode_t c2)
41 {
42 try_one (c0, known, table, 0);
43 try_one (c1, known, table, 1);
44 try_one (c2, known, table, 2);
45 if (misc_err != 0 || known_err != 0) {
46 fail++;
47 if (known_err)
48 printf ("table list error from line %d, table %d\n", lineno,
49 table);
50 if (misc_err)
51 printf ("misc errors from line %d table %d\n", lineno, table);
52 misc_err = known_err = 0;
53 }
54 }
55
56 static void
try_em_1(int t1_known,int t2_known,int lineno)57 try_em_1 (int t1_known, int t2_known, int lineno)
58 {
59 try_table (1, t1_known, lineno, ET1_M0, ET1_M1, ET1_M2);
60 try_table (2, t2_known, lineno, ET2_M0, ET2_M1, ET2_M2);
61 }
62 #define try_em(A,B) try_em_1(A,B,__LINE__)
63
run(void * x)64 static void *run(/*@unused@*/ void *x)
65 {
66 try_em (0, 0);
67 (void) add_error_table (&et_et1_error_table);
68 try_em (1, 0);
69 (void) add_error_table (&et_et2_error_table);
70 try_em (1, 1);
71 (void) remove_error_table (&et_et1_error_table);
72 try_em (0, 1);
73 (void) remove_error_table (&et_et1_error_table);
74 try_em (0, 1);
75 (void) remove_error_table (&et_et2_error_table);
76 try_em (0, 0);
77
78 initialize_et1_error_table ();
79 try_em (1, 0);
80 (void) add_error_table (&et_et1_error_table);
81 try_em (1, 0);
82 (void) remove_error_table (&et_et1_error_table);
83 try_em (1, 0);
84 (void) remove_error_table (&et_et1_error_table);
85 try_em (0, 0);
86
87 initialize_et1_error_table ();
88 try_em (1, 0);
89 (void) add_error_table (&et_et1_error_table);
90 try_em (1, 0);
91 (void) add_error_table (&et_et2_error_table);
92 try_em (1, 1);
93 (void) remove_error_table (&et_et1_error_table);
94 try_em (1, 1);
95 (void) remove_error_table (&et_et1_error_table);
96 try_em (0, 1);
97 (void) remove_error_table (&et_et2_error_table);
98 try_em (0, 0);
99 (void) remove_error_table (&et_et2_error_table);
100 try_em (0, 0);
101
102 (void) add_error_table (&et_et2_error_table);
103 try_em (0, 1);
104 initialize_et2_error_table ();
105 try_em (0, 1);
106 (void) add_error_table (&et_et1_error_table);
107 try_em (1, 1);
108 (void) remove_error_table (&et_et1_error_table);
109 try_em (0, 1);
110 (void) remove_error_table (&et_et2_error_table);
111 try_em (0, 1);
112 (void) remove_error_table (&et_et2_error_table);
113 try_em (0, 0);
114
115 return 0;
116 }
117
118 #ifdef TEST_THREADS
119 #include <pthread.h>
120 #endif
121
main(int argc,char * argv[])122 int main (/*@unused@*/ int argc, /*@unused@*/ char *argv[])
123 {
124 #ifdef TEST_THREADS
125 pthread_t t;
126 int err;
127 void *t_retval;
128
129 err = pthread_create(&t, 0, run, 0);
130 if (err) {
131 fprintf(stderr, "pthread_create error: %s\n", strerror(err));
132 exit(1);
133 }
134 err = pthread_join(t, &t_retval);
135 if (err) {
136 fprintf(stderr, "pthread_join error: %s\n", strerror(err));
137 exit(1);
138 }
139 return fail;
140 #else
141 run(0);
142 return fail;
143 #endif
144 }
145