[BACK]Return to re_search.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / mg

Diff for /src/usr.bin/mg/re_search.c between version 1.2 and 1.3

version 1.2, 2000/02/28 23:45:21 version 1.3, 2000/02/29 01:44:33
Line 390 
Line 390 
   
   register LINE *clp;    register LINE *clp;
   register int tbo;    register int tbo;
   int error, startpos;    regmatch_t lastmatch;
   char m[1];    char m[1];
   
   clp = curwp->w_dotp;    clp = curwp->w_dotp;
Line 410 
Line 410 
   
   while (clp != (curbp->b_linep)) {    while (clp != (curbp->b_linep)) {
   
      re_match[0].rm_so = tbo;       re_match[0].rm_so = 0;
      re_match[0].rm_eo = llength(clp);       re_match[0].rm_eo = tbo;
      /* XXX - does not search backwards! */       lastmatch.rm_so = -1;
      error = regexec(&re_buff, ltext(clp), RE_NMATCH, re_match, REG_STARTEND);       /* Keep searching until we don't match any longer.  Assumes a non-match
           does not modify the re_match array.
        */
        while (!regexec(&re_buff, ltext(clp), RE_NMATCH, re_match, REG_STARTEND)) {
          memcpy(&lastmatch, &re_match[0], sizeof(regmatch_t));
          if (re_match[0].rm_eo >= tbo)
            break;
          re_match[0].rm_so = re_match[0].rm_eo;
          re_match[0].rm_eo = tbo;
        }
   
      if (error) {       if (lastmatch.rm_so == -1) {
        clp = lback(clp);         clp = lback(clp);
        tbo = llength(clp);         tbo = llength(clp);
      } else {       } else {
          memcpy(&re_match[0], &lastmatch, sizeof(regmatch_t));
        curwp->w_doto = re_match[0].rm_so;         curwp->w_doto = re_match[0].rm_so;
        curwp->w_dotp = clp;         curwp->w_dotp = clp;
        curwp->w_flag |= WFMOVE;         curwp->w_flag |= WFMOVE;

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3