diff options
Diffstat (limited to 'src/backend/regex/regerror.c')
-rw-r--r-- | src/backend/regex/regerror.c | 197 |
1 files changed, 121 insertions, 76 deletions
diff --git a/src/backend/regex/regerror.c b/src/backend/regex/regerror.c index 7d1d06cbc90..9e6e0e02179 100644 --- a/src/backend/regex/regerror.c +++ b/src/backend/regex/regerror.c @@ -1,7 +1,7 @@ /*- * Copyright (c) 1992, 1993, 1994 Henry Spencer. * Copyright (c) 1992, 1993, 1994 - * The Regents of the University of California. All rights reserved. + * The Regents of the University of California. All rights reserved. * * This code is derived from software contributed to Berkeley by * Henry Spencer. @@ -10,22 +10,22 @@ * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. + * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. + * may be used to endorse or promote products derived from this software + * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) @@ -34,12 +34,13 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * @(#)regerror.c 8.4 (Berkeley) 3/20/94 + * @(#)regerror.c 8.4 (Berkeley) 3/20/94 */ #if defined(LIBC_SCCS) && !defined(lint) -static char sccsid[] = "@(#)regerror.c 8.4 (Berkeley) 3/20/94"; -#endif /* LIBC_SCCS and not lint */ +static char sccsid[] = "@(#)regerror.c 8.4 (Berkeley) 3/20/94"; + +#endif /* LIBC_SCCS and not lint */ #include <sys/types.h> #include <stdio.h> @@ -54,58 +55,97 @@ static char sccsid[] = "@(#)regerror.c 8.4 (Berkeley) 3/20/94"; /* ========= begin header generated by ./mkh ========= */ #ifdef __cplusplus -extern "C" { +extern "C" +{ #endif /* === regerror.c === */ -static char *regatoi(const regex_t *preg, char *localbuf); + static char *regatoi(const regex_t * preg, char *localbuf); #ifdef __cplusplus } + #endif /* ========= end header generated by ./mkh ========= */ /* - = #define REG_NOMATCH 1 - = #define REG_BADPAT 2 - = #define REG_ECOLLATE 3 - = #define REG_ECTYPE 4 - = #define REG_EESCAPE 5 - = #define REG_ESUBREG 6 - = #define REG_EBRACK 7 - = #define REG_EPAREN 8 - = #define REG_EBRACE 9 - = #define REG_BADBR 10 - = #define REG_ERANGE 11 - = #define REG_ESPACE 12 - = #define REG_BADRPT 13 - = #define REG_EMPTY 14 - = #define REG_ASSERT 15 - = #define REG_INVARG 16 - = #define REG_ATOI 255 // convert name to number (!) - = #define REG_ITOA 0400 // convert number to name (!) + = #define REG_NOMATCH 1 + = #define REG_BADPAT 2 + = #define REG_ECOLLATE 3 + = #define REG_ECTYPE 4 + = #define REG_EESCAPE 5 + = #define REG_ESUBREG 6 + = #define REG_EBRACK 7 + = #define REG_EPAREN 8 + = #define REG_EBRACE 9 + = #define REG_BADBR 10 + = #define REG_ERANGE 11 + = #define REG_ESPACE 12 + = #define REG_BADRPT 13 + = #define REG_EMPTY 14 + = #define REG_ASSERT 15 + = #define REG_INVARG 16 + = #define REG_ATOI 255 // convert name to number (!) + = #define REG_ITOA 0400 // convert number to name (!) */ -static struct rerr { - int code; - char *name; - char *explain; -} rerrs[] = { - {REG_NOMATCH, "REG_NOMATCH", "regexec() failed to match"}, - {REG_BADPAT, "REG_BADPAT", "invalid regular expression"}, - {REG_ECOLLATE, "REG_ECOLLATE", "invalid collating element"}, - {REG_ECTYPE, "REG_ECTYPE", "invalid character class"}, - {REG_EESCAPE, "REG_EESCAPE", "trailing backslash (\\)"}, - {REG_ESUBREG, "REG_ESUBREG", "invalid backreference number"}, - {REG_EBRACK, "REG_EBRACK", "brackets ([ ]) not balanced"}, - {REG_EPAREN, "REG_EPAREN", "parentheses not balanced"}, - {REG_EBRACE, "REG_EBRACE", "braces not balanced"}, - {REG_BADBR, "REG_BADBR", "invalid repetition count(s)"}, - {REG_ERANGE, "REG_ERANGE", "invalid character range"}, - {REG_ESPACE, "REG_ESPACE", "out of memory"}, - {REG_BADRPT, "REG_BADRPT", "repetition-operator operand invalid"}, - {REG_EMPTY, "REG_EMPTY", "empty (sub)expression"}, - {REG_ASSERT, "REG_ASSERT", "\"can't happen\" -- you found a bug"}, - {REG_INVARG, "REG_INVARG", "invalid argument to regex routine"}, - {0, "", "*** unknown regexp error code ***"} +static struct rerr +{ + int code; + char *name; + char *explain; +} rerrs[] = + +{ + { + REG_NOMATCH, "REG_NOMATCH", "regexec() failed to match" + }, + { + REG_BADPAT, "REG_BADPAT", "invalid regular expression" + }, + { + REG_ECOLLATE, "REG_ECOLLATE", "invalid collating element" + }, + { + REG_ECTYPE, "REG_ECTYPE", "invalid character class" + }, + { + REG_EESCAPE, "REG_EESCAPE", "trailing backslash (\\)" + }, + { + REG_ESUBREG, "REG_ESUBREG", "invalid backreference number" + }, + { + REG_EBRACK, "REG_EBRACK", "brackets ([ ]) not balanced" + }, + { + REG_EPAREN, "REG_EPAREN", "parentheses not balanced" + }, + { + REG_EBRACE, "REG_EBRACE", "braces not balanced" + }, + { + REG_BADBR, "REG_BADBR", "invalid repetition count(s)" + }, + { + REG_ERANGE, "REG_ERANGE", "invalid character range" + }, + { + REG_ESPACE, "REG_ESPACE", "out of memory" + }, + { + REG_BADRPT, "REG_BADRPT", "repetition-operator operand invalid" + }, + { + REG_EMPTY, "REG_EMPTY", "empty (sub)expression" + }, + { + REG_ASSERT, "REG_ASSERT", "\"can't happen\" -- you found a bug" + }, + { + REG_INVARG, "REG_INVARG", "invalid argument to regex routine" + }, + { + 0, "", "*** unknown regexp error code ***" + } }; /* @@ -115,56 +155,61 @@ static struct rerr { /* ARGSUSED */ size_t pg95_regerror(errcode, preg, errbuf, errbuf_size) -int errcode; -const regex_t *preg; -char *errbuf; -size_t errbuf_size; +int errcode; +const regex_t *preg; +char *errbuf; +size_t errbuf_size; { register struct rerr *r; register size_t len; - register int target = errcode &~ REG_ITOA; - register char *s; - char convbuf[50]; + register int target = errcode & ~REG_ITOA; + register char *s; + char convbuf[50]; if (errcode == REG_ATOI) s = regatoi(preg, convbuf); - else { + else + { for (r = rerrs; r->code != 0; r++) if (r->code == target) break; - - if (errcode®_ITOA) { + + if (errcode & REG_ITOA) + { if (r->code != 0) strcpy(convbuf, r->name); else sprintf(convbuf, "REG_0x%x", target); assert(strlen(convbuf) < sizeof(convbuf)); s = convbuf; - } else + } + else s = r->explain; } len = strlen(s) + 1; - if (errbuf_size > 0) { + if (errbuf_size > 0) + { if (errbuf_size > len) strcpy(errbuf, s); - else { - strncpy(errbuf, s, errbuf_size-1); - errbuf[errbuf_size-1] = '\0'; + else + { + strncpy(errbuf, s, errbuf_size - 1); + errbuf[errbuf_size - 1] = '\0'; } } - return(len); + return (len); } /* - regatoi - internal routine to implement REG_ATOI == static char *regatoi(const regex_t *preg, char *localbuf); */ -static char * +static char * regatoi(preg, localbuf) -const regex_t *preg; -char *localbuf; +const regex_t *preg; +char *localbuf; { register struct rerr *r; @@ -172,8 +217,8 @@ char *localbuf; if (strcmp(r->name, preg->re_endp) == 0) break; if (r->code == 0) - return("0"); + return ("0"); sprintf(localbuf, "%d", r->code); - return(localbuf); + return (localbuf); } |