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

Diff of /code/trunk/pcre_compile.c

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

revision 349 by ph10, Wed Jul 2 18:42:11 2008 UTC revision 369 by ph10, Sun Aug 24 16:53:47 2008 UTC
# Line 455  static const char * Line 455  static const char *
455  find_error_text(int n)  find_error_text(int n)
456  {  {
457  const char *s = error_texts;  const char *s = error_texts;
458  for (; n > 0; n--) while (*s++ != 0);  for (; n > 0; n--) while (*s++ != 0) {};
459  return s;  return s;
460  }  }
461    
# Line 1002  for (; *ptr != 0; ptr++) Line 1002  for (; *ptr != 0; ptr++)
1002      if (*(++ptr) == 0) return -1;      if (*(++ptr) == 0) return -1;
1003      if (*ptr == 'Q') for (;;)      if (*ptr == 'Q') for (;;)
1004        {        {
1005        while (*(++ptr) != 0 && *ptr != '\\');        while (*(++ptr) != 0 && *ptr != '\\') {};
1006        if (*ptr == 0) return -1;        if (*ptr == 0) return -1;
1007        if (*(++ptr) == 'E') break;        if (*(++ptr) == 'E') break;
1008        }        }
# Line 1045  for (; *ptr != 0; ptr++) Line 1045  for (; *ptr != 0; ptr++)
1045          if (*(++ptr) == 0) return -1;          if (*(++ptr) == 0) return -1;
1046          if (*ptr == 'Q') for (;;)          if (*ptr == 'Q') for (;;)
1047            {            {
1048            while (*(++ptr) != 0 && *ptr != '\\');            while (*(++ptr) != 0 && *ptr != '\\') {};
1049            if (*ptr == 0) return -1;            if (*ptr == 0) return -1;
1050            if (*(++ptr) == 'E') break;            if (*(++ptr) == 'E') break;
1051            }            }
# Line 1059  for (; *ptr != 0; ptr++) Line 1059  for (; *ptr != 0; ptr++)
1059    
1060    if (xmode && *ptr == '#')    if (xmode && *ptr == '#')
1061      {      {
1062      while (*(++ptr) != 0 && *ptr != '\n');      while (*(++ptr) != 0 && *ptr != '\n') {};
1063      if (*ptr == 0) return -1;      if (*ptr == 0) return -1;
1064      continue;      continue;
1065      }      }
# Line 1450  for (;;) Line 1450  for (;;)
1450        if (code[-1] >= 0xc0) code += _pcre_utf8_table4[code[-1] & 0x3f];        if (code[-1] >= 0xc0) code += _pcre_utf8_table4[code[-1] & 0x3f];
1451        break;        break;
1452        }        }
1453    #else
1454        (void)(utf8);  /* Keep compiler happy by referencing function argument */
1455  #endif  #endif
1456      }      }
1457    }    }
# Line 1543  for (;;) Line 1545  for (;;)
1545        if (code[-1] >= 0xc0) code += _pcre_utf8_table4[code[-1] & 0x3f];        if (code[-1] >= 0xc0) code += _pcre_utf8_table4[code[-1] & 0x3f];
1546        break;        break;
1547        }        }
1548    #else
1549        (void)(utf8);  /* Keep compiler happy by referencing function argument */
1550  #endif  #endif
1551      }      }
1552    }    }
# Line 2134  if (next >= 0) switch(op_code) Line 2138  if (next >= 0) switch(op_code)
2138    case OP_CHAR:    case OP_CHAR:
2139  #ifdef SUPPORT_UTF8  #ifdef SUPPORT_UTF8
2140    if (utf8 && item > 127) { GETCHAR(item, utf8_char); }    if (utf8 && item > 127) { GETCHAR(item, utf8_char); }
2141    #else
2142      (void)(utf8_char);  /* Keep compiler happy by referencing function argument */
2143  #endif  #endif
2144    return item != next;    return item != next;
2145    
# Line 4216  we set the flag only if there is a liter Line 4222  we set the flag only if there is a liter
4222        const char *vn = verbnames;        const char *vn = verbnames;
4223        const uschar *name = ++ptr;        const uschar *name = ++ptr;
4224        previous = NULL;        previous = NULL;
4225        while ((cd->ctypes[*++ptr] & ctype_letter) != 0);        while ((cd->ctypes[*++ptr] & ctype_letter) != 0) {};
4226        if (*ptr == ':')        if (*ptr == ':')
4227          {          {
4228          *errorcodeptr = ERR59;   /* Not supported */          *errorcodeptr = ERR59;   /* Not supported */
# Line 4920  we set the flag only if there is a liter Line 4926  we set the flag only if there is a liter
4926          both phases.          both phases.
4927    
4928          If we are not at the pattern start, compile code to change the ims          If we are not at the pattern start, compile code to change the ims
4929          options if this setting actually changes any of them. We also pass the          options if this setting actually changes any of them, and reset the
4930          new setting back so that it can be put at the start of any following          greedy defaults and the case value for firstbyte and reqbyte. */
         branches, and when this group ends (if we are in a group), a resetting  
         item can be compiled. */  
4931    
4932          if (*ptr == ')')          if (*ptr == ')')
4933            {            {
# Line 4931  we set the flag only if there is a liter Line 4935  we set the flag only if there is a liter
4935                 (lengthptr == NULL || *lengthptr == 2 + 2*LINK_SIZE))                 (lengthptr == NULL || *lengthptr == 2 + 2*LINK_SIZE))
4936              {              {
4937              cd->external_options = newoptions;              cd->external_options = newoptions;
             options = newoptions;  
4938              }              }
4939           else           else
4940              {              {
# Line 4940  we set the flag only if there is a liter Line 4943  we set the flag only if there is a liter
4943                *code++ = OP_OPT;                *code++ = OP_OPT;
4944                *code++ = newoptions & PCRE_IMS;                *code++ = newoptions & PCRE_IMS;
4945                }                }
   
             /* Change options at this level, and pass them back for use  
             in subsequent branches. Reset the greedy defaults and the case  
             value for firstbyte and reqbyte. */  
   
             *optionsptr = options = newoptions;  
4946              greedy_default = ((newoptions & PCRE_UNGREEDY) != 0);              greedy_default = ((newoptions & PCRE_UNGREEDY) != 0);
4947              greedy_non_default = greedy_default ^ 1;              greedy_non_default = greedy_default ^ 1;
4948              req_caseopt = ((options & PCRE_CASELESS) != 0)? REQ_CASELESS : 0;              req_caseopt = ((newoptions & PCRE_CASELESS) != 0)? REQ_CASELESS : 0;
4949              }              }
4950    
4951              /* Change options at this level, and pass them back for use
4952              in subsequent branches. When not at the start of the pattern, this
4953              information is also necessary so that a resetting item can be
4954              compiled at the end of a group (if we are in a group). */
4955    
4956              *optionsptr = options = newoptions;
4957            previous = NULL;       /* This item can't be repeated */            previous = NULL;       /* This item can't be repeated */
4958            continue;              /* It is complete */            continue;              /* It is complete */
4959            }            }
# Line 5944  Returns:        pointer to compiled data Line 5947  Returns:        pointer to compiled data
5947                  with errorptr and erroroffset set                  with errorptr and erroroffset set
5948  */  */
5949    
5950  PCRE_EXP_DEFN pcre *  PCRE_EXP_DEFN pcre * PCRE_CALL_CONVENTION
5951  pcre_compile(const char *pattern, int options, const char **errorptr,  pcre_compile(const char *pattern, int options, const char **errorptr,
5952    int *erroroffset, const unsigned char *tables)    int *erroroffset, const unsigned char *tables)
5953  {  {
# Line 5952  return pcre_compile2(pattern, options, N Line 5955  return pcre_compile2(pattern, options, N
5955  }  }
5956    
5957    
5958  PCRE_EXP_DEFN pcre *  PCRE_EXP_DEFN pcre * PCRE_CALL_CONVENTION
5959  pcre_compile2(const char *pattern, int options, int *errorcodeptr,  pcre_compile2(const char *pattern, int options, int *errorcodeptr,
5960    const char **errorptr, int *erroroffset, const unsigned char *tables)    const char **errorptr, int *erroroffset, const unsigned char *tables)
5961  {  {

Legend:
Removed from v.349  
changed lines
  Added in v.369

  ViewVC Help
Powered by ViewVC 1.1.5