1*820c1a8dSHiroo HAYASHI /* Definitions for data structures and routines for the regular 2*820c1a8dSHiroo HAYASHI expression library. 3*820c1a8dSHiroo HAYASHI Copyright (C) 1985, 1989-2021 Free Software Foundation, Inc. 4*820c1a8dSHiroo HAYASHI This file is part of the GNU C Library. 5*820c1a8dSHiroo HAYASHI 6*820c1a8dSHiroo HAYASHI The GNU C Library is free software; you can redistribute it and/or 7*820c1a8dSHiroo HAYASHI modify it under the terms of the GNU Lesser General Public 8*820c1a8dSHiroo HAYASHI License as published by the Free Software Foundation; either 9*820c1a8dSHiroo HAYASHI version 2.1 of the License, or (at your option) any later version. 10*820c1a8dSHiroo HAYASHI 11*820c1a8dSHiroo HAYASHI The GNU C Library is distributed in the hope that it will be useful, 12*820c1a8dSHiroo HAYASHI but WITHOUT ANY WARRANTY; without even the implied warranty of 13*820c1a8dSHiroo HAYASHI MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14*820c1a8dSHiroo HAYASHI Lesser General Public License for more details. 15*820c1a8dSHiroo HAYASHI 16*820c1a8dSHiroo HAYASHI You should have received a copy of the GNU Lesser General Public 17*820c1a8dSHiroo HAYASHI License along with the GNU C Library; if not, see 18*820c1a8dSHiroo HAYASHI <https://www.gnu.org/licenses/>. */ 19*820c1a8dSHiroo HAYASHI 20*820c1a8dSHiroo HAYASHI #ifndef _REGEX_H 21*820c1a8dSHiroo HAYASHI #define _REGEX_H 1 22*820c1a8dSHiroo HAYASHI 23*820c1a8dSHiroo HAYASHI #include <sys/types.h> 24*820c1a8dSHiroo HAYASHI 25*820c1a8dSHiroo HAYASHI /* Allow the use in C++ code. */ 26*820c1a8dSHiroo HAYASHI #ifdef __cplusplus 27*820c1a8dSHiroo HAYASHI extern "C" { 28*820c1a8dSHiroo HAYASHI #endif 29*820c1a8dSHiroo HAYASHI 30*820c1a8dSHiroo HAYASHI /* Define __USE_GNU to declare GNU extensions that violate the 31*820c1a8dSHiroo HAYASHI POSIX name space rules. */ 32*820c1a8dSHiroo HAYASHI #ifdef _GNU_SOURCE 33*820c1a8dSHiroo HAYASHI # define __USE_GNU 1 34*820c1a8dSHiroo HAYASHI #endif 35*820c1a8dSHiroo HAYASHI 36*820c1a8dSHiroo HAYASHI #ifdef _REGEX_LARGE_OFFSETS 37*820c1a8dSHiroo HAYASHI 38*820c1a8dSHiroo HAYASHI /* Use types and values that are wide enough to represent signed and 39*820c1a8dSHiroo HAYASHI unsigned byte offsets in memory. This currently works only when 40*820c1a8dSHiroo HAYASHI the regex code is used outside of the GNU C library; it is not yet 41*820c1a8dSHiroo HAYASHI supported within glibc itself, and glibc users should not define 42*820c1a8dSHiroo HAYASHI _REGEX_LARGE_OFFSETS. */ 43*820c1a8dSHiroo HAYASHI 44*820c1a8dSHiroo HAYASHI /* The type of object sizes. */ 45*820c1a8dSHiroo HAYASHI typedef size_t __re_size_t; 46*820c1a8dSHiroo HAYASHI 47*820c1a8dSHiroo HAYASHI /* The type of object sizes, in places where the traditional code 48*820c1a8dSHiroo HAYASHI uses unsigned long int. */ 49*820c1a8dSHiroo HAYASHI typedef size_t __re_long_size_t; 50*820c1a8dSHiroo HAYASHI 51*820c1a8dSHiroo HAYASHI #else 52*820c1a8dSHiroo HAYASHI 53*820c1a8dSHiroo HAYASHI /* The traditional GNU regex implementation mishandles strings longer 54*820c1a8dSHiroo HAYASHI than INT_MAX. */ 55*820c1a8dSHiroo HAYASHI typedef unsigned int __re_size_t; 56*820c1a8dSHiroo HAYASHI typedef unsigned long int __re_long_size_t; 57*820c1a8dSHiroo HAYASHI 58*820c1a8dSHiroo HAYASHI #endif 59*820c1a8dSHiroo HAYASHI 60*820c1a8dSHiroo HAYASHI /* The following two types have to be signed and unsigned integer type 61*820c1a8dSHiroo HAYASHI wide enough to hold a value of a pointer. For most ANSI compilers 62*820c1a8dSHiroo HAYASHI ptrdiff_t and size_t should be likely OK. Still size of these two 63*820c1a8dSHiroo HAYASHI types is 2 for Microsoft C. Ugh... */ 64*820c1a8dSHiroo HAYASHI typedef long int s_reg_t; 65*820c1a8dSHiroo HAYASHI typedef unsigned long int active_reg_t; 66*820c1a8dSHiroo HAYASHI 67*820c1a8dSHiroo HAYASHI /* The following bits are used to determine the regexp syntax we 68*820c1a8dSHiroo HAYASHI recognize. The set/not-set meanings are chosen so that Emacs syntax 69*820c1a8dSHiroo HAYASHI remains the value 0. The bits are given in alphabetical order, and 70*820c1a8dSHiroo HAYASHI the definitions shifted by one from the previous bit; thus, when we 71*820c1a8dSHiroo HAYASHI add or remove a bit, only one other definition need change. */ 72*820c1a8dSHiroo HAYASHI typedef unsigned long int reg_syntax_t; 73*820c1a8dSHiroo HAYASHI 74*820c1a8dSHiroo HAYASHI #ifdef __USE_GNU 75*820c1a8dSHiroo HAYASHI /* If this bit is not set, then \ inside a bracket expression is literal. 76*820c1a8dSHiroo HAYASHI If set, then such a \ quotes the following character. */ 77*820c1a8dSHiroo HAYASHI # define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1) 78*820c1a8dSHiroo HAYASHI 79*820c1a8dSHiroo HAYASHI /* If this bit is not set, then + and ? are operators, and \+ and \? are 80*820c1a8dSHiroo HAYASHI literals. 81*820c1a8dSHiroo HAYASHI If set, then \+ and \? are operators and + and ? are literals. */ 82*820c1a8dSHiroo HAYASHI # define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1) 83*820c1a8dSHiroo HAYASHI 84*820c1a8dSHiroo HAYASHI /* If this bit is set, then character classes are supported. They are: 85*820c1a8dSHiroo HAYASHI [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:], 86*820c1a8dSHiroo HAYASHI [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:]. 87*820c1a8dSHiroo HAYASHI If not set, then character classes are not supported. */ 88*820c1a8dSHiroo HAYASHI # define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1) 89*820c1a8dSHiroo HAYASHI 90*820c1a8dSHiroo HAYASHI /* If this bit is set, then ^ and $ are always anchors (outside bracket 91*820c1a8dSHiroo HAYASHI expressions, of course). 92*820c1a8dSHiroo HAYASHI If this bit is not set, then it depends: 93*820c1a8dSHiroo HAYASHI ^ is an anchor if it is at the beginning of a regular 94*820c1a8dSHiroo HAYASHI expression or after an open-group or an alternation operator; 95*820c1a8dSHiroo HAYASHI $ is an anchor if it is at the end of a regular expression, or 96*820c1a8dSHiroo HAYASHI before a close-group or an alternation operator. 97*820c1a8dSHiroo HAYASHI 98*820c1a8dSHiroo HAYASHI This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because 99*820c1a8dSHiroo HAYASHI POSIX draft 11.2 says that * etc. in leading positions is undefined. 100*820c1a8dSHiroo HAYASHI We already implemented a previous draft which made those constructs 101*820c1a8dSHiroo HAYASHI invalid, though, so we haven't changed the code back. */ 102*820c1a8dSHiroo HAYASHI # define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1) 103*820c1a8dSHiroo HAYASHI 104*820c1a8dSHiroo HAYASHI /* If this bit is set, then special characters are always special 105*820c1a8dSHiroo HAYASHI regardless of where they are in the pattern. 106*820c1a8dSHiroo HAYASHI If this bit is not set, then special characters are special only in 107*820c1a8dSHiroo HAYASHI some contexts; otherwise they are ordinary. Specifically, 108*820c1a8dSHiroo HAYASHI * + ? and intervals are only special when not after the beginning, 109*820c1a8dSHiroo HAYASHI open-group, or alternation operator. */ 110*820c1a8dSHiroo HAYASHI # define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1) 111*820c1a8dSHiroo HAYASHI 112*820c1a8dSHiroo HAYASHI /* If this bit is set, then *, +, ?, and { cannot be first in an re or 113*820c1a8dSHiroo HAYASHI immediately after an alternation or begin-group operator. */ 114*820c1a8dSHiroo HAYASHI # define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1) 115*820c1a8dSHiroo HAYASHI 116*820c1a8dSHiroo HAYASHI /* If this bit is set, then . matches newline. 117*820c1a8dSHiroo HAYASHI If not set, then it doesn't. */ 118*820c1a8dSHiroo HAYASHI # define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1) 119*820c1a8dSHiroo HAYASHI 120*820c1a8dSHiroo HAYASHI /* If this bit is set, then . doesn't match NUL. 121*820c1a8dSHiroo HAYASHI If not set, then it does. */ 122*820c1a8dSHiroo HAYASHI # define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1) 123*820c1a8dSHiroo HAYASHI 124*820c1a8dSHiroo HAYASHI /* If this bit is set, nonmatching lists [^...] do not match newline. 125*820c1a8dSHiroo HAYASHI If not set, they do. */ 126*820c1a8dSHiroo HAYASHI # define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1) 127*820c1a8dSHiroo HAYASHI 128*820c1a8dSHiroo HAYASHI /* If this bit is set, either \{...\} or {...} defines an 129*820c1a8dSHiroo HAYASHI interval, depending on RE_NO_BK_BRACES. 130*820c1a8dSHiroo HAYASHI If not set, \{, \}, {, and } are literals. */ 131*820c1a8dSHiroo HAYASHI # define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1) 132*820c1a8dSHiroo HAYASHI 133*820c1a8dSHiroo HAYASHI /* If this bit is set, +, ? and | aren't recognized as operators. 134*820c1a8dSHiroo HAYASHI If not set, they are. */ 135*820c1a8dSHiroo HAYASHI # define RE_LIMITED_OPS (RE_INTERVALS << 1) 136*820c1a8dSHiroo HAYASHI 137*820c1a8dSHiroo HAYASHI /* If this bit is set, newline is an alternation operator. 138*820c1a8dSHiroo HAYASHI If not set, newline is literal. */ 139*820c1a8dSHiroo HAYASHI # define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1) 140*820c1a8dSHiroo HAYASHI 141*820c1a8dSHiroo HAYASHI /* If this bit is set, then '{...}' defines an interval, and \{ and \} 142*820c1a8dSHiroo HAYASHI are literals. 143*820c1a8dSHiroo HAYASHI If not set, then '\{...\}' defines an interval. */ 144*820c1a8dSHiroo HAYASHI # define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1) 145*820c1a8dSHiroo HAYASHI 146*820c1a8dSHiroo HAYASHI /* If this bit is set, (...) defines a group, and \( and \) are literals. 147*820c1a8dSHiroo HAYASHI If not set, \(...\) defines a group, and ( and ) are literals. */ 148*820c1a8dSHiroo HAYASHI # define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1) 149*820c1a8dSHiroo HAYASHI 150*820c1a8dSHiroo HAYASHI /* If this bit is set, then \<digit> matches <digit>. 151*820c1a8dSHiroo HAYASHI If not set, then \<digit> is a back-reference. */ 152*820c1a8dSHiroo HAYASHI # define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1) 153*820c1a8dSHiroo HAYASHI 154*820c1a8dSHiroo HAYASHI /* If this bit is set, then | is an alternation operator, and \| is literal. 155*820c1a8dSHiroo HAYASHI If not set, then \| is an alternation operator, and | is literal. */ 156*820c1a8dSHiroo HAYASHI # define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1) 157*820c1a8dSHiroo HAYASHI 158*820c1a8dSHiroo HAYASHI /* If this bit is set, then an ending range point collating higher 159*820c1a8dSHiroo HAYASHI than the starting range point, as in [z-a], is invalid. 160*820c1a8dSHiroo HAYASHI If not set, then when ending range point collates higher than the 161*820c1a8dSHiroo HAYASHI starting range point, the range is ignored. */ 162*820c1a8dSHiroo HAYASHI # define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1) 163*820c1a8dSHiroo HAYASHI 164*820c1a8dSHiroo HAYASHI /* If this bit is set, then an unmatched ) is ordinary. 165*820c1a8dSHiroo HAYASHI If not set, then an unmatched ) is invalid. */ 166*820c1a8dSHiroo HAYASHI # define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1) 167*820c1a8dSHiroo HAYASHI 168*820c1a8dSHiroo HAYASHI /* If this bit is set, succeed as soon as we match the whole pattern, 169*820c1a8dSHiroo HAYASHI without further backtracking. */ 170*820c1a8dSHiroo HAYASHI # define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1) 171*820c1a8dSHiroo HAYASHI 172*820c1a8dSHiroo HAYASHI /* If this bit is set, do not process the GNU regex operators. 173*820c1a8dSHiroo HAYASHI If not set, then the GNU regex operators are recognized. */ 174*820c1a8dSHiroo HAYASHI # define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1) 175*820c1a8dSHiroo HAYASHI 176*820c1a8dSHiroo HAYASHI /* If this bit is set, turn on internal regex debugging. 177*820c1a8dSHiroo HAYASHI If not set, and debugging was on, turn it off. 178*820c1a8dSHiroo HAYASHI This only works if regex.c is compiled -DDEBUG. 179*820c1a8dSHiroo HAYASHI We define this bit always, so that all that's needed to turn on 180*820c1a8dSHiroo HAYASHI debugging is to recompile regex.c; the calling code can always have 181*820c1a8dSHiroo HAYASHI this bit set, and it won't affect anything in the normal case. */ 182*820c1a8dSHiroo HAYASHI # define RE_DEBUG (RE_NO_GNU_OPS << 1) 183*820c1a8dSHiroo HAYASHI 184*820c1a8dSHiroo HAYASHI /* If this bit is set, a syntactically invalid interval is treated as 185*820c1a8dSHiroo HAYASHI a string of ordinary characters. For example, the ERE 'a{1' is 186*820c1a8dSHiroo HAYASHI treated as 'a\{1'. */ 187*820c1a8dSHiroo HAYASHI # define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1) 188*820c1a8dSHiroo HAYASHI 189*820c1a8dSHiroo HAYASHI /* If this bit is set, then ignore case when matching. 190*820c1a8dSHiroo HAYASHI If not set, then case is significant. */ 191*820c1a8dSHiroo HAYASHI # define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1) 192*820c1a8dSHiroo HAYASHI 193*820c1a8dSHiroo HAYASHI /* This bit is used internally like RE_CONTEXT_INDEP_ANCHORS but only 194*820c1a8dSHiroo HAYASHI for ^, because it is difficult to scan the regex backwards to find 195*820c1a8dSHiroo HAYASHI whether ^ should be special. */ 196*820c1a8dSHiroo HAYASHI # define RE_CARET_ANCHORS_HERE (RE_ICASE << 1) 197*820c1a8dSHiroo HAYASHI 198*820c1a8dSHiroo HAYASHI /* If this bit is set, then \{ cannot be first in a regex or 199*820c1a8dSHiroo HAYASHI immediately after an alternation, open-group or \} operator. */ 200*820c1a8dSHiroo HAYASHI # define RE_CONTEXT_INVALID_DUP (RE_CARET_ANCHORS_HERE << 1) 201*820c1a8dSHiroo HAYASHI 202*820c1a8dSHiroo HAYASHI /* If this bit is set, then no_sub will be set to 1 during 203*820c1a8dSHiroo HAYASHI re_compile_pattern. */ 204*820c1a8dSHiroo HAYASHI # define RE_NO_SUB (RE_CONTEXT_INVALID_DUP << 1) 205*820c1a8dSHiroo HAYASHI #endif 206*820c1a8dSHiroo HAYASHI 207*820c1a8dSHiroo HAYASHI /* This global variable defines the particular regexp syntax to use (for 208*820c1a8dSHiroo HAYASHI some interfaces). When a regexp is compiled, the syntax used is 209*820c1a8dSHiroo HAYASHI stored in the pattern buffer, so changing this does not affect 210*820c1a8dSHiroo HAYASHI already-compiled regexps. */ 211*820c1a8dSHiroo HAYASHI extern reg_syntax_t re_syntax_options; 212*820c1a8dSHiroo HAYASHI 213*820c1a8dSHiroo HAYASHI #ifdef __USE_GNU 214*820c1a8dSHiroo HAYASHI /* Define combinations of the above bits for the standard possibilities. 215*820c1a8dSHiroo HAYASHI (The [[[ comments delimit what gets put into the Texinfo file, so 216*820c1a8dSHiroo HAYASHI don't delete them!) */ 217*820c1a8dSHiroo HAYASHI /* [[[begin syntaxes]]] */ 218*820c1a8dSHiroo HAYASHI # define RE_SYNTAX_EMACS 0 219*820c1a8dSHiroo HAYASHI 220*820c1a8dSHiroo HAYASHI # define RE_SYNTAX_AWK \ 221*820c1a8dSHiroo HAYASHI (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ 222*820c1a8dSHiroo HAYASHI | RE_NO_BK_PARENS | RE_NO_BK_REFS \ 223*820c1a8dSHiroo HAYASHI | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \ 224*820c1a8dSHiroo HAYASHI | RE_DOT_NEWLINE | RE_CONTEXT_INDEP_ANCHORS \ 225*820c1a8dSHiroo HAYASHI | RE_CHAR_CLASSES \ 226*820c1a8dSHiroo HAYASHI | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS) 227*820c1a8dSHiroo HAYASHI 228*820c1a8dSHiroo HAYASHI # define RE_SYNTAX_GNU_AWK \ 229*820c1a8dSHiroo HAYASHI ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ 230*820c1a8dSHiroo HAYASHI | RE_INVALID_INTERVAL_ORD) \ 231*820c1a8dSHiroo HAYASHI & ~(RE_DOT_NOT_NULL | RE_CONTEXT_INDEP_OPS \ 232*820c1a8dSHiroo HAYASHI | RE_CONTEXT_INVALID_OPS )) 233*820c1a8dSHiroo HAYASHI 234*820c1a8dSHiroo HAYASHI # define RE_SYNTAX_POSIX_AWK \ 235*820c1a8dSHiroo HAYASHI (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ 236*820c1a8dSHiroo HAYASHI | RE_INTERVALS | RE_NO_GNU_OPS \ 237*820c1a8dSHiroo HAYASHI | RE_INVALID_INTERVAL_ORD) 238*820c1a8dSHiroo HAYASHI 239*820c1a8dSHiroo HAYASHI # define RE_SYNTAX_GREP \ 240*820c1a8dSHiroo HAYASHI ((RE_SYNTAX_POSIX_BASIC | RE_NEWLINE_ALT) \ 241*820c1a8dSHiroo HAYASHI & ~(RE_CONTEXT_INVALID_DUP | RE_DOT_NOT_NULL)) 242*820c1a8dSHiroo HAYASHI 243*820c1a8dSHiroo HAYASHI # define RE_SYNTAX_EGREP \ 244*820c1a8dSHiroo HAYASHI ((RE_SYNTAX_POSIX_EXTENDED | RE_INVALID_INTERVAL_ORD | RE_NEWLINE_ALT) \ 245*820c1a8dSHiroo HAYASHI & ~(RE_CONTEXT_INVALID_OPS | RE_DOT_NOT_NULL)) 246*820c1a8dSHiroo HAYASHI 247*820c1a8dSHiroo HAYASHI /* POSIX grep -E behavior is no longer incompatible with GNU. */ 248*820c1a8dSHiroo HAYASHI # define RE_SYNTAX_POSIX_EGREP \ 249*820c1a8dSHiroo HAYASHI RE_SYNTAX_EGREP 250*820c1a8dSHiroo HAYASHI 251*820c1a8dSHiroo HAYASHI /* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ 252*820c1a8dSHiroo HAYASHI # define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC 253*820c1a8dSHiroo HAYASHI 254*820c1a8dSHiroo HAYASHI # define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC 255*820c1a8dSHiroo HAYASHI 256*820c1a8dSHiroo HAYASHI /* Syntax bits common to both basic and extended POSIX regex syntax. */ 257*820c1a8dSHiroo HAYASHI # define _RE_SYNTAX_POSIX_COMMON \ 258*820c1a8dSHiroo HAYASHI (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \ 259*820c1a8dSHiroo HAYASHI | RE_INTERVALS | RE_NO_EMPTY_RANGES) 260*820c1a8dSHiroo HAYASHI 261*820c1a8dSHiroo HAYASHI # define RE_SYNTAX_POSIX_BASIC \ 262*820c1a8dSHiroo HAYASHI (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM | RE_CONTEXT_INVALID_DUP) 263*820c1a8dSHiroo HAYASHI 264*820c1a8dSHiroo HAYASHI /* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes 265*820c1a8dSHiroo HAYASHI RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this 266*820c1a8dSHiroo HAYASHI isn't minimal, since other operators, such as \`, aren't disabled. */ 267*820c1a8dSHiroo HAYASHI # define RE_SYNTAX_POSIX_MINIMAL_BASIC \ 268*820c1a8dSHiroo HAYASHI (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS) 269*820c1a8dSHiroo HAYASHI 270*820c1a8dSHiroo HAYASHI # define RE_SYNTAX_POSIX_EXTENDED \ 271*820c1a8dSHiroo HAYASHI (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ 272*820c1a8dSHiroo HAYASHI | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \ 273*820c1a8dSHiroo HAYASHI | RE_NO_BK_PARENS | RE_NO_BK_VBAR \ 274*820c1a8dSHiroo HAYASHI | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD) 275*820c1a8dSHiroo HAYASHI 276*820c1a8dSHiroo HAYASHI /* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is 277*820c1a8dSHiroo HAYASHI removed and RE_NO_BK_REFS is added. */ 278*820c1a8dSHiroo HAYASHI # define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \ 279*820c1a8dSHiroo HAYASHI (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ 280*820c1a8dSHiroo HAYASHI | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \ 281*820c1a8dSHiroo HAYASHI | RE_NO_BK_PARENS | RE_NO_BK_REFS \ 282*820c1a8dSHiroo HAYASHI | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD) 283*820c1a8dSHiroo HAYASHI /* [[[end syntaxes]]] */ 284*820c1a8dSHiroo HAYASHI 285*820c1a8dSHiroo HAYASHI /* Maximum number of duplicates an interval can allow. POSIX-conforming 286*820c1a8dSHiroo HAYASHI systems might define this in <limits.h>, but we want our 287*820c1a8dSHiroo HAYASHI value, so remove any previous define. */ 288*820c1a8dSHiroo HAYASHI # ifdef _REGEX_INCLUDE_LIMITS_H 289*820c1a8dSHiroo HAYASHI # include <limits.h> 290*820c1a8dSHiroo HAYASHI # endif 291*820c1a8dSHiroo HAYASHI # ifdef RE_DUP_MAX 292*820c1a8dSHiroo HAYASHI # undef RE_DUP_MAX 293*820c1a8dSHiroo HAYASHI # endif 294*820c1a8dSHiroo HAYASHI 295*820c1a8dSHiroo HAYASHI /* RE_DUP_MAX is 2**15 - 1 because an earlier implementation stored 296*820c1a8dSHiroo HAYASHI the counter as a 2-byte signed integer. This is no longer true, so 297*820c1a8dSHiroo HAYASHI RE_DUP_MAX could be increased to (INT_MAX / 10 - 1), or to 298*820c1a8dSHiroo HAYASHI ((SIZE_MAX - 9) / 10) if _REGEX_LARGE_OFFSETS is defined. 299*820c1a8dSHiroo HAYASHI However, there would be a huge performance problem if someone 300*820c1a8dSHiroo HAYASHI actually used a pattern like a\{214748363\}, so RE_DUP_MAX retains 301*820c1a8dSHiroo HAYASHI its historical value. */ 302*820c1a8dSHiroo HAYASHI # define RE_DUP_MAX (0x7fff) 303*820c1a8dSHiroo HAYASHI #endif 304*820c1a8dSHiroo HAYASHI 305*820c1a8dSHiroo HAYASHI 306*820c1a8dSHiroo HAYASHI /* POSIX 'cflags' bits (i.e., information for 'regcomp'). */ 307*820c1a8dSHiroo HAYASHI 308*820c1a8dSHiroo HAYASHI /* If this bit is set, then use extended regular expression syntax. 309*820c1a8dSHiroo HAYASHI If not set, then use basic regular expression syntax. */ 310*820c1a8dSHiroo HAYASHI #define REG_EXTENDED 1 311*820c1a8dSHiroo HAYASHI 312*820c1a8dSHiroo HAYASHI /* If this bit is set, then ignore case when matching. 313*820c1a8dSHiroo HAYASHI If not set, then case is significant. */ 314*820c1a8dSHiroo HAYASHI #define REG_ICASE (1 << 1) 315*820c1a8dSHiroo HAYASHI 316*820c1a8dSHiroo HAYASHI /* If this bit is set, then anchors do not match at newline 317*820c1a8dSHiroo HAYASHI characters in the string. 318*820c1a8dSHiroo HAYASHI If not set, then anchors do match at newlines. */ 319*820c1a8dSHiroo HAYASHI #define REG_NEWLINE (1 << 2) 320*820c1a8dSHiroo HAYASHI 321*820c1a8dSHiroo HAYASHI /* If this bit is set, then report only success or fail in regexec. 322*820c1a8dSHiroo HAYASHI If not set, then returns differ between not matching and errors. */ 323*820c1a8dSHiroo HAYASHI #define REG_NOSUB (1 << 3) 324*820c1a8dSHiroo HAYASHI 325*820c1a8dSHiroo HAYASHI 326*820c1a8dSHiroo HAYASHI /* POSIX 'eflags' bits (i.e., information for regexec). */ 327*820c1a8dSHiroo HAYASHI 328*820c1a8dSHiroo HAYASHI /* If this bit is set, then the beginning-of-line operator doesn't match 329*820c1a8dSHiroo HAYASHI the beginning of the string (presumably because it's not the 330*820c1a8dSHiroo HAYASHI beginning of a line). 331*820c1a8dSHiroo HAYASHI If not set, then the beginning-of-line operator does match the 332*820c1a8dSHiroo HAYASHI beginning of the string. */ 333*820c1a8dSHiroo HAYASHI #define REG_NOTBOL 1 334*820c1a8dSHiroo HAYASHI 335*820c1a8dSHiroo HAYASHI /* Like REG_NOTBOL, except for the end-of-line. */ 336*820c1a8dSHiroo HAYASHI #define REG_NOTEOL (1 << 1) 337*820c1a8dSHiroo HAYASHI 338*820c1a8dSHiroo HAYASHI /* Use PMATCH[0] to delimit the start and end of the search in the 339*820c1a8dSHiroo HAYASHI buffer. */ 340*820c1a8dSHiroo HAYASHI #define REG_STARTEND (1 << 2) 341*820c1a8dSHiroo HAYASHI 342*820c1a8dSHiroo HAYASHI 343*820c1a8dSHiroo HAYASHI /* If any error codes are removed, changed, or added, update the 344*820c1a8dSHiroo HAYASHI '__re_error_msgid' table in regcomp.c. */ 345*820c1a8dSHiroo HAYASHI 346*820c1a8dSHiroo HAYASHI typedef enum 347*820c1a8dSHiroo HAYASHI { 348*820c1a8dSHiroo HAYASHI _REG_ENOSYS = -1, /* This will never happen for this implementation. */ 349*820c1a8dSHiroo HAYASHI _REG_NOERROR = 0, /* Success. */ 350*820c1a8dSHiroo HAYASHI _REG_NOMATCH, /* Didn't find a match (for regexec). */ 351*820c1a8dSHiroo HAYASHI 352*820c1a8dSHiroo HAYASHI /* POSIX regcomp return error codes. (In the order listed in the 353*820c1a8dSHiroo HAYASHI standard.) */ 354*820c1a8dSHiroo HAYASHI _REG_BADPAT, /* Invalid pattern. */ 355*820c1a8dSHiroo HAYASHI _REG_ECOLLATE, /* Invalid collating element. */ 356*820c1a8dSHiroo HAYASHI _REG_ECTYPE, /* Invalid character class name. */ 357*820c1a8dSHiroo HAYASHI _REG_EESCAPE, /* Trailing backslash. */ 358*820c1a8dSHiroo HAYASHI _REG_ESUBREG, /* Invalid back reference. */ 359*820c1a8dSHiroo HAYASHI _REG_EBRACK, /* Unmatched left bracket. */ 360*820c1a8dSHiroo HAYASHI _REG_EPAREN, /* Parenthesis imbalance. */ 361*820c1a8dSHiroo HAYASHI _REG_EBRACE, /* Unmatched \{. */ 362*820c1a8dSHiroo HAYASHI _REG_BADBR, /* Invalid contents of \{\}. */ 363*820c1a8dSHiroo HAYASHI _REG_ERANGE, /* Invalid range end. */ 364*820c1a8dSHiroo HAYASHI _REG_ESPACE, /* Ran out of memory. */ 365*820c1a8dSHiroo HAYASHI _REG_BADRPT, /* No preceding re for repetition op. */ 366*820c1a8dSHiroo HAYASHI 367*820c1a8dSHiroo HAYASHI /* Error codes we've added. */ 368*820c1a8dSHiroo HAYASHI _REG_EEND, /* Premature end. */ 369*820c1a8dSHiroo HAYASHI _REG_ESIZE, /* Too large (e.g., repeat count too large). */ 370*820c1a8dSHiroo HAYASHI _REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */ 371*820c1a8dSHiroo HAYASHI } reg_errcode_t; 372*820c1a8dSHiroo HAYASHI 373*820c1a8dSHiroo HAYASHI #if defined _XOPEN_SOURCE || defined __USE_XOPEN2K 374*820c1a8dSHiroo HAYASHI # define REG_ENOSYS _REG_ENOSYS 375*820c1a8dSHiroo HAYASHI #endif 376*820c1a8dSHiroo HAYASHI #define REG_NOERROR _REG_NOERROR 377*820c1a8dSHiroo HAYASHI #define REG_NOMATCH _REG_NOMATCH 378*820c1a8dSHiroo HAYASHI #define REG_BADPAT _REG_BADPAT 379*820c1a8dSHiroo HAYASHI #define REG_ECOLLATE _REG_ECOLLATE 380*820c1a8dSHiroo HAYASHI #define REG_ECTYPE _REG_ECTYPE 381*820c1a8dSHiroo HAYASHI #define REG_EESCAPE _REG_EESCAPE 382*820c1a8dSHiroo HAYASHI #define REG_ESUBREG _REG_ESUBREG 383*820c1a8dSHiroo HAYASHI #define REG_EBRACK _REG_EBRACK 384*820c1a8dSHiroo HAYASHI #define REG_EPAREN _REG_EPAREN 385*820c1a8dSHiroo HAYASHI #define REG_EBRACE _REG_EBRACE 386*820c1a8dSHiroo HAYASHI #define REG_BADBR _REG_BADBR 387*820c1a8dSHiroo HAYASHI #define REG_ERANGE _REG_ERANGE 388*820c1a8dSHiroo HAYASHI #define REG_ESPACE _REG_ESPACE 389*820c1a8dSHiroo HAYASHI #define REG_BADRPT _REG_BADRPT 390*820c1a8dSHiroo HAYASHI #define REG_EEND _REG_EEND 391*820c1a8dSHiroo HAYASHI #define REG_ESIZE _REG_ESIZE 392*820c1a8dSHiroo HAYASHI #define REG_ERPAREN _REG_ERPAREN 393*820c1a8dSHiroo HAYASHI 394*820c1a8dSHiroo HAYASHI /* This data structure represents a compiled pattern. Before calling 395*820c1a8dSHiroo HAYASHI the pattern compiler, the fields 'buffer', 'allocated', 'fastmap', 396*820c1a8dSHiroo HAYASHI and 'translate' can be set. After the pattern has been compiled, 397*820c1a8dSHiroo HAYASHI the fields 're_nsub', 'not_bol' and 'not_eol' are available. All 398*820c1a8dSHiroo HAYASHI other fields are private to the regex routines. */ 399*820c1a8dSHiroo HAYASHI 400*820c1a8dSHiroo HAYASHI #ifndef RE_TRANSLATE_TYPE 401*820c1a8dSHiroo HAYASHI # define __RE_TRANSLATE_TYPE unsigned char * 402*820c1a8dSHiroo HAYASHI # ifdef __USE_GNU 403*820c1a8dSHiroo HAYASHI # define RE_TRANSLATE_TYPE __RE_TRANSLATE_TYPE 404*820c1a8dSHiroo HAYASHI # endif 405*820c1a8dSHiroo HAYASHI #endif 406*820c1a8dSHiroo HAYASHI 407*820c1a8dSHiroo HAYASHI #ifdef __USE_GNU 408*820c1a8dSHiroo HAYASHI # define __REPB_PREFIX(name) name 409*820c1a8dSHiroo HAYASHI #else 410*820c1a8dSHiroo HAYASHI # define __REPB_PREFIX(name) __##name 411*820c1a8dSHiroo HAYASHI #endif 412*820c1a8dSHiroo HAYASHI 413*820c1a8dSHiroo HAYASHI struct re_pattern_buffer 414*820c1a8dSHiroo HAYASHI { 415*820c1a8dSHiroo HAYASHI /* Space that holds the compiled pattern. The type 416*820c1a8dSHiroo HAYASHI 'struct re_dfa_t' is private and is not declared here. */ 417*820c1a8dSHiroo HAYASHI struct re_dfa_t *__REPB_PREFIX(buffer); 418*820c1a8dSHiroo HAYASHI 419*820c1a8dSHiroo HAYASHI /* Number of bytes to which 'buffer' points. */ 420*820c1a8dSHiroo HAYASHI __re_long_size_t __REPB_PREFIX(allocated); 421*820c1a8dSHiroo HAYASHI 422*820c1a8dSHiroo HAYASHI /* Number of bytes actually used in 'buffer'. */ 423*820c1a8dSHiroo HAYASHI __re_long_size_t __REPB_PREFIX(used); 424*820c1a8dSHiroo HAYASHI 425*820c1a8dSHiroo HAYASHI /* Syntax setting with which the pattern was compiled. */ 426*820c1a8dSHiroo HAYASHI reg_syntax_t __REPB_PREFIX(syntax); 427*820c1a8dSHiroo HAYASHI 428*820c1a8dSHiroo HAYASHI /* Pointer to a fastmap, if any, otherwise zero. re_search uses the 429*820c1a8dSHiroo HAYASHI fastmap, if there is one, to skip over impossible starting points 430*820c1a8dSHiroo HAYASHI for matches. */ 431*820c1a8dSHiroo HAYASHI char *__REPB_PREFIX(fastmap); 432*820c1a8dSHiroo HAYASHI 433*820c1a8dSHiroo HAYASHI /* Either a translate table to apply to all characters before 434*820c1a8dSHiroo HAYASHI comparing them, or zero for no translation. The translation is 435*820c1a8dSHiroo HAYASHI applied to a pattern when it is compiled and to a string when it 436*820c1a8dSHiroo HAYASHI is matched. */ 437*820c1a8dSHiroo HAYASHI __RE_TRANSLATE_TYPE __REPB_PREFIX(translate); 438*820c1a8dSHiroo HAYASHI 439*820c1a8dSHiroo HAYASHI /* Number of subexpressions found by the compiler. */ 440*820c1a8dSHiroo HAYASHI size_t re_nsub; 441*820c1a8dSHiroo HAYASHI 442*820c1a8dSHiroo HAYASHI /* Zero if this pattern cannot match the empty string, one else. 443*820c1a8dSHiroo HAYASHI Well, in truth it's used only in 're_search_2', to see whether or 444*820c1a8dSHiroo HAYASHI not we should use the fastmap, so we don't set this absolutely 445*820c1a8dSHiroo HAYASHI perfectly; see 're_compile_fastmap' (the "duplicate" case). */ 446*820c1a8dSHiroo HAYASHI unsigned __REPB_PREFIX(can_be_null) : 1; 447*820c1a8dSHiroo HAYASHI 448*820c1a8dSHiroo HAYASHI /* If REGS_UNALLOCATED, allocate space in the 'regs' structure 449*820c1a8dSHiroo HAYASHI for 'max (RE_NREGS, re_nsub + 1)' groups. 450*820c1a8dSHiroo HAYASHI If REGS_REALLOCATE, reallocate space if necessary. 451*820c1a8dSHiroo HAYASHI If REGS_FIXED, use what's there. */ 452*820c1a8dSHiroo HAYASHI #ifdef __USE_GNU 453*820c1a8dSHiroo HAYASHI # define REGS_UNALLOCATED 0 454*820c1a8dSHiroo HAYASHI # define REGS_REALLOCATE 1 455*820c1a8dSHiroo HAYASHI # define REGS_FIXED 2 456*820c1a8dSHiroo HAYASHI #endif 457*820c1a8dSHiroo HAYASHI unsigned __REPB_PREFIX(regs_allocated) : 2; 458*820c1a8dSHiroo HAYASHI 459*820c1a8dSHiroo HAYASHI /* Set to zero when 're_compile_pattern' compiles a pattern; set to 460*820c1a8dSHiroo HAYASHI one by 're_compile_fastmap' if it updates the fastmap. */ 461*820c1a8dSHiroo HAYASHI unsigned __REPB_PREFIX(fastmap_accurate) : 1; 462*820c1a8dSHiroo HAYASHI 463*820c1a8dSHiroo HAYASHI /* If set, 're_match_2' does not return information about 464*820c1a8dSHiroo HAYASHI subexpressions. */ 465*820c1a8dSHiroo HAYASHI unsigned __REPB_PREFIX(no_sub) : 1; 466*820c1a8dSHiroo HAYASHI 467*820c1a8dSHiroo HAYASHI /* If set, a beginning-of-line anchor doesn't match at the beginning 468*820c1a8dSHiroo HAYASHI of the string. */ 469*820c1a8dSHiroo HAYASHI unsigned __REPB_PREFIX(not_bol) : 1; 470*820c1a8dSHiroo HAYASHI 471*820c1a8dSHiroo HAYASHI /* Similarly for an end-of-line anchor. */ 472*820c1a8dSHiroo HAYASHI unsigned __REPB_PREFIX(not_eol) : 1; 473*820c1a8dSHiroo HAYASHI 474*820c1a8dSHiroo HAYASHI /* If true, an anchor at a newline matches. */ 475*820c1a8dSHiroo HAYASHI unsigned __REPB_PREFIX(newline_anchor) : 1; 476*820c1a8dSHiroo HAYASHI }; 477*820c1a8dSHiroo HAYASHI 478*820c1a8dSHiroo HAYASHI typedef struct re_pattern_buffer regex_t; 479*820c1a8dSHiroo HAYASHI 480*820c1a8dSHiroo HAYASHI /* Type for byte offsets within the string. POSIX mandates this. */ 481*820c1a8dSHiroo HAYASHI #ifdef _REGEX_LARGE_OFFSETS 482*820c1a8dSHiroo HAYASHI /* POSIX 1003.1-2008 requires that regoff_t be at least as wide as 483*820c1a8dSHiroo HAYASHI ptrdiff_t and ssize_t. We don't know of any hosts where ptrdiff_t 484*820c1a8dSHiroo HAYASHI is wider than ssize_t, so ssize_t is safe. ptrdiff_t is not 485*820c1a8dSHiroo HAYASHI visible here, so use ssize_t. */ 486*820c1a8dSHiroo HAYASHI typedef ssize_t regoff_t; 487*820c1a8dSHiroo HAYASHI #else 488*820c1a8dSHiroo HAYASHI /* The traditional GNU regex implementation mishandles strings longer 489*820c1a8dSHiroo HAYASHI than INT_MAX. */ 490*820c1a8dSHiroo HAYASHI typedef int regoff_t; 491*820c1a8dSHiroo HAYASHI #endif 492*820c1a8dSHiroo HAYASHI 493*820c1a8dSHiroo HAYASHI 494*820c1a8dSHiroo HAYASHI #ifdef __USE_GNU 495*820c1a8dSHiroo HAYASHI /* This is the structure we store register match data in. See 496*820c1a8dSHiroo HAYASHI regex.texinfo for a full description of what registers match. */ 497*820c1a8dSHiroo HAYASHI struct re_registers 498*820c1a8dSHiroo HAYASHI { 499*820c1a8dSHiroo HAYASHI __re_size_t num_regs; 500*820c1a8dSHiroo HAYASHI regoff_t *start; 501*820c1a8dSHiroo HAYASHI regoff_t *end; 502*820c1a8dSHiroo HAYASHI }; 503*820c1a8dSHiroo HAYASHI 504*820c1a8dSHiroo HAYASHI 505*820c1a8dSHiroo HAYASHI /* If 'regs_allocated' is REGS_UNALLOCATED in the pattern buffer, 506*820c1a8dSHiroo HAYASHI 're_match_2' returns information about at least this many registers 507*820c1a8dSHiroo HAYASHI the first time a 'regs' structure is passed. */ 508*820c1a8dSHiroo HAYASHI # ifndef RE_NREGS 509*820c1a8dSHiroo HAYASHI # define RE_NREGS 30 510*820c1a8dSHiroo HAYASHI # endif 511*820c1a8dSHiroo HAYASHI #endif 512*820c1a8dSHiroo HAYASHI 513*820c1a8dSHiroo HAYASHI 514*820c1a8dSHiroo HAYASHI /* POSIX specification for registers. Aside from the different names than 515*820c1a8dSHiroo HAYASHI 're_registers', POSIX uses an array of structures, instead of a 516*820c1a8dSHiroo HAYASHI structure of arrays. */ 517*820c1a8dSHiroo HAYASHI typedef struct 518*820c1a8dSHiroo HAYASHI { 519*820c1a8dSHiroo HAYASHI regoff_t rm_so; /* Byte offset from string's start to substring's start. */ 520*820c1a8dSHiroo HAYASHI regoff_t rm_eo; /* Byte offset from string's start to substring's end. */ 521*820c1a8dSHiroo HAYASHI } regmatch_t; 522*820c1a8dSHiroo HAYASHI 523*820c1a8dSHiroo HAYASHI /* Declarations for routines. */ 524*820c1a8dSHiroo HAYASHI 525*820c1a8dSHiroo HAYASHI #ifdef __USE_GNU 526*820c1a8dSHiroo HAYASHI /* Sets the current default syntax to SYNTAX, and return the old syntax. 527*820c1a8dSHiroo HAYASHI You can also simply assign to the 're_syntax_options' variable. */ 528*820c1a8dSHiroo HAYASHI extern reg_syntax_t re_set_syntax (reg_syntax_t __syntax); 529*820c1a8dSHiroo HAYASHI 530*820c1a8dSHiroo HAYASHI /* Compile the regular expression PATTERN, with length LENGTH 531*820c1a8dSHiroo HAYASHI and syntax given by the global 're_syntax_options', into the buffer 532*820c1a8dSHiroo HAYASHI BUFFER. Return NULL if successful, and an error string if not. 533*820c1a8dSHiroo HAYASHI 534*820c1a8dSHiroo HAYASHI To free the allocated storage, you must call 'regfree' on BUFFER. 535*820c1a8dSHiroo HAYASHI Note that the translate table must either have been initialized by 536*820c1a8dSHiroo HAYASHI 'regcomp', with a malloc'ed value, or set to NULL before calling 537*820c1a8dSHiroo HAYASHI 'regfree'. */ 538*820c1a8dSHiroo HAYASHI extern const char *re_compile_pattern (const char *__pattern, size_t __length, 539*820c1a8dSHiroo HAYASHI struct re_pattern_buffer *__buffer); 540*820c1a8dSHiroo HAYASHI 541*820c1a8dSHiroo HAYASHI 542*820c1a8dSHiroo HAYASHI /* Compile a fastmap for the compiled pattern in BUFFER; used to 543*820c1a8dSHiroo HAYASHI accelerate searches. Return 0 if successful and -2 if was an 544*820c1a8dSHiroo HAYASHI internal error. */ 545*820c1a8dSHiroo HAYASHI extern int re_compile_fastmap (struct re_pattern_buffer *__buffer); 546*820c1a8dSHiroo HAYASHI 547*820c1a8dSHiroo HAYASHI 548*820c1a8dSHiroo HAYASHI /* Search in the string STRING (with length LENGTH) for the pattern 549*820c1a8dSHiroo HAYASHI compiled into BUFFER. Start searching at position START, for RANGE 550*820c1a8dSHiroo HAYASHI characters. Return the starting position of the match, -1 for no 551*820c1a8dSHiroo HAYASHI match, or -2 for an internal error. Also return register 552*820c1a8dSHiroo HAYASHI information in REGS (if REGS and BUFFER->no_sub are nonzero). */ 553*820c1a8dSHiroo HAYASHI extern regoff_t re_search (struct re_pattern_buffer *__buffer, 554*820c1a8dSHiroo HAYASHI const char *__String, regoff_t __length, 555*820c1a8dSHiroo HAYASHI regoff_t __start, regoff_t __range, 556*820c1a8dSHiroo HAYASHI struct re_registers *__regs); 557*820c1a8dSHiroo HAYASHI 558*820c1a8dSHiroo HAYASHI 559*820c1a8dSHiroo HAYASHI /* Like 're_search', but search in the concatenation of STRING1 and 560*820c1a8dSHiroo HAYASHI STRING2. Also, stop searching at index START + STOP. */ 561*820c1a8dSHiroo HAYASHI extern regoff_t re_search_2 (struct re_pattern_buffer *__buffer, 562*820c1a8dSHiroo HAYASHI const char *__string1, regoff_t __length1, 563*820c1a8dSHiroo HAYASHI const char *__string2, regoff_t __length2, 564*820c1a8dSHiroo HAYASHI regoff_t __start, regoff_t __range, 565*820c1a8dSHiroo HAYASHI struct re_registers *__regs, 566*820c1a8dSHiroo HAYASHI regoff_t __stop); 567*820c1a8dSHiroo HAYASHI 568*820c1a8dSHiroo HAYASHI 569*820c1a8dSHiroo HAYASHI /* Like 're_search', but return how many characters in STRING the regexp 570*820c1a8dSHiroo HAYASHI in BUFFER matched, starting at position START. */ 571*820c1a8dSHiroo HAYASHI extern regoff_t re_match (struct re_pattern_buffer *__buffer, 572*820c1a8dSHiroo HAYASHI const char *__String, regoff_t __length, 573*820c1a8dSHiroo HAYASHI regoff_t __start, struct re_registers *__regs); 574*820c1a8dSHiroo HAYASHI 575*820c1a8dSHiroo HAYASHI 576*820c1a8dSHiroo HAYASHI /* Relates to 're_match' as 're_search_2' relates to 're_search'. */ 577*820c1a8dSHiroo HAYASHI extern regoff_t re_match_2 (struct re_pattern_buffer *__buffer, 578*820c1a8dSHiroo HAYASHI const char *__string1, regoff_t __length1, 579*820c1a8dSHiroo HAYASHI const char *__string2, regoff_t __length2, 580*820c1a8dSHiroo HAYASHI regoff_t __start, struct re_registers *__regs, 581*820c1a8dSHiroo HAYASHI regoff_t __stop); 582*820c1a8dSHiroo HAYASHI 583*820c1a8dSHiroo HAYASHI 584*820c1a8dSHiroo HAYASHI /* Set REGS to hold NUM_REGS registers, storing them in STARTS and 585*820c1a8dSHiroo HAYASHI ENDS. Subsequent matches using BUFFER and REGS will use this memory 586*820c1a8dSHiroo HAYASHI for recording register information. STARTS and ENDS must be 587*820c1a8dSHiroo HAYASHI allocated with malloc, and must each be at least 'NUM_REGS * sizeof 588*820c1a8dSHiroo HAYASHI (regoff_t)' bytes long. 589*820c1a8dSHiroo HAYASHI 590*820c1a8dSHiroo HAYASHI If NUM_REGS == 0, then subsequent matches should allocate their own 591*820c1a8dSHiroo HAYASHI register data. 592*820c1a8dSHiroo HAYASHI 593*820c1a8dSHiroo HAYASHI Unless this function is called, the first search or match using 594*820c1a8dSHiroo HAYASHI BUFFER will allocate its own register data, without 595*820c1a8dSHiroo HAYASHI freeing the old data. */ 596*820c1a8dSHiroo HAYASHI extern void re_set_registers (struct re_pattern_buffer *__buffer, 597*820c1a8dSHiroo HAYASHI struct re_registers *__regs, 598*820c1a8dSHiroo HAYASHI __re_size_t __num_regs, 599*820c1a8dSHiroo HAYASHI regoff_t *__starts, regoff_t *__ends); 600*820c1a8dSHiroo HAYASHI #endif /* Use GNU */ 601*820c1a8dSHiroo HAYASHI 602*820c1a8dSHiroo HAYASHI #if defined _REGEX_RE_COMP || (defined _LIBC && defined __USE_MISC) 603*820c1a8dSHiroo HAYASHI /* 4.2 bsd compatibility. */ 604*820c1a8dSHiroo HAYASHI extern char *re_comp (const char *); 605*820c1a8dSHiroo HAYASHI extern int re_exec (const char *); 606*820c1a8dSHiroo HAYASHI #endif 607*820c1a8dSHiroo HAYASHI 608*820c1a8dSHiroo HAYASHI /* For plain 'restrict', use glibc's __restrict if defined. 609*820c1a8dSHiroo HAYASHI Otherwise, GCC 2.95 and later have "__restrict"; C99 compilers have 610*820c1a8dSHiroo HAYASHI "restrict", and "configure" may have defined "restrict". 611*820c1a8dSHiroo HAYASHI Other compilers use __restrict, __restrict__, and _Restrict, and 612*820c1a8dSHiroo HAYASHI 'configure' might #define 'restrict' to those words, so pick a 613*820c1a8dSHiroo HAYASHI different name. */ 614*820c1a8dSHiroo HAYASHI #ifndef _Restrict_ 615*820c1a8dSHiroo HAYASHI # if defined __restrict \ 616*820c1a8dSHiroo HAYASHI || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \ 617*820c1a8dSHiroo HAYASHI || __clang_major__ >= 3 618*820c1a8dSHiroo HAYASHI # define _Restrict_ __restrict 619*820c1a8dSHiroo HAYASHI # elif 199901L <= __STDC_VERSION__ || defined restrict 620*820c1a8dSHiroo HAYASHI # define _Restrict_ restrict 621*820c1a8dSHiroo HAYASHI # else 622*820c1a8dSHiroo HAYASHI # define _Restrict_ 623*820c1a8dSHiroo HAYASHI # endif 624*820c1a8dSHiroo HAYASHI #endif 625*820c1a8dSHiroo HAYASHI /* For the ISO C99 syntax 626*820c1a8dSHiroo HAYASHI array_name[restrict] 627*820c1a8dSHiroo HAYASHI use glibc's __restrict_arr if available. 628*820c1a8dSHiroo HAYASHI Otherwise, GCC 3.1 and clang support this syntax (but not in C++ mode). 629*820c1a8dSHiroo HAYASHI Other ISO C99 compilers support it as well. */ 630*820c1a8dSHiroo HAYASHI #ifndef _Restrict_arr_ 631*820c1a8dSHiroo HAYASHI # ifdef __restrict_arr 632*820c1a8dSHiroo HAYASHI # define _Restrict_arr_ __restrict_arr 633*820c1a8dSHiroo HAYASHI # elif ((199901L <= __STDC_VERSION__ \ 634*820c1a8dSHiroo HAYASHI || 3 < __GNUC__ + (1 <= __GNUC_MINOR__) \ 635*820c1a8dSHiroo HAYASHI || __clang_major__ >= 3) \ 636*820c1a8dSHiroo HAYASHI && !defined __cplusplus) 637*820c1a8dSHiroo HAYASHI # define _Restrict_arr_ _Restrict_ 638*820c1a8dSHiroo HAYASHI # else 639*820c1a8dSHiroo HAYASHI # define _Restrict_arr_ 640*820c1a8dSHiroo HAYASHI # endif 641*820c1a8dSHiroo HAYASHI #endif 642*820c1a8dSHiroo HAYASHI 643*820c1a8dSHiroo HAYASHI /* POSIX compatibility. */ 644*820c1a8dSHiroo HAYASHI extern int regcomp (regex_t *_Restrict_ __preg, 645*820c1a8dSHiroo HAYASHI const char *_Restrict_ __pattern, 646*820c1a8dSHiroo HAYASHI int __cflags); 647*820c1a8dSHiroo HAYASHI 648*820c1a8dSHiroo HAYASHI extern int regexec (const regex_t *_Restrict_ __preg, 649*820c1a8dSHiroo HAYASHI const char *_Restrict_ __String, size_t __nmatch, 650*820c1a8dSHiroo HAYASHI regmatch_t __pmatch[_Restrict_arr_], 651*820c1a8dSHiroo HAYASHI int __eflags); 652*820c1a8dSHiroo HAYASHI 653*820c1a8dSHiroo HAYASHI extern size_t regerror (int __errcode, const regex_t *_Restrict_ __preg, 654*820c1a8dSHiroo HAYASHI char *_Restrict_ __errbuf, size_t __errbuf_size); 655*820c1a8dSHiroo HAYASHI 656*820c1a8dSHiroo HAYASHI extern void regfree (regex_t *__preg); 657*820c1a8dSHiroo HAYASHI 658*820c1a8dSHiroo HAYASHI 659*820c1a8dSHiroo HAYASHI #ifdef __cplusplus 660*820c1a8dSHiroo HAYASHI } 661*820c1a8dSHiroo HAYASHI #endif /* C++ */ 662*820c1a8dSHiroo HAYASHI 663*820c1a8dSHiroo HAYASHI #endif /* regex.h */ 664