Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/cmd/sortlib/sync/test.c
1810 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 2003-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* *
19
***********************************************************************/
20
#pragma prototyped
21
22
/*
23
* sort -lsync exit test stubs
24
*/
25
26
#include <ss.h>
27
28
typedef struct State_s
29
{
30
unsigned long count;
31
int status;
32
int pretty;
33
char* sp;
34
} State_t;
35
36
static int
37
E00(int index, Rsobj_t* rp, Rsobj_t* dp, void** data)
38
{
39
register State_t* state;
40
char* s;
41
char env[32];
42
43
if (!(state = (State_t*)*data))
44
{
45
sfsprintf(env, sizeof(env), "SORT_E%02u_STATUS", index);
46
if (!(s = getenv(env)))
47
s = "";
48
if (!(state = newof(0, State_t, 1, strlen(s) + 1)))
49
error(ERROR_SYSTEM|3, "out of space");
50
state->status = RS_ACCEPT;
51
state->pretty = 'A';
52
strcpy(state->sp = (char*)(state + 1), s);
53
*data = state;
54
}
55
state->count++;
56
if (*state->sp)
57
switch (state->pretty = *state->sp++)
58
{
59
case 'A':
60
case 'R':
61
state->status = RS_ACCEPT;
62
break;
63
case 'C':
64
state->status = RS_DONE;
65
break;
66
case 'D':
67
state->status = RS_DELETE;
68
break;
69
case 'I':
70
state->status = RS_INSERT;
71
break;
72
case 'M':
73
state->status = RS_ACCEPT;
74
switch (rp->data[1])
75
{
76
case 'a':
77
rp->data[1] = 'z';
78
break;
79
case 'c':
80
rp->data[1] = 'x';
81
break;
82
case 'd':
83
state->status = RS_DELETE;
84
break;
85
case 'e':
86
rp->data[1] = 'u';
87
break;
88
}
89
break;
90
case 'T':
91
state->status = RS_TERMINATE;
92
break;
93
}
94
sfprintf(sfstderr, "sort exit E%02d %lu %c [%u] \"%-.*s\"\n", index, state->count, state->pretty, rp->datalen, rp->datalen ? (rp->datalen - 1) : 0, rp->data);
95
return state->status;
96
}
97
98
#ifdef __EXPORT__
99
#define extern extern __EXPORT__
100
#endif
101
102
extern int E11(Rsobj_t* rp, Rsobj_t* dp, void** state) { return E00(11, rp, dp, state); }
103
extern int E14(Rsobj_t* rp, Rsobj_t* dp, void** state) { return E00(14, rp, dp, state); }
104
extern int E15(Rsobj_t* rp, Rsobj_t* dp, void** state) { return E00(15, rp, dp, state); }
105
extern int E16(Rsobj_t* rp, Rsobj_t* dp, void** state) { return E00(16, rp, dp, state); }
106
extern int E17(Rsobj_t* rp, Rsobj_t* dp, void** state) { return E00(17, rp, dp, state); }
107
extern int E21(Rsobj_t* rp, Rsobj_t* dp, void** state) { return E00(21, rp, dp, state); }
108
extern int E25(Rsobj_t* rp, Rsobj_t* dp, void** state) { return E00(25, rp, dp, state); }
109
extern int E27(Rsobj_t* rp, Rsobj_t* dp, void** state) { return E00(27, rp, dp, state); }
110
extern int E31(Rsobj_t* rp, Rsobj_t* dp, void** state) { return E00(31, rp, dp, state); }
111
extern int E32(Rsobj_t* rp, Rsobj_t* dp, void** state) { return E00(32, rp, dp, state); }
112
extern int E35(Rsobj_t* rp, Rsobj_t* dp, void** state) { return E00(35, rp, dp, state); }
113
extern int E37(Rsobj_t* rp, Rsobj_t* dp, void** state) { return E00(37, rp, dp, state); }
114
extern int E38(Rsobj_t* rp, Rsobj_t* dp, void** state) { return E00(38, rp, dp, state); }
115
extern int E39(Rsobj_t* rp, Rsobj_t* dp, void** state) { return E00(39, rp, dp, state); }
116
117
#undef extern
118
119
SORTLIB(test)
120
121