diff options
Diffstat (limited to 'posix/regex.h')
| -rw-r--r-- | posix/regex.h | 173 | 
1 files changed, 105 insertions, 68 deletions
| diff --git a/posix/regex.h b/posix/regex.h index 807c404ec2..b2d9a62fec 100644 --- a/posix/regex.h +++ b/posix/regex.h @@ -1,6 +1,6 @@  /* Definitions for data structures and routines for the regular     expression library. -   Copyright (C) 1985,1989-93,1995-98,2000,2001,2002,2003,2005,2006 +   Copyright (C) 1985,1989-93,1995-98,2000,2001,2002,2003     Free Software Foundation, Inc.     This file is part of the GNU C Library. @@ -29,6 +29,15 @@  extern "C" {  #endif +/* POSIX says that <sys/types.h> must be included (by the caller) before +   <regex.h>.  */ + +#if !defined _POSIX_C_SOURCE && !defined _POSIX_SOURCE && defined VMS +/* VMS doesn't have `size_t' in <sys/types.h>, even though POSIX says it +   should be there.  */ +# include <stddef.h> +#endif +  /* The following two types have to be signed and unsigned integer type     wide enough to hold a value of a pointer.  For most ANSI compilers     ptrdiff_t and size_t should be likely OK.  Still size of these two @@ -198,7 +207,7 @@ extern reg_syntax_t re_syntax_options;     & ~(RE_DOT_NOT_NULL | RE_INTERVALS | RE_CONTEXT_INDEP_OPS		\         | RE_CONTEXT_INVALID_OPS )) -#define RE_SYNTAX_POSIX_AWK						\ +#define RE_SYNTAX_POSIX_AWK 						\    (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS		\     | RE_INTERVALS	    | RE_NO_GNU_OPS) @@ -337,71 +346,75 @@ typedef enum     private to the regex routines.  */  #ifndef RE_TRANSLATE_TYPE -# define RE_TRANSLATE_TYPE unsigned char * +# define RE_TRANSLATE_TYPE char *  #endif  struct re_pattern_buffer  { -  /* Space that holds the compiled pattern.  It is declared as -     `unsigned char *' because its elements are sometimes used as -     array indexes.  */ +/* [[[begin pattern_buffer]]] */ +	/* Space that holds the compiled pattern.  It is declared as +          `unsigned char *' because its elements are +           sometimes used as array indexes.  */    unsigned char *buffer; -  /* Number of bytes to which `buffer' points.  */ +	/* Number of bytes to which `buffer' points.  */    unsigned long int allocated; -  /* Number of bytes actually used in `buffer'.  */ +	/* Number of bytes actually used in `buffer'.  */    unsigned long int used; -  /* Syntax setting with which the pattern was compiled.  */ +        /* Syntax setting with which the pattern was compiled.  */    reg_syntax_t syntax; -  /* Pointer to a fastmap, if any, otherwise zero.  re_search uses the -     fastmap, if there is one, to skip over impossible starting points -     for matches.  */ +        /* Pointer to a fastmap, if any, otherwise zero.  re_search uses +           the fastmap, if there is one, to skip over impossible +           starting points for matches.  */    char *fastmap; -  /* Either a translate table to apply to all characters before -     comparing them, or zero for no translation.  The translation is -     applied to a pattern when it is compiled and to a string when it -     is matched.  */ +        /* Either a translate table to apply to all characters before +           comparing them, or zero for no translation.  The translation +           is applied to a pattern when it is compiled and to a string +           when it is matched.  */    RE_TRANSLATE_TYPE translate; -  /* Number of subexpressions found by the compiler.  */ +	/* Number of subexpressions found by the compiler.  */    size_t re_nsub; -  /* Zero if this pattern cannot match the empty string, one else. -     Well, in truth it's used only in `re_search_2', to see whether or -     not we should use the fastmap, so we don't set this absolutely -     perfectly; see `re_compile_fastmap' (the `duplicate' case).  */ +        /* Zero if this pattern cannot match the empty string, one else. +           Well, in truth it's used only in `re_search_2', to see +           whether or not we should use the fastmap, so we don't set +           this absolutely perfectly; see `re_compile_fastmap' (the +           `duplicate' case).  */    unsigned can_be_null : 1; -  /* If REGS_UNALLOCATED, allocate space in the `regs' structure -     for `max (RE_NREGS, re_nsub + 1)' groups. -     If REGS_REALLOCATE, reallocate space if necessary. -     If REGS_FIXED, use what's there.  */ +        /* If REGS_UNALLOCATED, allocate space in the `regs' structure +             for `max (RE_NREGS, re_nsub + 1)' groups. +           If REGS_REALLOCATE, reallocate space if necessary. +           If REGS_FIXED, use what's there.  */  #define REGS_UNALLOCATED 0  #define REGS_REALLOCATE 1  #define REGS_FIXED 2    unsigned regs_allocated : 2; -  /* Set to zero when `regex_compile' compiles a pattern; set to one -     by `re_compile_fastmap' if it updates the fastmap.  */ +        /* Set to zero when `regex_compile' compiles a pattern; set to one +           by `re_compile_fastmap' if it updates the fastmap.  */    unsigned fastmap_accurate : 1; -  /* If set, `re_match_2' does not return information about -     subexpressions.  */ +        /* If set, `re_match_2' does not return information about +           subexpressions.  */    unsigned no_sub : 1; -  /* If set, a beginning-of-line anchor doesn't match at the beginning -     of the string.  */ +        /* If set, a beginning-of-line anchor doesn't match at the +           beginning of the string.  */    unsigned not_bol : 1; -  /* Similarly for an end-of-line anchor.  */ +        /* Similarly for an end-of-line anchor.  */    unsigned not_eol : 1; -  /* If true, an anchor at a newline matches.  */ +        /* If true, an anchor at a newline matches.  */    unsigned newline_anchor : 1; + +/* [[[end pattern_buffer]]] */  };  typedef struct re_pattern_buffer regex_t; @@ -439,21 +452,38 @@ typedef struct  /* Declarations for routines.  */ +/* To avoid duplicating every routine declaration -- once with a +   prototype (if we are ANSI), and once without (if we aren't) -- we +   use the following macro to declare argument types.  This +   unfortunately clutters up the declarations a bit, but I think it's +   worth it.  */ + +#if __STDC__ + +# define _RE_ARGS(args) args + +#else /* not __STDC__ */ + +# define _RE_ARGS(args) () + +#endif /* not __STDC__ */ +  /* Sets the current default syntax to SYNTAX, and return the old syntax.     You can also simply assign to the `re_syntax_options' variable.  */ -extern reg_syntax_t re_set_syntax (reg_syntax_t __syntax); +extern reg_syntax_t re_set_syntax _RE_ARGS ((reg_syntax_t syntax));  /* Compile the regular expression PATTERN, with length LENGTH     and syntax given by the global `re_syntax_options', into the buffer     BUFFER.  Return NULL if successful, and an error string if not.  */ -extern const char *re_compile_pattern (const char *__pattern, size_t __length, -				       struct re_pattern_buffer *__buffer); +extern const char *re_compile_pattern +  _RE_ARGS ((const char *pattern, size_t length, +             struct re_pattern_buffer *buffer));  /* Compile a fastmap for the compiled pattern in BUFFER; used to     accelerate searches.  Return 0 if successful and -2 if was an     internal error.  */ -extern int re_compile_fastmap (struct re_pattern_buffer *__buffer); +extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer));  /* Search in the string STRING (with length LENGTH) for the pattern @@ -461,30 +491,31 @@ extern int re_compile_fastmap (struct re_pattern_buffer *__buffer);     characters.  Return the starting position of the match, -1 for no     match, or -2 for an internal error.  Also return register     information in REGS (if REGS and BUFFER->no_sub are nonzero).  */ -extern int re_search (struct re_pattern_buffer *__buffer, const char *__string, -		      int __length, int __start, int __range, -		      struct re_registers *__regs); +extern int re_search +  _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string, +            int length, int start, int range, struct re_registers *regs));  /* Like `re_search', but search in the concatenation of STRING1 and     STRING2.  Also, stop searching at index START + STOP.  */ -extern int re_search_2 (struct re_pattern_buffer *__buffer, -			const char *__string1, int __length1, -			const char *__string2, int __length2, int __start, -			int __range, struct re_registers *__regs, int __stop); +extern int re_search_2 +  _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1, +             int length1, const char *string2, int length2, +             int start, int range, struct re_registers *regs, int stop));  /* Like `re_search', but return how many characters in STRING the regexp     in BUFFER matched, starting at position START.  */ -extern int re_match (struct re_pattern_buffer *__buffer, const char *__string, -		     int __length, int __start, struct re_registers *__regs); +extern int re_match +  _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string, +             int length, int start, struct re_registers *regs));  /* Relates to `re_match' as `re_search_2' relates to `re_search'.  */ -extern int re_match_2 (struct re_pattern_buffer *__buffer, -		       const char *__string1, int __length1, -		       const char *__string2, int __length2, int __start, -		       struct re_registers *__regs, int __stop); +extern int re_match_2 +  _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1, +             int length1, const char *string2, int length2, +             int start, struct re_registers *regs, int stop));  /* Set REGS to hold NUM_REGS registers, storing them in STARTS and @@ -499,16 +530,15 @@ extern int re_match_2 (struct re_pattern_buffer *__buffer,     Unless this function is called, the first search or match using     PATTERN_BUFFER will allocate its own register data, without     freeing the old data.  */ -extern void re_set_registers (struct re_pattern_buffer *__buffer, -			      struct re_registers *__regs, -			      unsigned int __num_regs, -			      regoff_t *__starts, regoff_t *__ends); +extern void re_set_registers +  _RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs, +             unsigned num_regs, regoff_t *starts, regoff_t *ends));  #if defined _REGEX_RE_COMP || defined _LIBC  # ifndef _CRAY  /* 4.2 bsd compatibility.  */ -extern char *re_comp (const char *); -extern int re_exec (const char *); +extern char *re_comp _RE_ARGS ((const char *)); +extern int re_exec _RE_ARGS ((const char *));  # endif  #endif @@ -525,8 +555,7 @@ extern int re_exec (const char *);  #endif  /* gcc 3.1 and up support the [restrict] syntax.  */  #ifndef __restrict_arr -# if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) \ -     && !defined __GNUG__ +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)  #  define __restrict_arr __restrict  # else  #  define __restrict_arr @@ -534,19 +563,19 @@ extern int re_exec (const char *);  #endif  /* POSIX compatibility.  */ -extern int regcomp (regex_t *__restrict __preg, -		    const char *__restrict __pattern, -		    int __cflags); +extern int regcomp _RE_ARGS ((regex_t *__restrict __preg, +			      const char *__restrict __pattern, +			      int __cflags)); -extern int regexec (const regex_t *__restrict __preg, -		    const char *__restrict __string, size_t __nmatch, -		    regmatch_t __pmatch[__restrict_arr], -		    int __eflags); +extern int regexec _RE_ARGS ((const regex_t *__restrict __preg, +			      const char *__restrict __string, size_t __nmatch, +			      regmatch_t __pmatch[__restrict_arr], +			      int __eflags)); -extern size_t regerror (int __errcode, const regex_t *__restrict __preg, -			char *__restrict __errbuf, size_t __errbuf_size); +extern size_t regerror _RE_ARGS ((int __errcode, const regex_t *__preg, +				  char *__errbuf, size_t __errbuf_size)); -extern void regfree (regex_t *__preg); +extern void regfree _RE_ARGS ((regex_t *__preg));  #ifdef __cplusplus @@ -554,3 +583,11 @@ extern void regfree (regex_t *__preg);  #endif	/* C++ */  #endif /* regex.h */ + +/* +Local variables: +make-backup-files: t +version-control: t +trim-versions-without-asking: nil +End: +*/ | 
