Home | History | Annotate | Download | only in include
      1 /* Definitions for data structures and routines for the regular
      2    expression library, version 0.12.
      3 
      4    Copyright (C) 1985-2016 Free Software Foundation, Inc.
      5 
      6    This file is part of the GNU C Library.  Its master source is NOT part of
      7    the C library, however.  The master source lives in /gd/gnu/lib.
      8 
      9    The GNU C Library is free software; you can redistribute it and/or
     10    modify it under the terms of the GNU Lesser General Public
     11    License as published by the Free Software Foundation; either
     12    version 2.1 of the License, or (at your option) any later version.
     13 
     14    The GNU C Library is distributed in the hope that it will be useful,
     15    but WITHOUT ANY WARRANTY; without even the implied warranty of
     16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     17    Lesser General Public License for more details.
     18 
     19    You should have received a copy of the GNU Lesser General Public
     20    License along with the GNU C Library; if not, write to the Free
     21    Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
     22    02110-1301 USA.  */
     23 
     24 #ifndef _REGEX_H
     25 #define _REGEX_H 1
     26 
     27 /* Allow the use in C++ code.  */
     28 #ifdef __cplusplus
     29 extern "C" {
     30 #endif
     31 
     32 /* POSIX says that <sys/types.h> must be included (by the caller) before
     33    <regex.h>.  */
     34 
     35 #if !defined _POSIX_C_SOURCE && !defined _POSIX_SOURCE && defined VMS
     36 /* VMS doesn't have `size_t' in <sys/types.h>, even though POSIX says it
     37    should be there.  */
     38 # include <stddef.h>
     39 #endif
     40 
     41 /* The following two types have to be signed and unsigned integer type
     42    wide enough to hold a value of a pointer.  For most ANSI compilers
     43    ptrdiff_t and size_t should be likely OK.  Still size of these two
     44    types is 2 for Microsoft C.  Ugh... */
     45 typedef long int s_reg_t;
     46 typedef unsigned long int active_reg_t;
     47 
     48 /* The following bits are used to determine the regexp syntax we
     49    recognize.  The set/not-set meanings are chosen so that Emacs syntax
     50    remains the value 0.  The bits are given in alphabetical order, and
     51    the definitions shifted by one from the previous bit; thus, when we
     52    add or remove a bit, only one other definition need change.  */
     53 typedef unsigned long int reg_syntax_t;
     54 
     55 /* If this bit is not set, then \ inside a bracket expression is literal.
     56    If set, then such a \ quotes the following character.  */
     57 #define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1)
     58 
     59 /* If this bit is not set, then + and ? are operators, and \+ and \? are
     60      literals.
     61    If set, then \+ and \? are operators and + and ? are literals.  */
     62 #define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
     63 
     64 /* If this bit is set, then character classes are supported.  They are:
     65      [:alpha:], [:upper:], [:lower:],  [:digit:], [:alnum:], [:xdigit:],
     66      [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
     67    If not set, then character classes are not supported.  */
     68 #define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
     69 
     70 /* If this bit is set, then ^ and $ are always anchors (outside bracket
     71      expressions, of course).
     72    If this bit is not set, then it depends:
     73         ^  is an anchor if it is at the beginning of a regular
     74            expression or after an open-group or an alternation operator;
     75         $  is an anchor if it is at the end of a regular expression, or
     76            before a close-group or an alternation operator.
     77 
     78    This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because
     79    POSIX draft 11.2 says that * etc. in leading positions is undefined.
     80    We already implemented a previous draft which made those constructs
     81    invalid, though, so we haven't changed the code back.  */
     82 #define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
     83 
     84 /* If this bit is set, then special characters are always special
     85      regardless of where they are in the pattern.
     86    If this bit is not set, then special characters are special only in
     87      some contexts; otherwise they are ordinary.  Specifically,
     88      * + ? and intervals are only special when not after the beginning,
     89      open-group, or alternation operator.  */
     90 #define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
     91 
     92 /* If this bit is set, then *, +, ?, and { cannot be first in an re or
     93      immediately after an alternation or begin-group operator.  */
     94 #define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
     95 
     96 /* If this bit is set, then . matches newline.
     97    If not set, then it doesn't.  */
     98 #define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
     99 
    100 /* If this bit is set, then . doesn't match NUL.
    101    If not set, then it does.  */
    102 #define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
    103 
    104 /* If this bit is set, nonmatching lists [^...] do not match newline.
    105    If not set, they do.  */
    106 #define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
    107 
    108 /* If this bit is set, either \{...\} or {...} defines an
    109      interval, depending on RE_NO_BK_BRACES.
    110    If not set, \{, \}, {, and } are literals.  */
    111 #define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
    112 
    113 /* If this bit is set, +, ? and | aren't recognized as operators.
    114    If not set, they are.  */
    115 #define RE_LIMITED_OPS (RE_INTERVALS << 1)
    116 
    117 /* If this bit is set, newline is an alternation operator.
    118    If not set, newline is literal.  */
    119 #define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
    120 
    121 /* If this bit is set, then `{...}' defines an interval, and \{ and \}
    122      are literals.
    123   If not set, then `\{...\}' defines an interval.  */
    124 #define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
    125 
    126 /* If this bit is set, (...) defines a group, and \( and \) are literals.
    127    If not set, \(...\) defines a group, and ( and ) are literals.  */
    128 #define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
    129 
    130 /* If this bit is set, then \<digit> matches <digit>.
    131    If not set, then \<digit> is a back-reference.  */
    132 #define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
    133 
    134 /* If this bit is set, then | is an alternation operator, and \| is literal.
    135    If not set, then \| is an alternation operator, and | is literal.  */
    136 #define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
    137 
    138 /* If this bit is set, then an ending range point collating higher
    139      than the starting range point, as in [z-a], is invalid.
    140    If not set, then when ending range point collates higher than the
    141      starting range point, the range is ignored.  */
    142 #define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
    143 
    144 /* If this bit is set, then an unmatched ) is ordinary.
    145    If not set, then an unmatched ) is invalid.  */
    146 #define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1)
    147 
    148 /* If this bit is set, succeed as soon as we match the whole pattern,
    149    without further backtracking.  */
    150 #define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1)
    151 
    152 /* If this bit is set, do not process the GNU regex operators.
    153    If not set, then the GNU regex operators are recognized. */
    154 #define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1)
    155 
    156 /* If this bit is set, turn on internal regex debugging.
    157    If not set, and debugging was on, turn it off.
    158    This only works if regex.c is compiled -DDEBUG.
    159    We define this bit always, so that all that's needed to turn on
    160    debugging is to recompile regex.c; the calling code can always have
    161    this bit set, and it won't affect anything in the normal case. */
    162 #define RE_DEBUG (RE_NO_GNU_OPS << 1)
    163 
    164 /* If this bit is set, a syntactically invalid interval is treated as
    165    a string of ordinary characters.  For example, the ERE 'a{1' is
    166    treated as 'a\{1'.  */
    167 #define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1)
    168 
    169 /* This global variable defines the particular regexp syntax to use (for
    170    some interfaces).  When a regexp is compiled, the syntax used is
    171    stored in the pattern buffer, so changing this does not affect
    172    already-compiled regexps.  */
    173 extern reg_syntax_t re_syntax_options;
    174 
    175 /* Define combinations of the above bits for the standard possibilities.
    177    (The [[[ comments delimit what gets put into the Texinfo file, so
    178    don't delete them!)  */
    179 /* [[[begin syntaxes]]] */
    180 #define RE_SYNTAX_EMACS 0
    181 
    182 #define RE_SYNTAX_AWK							\
    183   (RE_BACKSLASH_ESCAPE_IN_LISTS   | RE_DOT_NOT_NULL			\
    184    | RE_NO_BK_PARENS              | RE_NO_BK_REFS			\
    185    | RE_NO_BK_VBAR                | RE_NO_EMPTY_RANGES			\
    186    | RE_DOT_NEWLINE		  | RE_CONTEXT_INDEP_ANCHORS		\
    187    | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS)
    188 
    189 #define RE_SYNTAX_GNU_AWK						\
    190   ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DEBUG)	\
    191    & ~(RE_DOT_NOT_NULL | RE_INTERVALS | RE_CONTEXT_INDEP_OPS))
    192 
    193 #define RE_SYNTAX_POSIX_AWK 						\
    194   (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS		\
    195    | RE_INTERVALS	    | RE_NO_GNU_OPS)
    196 
    197 #define RE_SYNTAX_GREP							\
    198   (RE_BK_PLUS_QM              | RE_CHAR_CLASSES				\
    199    | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS				\
    200    | RE_NEWLINE_ALT)
    201 
    202 #define RE_SYNTAX_EGREP							\
    203   (RE_CHAR_CLASSES        | RE_CONTEXT_INDEP_ANCHORS			\
    204    | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE			\
    205    | RE_NEWLINE_ALT       | RE_NO_BK_PARENS				\
    206    | RE_NO_BK_VBAR)
    207 
    208 #define RE_SYNTAX_POSIX_EGREP						\
    209   (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES			\
    210    | RE_INVALID_INTERVAL_ORD)
    211 
    212 /* P1003.2/D11.2, section 4.20.7.1, lines 5078ff.  */
    213 #define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC
    214 
    215 #define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC
    216 
    217 /* Syntax bits common to both basic and extended POSIX regex syntax.  */
    218 #define _RE_SYNTAX_POSIX_COMMON						\
    219   (RE_CHAR_CLASSES | RE_DOT_NEWLINE      | RE_DOT_NOT_NULL		\
    220    | RE_INTERVALS  | RE_NO_EMPTY_RANGES)
    221 
    222 #define RE_SYNTAX_POSIX_BASIC						\
    223   (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM)
    224 
    225 /* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes
    226    RE_LIMITED_OPS, i.e., \? \+ \| are not recognized.  Actually, this
    227    isn't minimal, since other operators, such as \`, aren't disabled.  */
    228 #define RE_SYNTAX_POSIX_MINIMAL_BASIC					\
    229   (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS)
    230 
    231 #define RE_SYNTAX_POSIX_EXTENDED					\
    232   (_RE_SYNTAX_POSIX_COMMON  | RE_CONTEXT_INDEP_ANCHORS			\
    233    | RE_CONTEXT_INDEP_OPS   | RE_NO_BK_BRACES				\
    234    | RE_NO_BK_PARENS        | RE_NO_BK_VBAR				\
    235    | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD)
    236 
    237 /* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is
    238    removed and RE_NO_BK_REFS is added.  */
    239 #define RE_SYNTAX_POSIX_MINIMAL_EXTENDED				\
    240   (_RE_SYNTAX_POSIX_COMMON  | RE_CONTEXT_INDEP_ANCHORS			\
    241    | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES				\
    242    | RE_NO_BK_PARENS        | RE_NO_BK_REFS				\
    243    | RE_NO_BK_VBAR	    | RE_UNMATCHED_RIGHT_PAREN_ORD)
    244 /* [[[end syntaxes]]] */
    245 
    246 /* Maximum number of duplicates an interval can allow.  Some systems
    248    (erroneously) define this in other header files, but we want our
    249    value, so remove any previous define.  */
    250 #ifdef RE_DUP_MAX
    251 # undef RE_DUP_MAX
    252 #endif
    253 /* If sizeof(int) == 2, then ((1 << 15) - 1) overflows.  */
    254 #define RE_DUP_MAX (0x7fff)
    255 
    256 
    257 /* POSIX `cflags' bits (i.e., information for `regcomp').  */
    258 
    259 /* If this bit is set, then use extended regular expression syntax.
    260    If not set, then use basic regular expression syntax.  */
    261 #define REG_EXTENDED 1
    262 
    263 /* If this bit is set, then ignore case when matching.
    264    If not set, then case is significant.  */
    265 #define REG_ICASE (REG_EXTENDED << 1)
    266 
    267 /* If this bit is set, then anchors do not match at newline
    268      characters in the string.
    269    If not set, then anchors do match at newlines.  */
    270 #define REG_NEWLINE (REG_ICASE << 1)
    271 
    272 /* If this bit is set, then report only success or fail in regexec.
    273    If not set, then returns differ between not matching and errors.  */
    274 #define REG_NOSUB (REG_NEWLINE << 1)
    275 
    276 
    277 /* POSIX `eflags' bits (i.e., information for regexec).  */
    278 
    279 /* If this bit is set, then the beginning-of-line operator doesn't match
    280      the beginning of the string (presumably because it's not the
    281      beginning of a line).
    282    If not set, then the beginning-of-line operator does match the
    283      beginning of the string.  */
    284 #define REG_NOTBOL 1
    285 
    286 /* Like REG_NOTBOL, except for the end-of-line.  */
    287 #define REG_NOTEOL (1 << 1)
    288 
    289 
    290 /* If any error codes are removed, changed, or added, update the
    291    `re_error_msg' table in regex.c.  */
    292 typedef enum
    293 {
    294 #ifdef _XOPEN_SOURCE
    295   REG_ENOSYS = -1,	/* This will never happen for this implementation.  */
    296 #endif
    297 
    298   REG_NOERROR = 0,	/* Success.  */
    299   REG_NOMATCH,		/* Didn't find a match (for regexec).  */
    300 
    301   /* POSIX regcomp return error codes.  (In the order listed in the
    302      standard.)  */
    303   REG_BADPAT,		/* Invalid pattern.  */
    304   REG_ECOLLATE,		/* Not implemented.  */
    305   REG_ECTYPE,		/* Invalid character class name.  */
    306   REG_EESCAPE,		/* Trailing backslash.  */
    307   REG_ESUBREG,		/* Invalid back reference.  */
    308   REG_EBRACK,		/* Unmatched left bracket.  */
    309   REG_EPAREN,		/* Parenthesis imbalance.  */
    310   REG_EBRACE,		/* Unmatched \{.  */
    311   REG_BADBR,		/* Invalid contents of \{\}.  */
    312   REG_ERANGE,		/* Invalid range end.  */
    313   REG_ESPACE,		/* Ran out of memory.  */
    314   REG_BADRPT,		/* No preceding re for repetition op.  */
    315 
    316   /* Error codes we've added.  */
    317   REG_EEND,		/* Premature end.  */
    318   REG_ESIZE,		/* Compiled pattern bigger than 2^16 bytes.  */
    319   REG_ERPAREN		/* Unmatched ) or \); not returned from regcomp.  */
    320 } reg_errcode_t;
    321 
    322 /* This data structure represents a compiled pattern.  Before calling
    324    the pattern compiler, the fields `buffer', `allocated', `fastmap',
    325    `translate', and `no_sub' can be set.  After the pattern has been
    326    compiled, the `re_nsub' field is available.  All other fields are
    327    private to the regex routines.  */
    328 
    329 #ifndef RE_TRANSLATE_TYPE
    330 # define RE_TRANSLATE_TYPE char *
    331 #endif
    332 
    333 struct re_pattern_buffer
    334 {
    335 /* [[[begin pattern_buffer]]] */
    336 	/* Space that holds the compiled pattern.  It is declared as
    337           `unsigned char *' because its elements are
    338            sometimes used as array indexes.  */
    339   unsigned char *buffer;
    340 
    341 	/* Number of bytes to which `buffer' points.  */
    342   unsigned long int allocated;
    343 
    344 	/* Number of bytes actually used in `buffer'.  */
    345   unsigned long int used;
    346 
    347         /* Syntax setting with which the pattern was compiled.  */
    348   reg_syntax_t syntax;
    349 
    350         /* Pointer to a fastmap, if any, otherwise zero.  re_search uses
    351            the fastmap, if there is one, to skip over impossible
    352            starting points for matches.  */
    353   char *fastmap;
    354 
    355         /* Either a translate table to apply to all characters before
    356            comparing them, or zero for no translation.  The translation
    357            is applied to a pattern when it is compiled and to a string
    358            when it is matched.  */
    359   RE_TRANSLATE_TYPE translate;
    360 
    361 	/* Number of subexpressions found by the compiler.  */
    362   size_t re_nsub;
    363 
    364         /* Zero if this pattern cannot match the empty string, one else.
    365            Well, in truth it's used only in `re_search_2', to see
    366            whether or not we should use the fastmap, so we don't set
    367            this absolutely perfectly; see `re_compile_fastmap' (the
    368            `duplicate' case).  */
    369   unsigned can_be_null : 1;
    370 
    371         /* If REGS_UNALLOCATED, allocate space in the `regs' structure
    372              for `max (RE_NREGS, re_nsub + 1)' groups.
    373            If REGS_REALLOCATE, reallocate space if necessary.
    374            If REGS_FIXED, use what's there.  */
    375 #define REGS_UNALLOCATED 0
    376 #define REGS_REALLOCATE 1
    377 #define REGS_FIXED 2
    378   unsigned regs_allocated : 2;
    379 
    380         /* Set to zero when `regex_compile' compiles a pattern; set to one
    381            by `re_compile_fastmap' if it updates the fastmap.  */
    382   unsigned fastmap_accurate : 1;
    383 
    384         /* If set, `re_match_2' does not return information about
    385            subexpressions.  */
    386   unsigned no_sub : 1;
    387 
    388         /* If set, a beginning-of-line anchor doesn't match at the
    389            beginning of the string.  */
    390   unsigned not_bol : 1;
    391 
    392         /* Similarly for an end-of-line anchor.  */
    393   unsigned not_eol : 1;
    394 
    395         /* If true, an anchor at a newline matches.  */
    396   unsigned newline_anchor : 1;
    397 
    398 /* [[[end pattern_buffer]]] */
    399 };
    400 
    401 typedef struct re_pattern_buffer regex_t;
    402 
    403 /* Type for byte offsets within the string.  POSIX mandates this.  */
    405 typedef int regoff_t;
    406 
    407 
    408 /* This is the structure we store register match data in.  See
    409    regex.texinfo for a full description of what registers match.  */
    410 struct re_registers
    411 {
    412   unsigned num_regs;
    413   regoff_t *start;
    414   regoff_t *end;
    415 };
    416 
    417 
    418 /* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer,
    419    `re_match_2' returns information about at least this many registers
    420    the first time a `regs' structure is passed.  */
    421 #ifndef RE_NREGS
    422 # define RE_NREGS 30
    423 #endif
    424 
    425 
    426 /* POSIX specification for registers.  Aside from the different names than
    427    `re_registers', POSIX uses an array of structures, instead of a
    428    structure of arrays.  */
    429 typedef struct
    430 {
    431   regoff_t rm_so;  /* Byte offset from string's start to substring's start.  */
    432   regoff_t rm_eo;  /* Byte offset from string's start to substring's end.  */
    433 } regmatch_t;
    434 
    435 /* Declarations for routines.  */
    437 
    438 /* To avoid duplicating every routine declaration -- once with a
    439    prototype (if we are ANSI), and once without (if we aren't) -- we
    440    use the following macro to declare argument types.  This
    441    unfortunately clutters up the declarations a bit, but I think it's
    442    worth it.  */
    443 
    444 /* Sets the current default syntax to SYNTAX, and return the old syntax.
    445    You can also simply assign to the `re_syntax_options' variable.  */
    446 extern reg_syntax_t re_set_syntax (reg_syntax_t syntax);
    447 
    448 /* Compile the regular expression PATTERN, with length LENGTH
    449    and syntax given by the global `re_syntax_options', into the buffer
    450    BUFFER.  Return NULL if successful, and an error string if not.  */
    451 extern const char *re_compile_pattern (const char *pattern, size_t length,
    452                                        struct re_pattern_buffer *buffer);
    453 
    454 
    455 /* Compile a fastmap for the compiled pattern in BUFFER; used to
    456    accelerate searches.  Return 0 if successful and -2 if was an
    457    internal error.  */
    458 extern int re_compile_fastmap (struct re_pattern_buffer *buffer);
    459 
    460 
    461 /* Search in the string STRING (with length LENGTH) for the pattern
    462    compiled into BUFFER.  Start searching at position START, for RANGE
    463    characters.  Return the starting position of the match, -1 for no
    464    match, or -2 for an internal error.  Also return register
    465    information in REGS (if REGS and BUFFER->no_sub are nonzero).  */
    466 extern int re_search (struct re_pattern_buffer *buffer, const char *string,
    467                       int length, int start, int range,
    468                       struct re_registers *regs);
    469 
    470 
    471 /* Like `re_search', but search in the concatenation of STRING1 and
    472    STRING2.  Also, stop searching at index START + STOP.  */
    473 extern int re_search_2 (struct re_pattern_buffer *buffer, const char *string1,
    474                         int length1, const char *string2, int length2,
    475                         int start, int range, struct re_registers *regs,
    476                         int stop);
    477 
    478 
    479 /* Like `re_search', but return how many characters in STRING the regexp
    480    in BUFFER matched, starting at position START.  */
    481 extern int re_match (struct re_pattern_buffer *buffer, const char *string,
    482                      int length, int start, struct re_registers *regs);
    483 
    484 
    485 /* Relates to `re_match' as `re_search_2' relates to `re_search'.  */
    486 extern int re_match_2 (struct re_pattern_buffer *buffer, const char *string1,
    487                        int length1, const char *string2, int length2,
    488                        int start, struct re_registers *regs, int stop);
    489 
    490 
    491 /* Set REGS to hold NUM_REGS registers, storing them in STARTS and
    492    ENDS.  Subsequent matches using BUFFER and REGS will use this memory
    493    for recording register information.  STARTS and ENDS must be
    494    allocated with malloc, and must each be at least `NUM_REGS * sizeof
    495    (regoff_t)' bytes long.
    496 
    497    If NUM_REGS == 0, then subsequent matches should allocate their own
    498    register data.
    499 
    500    Unless this function is called, the first search or match using
    501    PATTERN_BUFFER will allocate its own register data, without
    502    freeing the old data.  */
    503 extern void re_set_registers (struct re_pattern_buffer *buffer,
    504                               struct re_registers *regs,
    505                               unsigned num_regs, regoff_t *starts,
    506                               regoff_t *ends);
    507 
    508 #if defined _REGEX_RE_COMP || defined _LIBC
    509 # ifndef _CRAY
    510 /* 4.2 bsd compatibility.  */
    511 extern char *re_comp (const char *);
    512 extern int re_exec (const char *);
    513 # endif
    514 #endif
    515 
    516 /* GCC 2.95 and later have "__restrict"; C99 compilers have
    517    "restrict", and "configure" may have defined "restrict".  */
    518 #ifndef __restrict
    519 # if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
    520 #  if defined restrict || 199901L <= __STDC_VERSION__
    521 #   define __restrict restrict
    522 #  else
    523 #   define __restrict
    524 #  endif
    525 # endif
    526 #endif
    527 
    528 /* GCC 3.1 and later support declaring arrays as non-overlapping
    529    using the syntax array_name[restrict]  */
    530 #ifndef __restrict_arr
    531 # if ! (3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__)) || defined (__GNUG__)
    532 #  define __restrict_arr
    533 # else
    534 #  define __restrict_arr __restrict
    535 # endif
    536 #endif
    537 
    538 /* POSIX compatibility.  */
    539 extern int regcomp (regex_t *__restrict __preg,
    540                     const char *__restrict __pattern,
    541                     int __cflags);
    542 
    543 #if (__GNUC__)
    544 __extension__
    545 #endif
    546 extern int regexec (const regex_t *__restrict __preg,
    547                     const char *__restrict __string, size_t __nmatch,
    548                     regmatch_t __pmatch[__restrict_arr],
    549                     int __eflags);
    550 
    551 extern size_t regerror (int __errcode, const regex_t *__preg,
    552                         char *__errbuf, size_t __errbuf_size);
    553 
    554 extern void regfree (regex_t *__preg);
    555 
    556 
    557 #ifdef __cplusplus
    558 }
    559 #endif	/* C++ */
    560 
    561 #endif /* regex.h */
    562 
    563 /*
    565 Local variables:
    566 make-backup-files: t
    567 version-control: t
    568 trim-versions-without-asking: nil
    569 End:
    570 */
    571