diff --git a/Makefile.am b/Makefile.am index ce3d7f3..18a4886 100644 --- a/Makefile.am +++ b/Makefile.am @@ -263,7 +263,6 @@ NODIST_SOURCES = src/pcre2_chartables.c COMMON_SOURCES = \ src/pcre2_auto_possess.c \ - src/pcre2_byte_order.c \ src/pcre2_compile.c \ src/pcre2_config.c \ src/pcre2_context.c \ diff --git a/src/pcre2.h.generic b/src/pcre2.h.generic index 468802a..ad84726 100644 --- a/src/pcre2.h.generic +++ b/src/pcre2.h.generic @@ -47,7 +47,7 @@ POSSIBILITY OF SUCH DAMAGE. #define PCRE2_DATE 2014-99-99 /* When an application links to a PCRE DLL in Windows, the symbols that are -imported have to be identified as such. When building PCRE, the appropriate +imported have to be identified as such. When building PCRE2, the appropriate export setting is defined in pcre2_internal.h, which includes this file. So we don't change existing definitions of PCRE2_EXP_DECL. */ @@ -67,9 +67,10 @@ don't change existing definitions of PCRE2_EXP_DECL. */ # endif #endif -/* Have to include stdlib.h and stdint.h to ensure that size_t and uint8_t etc -are defined. */ +/* Have to include limits.h, stdlib.h and stdint.h to ensure that size_t and +uint8_t, UCHAR_MAX, etc are defined. */ +#include #include #include @@ -81,11 +82,12 @@ extern "C" { /* The following options can be passed to pcre2_compile(), pcre2_match(), or pcre2_dfa_match(). PCRE2_NO_UTF_CHECK affects only the function to which it is -passed. */ +passed. Put these bits at the most significant end of the options word so +others can be added next to them */ -#define PCRE2_ANCHORED 0x00000001 -#define PCRE2_NO_START_OPTIMIZE 0x00000002 -#define PCRE2_NO_UTF_CHECK 0x00000004 +#define PCRE2_ANCHORED 0x80000000u +#define PCRE2_NO_START_OPTIMIZE 0x40000000u +#define PCRE2_NO_UTF_CHECK 0x20000000u /* Other options that can be passed to pcre2_compile(). They may affect compilation, JIT compilation, and/or interpretive execution. The following tags @@ -97,46 +99,50 @@ E is inspected during pcre2_match() execution D is inspected during pcre2_dfa_match() execution */ -#define PCRE2_ALLOW_EMPTY_CLASS 0x00000008 /* C */ -#define PCRE2_ALT_BSUX 0x00000010 /* C */ -#define PCRE2_AUTO_CALLOUT 0x00000020 /* C */ -#define PCRE2_CASELESS 0x00000040 /* C */ -#define PCRE2_DOLLAR_ENDONLY 0x00000080 /* J E D */ -#define PCRE2_DOTALL 0x00000100 /* C */ -#define PCRE2_DUPNAMES 0x00000200 /* C */ -#define PCRE2_EXTENDED 0x00000400 /* C */ -#define PCRE2_FIRSTLINE 0x00000800 /* J E D */ -#define PCRE2_MATCH_UNSET_BACKREF 0x00001000 /* C J E */ -#define PCRE2_MULTILINE 0x00002000 /* C */ -#define PCRE2_NEVER_UCP 0x00004000 /* C */ -#define PCRE2_NEVER_UTF 0x00008000 /* C */ -#define PCRE2_NO_AUTO_CAPTURE 0x00010000 /* C */ -#define PCRE2_NO_AUTO_POSSESS 0x00020000 /* C */ -#define PCRE2_UCP 0x00040000 /* C J E D */ -#define PCRE2_UNGREEDY 0x00080000 /* C */ -#define PCRE2_UTF 0x00100000 /* C J E D */ +#define PCRE2_ALLOW_EMPTY_CLASS 0x00000001u /* C */ +#define PCRE2_ALT_BSUX 0x00000002u /* C */ +#define PCRE2_AUTO_CALLOUT 0x00000004u /* C */ +#define PCRE2_CASELESS 0x00000008u /* C */ +#define PCRE2_DOLLAR_ENDONLY 0x00000010u /* J E D */ +#define PCRE2_DOTALL 0x00000020u /* C */ +#define PCRE2_DUPNAMES 0x00000040u /* C */ +#define PCRE2_EXTENDED 0x00000080u /* C */ +#define PCRE2_FIRSTLINE 0x00000100u /* J E D */ +#define PCRE2_MATCH_UNSET_BACKREF 0x00000200u /* C J E */ +#define PCRE2_MULTILINE 0x00000400u /* C */ +#define PCRE2_NEVER_UCP 0x00000800u /* C */ +#define PCRE2_NEVER_UTF 0x00001000u /* C */ +#define PCRE2_NO_AUTO_CAPTURE 0x00002000u /* C */ +#define PCRE2_NO_AUTO_POSSESS 0x00004000u /* C */ +#define PCRE2_UCP 0x00008000u /* C J E D */ +#define PCRE2_UNGREEDY 0x00010000u /* C */ +#define PCRE2_UTF 0x00020000u /* C J E D */ /* These are for pcre2_jit_compile(). */ -#define PCRE2_JIT 0x00000001 /* For full matching */ -#define PCRE2_JIT_PARTIAL_SOFT 0x00000002 -#define PCRE2_JIT_PARTIAL_HARD 0x00000004 +#define PCRE2_JIT 0x00000001u /* For full matching */ +#define PCRE2_JIT_PARTIAL_SOFT 0x00000002u +#define PCRE2_JIT_PARTIAL_HARD 0x00000004u -/* These are for pcre2_match() and pcre2_dfa_match(). */ +/* These are for pcre2_match() and pcre2_dfa_match(). Note that PCRE2_ANCHORED, +PCRE2_NO_START_OPTIMIZE, and PCRE2_NO_UTF_CHECK can also be passed to these +functions, so take care not to define synonyms by mistake. */ -#define PCRE2_NOTBOL 0x00000001 -#define PCRE2_NOTEOL 0x00000002 -#define PCRE2_NOTEMPTY 0x00000004 -#define PCRE2_NOTEMPTY_ATSTART 0x00000008 -#define PCRE2_PARTIAL_SOFT 0x00000010 -#define PCRE2_PARTIAL_HARD 0x00000020 +#define PCRE2_NOTBOL 0x00000001u +#define PCRE2_NOTEOL 0x00000002u +#define PCRE2_NOTEMPTY 0x00000004u +#define PCRE2_NOTEMPTY_ATSTART 0x00000008u +#define PCRE2_PARTIAL_SOFT 0x00000010u +#define PCRE2_PARTIAL_HARD 0x00000020u /* These are additional options for pcre2_dfa_match(). */ -#define PCRE2_DFA_RESTART 0x00000040 -#define PCRE2_DFA_SHORTEST 0x00000080 +#define PCRE2_DFA_RESTART 0x00000040u +#define PCRE2_DFA_SHORTEST 0x00000080u -/* Newline and \R settings, for use in the compile context. */ +/* Newline and \R settings, for use in the compile and match contexts. The +newline values must be kept in step with values set in config.h and both sets +must all be greater than zero. */ #define PCRE2_NEWLINE_CR 1 #define PCRE2_NEWLINE_LF 2 @@ -196,7 +202,7 @@ D is inspected during pcre2_dfa_match() execution #define PCRE2_ERROR_BADMODE (-33) #define PCRE2_ERROR_BADOFFSET (-34) #define PCRE2_ERROR_BADOPTION (-35) -#define PCRE2_ERROR_BADUTF_OFFSET (-36) +#define PCRE2_ERROR_BADUTFOFFSET (-36) #define PCRE2_ERROR_CALLOUT (-37) /* Never used by PCRE2 itself */ #define PCRE2_ERROR_DFA_BADRESTART (-38) #define PCRE2_ERROR_DFA_RECURSE (-39) @@ -213,56 +219,49 @@ D is inspected during pcre2_dfa_match() execution #define PCRE2_ERROR_NULL (-50) #define PCRE2_ERROR_RECURSELOOP (-51) #define PCRE2_ERROR_RECURSIONLIMIT (-52) -#define PCRE2_ERROR_UNKNOWN_OPCODE (-53) -#define PCRE2_ERROR_UNSET (-54) /* Request types for pcre2_pattern_info() */ -#define PCRE2_INFO_BACKREFMAX 0 -#define PCRE2_INFO_BSR_CONVENTION 1 -#define PCRE2_INFO_CAPTURECOUNT 2 -#define PCRE2_INFO_COMPILE_OPTIONS 3 -#define PCRE2_INFO_FIRSTCODEUNIT 4 -#define PCRE2_INFO_FIRSTCODETYPE 5 -#define PCRE2_INFO_FIRSTBITMAP 6 -#define PCRE2_INFO_HASCRORLF 7 -#define PCRE2_INFO_JCHANGED 8 -#define PCRE2_INFO_JIT 9 +#define PCRE2_INFO_ALLOPTIONS 0 +#define PCRE2_INFO_ARGOPTIONS 1 +#define PCRE2_INFO_BACKREFMAX 2 +#define PCRE2_INFO_BSR 3 +#define PCRE2_INFO_CAPTURECOUNT 4 +#define PCRE2_INFO_FIRSTCODEUNIT 5 +#define PCRE2_INFO_FIRSTCODETYPE 6 +#define PCRE2_INFO_FIRSTBITMAP 7 +#define PCRE2_INFO_HASCRORLF 8 +#define PCRE2_INFO_JCHANGED 9 #define PCRE2_INFO_JITSIZE 10 #define PCRE2_INFO_LASTCODEUNIT 11 #define PCRE2_INFO_LASTCODETYPE 12 -#define PCRE2_INFO_MATCH_EMPTY 13 -#define PCRE2_INFO_MATCH_LIMIT 14 +#define PCRE2_INFO_MATCHEMPTY 13 +#define PCRE2_INFO_MATCHLIMIT 14 #define PCRE2_INFO_MAXLOOKBEHIND 15 #define PCRE2_INFO_MINLENGTH 16 #define PCRE2_INFO_NAMECOUNT 17 #define PCRE2_INFO_NAMEENTRYSIZE 18 #define PCRE2_INFO_NAMETABLE 19 -#define PCRE2_INFO_NEWLINE_CONVENTION 20 -#define PCRE2_INFO_PATTERN_OPTIONS 21 -#define PCRE2_INFO_RECURSION_LIMIT 22 -#define PCRE2_INFO_SIZE 23 +#define PCRE2_INFO_NEWLINE 20 +#define PCRE2_INFO_RECURSIONLIMIT 21 +#define PCRE2_INFO_SIZE 22 /* Request types for pcre2_config(). */ #define PCRE2_CONFIG_BSR 0 #define PCRE2_CONFIG_JIT 1 #define PCRE2_CONFIG_JITTARGET 2 -#define PCRE2_CONFIG_LINK_SIZE 3 -#define PCRE2_CONFIG_MATCH_LIMIT 4 -#define PCRE2_CONFIG_MATCH_LIMIT_RECURSION 5 +#define PCRE2_CONFIG_LINKSIZE 3 +#define PCRE2_CONFIG_MATCHLIMIT 4 #define PCRE2_CONFIG_NEWLINE 6 -#define PCRE2_CONFIG_PARENS_LIMIT 7 +#define PCRE2_CONFIG_PARENSLIMIT 7 +#define PCRE2_CONFIG_RECURSIONLIMIT 5 #define PCRE2_CONFIG_STACKRECURSE 8 -#define PCRE2_CONFIG_UTF 9 -#define PCRE2_CONFIG_VERSION 10 +#define PCRE2_CONFIG_UNICODE_VERSION 9 +#define PCRE2_CONFIG_UTF 10 +#define PCRE2_CONFIG_VERSION 11 -/* A value that is used to indicate 'unset' in unsigned size_t fields. In -particular, this value is used in the ovector. */ - -#define PCRE2_UNSET (~(size_t)0) - -/* Types for patterns and subject strings. */ +/* Types for code units in patterns and subject strings. */ typedef uint8_t PCRE2_UCHAR8; typedef uint16_t PCRE2_UCHAR16; @@ -272,6 +271,12 @@ typedef const PCRE2_UCHAR8 *PCRE2_SPTR8; typedef const PCRE2_UCHAR16 *PCRE2_SPTR16; typedef const PCRE2_UCHAR32 *PCRE2_SPTR32; +/* Offsets in the pattern (for errors) and in the subject (after a match) are +unsigned 32-bit numbers. We also define a value to indicate "unset" in the +offset vector (ovector). */ + +#define PCRE2_OFFSET PCRE2_UCHAR32 +#define PCRE2_UNSET (~(PCRE2_OFFSET)0) /* Generic types for opaque structures and JIT callback functions. These declarations are defined in a macro that is expanded for each width later. */ @@ -306,42 +311,32 @@ versions are generated from this macro below. */ #define PCRE2_STRUCTURE_LIST \ typedef struct pcre2_callout_block { \ - int version; /* Identifies version of block */ \ + int version; /* Identifies version of block */ \ /* ------------------------ Version 0 ------------------------------- */ \ - int callout_number; /* Number compiled into pattern */ \ - int *offset_vector; /* The offset vector */ \ - PCRE2_SPTR subject; /* The subject being matched */ \ - int subject_length; /* The length of the subject */ \ - int start_match; /* Offset to start of this match attempt */ \ - int current_position; /* Where we currently are in the subject */ \ - int capture_top; /* Max current capture */ \ - int capture_last; /* Most recently closed capture */ \ - void *callout_data; /* Data passed in with the call */ \ + uint32_t callout_number; /* Number compiled into pattern */ \ + PCRE2_OFFSET *offset_vector; /* The offset vector */ \ + PCRE2_SPTR subject; /* The subject being matched */ \ + size_t subject_length; /* The length of the subject */ \ + PCRE2_OFFSET start_match; /* Offset to start of this match attempt */ \ + PCRE2_OFFSET current_position; /* Where we currently are in the subject */ \ + uint32_t capture_top; /* Max current capture */ \ + uint32_t capture_last; /* Most recently closed capture */ \ + void *callout_data; /* Data passed in with the call */ \ /* ------------------- Added for Version 1 -------------------------- */ \ - int pattern_position; /* Offset to next item in the pattern */ \ - int next_item_length; /* Length of next item in the pattern */ \ + PCRE2_OFFSET pattern_position; /* Offset to next item in the pattern */ \ + PCRE2_OFFSET next_item_length; /* Length of next item in the pattern */ \ /* ------------------- Added for Version 2 -------------------------- */ \ - PCRE2_SPTR mark; /* Pointer to current mark or NULL */ \ + PCRE2_SPTR mark; /* Pointer to current mark or NULL */ \ /* ------------------------------------------------------------------ */ \ } pcre2_callout_block; -/* Utility functions for byte order swaps. These are not generic functions; -each appears only its own library. */ - -PCRE2_EXP_DECL int pcre2_utf16_to_host_byte_order(PCRE2_UCHAR16 *, - PCRE2_SPTR16, int, int *, int); -PCRE2_EXP_DECL int pcre2_utf32_to_host_byte_order(PCRE2_UCHAR32 *, - PCRE2_SPTR32, int, int *, int); - - /* List the generic forms of all other functions in macros, which will be expanded for each width below. Start with functions that give general information. */ #define PCRE2_GENERAL_INFO_FUNCTIONS \ -PCRE2_EXP_DECL int pcre2_config(int, void *, size_t); \ -PCRE2_EXP_DECL size_t pcre2_get_match_frame_size(void); +PCRE2_EXP_DECL int pcre2_config(int, void *, size_t); /* Functions for manipulating contexts. */ @@ -351,8 +346,8 @@ PCRE2_EXP_DECL \ pcre2_general_context *pcre2_general_context_copy(pcre2_general_context *); \ PCRE2_EXP_DECL \ pcre2_general_context *pcre2_general_context_create( \ - void *(*)(size_t, void *), \ - void (*)(void *, void *), void *); \ + void *(*)(size_t, void *), \ + void (*)(void *, void *), void *); \ PCRE2_EXP_DECL void pcre2_general_context_free(pcre2_general_context *); #define PCRE2_COMPILE_CONTEXT_FUNCTIONS \ @@ -361,11 +356,11 @@ PCRE2_EXP_DECL \ PCRE2_EXP_DECL \ pcre2_compile_context *pcre2_compile_context_create(pcre2_general_context *);\ PCRE2_EXP_DECL void pcre2_compile_context_free(pcre2_compile_context *); \ -PCRE2_EXP_DECL int pcre2_set_bsr_convention(pcre2_compile_context *, \ +PCRE2_EXP_DECL int pcre2_set_bsr_compile(pcre2_compile_context *, \ uint32_t); \ PCRE2_EXP_DECL int pcre2_set_character_tables(pcre2_compile_context *, \ const unsigned char *); \ -PCRE2_EXP_DECL int pcre2_set_newline_convention(pcre2_compile_context *, \ +PCRE2_EXP_DECL int pcre2_set_newline_compile(pcre2_compile_context *, \ uint32_t); \ PCRE2_EXP_DECL int pcre2_set_parens_nest_limit(pcre2_compile_context *, \ uint32_t); \ @@ -378,15 +373,19 @@ PCRE2_EXP_DECL \ PCRE2_EXP_DECL \ pcre2_match_context *pcre2_match_context_create(pcre2_general_context *); \ PCRE2_EXP_DECL void pcre2_match_context_free(pcre2_match_context *); \ +PCRE2_EXP_DECL int pcre2_set_bsr_match(pcre2_match_context *, \ + uint32_t); \ PCRE2_EXP_DECL int pcre2_set_callout(pcre2_match_context *, \ - int (*)(pcre2_callout_block *, void *)); \ + int (*)(pcre2_callout_block *), void *); \ PCRE2_EXP_DECL int pcre2_set_match_limit(pcre2_match_context *, \ uint32_t); \ +PCRE2_EXP_DECL int pcre2_set_newline_match(pcre2_match_context *, \ + uint32_t); \ PCRE2_EXP_DECL int pcre2_set_recursion_limit(pcre2_match_context *, \ uint32_t); \ PCRE2_EXP_DECL int pcre2_set_recursion_memory_management( \ pcre2_match_context *, void *(*)(size_t, void *), \ - void (*)(void *, void *)); + void (*)(void *, void *), void *); /* Functions concerned with compiling a pattern to PCRE internal code. */ @@ -394,7 +393,7 @@ PCRE2_EXP_DECL int pcre2_set_recursion_memory_management( \ #define PCRE2_COMPILE_FUNCTIONS \ PCRE2_EXP_DECL \ pcre2_code *pcre2_compile(PCRE2_SPTR, int, uint32_t, \ - int *, size_t *, pcre2_compile_context *); \ + int *, PCRE2_OFFSET *, pcre2_compile_context *); \ PCRE2_EXP_DECL void pcre2_code_free(pcre2_code *); @@ -409,26 +408,25 @@ PCRE2_EXP_DECL int pcre2_pattern_info(const pcre2_code *, uint32_t, \ #define PCRE2_MATCH_FUNCTIONS \ PCRE2_EXP_DECL \ - pcre2_match_data *pcre2_match_data_create(size_t, \ + pcre2_match_data *pcre2_match_data_create(uint32_t, \ pcre2_general_context *); \ PCRE2_EXP_DECL \ pcre2_match_data *pcre2_match_data_create_from_pattern(pcre2_code *, \ pcre2_general_context *); \ PCRE2_EXP_DECL int pcre2_dfa_match(const pcre2_code *, \ - PCRE2_SPTR, int, size_t, uint32_t, \ + PCRE2_SPTR, int, PCRE2_OFFSET, uint32_t, \ pcre2_match_data *, pcre2_match_context *, int *, \ size_t); \ PCRE2_EXP_DECL int pcre2_match(const pcre2_code *, \ - PCRE2_SPTR, int, size_t, uint32_t, \ + PCRE2_SPTR, int, PCRE2_OFFSET, uint32_t, \ pcre2_match_data *, pcre2_match_context *); \ PCRE2_EXP_DECL void pcre2_match_data_free(pcre2_match_data *); \ -PCRE2_EXP_DECL size_t pcre2_get_leftchar(pcre2_match_data *); \ -PCRE2_EXP_DECL \ - PCRE2_SPTR pcre2_get_mark(pcre2_match_data *); \ -PCRE2_EXP_DECL size_t pcre2_get_ovector_count(pcre2_match_data *); \ -PCRE2_EXP_DECL size_t *pcre2_get_ovector_pointer(pcre2_match_data *); \ -PCRE2_EXP_DECL size_t pcre2_get_rightchar(pcre2_match_data *); \ -PCRE2_EXP_DECL size_t pcre2_get_startchar(pcre2_match_data *); +PCRE2_EXP_DECL PCRE2_OFFSET pcre2_get_leftchar(pcre2_match_data *); \ +PCRE2_EXP_DECL PCRE2_SPTR pcre2_get_mark(pcre2_match_data *); \ +PCRE2_EXP_DECL uint32_t pcre2_get_ovector_count(pcre2_match_data *); \ +PCRE2_EXP_DECL PCRE2_OFFSET *pcre2_get_ovector_pointer(pcre2_match_data *); \ +PCRE2_EXP_DECL PCRE2_OFFSET pcre2_get_rightchar(pcre2_match_data *); \ +PCRE2_EXP_DECL PCRE2_OFFSET pcre2_get_startchar(pcre2_match_data *); /* Convenience functions for handling matched substrings. */ @@ -461,8 +459,9 @@ PCRE2_EXP_DECL int pcre2_substring_list_get(pcre2_match_data *, \ #define PCRE2_JIT_FUNCTIONS \ PCRE2_EXP_DECL void pcre2_jit_compile(pcre2_code *, uint32_t); \ PCRE2_EXP_DECL int pcre2_jit_match(const pcre2_code *, \ - PCRE2_SPTR, int, size_t, uint32_t, \ - pcre2_match_data *, pcre2_jit_stack *); \ + PCRE2_SPTR, int, PCRE2_OFFSET, uint32_t, \ + pcre2_match_data *, pcre2_match_context *, \ + pcre2_jit_stack *); \ PCRE2_EXP_DECL void pcre2_jit_free_unused_memory(pcre2_general_context *);\ PCRE2_EXP_DECL \ pcre2_jit_stack *pcre2_jit_stack_alloc(pcre2_general_context *, \ @@ -476,10 +475,8 @@ PCRE2_EXP_DECL void pcre2_jit_stack_free(pcre2_jit_stack *); #define PCRE2_OTHER_FUNCTIONS \ PCRE2_EXP_DECL int pcre2_get_error_message(int, PCRE2_UCHAR *, size_t); \ -PCRE2_EXP_DECL size_t pcre2_get_match_frame_size(void); \ PCRE2_EXP_DECL \ - const unsigned char *pcre2_maketables(pcre2_general_context *); \ -PCRE2_EXP_DECL int pcre2_pattern_to_host_byte_order(pcre2_code *); + const uint8_t *pcre2_maketables(pcre2_general_context *); \ /* Define macros that generate width-specific names from generic versions. The @@ -522,21 +519,20 @@ pcre2_compile are called by application code. */ /* Functions: the complete list in alphabetical order */ -#define pcre2_code_free PCRE2_SUFFIX(pcre2_code_free_) +#define pcre2_code_free PCRE2_SUFFIX(pcre2_code_free_) #define pcre2_compile PCRE2_SUFFIX(pcre2_compile_) -#define pcre2_compile_context_copy PCRE2_SUFFIX(pcre2_compile_context_copy_) -#define pcre2_compile_context_create PCRE2_SUFFIX(pcre2_compile_context_create_) -#define pcre2_compile_context_free PCRE2_SUFFIX(pcre2_compile_context_free_) +#define pcre2_compile_context_copy PCRE2_SUFFIX(pcre2_compile_context_copy_) +#define pcre2_compile_context_create PCRE2_SUFFIX(pcre2_compile_context_create_) +#define pcre2_compile_context_free PCRE2_SUFFIX(pcre2_compile_context_free_) #define pcre2_config PCRE2_SUFFIX(pcre2_config_) #define pcre2_dfa_match PCRE2_SUFFIX(pcre2_dfa_match_) #define pcre2_match PCRE2_SUFFIX(pcre2_match_) -#define pcre2_general_context_copy PCRE2_SUFFIX(pcre2_general_context_copy_) -#define pcre2_general_context_create PCRE2_SUFFIX(pcre2_general_context_create_) -#define pcre2_general_context_free PCRE2_SUFFIX(pcre2_general_context_free_) +#define pcre2_general_context_copy PCRE2_SUFFIX(pcre2_general_context_copy_) +#define pcre2_general_context_create PCRE2_SUFFIX(pcre2_general_context_create_) +#define pcre2_general_context_free PCRE2_SUFFIX(pcre2_general_context_free_) #define pcre2_get_error_message PCRE2_SUFFIX(pcre2_get_error_message_) #define pcre2_get_leftchar PCRE2_SUFFIX(pcre2_get_leftchar_) #define pcre2_get_mark PCRE2_SUFFIX(pcre2_get_mark_) -#define pcre2_get_match_frame_size PCRE2_SUFFIX(pcre2_get_match_frame_size_) #define pcre2_get_ovector_pointer PCRE2_SUFFIX(pcre2_get_ovector_pointer_) #define pcre2_get_ovector_count PCRE2_SUFFIX(pcre2_get_ovector_count_) #define pcre2_get_rightchar PCRE2_SUFFIX(pcre2_get_rightchar_) @@ -548,34 +544,35 @@ pcre2_compile are called by application code. */ #define pcre2_jit_stack_assign PCRE2_SUFFIX(pcre2_jit_stack_assign_) #define pcre2_jit_stack_free PCRE2_SUFFIX(pcre2_jit_stack_free_) #define pcre2_maketables PCRE2_SUFFIX(pcre2_maketables_) -#define pcre2_match_context_copy PCRE2_SUFFIX(pcre2_match_context_copy_) -#define pcre2_match_context_create PCRE2_SUFFIX(pcre2_match_context_create_) -#define pcre2_match_context_free PCRE2_SUFFIX(pcre2_match_context_free_) -#define pcre2_match_data_create PCRE2_SUFFIX(pcre2_match_data_create_) -#define pcre2_match_data_create_from_pattern PCRE2_SUFFIX(pcre2_match_data_create_from_pattern_) -#define pcre2_match_data_free PCRE2_SUFFIX(pcre2_match_data_free_) +#define pcre2_match_context_copy PCRE2_SUFFIX(pcre2_match_context_copy_) +#define pcre2_match_context_create PCRE2_SUFFIX(pcre2_match_context_create_) +#define pcre2_match_context_free PCRE2_SUFFIX(pcre2_match_context_free_) +#define pcre2_match_data_create PCRE2_SUFFIX(pcre2_match_data_create_) +#define pcre2_match_data_create_from_pattern PCRE2_SUFFIX(pcre2_match_data_create_from_pattern_) +#define pcre2_match_data_free PCRE2_SUFFIX(pcre2_match_data_free_) #define pcre2_pattern_info PCRE2_SUFFIX(pcre2_pattern_info_) -#define pcre2_pattern_to_host_byte_order PCRE2_SUFFIX(pcre2_pattern_to_host_byte_order_) -#define pcre2_set_bsr_convention PCRE2_SUFFIX(pcre2_set_bsr_convention_) +#define pcre2_set_bsr_compile PCRE2_SUFFIX(pcre2_set_bsr_compile_) +#define pcre2_set_bsr_match PCRE2_SUFFIX(pcre2_set_bsr_match_) #define pcre2_set_callout PCRE2_SUFFIX(pcre2_set_callout_) #define pcre2_set_character_tables PCRE2_SUFFIX(pcre2_set_character_tables_) #define pcre2_set_compile_recursion_guard PCRE2_SUFFIX(pcre2_set_compile_recursion_guard_) #define pcre2_set_match_limit PCRE2_SUFFIX(pcre2_set_match_limit_) -#define pcre2_set_newline_convention PCRE2_SUFFIX(pcre2_set_newline_convention_) +#define pcre2_set_newline_compile PCRE2_SUFFIX(pcre2_set_newline_compile_) +#define pcre2_set_newline_match PCRE2_SUFFIX(pcre2_set_newline_match_) #define pcre2_set_parens_nest_limit PCRE2_SUFFIX(pcre2_set_parens_nest_limit_) #define pcre2_set_recursion_limit PCRE2_SUFFIX(pcre2_set_recursion_limit_) #define pcre2_set_recursion_memory_management PCRE2_SUFFIX(pcre2_set_recursion_memory_management_) -#define pcre2_substring_copy_byname PCRE2_SUFFIX(pcre2_substring_copy_byname_) -#define pcre2_substring_copy_bynumber PCRE2_SUFFIX(pcre2_substring_copy_bynumber_) -#define pcre2_substring_free PCRE2_SUFFIX(pcre2_substring_free_) -#define pcre2_substring_get_byname PCRE2_SUFFIX(pcre2_substring_get_byname_) -#define pcre2_substring_get_bynumber PCRE2_SUFFIX(pcre2_substring_get_bynumber_) -#define pcre2_substring_length_byname PCRE2_SUFFIX(pcre2_substring_length_byname_) -#define pcre2_substring_length_bynumber PCRE2_SUFFIX(pcre2_substring_length_bynumber_) -#define pcre2_substring_list_get PCRE2_SUFFIX(pcre2_substring_list_get_) -#define pcre2_substring_list_free PCRE2_SUFFIX(pcre2_substring_list_free_) -#define pcre2_substring_nametable_scan PCRE2_SUFFIX(pcre2_substring_nametable_scan_) -#define pcre2_substring_number_from_name PCRE2_SUFFIX(pcre2_substring_number_from_name_) +#define pcre2_substring_copy_byname PCRE2_SUFFIX(pcre2_substring_copy_byname_) +#define pcre2_substring_copy_bynumber PCRE2_SUFFIX(pcre2_substring_copy_bynumber_) +#define pcre2_substring_free PCRE2_SUFFIX(pcre2_substring_free_) +#define pcre2_substring_get_byname PCRE2_SUFFIX(pcre2_substring_get_byname_) +#define pcre2_substring_get_bynumber PCRE2_SUFFIX(pcre2_substring_get_bynumber_) +#define pcre2_substring_length_byname PCRE2_SUFFIX(pcre2_substring_length_byname_) +#define pcre2_substring_length_bynumber PCRE2_SUFFIX(pcre2_substring_length_bynumber_) +#define pcre2_substring_list_get PCRE2_SUFFIX(pcre2_substring_list_get_) +#define pcre2_substring_list_free PCRE2_SUFFIX(pcre2_substring_list_free_) +#define pcre2_substring_nametable_scan PCRE2_SUFFIX(pcre2_substring_nametable_scan_) +#define pcre2_substring_number_from_name PCRE2_SUFFIX(pcre2_substring_number_from_name_) /* Now generate all three sets of width-specific structures and function diff --git a/src/pcre2.h.in b/src/pcre2.h.in index b59111f..d7194e7 100644 --- a/src/pcre2.h.in +++ b/src/pcre2.h.in @@ -331,15 +331,6 @@ typedef struct pcre2_callout_block { \ } pcre2_callout_block; -/* Utility functions for byte order swaps. These are not generic functions; -each appears only its own library. */ - -PCRE2_EXP_DECL int pcre2_utf16_to_host_byte_order(PCRE2_UCHAR16 *, - PCRE2_SPTR16, int, int *, int); -PCRE2_EXP_DECL int pcre2_utf32_to_host_byte_order(PCRE2_UCHAR32 *, - PCRE2_SPTR32, int, int *, int); - - /* List the generic forms of all other functions in macros, which will be expanded for each width below. Start with functions that give general information. */ @@ -486,7 +477,6 @@ PCRE2_EXP_DECL void pcre2_jit_stack_free(pcre2_jit_stack *); PCRE2_EXP_DECL int pcre2_get_error_message(int, PCRE2_UCHAR *, size_t); \ PCRE2_EXP_DECL \ const uint8_t *pcre2_maketables(pcre2_general_context *); \ -PCRE2_EXP_DECL int pcre2_pattern_to_host_byte_order(pcre2_code *); /* Define macros that generate width-specific names from generic versions. The @@ -561,7 +551,6 @@ pcre2_compile are called by application code. */ #define pcre2_match_data_create_from_pattern PCRE2_SUFFIX(pcre2_match_data_create_from_pattern_) #define pcre2_match_data_free PCRE2_SUFFIX(pcre2_match_data_free_) #define pcre2_pattern_info PCRE2_SUFFIX(pcre2_pattern_info_) -#define pcre2_pattern_to_host_byte_order PCRE2_SUFFIX(pcre2_pattern_to_host_byte_order_) #define pcre2_set_bsr_compile PCRE2_SUFFIX(pcre2_set_bsr_compile_) #define pcre2_set_bsr_match PCRE2_SUFFIX(pcre2_set_bsr_match_) #define pcre2_set_callout PCRE2_SUFFIX(pcre2_set_callout_) diff --git a/src/pcre2_byte_order.c b/src/pcre2_byte_order.c deleted file mode 100644 index 4526541..0000000 --- a/src/pcre2_byte_order.c +++ /dev/null @@ -1,321 +0,0 @@ -/************************************************* -* Perl-Compatible Regular Expressions * -*************************************************/ - -/* PCRE is a library of functions to support regular expressions whose syntax -and semantics are as close as possible to those of the Perl 5 language. - - Written by Philip Hazel - Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2014 University of Cambridge - ------------------------------------------------------------------------------ -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of the University of Cambridge nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ -*/ - - -/* This module contains an internal function that tests a compiled pattern to -see if it was compiled with the opposite endianness. If so, it uses an -auxiliary local function to flip the appropriate bytes. */ - - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "pcre2_internal.h" - - -/* FIXME: this is currently a placeholder function */ - - -#ifdef NEVER -/************************************************* -* Swap byte functions * -*************************************************/ - -/* The following functions swap the bytes of a pcre_uint16 -and pcre_uint32 value. - -Arguments: - value any number - -Returns: the byte swapped value -*/ - -static pcre_uint32 -swap_uint32(pcre_uint32 value) -{ -return ((value & 0x000000ff) << 24) | - ((value & 0x0000ff00) << 8) | - ((value & 0x00ff0000) >> 8) | - (value >> 24); -} - -static pcre_uint16 -swap_uint16(pcre_uint16 value) -{ -return (value >> 8) | (value << 8); -} -#endif /* NEVER */ - - -/************************************************* -* Fix up a byte-flipped compiled regex * -*************************************************/ - -/* This function swaps the bytes of a compiled pattern, usually one that has -been saved and reloaded. - -Argument: a pointer to the compiled pattern -Returns: 0 if the swap is successful, negative on error -*/ - -PCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION -pcre2_pattern_to_host_byte_order(pcre2_code *code) -{ -code=code; -return -1; - - -#ifdef NEVER - -REAL_PCRE *re = (REAL_PCRE *)argument_re; -pcre_study_data *study; -#if PCRE2_CODE_UNIT_WIDTH != 8 -pcre_uchar *ptr; -int length; -#if defined SUPPORT_UTF && PCRE2_CODE_UNIT_WIDTH == 16 -BOOL utf; -BOOL utf16_char; -#endif -#endif - -if (re == NULL) return PCRE_ERROR_NULL; -if (re->magic_number == MAGIC_NUMBER) - { - if ((re->flags & PCRE_MODE) == 0) return PCRE_ERROR_BADMODE; - re->tables = tables; - return 0; - } - -if (re->magic_number != REVERSED_MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC; -if ((swap_uint32(re->flags) & PCRE_MODE) == 0) return PCRE_ERROR_BADMODE; - -re->magic_number = MAGIC_NUMBER; -re->size = swap_uint32(re->size); -re->options = swap_uint32(re->options); -re->flags = swap_uint32(re->flags); -re->limit_match = swap_uint32(re->limit_match); -re->limit_recursion = swap_uint32(re->limit_recursion); - -#if PCRE2_CODE_UNIT_WIDTH == 8 || PCRE2_CODE_UNIT_WIDTH == 16 -re->first_char = swap_uint16(re->first_char); -re->req_char = swap_uint16(re->req_char); -#elif PCRE2_CODE_UNIT_WIDTH == 32 -re->first_char = swap_uint32(re->first_char); -re->req_char = swap_uint32(re->req_char); -#endif - -re->max_lookbehind = swap_uint16(re->max_lookbehind); -re->top_bracket = swap_uint16(re->top_bracket); -re->top_backref = swap_uint16(re->top_backref); -re->name_table_offset = swap_uint16(re->name_table_offset); -re->name_entry_size = swap_uint16(re->name_entry_size); -re->name_count = swap_uint16(re->name_count); -re->ref_count = swap_uint16(re->ref_count); -re->tables = tables; - -if (extra_data != NULL && (extra_data->flags & PCRE_EXTRA_STUDY_DATA) != 0) - { - study = (pcre_study_data *)extra_data->study_data; - study->size = swap_uint32(study->size); - study->flags = swap_uint32(study->flags); - study->minlength = swap_uint32(study->minlength); - } - -#if PCRE2_CODE_UNIT_WIDTH != 8 -ptr = (pcre_uchar *)re + re->name_table_offset; -length = re->name_count * re->name_entry_size; -#if defined SUPPORT_UTF && PCRE2_CODE_UNIT_WIDTH == 16 -utf = (re->options & PCRE_UTF16) != 0; -utf16_char = FALSE; -#endif - -while(TRUE) - { - /* Swap previous characters. */ - while (length-- > 0) - { -#if PCRE2_CODE_UNIT_WIDTH == 16 - *ptr = swap_uint16(*ptr); -#elif PCRE2_CODE_UNIT_WIDTH == 32 - *ptr = swap_uint32(*ptr); -#endif - ptr++; - } -#if defined SUPPORT_UTF && PCRE2_CODE_UNIT_WIDTH == 16 - if (utf16_char) - { - if (HAS_EXTRALEN(ptr[-1])) - { - /* We know that there is only one extra character in UTF-16. */ - *ptr = swap_uint16(*ptr); - ptr++; - } - } - utf16_char = FALSE; -#endif /* SUPPORT_UTF */ - - /* Get next opcode. */ - length = 0; -#if PCRE2_CODE_UNIT_WIDTH == 16 - *ptr = swap_uint16(*ptr); -#elif PCRE2_CODE_UNIT_WIDTH == 32 - *ptr = swap_uint32(*ptr); -#endif - switch (*ptr) - { - case OP_END: - return 0; - -#if defined SUPPORT_UTF && PCRE2_CODE_UNIT_WIDTH == 16 - case OP_CHAR: - case OP_CHARI: - case OP_NOT: - case OP_NOTI: - case OP_STAR: - case OP_MINSTAR: - case OP_PLUS: - case OP_MINPLUS: - case OP_QUERY: - case OP_MINQUERY: - case OP_UPTO: - case OP_MINUPTO: - case OP_EXACT: - case OP_POSSTAR: - case OP_POSPLUS: - case OP_POSQUERY: - case OP_POSUPTO: - case OP_STARI: - case OP_MINSTARI: - case OP_PLUSI: - case OP_MINPLUSI: - case OP_QUERYI: - case OP_MINQUERYI: - case OP_UPTOI: - case OP_MINUPTOI: - case OP_EXACTI: - case OP_POSSTARI: - case OP_POSPLUSI: - case OP_POSQUERYI: - case OP_POSUPTOI: - case OP_NOTSTAR: - case OP_NOTMINSTAR: - case OP_NOTPLUS: - case OP_NOTMINPLUS: - case OP_NOTQUERY: - case OP_NOTMINQUERY: - case OP_NOTUPTO: - case OP_NOTMINUPTO: - case OP_NOTEXACT: - case OP_NOTPOSSTAR: - case OP_NOTPOSPLUS: - case OP_NOTPOSQUERY: - case OP_NOTPOSUPTO: - case OP_NOTSTARI: - case OP_NOTMINSTARI: - case OP_NOTPLUSI: - case OP_NOTMINPLUSI: - case OP_NOTQUERYI: - case OP_NOTMINQUERYI: - case OP_NOTUPTOI: - case OP_NOTMINUPTOI: - case OP_NOTEXACTI: - case OP_NOTPOSSTARI: - case OP_NOTPOSPLUSI: - case OP_NOTPOSQUERYI: - case OP_NOTPOSUPTOI: - if (utf) utf16_char = TRUE; -#endif - /* Fall through. */ - - default: - length = PRIV(OP_lengths)[*ptr] - 1; - break; - - case OP_CLASS: - case OP_NCLASS: - /* Skip the character bit map. */ - ptr += 32/sizeof(pcre_uchar); - length = 0; - break; - - case OP_XCLASS: - /* Reverse the size of the XCLASS instance. */ - ptr++; -#if PCRE2_CODE_UNIT_WIDTH == 16 - *ptr = swap_uint16(*ptr); -#elif PCRE2_CODE_UNIT_WIDTH == 32 - *ptr = swap_uint32(*ptr); -#endif -#if PCRE2_CODE_UNIT_WIDTH != 32 - if (LINK_SIZE > 1) - { - /* LINK_SIZE can be 1 or 2 in 16 bit mode. */ - ptr++; - *ptr = swap_uint16(*ptr); - } -#endif - ptr++; - length = (GET(ptr, -LINK_SIZE)) - (1 + LINK_SIZE + 1); -#if PCRE2_CODE_UNIT_WIDTH == 16 - *ptr = swap_uint16(*ptr); -#elif PCRE2_CODE_UNIT_WIDTH == 32 - *ptr = swap_uint32(*ptr); -#endif - if ((*ptr & XCL_MAP) != 0) - { - /* Skip the character bit map. */ - ptr += 32/sizeof(pcre_uchar); - length -= 32/sizeof(pcre_uchar); - } - break; - } - ptr++; - } -/* Control should never reach here in 16/32 bit mode. */ -#endif - - -#endif /* NEVER */ - -return 0; -} - -/* End of pcre2_byte_order.c */