~ubuntu-branches/ubuntu/lucid/postgresql-8.4/lucid-security

« back to all changes in this revision

Viewing changes to src/include/regex/regex.h

  • Committer: Bazaar Package Importer
  • Author(s): Martin Pitt
  • Date: 2009-03-20 12:00:13 UTC
  • Revision ID: james.westby@ubuntu.com-20090320120013-hogj7egc5mjncc5g
Tags: upstream-8.4~0cvs20090328
ImportĀ upstreamĀ versionĀ 8.4~0cvs20090328

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef _REGEX_H_
 
2
#define _REGEX_H_                               /* never again */
 
3
/*
 
4
 * regular expressions
 
5
 *
 
6
 * Copyright (c) 1998, 1999 Henry Spencer.      All rights reserved.
 
7
 *
 
8
 * Development of this software was funded, in part, by Cray Research Inc.,
 
9
 * UUNET Communications Services Inc., Sun Microsystems Inc., and Scriptics
 
10
 * Corporation, none of whom are responsible for the results.  The author
 
11
 * thanks all of them.
 
12
 *
 
13
 * Redistribution and use in source and binary forms -- with or without
 
14
 * modification -- are permitted for any purpose, provided that
 
15
 * redistributions in source form retain this entire copyright notice and
 
16
 * indicate the origin and nature of any modifications.
 
17
 *
 
18
 * I'd appreciate being given credit for this package in the documentation
 
19
 * of software which uses it, but that is not a requirement.
 
20
 *
 
21
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
 
22
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 
23
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
 
24
 * HENRY SPENCER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 
25
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 
26
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 
27
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 
28
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 
29
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 
30
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
31
 *
 
32
 * $PostgreSQL$
 
33
 */
 
34
 
 
35
/*
 
36
 * Add your own defines, if needed, here.
 
37
 */
 
38
#include "mb/pg_wchar.h"
 
39
 
 
40
/*
 
41
 * interface types etc.
 
42
 */
 
43
 
 
44
/*
 
45
 * regoff_t has to be large enough to hold either off_t or ssize_t,
 
46
 * and must be signed; it's only a guess that long is suitable.
 
47
 */
 
48
typedef long regoff_t;
 
49
 
 
50
/*
 
51
 * other interface types
 
52
 */
 
53
 
 
54
/* the biggie, a compiled RE (or rather, a front end to same) */
 
55
typedef struct
 
56
{
 
57
        int                     re_magic;               /* magic number */
 
58
        size_t          re_nsub;                /* number of subexpressions */
 
59
        long            re_info;                /* information about RE */
 
60
#define  REG_UBACKREF            000001
 
61
#define  REG_ULOOKAHEAD          000002
 
62
#define  REG_UBOUNDS     000004
 
63
#define  REG_UBRACES     000010
 
64
#define  REG_UBSALNUM            000020
 
65
#define  REG_UPBOTCH     000040
 
66
#define  REG_UBBS                000100
 
67
#define  REG_UNONPOSIX           000200
 
68
#define  REG_UUNSPEC     000400
 
69
#define  REG_UUNPORT     001000
 
70
#define  REG_ULOCALE     002000
 
71
#define  REG_UEMPTYMATCH         004000
 
72
#define  REG_UIMPOSSIBLE         010000
 
73
#define  REG_USHORTEST           020000
 
74
        int                     re_csize;               /* sizeof(character) */
 
75
        char       *re_endp;            /* backward compatibility kludge */
 
76
        /* the rest is opaque pointers to hidden innards */
 
77
        char       *re_guts;            /* `char *' is more portable than `void *' */
 
78
        char       *re_fns;
 
79
} regex_t;
 
80
 
 
81
/* result reporting (may acquire more fields later) */
 
82
typedef struct
 
83
{
 
84
        regoff_t        rm_so;                  /* start of substring */
 
85
        regoff_t        rm_eo;                  /* end of substring */
 
86
} regmatch_t;
 
87
 
 
88
/* supplementary control and reporting */
 
89
typedef struct
 
90
{
 
91
        regmatch_t      rm_extend;              /* see REG_EXPECT */
 
92
} rm_detail_t;
 
93
 
 
94
 
 
95
 
 
96
/*
 
97
 * regex compilation flags
 
98
 */
 
99
#define REG_BASIC       000000          /* BREs (convenience) */
 
100
#define REG_EXTENDED    000001  /* EREs */
 
101
#define REG_ADVF        000002          /* advanced features in EREs */
 
102
#define REG_ADVANCED    000003  /* AREs (which are also EREs) */
 
103
#define REG_QUOTE       000004          /* no special characters, none */
 
104
#define REG_NOSPEC      REG_QUOTE       /* historical synonym */
 
105
#define REG_ICASE       000010          /* ignore case */
 
106
#define REG_NOSUB       000020          /* don't care about subexpressions */
 
107
#define REG_EXPANDED    000040  /* expanded format, white space & comments */
 
108
#define REG_NLSTOP      000100          /* \n doesn't match . or [^ ] */
 
109
#define REG_NLANCH      000200          /* ^ matches after \n, $ before */
 
110
#define REG_NEWLINE 000300              /* newlines are line terminators */
 
111
#define REG_PEND        000400          /* ugh -- backward-compatibility hack */
 
112
#define REG_EXPECT      001000          /* report details on partial/limited matches */
 
113
#define REG_BOSONLY 002000              /* temporary kludge for BOS-only matches */
 
114
#define REG_DUMP        004000          /* none of your business :-) */
 
115
#define REG_FAKE        010000          /* none of your business :-) */
 
116
#define REG_PROGRESS    020000  /* none of your business :-) */
 
117
 
 
118
 
 
119
 
 
120
/*
 
121
 * regex execution flags
 
122
 */
 
123
#define REG_NOTBOL      0001            /* BOS is not BOL */
 
124
#define REG_NOTEOL      0002            /* EOS is not EOL */
 
125
#define REG_STARTEND    0004    /* backward compatibility kludge */
 
126
#define REG_FTRACE      0010            /* none of your business */
 
127
#define REG_MTRACE      0020            /* none of your business */
 
128
#define REG_SMALL       0040            /* none of your business */
 
129
 
 
130
 
 
131
/*
 
132
 * error reporting
 
133
 * Be careful if modifying the list of error codes -- the table used by
 
134
 * regerror() is generated automatically from this file!
 
135
 */
 
136
#define REG_OKAY         0                      /* no errors detected */
 
137
#define REG_NOMATCH  1                  /* failed to match */
 
138
#define REG_BADPAT       2                      /* invalid regexp */
 
139
#define REG_ECOLLATE     3              /* invalid collating element */
 
140
#define REG_ECTYPE       4                      /* invalid character class */
 
141
#define REG_EESCAPE  5                  /* invalid escape \ sequence */
 
142
#define REG_ESUBREG  6                  /* invalid backreference number */
 
143
#define REG_EBRACK       7                      /* brackets [] not balanced */
 
144
#define REG_EPAREN       8                      /* parentheses () not balanced */
 
145
#define REG_EBRACE       9                      /* braces {} not balanced */
 
146
#define REG_BADBR       10                      /* invalid repetition count(s) */
 
147
#define REG_ERANGE      11                      /* invalid character range */
 
148
#define REG_ESPACE      12                      /* out of memory */
 
149
#define REG_BADRPT      13                      /* quantifier operand invalid */
 
150
#define REG_ASSERT      15                      /* "can't happen" -- you found a bug */
 
151
#define REG_INVARG      16                      /* invalid argument to regex function */
 
152
#define REG_MIXED       17                      /* character widths of regex and string differ */
 
153
#define REG_BADOPT      18                      /* invalid embedded option */
 
154
#define REG_ETOOBIG     19                      /* nfa has too many states */
 
155
/* two specials for debugging and testing */
 
156
#define REG_ATOI        101                     /* convert error-code name to number */
 
157
#define REG_ITOA        102                     /* convert error-code number to name */
 
158
 
 
159
 
 
160
 
 
161
/*
 
162
 * the prototypes for exported functions
 
163
 */
 
164
extern int      pg_regcomp(regex_t *, const pg_wchar *, size_t, int);
 
165
extern int      pg_regexec(regex_t *, const pg_wchar *, size_t, size_t, rm_detail_t *, size_t, regmatch_t[], int);
 
166
extern void pg_regfree(regex_t *);
 
167
extern size_t pg_regerror(int, const regex_t *, char *, size_t);
 
168
 
 
169
/*
 
170
 * guc configuration variables
 
171
 */
 
172
extern int regex_flavor;
 
173
 
 
174
#endif   /* _REGEX_H_ */