Const'ify and ANSIfy the internal interfaces of regex(3).
This is the final change that makes libc to compile with WERROR on my amd64 crashbox.
This commit is contained in:
parent
cb4e06eba8
commit
eb2b3d109a
@ -82,11 +82,11 @@ struct match {
|
||||
struct re_guts *g;
|
||||
int eflags;
|
||||
regmatch_t *pmatch; /* [nsub+1] (0 element unused) */
|
||||
char *offp; /* offsets work from here */
|
||||
char *beginp; /* start of string -- virtual NUL precedes */
|
||||
char *endp; /* end of string -- virtual NUL here */
|
||||
char *coldp; /* can be no match starting before here */
|
||||
char **lastpos; /* [nplus+1] */
|
||||
const char *offp; /* offsets work from here */
|
||||
const char *beginp; /* start of string -- virtual NUL precedes */
|
||||
const char *endp; /* end of string -- virtual NUL here */
|
||||
const char *coldp; /* can be no match starting before here */
|
||||
const char **lastpos; /* [nplus+1] */
|
||||
STATEVARS;
|
||||
states st; /* current states */
|
||||
states fresh; /* states for a fresh start */
|
||||
@ -101,11 +101,11 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
/* === engine.c === */
|
||||
static int matcher(struct re_guts *g, char *string, size_t nmatch, regmatch_t pmatch[], int eflags);
|
||||
static char *dissect(struct match *m, char *start, char *stop, sopno startst, sopno stopst);
|
||||
static char *backref(struct match *m, char *start, char *stop, sopno startst, sopno stopst, sopno lev, int);
|
||||
static char *fast(struct match *m, char *start, char *stop, sopno startst, sopno stopst);
|
||||
static char *slow(struct match *m, char *start, char *stop, sopno startst, sopno stopst);
|
||||
static int matcher(struct re_guts *g, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags);
|
||||
static const char *dissect(struct match *m, const char *start, const char *stop, sopno startst, sopno stopst);
|
||||
static const char *backref(struct match *m, const char *start, const char *stop, sopno startst, sopno stopst, sopno lev, int);
|
||||
static const char *fast(struct match *m, const char *start, const char *stop, sopno startst, sopno stopst);
|
||||
static const char *slow(struct match *m, const char *start, const char *stop, sopno startst, sopno stopst);
|
||||
static states step(struct re_guts *g, sopno start, sopno stop, states bef, wint_t ch, states aft);
|
||||
#define MAX_RECURSION 100
|
||||
#define BOL (OUT-1)
|
||||
@ -117,13 +117,13 @@ static states step(struct re_guts *g, sopno start, sopno stop, states bef, wint_
|
||||
#define BADCHAR (BOL-6)
|
||||
#define NONCHAR(c) ((c) <= OUT)
|
||||
#ifdef REDEBUG
|
||||
static void print(struct match *m, char *caption, states st, int ch, FILE *d);
|
||||
static void print(struct match *m, const char *caption, states st, int ch, FILE *d);
|
||||
#endif
|
||||
#ifdef REDEBUG
|
||||
static void at(struct match *m, char *title, char *start, char *stop, sopno startst, sopno stopst);
|
||||
static void at(struct match *m, const char *title, const char *start, const char *stop, sopno startst, sopno stopst);
|
||||
#endif
|
||||
#ifdef REDEBUG
|
||||
static char *pchar(int ch);
|
||||
static const char *pchar(int ch);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
@ -143,31 +143,30 @@ static char *pchar(int ch);
|
||||
|
||||
/*
|
||||
- matcher - the actual matching engine
|
||||
== static int matcher(struct re_guts *g, char *string, \
|
||||
== static int matcher(struct re_guts *g, const char *string, \
|
||||
== size_t nmatch, regmatch_t pmatch[], int eflags);
|
||||
*/
|
||||
static int /* 0 success, REG_NOMATCH failure */
|
||||
matcher(g, string, nmatch, pmatch, eflags)
|
||||
struct re_guts *g;
|
||||
char *string;
|
||||
size_t nmatch;
|
||||
regmatch_t pmatch[];
|
||||
int eflags;
|
||||
matcher(struct re_guts *g,
|
||||
const char *string,
|
||||
size_t nmatch,
|
||||
regmatch_t pmatch[],
|
||||
int eflags)
|
||||
{
|
||||
char *endp;
|
||||
const char *endp;
|
||||
int i;
|
||||
struct match mv;
|
||||
struct match *m = &mv;
|
||||
char *dp;
|
||||
const char *dp;
|
||||
const sopno gf = g->firststate+1; /* +1 for OEND */
|
||||
const sopno gl = g->laststate;
|
||||
char *start;
|
||||
char *stop;
|
||||
const char *start;
|
||||
const char *stop;
|
||||
/* Boyer-Moore algorithms variables */
|
||||
char *pp;
|
||||
const char *pp;
|
||||
int cj, mj;
|
||||
char *mustfirst;
|
||||
char *mustlast;
|
||||
const char *mustfirst;
|
||||
const char *mustlast;
|
||||
int *matchjump;
|
||||
int *charjump;
|
||||
|
||||
@ -291,8 +290,8 @@ int eflags;
|
||||
dp = dissect(m, m->coldp, endp, gf, gl);
|
||||
} else {
|
||||
if (g->nplus > 0 && m->lastpos == NULL)
|
||||
m->lastpos = (char **)malloc((g->nplus+1) *
|
||||
sizeof(char *));
|
||||
m->lastpos = malloc((g->nplus+1) *
|
||||
sizeof(const char *));
|
||||
if (g->nplus > 0 && m->lastpos == NULL) {
|
||||
free(m->pmatch);
|
||||
STATETEARDOWN(m);
|
||||
@ -362,30 +361,29 @@ int eflags;
|
||||
|
||||
/*
|
||||
- dissect - figure out what matched what, no back references
|
||||
== static char *dissect(struct match *m, char *start, \
|
||||
== char *stop, sopno startst, sopno stopst);
|
||||
== static const char *dissect(struct match *m, const char *start, \
|
||||
== const char *stop, sopno startst, sopno stopst);
|
||||
*/
|
||||
static char * /* == stop (success) always */
|
||||
dissect(m, start, stop, startst, stopst)
|
||||
struct match *m;
|
||||
char *start;
|
||||
char *stop;
|
||||
sopno startst;
|
||||
sopno stopst;
|
||||
static const char * /* == stop (success) always */
|
||||
dissect(struct match *m,
|
||||
const char *start,
|
||||
const char *stop,
|
||||
sopno startst,
|
||||
sopno stopst)
|
||||
{
|
||||
int i;
|
||||
sopno ss; /* start sop of current subRE */
|
||||
sopno es; /* end sop of current subRE */
|
||||
char *sp; /* start of string matched by it */
|
||||
char *stp; /* string matched by it cannot pass here */
|
||||
char *rest; /* start of rest of string */
|
||||
char *tail; /* string unmatched by rest of RE */
|
||||
const char *sp; /* start of string matched by it */
|
||||
const char *stp; /* string matched by it cannot pass here */
|
||||
const char *rest; /* start of rest of string */
|
||||
const char *tail; /* string unmatched by rest of RE */
|
||||
sopno ssub; /* start sop of subsubRE */
|
||||
sopno esub; /* end sop of subsubRE */
|
||||
char *ssp; /* start of string matched by subsubRE */
|
||||
char *sep; /* end of string matched by subsubRE */
|
||||
char *oldssp; /* previous ssp */
|
||||
char *dp;
|
||||
const char *ssp; /* start of string matched by subsubRE */
|
||||
const char *sep; /* end of string matched by subsubRE */
|
||||
const char *oldssp; /* previous ssp */
|
||||
const char *dp;
|
||||
|
||||
AT("diss", start, stop, startst, stopst);
|
||||
sp = start;
|
||||
@ -550,26 +548,25 @@ sopno stopst;
|
||||
|
||||
/*
|
||||
- backref - figure out what matched what, figuring in back references
|
||||
== static char *backref(struct match *m, char *start, \
|
||||
== char *stop, sopno startst, sopno stopst, sopno lev);
|
||||
== static const char *backref(struct match *m, const char *start, \
|
||||
== const char *stop, sopno startst, sopno stopst, sopno lev);
|
||||
*/
|
||||
static char * /* == stop (success) or NULL (failure) */
|
||||
backref(m, start, stop, startst, stopst, lev, rec)
|
||||
struct match *m;
|
||||
char *start;
|
||||
char *stop;
|
||||
sopno startst;
|
||||
sopno stopst;
|
||||
sopno lev; /* PLUS nesting level */
|
||||
int rec;
|
||||
static const char * /* == stop (success) or NULL (failure) */
|
||||
backref(struct match *m,
|
||||
const char *start,
|
||||
const char *stop,
|
||||
sopno startst,
|
||||
sopno stopst,
|
||||
sopno lev, /* PLUS nesting level */
|
||||
int rec)
|
||||
{
|
||||
int i;
|
||||
sopno ss; /* start sop of current subRE */
|
||||
char *sp; /* start of string matched by it */
|
||||
const char *sp; /* start of string matched by it */
|
||||
sopno ssub; /* start sop of subsubRE */
|
||||
sopno esub; /* end sop of subsubRE */
|
||||
char *ssp; /* start of string matched by subsubRE */
|
||||
char *dp;
|
||||
const char *ssp; /* start of string matched by subsubRE */
|
||||
const char *dp;
|
||||
size_t len;
|
||||
int hard;
|
||||
sop s;
|
||||
@ -767,26 +764,25 @@ int rec;
|
||||
|
||||
/*
|
||||
- fast - step through the string at top speed
|
||||
== static char *fast(struct match *m, char *start, \
|
||||
== char *stop, sopno startst, sopno stopst);
|
||||
== static const char *fast(struct match *m, const char *start, \
|
||||
== const char *stop, sopno startst, sopno stopst);
|
||||
*/
|
||||
static char * /* where tentative match ended, or NULL */
|
||||
fast(m, start, stop, startst, stopst)
|
||||
struct match *m;
|
||||
char *start;
|
||||
char *stop;
|
||||
sopno startst;
|
||||
sopno stopst;
|
||||
static const char * /* where tentative match ended, or NULL */
|
||||
fast( struct match *m,
|
||||
const char *start,
|
||||
const char *stop,
|
||||
sopno startst,
|
||||
sopno stopst)
|
||||
{
|
||||
states st = m->st;
|
||||
states fresh = m->fresh;
|
||||
states tmp = m->tmp;
|
||||
char *p = start;
|
||||
const char *p = start;
|
||||
wint_t c;
|
||||
wint_t lastc; /* previous c */
|
||||
wint_t flagch;
|
||||
int i;
|
||||
char *coldp; /* last p after which no match was underway */
|
||||
const char *coldp; /* last p after which no match was underway */
|
||||
size_t clen;
|
||||
|
||||
CLEAR(st);
|
||||
@ -873,26 +869,25 @@ sopno stopst;
|
||||
|
||||
/*
|
||||
- slow - step through the string more deliberately
|
||||
== static char *slow(struct match *m, char *start, \
|
||||
== char *stop, sopno startst, sopno stopst);
|
||||
== static const char *slow(struct match *m, const char *start, \
|
||||
== const char *stop, sopno startst, sopno stopst);
|
||||
*/
|
||||
static char * /* where it ended */
|
||||
slow(m, start, stop, startst, stopst)
|
||||
struct match *m;
|
||||
char *start;
|
||||
char *stop;
|
||||
sopno startst;
|
||||
sopno stopst;
|
||||
static const char * /* where it ended */
|
||||
slow( struct match *m,
|
||||
const char *start,
|
||||
const char *stop,
|
||||
sopno startst,
|
||||
sopno stopst)
|
||||
{
|
||||
states st = m->st;
|
||||
states empty = m->empty;
|
||||
states tmp = m->tmp;
|
||||
char *p = start;
|
||||
const char *p = start;
|
||||
wint_t c;
|
||||
wint_t lastc; /* previous c */
|
||||
wint_t flagch;
|
||||
int i;
|
||||
char *matchp; /* last p at which a match ended */
|
||||
const char *matchp; /* last p at which a match ended */
|
||||
size_t clen;
|
||||
|
||||
AT("slow", start, stop, startst, stopst);
|
||||
@ -987,13 +982,12 @@ sopno stopst;
|
||||
== #define NONCHAR(c) ((c) <= OUT)
|
||||
*/
|
||||
static states
|
||||
step(g, start, stop, bef, ch, aft)
|
||||
struct re_guts *g;
|
||||
sopno start; /* start state within strip */
|
||||
sopno stop; /* state after stop state within strip */
|
||||
states bef; /* states reachable before */
|
||||
wint_t ch; /* character or NONCHAR code */
|
||||
states aft; /* states already known reachable after */
|
||||
step(struct re_guts *g,
|
||||
sopno start, /* start state within strip */
|
||||
sopno stop, /* state after stop state within strip */
|
||||
states bef, /* states reachable before */
|
||||
wint_t ch, /* character or NONCHAR code */
|
||||
states aft) /* states already known reachable after */
|
||||
{
|
||||
cset *cs;
|
||||
sop s;
|
||||
@ -1104,17 +1098,16 @@ states aft; /* states already known reachable after */
|
||||
/*
|
||||
- print - print a set of states
|
||||
== #ifdef REDEBUG
|
||||
== static void print(struct match *m, char *caption, states st, \
|
||||
== static void print(struct match *m, const char *caption, states st, \
|
||||
== int ch, FILE *d);
|
||||
== #endif
|
||||
*/
|
||||
static void
|
||||
print(m, caption, st, ch, d)
|
||||
struct match *m;
|
||||
char *caption;
|
||||
states st;
|
||||
int ch;
|
||||
FILE *d;
|
||||
print(struct match *m,
|
||||
const char *caption,
|
||||
states st,
|
||||
int ch,
|
||||
FILE *d)
|
||||
{
|
||||
struct re_guts *g = m->g;
|
||||
int i;
|
||||
@ -1137,18 +1130,17 @@ FILE *d;
|
||||
/*
|
||||
- at - print current situation
|
||||
== #ifdef REDEBUG
|
||||
== static void at(struct match *m, char *title, char *start, char *stop, \
|
||||
== sopno startst, sopno stopst);
|
||||
== static void at(struct match *m, const char *title, const char *start, \
|
||||
== const char *stop, sopno startst, sopno stopst);
|
||||
== #endif
|
||||
*/
|
||||
static void
|
||||
at(m, title, start, stop, startst, stopst)
|
||||
struct match *m;
|
||||
char *title;
|
||||
char *start;
|
||||
char *stop;
|
||||
sopno startst;
|
||||
sopno stopst;
|
||||
at( struct match *m,
|
||||
const char *title,
|
||||
const char *start,
|
||||
const char *stop,
|
||||
sopno startst,
|
||||
sopno stopst)
|
||||
{
|
||||
if (!(m->eflags®_TRACE))
|
||||
return;
|
||||
@ -1163,7 +1155,7 @@ sopno stopst;
|
||||
/*
|
||||
- pchar - make a character printable
|
||||
== #ifdef REDEBUG
|
||||
== static char *pchar(int ch);
|
||||
== static const char *pchar(int ch);
|
||||
== #endif
|
||||
*
|
||||
* Is this identical to regchar() over in debug.c? Well, yes. But a
|
||||
@ -1171,9 +1163,8 @@ sopno stopst;
|
||||
* a matching debug.o, and this is convenient. It all disappears in
|
||||
* the non-debug compilation anyway, so it doesn't matter much.
|
||||
*/
|
||||
static char * /* -> representation */
|
||||
pchar(ch)
|
||||
int ch;
|
||||
static const char * /* -> representation */
|
||||
pchar(int ch)
|
||||
{
|
||||
static char pbuf[10];
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user