/[pcre]/code/branches/pcre16/pcre_exec.c
ViewVC logotype

Diff of /code/branches/pcre16/pcre_exec.c

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

revision 781 by zherczeg, Sat Dec 3 07:58:30 2011 UTC revision 782 by zherczeg, Sat Dec 3 23:58:37 2011 UTC
# Line 2077  for (;;) Line 2077  for (;;)
2077          if (eptr == md->start_subject) prev_is_word = FALSE; else          if (eptr == md->start_subject) prev_is_word = FALSE; else
2078            {            {
2079            PCRE_PUCHAR lastptr = eptr - 1;            PCRE_PUCHAR lastptr = eptr - 1;
2080            while((*lastptr & 0xc0) == 0x80) lastptr--;            BACKCHAR(lastptr);
2081            if (lastptr < md->start_used_ptr) md->start_used_ptr = lastptr;            if (lastptr < md->start_used_ptr) md->start_used_ptr = lastptr;
2082            GETCHAR(c, lastptr);            GETCHAR(c, lastptr);
2083  #ifdef SUPPORT_UCP  #ifdef SUPPORT_UCP
# Line 2189  for (;;) Line 2189  for (;;)
2189        MRRETURN(MATCH_NOMATCH);        MRRETURN(MATCH_NOMATCH);
2190        }        }
2191      eptr++;      eptr++;
2192      if (utf) while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;  #ifdef SUPPORT_UTF
2193        if (utf) INTERNALCHAR(eptr < md->end_subject, *eptr, eptr++);
2194    #endif
2195      ecode++;      ecode++;
2196      break;      break;
2197    
# Line 4074  for (;;) Line 4076  for (;;)
4076    
4077  /* Handle all other cases when the coding is UTF-8 */  /* Handle all other cases when the coding is UTF-8 */
4078    
4079  #ifdef SUPPORT_UTF8  #ifdef SUPPORT_UTF
4080        if (utf) switch(ctype)        if (utf) switch(ctype)
4081          {          {
4082          case OP_ANY:          case OP_ANY:
# Line 4087  for (;;) Line 4089  for (;;)
4089              }              }
4090            if (IS_NEWLINE(eptr)) MRRETURN(MATCH_NOMATCH);            if (IS_NEWLINE(eptr)) MRRETURN(MATCH_NOMATCH);
4091            eptr++;            eptr++;
4092            while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;            INTERNALCHAR(eptr < md->end_subject, *eptr, eptr++);
4093            }            }
4094          break;          break;
4095    
# Line 4100  for (;;) Line 4102  for (;;)
4102              MRRETURN(MATCH_NOMATCH);              MRRETURN(MATCH_NOMATCH);
4103              }              }
4104            eptr++;            eptr++;
4105            while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;            INTERNALCHAR(eptr < md->end_subject, *eptr, eptr++);
4106            }            }
4107          break;          break;
4108    
# Line 4298  for (;;) Line 4300  for (;;)
4300              }              }
4301            if (*eptr < 128 && (md->ctypes[*eptr] & ctype_space) != 0)            if (*eptr < 128 && (md->ctypes[*eptr] & ctype_space) != 0)
4302              MRRETURN(MATCH_NOMATCH);              MRRETURN(MATCH_NOMATCH);
4303            while (++eptr < md->end_subject && (*eptr & 0xc0) == 0x80);            eptr++;
4304              INTERNALCHAR(eptr < md->end_subject, *eptr, eptr++);
4305            }            }
4306          break;          break;
4307    
# Line 4326  for (;;) Line 4329  for (;;)
4329              }              }
4330            if (*eptr < 128 && (md->ctypes[*eptr] & ctype_word) != 0)            if (*eptr < 128 && (md->ctypes[*eptr] & ctype_word) != 0)
4331              MRRETURN(MATCH_NOMATCH);              MRRETURN(MATCH_NOMATCH);
4332            while (++eptr < md->end_subject && (*eptr & 0xc0) == 0x80);            eptr++;
4333              INTERNALCHAR(eptr < md->end_subject, *eptr, eptr++);
4334            }            }
4335          break;          break;
4336    
# Line 5309  for (;;) Line 5313  for (;;)
5313        else        else
5314  #endif   /* SUPPORT_UCP */  #endif   /* SUPPORT_UCP */
5315    
5316  #ifdef SUPPORT_UTF8  #ifdef SUPPORT_UTF
5317        if (utf)        if (utf)
5318          {          {
5319          switch(ctype)          switch(ctype)
# Line 5326  for (;;) Line 5330  for (;;)
5330                  }                  }
5331                if (IS_NEWLINE(eptr)) break;                if (IS_NEWLINE(eptr)) break;
5332                eptr++;                eptr++;
5333                while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;                INTERNALCHAR(eptr < md->end_subject, *eptr, eptr++);
5334                }                }
5335              }              }
5336    
# Line 5343  for (;;) Line 5347  for (;;)
5347                  }                  }
5348                if (IS_NEWLINE(eptr)) break;                if (IS_NEWLINE(eptr)) break;
5349                eptr++;                eptr++;
5350                while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;                INTERNALCHAR(eptr < md->end_subject, *eptr, eptr++);
5351                }                }
5352              }              }
5353            break;            break;
# Line 5359  for (;;) Line 5363  for (;;)
5363                  break;                  break;
5364                  }                  }
5365                eptr++;                eptr++;
5366                while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;                INTERNALCHAR(eptr < md->end_subject, *eptr, eptr++);
5367                }                }
5368              }              }
5369            else            else
# Line 6014  if (utf && (options & PCRE_NO_UTF8_CHECK Line 6018  if (utf && (options & PCRE_NO_UTF8_CHECK
6018        PCRE_ERROR_SHORTUTF8 : PCRE_ERROR_BADUTF8;        PCRE_ERROR_SHORTUTF8 : PCRE_ERROR_BADUTF8;
6019      }      }
6020    
6021    /* Check that a start_offset points to the start of a UTF-8 character. */    /* Check that a start_offset points to the start of a UTF character. */
6022    #ifdef COMPILE_PCRE8
6023    if (start_offset > 0 && start_offset < length &&    if (start_offset > 0 && start_offset < length &&
6024        (((PCRE_PUCHAR)subject)[start_offset] & 0xc0) == 0x80)        (((PCRE_PUCHAR)subject)[start_offset] & 0xc0) == 0x80)
6025      return PCRE_ERROR_BADUTF8_OFFSET;      return PCRE_ERROR_BADUTF8_OFFSET;
6026    #else
6027    #ifdef COMPILE_PCRE16
6028      if (start_offset > 0 && start_offset < length &&
6029          (((PCRE_PUCHAR)subject)[start_offset] & 0xfc00) == 0xdc00)
6030        return PCRE_ERROR_BADUTF8_OFFSET;
6031    #endif /* COMPILE_PCRE16 */
6032    #endif /* COMPILE_PCRE8 */
6033    }    }
6034  #endif  #endif
6035    
# Line 6291  for(;;) Line 6303  for(;;)
6303    if (firstline)    if (firstline)
6304      {      {
6305      PCRE_PUCHAR t = start_match;      PCRE_PUCHAR t = start_match;
6306  #ifdef SUPPORT_UTF8  #ifdef SUPPORT_UTF
6307      if (utf)      if (utf)
6308        {        {
6309        while (t < md->end_subject && !IS_NEWLINE(t))        while (t < md->end_subject && !IS_NEWLINE(t))
6310          {          {
6311          t++;          t++;
6312          while (t < end_subject && (*t & 0xc0) == 0x80) t++;          INTERNALCHAR(t < end_subject, *t, t++);
6313          }          }
6314        }        }
6315      else      else
# Line 6333  for(;;) Line 6345  for(;;)
6345        {        {
6346        if (start_match > md->start_subject + start_offset)        if (start_match > md->start_subject + start_offset)
6347          {          {
6348  #ifdef SUPPORT_UTF8  #ifdef SUPPORT_UTF
6349          if (utf)          if (utf)
6350            {            {
6351            while (start_match < end_subject && !WAS_NEWLINE(start_match))            while (start_match < end_subject && !WAS_NEWLINE(start_match))
6352              {              {
6353              start_match++;              start_match++;
6354              while(start_match < end_subject && (*start_match & 0xc0) == 0x80)              INTERNALCHAR(start_match < end_subject, *start_match,
6355                start_match++;                start_match++);
6356              }              }
6357            }            }
6358          else          else
# Line 6366  for(;;) Line 6378  for(;;)
6378        {        {
6379        while (start_match < end_subject)        while (start_match < end_subject)
6380          {          {
6381  #ifdef COMPILE_PCRE8  #ifdef COMPILE_PCRE
6382          register unsigned int c = *start_match;          register unsigned int c = *start_match;
6383  #else  #else
6384          register unsigned int c = *start_match & 0xff;          register unsigned int c = *start_match & 0xff;
# Line 6374  for(;;) Line 6386  for(;;)
6386          if ((start_bits[c/8] & (1 << (c&7))) == 0)          if ((start_bits[c/8] & (1 << (c&7))) == 0)
6387            {            {
6388            start_match++;            start_match++;
6389  #ifdef SUPPORT_UTF8  #ifdef SUPPORT_UTF
6390            if (utf)            if (utf)
6391              while(start_match < end_subject && (*start_match & 0xc0) == 0x80)              INTERNALCHAR(start_match < end_subject, *start_match,
6392                start_match++;                start_match++);
6393  #endif  #endif
6394            }            }
6395          else break;          else break;
# Line 6506  for(;;) Line 6518  for(;;)
6518      case MATCH_PRUNE:      case MATCH_PRUNE:
6519      case MATCH_THEN:      case MATCH_THEN:
6520      new_start_match = start_match + 1;      new_start_match = start_match + 1;
6521  #ifdef SUPPORT_UTF8  #ifdef SUPPORT_UTF
6522      if (utf)      if (utf)
6523        while(new_start_match < end_subject && (*new_start_match & 0xc0) == 0x80)        INTERNALCHAR(new_start_match < end_subject, *new_start_match,
6524          new_start_match++;          new_start_match++);
6525  #endif  #endif
6526      break;      break;
6527    

Legend:
Removed from v.781  
changed lines
  Added in v.782

  ViewVC Help
Powered by ViewVC 1.1.5