YugabyteDB (2.13.0.0-b42, bfc6a6643e7399ac8a0e81d06a3ee6d6571b33ab)

Coverage Report

Created: 2022-03-09 17:30

/Users/deen/code/yugabyte-db/src/postgres/src/include/regex/regex.h
Line
Count
Source (jump to first uncovered line)
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
 * src/include/regex/regex.h
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
2.25k
#define  REG_UBACKREF    000001
61
#define  REG_ULOOKAROUND   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
75
#define  REG_UEMPTYMATCH   004000
72
2.37k
#define  REG_UIMPOSSIBLE   010000
73
#define  REG_USHORTEST     020000
74
  int     re_csize;   /* sizeof(character) */
75
  char     *re_endp;    /* backward compatibility kludge */
76
  Oid     re_collation; /* Collation that defines LC_CTYPE behavior */
77
  /* the rest is opaque pointers to hidden innards */
78
  char     *re_guts;    /* `char *' is more portable than `void *' */
79
  char     *re_fns;
80
} regex_t;
81
82
/* result reporting (may acquire more fields later) */
83
typedef struct
84
{
85
  regoff_t  rm_so;      /* start of substring */
86
  regoff_t  rm_eo;      /* end of substring */
87
} regmatch_t;
88
89
/* supplementary control and reporting */
90
typedef struct
91
{
92
  regmatch_t  rm_extend;    /* see REG_EXPECT */
93
} rm_detail_t;
94
95
96
97
/*
98
 * regex compilation flags
99
 */
100
#define REG_BASIC 000000    /* BREs (convenience) */
101
200
#define REG_EXTENDED  000001  /* EREs */
102
126
#define REG_ADVF  000002    /* advanced features in EREs */
103
360
#define REG_ADVANCED  000003  /* AREs (which are also EREs) */
104
300
#define REG_QUOTE 000004    /* no special characters, none */
105
#define REG_NOSPEC  REG_QUOTE /* historical synonym */
106
777
#define REG_ICASE 000010    /* ignore case */
107
2.28k
#define REG_NOSUB 000020    /* don't care about subexpressions */
108
1.28k
#define REG_EXPANDED  000040  /* expanded format, white space & comments */
109
117
#define REG_NLSTOP  000100    /* \n doesn't match . or [^ ] */
110
168
#define REG_NLANCH  000200    /* ^ matches after \n, $ before */
111
28
#define REG_NEWLINE 000300    /* newlines are line terminators */
112
#define REG_PEND  000400    /* ugh -- backward-compatibility hack */
113
4.53k
#define REG_EXPECT  001000    /* report details on partial/limited matches */
114
100
#define REG_BOSONLY 002000    /* temporary kludge for BOS-only matches */
115
#define REG_DUMP  004000    /* none of your business :-) */
116
0
#define REG_FAKE  010000    /* none of your business :-) */
117
#define REG_PROGRESS  020000  /* none of your business :-) */
118
119
120
121
/*
122
 * regex execution flags
123
 */
124
2.23k
#define REG_NOTBOL  0001    /* BOS is not BOL */
125
1.11k
#define REG_NOTEOL  0002    /* EOS is not EOL */
126
#define REG_STARTEND  0004  /* backward compatibility kludge */
127
#define REG_FTRACE  0010    /* none of your business */
128
#define REG_MTRACE  0020    /* none of your business */
129
2.34k
#define REG_SMALL 0040    /* none of your business */
130
131
132
/*
133
 * error reporting
134
 * Be careful if modifying the list of error codes -- the table used by
135
 * regerror() is generated automatically from this file!
136
 */
137
12.4k
#define REG_OKAY   0      /* no errors detected */
138
2.16k
#define REG_NOMATCH  1      /* failed to match */
139
#define REG_BADPAT   2      /* invalid regexp */
140
#define REG_ECOLLATE   3    /* invalid collating element */
141
#define REG_ECTYPE   4      /* invalid character class */
142
#define REG_EESCAPE  5      /* invalid escape \ sequence */
143
#define REG_ESUBREG  6      /* invalid backreference number */
144
#define REG_EBRACK   7      /* brackets [] not balanced */
145
#define REG_EPAREN   8      /* parentheses () not balanced */
146
#define REG_EBRACE   9      /* braces {} not balanced */
147
#define REG_BADBR 10      /* invalid repetition count(s) */
148
#define REG_ERANGE  11      /* invalid character range */
149
0
#define REG_ESPACE  12      /* out of memory */
150
#define REG_BADRPT  13      /* quantifier operand invalid */
151
0
#define REG_ASSERT  15      /* "can't happen" -- you found a bug */
152
0
#define REG_INVARG  16      /* invalid argument to regex function */
153
0
#define REG_MIXED 17      /* character widths of regex and string differ */
154
#define REG_BADOPT  18      /* invalid embedded option */
155
0
#define REG_ETOOBIG 19      /* regular expression is too complex */
156
#define REG_ECOLORS 20      /* too many colors */
157
0
#define REG_CANCEL  21      /* operation cancelled */
158
/* two specials for debugging and testing */
159
0
#define REG_ATOI  101      /* convert error-code name to number */
160
0
#define REG_ITOA  102      /* convert error-code number to name */
161
/* non-error result codes for pg_regprefix */
162
272
#define REG_PREFIX  (-1)    /* identified a common prefix */
163
292
#define REG_EXACT (-2)    /* identified an exact match */
164
165
166
167
/*
168
 * the prototypes for exported functions
169
 */
170
171
/* regcomp.c */
172
extern int  pg_regcomp(regex_t *, const pg_wchar *, size_t, int, Oid);
173
extern int  pg_regexec(regex_t *, const pg_wchar *, size_t, size_t, rm_detail_t *, size_t, regmatch_t[], int);
174
extern int  pg_regprefix(regex_t *, pg_wchar **, size_t *);
175
extern void pg_regfree(regex_t *);
176
extern size_t pg_regerror(int, const regex_t *, char *, size_t);
177
178
/* regexp.c */
179
extern regex_t *RE_compile_and_cache(text *text_re, int cflags, Oid collation);
180
extern bool RE_compile_and_execute(text *text_re, char *dat, int dat_len,
181
             int cflags, Oid collation,
182
             int nmatch, regmatch_t *pmatch);
183
184
#endif              /* _REGEX_H_ */