40#if defined(LIBC_SCCS) && !defined(lint)
41static char sccsid[] =
"@(#)regerror.c 8.4 (Berkeley) 3/20/94";
69static char *regatoi(
const regex_t *preg,
char *localbuf);
99} rerrs[] = {{REG_NOMATCH,
"REG_NOMATCH",
"regexec() failed to match"},
100 {REG_BADPAT,
"REG_BADPAT",
"invalid regular expression"},
101 {REG_ECOLLATE,
"REG_ECOLLATE",
"invalid collating element"},
102 {REG_ECTYPE,
"REG_ECTYPE",
"invalid character class"},
103 {REG_EESCAPE,
"REG_EESCAPE",
"trailing backslash (\\)"},
104 {REG_ESUBREG,
"REG_ESUBREG",
"invalid backreference number"},
105 {REG_EBRACK,
"REG_EBRACK",
"brackets ([ ]) not balanced"},
106 {REG_EPAREN,
"REG_EPAREN",
"parentheses not balanced"},
107 {REG_EBRACE,
"REG_EBRACE",
"braces not balanced"},
108 {REG_BADBR,
"REG_BADBR",
"invalid repetition count(s)"},
109 {REG_ERANGE,
"REG_ERANGE",
"invalid character range"},
110 {REG_ESPACE,
"REG_ESPACE",
"out of memory"},
111 {REG_BADRPT,
"REG_BADRPT",
"repetition-operator operand invalid"},
112 {REG_EMPTY,
"REG_EMPTY",
"empty (sub)expression"},
113 {REG_ASSERT,
"REG_ASSERT",
"\"can't happen\" -- you found a bug"},
114 {REG_INVARG,
"REG_INVARG",
"invalid argument to regex routine"},
115 {0,
"",
"*** unknown regexp error code ***"}};
122size_t yap_regerror(
int errcode,
const regex_t *preg,
char *errbuf,
123 size_t errbuf_size) {
124 register struct rerr *r;
126 register int target = errcode & ~REG_ITOA;
130 if (errcode == REG_ATOI)
131 s = regatoi(preg, convbuf);
133 for (r = rerrs; r->code != 0; r++)
134 if (r->code == target)
137 if (errcode & REG_ITOA) {
139 (void)strcpy(convbuf, r->name);
141 sprintf(convbuf,
"REG_0x%x", target);
142 assert(strlen(convbuf) <
sizeof(convbuf));
149 if (errbuf_size > 0) {
150 if (errbuf_size > len)
151 (void)strcpy(errbuf, s);
153 (void)strncpy(errbuf, s, errbuf_size - 1);
154 errbuf[errbuf_size - 1] =
'\0';
165static char *regatoi(preg, localbuf)
const regex_t *preg;
168 register struct rerr *r;
170 for (r = rerrs; r->code != 0; r++)
171 if (strcmp(r->name, preg->re_endp) == 0)
176 sprintf(localbuf,
"%d", r->code);