Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/crypto/krb5/src/util/et/t_com_err.c
34907 views
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
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
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
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
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
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
146