summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pcre.h.in41
-rw-r--r--pcre_byte_order.c4
-rw-r--r--pcre_compile.c16
-rw-r--r--pcre_dfa_exec.c12
-rw-r--r--pcre_exec.c17
-rw-r--r--pcre_fullinfo.c10
-rw-r--r--pcre_get.c28
-rw-r--r--pcre_internal.h14
-rw-r--r--pcre_jit_compile.c20
-rw-r--r--pcre_jit_test.c18
-rw-r--r--pcre_printint.c2
-rw-r--r--pcre_refcount.c4
-rw-r--r--pcre_study.c4
-rw-r--r--pcretest.c104
14 files changed, 184 insertions, 110 deletions
diff --git a/pcre.h.in b/pcre.h.in
index e2a0c85..a63092c 100644
--- a/pcre.h.in
+++ b/pcre.h.in
@@ -271,9 +271,15 @@ these bits, just add new ones on the end, in order to remain compatible. */
struct real_pcre; /* declaration; the definition is private */
typedef struct real_pcre pcre;
+struct real_pcre16; /* declaration; the definition is private */
+typedef struct real_pcre16 pcre16;
+
struct real_pcre_jit_stack; /* declaration; the definition is private */
typedef struct real_pcre_jit_stack pcre_jit_stack;
+struct real_pcre16_jit_stack; /* declaration; the definition is private */
+typedef struct real_pcre16_jit_stack pcre16_jit_stack;
+
/* If PCRE is compiled with 16 bit character support, PCRE_SCHAR16 must contain
a 16 bit wide signed data type. Otherwise it can be a dummy data type since
pcre16 functions are not implemented. There is a check for this in pcre_internal.h. */
@@ -353,7 +359,7 @@ typedef struct pcre16_callout_block {
/* ------------------------ Version 0 ------------------------------- */
int callout_number; /* Number compiled into pattern */
int *offset_vector; /* The offset vector */
- PCRE_SPTR subject; /* The subject being matched */
+ PCRE_SPTR16 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 */
@@ -403,22 +409,23 @@ PCRE_EXP_DECL int pcre16_callout(pcre16_callout_block *);
/* User defined callback which provides a stack just before the match starts. */
typedef pcre_jit_stack *(*pcre_jit_callback)(void *);
+typedef pcre16_jit_stack *(*pcre16_jit_callback)(void *);
/* Exported PCRE functions */
PCRE_EXP_DECL pcre *pcre_compile(const char *, int, const char **, int *,
const unsigned char *);
-PCRE_EXP_DECL pcre *pcre16_compile(PCRE_SPTR16, int, const char **, int *,
+PCRE_EXP_DECL pcre16 *pcre16_compile(PCRE_SPTR16, int, const char **, int *,
const unsigned char *);
PCRE_EXP_DECL pcre *pcre_compile2(const char *, int, int *, const char **,
int *, const unsigned char *);
-PCRE_EXP_DECL pcre *pcre16_compile2(PCRE_SPTR16, int, int *, const char **,
+PCRE_EXP_DECL pcre16 *pcre16_compile2(PCRE_SPTR16, int, int *, const char **,
int *, const unsigned char *);
PCRE_EXP_DECL int pcre_config(int, void *);
PCRE_EXP_DECL int pcre16_config(int, void *);
PCRE_EXP_DECL int pcre_copy_named_substring(const pcre *, const char *,
int *, int, const char *, char *, int);
-PCRE_EXP_DECL int pcre16_copy_named_substring(const pcre *, PCRE_SPTR16,
+PCRE_EXP_DECL int pcre16_copy_named_substring(const pcre16 *, PCRE_SPTR16,
int *, int, PCRE_SPTR16, PCRE_SCHAR16 *, int);
PCRE_EXP_DECL int pcre_copy_substring(const char *, int *, int, int,
char *, int);
@@ -426,29 +433,29 @@ PCRE_EXP_DECL int pcre16_copy_substring(PCRE_SPTR16, int *, int, int,
PCRE_SCHAR16 *, int);
PCRE_EXP_DECL int pcre_dfa_exec(const pcre *, const pcre_extra *,
const char *, int, int, int, int *, int , int *, int);
-PCRE_EXP_DECL int pcre16_dfa_exec(const pcre *, const pcre16_extra *,
+PCRE_EXP_DECL int pcre16_dfa_exec(const pcre16 *, const pcre16_extra *,
PCRE_SPTR16, int, int, int, int *, int , int *, int);
PCRE_EXP_DECL int pcre_exec(const pcre *, const pcre_extra *, PCRE_SPTR,
int, int, int, int *, int);
-PCRE_EXP_DECL int pcre16_exec(const pcre *, const pcre16_extra *, PCRE_SPTR16,
- int, int, int, int *, int);
+PCRE_EXP_DECL int pcre16_exec(const pcre16 *, const pcre16_extra *,
+ PCRE_SPTR16, int, int, int, int *, int);
PCRE_EXP_DECL void pcre_free_substring(const char *);
PCRE_EXP_DECL void pcre16_free_substring(PCRE_SPTR16);
PCRE_EXP_DECL void pcre_free_substring_list(const char **);
PCRE_EXP_DECL void pcre16_free_substring_list(PCRE_SPTR16 *);
PCRE_EXP_DECL int pcre_fullinfo(const pcre *, const pcre_extra *, int,
void *);
-PCRE_EXP_DECL int pcre16_fullinfo(const pcre *, const pcre16_extra *, int,
+PCRE_EXP_DECL int pcre16_fullinfo(const pcre16 *, const pcre16_extra *, int,
void *);
PCRE_EXP_DECL int pcre_get_named_substring(const pcre *, const char *,
int *, int, const char *, const char **);
-PCRE_EXP_DECL int pcre16_get_named_substring(const pcre *, PCRE_SPTR16,
+PCRE_EXP_DECL int pcre16_get_named_substring(const pcre16 *, PCRE_SPTR16,
int *, int, PCRE_SPTR16, PCRE_SPTR16 *);
PCRE_EXP_DECL int pcre_get_stringnumber(const pcre *, const char *);
-PCRE_EXP_DECL int pcre16_get_stringnumber(const pcre *, PCRE_SPTR16);
+PCRE_EXP_DECL int pcre16_get_stringnumber(const pcre16 *, PCRE_SPTR16);
PCRE_EXP_DECL int pcre_get_stringtable_entries(const pcre *, const char *,
char **, char **);
-PCRE_EXP_DECL int pcre16_get_stringtable_entries(const pcre *, PCRE_SPTR16,
+PCRE_EXP_DECL int pcre16_get_stringtable_entries(const pcre16 *, PCRE_SPTR16,
PCRE_SCHAR16 **, PCRE_SCHAR16 **);
PCRE_EXP_DECL int pcre_get_substring(const char *, int *, int, int,
const char **);
@@ -461,9 +468,9 @@ PCRE_EXP_DECL int pcre16_get_substring_list(PCRE_SPTR16, int *, int,
PCRE_EXP_DECL const unsigned char *pcre_maketables(void);
PCRE_EXP_DECL const unsigned char *pcre16_maketables(void);
PCRE_EXP_DECL int pcre_refcount(pcre *, int);
-PCRE_EXP_DECL int pcre16_refcount(pcre *, int);
+PCRE_EXP_DECL int pcre16_refcount(pcre16 *, int);
PCRE_EXP_DECL pcre_extra *pcre_study(const pcre *, int, const char **);
-PCRE_EXP_DECL pcre16_extra *pcre16_study(const pcre *, int, const char **);
+PCRE_EXP_DECL pcre16_extra *pcre16_study(const pcre16 *, int, const char **);
PCRE_EXP_DECL void pcre_free_study(pcre_extra *);
PCRE_EXP_DECL void pcre16_free_study(pcre16_extra *);
PCRE_EXP_DECL const char *pcre_version(void);
@@ -472,7 +479,7 @@ PCRE_EXP_DECL const char *pcre16_version(void);
/* Utility functions for byte order swaps. */
PCRE_EXP_DECL int pcre_pattern_to_host_byte_order(pcre *, pcre_extra *,
const unsigned char *);
-PCRE_EXP_DECL int pcre16_pattern_to_host_byte_order(pcre *, pcre16_extra *,
+PCRE_EXP_DECL int pcre16_pattern_to_host_byte_order(pcre16 *, pcre16_extra *,
const unsigned char *);
PCRE_EXP_DECL int pcre16_utf16_to_host_byte_order(PCRE_SCHAR16 *,
PCRE_SPTR16, int, int *, int);
@@ -480,13 +487,13 @@ PCRE_EXP_DECL int pcre16_utf16_to_host_byte_order(PCRE_SCHAR16 *,
/* JIT compiler related functions. */
PCRE_EXP_DECL pcre_jit_stack *pcre_jit_stack_alloc(int, int);
-PCRE_EXP_DECL pcre_jit_stack *pcre16_jit_stack_alloc(int, int);
+PCRE_EXP_DECL pcre16_jit_stack *pcre16_jit_stack_alloc(int, int);
PCRE_EXP_DECL void pcre_jit_stack_free(pcre_jit_stack *);
-PCRE_EXP_DECL void pcre16_jit_stack_free(pcre_jit_stack *);
+PCRE_EXP_DECL void pcre16_jit_stack_free(pcre16_jit_stack *);
PCRE_EXP_DECL void pcre_assign_jit_stack(pcre_extra *,
pcre_jit_callback, void *);
PCRE_EXP_DECL void pcre16_assign_jit_stack(pcre16_extra *,
- pcre_jit_callback, void *);
+ pcre16_jit_callback, void *);
#ifdef __cplusplus
} /* extern "C" */
diff --git a/pcre_byte_order.c b/pcre_byte_order.c
index 09f8c4a..6ac8325 100644
--- a/pcre_byte_order.c
+++ b/pcre_byte_order.c
@@ -99,11 +99,11 @@ Returns: 0 if the swap is successful, negative on error
PCRE_EXP_DECL int pcre_pattern_to_host_byte_order(pcre *argument_re,
pcre_extra *extra_data, const unsigned char *tables)
#else
-PCRE_EXP_DECL int pcre16_pattern_to_host_byte_order(pcre *argument_re,
+PCRE_EXP_DECL int pcre16_pattern_to_host_byte_order(pcre16 *argument_re,
pcre16_extra *extra_data, const unsigned char *tables)
#endif
{
-real_pcre *re = (real_pcre *)argument_re;
+REAL_PCRE *re = (REAL_PCRE *)argument_re;
pcre_study_data *study;
#ifndef COMPILE_PCRE8
pcre_uchar *ptr;
diff --git a/pcre_compile.c b/pcre_compile.c
index 613d941..5f95ac7 100644
--- a/pcre_compile.c
+++ b/pcre_compile.c
@@ -7563,7 +7563,7 @@ PCRE_EXP_DEFN pcre * PCRE_CALL_CONVENTION
pcre_compile(const char *pattern, int options, const char **errorptr,
int *erroroffset, const unsigned char *tables)
#else
-PCRE_EXP_DEFN pcre * PCRE_CALL_CONVENTION
+PCRE_EXP_DEFN pcre16 * PCRE_CALL_CONVENTION
pcre16_compile(PCRE_SPTR16 pattern, int options, const char **errorptr,
int *erroroffset, const unsigned char *tables)
#endif
@@ -7581,12 +7581,12 @@ PCRE_EXP_DEFN pcre * PCRE_CALL_CONVENTION
pcre_compile2(const char *pattern, int options, int *errorcodeptr,
const char **errorptr, int *erroroffset, const unsigned char *tables)
#else
-PCRE_EXP_DEFN pcre * PCRE_CALL_CONVENTION
+PCRE_EXP_DEFN pcre16 * PCRE_CALL_CONVENTION
pcre16_compile2(PCRE_SPTR16 pattern, int options, int *errorcodeptr,
const char **errorptr, int *erroroffset, const unsigned char *tables)
#endif
{
-real_pcre *re;
+REAL_PCRE *re;
int length = 1; /* For final END opcode */
pcre_int32 firstchar, reqchar;
int newline;
@@ -7848,8 +7848,8 @@ externally provided function. Integer overflow should no longer be possible
because nowadays we limit the maximum value of cd->names_found and
cd->name_entry_size. */
-size = sizeof(real_pcre) + (length + cd->names_found * cd->name_entry_size) * sizeof(pcre_uchar);
-re = (real_pcre *)(PUBL(malloc))(size);
+size = sizeof(REAL_PCRE) + (length + cd->names_found * cd->name_entry_size) * sizeof(pcre_uchar);
+re = (REAL_PCRE *)(PUBL(malloc))(size);
if (re == NULL)
{
@@ -7870,7 +7870,7 @@ re->flags = cd->external_flags;
re->dummy1 = 0;
re->first_char = 0;
re->req_char = 0;
-re->name_table_offset = sizeof(real_pcre) / sizeof(pcre_uchar);
+re->name_table_offset = sizeof(REAL_PCRE) / sizeof(pcre_uchar);
re->name_entry_size = cd->name_entry_size;
re->name_count = cd->names_found;
re->ref_count = 0;
@@ -8152,7 +8152,11 @@ if (code - codestart > length)
}
#endif /* PCRE_DEBUG */
+#ifdef COMPILE_PCRE8
return (pcre *)re;
+#else
+return (pcre16 *)re;
+#endif
}
/* End of pcre_compile.c */
diff --git a/pcre_dfa_exec.c b/pcre_dfa_exec.c
index ba9b416..887c79b 100644
--- a/pcre_dfa_exec.c
+++ b/pcre_dfa_exec.c
@@ -2557,7 +2557,11 @@ for (;;)
cb.version = 1; /* Version 1 of the callout block */
cb.callout_number = code[LINK_SIZE+2];
cb.offset_vector = offsets;
+#ifdef COMPILE_PCRE8
cb.subject = (PCRE_SPTR)start_subject;
+#else
+ cb.subject = (PCRE_SPTR16)start_subject;
+#endif
cb.subject_length = (int)(end_subject - start_subject);
cb.start_match = (int)(current_subject - start_subject);
cb.current_position = (int)(ptr - start_subject);
@@ -2896,7 +2900,11 @@ for (;;)
cb.version = 1; /* Version 1 of the callout block */
cb.callout_number = code[1];
cb.offset_vector = offsets;
+#ifdef COMPILE_PCRE8
cb.subject = (PCRE_SPTR)start_subject;
+#else
+ cb.subject = (PCRE_SPTR16)start_subject;
+#endif
cb.subject_length = (int)(end_subject - start_subject);
cb.start_match = (int)(current_subject - start_subject);
cb.current_position = (int)(ptr - start_subject);
@@ -3013,12 +3021,12 @@ pcre_dfa_exec(const pcre *argument_re, const pcre_extra *extra_data,
int offsetcount, int *workspace, int wscount)
#else
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
-pcre16_dfa_exec(const pcre *argument_re, const pcre16_extra *extra_data,
+pcre16_dfa_exec(const pcre16 *argument_re, const pcre16_extra *extra_data,
PCRE_SPTR16 subject, int length, int start_offset, int options, int *offsets,
int offsetcount, int *workspace, int wscount)
#endif
{
-real_pcre *re = (real_pcre *)argument_re;
+REAL_PCRE *re = (REAL_PCRE *)argument_re;
dfa_match_data match_block;
dfa_match_data *md = &match_block;
BOOL utf, anchored, startline, firstline;
diff --git a/pcre_exec.c b/pcre_exec.c
index de2075e..ecb7cdc 100644
--- a/pcre_exec.c
+++ b/pcre_exec.c
@@ -1227,7 +1227,11 @@ for (;;)
cb.version = 2; /* Version 1 of the callout block */
cb.callout_number = ecode[LINK_SIZE+2];
cb.offset_vector = md->offset_vector;
+#ifdef COMPILE_PCRE8
cb.subject = (PCRE_SPTR)md->start_subject;
+#else
+ cb.subject = (PCRE_SPTR16)md->start_subject;
+#endif
cb.subject_length = (int)(md->end_subject - md->start_subject);
cb.start_match = (int)(mstart - md->start_subject);
cb.current_position = (int)(eptr - md->start_subject);
@@ -1637,7 +1641,11 @@ for (;;)
cb.version = 2; /* Version 1 of the callout block */
cb.callout_number = ecode[1];
cb.offset_vector = md->offset_vector;
+#ifdef COMPILE_PCRE8
cb.subject = (PCRE_SPTR)md->start_subject;
+#else
+ cb.subject = (PCRE_SPTR16)md->start_subject;
+#endif
cb.subject_length = (int)(md->end_subject - md->start_subject);
cb.start_match = (int)(mstart - md->start_subject);
cb.current_position = (int)(eptr - md->start_subject);
@@ -6139,7 +6147,7 @@ pcre_exec(const pcre *argument_re, const pcre_extra *extra_data,
int offsetcount)
#else
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
-pcre16_exec(const pcre *argument_re, const pcre16_extra *extra_data,
+pcre16_exec(const pcre16 *argument_re, const pcre16_extra *extra_data,
PCRE_SPTR16 subject, int length, int start_offset, int options, int *offsets,
int offsetcount)
#endif
@@ -6167,8 +6175,7 @@ PCRE_PUCHAR start_partial = NULL;
PCRE_PUCHAR req_char_ptr = start_match - 1;
const pcre_study_data *study;
-const real_pcre *external_re = (const real_pcre *)argument_re;
-const real_pcre *re = external_re;
+const REAL_PCRE *re = (const REAL_PCRE *)argument_re;
/* Plausibility checks */
@@ -6255,7 +6262,7 @@ md->callout_data = NULL;
/* The table pointer is always in native byte order. */
-tables = external_re->tables;
+tables = re->tables;
if (extra_data != NULL)
{
@@ -6295,7 +6302,7 @@ firstline = (re->options & PCRE_FIRSTLINE) != 0;
/* The code starts after the real_pcre block and the capture name table. */
-md->start_code = (const pcre_uchar *)external_re + re->name_table_offset +
+md->start_code = (const pcre_uchar *)re + re->name_table_offset +
re->name_count * re->name_entry_size;
md->start_subject = (PCRE_PUCHAR)subject;
diff --git a/pcre_fullinfo.c b/pcre_fullinfo.c
index 22ec227..7bf27cd 100644
--- a/pcre_fullinfo.c
+++ b/pcre_fullinfo.c
@@ -67,15 +67,15 @@ Returns: 0 if data returned, negative on error
#ifdef COMPILE_PCRE8
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
-pcre_fullinfo(const pcre *argument_re, const pcre_extra *extra_data, int what,
- void *where)
+pcre_fullinfo(const pcre *argument_re, const pcre_extra *extra_data,
+ int what, void *where)
#else
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
-pcre16_fullinfo(const pcre *argument_re, const pcre16_extra *extra_data, int what,
- void *where)
+pcre16_fullinfo(const pcre16 *argument_re, const pcre16_extra *extra_data,
+ int what, void *where)
#endif
{
-const real_pcre *re = (const real_pcre *)argument_re;
+const REAL_PCRE *re = (const REAL_PCRE *)argument_re;
const pcre_study_data *study = NULL;
if (re == NULL || where == NULL) return PCRE_ERROR_NULL;
diff --git a/pcre_get.c b/pcre_get.c
index bc3c3cf..6ea17b7 100644
--- a/pcre_get.c
+++ b/pcre_get.c
@@ -70,7 +70,7 @@ PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
pcre_get_stringnumber(const pcre *code, const char *stringname)
#else
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
-pcre16_get_stringnumber(const pcre *code, PCRE_SPTR16 stringname)
+pcre16_get_stringnumber(const pcre16 *code, PCRE_SPTR16 stringname)
#endif
{
int rc;
@@ -138,7 +138,7 @@ pcre_get_stringtable_entries(const pcre *code, const char *stringname,
char **firstptr, char **lastptr)
#else
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
-pcre16_get_stringtable_entries(const pcre *code, PCRE_SPTR16 stringname,
+pcre16_get_stringtable_entries(const pcre16 *code, PCRE_SPTR16 stringname,
PCRE_SCHAR16 **firstptr, PCRE_SCHAR16 **lastptr)
#endif
{
@@ -231,10 +231,10 @@ static int
get_first_set(const pcre *code, const char *stringname, int *ovector)
#else
static int
-get_first_set(const pcre *code, PCRE_SPTR16 stringname, int *ovector)
+get_first_set(const pcre16 *code, PCRE_SPTR16 stringname, int *ovector)
#endif
{
-const real_pcre *re = (const real_pcre *)code;
+const REAL_PCRE *re = (const REAL_PCRE *)code;
int entrysize;
pcre_uchar *first, *last;
pcre_uchar *entry;
@@ -341,12 +341,14 @@ Returns: if successful:
#ifdef COMPILE_PCRE8
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
-pcre_copy_named_substring(const pcre *code, const char *subject, int *ovector,
- int stringcount, const char *stringname, char *buffer, int size)
+pcre_copy_named_substring(const pcre *code, const char *subject,
+ int *ovector, int stringcount, const char *stringname,
+ char *buffer, int size)
#else
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
-pcre16_copy_named_substring(const pcre *code, PCRE_SPTR16 subject, int *ovector,
- int stringcount, PCRE_SPTR16 stringname, PCRE_SCHAR16 *buffer, int size)
+pcre16_copy_named_substring(const pcre16 *code, PCRE_SPTR16 subject,
+ int *ovector, int stringcount, PCRE_SPTR16 stringname,
+ PCRE_SCHAR16 *buffer, int size)
#endif
{
int n = get_first_set(code, stringname, ovector);
@@ -534,12 +536,14 @@ Returns: if successful:
#ifdef COMPILE_PCRE8
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
-pcre_get_named_substring(const pcre *code, const char *subject, int *ovector,
- int stringcount, const char *stringname, const char **stringptr)
+pcre_get_named_substring(const pcre *code, const char *subject,
+ int *ovector, int stringcount, const char *stringname,
+ const char **stringptr)
#else
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
-pcre16_get_named_substring(const pcre *code, PCRE_SPTR16 subject, int *ovector,
- int stringcount, PCRE_SPTR16 stringname, PCRE_SPTR16 *stringptr)
+pcre16_get_named_substring(const pcre16 *code, PCRE_SPTR16 subject,
+ int *ovector, int stringcount, PCRE_SPTR16 stringname,
+ PCRE_SPTR16 *stringptr)
#endif
{
int n = get_first_set(code, stringname, ovector);
diff --git a/pcre_internal.h b/pcre_internal.h
index 031d6e6..e5d42bd 100644
--- a/pcre_internal.h
+++ b/pcre_internal.h
@@ -1958,7 +1958,13 @@ fields are present. Currently PCRE always sets the dummy fields to zero.
NOTE NOTE NOTE
*/
-typedef struct real_pcre {
+#ifdef COMPILE_PCRE8
+#define REAL_PCRE real_pcre
+#else
+#define REAL_PCRE real_pcre16
+#endif
+
+typedef struct REAL_PCRE {
pcre_uint32 magic_number;
pcre_uint32 size; /* Total that was malloced */
pcre_uint32 options; /* Public options */
@@ -1975,7 +1981,7 @@ typedef struct real_pcre {
const pcre_uint8 *tables; /* Pointer to tables or NULL for std */
const pcre_uint8 *nullpad; /* NULL padding */
-} real_pcre;
+} REAL_PCRE;
/* The format of the block used to store data from pcre_study(). The same
remark (see NOTE above) about extending this structure applies. */
@@ -2274,8 +2280,8 @@ extern BOOL PRIV(was_newline)(PCRE_PUCHAR, int, PCRE_PUCHAR,
extern BOOL PRIV(xclass)(int, const pcre_uchar *, BOOL);
#ifdef SUPPORT_JIT
-extern void PRIV(jit_compile)(const real_pcre *, PUBL(extra) *);
-extern int PRIV(jit_exec)(const real_pcre *, void *,
+extern void PRIV(jit_compile)(const REAL_PCRE *, PUBL(extra) *);
+extern int PRIV(jit_exec)(const REAL_PCRE *, void *,
const pcre_uchar *, int, int, int, int, int *, int);
extern void PRIV(jit_free)(void *);
extern int PRIV(jit_get_size)(void *);
diff --git a/pcre_jit_compile.c b/pcre_jit_compile.c
index 5286ffd..ec7dece 100644
--- a/pcre_jit_compile.c
+++ b/pcre_jit_compile.c
@@ -164,7 +164,7 @@ typedef struct jit_arguments {
typedef struct executable_function {
void *executable_func;
- pcre_jit_callback callback;
+ PUBL(jit_callback) callback;
void *userdata;
sljit_uw executable_size;
} executable_function;
@@ -6354,7 +6354,7 @@ sljit_emit_fast_return(compiler, SLJIT_MEM1(STACK_TOP), 0);
#undef CURRENT_AS
void
-PRIV(jit_compile)(const real_pcre *re, PUBL(extra) *extra)
+PRIV(jit_compile)(const REAL_PCRE *re, PUBL(extra) *extra)
{
struct sljit_compiler *compiler;
fallback_common rootfallback;
@@ -6741,7 +6741,7 @@ return convert_executable_func.call_executable_func(arguments);
}
int
-PRIV(jit_exec)(const real_pcre *re, void *executable_func,
+PRIV(jit_exec)(const REAL_PCRE *re, void *executable_func,
const pcre_uchar *subject, int length, int start_offset, int options,
int match_limit, int *offsets, int offsetcount)
{
@@ -6814,7 +6814,7 @@ return ((executable_function*)executable_func)->executable_size;
PCRE_EXP_DECL pcre_jit_stack *
pcre_jit_stack_alloc(int startsize, int maxsize)
#else
-PCRE_EXP_DECL pcre_jit_stack *
+PCRE_EXP_DECL pcre16_jit_stack *
pcre16_jit_stack_alloc(int startsize, int maxsize)
#endif
{
@@ -6824,7 +6824,7 @@ if (startsize > maxsize)
startsize = maxsize;
startsize = (startsize + STACK_GROWTH_RATE - 1) & ~(STACK_GROWTH_RATE - 1);
maxsize = (maxsize + STACK_GROWTH_RATE - 1) & ~(STACK_GROWTH_RATE - 1);
-return (pcre_jit_stack*)sljit_allocate_stack(startsize, maxsize);
+return (PUBL(jit_stack)*)sljit_allocate_stack(startsize, maxsize);
}
#ifdef COMPILE_PCRE8
@@ -6832,7 +6832,7 @@ PCRE_EXP_DECL void
pcre_jit_stack_free(pcre_jit_stack *stack)
#else
PCRE_EXP_DECL void
-pcre16_jit_stack_free(pcre_jit_stack *stack)
+pcre16_jit_stack_free(pcre16_jit_stack *stack)
#endif
{
sljit_free_stack((struct sljit_stack*)stack);
@@ -6843,7 +6843,7 @@ PCRE_EXP_DECL void
pcre_assign_jit_stack(pcre_extra *extra, pcre_jit_callback callback, void *userdata)
#else
PCRE_EXP_DECL void
-pcre16_assign_jit_stack(pcre16_extra *extra, pcre_jit_callback callback, void *userdata)
+pcre16_assign_jit_stack(pcre16_extra *extra, pcre16_jit_callback callback, void *userdata)
#endif
{
executable_function *function;
@@ -6866,7 +6866,7 @@ being compiled. */
PCRE_EXP_DECL pcre_jit_stack *
pcre_jit_stack_alloc(int startsize, int maxsize)
#else
-PCRE_EXP_DECL pcre_jit_stack *
+PCRE_EXP_DECL pcre16_jit_stack *
pcre16_jit_stack_alloc(int startsize, int maxsize)
#endif
{
@@ -6880,7 +6880,7 @@ PCRE_EXP_DECL void
pcre_jit_stack_free(pcre_jit_stack *stack)
#else
PCRE_EXP_DECL void
-pcre16_jit_stack_free(pcre_jit_stack *stack)
+pcre16_jit_stack_free(pcre16_jit_stack *stack)
#endif
{
(void)stack;
@@ -6891,7 +6891,7 @@ PCRE_EXP_DECL void
pcre_assign_jit_stack(pcre_extra *extra, pcre_jit_callback callback, void *userdata)
#else
PCRE_EXP_DECL void
-pcre16_assign_jit_stack(pcre16_extra *extra, pcre_jit_callback callback, void *userdata)
+pcre16_assign_jit_stack(pcre16_extra *extra, pcre16_jit_callback callback, void *userdata)
#endif
{
(void)extra;
diff --git a/pcre_jit_test.c b/pcre_jit_test.c
index c3812fc..f9e9991 100644
--- a/pcre_jit_test.c
+++ b/pcre_jit_test.c
@@ -672,13 +672,14 @@ static const unsigned char *tables(int mode)
/* The purpose of this function to allow valgrind
for reporting invalid reads and writes. */
static unsigned char *tables_copy;
- pcre *regex;
const char *errorptr;
int erroroffset;
const unsigned char *default_tables;
#ifdef SUPPORT_PCRE8
+ pcre *regex;
char null_str[1] = { 0 };
#else
+ pcre16 *regex;
PCRE_SCHAR16 null_str[1] = { 0 };
#endif
@@ -720,11 +721,16 @@ static const unsigned char *tables(int mode)
return tables_copy;
}
-static pcre_jit_stack* callback(void *arg)
+static pcre_jit_stack* callback8(void *arg)
{
return (pcre_jit_stack *)arg;
}
+static pcre16_jit_stack* callback16(void *arg)
+{
+ return (pcre16_jit_stack *)arg;
+}
+
#ifdef SUPPORT_PCRE8
static void setstack8(pcre_extra *extra)
{
@@ -740,14 +746,14 @@ static void setstack8(pcre_extra *extra)
if (!stack)
stack = pcre_jit_stack_alloc(1, 1024 * 1024);
/* Extra can be NULL. */
- pcre_assign_jit_stack(extra, callback, stack);
+ pcre_assign_jit_stack(extra, callback8, stack);
}
#endif /* SUPPORT_PCRE8 */
#ifdef SUPPORT_PCRE16
static void setstack16(pcre16_extra *extra)
{
- static pcre_jit_stack *stack;
+ static pcre16_jit_stack *stack;
if (!extra) {
if (stack)
@@ -759,7 +765,7 @@ static void setstack16(pcre16_extra *extra)
if (!stack)
stack = pcre16_jit_stack_alloc(1, 1024 * 1024);
/* Extra can be NULL. */
- pcre16_assign_jit_stack(extra, callback, stack);
+ pcre16_assign_jit_stack(extra, callback16, stack);
}
#endif /* SUPPORT_PCRE8 */
@@ -865,7 +871,7 @@ static int regression_tests(void)
int disabled_flags8 = 0;
#endif
#ifdef SUPPORT_PCRE16
- pcre *re16;
+ pcre16 *re16;
pcre16_extra *extra16;
int ovector16_1[32];
int ovector16_2[32];
diff --git a/pcre_printint.c b/pcre_printint.c
index 7d8f62d..6e98286 100644
--- a/pcre_printint.c
+++ b/pcre_printint.c
@@ -250,7 +250,7 @@ void
pcre16_printint(pcre *external_re, FILE *f, BOOL print_lengths)
#endif
{
-real_pcre *re = (real_pcre *)external_re;
+REAL_PCRE *re = (REAL_PCRE *)external_re;
pcre_uchar *codestart, *code;
BOOL utf;
diff --git a/pcre_refcount.c b/pcre_refcount.c
index 1c0475a..441e4dc 100644
--- a/pcre_refcount.c
+++ b/pcre_refcount.c
@@ -73,10 +73,10 @@ PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
pcre_refcount(pcre *argument_re, int adjust)
#else
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
-pcre16_refcount(pcre *argument_re, int adjust)
+pcre16_refcount(pcre16 *argument_re, int adjust)
#endif
{
-real_pcre *re = (real_pcre *)argument_re;
+REAL_PCRE *re = (REAL_PCRE *)argument_re;
if (re == NULL) return PCRE_ERROR_NULL;
if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
if ((re->flags & PCRE_MODE) == 0) return PCRE_ERROR_BADMODE;
diff --git a/pcre_study.c b/pcre_study.c
index efee26b..d544826 100644
--- a/pcre_study.c
+++ b/pcre_study.c
@@ -1317,7 +1317,7 @@ PCRE_EXP_DEFN pcre_extra * PCRE_CALL_CONVENTION
pcre_study(const pcre *external_re, int options, const char **errorptr)
#else
PCRE_EXP_DEFN pcre16_extra * PCRE_CALL_CONVENTION
-pcre16_study(const pcre *external_re, int options, const char **errorptr)
+pcre16_study(const pcre16 *external_re, int options, const char **errorptr)
#endif
{
int min;
@@ -1328,7 +1328,7 @@ pcre_study_data *study;
const pcre_uint8 *tables;
pcre_uchar *code;
compile_data compile_block;
-const real_pcre *re = (const real_pcre *)external_re;
+const REAL_PCRE *re = (const REAL_PCRE *)external_re;
*errorptr = NULL;
diff --git a/pcretest.c b/pcretest.c
index bf641dd..b62ecbb 100644
--- a/pcretest.c
+++ b/pcretest.c
@@ -209,11 +209,13 @@ argument, the casting might be incorrectly applied. */
#define READ_CAPTURE_NAME8(p, cn8, cn16, re) \
p = read_capture_name8(p, cn8, re)
+#define STRLEN8(p) ((int)strlen((char *)p))
+
#define SET_PCRE_CALLOUT8(callout) \
pcre_callout = callout
-#define STRLEN8(p) ((int)strlen((char *)p))
-
+#define PCRE_ASSIGN_JIT_STACK8(extra, callback, userdata) \
+ pcre_assign_jit_stack(extra, callback, userdata)
#define PCRE_COMPILE8(re, pat, options, error, erroffset, tables) \
re = pcre_compile((char *)pat, options, error, erroffset, tables)
@@ -268,6 +270,12 @@ argument, the casting might be incorrectly applied. */
#define PCRE_STUDY8(extra, re, options, error) \
extra = pcre_study(re, options, error)
+#define PCRE_JIT_STACK_ALLOC8(startsize, maxsize) \
+ pcre_jit_stack_alloc(startsize, maxsize)
+
+#define PCRE_JIT_STACK_FREE8(stack) \
+ pcre_jit_stack_free(stack)
+
#endif /* SUPPORT_PCRE8 */
/* -----------------------------------------------------------*/
@@ -288,14 +296,18 @@ argument, the casting might be incorrectly applied. */
#define SET_PCRE_CALLOUT16(callout) \
pcre16_callout = (int (*)(pcre16_callout_block *))callout
+#define PCRE_ASSIGN_JIT_STACK16(extra, callback, userdata) \
+ pcre16_assign_jit_stack((pcre16_extra *)extra, \
+ (pcre16_jit_callback)callback, userdata)
#define PCRE_COMPILE16(re, pat, options, error, erroffset, tables) \
- re = pcre16_compile((PCRE_SPTR16)pat, options, error, erroffset, tables)
+ re = (pcre *)pcre16_compile((PCRE_SPTR16)pat, options, error, erroffset, \
+ tables)
#define PCRE_COPY_NAMED_SUBSTRING16(rc, re, bptr, offsets, count, \
namesptr, cbuffer, size) \
- rc = pcre16_copy_named_substring(re, (PCRE_SPTR16)bptr, offsets, count, \
- (PCRE_SPTR16)namesptr, (PCRE_SCHAR16 *)cbuffer, size/2)
+ rc = pcre16_copy_named_substring((pcre16 *)re, (PCRE_SPTR16)bptr, offsets, \
+ count, (PCRE_SPTR16)namesptr, (PCRE_SCHAR16 *)cbuffer, size/2)
#define PCRE_COPY_SUBSTRING16(rc, bptr, offsets, count, i, cbuffer, size) \
rc = pcre16_copy_substring((PCRE_SPTR16)bptr, offsets, count, i, \
@@ -303,13 +315,14 @@ argument, the casting might be incorrectly applied. */
#define PCRE_DFA_EXEC16(count, re, extra, bptr, len, start_offset, options, \
offsets, size_offsets, workspace, size_workspace) \
- count = pcre16_dfa_exec(re, (pcre16_extra *)extra, (PCRE_SPTR16)bptr, len, \
- start_offset, options, offsets, size_offsets, workspace, size_workspace)
+ count = pcre16_dfa_exec((pcre16 *)re, (pcre16_extra *)extra, \
+ (PCRE_SPTR16)bptr, len, start_offset, options, offsets, size_offsets, \
+ workspace, size_workspace)
#define PCRE_EXEC16(count, re, extra, bptr, len, start_offset, options, \
offsets, size_offsets) \
- count = pcre16_exec(re, (pcre16_extra *)extra, (PCRE_SPTR16)bptr, len, \
- start_offset, options, offsets, size_offsets)
+ count = pcre16_exec((pcre16 *)re, (pcre16_extra *)extra, (PCRE_SPTR16)bptr, \
+ len, start_offset, options, offsets, size_offsets)
#define PCRE_FREE_STUDY16(extra) \
pcre16_free_study((pcre16_extra *)extra)
@@ -322,8 +335,8 @@ argument, the casting might be incorrectly applied. */
#define PCRE_GET_NAMED_SUBSTRING16(rc, re, bptr, offsets, count, \
getnamesptr, subsptr) \
- rc = pcre16_get_named_substring(re, (PCRE_SPTR16)bptr, offsets, count, \
- (PCRE_SPTR16)getnamesptr, (PCRE_SPTR16 *)(void*)subsptr)
+ rc = pcre16_get_named_substring((pcre16 *)re, (PCRE_SPTR16)bptr, offsets, \
+ count, (PCRE_SPTR16)getnamesptr, (PCRE_SPTR16 *)(void*)subsptr)
#define PCRE_GET_STRINGNUMBER16(n, rc, ptr) \
n = pcre16_get_stringnumber(re, (PCRE_SPTR16)ptr)
@@ -337,13 +350,20 @@ argument, the casting might be incorrectly applied. */
(PCRE_SPTR16 **)(void*)listptr)
#define PCRE_PATTERN_TO_HOST_BYTE_ORDER16(rc, re, extra, tables) \
- rc = pcre16_pattern_to_host_byte_order(re, (pcre16_extra *)extra, tables)
+ rc = pcre16_pattern_to_host_byte_order((pcre16 *)re, (pcre16_extra *)extra, \
+ tables)
#define PCRE_PRINTINT16(re, outfile, debug_lengths) \
pcre16_printint(re, outfile, debug_lengths)
#define PCRE_STUDY16(extra, re, options, error) \
- extra = (pcre_extra *)pcre16_study(re, options, error)
+ extra = (pcre_extra *)pcre16_study((pcre16 *)re, options, error)
+
+#define PCRE_JIT_STACK_ALLOC16(startsize, maxsize) \
+ (pcre_jit_stack *)pcre16_jit_stack_alloc(startsize, maxsize)
+
+#define PCRE_JIT_STACK_FREE16(stack) \
+ pcre16_jit_stack_free((pcre16_jit_stack *)stack)
#endif /* SUPPORT_PCRE16 */
@@ -382,7 +402,11 @@ version is called. ----- */
#define STRLEN(p) (use_pcre16? STRLEN16(p) : STRLEN8(p))
-#define PCRE_ASSIGN_JIT_STACK pcre_assign_jit_stack
+#define PCRE_ASSIGN_JIT_STACK(extra, callback, userdata) \
+ if (use_pcre16) \
+ PCRE_ASSIGN_JIT_STACK16(extra, callback, userdata); \
+ else \
+ PCRE_ASSIGN_JIT_STACK8(extra, callback, userdata)
#define PCRE_COMPILE(re, pat, options, error, erroffset, tables) \
if (use_pcre16) \
@@ -470,8 +494,16 @@ version is called. ----- */
else \
PCRE_GET_SUBSTRING_LIST8(rc, bptr, offsets, count, listptr)
-#define PCRE_JIT_STACK_ALLOC pcre_jit_stack_alloc
-#define PCRE_JIT_STACK_FREE pcre_jit_stack_free
+#define PCRE_JIT_STACK_ALLOC(startsize, maxsize) \
+ (use_pcre16 ? \
+ PCRE_JIT_STACK_ALLOC16(startsize, maxsize) \
+ :PCRE_JIT_STACK_ALLOC8(startsize, maxsize))
+
+#define PCRE_JIT_STACK_FREE(stack) \
+ if (use_pcre16) \
+ PCRE_JIT_STACK_FREE16(stack); \
+ else \
+ PCRE_JIT_STACK_FREE8(stack)
#define PCRE_MAKETABLES \
(use_pcre16? pcre16_maketables() : pcre_maketables())
@@ -503,7 +535,7 @@ version is called. ----- */
#define READ_CAPTURE_NAME READ_CAPTURE_NAME8
#define SET_PCRE_CALLOUT SET_PCRE_CALLOUT8
#define STRLEN STRLEN8
-#define PCRE_ASSIGN_JIT_STACK pcre_assign_jit_stack
+#define PCRE_ASSIGN_JIT_STACK PCRE_ASSIGN_JIT_STACK8
#define PCRE_COMPILE PCRE_COMPILE8
#define PCRE_CONFIG pcre_config
#define PCRE_COPY_NAMED_SUBSTRING PCRE_COPY_NAMED_SUBSTRING8
@@ -517,8 +549,8 @@ version is called. ----- */
#define PCRE_GET_STRINGNUMBER PCRE_GET_STRINGNUMBER8
#define PCRE_GET_SUBSTRING PCRE_GET_SUBSTRING8
#define PCRE_GET_SUBSTRING_LIST PCRE_GET_SUBSTRING_LIST8
-#define PCRE_JIT_STACK_ALLOC pcre_jit_stack_alloc
-#define PCRE_JIT_STACK_FREE pcre_jit_stack_free
+#define PCRE_JIT_STACK_ALLOC PCRE_JIT_STACK_ALLOC8
+#define PCRE_JIT_STACK_FREE PCRE_JIT_STACK_FREE8
#define PCRE_MAKETABLES pcre_maketables()
#define PCRE_PATTERN_TO_HOST_BYTE_ORDER PCRE_PATTERN_TO_HOST_BYTE_ORDER8
#define PCRE_PRINTINT PCRE_PRINTINT8
@@ -533,7 +565,7 @@ version is called. ----- */
#define READ_CAPTURE_NAME READ_CAPTURE_NAME16
#define SET_PCRE_CALLOUT SET_PCRE_CALLOUT16
#define STRLEN STRLEN16
-#define PCRE_ASSIGN_JIT_STACK pcre16_assign_jit_stack
+#define PCRE_ASSIGN_JIT_STACK PCRE_ASSIGN_JIT_STACK16
#define PCRE_COMPILE PCRE_COMPILE16
#define PCRE_CONFIG pcre16_config
#define PCRE_COPY_NAMED_SUBSTRING PCRE_COPY_NAMED_SUBSTRING16
@@ -547,8 +579,8 @@ version is called. ----- */
#define PCRE_GET_STRINGNUMBER PCRE_GET_STRINGNUMBER16
#define PCRE_GET_SUBSTRING PCRE_GET_SUBSTRING16
#define PCRE_GET_SUBSTRING_LIST PCRE_GET_SUBSTRING_LIST16
-#define PCRE_JIT_STACK_ALLOC pcre16_jit_stack_alloc
-#define PCRE_JIT_STACK_FREE pcre16_jit_stack_free
+#define PCRE_JIT_STACK_ALLOC PCRE_JIT_STACK_ALLOC16
+#define PCRE_JIT_STACK_FREE PCRE_JIT_STACK_FREE16
#define PCRE_MAKETABLES pcre16_maketables()
#define PCRE_PATTERN_TO_HOST_BYTE_ORDER PCRE_PATTERN_TO_HOST_BYTE_ORDER16
#define PCRE_PRINTINT PCRE_PRINTINT16
@@ -1513,7 +1545,7 @@ pcre_uint16 *npp = *pp;
while (isalnum(*p)) *npp++ = *p++;
*npp++ = 0;
*npp = 0;
-if (pcre16_get_stringnumber(re, (PCRE_SPTR16)(*pp)) < 0)
+if (pcre16_get_stringnumber((pcre16 *)re, (PCRE_SPTR16)(*pp)) < 0)
{
fprintf(outfile, "no parentheses with name \"");
PCHARSV(*pp, 0, -1, outfile);
@@ -1702,7 +1734,7 @@ int rc;
if (use_pcre16)
#ifdef SUPPORT_PCRE16
- rc = pcre16_fullinfo(re, (pcre16_extra *)study, option, ptr);
+ rc = pcre16_fullinfo((pcre16 *)re, (pcre16_extra *)study, option, ptr);
#else
rc = PCRE_ERROR_BADMODE;
#endif
@@ -1771,7 +1803,7 @@ architecture. */
static void
regexflip(pcre *ere, pcre_extra *extra)
{
-real_pcre *re = (real_pcre *)ere;
+REAL_PCRE *re = (REAL_PCRE *)ere;
#ifdef SUPPORT_PCRE16
int op;
pcre_uint16 *ptr = (pcre_uint16 *)re + re->name_table_offset;
@@ -2553,12 +2585,12 @@ while (!done)
true_study_size =
(sbuf[4] << 24) | (sbuf[5] << 16) | (sbuf[6] << 8) | sbuf[7];
- re = (real_pcre *)new_malloc(true_size);
+ re = (pcre *)new_malloc(true_size);
regex_gotten_store = first_gotten_store;
if (fread(re, 1, true_size, f) != true_size) goto FAIL_READ;
- magic = ((real_pcre *)re)->magic_number;
+ magic = ((REAL_PCRE *)re)->magic_number;
if (magic != MAGIC_NUMBER)
{
if (swap_uint32(magic) == MAGIC_NUMBER)
@@ -2938,7 +2970,7 @@ while (!done)
/* Extract the size for possible writing before possibly flipping it,
and remember the store that was got. */
- true_size = ((real_pcre *)re)->size;
+ true_size = ((REAL_PCRE *)re)->size;
regex_gotten_store = first_gotten_store;
/* Output code size information if requested */
@@ -2946,8 +2978,8 @@ while (!done)
if (log_store)
fprintf(outfile, "Memory allocation (code space): %d\n",
(int)(first_gotten_store -
- sizeof(real_pcre) -
- ((real_pcre *)re)->name_count * ((real_pcre *)re)->name_entry_size));
+ sizeof(REAL_PCRE) -
+ ((REAL_PCRE *)re)->name_count * ((REAL_PCRE *)re)->name_entry_size));
/* If -s or /S was present, study the regex to generate additional info to
help with the matching, unless the pattern has the SS option, which
@@ -3078,7 +3110,7 @@ while (!done)
if (!okpartial) fprintf(outfile, "Partial matching not supported\n");
if (hascrorlf) fprintf(outfile, "Contains explicit CR or LF match\n");
- all_options = ((real_pcre *)re)->options;
+ all_options = ((REAL_PCRE *)re)->options;
if (do_flip) all_options = swap_uint32(all_options);
if (get_options == 0) fprintf(outfile, "No options\n");
@@ -3140,7 +3172,7 @@ while (!done)
else
{
const char *caseless =
- ((((real_pcre *)re)->flags & PCRE_FCH_CASELESS) == 0)?
+ ((((REAL_PCRE *)re)->flags & PCRE_FCH_CASELESS) == 0)?
"" : " (caseless)";
if (PRINTOK(first_char))
@@ -3160,7 +3192,7 @@ while (!done)
else
{
const char *caseless =
- ((((real_pcre *)re)->flags & PCRE_RCH_CASELESS) == 0)?
+ ((((REAL_PCRE *)re)->flags & PCRE_RCH_CASELESS) == 0)?
"" : " (caseless)";
if (PRINTOK(need_char))
@@ -3563,7 +3595,7 @@ while (!done)
&& (extra->flags & PCRE_EXTRA_EXECUTABLE_JIT) != 0
&& extra->executable_jit != NULL)
{
- if (jit_stack != NULL) PCRE_JIT_STACK_FREE(jit_stack);
+ if (jit_stack != NULL) { PCRE_JIT_STACK_FREE(jit_stack); }
jit_stack = PCRE_JIT_STACK_ALLOC(1, n * 1024);
PCRE_ASSIGN_JIT_STACK(extra, jit_callback, jit_stack);
}
@@ -3778,7 +3810,7 @@ while (!done)
#ifdef SUPPORT_PCRE16
if (use_pcre16)
{
- len = to16(TRUE, bptr, (((real_pcre *)re)->options) & PCRE_UTF8, len);
+ len = to16(TRUE, bptr, (((REAL_PCRE *)re)->options) & PCRE_UTF8, len);
switch(len)
{
case -1:
@@ -4158,7 +4190,7 @@ while (!done)
if (g_notempty != 0)
{
int onechar = 1;
- unsigned int obits = ((real_pcre *)re)->options;
+ unsigned int obits = ((REAL_PCRE *)re)->options;
use_offsets[0] = start_offset;
if ((obits & PCRE_NEWLINE_BITS) == 0)
{