diff options
Diffstat (limited to 'pcre_internal.h')
-rw-r--r-- | pcre_internal.h | 54 |
1 files changed, 36 insertions, 18 deletions
diff --git a/pcre_internal.h b/pcre_internal.h index b78fca5..952598e 100644 --- a/pcre_internal.h +++ b/pcre_internal.h @@ -114,6 +114,14 @@ Unix, where it is defined in sys/types, so use "uschar" instead. */ typedef unsigned char uschar; +/* PCRE is able to support 3 different kinds of newline (CR, LF, CRLF). The +following macro is used to package up testing for newlines. NLBLOCK is defined +in the various modules to indicate in which datablock the parameters exist. */ + +#define IS_NEWLINE(p) \ + ((p)[0] == NLBLOCK->nl[0] && \ + (NLBLOCK->nllen == 1 || (p)[1] == NLBLOCK->nl[1])) + /* When PCRE is compiled as a C++ library, the subject pointer can be replaced with a custom type. This makes it possible, for example, to allow pcre_exec() to process subject strings that are discontinuous by using a smart pointer @@ -160,7 +168,7 @@ case in PCRE. */ #if HAVE_BCOPY #define memmove(a, b, c) bcopy(b, a, c) #else /* HAVE_BCOPY */ -void * +static void * pcre_memmove(unsigned char *dest, const unsigned char *src, size_t n) { size_t i; @@ -373,16 +381,17 @@ Standard C system should have one. */ #define PCRE_IMS (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL) -/* Private options flags start at the most significant end of the four bytes, -but skip the top bit so we can use ints for convenience without getting tangled -with negative values. The public options defined in pcre.h start at the least -significant end. Make sure they don't overlap! */ +/* Private options flags start at the most significant end of the four bytes. +The public options defined in pcre.h start at the least significant end. Make +sure they don't overlap! The bits are getting a bit scarce now -- when we run +out, there is a dummy word in the structure that could be used for the private +bits. */ +#define PCRE_NOPARTIAL 0x80000000 /* can't use partial with this regex */ #define PCRE_FIRSTSET 0x40000000 /* first_byte is set */ #define PCRE_REQCHSET 0x20000000 /* req_byte is set */ #define PCRE_STARTLINE 0x10000000 /* start after \n for multiline */ -#define PCRE_ICHANGED 0x08000000 /* i option changes within regex */ -#define PCRE_NOPARTIAL 0x04000000 /* can't use partial with this regex */ +#define PCRE_JCHANGED 0x08000000 /* j option changes within regex */ /* Options for the "extra" block produced by pcre_study(). */ @@ -394,15 +403,17 @@ time, run time, or study time, respectively. */ #define PUBLIC_OPTIONS \ (PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \ PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8| \ - PCRE_NO_AUTO_CAPTURE|PCRE_NO_UTF8_CHECK|PCRE_AUTO_CALLOUT|PCRE_FIRSTLINE) + PCRE_NO_AUTO_CAPTURE|PCRE_NO_UTF8_CHECK|PCRE_AUTO_CALLOUT|PCRE_FIRSTLINE| \ + PCRE_DUPNAMES|PCRE_NEWLINE_CR|PCRE_NEWLINE_LF) #define PUBLIC_EXEC_OPTIONS \ (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NO_UTF8_CHECK| \ - PCRE_PARTIAL) + PCRE_PARTIAL|PCRE_NEWLINE_CR|PCRE_NEWLINE_LF) #define PUBLIC_DFA_EXEC_OPTIONS \ (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NO_UTF8_CHECK| \ - PCRE_PARTIAL|PCRE_DFA_SHORTEST|PCRE_DFA_RESTART) + PCRE_PARTIAL|PCRE_DFA_SHORTEST|PCRE_DFA_RESTART|PCRE_NEWLINE_CR| \ + PCRE_NEWLINE_LF) #define PUBLIC_STUDY_OPTIONS 0 /* None defined */ @@ -530,7 +541,7 @@ enum { OP_DOLL, /* 20 End of line - varies with multiline switch */ OP_CHAR, /* 21 Match one character, casefully */ OP_CHARNC, /* 22 Match one character, caselessly */ - OP_NOT, /* 23 Match anything but the following char */ + OP_NOT, /* 23 Match one character, not the following one */ OP_STAR, /* 24 The maximizing and minimizing versions of */ OP_MINSTAR, /* 25 all these opcodes must come in pairs, with */ @@ -710,7 +721,8 @@ enum { ERR0, ERR1, ERR2, ERR3, ERR4, ERR5, ERR6, ERR7, ERR8, ERR9, ERR10, ERR11, ERR12, ERR13, ERR14, ERR15, ERR16, ERR17, ERR18, ERR19, ERR20, ERR21, ERR22, ERR23, ERR24, ERR25, ERR26, ERR27, ERR28, ERR29, ERR30, ERR31, ERR32, ERR33, ERR34, ERR35, ERR36, ERR37, ERR38, ERR39, - ERR40, ERR41, ERR42, ERR43, ERR44, ERR45, ERR46, ERR47 }; + ERR40, ERR41, ERR42, ERR43, ERR44, ERR45, ERR46, ERR47, ERR48, ERR49, + ERR50, ERR51 }; /* The real format of the start of the pcre block; the index of names and the code vector run on as long as necessary after the end. We store an explicit @@ -774,6 +786,8 @@ typedef struct compile_data { unsigned int backref_map; /* Bitmap of low back refs */ int req_varyopt; /* "After variable item" flag for reqbyte */ BOOL nopartial; /* Set TRUE if partial won't work */ + int nllen; /* 1 or 2 for newline string length */ + uschar nl[4]; /* Newline string */ } compile_data; /* Structure for maintaining a chain of pointers to the currently incomplete @@ -798,11 +812,11 @@ typedef struct recursion_info { /* When compiling in a mode that doesn't use recursive calls to match(), a structure is used to remember local variables on the heap. It is defined in -pcre.c, close to the match() function, so that it is easy to keep it in step -with any changes of local variable. However, the pointer to the current frame -must be saved in some "static" place over a longjmp(). We declare the -structure here so that we can put a pointer in the match_data structure. -NOTE: This isn't used for a "normal" compilation of pcre. */ +pcre_exec.c, close to the match() function, so that it is easy to keep it in +step with any changes of local variable. However, the pointer to the current +frame must be saved in some "static" place over a longjmp(). We declare the +structure here so that we can put a pointer in the match_data structure. NOTE: +This isn't used for a "normal" compilation of pcre. */ struct heapframe; @@ -816,6 +830,8 @@ typedef struct match_data { int *offset_vector; /* Offset vector */ int offset_end; /* One past the end */ int offset_max; /* The maximum usable for return data */ + int nllen; /* 1 or 2 for newline string length */ + uschar nl[4]; /* Newline string */ const uschar *lcc; /* Points to lower casing table */ const uschar *ctypes; /* Points to table of type maps */ BOOL offset_overflow; /* Set if too many extractions */ @@ -849,6 +865,8 @@ typedef struct dfa_match_data { const uschar *tables; /* Character tables */ int moptions; /* Match options */ int poptions; /* Pattern options */ + int nllen; /* 1 or 2 for newline string length */ + uschar nl[4]; /* Newline string */ void *callout_data; /* To pass back to callouts */ } dfa_match_data; @@ -922,7 +940,7 @@ sense, but are not part of the PCRE public API. */ extern int _pcre_ord2utf8(int, uschar *); extern real_pcre * _pcre_try_flipped(const real_pcre *, real_pcre *, const pcre_study_data *, pcre_study_data *); -extern int _pcre_ucp_findprop(const int, int *, int *); +extern int _pcre_ucp_findprop(const unsigned int, int *, int *); extern int _pcre_ucp_othercase(const int); extern int _pcre_valid_utf8(const uschar *, int); extern BOOL _pcre_xclass(int, const uschar *); |