1 | /************************************************* |
2 | * Perl-Compatible Regular Expressions * |
3 | *************************************************/ |
4 | |
5 | #ifndef _PCREPOSIX_H |
6 | #define _PCREPOSIX_H |
7 | |
8 | /* This is the header for the POSIX wrapper interface to the PCRE Perl- |
9 | Compatible Regular Expression library. It defines the things POSIX says should |
10 | be there. I hope. |
11 | |
12 | Copyright (c) 1997-2012 University of Cambridge |
13 | |
14 | ----------------------------------------------------------------------------- |
15 | Redistribution and use in source and binary forms, with or without |
16 | modification, are permitted provided that the following conditions are met: |
17 | |
18 | * Redistributions of source code must retain the above copyright notice, |
19 | this list of conditions and the following disclaimer. |
20 | |
21 | * Redistributions in binary form must reproduce the above copyright |
22 | notice, this list of conditions and the following disclaimer in the |
23 | documentation and/or other materials provided with the distribution. |
24 | |
25 | * Neither the name of the University of Cambridge nor the names of its |
26 | contributors may be used to endorse or promote products derived from |
27 | this software without specific prior written permission. |
28 | |
29 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
30 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
31 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
32 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
33 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
34 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
35 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
36 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
37 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
38 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
39 | POSSIBILITY OF SUCH DAMAGE. |
40 | ----------------------------------------------------------------------------- |
41 | */ |
42 | |
43 | /* Have to include stdlib.h in order to ensure that size_t is defined. */ |
44 | |
45 | #include <stdlib.h> |
46 | |
47 | /* Allow for C++ users */ |
48 | |
49 | #ifdef __cplusplus |
50 | extern "C" { |
51 | #endif |
52 | |
53 | /* Options, mostly defined by POSIX, but with some extras. */ |
54 | |
55 | #define REG_ICASE 0x0001 /* Maps to PCRE_CASELESS */ |
56 | #define REG_NEWLINE 0x0002 /* Maps to PCRE_MULTILINE */ |
57 | #define REG_NOTBOL 0x0004 /* Maps to PCRE_NOTBOL */ |
58 | #define REG_NOTEOL 0x0008 /* Maps to PCRE_NOTEOL */ |
59 | #define REG_DOTALL 0x0010 /* NOT defined by POSIX; maps to PCRE_DOTALL */ |
60 | #define REG_NOSUB 0x0020 /* Maps to PCRE_NO_AUTO_CAPTURE */ |
61 | #define REG_UTF8 0x0040 /* NOT defined by POSIX; maps to PCRE_UTF8 */ |
62 | #define REG_STARTEND 0x0080 /* BSD feature: pass subject string by so,eo */ |
63 | #define REG_NOTEMPTY 0x0100 /* NOT defined by POSIX; maps to PCRE_NOTEMPTY */ |
64 | #define REG_UNGREEDY 0x0200 /* NOT defined by POSIX; maps to PCRE_UNGREEDY */ |
65 | #define REG_UCP 0x0400 /* NOT defined by POSIX; maps to PCRE_UCP */ |
66 | |
67 | /* This is not used by PCRE, but by defining it we make it easier |
68 | to slot PCRE into existing programs that make POSIX calls. */ |
69 | |
70 | #define REG_EXTENDED 0 |
71 | |
72 | /* Error values. Not all these are relevant or used by the wrapper. */ |
73 | |
74 | enum { |
75 | REG_ASSERT = 1, /* internal error ? */ |
76 | REG_BADBR, /* invalid repeat counts in {} */ |
77 | REG_BADPAT, /* pattern error */ |
78 | REG_BADRPT, /* ? * + invalid */ |
79 | REG_EBRACE, /* unbalanced {} */ |
80 | REG_EBRACK, /* unbalanced [] */ |
81 | REG_ECOLLATE, /* collation error - not relevant */ |
82 | REG_ECTYPE, /* bad class */ |
83 | REG_EESCAPE, /* bad escape sequence */ |
84 | REG_EMPTY, /* empty expression */ |
85 | REG_EPAREN, /* unbalanced () */ |
86 | REG_ERANGE, /* bad range inside [] */ |
87 | REG_ESIZE, /* expression too big */ |
88 | REG_ESPACE, /* failed to get memory */ |
89 | REG_ESUBREG, /* bad back reference */ |
90 | REG_INVARG, /* bad argument */ |
91 | REG_NOMATCH /* match failed */ |
92 | }; |
93 | |
94 | |
95 | /* The structure representing a compiled regular expression. */ |
96 | |
97 | typedef struct { |
98 | void *re_pcre; |
99 | size_t re_nsub; |
100 | size_t re_erroffset; |
101 | } regex_t; |
102 | |
103 | /* The structure in which a captured offset is returned. */ |
104 | |
105 | typedef int regoff_t; |
106 | |
107 | typedef struct { |
108 | regoff_t rm_so; |
109 | regoff_t rm_eo; |
110 | } regmatch_t; |
111 | |
112 | /* When an application links to a PCRE DLL in Windows, the symbols that are |
113 | imported have to be identified as such. When building PCRE, the appropriate |
114 | export settings are needed, and are set in pcreposix.c before including this |
115 | file. */ |
116 | |
117 | #if defined(_WIN32) && !defined(PCRE_STATIC) && !defined(PCREPOSIX_EXP_DECL) |
118 | # define PCREPOSIX_EXP_DECL extern __declspec(dllimport) |
119 | # define PCREPOSIX_EXP_DEFN __declspec(dllimport) |
120 | #endif |
121 | |
122 | /* By default, we use the standard "extern" declarations. */ |
123 | |
124 | #ifndef PCREPOSIX_EXP_DECL |
125 | # ifdef __cplusplus |
126 | # define PCREPOSIX_EXP_DECL extern "C" |
127 | # define PCREPOSIX_EXP_DEFN extern "C" |
128 | # else |
129 | # define PCREPOSIX_EXP_DECL extern |
130 | # define PCREPOSIX_EXP_DEFN extern |
131 | # endif |
132 | #endif |
133 | |
134 | /* The functions */ |
135 | |
136 | PCREPOSIX_EXP_DECL int pcreposix_regcomp(regex_t *, const char *, int); |
137 | PCREPOSIX_EXP_DECL int pcreposix_regexec(const regex_t *, const char *, size_t, |
138 | regmatch_t *, int); |
139 | PCREPOSIX_EXP_DECL size_t pcreposix_regerror(int, const regex_t *, char *, size_t); |
140 | PCREPOSIX_EXP_DECL void pcreposix_regfree(regex_t *); |
141 | |
142 | #ifdef __cplusplus |
143 | } /* extern "C" */ |
144 | #endif |
145 | |
146 | #define regcomp pcreposix_regcomp |
147 | #define regexec pcreposix_regexec |
148 | #define regerror pcreposix_regerror |
149 | #define regfree pcreposix_regfree |
150 | |
151 | #endif /* End of pcreposix.h */ |
152 | |