/[anubis]/anubis/src/regex.c
ViewVC logotype

Diff of /anubis/src/regex.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.9 by gray, Thu Jun 19 16:47:32 2003 UTC revision 1.10 by gray, Fri Jun 20 15:08:43 2003 UTC
# Line 110  anubis_regex_replace(RC_REGEX *re, char Line 110  anubis_regex_replace(RC_REGEX *re, char
110          int so, eo;          int so, eo;
111          int refc;          int refc;
112          char **refv;          char **refv;
113            char *newstr = NULL;
114            char *savep = NULL;
115            int newlen;
116            int off = 0;
117            int alloc = 0;
118          struct regex_vtab *vp = regex_vtab_lookup(re->flags);          struct regex_vtab *vp = regex_vtab_lookup(re->flags);
119                    
120          if (!vp)          if (!vp)
121                  return NULL;                  return NULL;
122          if (vp->match(re, line, &refc, &refv, &so, &eo) == 0) {          while (vp->match(re, line + off, &refc, &refv, &so, &eo) == 0) {
123                  char *p = substitute(repl, refv);                  char *p;
124                  int plen = strlen(p);                  int plen;
125                  int newlen = strlen(line) - (eo - so) + plen + 1;                  
126                  char *newstr = xmalloc(newlen);                  if (so == -1) {
127                            char *q;
128                  memcpy(newstr, line, so);                          
129                  memcpy(newstr + so, p, strlen(p));                          alloc = 0;
130                  strcpy(newstr + so + plen, line + eo);                          p = repl;
131                            plen = strlen(p);
132                            q = strstr(line + off, anubis_regex_source(re));
133                            
134                            so = (q - (line + off));
135                            eo = so + strlen(anubis_regex_source(re));
136                    } else {
137                            alloc = 1;
138                            p = substitute(repl, refv);
139                            plen = strlen(p);
140                            xfree_pptr(refv);
141                    }
142    
143                  xfree_pptr(refv);                  savep = newstr;
144                  return newstr;                  newlen = strlen(line) - (eo - so) + plen + 1;
145                    newstr = xmalloc(newlen);
146                    memcpy(newstr, line, off + so);
147                    memcpy(newstr + off + so, p, plen);
148                    strcpy(newstr + off + so + plen, line + off + eo);
149    
150                    if (alloc)
151                            xfree(p);
152                    if (savep)
153                            xfree(savep);
154                    line = newstr;
155                    off += eo;
156          }          }
157          return NULL;          return newstr;
158  }  }
159    
160  int  int
# Line 232  posix_match(RC_REGEX *regex, char *line, Line 259  posix_match(RC_REGEX *regex, char *line,
259                  }                  }
260                  (*refv)[i] = NULL;                  (*refv)[i] = NULL;
261                  *refc = re->re_nsub;                  *refc = re->re_nsub;
262          } else          } else {
263                    *eo = *so = -1;
264                  *refc = 0;                  *refc = 0;
265            }
266          xfree(rmp);          xfree(rmp);
267          return rc;          return rc;
268  }  }
# Line 316  perl_match(RC_REGEX *regex, char *line, Line 345  perl_match(RC_REGEX *regex, char *line,
345                  *refc = count;                  *refc = count;
346                  *so = ovector[0];                  *so = ovector[0];
347                  *eo = ovector[1];                  *eo = ovector[1];
348          } else                    } else {
349                    *so = *eo = -1;
350                  *refc = 0;                  *refc = 0;
351            }
352          xfree(ovector);          xfree(ovector);
353          return rc < 0;          return rc < 0;
354  }  }

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26