a couple of warnings removed
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10999 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1,109 +1,126 @@
|
|||||||
|
#include <sys/types.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <regex.h>
|
||||||
|
|
||||||
|
#include "utils.h"
|
||||||
|
#include "regerror.ih"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* regerror - error-code expansion
|
= #define REG_OKAY 0
|
||||||
*
|
= #define REG_NOMATCH 1
|
||||||
* Copyright (c) 1998, 1999 Henry Spencer. All rights reserved.
|
= #define REG_BADPAT 2
|
||||||
*
|
= #define REG_ECOLLATE 3
|
||||||
* Development of this software was funded, in part, by Cray Research Inc.,
|
= #define REG_ECTYPE 4
|
||||||
* UUNET Communications Services Inc., Sun Microsystems Inc., and Scriptics
|
= #define REG_EESCAPE 5
|
||||||
* Corporation, none of whom are responsible for the results. The author
|
= #define REG_ESUBREG 6
|
||||||
* thanks all of them.
|
= #define REG_EBRACK 7
|
||||||
*
|
= #define REG_EPAREN 8
|
||||||
* Redistribution and use in source and binary forms -- with or without
|
= #define REG_EBRACE 9
|
||||||
* modification -- are permitted for any purpose, provided that
|
= #define REG_BADBR 10
|
||||||
* redistributions in source form retain this entire copyright notice and
|
= #define REG_ERANGE 11
|
||||||
* indicate the origin and nature of any modifications.
|
= #define REG_ESPACE 12
|
||||||
*
|
= #define REG_BADRPT 13
|
||||||
* I'd appreciate being given credit for this package in the documentation
|
= #define REG_EMPTY 14
|
||||||
* of software which uses it, but that is not a requirement.
|
= #define REG_ASSERT 15
|
||||||
*
|
= #define REG_INVARG 16
|
||||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
= #define REG_ATOI 255 // convert name to number (!)
|
||||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
= #define REG_ITOA 0400 // convert number to name (!)
|
||||||
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
|
||||||
* HENRY SPENCER 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) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
||||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
||||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
|
||||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "regguts.h"
|
|
||||||
|
|
||||||
/* unknown-error explanation */
|
|
||||||
static char unk[] = "*** unknown regex error code 0x%x ***";
|
|
||||||
|
|
||||||
/* struct to map among codes, code names, and explanations */
|
|
||||||
static struct rerr {
|
static struct rerr {
|
||||||
int code;
|
int code;
|
||||||
char *name;
|
char *name;
|
||||||
char *explain;
|
char *explain;
|
||||||
} rerrs[] = {
|
} rerrs[] = {
|
||||||
/* the actual table is built from regex.h */
|
{ REG_OKAY, "REG_OKAY", "no errors detected" },
|
||||||
# include "regerrs.h"
|
{ REG_NOMATCH, "REG_NOMATCH", "regexec() failed to match" },
|
||||||
{ -1, "", "oops" }, /* explanation special-cased in code */
|
{ 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" },
|
||||||
|
{ -1, "", "*** unknown regexp error code ***" },
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
- regerror - the interface to error numbers
|
- regerror - the interface to error numbers
|
||||||
|
= extern size_t regerror(int, const regex_t *, char *, size_t);
|
||||||
*/
|
*/
|
||||||
/* ARGSUSED */
|
/* ARGSUSED */
|
||||||
size_t /* actual space needed (including NUL) */
|
size_t
|
||||||
regerror(errcode, preg, errbuf, errbuf_size)
|
regerror(errcode, preg, errbuf, errbuf_size)
|
||||||
int errcode; /* error code, or REG_ATOI or REG_ITOA */
|
int errcode;
|
||||||
CONST regex_t *preg; /* associated regex_t (unused at present) */
|
const regex_t *preg;
|
||||||
char *errbuf; /* result buffer (unless errbuf_size==0) */
|
char *errbuf;
|
||||||
size_t errbuf_size; /* available space in errbuf, can be 0 */
|
size_t errbuf_size;
|
||||||
{
|
{
|
||||||
struct rerr *r;
|
register struct rerr *r;
|
||||||
char *msg;
|
register size_t len;
|
||||||
char convbuf[sizeof(unk)+50]; /* 50 = plenty for int */
|
register int target = errcode &~ REG_ITOA;
|
||||||
size_t len;
|
register char *s;
|
||||||
int icode;
|
char convbuf[50];
|
||||||
|
|
||||||
switch (errcode) {
|
if (errcode == REG_ATOI)
|
||||||
case REG_ATOI: /* convert name to number */
|
s = regatoi(preg, convbuf);
|
||||||
|
else {
|
||||||
for (r = rerrs; r->code >= 0; r++)
|
for (r = rerrs; r->code >= 0; r++)
|
||||||
if (strcmp(r->name, errbuf) == 0)
|
if (r->code == target)
|
||||||
break;
|
break;
|
||||||
sprintf(convbuf, "%d", r->code); /* -1 for unknown */
|
|
||||||
msg = convbuf;
|
if (errcode®_ITOA) {
|
||||||
break;
|
if (r->code >= 0)
|
||||||
case REG_ITOA: /* convert number to name */
|
(void) strcpy(convbuf, r->name);
|
||||||
icode = atoi(errbuf); /* not our problem if this fails */
|
else
|
||||||
for (r = rerrs; r->code >= 0; r++)
|
sprintf(convbuf, "REG_0x%x", target);
|
||||||
if (r->code == icode)
|
assert(strlen(convbuf) < sizeof(convbuf));
|
||||||
break;
|
s = convbuf;
|
||||||
if (r->code >= 0)
|
} else
|
||||||
msg = r->name;
|
s = r->explain;
|
||||||
else { /* unknown; tell him the number */
|
|
||||||
sprintf(convbuf, "REG_%u", (unsigned)icode);
|
|
||||||
msg = convbuf;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default: /* a real, normal error code */
|
|
||||||
for (r = rerrs; r->code >= 0; r++)
|
|
||||||
if (r->code == errcode)
|
|
||||||
break;
|
|
||||||
if (r->code >= 0)
|
|
||||||
msg = r->explain;
|
|
||||||
else { /* unknown; say so */
|
|
||||||
sprintf(convbuf, unk, errcode);
|
|
||||||
msg = convbuf;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
len = strlen(msg) + 1; /* space needed, including NUL */
|
len = strlen(s) + 1;
|
||||||
if (errbuf_size > 0) {
|
if (errbuf_size > 0) {
|
||||||
if (errbuf_size > len)
|
if (errbuf_size > len)
|
||||||
strcpy(errbuf, msg);
|
(void) strcpy(errbuf, s);
|
||||||
else { /* truncate to fit */
|
else {
|
||||||
strncpy(errbuf, msg, errbuf_size-1);
|
(void) strncpy(errbuf, s, errbuf_size-1);
|
||||||
errbuf[errbuf_size-1] = '\0';
|
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 *
|
||||||
|
regatoi(preg, localbuf)
|
||||||
|
const regex_t *preg;
|
||||||
|
char *localbuf;
|
||||||
|
{
|
||||||
|
register struct rerr *r;
|
||||||
|
|
||||||
|
for (r = rerrs; r->code >= 0; r++)
|
||||||
|
if (strcmp(r->name, preg->re_endp) == 0)
|
||||||
|
break;
|
||||||
|
if (r->code < 0)
|
||||||
|
return("0");
|
||||||
|
|
||||||
|
sprintf(localbuf, "%d", r->code);
|
||||||
|
return(localbuf);
|
||||||
}
|
}
|
||||||
|
1152
src/regex/regexec.c
1152
src/regex/regexec.c
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user