98
98
/* Options. Some are compile-time only, some are run-time only, and some are
99
99
both, so we keep them all distinct. However, almost all the bits in the options
100
100
word are now used. In the long run, we may have to re-use some of the
101
compile-time only bits for runtime options, or vice versa. */
101
compile-time only bits for runtime options, or vice versa. In the comments
102
below, "compile", "exec", and "DFA exec" mean that the option is permitted to
103
be set for those functions; "used in" means that an option may be set only for
104
compile, but is subsequently referenced in exec and/or DFA exec. Any of the
105
compile-time options may be inspected during studying (and therefore JIT
103
108
#define PCRE_CASELESS 0x00000001 /* Compile */
104
109
#define PCRE_MULTILINE 0x00000002 /* Compile */
105
110
#define PCRE_DOTALL 0x00000004 /* Compile */
106
111
#define PCRE_EXTENDED 0x00000008 /* Compile */
107
112
#define PCRE_ANCHORED 0x00000010 /* Compile, exec, DFA exec */
108
#define PCRE_DOLLAR_ENDONLY 0x00000020 /* Compile */
113
#define PCRE_DOLLAR_ENDONLY 0x00000020 /* Compile, used in exec, DFA exec */
109
114
#define PCRE_EXTRA 0x00000040 /* Compile */
110
115
#define PCRE_NOTBOL 0x00000080 /* Exec, DFA exec */
111
116
#define PCRE_NOTEOL 0x00000100 /* Exec, DFA exec */
112
117
#define PCRE_UNGREEDY 0x00000200 /* Compile */
113
118
#define PCRE_NOTEMPTY 0x00000400 /* Exec, DFA exec */
114
#define PCRE_UTF8 0x00000800 /* Compile */
119
/* The next two are also used in exec and DFA exec */
120
#define PCRE_UTF8 0x00000800 /* Compile (same as PCRE_UTF16) */
121
#define PCRE_UTF16 0x00000800 /* Compile (same as PCRE_UTF8) */
115
122
#define PCRE_NO_AUTO_CAPTURE 0x00001000 /* Compile */
116
#define PCRE_NO_UTF8_CHECK 0x00002000 /* Compile, exec, DFA exec */
123
/* The next two are also used in exec and DFA exec */
124
#define PCRE_NO_UTF8_CHECK 0x00002000 /* Compile (same as PCRE_NO_UTF16_CHECK) */
125
#define PCRE_NO_UTF16_CHECK 0x00002000 /* Compile (same as PCRE_NO_UTF8_CHECK) */
117
126
#define PCRE_AUTO_CALLOUT 0x00004000 /* Compile */
118
127
#define PCRE_PARTIAL_SOFT 0x00008000 /* Exec, DFA exec */
119
128
#define PCRE_PARTIAL 0x00008000 /* Backwards compatible synonym */
120
129
#define PCRE_DFA_SHORTEST 0x00010000 /* DFA exec */
121
130
#define PCRE_DFA_RESTART 0x00020000 /* DFA exec */
122
#define PCRE_FIRSTLINE 0x00040000 /* Compile */
131
#define PCRE_FIRSTLINE 0x00040000 /* Compile, used in exec, DFA exec */
123
132
#define PCRE_DUPNAMES 0x00080000 /* Compile */
124
133
#define PCRE_NEWLINE_CR 0x00100000 /* Compile, exec, DFA exec */
125
134
#define PCRE_NEWLINE_LF 0x00200000 /* Compile, exec, DFA exec */
128
137
#define PCRE_NEWLINE_ANYCRLF 0x00500000 /* Compile, exec, DFA exec */
129
138
#define PCRE_BSR_ANYCRLF 0x00800000 /* Compile, exec, DFA exec */
130
139
#define PCRE_BSR_UNICODE 0x01000000 /* Compile, exec, DFA exec */
131
#define PCRE_JAVASCRIPT_COMPAT 0x02000000 /* Compile */
140
#define PCRE_JAVASCRIPT_COMPAT 0x02000000 /* Compile, used in exec */
132
141
#define PCRE_NO_START_OPTIMIZE 0x04000000 /* Compile, exec, DFA exec */
133
142
#define PCRE_NO_START_OPTIMISE 0x04000000 /* Synonym */
134
143
#define PCRE_PARTIAL_HARD 0x08000000 /* Exec, DFA exec */
135
144
#define PCRE_NOTEMPTY_ATSTART 0x10000000 /* Exec, DFA exec */
136
#define PCRE_UCP 0x20000000 /* Compile */
145
#define PCRE_UCP 0x20000000 /* Compile, used in exec, DFA exec */
138
147
/* Exec-time and get/set-time error codes */
140
#define PCRE_ERROR_NOMATCH (-1)
141
#define PCRE_ERROR_NULL (-2)
142
#define PCRE_ERROR_BADOPTION (-3)
143
#define PCRE_ERROR_BADMAGIC (-4)
144
#define PCRE_ERROR_UNKNOWN_OPCODE (-5)
145
#define PCRE_ERROR_UNKNOWN_NODE (-5) /* For backward compatibility */
146
#define PCRE_ERROR_NOMEMORY (-6)
147
#define PCRE_ERROR_NOSUBSTRING (-7)
148
#define PCRE_ERROR_MATCHLIMIT (-8)
149
#define PCRE_ERROR_CALLOUT (-9) /* Never used by PCRE itself */
150
#define PCRE_ERROR_BADUTF8 (-10)
151
#define PCRE_ERROR_BADUTF8_OFFSET (-11)
152
#define PCRE_ERROR_PARTIAL (-12)
153
#define PCRE_ERROR_BADPARTIAL (-13)
154
#define PCRE_ERROR_INTERNAL (-14)
155
#define PCRE_ERROR_BADCOUNT (-15)
156
#define PCRE_ERROR_DFA_UITEM (-16)
157
#define PCRE_ERROR_DFA_UCOND (-17)
158
#define PCRE_ERROR_DFA_UMLIMIT (-18)
159
#define PCRE_ERROR_DFA_WSSIZE (-19)
160
#define PCRE_ERROR_DFA_RECURSE (-20)
161
#define PCRE_ERROR_RECURSIONLIMIT (-21)
162
#define PCRE_ERROR_NULLWSLIMIT (-22) /* No longer actually used */
163
#define PCRE_ERROR_BADNEWLINE (-23)
164
#define PCRE_ERROR_BADOFFSET (-24)
165
#define PCRE_ERROR_SHORTUTF8 (-25)
149
#define PCRE_ERROR_NOMATCH (-1)
150
#define PCRE_ERROR_NULL (-2)
151
#define PCRE_ERROR_BADOPTION (-3)
152
#define PCRE_ERROR_BADMAGIC (-4)
153
#define PCRE_ERROR_UNKNOWN_OPCODE (-5)
154
#define PCRE_ERROR_UNKNOWN_NODE (-5) /* For backward compatibility */
155
#define PCRE_ERROR_NOMEMORY (-6)
156
#define PCRE_ERROR_NOSUBSTRING (-7)
157
#define PCRE_ERROR_MATCHLIMIT (-8)
158
#define PCRE_ERROR_CALLOUT (-9) /* Never used by PCRE itself */
159
#define PCRE_ERROR_BADUTF8 (-10) /* Same for 8/16 */
160
#define PCRE_ERROR_BADUTF16 (-10) /* Same for 8/16 */
161
#define PCRE_ERROR_BADUTF8_OFFSET (-11) /* Same for 8/16 */
162
#define PCRE_ERROR_BADUTF16_OFFSET (-11) /* Same for 8/16 */
163
#define PCRE_ERROR_PARTIAL (-12)
164
#define PCRE_ERROR_BADPARTIAL (-13)
165
#define PCRE_ERROR_INTERNAL (-14)
166
#define PCRE_ERROR_BADCOUNT (-15)
167
#define PCRE_ERROR_DFA_UITEM (-16)
168
#define PCRE_ERROR_DFA_UCOND (-17)
169
#define PCRE_ERROR_DFA_UMLIMIT (-18)
170
#define PCRE_ERROR_DFA_WSSIZE (-19)
171
#define PCRE_ERROR_DFA_RECURSE (-20)
172
#define PCRE_ERROR_RECURSIONLIMIT (-21)
173
#define PCRE_ERROR_NULLWSLIMIT (-22) /* No longer actually used */
174
#define PCRE_ERROR_BADNEWLINE (-23)
175
#define PCRE_ERROR_BADOFFSET (-24)
176
#define PCRE_ERROR_SHORTUTF8 (-25)
177
#define PCRE_ERROR_SHORTUTF16 (-25) /* Same for 8/16 */
178
#define PCRE_ERROR_RECURSELOOP (-26)
179
#define PCRE_ERROR_JIT_STACKLIMIT (-27)
180
#define PCRE_ERROR_BADMODE (-28)
181
#define PCRE_ERROR_BADENDIANNESS (-29)
183
/* Specific error codes for UTF-8 validity checks */
185
#define PCRE_UTF8_ERR0 0
186
#define PCRE_UTF8_ERR1 1
187
#define PCRE_UTF8_ERR2 2
188
#define PCRE_UTF8_ERR3 3
189
#define PCRE_UTF8_ERR4 4
190
#define PCRE_UTF8_ERR5 5
191
#define PCRE_UTF8_ERR6 6
192
#define PCRE_UTF8_ERR7 7
193
#define PCRE_UTF8_ERR8 8
194
#define PCRE_UTF8_ERR9 9
195
#define PCRE_UTF8_ERR10 10
196
#define PCRE_UTF8_ERR11 11
197
#define PCRE_UTF8_ERR12 12
198
#define PCRE_UTF8_ERR13 13
199
#define PCRE_UTF8_ERR14 14
200
#define PCRE_UTF8_ERR15 15
201
#define PCRE_UTF8_ERR16 16
202
#define PCRE_UTF8_ERR17 17
203
#define PCRE_UTF8_ERR18 18
204
#define PCRE_UTF8_ERR19 19
205
#define PCRE_UTF8_ERR20 20
206
#define PCRE_UTF8_ERR21 21
208
/* Specific error codes for UTF-16 validity checks */
210
#define PCRE_UTF16_ERR0 0
211
#define PCRE_UTF16_ERR1 1
212
#define PCRE_UTF16_ERR2 2
213
#define PCRE_UTF16_ERR3 3
214
#define PCRE_UTF16_ERR4 4
167
216
/* Request types for pcre_fullinfo() */
254
348
/* ------------------- Added for Version 1 -------------------------- */
255
349
int pattern_position; /* Offset to next item in the pattern */
256
350
int next_item_length; /* Length of next item in the pattern */
351
/* ------------------- Added for Version 2 -------------------------- */
352
const unsigned char *mark; /* Pointer to current mark or NULL */
257
353
/* ------------------------------------------------------------------ */
258
354
} pcre_callout_block;
356
/* Same structure as above, but with 16 bit char pointers. */
358
typedef struct pcre16_callout_block {
359
int version; /* Identifies version of block */
360
/* ------------------------ Version 0 ------------------------------- */
361
int callout_number; /* Number compiled into pattern */
362
int *offset_vector; /* The offset vector */
363
PCRE_SPTR16 subject; /* The subject being matched */
364
int subject_length; /* The length of the subject */
365
int start_match; /* Offset to start of this match attempt */
366
int current_position; /* Where we currently are in the subject */
367
int capture_top; /* Max current capture */
368
int capture_last; /* Most recently closed capture */
369
void *callout_data; /* Data passed in with the call */
370
/* ------------------- Added for Version 1 -------------------------- */
371
int pattern_position; /* Offset to next item in the pattern */
372
int next_item_length; /* Length of next item in the pattern */
373
/* ------------------- Added for Version 2 -------------------------- */
374
const PCRE_UCHAR16 *mark; /* Pointer to current mark or NULL */
375
/* ------------------------------------------------------------------ */
376
} pcre16_callout_block;
260
378
/* Indirection for store get and free functions. These can be set to
261
379
alternative malloc/free functions if required. Special ones are used in the
262
380
non-recursive case for "frames". There is also an optional callout function
269
387
PCRE_EXP_DECL void *(*pcre_stack_malloc)(size_t);
270
388
PCRE_EXP_DECL void (*pcre_stack_free)(void *);
271
389
PCRE_EXP_DECL int (*pcre_callout)(pcre_callout_block *);
391
PCRE_EXP_DECL void *(*pcre16_malloc)(size_t);
392
PCRE_EXP_DECL void (*pcre16_free)(void *);
393
PCRE_EXP_DECL void *(*pcre16_stack_malloc)(size_t);
394
PCRE_EXP_DECL void (*pcre16_stack_free)(void *);
395
PCRE_EXP_DECL int (*pcre16_callout)(pcre16_callout_block *);
272
396
#else /* VPCOMPAT */
273
397
PCRE_EXP_DECL void *pcre_malloc(size_t);
274
398
PCRE_EXP_DECL void pcre_free(void *);
275
399
PCRE_EXP_DECL void *pcre_stack_malloc(size_t);
276
400
PCRE_EXP_DECL void pcre_stack_free(void *);
277
401
PCRE_EXP_DECL int pcre_callout(pcre_callout_block *);
403
PCRE_EXP_DECL void *pcre16_malloc(size_t);
404
PCRE_EXP_DECL void pcre16_free(void *);
405
PCRE_EXP_DECL void *pcre16_stack_malloc(size_t);
406
PCRE_EXP_DECL void pcre16_stack_free(void *);
407
PCRE_EXP_DECL int pcre16_callout(pcre16_callout_block *);
278
408
#endif /* VPCOMPAT */
410
/* User defined callback which provides a stack just before the match starts. */
412
typedef pcre_jit_stack *(*pcre_jit_callback)(void *);
413
typedef pcre16_jit_stack *(*pcre16_jit_callback)(void *);
280
415
/* Exported PCRE functions */
282
417
PCRE_EXP_DECL pcre *pcre_compile(const char *, int, const char **, int *,
283
418
const unsigned char *);
419
PCRE_EXP_DECL pcre16 *pcre16_compile(PCRE_SPTR16, int, const char **, int *,
420
const unsigned char *);
284
421
PCRE_EXP_DECL pcre *pcre_compile2(const char *, int, int *, const char **,
285
422
int *, const unsigned char *);
423
PCRE_EXP_DECL pcre16 *pcre16_compile2(PCRE_SPTR16, int, int *, const char **,
424
int *, const unsigned char *);
286
425
PCRE_EXP_DECL int pcre_config(int, void *);
426
PCRE_EXP_DECL int pcre16_config(int, void *);
287
427
PCRE_EXP_DECL int pcre_copy_named_substring(const pcre *, const char *,
288
428
int *, int, const char *, char *, int);
289
PCRE_EXP_DECL int pcre_copy_substring(const char *, int *, int, int, char *,
429
PCRE_EXP_DECL int pcre16_copy_named_substring(const pcre16 *, PCRE_SPTR16,
430
int *, int, PCRE_SPTR16, PCRE_UCHAR16 *, int);
431
PCRE_EXP_DECL int pcre_copy_substring(const char *, int *, int, int,
433
PCRE_EXP_DECL int pcre16_copy_substring(PCRE_SPTR16, int *, int, int,
434
PCRE_UCHAR16 *, int);
291
435
PCRE_EXP_DECL int pcre_dfa_exec(const pcre *, const pcre_extra *,
292
436
const char *, int, int, int, int *, int , int *, int);
437
PCRE_EXP_DECL int pcre16_dfa_exec(const pcre16 *, const pcre16_extra *,
438
PCRE_SPTR16, int, int, int, int *, int , int *, int);
293
439
PCRE_EXP_DECL int pcre_exec(const pcre *, const pcre_extra *, PCRE_SPTR,
294
440
int, int, int, int *, int);
441
PCRE_EXP_DECL int pcre16_exec(const pcre16 *, const pcre16_extra *,
442
PCRE_SPTR16, int, int, int, int *, int);
295
443
PCRE_EXP_DECL void pcre_free_substring(const char *);
444
PCRE_EXP_DECL void pcre16_free_substring(PCRE_SPTR16);
296
445
PCRE_EXP_DECL void pcre_free_substring_list(const char **);
446
PCRE_EXP_DECL void pcre16_free_substring_list(PCRE_SPTR16 *);
297
447
PCRE_EXP_DECL int pcre_fullinfo(const pcre *, const pcre_extra *, int,
449
PCRE_EXP_DECL int pcre16_fullinfo(const pcre16 *, const pcre16_extra *, int,
299
451
PCRE_EXP_DECL int pcre_get_named_substring(const pcre *, const char *,
300
452
int *, int, const char *, const char **);
453
PCRE_EXP_DECL int pcre16_get_named_substring(const pcre16 *, PCRE_SPTR16,
454
int *, int, PCRE_SPTR16, PCRE_SPTR16 *);
301
455
PCRE_EXP_DECL int pcre_get_stringnumber(const pcre *, const char *);
456
PCRE_EXP_DECL int pcre16_get_stringnumber(const pcre16 *, PCRE_SPTR16);
302
457
PCRE_EXP_DECL int pcre_get_stringtable_entries(const pcre *, const char *,
303
458
char **, char **);
459
PCRE_EXP_DECL int pcre16_get_stringtable_entries(const pcre16 *, PCRE_SPTR16,
460
PCRE_UCHAR16 **, PCRE_UCHAR16 **);
304
461
PCRE_EXP_DECL int pcre_get_substring(const char *, int *, int, int,
463
PCRE_EXP_DECL int pcre16_get_substring(PCRE_SPTR16, int *, int, int,
306
465
PCRE_EXP_DECL int pcre_get_substring_list(const char *, int *, int,
308
PCRE_EXP_DECL int pcre_info(const pcre *, int *, int *);
467
PCRE_EXP_DECL int pcre16_get_substring_list(PCRE_SPTR16, int *, int,
309
469
PCRE_EXP_DECL const unsigned char *pcre_maketables(void);
470
PCRE_EXP_DECL const unsigned char *pcre16_maketables(void);
310
471
PCRE_EXP_DECL int pcre_refcount(pcre *, int);
472
PCRE_EXP_DECL int pcre16_refcount(pcre16 *, int);
311
473
PCRE_EXP_DECL pcre_extra *pcre_study(const pcre *, int, const char **);
474
PCRE_EXP_DECL pcre16_extra *pcre16_study(const pcre16 *, int, const char **);
475
PCRE_EXP_DECL void pcre_free_study(pcre_extra *);
476
PCRE_EXP_DECL void pcre16_free_study(pcre16_extra *);
312
477
PCRE_EXP_DECL const char *pcre_version(void);
478
PCRE_EXP_DECL const char *pcre16_version(void);
480
/* Utility functions for byte order swaps. */
481
PCRE_EXP_DECL int pcre_pattern_to_host_byte_order(pcre *, pcre_extra *,
482
const unsigned char *);
483
PCRE_EXP_DECL int pcre16_pattern_to_host_byte_order(pcre16 *, pcre16_extra *,
484
const unsigned char *);
485
PCRE_EXP_DECL int pcre16_utf16_to_host_byte_order(PCRE_UCHAR16 *,
486
PCRE_SPTR16, int, int *, int);
488
/* JIT compiler related functions. */
490
PCRE_EXP_DECL pcre_jit_stack *pcre_jit_stack_alloc(int, int);
491
PCRE_EXP_DECL pcre16_jit_stack *pcre16_jit_stack_alloc(int, int);
492
PCRE_EXP_DECL void pcre_jit_stack_free(pcre_jit_stack *);
493
PCRE_EXP_DECL void pcre16_jit_stack_free(pcre16_jit_stack *);
494
PCRE_EXP_DECL void pcre_assign_jit_stack(pcre_extra *,
495
pcre_jit_callback, void *);
496
PCRE_EXP_DECL void pcre16_assign_jit_stack(pcre16_extra *,
497
pcre16_jit_callback, void *);
314
499
#ifdef __cplusplus
315
500
} /* extern "C" */