Update libregexp with recent bug fixes from Plan 9.

This commit is contained in:
rsc 2004-03-05 05:13:56 +00:00
parent 4da83e7cce
commit 62390091b7
12 changed files with 111 additions and 81 deletions

View file

@ -5,12 +5,14 @@
extern void
rregsub(Rune *sp, /* source string */
Rune *dp, /* destination string */
int dlen,
Resub *mp, /* subexpression elements */
int ms) /* number of elements pointed to by mp */
{
Rune *ssp;
Rune *ssp, *ep;
int i;
ep = dp+(dlen/sizeof(Rune))-1;
while(*sp != '\0'){
if(*sp == '\\'){
switch(*++sp){
@ -29,16 +31,19 @@ rregsub(Rune *sp, /* source string */
for(ssp = mp[i].s.rsp;
ssp < mp[i].e.rep;
ssp++)
*dp++ = *ssp;
if(dp < ep)
*dp++ = *ssp;
break;
case '\\':
*dp++ = '\\';
if(dp < ep)
*dp++ = '\\';
break;
case '\0':
sp--;
break;
default:
*dp++ = *sp;
if(dp < ep)
*dp++ = *sp;
break;
}
}else if(*sp == '&'){
@ -46,9 +51,12 @@ rregsub(Rune *sp, /* source string */
if(mp[0].s.rsp != 0)
for(ssp = mp[0].s.rsp;
ssp < mp[0].e.rep; ssp++)
*dp++ = *ssp;
}else
*dp++ = *sp;
if(dp < ep)
*dp++ = *ssp;
}else{
if(dp < ep)
*dp++ = *sp;
}
sp++;
}
*dp = '\0';