#pragma prototyped
static const char id[] = "\n@(#)$Id: regex (AT&T Research) 2004-05-24 $\0\n";
#include "reglib.h"
static const char* reg_error[] =
{
"not supported",
"success",
"no match",
"invalid regular expression",
"invalid collation element",
"invalid character class",
"trailing \\ in pattern",
"invalid \\digit backreference",
"[...] imbalance",
"\\(...\\) or (...) imbalance",
"\\{...\\} or {...} imbalance",
"invalid {...} digits",
"invalid [...] range endpoint",
"out of space",
"unary op not preceeded by re",
"empty subexpr in pattern",
"re component count overflow",
"invalid \\char escape",
&id[10],
"conflicting flags",
"invalid or omitted delimiter",
"unrecoverable internal error",
};
size_t
regerror(int code, const regex_t* p, char* buf, size_t size)
{
const char* s;
NoP(p);
if (code++ == REG_VERSIONID)
s = (const char*)fmtident(&id[1]);
else if (code >= 0 && code < elementsof(reg_error))
s = reg_error[code];
else
s = (const char*)"unknown error";
if (size)
{
strncpy(buf, s, size);
buf[size - 1] = 0;
}
else
buf = (char*)s;
return strlen(buf) + 1;
}
int
fatal(regdisc_t* disc, int code, const char* pattern)
{
if (disc->re_errorf)
{
if (pattern)
(*disc->re_errorf)(NiL, disc, disc->re_errorlevel, "regular expression: %s: %s", pattern, reg_error[code+1]);
else
(*disc->re_errorf)(NiL, disc, disc->re_errorlevel, "regular expression: %s", reg_error[code+1]);
}
return code;
}