Annotation of win32/pcre/pcre_internal.h, revision 1.2

1.1       misha       1: /*************************************************
                      2: *      Perl-Compatible Regular Expressions       *
                      3: *************************************************/
                      4: 
                      5: 
                      6: /* PCRE is a library of functions to support regular expressions whose syntax
                      7: and semantics are as close as possible to those of the Perl 5 language.
                      8: 
                      9:                        Written by Philip Hazel
                     10:            Copyright (c) 1997-2008 University of Cambridge
                     11: 
                     12: -----------------------------------------------------------------------------
                     13: Redistribution and use in source and binary forms, with or without
                     14: modification, are permitted provided that the following conditions are met:
                     15: 
                     16:     * Redistributions of source code must retain the above copyright notice,
                     17:       this list of conditions and the following disclaimer.
                     18: 
                     19:     * Redistributions in binary form must reproduce the above copyright
                     20:       notice, this list of conditions and the following disclaimer in the
                     21:       documentation and/or other materials provided with the distribution.
                     22: 
                     23:     * Neither the name of the University of Cambridge nor the names of its
                     24:       contributors may be used to endorse or promote products derived from
                     25:       this software without specific prior written permission.
                     26: 
                     27: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
                     28: AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     29: IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     30: ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
                     31: LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
                     32: CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
                     33: SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
                     34: INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
                     35: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
                     36: ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     37: POSSIBILITY OF SUCH DAMAGE.
                     38: -----------------------------------------------------------------------------
                     39: */
                     40: 
                     41: /* This header contains definitions that are shared between the different
                     42: modules, but which are not relevant to the exported API. This includes some
                     43: functions whose names all begin with "_pcre_". */
                     44: 
                     45: #ifndef PCRE_INTERNAL_H
                     46: #define PCRE_INTERNAL_H
                     47: 
                     48: /* Define DEBUG to get debugging output on stdout. */
                     49: 
                     50: #if 0
                     51: #define DEBUG
                     52: #endif
                     53: 
                     54: /* Use a macro for debugging printing, 'cause that eliminates the use of #ifdef
                     55: inline, and there are *still* stupid compilers about that don't like indented
                     56: pre-processor statements, or at least there were when I first wrote this. After
                     57: all, it had only been about 10 years then...
                     58: 
                     59: It turns out that the Mac Debugging.h header also defines the macro DPRINTF, so
                     60: be absolutely sure we get our version. */
                     61: 
                     62: #undef DPRINTF
                     63: #ifdef DEBUG
                     64: #define DPRINTF(p) printf p
                     65: #else
                     66: #define DPRINTF(p) /* Nothing */
                     67: #endif
                     68: 
                     69: 
                     70: /* Standard C headers plus the external interface definition. The only time
                     71: setjmp and stdarg are used is when NO_RECURSE is set. */
                     72: 
                     73: #include <ctype.h>
                     74: #include <limits.h>
                     75: #include <setjmp.h>
                     76: #include <stdarg.h>
                     77: #include <stddef.h>
                     78: #include <stdio.h>
                     79: #include <stdlib.h>
                     80: #include <string.h>
                     81: 
                     82: /* When compiling a DLL for Windows, the exported symbols have to be declared
                     83: using some MS magic. I found some useful information on this web page:
                     84: http://msdn2.microsoft.com/en-us/library/y4h7bcy6(VS.80).aspx. According to the
                     85: information there, using __declspec(dllexport) without "extern" we have a
                     86: definition; with "extern" we have a declaration. The settings here override the
                     87: setting in pcre.h (which is included below); it defines only PCRE_EXP_DECL,
                     88: which is all that is needed for applications (they just import the symbols). We
                     89: use:
                     90: 
                     91:   PCRE_EXP_DECL       for declarations
                     92:   PCRE_EXP_DEFN       for definitions of exported functions
                     93:   PCRE_EXP_DATA_DEFN  for definitions of exported variables
                     94: 
                     95: The reason for the two DEFN macros is that in non-Windows environments, one
                     96: does not want to have "extern" before variable definitions because it leads to
                     97: compiler warnings. So we distinguish between functions and variables. In
                     98: Windows, the two should always be the same.
                     99: 
                    100: The reason for wrapping this in #ifndef PCRE_EXP_DECL is so that pcretest,
                    101: which is an application, but needs to import this file in order to "peek" at
                    102: internals, can #include pcre.h first to get an application's-eye view.
                    103: 
                    104: In principle, people compiling for non-Windows, non-Unix-like (i.e. uncommon,
                    105: special-purpose environments) might want to stick other stuff in front of
                    106: exported symbols. That's why, in the non-Windows case, we set PCRE_EXP_DEFN and
                    107: PCRE_EXP_DATA_DEFN only if they are not already set. */
                    108: 
                    109: #ifndef PCRE_EXP_DECL
                    110: #  ifdef _WIN32
                    111: #    ifndef PCRE_STATIC
                    112: #      define PCRE_EXP_DECL       extern __declspec(dllexport)
                    113: #      define PCRE_EXP_DEFN       __declspec(dllexport)
                    114: #      define PCRE_EXP_DATA_DEFN  __declspec(dllexport)
                    115: #    else
                    116: #      define PCRE_EXP_DECL       extern
                    117: #      define PCRE_EXP_DEFN
                    118: #      define PCRE_EXP_DATA_DEFN
                    119: #    endif
                    120: #  else
                    121: #    ifdef __cplusplus
                    122: #      define PCRE_EXP_DECL       extern "C"
                    123: #    else
                    124: #      define PCRE_EXP_DECL       extern
                    125: #    endif
                    126: #    ifndef PCRE_EXP_DEFN
                    127: #      define PCRE_EXP_DEFN       PCRE_EXP_DECL
                    128: #    endif
                    129: #    ifndef PCRE_EXP_DATA_DEFN
                    130: #      define PCRE_EXP_DATA_DEFN
                    131: #    endif
                    132: #  endif
                    133: #endif
                    134: 
1.2     ! misha     135: /* When compiling with the MSVC compiler, it is sometimes necessary to include
        !           136: a "calling convention" before exported function names. (This is secondhand
        !           137: information; I know nothing about MSVC myself). For example, something like
        !           138: 
        !           139:   void __cdecl function(....)
        !           140: 
        !           141: might be needed. In order so make this easy, all the exported functions have
        !           142: PCRE_CALL_CONVENTION just before their names. It is rarely needed; if not
        !           143: set, we ensure here that it has no effect. */
        !           144: 
        !           145: #ifndef PCRE_CALL_CONVENTION
        !           146: #define PCRE_CALL_CONVENTION
        !           147: #endif
        !           148: 
1.1       misha     149: /* We need to have types that specify unsigned 16-bit and 32-bit integers. We
                    150: cannot determine these outside the compilation (e.g. by running a program as
                    151: part of "configure") because PCRE is often cross-compiled for use on other
                    152: systems. Instead we make use of the maximum sizes that are available at
                    153: preprocessor time in standard C environments. */
                    154: 
                    155: #if USHRT_MAX == 65535
                    156:   typedef unsigned short pcre_uint16;
1.2     ! misha     157:   typedef short pcre_int16;
1.1       misha     158: #elif UINT_MAX == 65535
                    159:   typedef unsigned int pcre_uint16;
1.2     ! misha     160:   typedef int pcre_int16;
1.1       misha     161: #else
                    162:   #error Cannot determine a type for 16-bit unsigned integers
                    163: #endif
                    164: 
                    165: #if UINT_MAX == 4294967295
                    166:   typedef unsigned int pcre_uint32;
1.2     ! misha     167:   typedef int pcre_int32;
1.1       misha     168: #elif ULONG_MAX == 4294967295
                    169:   typedef unsigned long int pcre_uint32;
1.2     ! misha     170:   typedef long int pcre_int32;
1.1       misha     171: #else
                    172:   #error Cannot determine a type for 32-bit unsigned integers
                    173: #endif
                    174: 
                    175: /* All character handling must be done as unsigned characters. Otherwise there
                    176: are problems with top-bit-set characters and functions such as isspace().
                    177: However, we leave the interface to the outside world as char *, because that
                    178: should make things easier for callers. We define a short type for unsigned char
                    179: to save lots of typing. I tried "uchar", but it causes problems on Digital
                    180: Unix, where it is defined in sys/types, so use "uschar" instead. */
                    181: 
                    182: typedef unsigned char uschar;
                    183: 
                    184: /* This is an unsigned int value that no character can ever have. UTF-8
                    185: characters only go up to 0x7fffffff (though Unicode doesn't go beyond
                    186: 0x0010ffff). */
                    187: 
                    188: #define NOTACHAR 0xffffffff
                    189: 
                    190: /* PCRE is able to support several different kinds of newline (CR, LF, CRLF,
                    191: "any" and "anycrlf" at present). The following macros are used to package up
                    192: testing for newlines. NLBLOCK, PSSTART, and PSEND are defined in the various
                    193: modules to indicate in which datablock the parameters exist, and what the
                    194: start/end of string field names are. */
                    195: 
                    196: #define NLTYPE_FIXED    0     /* Newline is a fixed length string */
                    197: #define NLTYPE_ANY      1     /* Newline is any Unicode line ending */
                    198: #define NLTYPE_ANYCRLF  2     /* Newline is CR, LF, or CRLF */
                    199: 
                    200: /* This macro checks for a newline at the given position */
                    201: 
                    202: #define IS_NEWLINE(p) \
                    203:   ((NLBLOCK->nltype != NLTYPE_FIXED)? \
                    204:     ((p) < NLBLOCK->PSEND && \
                    205:      _pcre_is_newline((p), NLBLOCK->nltype, NLBLOCK->PSEND, &(NLBLOCK->nllen),\
                    206:        utf8)) \
                    207:     : \
                    208:     ((p) <= NLBLOCK->PSEND - NLBLOCK->nllen && \
                    209:      (p)[0] == NLBLOCK->nl[0] && \
                    210:      (NLBLOCK->nllen == 1 || (p)[1] == NLBLOCK->nl[1]) \
                    211:     ) \
                    212:   )
                    213: 
                    214: /* This macro checks for a newline immediately preceding the given position */
                    215: 
                    216: #define WAS_NEWLINE(p) \
                    217:   ((NLBLOCK->nltype != NLTYPE_FIXED)? \
                    218:     ((p) > NLBLOCK->PSSTART && \
                    219:      _pcre_was_newline((p), NLBLOCK->nltype, NLBLOCK->PSSTART, \
                    220:        &(NLBLOCK->nllen), utf8)) \
                    221:     : \
                    222:     ((p) >= NLBLOCK->PSSTART + NLBLOCK->nllen && \
                    223:      (p)[-NLBLOCK->nllen] == NLBLOCK->nl[0] && \
                    224:      (NLBLOCK->nllen == 1 || (p)[-NLBLOCK->nllen+1] == NLBLOCK->nl[1]) \
                    225:     ) \
                    226:   )
                    227: 
                    228: /* When PCRE is compiled as a C++ library, the subject pointer can be replaced
                    229: with a custom type. This makes it possible, for example, to allow pcre_exec()
                    230: to process subject strings that are discontinuous by using a smart pointer
                    231: class. It must always be possible to inspect all of the subject string in
                    232: pcre_exec() because of the way it backtracks. Two macros are required in the
                    233: normal case, for sign-unspecified and unsigned char pointers. The former is
                    234: used for the external interface and appears in pcre.h, which is why its name
                    235: must begin with PCRE_. */
                    236: 
                    237: #ifdef CUSTOM_SUBJECT_PTR
                    238: #define PCRE_SPTR CUSTOM_SUBJECT_PTR
                    239: #define USPTR CUSTOM_SUBJECT_PTR
                    240: #else
                    241: #define PCRE_SPTR const char *
                    242: #define USPTR const unsigned char *
                    243: #endif
                    244: 
                    245: 
                    246: 
                    247: /* Include the public PCRE header and the definitions of UCP character property
                    248: values. */
                    249: 
                    250: #include "pcre.h"
                    251: #include "ucp.h"
                    252: 
                    253: /* When compiling for use with the Virtual Pascal compiler, these functions
                    254: need to have their names changed. PCRE must be compiled with the -DVPCOMPAT
                    255: option on the command line. */
                    256: 
                    257: #ifdef VPCOMPAT
                    258: #define strlen(s)        _strlen(s)
                    259: #define strncmp(s1,s2,m) _strncmp(s1,s2,m)
                    260: #define memcmp(s,c,n)    _memcmp(s,c,n)
                    261: #define memcpy(d,s,n)    _memcpy(d,s,n)
                    262: #define memmove(d,s,n)   _memmove(d,s,n)
                    263: #define memset(s,c,n)    _memset(s,c,n)
                    264: #else  /* VPCOMPAT */
                    265: 
                    266: /* To cope with SunOS4 and other systems that lack memmove() but have bcopy(),
                    267: define a macro for memmove() if HAVE_MEMMOVE is false, provided that HAVE_BCOPY
                    268: is set. Otherwise, include an emulating function for those systems that have
                    269: neither (there some non-Unix environments where this is the case). */
                    270: 
                    271: #ifndef HAVE_MEMMOVE
                    272: #undef  memmove        /* some systems may have a macro */
                    273: #ifdef HAVE_BCOPY
                    274: #define memmove(a, b, c) bcopy(b, a, c)
                    275: #else  /* HAVE_BCOPY */
                    276: static void *
                    277: pcre_memmove(void *d, const void *s, size_t n)
                    278: {
                    279: size_t i;
                    280: unsigned char *dest = (unsigned char *)d;
                    281: const unsigned char *src = (const unsigned char *)s;
                    282: if (dest > src)
                    283:   {
                    284:   dest += n;
                    285:   src += n;
                    286:   for (i = 0; i < n; ++i) *(--dest) = *(--src);
                    287:   return (void *)dest;
                    288:   }
                    289: else
                    290:   {
                    291:   for (i = 0; i < n; ++i) *dest++ = *src++;
                    292:   return (void *)(dest - n);
                    293:   }
                    294: }
                    295: #define memmove(a, b, c) pcre_memmove(a, b, c)
                    296: #endif   /* not HAVE_BCOPY */
                    297: #endif   /* not HAVE_MEMMOVE */
                    298: #endif   /* not VPCOMPAT */
                    299: 
                    300: 
                    301: /* PCRE keeps offsets in its compiled code as 2-byte quantities (always stored
                    302: in big-endian order) by default. These are used, for example, to link from the
                    303: start of a subpattern to its alternatives and its end. The use of 2 bytes per
                    304: offset limits the size of the compiled regex to around 64K, which is big enough
                    305: for almost everybody. However, I received a request for an even bigger limit.
                    306: For this reason, and also to make the code easier to maintain, the storing and
                    307: loading of offsets from the byte string is now handled by the macros that are
                    308: defined here.
                    309: 
                    310: The macros are controlled by the value of LINK_SIZE. This defaults to 2 in
                    311: the config.h file, but can be overridden by using -D on the command line. This
                    312: is automated on Unix systems via the "configure" command. */
                    313: 
                    314: #if LINK_SIZE == 2
                    315: 
                    316: #define PUT(a,n,d)   \
                    317:   (a[n] = (d) >> 8), \
                    318:   (a[(n)+1] = (d) & 255)
                    319: 
                    320: #define GET(a,n) \
                    321:   (((a)[n] << 8) | (a)[(n)+1])
                    322: 
                    323: #define MAX_PATTERN_SIZE (1 << 16)
                    324: 
                    325: 
                    326: #elif LINK_SIZE == 3
                    327: 
                    328: #define PUT(a,n,d)       \
                    329:   (a[n] = (d) >> 16),    \
                    330:   (a[(n)+1] = (d) >> 8), \
                    331:   (a[(n)+2] = (d) & 255)
                    332: 
                    333: #define GET(a,n) \
                    334:   (((a)[n] << 16) | ((a)[(n)+1] << 8) | (a)[(n)+2])
                    335: 
                    336: #define MAX_PATTERN_SIZE (1 << 24)
                    337: 
                    338: 
                    339: #elif LINK_SIZE == 4
                    340: 
                    341: #define PUT(a,n,d)        \
                    342:   (a[n] = (d) >> 24),     \
                    343:   (a[(n)+1] = (d) >> 16), \
                    344:   (a[(n)+2] = (d) >> 8),  \
                    345:   (a[(n)+3] = (d) & 255)
                    346: 
                    347: #define GET(a,n) \
                    348:   (((a)[n] << 24) | ((a)[(n)+1] << 16) | ((a)[(n)+2] << 8) | (a)[(n)+3])
                    349: 
                    350: #define MAX_PATTERN_SIZE (1 << 30)   /* Keep it positive */
                    351: 
                    352: 
                    353: #else
                    354: #error LINK_SIZE must be either 2, 3, or 4
                    355: #endif
                    356: 
                    357: 
                    358: /* Convenience macro defined in terms of the others */
                    359: 
                    360: #define PUTINC(a,n,d)   PUT(a,n,d), a += LINK_SIZE
                    361: 
                    362: 
                    363: /* PCRE uses some other 2-byte quantities that do not change when the size of
                    364: offsets changes. There are used for repeat counts and for other things such as
                    365: capturing parenthesis numbers in back references. */
                    366: 
                    367: #define PUT2(a,n,d)   \
                    368:   a[n] = (d) >> 8; \
                    369:   a[(n)+1] = (d) & 255
                    370: 
                    371: #define GET2(a,n) \
                    372:   (((a)[n] << 8) | (a)[(n)+1])
                    373: 
                    374: #define PUT2INC(a,n,d)  PUT2(a,n,d), a += 2
                    375: 
                    376: 
                    377: /* When UTF-8 encoding is being used, a character is no longer just a single
                    378: byte. The macros for character handling generate simple sequences when used in
                    379: byte-mode, and more complicated ones for UTF-8 characters. BACKCHAR should
                    380: never be called in byte mode. To make sure it can never even appear when UTF-8
                    381: support is omitted, we don't even define it. */
                    382: 
                    383: #ifndef SUPPORT_UTF8
                    384: #define GETCHAR(c, eptr) c = *eptr;
                    385: #define GETCHARTEST(c, eptr) c = *eptr;
                    386: #define GETCHARINC(c, eptr) c = *eptr++;
                    387: #define GETCHARINCTEST(c, eptr) c = *eptr++;
                    388: #define GETCHARLEN(c, eptr, len) c = *eptr;
                    389: /* #define BACKCHAR(eptr) */
                    390: 
                    391: #else   /* SUPPORT_UTF8 */
                    392: 
                    393: /* Get the next UTF-8 character, not advancing the pointer. This is called when
                    394: we know we are in UTF-8 mode. */
                    395: 
                    396: #define GETCHAR(c, eptr) \
                    397:   c = *eptr; \
                    398:   if (c >= 0xc0) \
                    399:     { \
                    400:     int gcii; \
                    401:     int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
                    402:     int gcss = 6*gcaa; \
                    403:     c = (c & _pcre_utf8_table3[gcaa]) << gcss; \
                    404:     for (gcii = 1; gcii <= gcaa; gcii++) \
                    405:       { \
                    406:       gcss -= 6; \
                    407:       c |= (eptr[gcii] & 0x3f) << gcss; \
                    408:       } \
                    409:     }
                    410: 
                    411: /* Get the next UTF-8 character, testing for UTF-8 mode, and not advancing the
                    412: pointer. */
                    413: 
                    414: #define GETCHARTEST(c, eptr) \
                    415:   c = *eptr; \
                    416:   if (utf8 && c >= 0xc0) \
                    417:     { \
                    418:     int gcii; \
                    419:     int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
                    420:     int gcss = 6*gcaa; \
                    421:     c = (c & _pcre_utf8_table3[gcaa]) << gcss; \
                    422:     for (gcii = 1; gcii <= gcaa; gcii++) \
                    423:       { \
                    424:       gcss -= 6; \
                    425:       c |= (eptr[gcii] & 0x3f) << gcss; \
                    426:       } \
                    427:     }
                    428: 
                    429: /* Get the next UTF-8 character, advancing the pointer. This is called when we
                    430: know we are in UTF-8 mode. */
                    431: 
                    432: #define GETCHARINC(c, eptr) \
                    433:   c = *eptr++; \
                    434:   if (c >= 0xc0) \
                    435:     { \
                    436:     int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
                    437:     int gcss = 6*gcaa; \
                    438:     c = (c & _pcre_utf8_table3[gcaa]) << gcss; \
                    439:     while (gcaa-- > 0) \
                    440:       { \
                    441:       gcss -= 6; \
                    442:       c |= (*eptr++ & 0x3f) << gcss; \
                    443:       } \
                    444:     }
                    445: 
                    446: /* Get the next character, testing for UTF-8 mode, and advancing the pointer */
                    447: 
                    448: #define GETCHARINCTEST(c, eptr) \
                    449:   c = *eptr++; \
                    450:   if (utf8 && c >= 0xc0) \
                    451:     { \
                    452:     int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
                    453:     int gcss = 6*gcaa; \
                    454:     c = (c & _pcre_utf8_table3[gcaa]) << gcss; \
                    455:     while (gcaa-- > 0) \
                    456:       { \
                    457:       gcss -= 6; \
                    458:       c |= (*eptr++ & 0x3f) << gcss; \
                    459:       } \
                    460:     }
                    461: 
                    462: /* Get the next UTF-8 character, not advancing the pointer, incrementing length
                    463: if there are extra bytes. This is called when we know we are in UTF-8 mode. */
                    464: 
                    465: #define GETCHARLEN(c, eptr, len) \
                    466:   c = *eptr; \
                    467:   if (c >= 0xc0) \
                    468:     { \
                    469:     int gcii; \
                    470:     int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
                    471:     int gcss = 6*gcaa; \
                    472:     c = (c & _pcre_utf8_table3[gcaa]) << gcss; \
                    473:     for (gcii = 1; gcii <= gcaa; gcii++) \
                    474:       { \
                    475:       gcss -= 6; \
                    476:       c |= (eptr[gcii] & 0x3f) << gcss; \
                    477:       } \
                    478:     len += gcaa; \
                    479:     }
                    480: 
                    481: /* If the pointer is not at the start of a character, move it back until
                    482: it is. This is called only in UTF-8 mode - we don't put a test within the macro
                    483: because almost all calls are already within a block of UTF-8 only code. */
                    484: 
                    485: #define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr--
                    486: 
                    487: #endif
                    488: 
                    489: 
                    490: /* In case there is no definition of offsetof() provided - though any proper
                    491: Standard C system should have one. */
                    492: 
                    493: #ifndef offsetof
                    494: #define offsetof(p_type,field) ((size_t)&(((p_type *)0)->field))
                    495: #endif
                    496: 
                    497: 
                    498: /* These are the public options that can change during matching. */
                    499: 
                    500: #define PCRE_IMS (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL)
                    501: 
                    502: /* Private flags containing information about the compiled regex. They used to
                    503: live at the top end of the options word, but that got almost full, so now they
                    504: are in a 16-bit flags word. */
                    505: 
                    506: #define PCRE_NOPARTIAL     0x0001  /* can't use partial with this regex */
                    507: #define PCRE_FIRSTSET      0x0002  /* first_byte is set */
                    508: #define PCRE_REQCHSET      0x0004  /* req_byte is set */
                    509: #define PCRE_STARTLINE     0x0008  /* start after \n for multiline */
                    510: #define PCRE_JCHANGED      0x0010  /* j option used in regex */
                    511: #define PCRE_HASCRORLF     0x0020  /* explicit \r or \n in pattern */
                    512: 
                    513: /* Options for the "extra" block produced by pcre_study(). */
                    514: 
                    515: #define PCRE_STUDY_MAPPED   0x01     /* a map of starting chars exists */
                    516: 
                    517: /* Masks for identifying the public options that are permitted at compile
                    518: time, run time, or study time, respectively. */
                    519: 
                    520: #define PCRE_NEWLINE_BITS (PCRE_NEWLINE_CR|PCRE_NEWLINE_LF|PCRE_NEWLINE_ANY| \
                    521:                            PCRE_NEWLINE_ANYCRLF)
                    522: 
                    523: #define PUBLIC_OPTIONS \
                    524:   (PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \
                    525:    PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8| \
                    526:    PCRE_NO_AUTO_CAPTURE|PCRE_NO_UTF8_CHECK|PCRE_AUTO_CALLOUT|PCRE_FIRSTLINE| \
                    527:    PCRE_DUPNAMES|PCRE_NEWLINE_BITS|PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE| \
                    528:    PCRE_JAVASCRIPT_COMPAT)
                    529: 
                    530: #define PUBLIC_EXEC_OPTIONS \
                    531:   (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NO_UTF8_CHECK| \
                    532:    PCRE_PARTIAL|PCRE_NEWLINE_BITS|PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE)
                    533: 
                    534: #define PUBLIC_DFA_EXEC_OPTIONS \
                    535:   (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NO_UTF8_CHECK| \
                    536:    PCRE_PARTIAL|PCRE_DFA_SHORTEST|PCRE_DFA_RESTART|PCRE_NEWLINE_BITS| \
                    537:    PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE)
                    538: 
                    539: #define PUBLIC_STUDY_OPTIONS 0   /* None defined */
                    540: 
                    541: /* Magic number to provide a small check against being handed junk. Also used
                    542: to detect whether a pattern was compiled on a host of different endianness. */
                    543: 
                    544: #define MAGIC_NUMBER  0x50435245UL   /* 'PCRE' */
                    545: 
                    546: /* Negative values for the firstchar and reqchar variables */
                    547: 
                    548: #define REQ_UNSET (-2)
                    549: #define REQ_NONE  (-1)
                    550: 
                    551: /* The maximum remaining length of subject we are prepared to search for a
                    552: req_byte match. */
                    553: 
                    554: #define REQ_BYTE_MAX 1000
                    555: 
                    556: /* Flags added to firstbyte or reqbyte; a "non-literal" item is either a
                    557: variable-length repeat, or a anything other than literal characters. */
                    558: 
                    559: #define REQ_CASELESS 0x0100    /* indicates caselessness */
                    560: #define REQ_VARY     0x0200    /* reqbyte followed non-literal item */
                    561: 
1.2     ! misha     562: /* Miscellaneous definitions. The #ifndef is to pacify compiler warnings in
        !           563: environments where these macros are defined elsewhere. */
1.1       misha     564: 
1.2     ! misha     565: #ifndef FALSE
1.1       misha     566: typedef int BOOL;
                    567: 
                    568: #define FALSE   0
                    569: #define TRUE    1
1.2     ! misha     570: #endif
1.1       misha     571: 
                    572: /* Escape items that are just an encoding of a particular data value. */
                    573: 
                    574: #ifndef ESC_e
                    575: #define ESC_e 27
                    576: #endif
                    577: 
                    578: #ifndef ESC_f
                    579: #define ESC_f '\f'
                    580: #endif
                    581: 
                    582: #ifndef ESC_n
                    583: #define ESC_n '\n'
                    584: #endif
                    585: 
                    586: #ifndef ESC_r
                    587: #define ESC_r '\r'
                    588: #endif
                    589: 
                    590: /* We can't officially use ESC_t because it is a POSIX reserved identifier
                    591: (presumably because of all the others like size_t). */
                    592: 
                    593: #ifndef ESC_tee
                    594: #define ESC_tee '\t'
                    595: #endif
                    596: 
                    597: /* Codes for different types of Unicode property */
                    598: 
                    599: #define PT_ANY        0    /* Any property - matches all chars */
                    600: #define PT_LAMP       1    /* L& - the union of Lu, Ll, Lt */
                    601: #define PT_GC         2    /* General characteristic (e.g. L) */
                    602: #define PT_PC         3    /* Particular characteristic (e.g. Lu) */
                    603: #define PT_SC         4    /* Script (e.g. Han) */
                    604: 
                    605: /* Flag bits and data types for the extended class (OP_XCLASS) for classes that
                    606: contain UTF-8 characters with values greater than 255. */
                    607: 
                    608: #define XCL_NOT    0x01    /* Flag: this is a negative class */
                    609: #define XCL_MAP    0x02    /* Flag: a 32-byte map is present */
                    610: 
                    611: #define XCL_END       0    /* Marks end of individual items */
                    612: #define XCL_SINGLE    1    /* Single item (one multibyte char) follows */
                    613: #define XCL_RANGE     2    /* A range (two multibyte chars) follows */
                    614: #define XCL_PROP      3    /* Unicode property (2-byte property code follows) */
                    615: #define XCL_NOTPROP   4    /* Unicode inverted property (ditto) */
                    616: 
                    617: /* These are escaped items that aren't just an encoding of a particular data
                    618: value such as \n. They must have non-zero values, as check_escape() returns
                    619: their negation. Also, they must appear in the same order as in the opcode
                    620: definitions below, up to ESC_z. There's a dummy for OP_ANY because it
                    621: corresponds to "." rather than an escape sequence, and another for OP_ALLANY
                    622: (which is used for [^] in JavaScript compatibility mode).
                    623: 
                    624: The final escape must be ESC_REF as subsequent values are used for
                    625: backreferences (\1, \2, \3, etc). There are two tests in the code for an escape
                    626: greater than ESC_b and less than ESC_Z to detect the types that may be
                    627: repeated. These are the types that consume characters. If any new escapes are
                    628: put in between that don't consume a character, that code will have to change.
                    629: */
                    630: 
                    631: enum { ESC_A = 1, ESC_G, ESC_K, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s,
                    632:        ESC_W, ESC_w, ESC_dum1, ESC_dum2, ESC_C, ESC_P, ESC_p, ESC_R, ESC_H,
                    633:        ESC_h, ESC_V, ESC_v, ESC_X, ESC_Z, ESC_z, ESC_E, ESC_Q, ESC_g, ESC_k,
                    634:        ESC_REF };
                    635: 
                    636: 
                    637: /* Opcode table: Starting from 1 (i.e. after OP_END), the values up to
                    638: OP_EOD must correspond in order to the list of escapes immediately above.
                    639: 
                    640: *** NOTE NOTE NOTE *** Whenever this list is updated, the two macro definitions
                    641: that follow must also be updated to match. There is also a table called
                    642: "coptable" in pcre_dfa_exec.c that must be updated. */
                    643: 
                    644: enum {
                    645:   OP_END,            /* 0 End of pattern */
                    646: 
                    647:   /* Values corresponding to backslashed metacharacters */
                    648: 
                    649:   OP_SOD,            /* 1 Start of data: \A */
                    650:   OP_SOM,            /* 2 Start of match (subject + offset): \G */
                    651:   OP_SET_SOM,        /* 3 Set start of match (\K) */
                    652:   OP_NOT_WORD_BOUNDARY,  /*  4 \B */
                    653:   OP_WORD_BOUNDARY,      /*  5 \b */
                    654:   OP_NOT_DIGIT,          /*  6 \D */
                    655:   OP_DIGIT,              /*  7 \d */
                    656:   OP_NOT_WHITESPACE,     /*  8 \S */
                    657:   OP_WHITESPACE,         /*  9 \s */
                    658:   OP_NOT_WORDCHAR,       /* 10 \W */
                    659:   OP_WORDCHAR,           /* 11 \w */
                    660:   OP_ANY,            /* 12 Match any character (subject to DOTALL) */
                    661:   OP_ALLANY,         /* 13 Match any character (not subject to DOTALL) */
                    662:   OP_ANYBYTE,        /* 14 Match any byte (\C); different to OP_ANY for UTF-8 */
                    663:   OP_NOTPROP,        /* 15 \P (not Unicode property) */
                    664:   OP_PROP,           /* 16 \p (Unicode property) */
                    665:   OP_ANYNL,          /* 17 \R (any newline sequence) */
                    666:   OP_NOT_HSPACE,     /* 18 \H (not horizontal whitespace) */
                    667:   OP_HSPACE,         /* 19 \h (horizontal whitespace) */
                    668:   OP_NOT_VSPACE,     /* 20 \V (not vertical whitespace) */
                    669:   OP_VSPACE,         /* 21 \v (vertical whitespace) */
                    670:   OP_EXTUNI,         /* 22 \X (extended Unicode sequence */
                    671:   OP_EODN,           /* 23 End of data or \n at end of data: \Z. */
                    672:   OP_EOD,            /* 24 End of data: \z */
                    673: 
                    674:   OP_OPT,            /* 25 Set runtime options */
                    675:   OP_CIRC,           /* 26 Start of line - varies with multiline switch */
                    676:   OP_DOLL,           /* 27 End of line - varies with multiline switch */
                    677:   OP_CHAR,           /* 28 Match one character, casefully */
                    678:   OP_CHARNC,         /* 29 Match one character, caselessly */
                    679:   OP_NOT,            /* 30 Match one character, not the following one */
                    680: 
                    681:   OP_STAR,           /* 31 The maximizing and minimizing versions of */
                    682:   OP_MINSTAR,        /* 32 these six opcodes must come in pairs, with */
                    683:   OP_PLUS,           /* 33 the minimizing one second. */
                    684:   OP_MINPLUS,        /* 34 This first set applies to single characters.*/
                    685:   OP_QUERY,          /* 35 */
                    686:   OP_MINQUERY,       /* 36 */
                    687: 
                    688:   OP_UPTO,           /* 37 From 0 to n matches */
                    689:   OP_MINUPTO,        /* 38 */
                    690:   OP_EXACT,          /* 39 Exactly n matches */
                    691: 
                    692:   OP_POSSTAR,        /* 40 Possessified star */
                    693:   OP_POSPLUS,        /* 41 Possessified plus */
                    694:   OP_POSQUERY,       /* 42 Posesssified query */
                    695:   OP_POSUPTO,        /* 43 Possessified upto */
                    696: 
                    697:   OP_NOTSTAR,        /* 44 The maximizing and minimizing versions of */
                    698:   OP_NOTMINSTAR,     /* 45 these six opcodes must come in pairs, with */
                    699:   OP_NOTPLUS,        /* 46 the minimizing one second. They must be in */
                    700:   OP_NOTMINPLUS,     /* 47 exactly the same order as those above. */
                    701:   OP_NOTQUERY,       /* 48 This set applies to "not" single characters. */
                    702:   OP_NOTMINQUERY,    /* 49 */
                    703: 
                    704:   OP_NOTUPTO,        /* 50 From 0 to n matches */
                    705:   OP_NOTMINUPTO,     /* 51 */
                    706:   OP_NOTEXACT,       /* 52 Exactly n matches */
                    707: 
                    708:   OP_NOTPOSSTAR,     /* 53 Possessified versions */
                    709:   OP_NOTPOSPLUS,     /* 54 */
                    710:   OP_NOTPOSQUERY,    /* 55 */
                    711:   OP_NOTPOSUPTO,     /* 56 */
                    712: 
                    713:   OP_TYPESTAR,       /* 57 The maximizing and minimizing versions of */
                    714:   OP_TYPEMINSTAR,    /* 58 these six opcodes must come in pairs, with */
                    715:   OP_TYPEPLUS,       /* 59 the minimizing one second. These codes must */
                    716:   OP_TYPEMINPLUS,    /* 60 be in exactly the same order as those above. */
                    717:   OP_TYPEQUERY,      /* 61 This set applies to character types such as \d */
                    718:   OP_TYPEMINQUERY,   /* 62 */
                    719: 
                    720:   OP_TYPEUPTO,       /* 63 From 0 to n matches */
                    721:   OP_TYPEMINUPTO,    /* 64 */
                    722:   OP_TYPEEXACT,      /* 65 Exactly n matches */
                    723: 
                    724:   OP_TYPEPOSSTAR,    /* 66 Possessified versions */
                    725:   OP_TYPEPOSPLUS,    /* 67 */
                    726:   OP_TYPEPOSQUERY,   /* 68 */
                    727:   OP_TYPEPOSUPTO,    /* 69 */
                    728: 
                    729:   OP_CRSTAR,         /* 70 The maximizing and minimizing versions of */
                    730:   OP_CRMINSTAR,      /* 71 all these opcodes must come in pairs, with */
                    731:   OP_CRPLUS,         /* 72 the minimizing one second. These codes must */
                    732:   OP_CRMINPLUS,      /* 73 be in exactly the same order as those above. */
                    733:   OP_CRQUERY,        /* 74 These are for character classes and back refs */
                    734:   OP_CRMINQUERY,     /* 75 */
                    735:   OP_CRRANGE,        /* 76 These are different to the three sets above. */
                    736:   OP_CRMINRANGE,     /* 77 */
                    737: 
                    738:   OP_CLASS,          /* 78 Match a character class, chars < 256 only */
                    739:   OP_NCLASS,         /* 79 Same, but the bitmap was created from a negative
                    740:                            class - the difference is relevant only when a UTF-8
                    741:                            character > 255 is encountered. */
                    742: 
                    743:   OP_XCLASS,         /* 80 Extended class for handling UTF-8 chars within the
                    744:                            class. This does both positive and negative. */
                    745: 
                    746:   OP_REF,            /* 81 Match a back reference */
                    747:   OP_RECURSE,        /* 82 Match a numbered subpattern (possibly recursive) */
                    748:   OP_CALLOUT,        /* 83 Call out to external function if provided */
                    749: 
                    750:   OP_ALT,            /* 84 Start of alternation */
                    751:   OP_KET,            /* 85 End of group that doesn't have an unbounded repeat */
                    752:   OP_KETRMAX,        /* 86 These two must remain together and in this */
                    753:   OP_KETRMIN,        /* 87 order. They are for groups the repeat for ever. */
                    754: 
                    755:   /* The assertions must come before BRA, CBRA, ONCE, and COND.*/
                    756: 
                    757:   OP_ASSERT,         /* 88 Positive lookahead */
                    758:   OP_ASSERT_NOT,     /* 89 Negative lookahead */
                    759:   OP_ASSERTBACK,     /* 90 Positive lookbehind */
                    760:   OP_ASSERTBACK_NOT, /* 91 Negative lookbehind */
                    761:   OP_REVERSE,        /* 92 Move pointer back - used in lookbehind assertions */
                    762: 
                    763:   /* ONCE, BRA, CBRA, and COND must come after the assertions, with ONCE first,
                    764:   as there's a test for >= ONCE for a subpattern that isn't an assertion. */
                    765: 
                    766:   OP_ONCE,           /* 93 Atomic group */
                    767:   OP_BRA,            /* 94 Start of non-capturing bracket */
                    768:   OP_CBRA,           /* 95 Start of capturing bracket */
                    769:   OP_COND,           /* 96 Conditional group */
                    770: 
                    771:   /* These three must follow the previous three, in the same order. There's a
                    772:   check for >= SBRA to distinguish the two sets. */
                    773: 
                    774:   OP_SBRA,           /* 97 Start of non-capturing bracket, check empty  */
                    775:   OP_SCBRA,          /* 98 Start of capturing bracket, check empty */
                    776:   OP_SCOND,          /* 99 Conditional group, check empty */
                    777: 
                    778:   OP_CREF,           /* 100 Used to hold a capture number as condition */
                    779:   OP_RREF,           /* 101 Used to hold a recursion number as condition */
                    780:   OP_DEF,            /* 102 The DEFINE condition */
                    781: 
                    782:   OP_BRAZERO,        /* 103 These two must remain together and in this */
                    783:   OP_BRAMINZERO,     /* 104 order. */
                    784: 
                    785:   /* These are backtracking control verbs */
                    786: 
                    787:   OP_PRUNE,          /* 105 */
                    788:   OP_SKIP,           /* 106 */
                    789:   OP_THEN,           /* 107 */
                    790:   OP_COMMIT,         /* 108 */
                    791: 
                    792:   /* These are forced failure and success verbs */
                    793: 
                    794:   OP_FAIL,           /* 109 */
                    795:   OP_ACCEPT,         /* 110 */
                    796: 
                    797:   /* This is used to skip a subpattern with a {0} quantifier */
                    798: 
                    799:   OP_SKIPZERO        /* 111 */
                    800: };
                    801: 
                    802: 
                    803: /* This macro defines textual names for all the opcodes. These are used only
                    804: for debugging. The macro is referenced only in pcre_printint.c. */
                    805: 
                    806: #define OP_NAME_LIST \
                    807:   "End", "\\A", "\\G", "\\K", "\\B", "\\b", "\\D", "\\d",         \
                    808:   "\\S", "\\s", "\\W", "\\w", "Any", "AllAny", "Anybyte",         \
                    809:   "notprop", "prop", "\\R", "\\H", "\\h", "\\V", "\\v",           \
                    810:   "extuni",  "\\Z", "\\z",                                        \
                    811:   "Opt", "^", "$", "char", "charnc", "not",                       \
                    812:   "*", "*?", "+", "+?", "?", "??", "{", "{", "{",                 \
                    813:   "*+","++", "?+", "{",                                           \
                    814:   "*", "*?", "+", "+?", "?", "??", "{", "{", "{",                 \
                    815:   "*+","++", "?+", "{",                                           \
                    816:   "*", "*?", "+", "+?", "?", "??", "{", "{", "{",                 \
                    817:   "*+","++", "?+", "{",                                           \
                    818:   "*", "*?", "+", "+?", "?", "??", "{", "{",                      \
                    819:   "class", "nclass", "xclass", "Ref", "Recurse", "Callout",       \
                    820:   "Alt", "Ket", "KetRmax", "KetRmin", "Assert", "Assert not",     \
                    821:   "AssertB", "AssertB not", "Reverse",                            \
                    822:   "Once", "Bra", "CBra", "Cond", "SBra", "SCBra", "SCond",        \
                    823:   "Cond ref", "Cond rec", "Cond def", "Brazero", "Braminzero",    \
                    824:   "*PRUNE", "*SKIP", "*THEN", "*COMMIT", "*FAIL", "*ACCEPT",      \
                    825:   "Skip zero"
                    826: 
                    827: 
                    828: /* This macro defines the length of fixed length operations in the compiled
                    829: regex. The lengths are used when searching for specific things, and also in the
                    830: debugging printing of a compiled regex. We use a macro so that it can be
                    831: defined close to the definitions of the opcodes themselves.
                    832: 
                    833: As things have been extended, some of these are no longer fixed lenths, but are
                    834: minima instead. For example, the length of a single-character repeat may vary
                    835: in UTF-8 mode. The code that uses this table must know about such things. */
                    836: 
                    837: #define OP_LENGTHS \
                    838:   1,                             /* End                                    */ \
                    839:   1, 1, 1, 1, 1,                 /* \A, \G, \K, \B, \b                     */ \
                    840:   1, 1, 1, 1, 1, 1,              /* \D, \d, \S, \s, \W, \w                 */ \
                    841:   1, 1, 1,                       /* Any, AllAny, Anybyte                   */ \
                    842:   3, 3, 1,                       /* NOTPROP, PROP, EXTUNI                  */ \
                    843:   1, 1, 1, 1, 1,                 /* \R, \H, \h, \V, \v                     */ \
                    844:   1, 1, 2, 1, 1,                 /* \Z, \z, Opt, ^, $                      */ \
                    845:   2,                             /* Char  - the minimum length             */ \
                    846:   2,                             /* Charnc  - the minimum length           */ \
                    847:   2,                             /* not                                    */ \
                    848:   /* Positive single-char repeats                            ** These are  */ \
                    849:   2, 2, 2, 2, 2, 2,              /* *, *?, +, +?, ?, ??      ** minima in  */ \
                    850:   4, 4, 4,                       /* upto, minupto, exact     ** UTF-8 mode */ \
                    851:   2, 2, 2, 4,                    /* *+, ++, ?+, upto+                      */ \
                    852:   /* Negative single-char repeats - only for chars < 256                   */ \
                    853:   2, 2, 2, 2, 2, 2,              /* NOT *, *?, +, +?, ?, ??                */ \
                    854:   4, 4, 4,                       /* NOT upto, minupto, exact               */ \
                    855:   2, 2, 2, 4,                    /* Possessive *, +, ?, upto               */ \
                    856:   /* Positive type repeats                                                 */ \
                    857:   2, 2, 2, 2, 2, 2,              /* Type *, *?, +, +?, ?, ??               */ \
                    858:   4, 4, 4,                       /* Type upto, minupto, exact              */ \
                    859:   2, 2, 2, 4,                    /* Possessive *+, ++, ?+, upto+           */ \
                    860:   /* Character class & ref repeats                                         */ \
                    861:   1, 1, 1, 1, 1, 1,              /* *, *?, +, +?, ?, ??                    */ \
                    862:   5, 5,                          /* CRRANGE, CRMINRANGE                    */ \
                    863:  33,                             /* CLASS                                  */ \
                    864:  33,                             /* NCLASS                                 */ \
                    865:   0,                             /* XCLASS - variable length               */ \
                    866:   3,                             /* REF                                    */ \
                    867:   1+LINK_SIZE,                   /* RECURSE                                */ \
                    868:   2+2*LINK_SIZE,                 /* CALLOUT                                */ \
                    869:   1+LINK_SIZE,                   /* Alt                                    */ \
                    870:   1+LINK_SIZE,                   /* Ket                                    */ \
                    871:   1+LINK_SIZE,                   /* KetRmax                                */ \
                    872:   1+LINK_SIZE,                   /* KetRmin                                */ \
                    873:   1+LINK_SIZE,                   /* Assert                                 */ \
                    874:   1+LINK_SIZE,                   /* Assert not                             */ \
                    875:   1+LINK_SIZE,                   /* Assert behind                          */ \
                    876:   1+LINK_SIZE,                   /* Assert behind not                      */ \
                    877:   1+LINK_SIZE,                   /* Reverse                                */ \
                    878:   1+LINK_SIZE,                   /* ONCE                                   */ \
                    879:   1+LINK_SIZE,                   /* BRA                                    */ \
                    880:   3+LINK_SIZE,                   /* CBRA                                   */ \
                    881:   1+LINK_SIZE,                   /* COND                                   */ \
                    882:   1+LINK_SIZE,                   /* SBRA                                   */ \
                    883:   3+LINK_SIZE,                   /* SCBRA                                  */ \
                    884:   1+LINK_SIZE,                   /* SCOND                                  */ \
                    885:   3,                             /* CREF                                   */ \
                    886:   3,                             /* RREF                                   */ \
                    887:   1,                             /* DEF                                    */ \
                    888:   1, 1,                          /* BRAZERO, BRAMINZERO                    */ \
                    889:   1, 1, 1, 1,                    /* PRUNE, SKIP, THEN, COMMIT,             */ \
                    890:   1, 1, 1                        /* FAIL, ACCEPT, SKIPZERO                 */
                    891: 
                    892: 
                    893: /* A magic value for OP_RREF to indicate the "any recursion" condition. */
                    894: 
                    895: #define RREF_ANY  0xffff
                    896: 
                    897: /* Error code numbers. They are given names so that they can more easily be
                    898: tracked. */
                    899: 
                    900: enum { ERR0,  ERR1,  ERR2,  ERR3,  ERR4,  ERR5,  ERR6,  ERR7,  ERR8,  ERR9,
                    901:        ERR10, ERR11, ERR12, ERR13, ERR14, ERR15, ERR16, ERR17, ERR18, ERR19,
                    902:        ERR20, ERR21, ERR22, ERR23, ERR24, ERR25, ERR26, ERR27, ERR28, ERR29,
                    903:        ERR30, ERR31, ERR32, ERR33, ERR34, ERR35, ERR36, ERR37, ERR38, ERR39,
                    904:        ERR40, ERR41, ERR42, ERR43, ERR44, ERR45, ERR46, ERR47, ERR48, ERR49,
                    905:        ERR50, ERR51, ERR52, ERR53, ERR54, ERR55, ERR56, ERR57, ERR58, ERR59,
                    906:        ERR60, ERR61, ERR62, ERR63, ERR64 };
                    907: 
                    908: /* The real format of the start of the pcre block; the index of names and the
                    909: code vector run on as long as necessary after the end. We store an explicit
                    910: offset to the name table so that if a regex is compiled on one host, saved, and
                    911: then run on another where the size of pointers is different, all might still
                    912: be well. For the case of compiled-on-4 and run-on-8, we include an extra
                    913: pointer that is always NULL. For future-proofing, a few dummy fields were
                    914: originally included - even though you can never get this planning right - but
                    915: there is only one left now.
                    916: 
                    917: NOTE NOTE NOTE:
                    918: Because people can now save and re-use compiled patterns, any additions to this
                    919: structure should be made at the end, and something earlier (e.g. a new
                    920: flag in the options or one of the dummy fields) should indicate that the new
                    921: fields are present. Currently PCRE always sets the dummy fields to zero.
                    922: NOTE NOTE NOTE:
                    923: */
                    924: 
                    925: typedef struct real_pcre {
                    926:   pcre_uint32 magic_number;
                    927:   pcre_uint32 size;               /* Total that was malloced */
                    928:   pcre_uint32 options;            /* Public options */
                    929:   pcre_uint16 flags;              /* Private flags */
                    930:   pcre_uint16 dummy1;             /* For future use */
                    931:   pcre_uint16 top_bracket;
                    932:   pcre_uint16 top_backref;
                    933:   pcre_uint16 first_byte;
                    934:   pcre_uint16 req_byte;
                    935:   pcre_uint16 name_table_offset;  /* Offset to name table that follows */
                    936:   pcre_uint16 name_entry_size;    /* Size of any name items */
                    937:   pcre_uint16 name_count;         /* Number of name items */
                    938:   pcre_uint16 ref_count;          /* Reference count */
                    939: 
                    940:   const unsigned char *tables;    /* Pointer to tables or NULL for std */
                    941:   const unsigned char *nullpad;   /* NULL padding */
                    942: } real_pcre;
                    943: 
                    944: /* The format of the block used to store data from pcre_study(). The same
                    945: remark (see NOTE above) about extending this structure applies. */
                    946: 
                    947: typedef struct pcre_study_data {
                    948:   pcre_uint32 size;               /* Total that was malloced */
                    949:   pcre_uint32 options;
                    950:   uschar start_bits[32];
                    951: } pcre_study_data;
                    952: 
                    953: /* Structure for passing "static" information around between the functions
                    954: doing the compiling, so that they are thread-safe. */
                    955: 
                    956: typedef struct compile_data {
                    957:   const uschar *lcc;            /* Points to lower casing table */
                    958:   const uschar *fcc;            /* Points to case-flipping table */
                    959:   const uschar *cbits;          /* Points to character type table */
                    960:   const uschar *ctypes;         /* Points to table of type maps */
                    961:   const uschar *start_workspace;/* The start of working space */
                    962:   const uschar *start_code;     /* The start of the compiled code */
                    963:   const uschar *start_pattern;  /* The start of the pattern */
                    964:   const uschar *end_pattern;    /* The end of the pattern */
                    965:   uschar *hwm;                  /* High watermark of workspace */
                    966:   uschar *name_table;           /* The name/number table */
                    967:   int  names_found;             /* Number of entries so far */
                    968:   int  name_entry_size;         /* Size of each entry */
                    969:   int  bracount;                /* Count of capturing parens as we compile */
                    970:   int  final_bracount;          /* Saved value after first pass */
                    971:   int  top_backref;             /* Maximum back reference */
                    972:   unsigned int backref_map;     /* Bitmap of low back refs */
                    973:   int  external_options;        /* External (initial) options */
                    974:   int  external_flags;          /* External flag bits to be set */
                    975:   int  req_varyopt;             /* "After variable item" flag for reqbyte */
                    976:   BOOL had_accept;              /* (*ACCEPT) encountered */
                    977:   int  nltype;                  /* Newline type */
                    978:   int  nllen;                   /* Newline string length */
                    979:   uschar nl[4];                 /* Newline string when fixed length */
                    980: } compile_data;
                    981: 
                    982: /* Structure for maintaining a chain of pointers to the currently incomplete
                    983: branches, for testing for left recursion. */
                    984: 
                    985: typedef struct branch_chain {
                    986:   struct branch_chain *outer;
                    987:   uschar *current;
                    988: } branch_chain;
                    989: 
                    990: /* Structure for items in a linked list that represents an explicit recursive
                    991: call within the pattern. */
                    992: 
                    993: typedef struct recursion_info {
                    994:   struct recursion_info *prevrec; /* Previous recursion record (or NULL) */
                    995:   int group_num;                /* Number of group that was called */
                    996:   const uschar *after_call;     /* "Return value": points after the call in the expr */
                    997:   USPTR save_start;             /* Old value of mstart */
                    998:   int *offset_save;             /* Pointer to start of saved offsets */
                    999:   int saved_max;                /* Number of saved offsets */
                   1000: } recursion_info;
                   1001: 
                   1002: /* Structure for building a chain of data for holding the values of the subject
                   1003: pointer at the start of each subpattern, so as to detect when an empty string
                   1004: has been matched by a subpattern - to break infinite loops. */
                   1005: 
                   1006: typedef struct eptrblock {
                   1007:   struct eptrblock *epb_prev;
                   1008:   USPTR epb_saved_eptr;
                   1009: } eptrblock;
                   1010: 
                   1011: 
                   1012: /* Structure for passing "static" information around between the functions
                   1013: doing traditional NFA matching, so that they are thread-safe. */
                   1014: 
                   1015: typedef struct match_data {
                   1016:   unsigned long int match_call_count;      /* As it says */
                   1017:   unsigned long int match_limit;           /* As it says */
                   1018:   unsigned long int match_limit_recursion; /* As it says */
                   1019:   int   *offset_vector;         /* Offset vector */
                   1020:   int    offset_end;            /* One past the end */
                   1021:   int    offset_max;            /* The maximum usable for return data */
                   1022:   int    nltype;                /* Newline type */
                   1023:   int    nllen;                 /* Newline string length */
                   1024:   uschar nl[4];                 /* Newline string when fixed */
                   1025:   const uschar *lcc;            /* Points to lower casing table */
                   1026:   const uschar *ctypes;         /* Points to table of type maps */
                   1027:   BOOL   offset_overflow;       /* Set if too many extractions */
                   1028:   BOOL   notbol;                /* NOTBOL flag */
                   1029:   BOOL   noteol;                /* NOTEOL flag */
                   1030:   BOOL   utf8;                  /* UTF8 flag */
                   1031:   BOOL   jscript_compat;        /* JAVASCRIPT_COMPAT flag */
                   1032:   BOOL   endonly;               /* Dollar not before final \n */
                   1033:   BOOL   notempty;              /* Empty string match not wanted */
                   1034:   BOOL   partial;               /* PARTIAL flag */
                   1035:   BOOL   hitend;                /* Hit the end of the subject at some point */
                   1036:   BOOL   bsr_anycrlf;           /* \R is just any CRLF, not full Unicode */
                   1037:   const uschar *start_code;     /* For use when recursing */
                   1038:   USPTR  start_subject;         /* Start of the subject string */
                   1039:   USPTR  end_subject;           /* End of the subject string */
                   1040:   USPTR  start_match_ptr;       /* Start of matched string */
                   1041:   USPTR  end_match_ptr;         /* Subject position at end match */
                   1042:   int    end_offset_top;        /* Highwater mark at end of match */
                   1043:   int    capture_last;          /* Most recent capture number */
                   1044:   int    start_offset;          /* The start offset value */
                   1045:   eptrblock *eptrchain;         /* Chain of eptrblocks for tail recursions */
                   1046:   int    eptrn;                 /* Next free eptrblock */
                   1047:   recursion_info *recursive;    /* Linked list of recursion data */
                   1048:   void  *callout_data;          /* To pass back to callouts */
                   1049: } match_data;
                   1050: 
                   1051: /* A similar structure is used for the same purpose by the DFA matching
                   1052: functions. */
                   1053: 
                   1054: typedef struct dfa_match_data {
                   1055:   const uschar *start_code;     /* Start of the compiled pattern */
                   1056:   const uschar *start_subject;  /* Start of the subject string */
                   1057:   const uschar *end_subject;    /* End of subject string */
                   1058:   const uschar *tables;         /* Character tables */
                   1059:   int   moptions;               /* Match options */
                   1060:   int   poptions;               /* Pattern options */
                   1061:   int    nltype;                /* Newline type */
                   1062:   int    nllen;                 /* Newline string length */
                   1063:   uschar nl[4];                 /* Newline string when fixed */
                   1064:   void  *callout_data;          /* To pass back to callouts */
                   1065: } dfa_match_data;
                   1066: 
                   1067: /* Bit definitions for entries in the pcre_ctypes table. */
                   1068: 
                   1069: #define ctype_space   0x01
                   1070: #define ctype_letter  0x02
                   1071: #define ctype_digit   0x04
                   1072: #define ctype_xdigit  0x08
                   1073: #define ctype_word    0x10   /* alphanumeric or '_' */
                   1074: #define ctype_meta    0x80   /* regexp meta char or zero (end pattern) */
                   1075: 
                   1076: /* Offsets for the bitmap tables in pcre_cbits. Each table contains a set
                   1077: of bits for a class map. Some classes are built by combining these tables. */
                   1078: 
                   1079: #define cbit_space     0      /* [:space:] or \s */
                   1080: #define cbit_xdigit   32      /* [:xdigit:] */
                   1081: #define cbit_digit    64      /* [:digit:] or \d */
                   1082: #define cbit_upper    96      /* [:upper:] */
                   1083: #define cbit_lower   128      /* [:lower:] */
                   1084: #define cbit_word    160      /* [:word:] or \w */
                   1085: #define cbit_graph   192      /* [:graph:] */
                   1086: #define cbit_print   224      /* [:print:] */
                   1087: #define cbit_punct   256      /* [:punct:] */
                   1088: #define cbit_cntrl   288      /* [:cntrl:] */
                   1089: #define cbit_length  320      /* Length of the cbits table */
                   1090: 
                   1091: /* Offsets of the various tables from the base tables pointer, and
                   1092: total length. */
                   1093: 
                   1094: #define lcc_offset      0
                   1095: #define fcc_offset    256
                   1096: #define cbits_offset  512
                   1097: #define ctypes_offset (cbits_offset + cbit_length)
                   1098: #define tables_length (ctypes_offset + 256)
                   1099: 
                   1100: /* Layout of the UCP type table that translates property names into types and
                   1101: codes. Each entry used to point directly to a name, but to reduce the number of
                   1102: relocations in shared libraries, it now has an offset into a single string
                   1103: instead. */
                   1104: 
                   1105: typedef struct {
                   1106:   pcre_uint16 name_offset;
                   1107:   pcre_uint16 type;
                   1108:   pcre_uint16 value;
                   1109: } ucp_type_table;
                   1110: 
                   1111: 
                   1112: /* Internal shared data tables. These are tables that are used by more than one
                   1113: of the exported public functions. They have to be "external" in the C sense,
                   1114: but are not part of the PCRE public API. The data for these tables is in the
                   1115: pcre_tables.c module. */
                   1116: 
                   1117: extern const int    _pcre_utf8_table1[];
                   1118: extern const int    _pcre_utf8_table2[];
                   1119: extern const int    _pcre_utf8_table3[];
                   1120: extern const uschar _pcre_utf8_table4[];
                   1121: 
                   1122: extern const int    _pcre_utf8_table1_size;
                   1123: 
                   1124: extern const char   _pcre_utt_names[];
                   1125: extern const ucp_type_table _pcre_utt[];
                   1126: extern const int _pcre_utt_size;
                   1127: 
                   1128: #ifdef __cplusplus
                   1129:        extern "C" const uschar _pcre_default_tables[];
                   1130: #else
                   1131:        extern const uschar _pcre_default_tables[];
                   1132: #endif
                   1133: 
                   1134: extern const uschar _pcre_OP_lengths[];
                   1135: 
                   1136: 
                   1137: /* Internal shared functions. These are functions that are used by more than
                   1138: one of the exported public functions. They have to be "external" in the C
                   1139: sense, but are not part of the PCRE public API. */
                   1140: 
                   1141: extern BOOL         _pcre_is_newline(const uschar *, int, const uschar *,
                   1142:                       int *, BOOL);
                   1143: extern int          _pcre_ord2utf8(int, uschar *);
                   1144: extern real_pcre   *_pcre_try_flipped(const real_pcre *, real_pcre *,
                   1145:                       const pcre_study_data *, pcre_study_data *);
                   1146: extern int          _pcre_valid_utf8(const uschar *, int);
                   1147: extern BOOL         _pcre_was_newline(const uschar *, int, const uschar *,
                   1148:                       int *, BOOL);
                   1149: extern BOOL         _pcre_xclass(int, const uschar *);
                   1150: 
1.2     ! misha    1151: 
        !          1152: /* Unicode character database (UCD) */
        !          1153: 
        !          1154: typedef struct {
        !          1155:   uschar script;
        !          1156:   uschar chartype;
        !          1157:   pcre_int32 other_case;
        !          1158: } ucd_record;
        !          1159: 
        !          1160: extern const ucd_record  _pcre_ucd_records[];
        !          1161: extern const uschar      _pcre_ucd_stage1[];
        !          1162: extern const pcre_uint16 _pcre_ucd_stage2[];
        !          1163: extern const int         _pcre_ucp_gentype[];
        !          1164: 
        !          1165: 
        !          1166: /* UCD access macros */
        !          1167: 
        !          1168: #define UCD_BLOCK_SIZE 128
        !          1169: #define GET_UCD(ch) (_pcre_ucd_records + \
        !          1170:         _pcre_ucd_stage2[_pcre_ucd_stage1[(ch) / UCD_BLOCK_SIZE] * \
        !          1171:         UCD_BLOCK_SIZE + ch % UCD_BLOCK_SIZE])
        !          1172: 
        !          1173: #define UCD_CHARTYPE(ch)  GET_UCD(ch)->chartype
        !          1174: #define UCD_SCRIPT(ch)    GET_UCD(ch)->script
        !          1175: #define UCD_CATEGORY(ch)  _pcre_ucp_gentype[UCD_CHARTYPE(ch)]
        !          1176: #define UCD_OTHERCASE(ch) (ch + GET_UCD(ch)->other_case)
        !          1177: 
1.1       misha    1178: #endif
                   1179: 
                   1180: /* End of pcre_internal.h */

E-mail: