/[pcre]/code/trunk/pcre_exec.c
ViewVC logotype

Diff of /code/trunk/pcre_exec.c

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

revision 428 by ph10, Mon Aug 31 17:10:26 2009 UTC revision 435 by ph10, Sat Sep 5 10:20:44 2009 UTC
# Line 408  immediately. The second one is used when Line 408  immediately. The second one is used when
408  the subject. */  the subject. */
409    
410  #define CHECK_PARTIAL()\  #define CHECK_PARTIAL()\
411    if (md->partial && eptr >= md->end_subject && eptr > mstart)\    if (md->partial != 0 && eptr >= md->end_subject && eptr > mstart)\
412      {\      {\
413      md->hitend = TRUE;\      md->hitend = TRUE;\
414      if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);\      if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);\
# Line 1024  for (;;) Line 1024  for (;;)
1024        if (eptr < md->start_subject) RRETURN(MATCH_NOMATCH);        if (eptr < md->start_subject) RRETURN(MATCH_NOMATCH);
1025        }        }
1026    
1027      /* Skip to next op code */      /* Save the earliest consulted character, then skip to next op code */
1028    
1029        if (eptr < md->start_used_ptr) md->start_used_ptr = eptr;
1030      ecode += 1 + LINK_SIZE;      ecode += 1 + LINK_SIZE;
1031      break;      break;
1032    
# Line 1468  for (;;) Line 1469  for (;;)
1469    
1470        /* Find out if the previous and current characters are "word" characters.        /* Find out if the previous and current characters are "word" characters.
1471        It takes a bit more work in UTF-8 mode. Characters > 255 are assumed to        It takes a bit more work in UTF-8 mode. Characters > 255 are assumed to
1472        be "non-word" characters. */        be "non-word" characters. Remember the earliest consulted character for
1473          partial matching. */
1474    
1475  #ifdef SUPPORT_UTF8  #ifdef SUPPORT_UTF8
1476        if (utf8)        if (utf8)
# Line 1477  for (;;) Line 1479  for (;;)
1479            {            {
1480            USPTR lastptr = eptr - 1;            USPTR lastptr = eptr - 1;
1481            while((*lastptr & 0xc0) == 0x80) lastptr--;            while((*lastptr & 0xc0) == 0x80) lastptr--;
1482              if (lastptr < md->start_used_ptr) md->start_used_ptr = lastptr;
1483            GETCHAR(c, lastptr);            GETCHAR(c, lastptr);
1484            prev_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0;            prev_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0;
1485            }            }
# Line 1497  for (;;) Line 1500  for (;;)
1500        /* Not in UTF-8 mode */        /* Not in UTF-8 mode */
1501    
1502          {          {
1503          prev_is_word = (eptr != md->start_subject) &&          if (eptr == md->start_subject) prev_is_word = FALSE; else
1504            ((md->ctypes[eptr[-1]] & ctype_word) != 0);            {
1505              if (eptr <= md->start_used_ptr) md->start_used_ptr = eptr - 1;
1506              prev_is_word = ((md->ctypes[eptr[-1]] & ctype_word) != 0);
1507              }
1508          if (eptr >= md->end_subject)          if (eptr >= md->end_subject)
1509            {            {
1510            SCHECK_PARTIAL();            SCHECK_PARTIAL();
# Line 5277  for(;;) Line 5283  for(;;)
5283    first starting point for which a partial match was found. */    first starting point for which a partial match was found. */
5284    
5285    md->start_match_ptr = start_match;    md->start_match_ptr = start_match;
5286      md->start_used_ptr = start_match;
5287    md->match_call_count = 0;    md->match_call_count = 0;
5288    rc = match(start_match, md->start_code, start_match, 2, md, ims, NULL, 0, 0);    rc = match(start_match, md->start_code, start_match, 2, md, ims, NULL, 0, 0);
5289    if (md->hitend && start_partial == NULL) start_partial = start_match;    if (md->hitend && start_partial == NULL) start_partial = md->start_used_ptr;
5290    
5291    switch(rc)    switch(rc)
5292      {      {

Legend:
Removed from v.428  
changed lines
  Added in v.435

  ViewVC Help
Powered by ViewVC 1.1.5