30#define _RWSTD_TEST_SRC
55static size_t nlineranges;
57static size_t rangebufsize;
62_rw_enable_lines (
int first,
int last,
int flags)
64 if (nlineranges == rangebufsize) {
65 const size_t newbufsize = 2 * nlineranges + 1;
74 memcpy (newranges, lineranges, nlineranges *
sizeof (
linerange_t));
78 lineranges = newranges;
79 rangebufsize = newbufsize;
82 lineranges [nlineranges].
first = first;
83 lineranges [nlineranges].
last =
last;
94_rw_enable_line (
int argc,
char *argv[],
int flags)
98 char *parg = strchr (argv [0],
'=');
101 const char*
const argbeg = ++parg;
108 for ( ;
'\0' != *parg ; ) {
111 for ( ;
' ' == *parg; ++parg);
120 "invalid character '%c' at position %d: \"%s\"\n",
121 *parg,
int (parg - argbeg), argv [0]);
128 long line = strtol (parg, &end, 0);
131 for ( ;
' ' == *
end; ++
end);
133 if (end == parg || (
'-' != *end &&
',' != *end &&
'\0' != *end)) {
135 "invalid character '%c' at position %d: \"%s\"\n",
136 *end,
int (parg - argbeg), argv [0]);
143 "invalid value %ld at position %d: \"%s\"\n",
144 line,
int (parg - argbeg), argv [0]);
150 if ((
',' == *end ||
'-' == *end) && end [1])
153 else if (
',' == *end) {
155 if (
'\0' == end [1]) {
157 "invalid character '%c' at position %d: \"%s\"\n",
158 *end,
int (parg - argbeg), argv [0]);
164 else if (
'-' == *end) {
166 while (
' ' == *++end);
168 line = _RWSTD_INT_MAX;
170 else if (
',' == *end) {
171 line = _RWSTD_INT_MAX;
177 else if (
'\0' == *end) {
182 "invalid character '%c' at position %d: \"%s\"\n",
183 *end,
int (parg - argbeg), argv [0]);
189 if (0 <= first && first <
line) {
190 _rw_enable_lines (
int (first),
int (
line),
flags);
201_rw_opt_enable_line (
int argc,
char *argv[])
203 if (1 == argc && argv && 0 == argv [0]) {
205 static const char helpstr[] = {
206 "Enables the line or lines specified by <arg>.\n"
207 "The syntax of <arg> is as follows: \n"
208 "<arg> ::= <range> [ , <range> ]\n"
209 "<range> ::= [ - ] <number> | <number> - [ <number> ]\n"
217 return _rw_enable_line (argc, argv,
l_enabled);
223_rw_opt_no_line (
int argc,
char *argv[])
225 if (1 == argc && argv && 0 == argv [0]) {
227 static const char helpstr[] = {
228 "Disables the line or lines specified by <arg>.\n"
229 "The syntax of <arg> is as follows: \n"
230 "<arg> ::= <range> [ , <range> ]\n"
231 "<range> ::= [ - ] <number> | <number> - [ <number> ]\n"
239 return _rw_enable_line (argc, argv,
l_disabled);
245_rw_opt_expect_line (
int argc,
char *argv[])
247 if (1 == argc && argv && 0 == argv [0]) {
249 static const char helpstr[] = {
250 "Marks the line or lines specified by <arg> as \"expected\".\n"
251 "Inactive diagnostics on such lines will be issued as unexpected.\n"
252 "The syntax of <arg> is as follows: \n"
253 "<arg> ::= <range> [ , <range> ]\n"
254 "<range> ::= [ - ] <number> | <number> - [ <number> ]\n"
262 return _rw_enable_line (argc, argv,
l_expected);
286 int line_expected = 0;
288 for (
size_t i = 0;
i != nlineranges; ++
i) {
290 const int first = lineranges [
i].
first;
301 return line_expected;
312 int line_enabled = -1;
314 for (
size_t i = 0;
i != nlineranges; ++
i) {
316 const int first = lineranges [
i].
first;
333 if (nenabled && -1 == line_enabled)
#define _RWSTD_UNUSED(arg)
#define _RWSTD_CONST_CAST(T, x)
_TEST_EXPORT int rw_enabled(int line)
int _rw_expected(int line)
_TEST_EXPORT int rw_setopts(const char *optspec,...)