Redo previous in a different way; cast the character held in int variable

as unsigned char just before passing isalnum() in ISWORD() rather than
fetching it as unsigned char.  It is ok since EOF is never passed to ISWORD()
(though it will be a bit inefficient.)

Addresses PR#24929.
This commit is contained in:
enami 2004-03-26 22:42:17 +00:00
parent 678a450535
commit d43ce6c183
2 changed files with 18 additions and 19 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: engine.c,v 1.16 2004/03/12 22:34:09 enami Exp $ */
/* $NetBSD: engine.c,v 1.17 2004/03/26 22:42:17 enami Exp $ */
/*-
* Copyright (c) 1992, 1993, 1994
@ -622,23 +622,22 @@ sopno lev; /* PLUS nesting level */
return(NULL);
break;
case OBOW:
if (((sp == m->beginp && !(m->eflags&REG_NOTBOL)) ||
(sp < m->endp && *(sp - 1) == '\n' &&
(m->g->cflags&REG_NEWLINE)) ||
(sp > m->beginp &&
!ISWORD(*(unsigned char *)(sp - 1)))) &&
(sp < m->endp && ISWORD(*(unsigned char *)sp)))
if (( (sp == m->beginp && !(m->eflags&REG_NOTBOL)) ||
(sp < m->endp && *(sp-1) == '\n' &&
(m->g->cflags&REG_NEWLINE)) ||
(sp > m->beginp &&
!ISWORD(*(sp-1))) ) &&
(sp < m->endp && ISWORD(*sp)) )
{ /* yes */ }
else
return(NULL);
break;
case OEOW:
if (((sp == m->endp && !(m->eflags&REG_NOTEOL)) ||
(sp < m->endp && *sp == '\n' &&
(m->g->cflags&REG_NEWLINE)) ||
(sp < m->endp && !ISWORD(*(unsigned char *)sp))) &&
(sp > m->beginp &&
ISWORD(*(unsigned char *)(sp - 1))))
if (( (sp == m->endp && !(m->eflags&REG_NOTEOL)) ||
(sp < m->endp && *sp == '\n' &&
(m->g->cflags&REG_NEWLINE)) ||
(sp < m->endp && !ISWORD(*sp)) ) &&
(sp > m->beginp && ISWORD(*(sp-1))) )
{ /* yes */ }
else
return(NULL);
@ -779,7 +778,7 @@ sopno stopst;
states fresh = m->fresh;
states tmp = m->tmp;
char *p = start;
int c = (start == m->beginp) ? OUT : *(unsigned char *)(start - 1);
int c = (start == m->beginp) ? OUT : *(start-1);
int lastc; /* previous c */
int flagch;
int i;
@ -798,7 +797,7 @@ sopno stopst;
for (;;) {
/* next character */
lastc = c;
c = (p == m->endp) ? OUT : *(unsigned char *)p;
c = (p == m->endp) ? OUT : *p;
if (EQ(st, fresh))
coldp = p;
@ -874,7 +873,7 @@ sopno stopst;
states empty = m->empty;
states tmp = m->tmp;
char *p = start;
int c = (start == m->beginp) ? OUT : *(unsigned char *)(start - 1);
int c = (start == m->beginp) ? OUT : *(start-1);
int lastc; /* previous c */
int flagch;
int i;
@ -893,7 +892,7 @@ sopno stopst;
for (;;) {
/* next character */
lastc = c;
c = (p == m->endp) ? OUT : *(unsigned char *)p;
c = (p == m->endp) ? OUT : *p;
/* is there an EOL and/or BOL between lastc and c? */
flagch = '\0';

View File

@ -1,4 +1,4 @@
/* $NetBSD: regex2.h,v 1.10 2003/08/07 16:43:20 agc Exp $ */
/* $NetBSD: regex2.h,v 1.11 2004/03/26 22:42:17 enami Exp $ */
/*-
* Copyright (c) 1992, 1993, 1994
@ -206,4 +206,4 @@ struct re_guts {
/* misc utilities */
#define OUT (CHAR_MAX+1) /* a non-character value */
#define ISWORD(c) (isalnum(c) || (c) == '_')
#define ISWORD(c) (isalnum((unsigned char)c) || (c) == '_')