7 |
and semantics are as close as possible to those of the Perl 5 language. |
and semantics are as close as possible to those of the Perl 5 language. |
8 |
|
|
9 |
Written by Philip Hazel |
Written by Philip Hazel |
10 |
Copyright (c) 1997-2009 University of Cambridge |
Copyright (c) 1997-2010 University of Cambridge |
11 |
|
|
12 |
----------------------------------------------------------------------------- |
----------------------------------------------------------------------------- |
13 |
Redistribution and use in source and binary forms, with or without |
Redistribution and use in source and binary forms, with or without |
45 |
#ifndef PCRE_INTERNAL_H |
#ifndef PCRE_INTERNAL_H |
46 |
#define PCRE_INTERNAL_H |
#define PCRE_INTERNAL_H |
47 |
|
|
48 |
/* Define DEBUG to get debugging output on stdout. */ |
/* Define PCRE_DEBUG to get debugging output on stdout. */ |
49 |
|
|
50 |
#if 0 |
#if 0 |
51 |
#define DEBUG |
#define PCRE_DEBUG |
52 |
#endif |
#endif |
53 |
|
|
54 |
/* We do not support both EBCDIC and UTF-8 at the same time. The "configure" |
/* We do not support both EBCDIC and UTF-8 at the same time. The "configure" |
74 |
be absolutely sure we get our version. */ |
be absolutely sure we get our version. */ |
75 |
|
|
76 |
#undef DPRINTF |
#undef DPRINTF |
77 |
#ifdef DEBUG |
#ifdef PCRE_DEBUG |
78 |
#define DPRINTF(p) printf p |
#define DPRINTF(p) printf p |
79 |
#else |
#else |
80 |
#define DPRINTF(p) /* Nothing */ |
#define DPRINTF(p) /* Nothing */ |
86 |
|
|
87 |
#include <ctype.h> |
#include <ctype.h> |
88 |
#include <limits.h> |
#include <limits.h> |
|
#include <setjmp.h> |
|
|
#include <stdarg.h> |
|
89 |
#include <stddef.h> |
#include <stddef.h> |
90 |
#include <stdio.h> |
#include <stdio.h> |
91 |
#include <stdlib.h> |
#include <stdlib.h> |
184 |
#error Cannot determine a type for 32-bit unsigned integers |
#error Cannot determine a type for 32-bit unsigned integers |
185 |
#endif |
#endif |
186 |
|
|
187 |
|
/* When checking for integer overflow in pcre_compile(), we need to handle |
188 |
|
large integers. If a 64-bit integer type is available, we can use that. |
189 |
|
Otherwise we have to cast to double, which of course requires floating point |
190 |
|
arithmetic. Handle this by defining a macro for the appropriate type. If |
191 |
|
stdint.h is available, include it; it may define INT64_MAX. The macro int64_t |
192 |
|
may be set by "configure". */ |
193 |
|
|
194 |
|
#if HAVE_STDINT_H |
195 |
|
#include <stdint.h> |
196 |
|
#endif |
197 |
|
|
198 |
|
#if defined INT64_MAX || defined int64_t |
199 |
|
#define INT64_OR_DOUBLE int64_t |
200 |
|
#else |
201 |
|
#define INT64_OR_DOUBLE double |
202 |
|
#endif |
203 |
|
|
204 |
/* All character handling must be done as unsigned characters. Otherwise there |
/* All character handling must be done as unsigned characters. Otherwise there |
205 |
are problems with top-bit-set characters and functions such as isspace(). |
are problems with top-bit-set characters and functions such as isspace(). |
206 |
However, we leave the interface to the outside world as char *, because that |
However, we leave the interface to the outside world as char *, because that |
1594 |
|
|
1595 |
typedef struct branch_chain { |
typedef struct branch_chain { |
1596 |
struct branch_chain *outer; |
struct branch_chain *outer; |
1597 |
uschar *current; |
uschar *current_branch; |
1598 |
} branch_chain; |
} branch_chain; |
1599 |
|
|
1600 |
/* Structure for items in a linked list that represents an explicit recursive |
/* Structure for items in a linked list that represents an explicit recursive |