Change callouts to pass the user data as a separate argument.
This commit is contained in:
parent
292c9799e1
commit
5f9ad579dc
@ -114,7 +114,7 @@ document for an overview of all the PCRE2 documentation.
|
|||||||
.B void pcre2_match_context_free(pcre2_match_context *\fImcontext\fP);
|
.B void pcre2_match_context_free(pcre2_match_context *\fImcontext\fP);
|
||||||
.sp
|
.sp
|
||||||
.B int pcre2_set_callout(pcre2_match_context *\fImcontext\fP,
|
.B int pcre2_set_callout(pcre2_match_context *\fImcontext\fP,
|
||||||
.B " int (*\fIcallout_function\fP)(pcre2_callout_block *),"
|
.B " int (*\fIcallout_function\fP)(pcre2_callout_block *, void *),"
|
||||||
.B " void *\fIcallout_data\fP);"
|
.B " void *\fIcallout_data\fP);"
|
||||||
.sp
|
.sp
|
||||||
.B int pcre2_set_match_limit(pcre2_match_context *\fImcontext\fP,
|
.B int pcre2_set_match_limit(pcre2_match_context *\fImcontext\fP,
|
||||||
@ -645,7 +645,7 @@ PCRE2_ERROR_BADDATA if invalid data is detected.
|
|||||||
.sp
|
.sp
|
||||||
.nf
|
.nf
|
||||||
.B int pcre2_set_callout(pcre2_match_context *\fImcontext\fP,
|
.B int pcre2_set_callout(pcre2_match_context *\fImcontext\fP,
|
||||||
.B " int (*\fIcallout_function\fP)(pcre2_callout_block *),"
|
.B " int (*\fIcallout_function\fP)(pcre2_callout_block *, void *),"
|
||||||
.B " void *\fIcallout_data\fP);"
|
.B " void *\fIcallout_data\fP);"
|
||||||
.fi
|
.fi
|
||||||
.sp
|
.sp
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.TH PCRE2CALLOUT 3 "23 November 2014" "PCRE2 10.00"
|
.TH PCRE2CALLOUT 3 "25 November 2014" "PCRE2 10.00"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
PCRE2 - Perl-compatible regular expressions (revised API)
|
PCRE2 - Perl-compatible regular expressions (revised API)
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@ -7,7 +7,7 @@ PCRE2 - Perl-compatible regular expressions (revised API)
|
|||||||
.B #include <pcre2.h>
|
.B #include <pcre2.h>
|
||||||
.PP
|
.PP
|
||||||
.SM
|
.SM
|
||||||
.B int (*pcre2_callout)(pcre2_callout_block *);
|
.B int (*pcre2_callout)(pcre2_callout_block *, void *);
|
||||||
.
|
.
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
.rs
|
.rs
|
||||||
@ -119,14 +119,19 @@ callouts such as the example above are obeyed.
|
|||||||
.sp
|
.sp
|
||||||
During matching, when PCRE2 reaches a callout point, if an external function is
|
During matching, when PCRE2 reaches a callout point, if an external function is
|
||||||
set in the match context, it is called. This applies to both normal and DFA
|
set in the match context, it is called. This applies to both normal and DFA
|
||||||
matching. The only argument to the callout function is a pointer to a
|
matching. The first argument to the callout function is a pointer to a
|
||||||
\fBpcre2_callout\fP block. This structure contains the following fields:
|
\fBpcre2_callout\fP block. The second argument is the void * callout data that
|
||||||
|
was supplied when the callout was set up by calling \fBpcre2_set_callout()\fP
|
||||||
|
(see the
|
||||||
|
.\" HREF
|
||||||
|
\fBpcre2api\fP
|
||||||
|
.\"
|
||||||
|
documentation). The callout block structure contains the following fields:
|
||||||
.sp
|
.sp
|
||||||
uint32_t \fIversion\fP;
|
uint32_t \fIversion\fP;
|
||||||
uint32_t \fIcallout_number\fP;
|
uint32_t \fIcallout_number\fP;
|
||||||
uint32_t \fIcapture_top\fP;
|
uint32_t \fIcapture_top\fP;
|
||||||
uint32_t \fIcapture_last\fP;
|
uint32_t \fIcapture_last\fP;
|
||||||
void *\fIcallout_data\fP;
|
|
||||||
PCRE2_SIZE *\fIoffset_vector\fP;
|
PCRE2_SIZE *\fIoffset_vector\fP;
|
||||||
PCRE2_SPTR \fImark\fP;
|
PCRE2_SPTR \fImark\fP;
|
||||||
PCRE2_SPTR \fIsubject\fP;
|
PCRE2_SPTR \fIsubject\fP;
|
||||||
@ -177,15 +182,6 @@ outside the recursion, as do the values of all captured substrings. If no
|
|||||||
substrings have been captured, the value of \fIcapture_last\fP is 0. This is
|
substrings have been captured, the value of \fIcapture_last\fP is 0. This is
|
||||||
always the case for the DFA matching functions.
|
always the case for the DFA matching functions.
|
||||||
.P
|
.P
|
||||||
The \fIcallout_data\fP field contains a value that is passed to a matching
|
|
||||||
function specifically so that it can be passed back in callouts. It is set in
|
|
||||||
the match context when the callout is set up by calling
|
|
||||||
\fBpcre2_set_callout()\fP (see the
|
|
||||||
.\" HREF
|
|
||||||
\fBpcre2api\fP
|
|
||||||
.\"
|
|
||||||
documentation).
|
|
||||||
.P
|
|
||||||
The \fIpattern_position\fP field contains the offset to the next item to be
|
The \fIpattern_position\fP field contains the offset to the next item to be
|
||||||
matched in the pattern string.
|
matched in the pattern string.
|
||||||
.P
|
.P
|
||||||
@ -236,6 +232,6 @@ Cambridge, England.
|
|||||||
.rs
|
.rs
|
||||||
.sp
|
.sp
|
||||||
.nf
|
.nf
|
||||||
Last updated: 23 November 2014
|
Last updated: 25 November 2014
|
||||||
Copyright (c) 1997-2014 University of Cambridge.
|
Copyright (c) 1997-2014 University of Cambridge.
|
||||||
.fi
|
.fi
|
||||||
|
@ -324,7 +324,6 @@ typedef struct pcre2_callout_block { \
|
|||||||
uint32_t callout_number; /* Number compiled into pattern */ \
|
uint32_t callout_number; /* Number compiled into pattern */ \
|
||||||
uint32_t capture_top; /* Max current capture */ \
|
uint32_t capture_top; /* Max current capture */ \
|
||||||
uint32_t capture_last; /* Most recently closed capture */ \
|
uint32_t capture_last; /* Most recently closed capture */ \
|
||||||
void *callout_data; /* Data passed in with the call */ \
|
|
||||||
PCRE2_SIZE *offset_vector; /* The offset vector */ \
|
PCRE2_SIZE *offset_vector; /* The offset vector */ \
|
||||||
PCRE2_SPTR mark; /* Pointer to current mark or NULL */ \
|
PCRE2_SPTR mark; /* Pointer to current mark or NULL */ \
|
||||||
PCRE2_SPTR subject; /* The subject being matched */ \
|
PCRE2_SPTR subject; /* The subject being matched */ \
|
||||||
@ -378,7 +377,7 @@ PCRE2_EXP_DECL \
|
|||||||
pcre2_match_context *pcre2_match_context_create(pcre2_general_context *); \
|
pcre2_match_context *pcre2_match_context_create(pcre2_general_context *); \
|
||||||
PCRE2_EXP_DECL void pcre2_match_context_free(pcre2_match_context *); \
|
PCRE2_EXP_DECL void pcre2_match_context_free(pcre2_match_context *); \
|
||||||
PCRE2_EXP_DECL int pcre2_set_callout(pcre2_match_context *, \
|
PCRE2_EXP_DECL int pcre2_set_callout(pcre2_match_context *, \
|
||||||
int (*)(pcre2_callout_block *), void *); \
|
int (*)(pcre2_callout_block *, void *), void *); \
|
||||||
PCRE2_EXP_DECL int pcre2_set_match_limit(pcre2_match_context *, \
|
PCRE2_EXP_DECL int pcre2_set_match_limit(pcre2_match_context *, \
|
||||||
uint32_t); \
|
uint32_t); \
|
||||||
PCRE2_EXP_DECL int pcre2_set_recursion_limit(pcre2_match_context *, \
|
PCRE2_EXP_DECL int pcre2_set_recursion_limit(pcre2_match_context *, \
|
||||||
|
@ -331,7 +331,7 @@ return 0;
|
|||||||
|
|
||||||
PCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION
|
PCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION
|
||||||
pcre2_set_callout(pcre2_match_context *mcontext,
|
pcre2_set_callout(pcre2_match_context *mcontext,
|
||||||
int (*callout)(pcre2_callout_block *), void *callout_data)
|
int (*callout)(pcre2_callout_block *, void *), void *callout_data)
|
||||||
{
|
{
|
||||||
mcontext->callout = callout;
|
mcontext->callout = callout;
|
||||||
mcontext->callout_data = callout_data;
|
mcontext->callout_data = callout_data;
|
||||||
|
@ -2615,7 +2615,6 @@ for (;;)
|
|||||||
cb.callout_number = code[LINK_SIZE+2];
|
cb.callout_number = code[LINK_SIZE+2];
|
||||||
cb.capture_top = 1;
|
cb.capture_top = 1;
|
||||||
cb.capture_last = 0;
|
cb.capture_last = 0;
|
||||||
cb.callout_data = mb->callout_data;
|
|
||||||
cb.offset_vector = offsets;
|
cb.offset_vector = offsets;
|
||||||
cb.mark = NULL; /* No (*MARK) support */
|
cb.mark = NULL; /* No (*MARK) support */
|
||||||
cb.subject = start_subject;
|
cb.subject = start_subject;
|
||||||
@ -2624,7 +2623,8 @@ for (;;)
|
|||||||
cb.current_position = (PCRE2_SIZE)(ptr - start_subject);
|
cb.current_position = (PCRE2_SIZE)(ptr - start_subject);
|
||||||
cb.pattern_position = GET(code, LINK_SIZE + 3);
|
cb.pattern_position = GET(code, LINK_SIZE + 3);
|
||||||
cb.next_item_length = GET(code, 3 + 2*LINK_SIZE);
|
cb.next_item_length = GET(code, 3 + 2*LINK_SIZE);
|
||||||
if ((rrc = (mb->callout)(&cb)) < 0) return rrc; /* Abandon */
|
if ((rrc = (mb->callout)(&cb, mb->callout_data)) < 0)
|
||||||
|
return rrc; /* Abandon */
|
||||||
}
|
}
|
||||||
if (rrc > 0) break; /* Fail this thread */
|
if (rrc > 0) break; /* Fail this thread */
|
||||||
code += PRIV(OP_lengths)[OP_CALLOUT]; /* Skip callout data */
|
code += PRIV(OP_lengths)[OP_CALLOUT]; /* Skip callout data */
|
||||||
@ -2962,7 +2962,6 @@ for (;;)
|
|||||||
cb.callout_number = code[1];
|
cb.callout_number = code[1];
|
||||||
cb.capture_top = 1;
|
cb.capture_top = 1;
|
||||||
cb.capture_last = 0;
|
cb.capture_last = 0;
|
||||||
cb.callout_data = mb->callout_data;
|
|
||||||
cb.offset_vector = offsets;
|
cb.offset_vector = offsets;
|
||||||
cb.mark = NULL; /* No (*MARK) support */
|
cb.mark = NULL; /* No (*MARK) support */
|
||||||
cb.subject = start_subject;
|
cb.subject = start_subject;
|
||||||
@ -2971,7 +2970,8 @@ for (;;)
|
|||||||
cb.current_position = (PCRE2_SIZE)(ptr - start_subject);
|
cb.current_position = (PCRE2_SIZE)(ptr - start_subject);
|
||||||
cb.pattern_position = GET(code, 2);
|
cb.pattern_position = GET(code, 2);
|
||||||
cb.next_item_length = GET(code, 2 + LINK_SIZE);
|
cb.next_item_length = GET(code, 2 + LINK_SIZE);
|
||||||
if ((rrc = (mb->callout)(&cb)) < 0) return rrc; /* Abandon */
|
if ((rrc = (mb->callout)(&cb, mb->callout_data)) < 0)
|
||||||
|
return rrc; /* Abandon */
|
||||||
}
|
}
|
||||||
if (rrc == 0)
|
if (rrc == 0)
|
||||||
{ ADD_ACTIVE(state_offset + PRIV(OP_lengths)[OP_CALLOUT], 0); }
|
{ ADD_ACTIVE(state_offset + PRIV(OP_lengths)[OP_CALLOUT], 0); }
|
||||||
|
@ -577,7 +577,7 @@ typedef struct pcre2_real_match_context {
|
|||||||
pcre2_jit_callback jit_callback;
|
pcre2_jit_callback jit_callback;
|
||||||
void *jit_callback_data;
|
void *jit_callback_data;
|
||||||
#endif
|
#endif
|
||||||
int (*callout)(pcre2_callout_block *);
|
int (*callout)(pcre2_callout_block *, void *);
|
||||||
void *callout_data;
|
void *callout_data;
|
||||||
uint32_t match_limit;
|
uint32_t match_limit;
|
||||||
uint32_t recursion_limit;
|
uint32_t recursion_limit;
|
||||||
@ -784,7 +784,7 @@ typedef struct match_block {
|
|||||||
recursion_info *recursive; /* Linked list of recursion data */
|
recursion_info *recursive; /* Linked list of recursion data */
|
||||||
ovecsave_frame *ovecsave_chain; /* Linked list of free ovecsave blocks */
|
ovecsave_frame *ovecsave_chain; /* Linked list of free ovecsave blocks */
|
||||||
void *callout_data; /* To pass back to callouts */
|
void *callout_data; /* To pass back to callouts */
|
||||||
int (*callout)(pcre2_callout_block *); /* Callout function or NULL */
|
int (*callout)(pcre2_callout_block *,void *); /* Callout function or NULL */
|
||||||
#ifdef HEAP_MATCH_RECURSE
|
#ifdef HEAP_MATCH_RECURSE
|
||||||
void *match_frames_base; /* For remembering malloc'd frames */
|
void *match_frames_base; /* For remembering malloc'd frames */
|
||||||
#endif
|
#endif
|
||||||
@ -809,7 +809,7 @@ typedef struct dfa_match_block {
|
|||||||
PCRE2_UCHAR nl[4]; /* Newline string when fixed */
|
PCRE2_UCHAR nl[4]; /* Newline string when fixed */
|
||||||
uint16_t bsr_convention; /* \R interpretation */
|
uint16_t bsr_convention; /* \R interpretation */
|
||||||
void *callout_data; /* To pass back to callouts */
|
void *callout_data; /* To pass back to callouts */
|
||||||
int (*callout)(pcre2_callout_block *); /* Callout function or NULL */
|
int (*callout)(pcre2_callout_block *,void *); /* Callout function or NULL */
|
||||||
dfa_recursion_info *recursive; /* Linked list of recursion data */
|
dfa_recursion_info *recursive; /* Linked list of recursion data */
|
||||||
} dfa_match_block;
|
} dfa_match_block;
|
||||||
|
|
||||||
|
@ -178,7 +178,7 @@ typedef struct jit_arguments {
|
|||||||
pcre2_match_data *match_data;
|
pcre2_match_data *match_data;
|
||||||
PCRE2_SPTR startchar_ptr;
|
PCRE2_SPTR startchar_ptr;
|
||||||
PCRE2_UCHAR *mark_ptr;
|
PCRE2_UCHAR *mark_ptr;
|
||||||
int (*callout)(pcre2_callout_block *);
|
int (*callout)(pcre2_callout_block *, void *);
|
||||||
void *callout_data;
|
void *callout_data;
|
||||||
/* Everything else after. */
|
/* Everything else after. */
|
||||||
sljit_ui limit_match;
|
sljit_ui limit_match;
|
||||||
@ -6303,7 +6303,6 @@ if (arguments->callout == NULL)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
callout_block->version = 0;
|
callout_block->version = 0;
|
||||||
callout_block->callout_data = arguments->callout_data;
|
|
||||||
|
|
||||||
/* Offsets in subject. */
|
/* Offsets in subject. */
|
||||||
callout_block->subject_length = arguments->end - arguments->begin;
|
callout_block->subject_length = arguments->end - arguments->begin;
|
||||||
@ -6325,7 +6324,7 @@ for (i = 2; i < oveccount; i += 2)
|
|||||||
callout_block->capture_top = (callout_block->capture_top >> 1) + 1;
|
callout_block->capture_top = (callout_block->capture_top >> 1) + 1;
|
||||||
ovector[0] = PCRE2_UNSET;
|
ovector[0] = PCRE2_UNSET;
|
||||||
ovector[1] = PCRE2_UNSET;
|
ovector[1] = PCRE2_UNSET;
|
||||||
return (arguments->callout)(callout_block);
|
return (arguments->callout)(callout_block, arguments->callout_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Aligning to 8 byte. */
|
/* Aligning to 8 byte. */
|
||||||
|
@ -1311,7 +1311,6 @@ for (;;)
|
|||||||
cb.callout_number = ecode[1];
|
cb.callout_number = ecode[1];
|
||||||
cb.capture_top = offset_top/2;
|
cb.capture_top = offset_top/2;
|
||||||
cb.capture_last = mb->capture_last & CAPLMASK;
|
cb.capture_last = mb->capture_last & CAPLMASK;
|
||||||
cb.callout_data = mb->callout_data;
|
|
||||||
cb.offset_vector = mb->ovector;
|
cb.offset_vector = mb->ovector;
|
||||||
cb.mark = mb->nomatch_mark;
|
cb.mark = mb->nomatch_mark;
|
||||||
cb.subject = mb->start_subject;
|
cb.subject = mb->start_subject;
|
||||||
@ -1320,7 +1319,8 @@ for (;;)
|
|||||||
cb.current_position = (PCRE2_SIZE)(eptr - mb->start_subject);
|
cb.current_position = (PCRE2_SIZE)(eptr - mb->start_subject);
|
||||||
cb.pattern_position = GET(ecode, 2);
|
cb.pattern_position = GET(ecode, 2);
|
||||||
cb.next_item_length = GET(ecode, 2 + LINK_SIZE);
|
cb.next_item_length = GET(ecode, 2 + LINK_SIZE);
|
||||||
if ((rrc = mb->callout(&cb)) > 0) RRETURN(MATCH_NOMATCH);
|
if ((rrc = mb->callout(&cb, mb->callout_data)) > 0)
|
||||||
|
RRETURN(MATCH_NOMATCH);
|
||||||
if (rrc < 0) RRETURN(rrc);
|
if (rrc < 0) RRETURN(rrc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1715,7 +1715,6 @@ for (;;)
|
|||||||
cb.callout_number = ecode[1];
|
cb.callout_number = ecode[1];
|
||||||
cb.capture_top = offset_top/2;
|
cb.capture_top = offset_top/2;
|
||||||
cb.capture_last = mb->capture_last & CAPLMASK;
|
cb.capture_last = mb->capture_last & CAPLMASK;
|
||||||
cb.callout_data = mb->callout_data;
|
|
||||||
cb.offset_vector = mb->ovector;
|
cb.offset_vector = mb->ovector;
|
||||||
cb.mark = mb->nomatch_mark;
|
cb.mark = mb->nomatch_mark;
|
||||||
cb.subject = mb->start_subject;
|
cb.subject = mb->start_subject;
|
||||||
@ -1724,7 +1723,8 @@ for (;;)
|
|||||||
cb.current_position = (PCRE2_SIZE)(eptr - mb->start_subject);
|
cb.current_position = (PCRE2_SIZE)(eptr - mb->start_subject);
|
||||||
cb.pattern_position = GET(ecode, 2);
|
cb.pattern_position = GET(ecode, 2);
|
||||||
cb.next_item_length = GET(ecode, 2 + LINK_SIZE);
|
cb.next_item_length = GET(ecode, 2 + LINK_SIZE);
|
||||||
if ((rrc = mb->callout(&cb)) > 0) RRETURN(MATCH_NOMATCH);
|
if ((rrc = mb->callout(&cb, mb->callout_data)) > 0)
|
||||||
|
RRETURN(MATCH_NOMATCH);
|
||||||
if (rrc < 0) RRETURN(rrc);
|
if (rrc < 0) RRETURN(rrc);
|
||||||
}
|
}
|
||||||
ecode += 2 + 2*LINK_SIZE;
|
ecode += 2 + 2*LINK_SIZE;
|
||||||
|
@ -929,11 +929,11 @@ are supported. */
|
|||||||
|
|
||||||
#define PCRE2_SET_CALLOUT(a,b,c) \
|
#define PCRE2_SET_CALLOUT(a,b,c) \
|
||||||
if (test_mode == PCRE8_MODE) \
|
if (test_mode == PCRE8_MODE) \
|
||||||
pcre2_set_callout_8(G(a,8),(int (*)(pcre2_callout_block_8 *))b,c); \
|
pcre2_set_callout_8(G(a,8),(int (*)(pcre2_callout_block_8 *, void *))b,c); \
|
||||||
else if (test_mode == PCRE16_MODE) \
|
else if (test_mode == PCRE16_MODE) \
|
||||||
pcre2_set_callout_16(G(a,16),(int (*)(pcre2_callout_block_16 *))b,c); \
|
pcre2_set_callout_16(G(a,16),(int (*)(pcre2_callout_block_16 *, void *))b,c); \
|
||||||
else \
|
else \
|
||||||
pcre2_set_callout_32(G(a,32),(int (*)(pcre2_callout_block_32 *))b,c);
|
pcre2_set_callout_32(G(a,32),(int (*)(pcre2_callout_block_32 *, void *))b,c);
|
||||||
|
|
||||||
#define PCRE2_SET_CHARACTER_TABLES(a,b) \
|
#define PCRE2_SET_CHARACTER_TABLES(a,b) \
|
||||||
if (test_mode == PCRE8_MODE) \
|
if (test_mode == PCRE8_MODE) \
|
||||||
@ -1304,10 +1304,10 @@ the three different cases. */
|
|||||||
#define PCRE2_SET_CALLOUT(a,b,c) \
|
#define PCRE2_SET_CALLOUT(a,b,c) \
|
||||||
if (test_mode == G(G(PCRE,BITONE),_MODE)) \
|
if (test_mode == G(G(PCRE,BITONE),_MODE)) \
|
||||||
G(pcre2_set_callout_,BITONE)(G(a,BITONE), \
|
G(pcre2_set_callout_,BITONE)(G(a,BITONE), \
|
||||||
(int (*)(G(pcre2_callout_block_,BITONE) *))b,c); \
|
(int (*)(G(pcre2_callout_block_,BITONE) *, void *))b,c); \
|
||||||
else \
|
else \
|
||||||
G(pcre2_set_callout_,BITTWO)(G(a,BITTWO), \
|
G(pcre2_set_callout_,BITTWO)(G(a,BITTWO), \
|
||||||
(int (*)(G(pcre2_callout_block_,BITTWO) *))b,c);
|
(int (*)(G(pcre2_callout_block_,BITTWO) *, void *))b,c);
|
||||||
|
|
||||||
#define PCRE2_SET_CHARACTER_TABLES(a,b) \
|
#define PCRE2_SET_CHARACTER_TABLES(a,b) \
|
||||||
if (test_mode == G(G(PCRE,BITONE),_MODE)) \
|
if (test_mode == G(G(PCRE,BITONE),_MODE)) \
|
||||||
@ -1510,7 +1510,7 @@ the three different cases. */
|
|||||||
#define PCRE2_PATTERN_INFO(a,b,c,d) a = pcre2_pattern_info_8(G(b,8),c,d)
|
#define PCRE2_PATTERN_INFO(a,b,c,d) a = pcre2_pattern_info_8(G(b,8),c,d)
|
||||||
#define PCRE2_PRINTINT(a) pcre2_printint_8(compiled_code8,outfile,a)
|
#define PCRE2_PRINTINT(a) pcre2_printint_8(compiled_code8,outfile,a)
|
||||||
#define PCRE2_SET_CALLOUT(a,b,c) \
|
#define PCRE2_SET_CALLOUT(a,b,c) \
|
||||||
pcre2_set_callout_8(G(a,8),(int (*)(pcre2_callout_block_8 *))b,c)
|
pcre2_set_callout_8(G(a,8),(int (*)(pcre2_callout_block_8 *, void *))b,c)
|
||||||
#define PCRE2_SET_CHARACTER_TABLES(a,b) pcre2_set_character_tables_8(G(a,8),b)
|
#define PCRE2_SET_CHARACTER_TABLES(a,b) pcre2_set_character_tables_8(G(a,8),b)
|
||||||
#define PCRE2_SET_COMPILE_RECURSION_GUARD(a,b) \
|
#define PCRE2_SET_COMPILE_RECURSION_GUARD(a,b) \
|
||||||
pcre2_set_compile_recursion_guard_8(G(a,8),b)
|
pcre2_set_compile_recursion_guard_8(G(a,8),b)
|
||||||
@ -1591,7 +1591,7 @@ the three different cases. */
|
|||||||
#define PCRE2_PATTERN_INFO(a,b,c,d) a = pcre2_pattern_info_16(G(b,16),c,d)
|
#define PCRE2_PATTERN_INFO(a,b,c,d) a = pcre2_pattern_info_16(G(b,16),c,d)
|
||||||
#define PCRE2_PRINTINT(a) pcre2_printint_16(compiled_code16,outfile,a)
|
#define PCRE2_PRINTINT(a) pcre2_printint_16(compiled_code16,outfile,a)
|
||||||
#define PCRE2_SET_CALLOUT(a,b,c) \
|
#define PCRE2_SET_CALLOUT(a,b,c) \
|
||||||
pcre2_set_callout_16(G(a,16),(int (*)(pcre2_callout_block_16 *))b,c);
|
pcre2_set_callout_16(G(a,16),(int (*)(pcre2_callout_block_16 *, void *))b,c);
|
||||||
#define PCRE2_SET_CHARACTER_TABLES(a,b) pcre2_set_character_tables_16(G(a,16),b)
|
#define PCRE2_SET_CHARACTER_TABLES(a,b) pcre2_set_character_tables_16(G(a,16),b)
|
||||||
#define PCRE2_SET_COMPILE_RECURSION_GUARD(a,b) \
|
#define PCRE2_SET_COMPILE_RECURSION_GUARD(a,b) \
|
||||||
pcre2_set_compile_recursion_guard_16(G(a,16),b)
|
pcre2_set_compile_recursion_guard_16(G(a,16),b)
|
||||||
@ -1672,7 +1672,7 @@ the three different cases. */
|
|||||||
#define PCRE2_PATTERN_INFO(a,b,c,d) a = pcre2_pattern_info_32(G(b,32),c,d)
|
#define PCRE2_PATTERN_INFO(a,b,c,d) a = pcre2_pattern_info_32(G(b,32),c,d)
|
||||||
#define PCRE2_PRINTINT(a) pcre2_printint_32(compiled_code32,outfile,a)
|
#define PCRE2_PRINTINT(a) pcre2_printint_32(compiled_code32,outfile,a)
|
||||||
#define PCRE2_SET_CALLOUT(a,b,c) \
|
#define PCRE2_SET_CALLOUT(a,b,c) \
|
||||||
pcre2_set_callout_32(G(a,32),(int (*)(pcre2_callout_block_32 *))b,c);
|
pcre2_set_callout_32(G(a,32),(int (*)(pcre2_callout_block_32 *, void *))b,c);
|
||||||
#define PCRE2_SET_CHARACTER_TABLES(a,b) pcre2_set_character_tables_32(G(a,32),b)
|
#define PCRE2_SET_CHARACTER_TABLES(a,b) pcre2_set_character_tables_32(G(a,32),b)
|
||||||
#define PCRE2_SET_COMPILE_RECURSION_GUARD(a,b) \
|
#define PCRE2_SET_COMPILE_RECURSION_GUARD(a,b) \
|
||||||
pcre2_set_compile_recursion_guard_32(G(a,32),b)
|
pcre2_set_compile_recursion_guard_32(G(a,32),b)
|
||||||
@ -4126,7 +4126,7 @@ Return:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
static int
|
static int
|
||||||
callout_function(pcre2_callout_block_8 *cb)
|
callout_function(pcre2_callout_block_8 *cb, void *callout_data_ptr)
|
||||||
{
|
{
|
||||||
uint32_t i, pre_start, post_start, subject_length;
|
uint32_t i, pre_start, post_start, subject_length;
|
||||||
BOOL utf = (FLD(compiled_code, overall_options) & PCRE2_UTF) != 0;
|
BOOL utf = (FLD(compiled_code, overall_options) & PCRE2_UTF) != 0;
|
||||||
@ -4216,9 +4216,9 @@ if (cb->mark != last_callout_mark)
|
|||||||
last_callout_mark = cb->mark;
|
last_callout_mark = cb->mark;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cb->callout_data != NULL)
|
if (callout_data_ptr != NULL)
|
||||||
{
|
{
|
||||||
int callout_data = *((int32_t *)(cb->callout_data));
|
int callout_data = *((int32_t *)callout_data_ptr);
|
||||||
if (callout_data != 0)
|
if (callout_data != 0)
|
||||||
{
|
{
|
||||||
fprintf(outfile, "Callout data = %d\n", callout_data);
|
fprintf(outfile, "Callout data = %d\n", callout_data);
|
||||||
|
Loading…
Reference in New Issue
Block a user