1 /* 2 * Copyright (c) 1998, 1999 Henry Spencer. All rights reserved. 3 * 4 * Development of this software was funded, in part, by Cray Research Inc., 5 * UUNET Communications Services Inc., Sun Microsystems Inc., and Scriptics 6 * Corporation, none of whom are responsible for the results. The author 7 * thanks all of them. 8 * 9 * Redistribution and use in source and binary forms -- with or without 10 * modification -- are permitted for any purpose, provided that 11 * redistributions in source form retain this entire copyright notice and 12 * indicate the origin and nature of any modifications. 13 * 14 * I'd appreciate being given credit for this package in the documentation 15 * of software which uses it, but that is not a requirement. 16 * 17 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 18 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 19 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 20 * HENRY SPENCER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 23 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 25 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 26 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * 28 * src/include/regex/regcustom.h 29 */ 30 31 /* headers if any */ 32 33 /* 34 * It's against Postgres coding conventions to include postgres.h in a 35 * header file, but we allow the violation here because the regexp library 36 * files specifically intend this file to supply application-dependent 37 * headers, and are careful to include this file before anything else. 38 */ 39 #include "postgres.h" 40 41 #include <ctype.h> 42 #include <limits.h> 43 44 /* 45 * towlower() and friends should be in <wctype.h>, but some pre-C99 systems 46 * declare them in <wchar.h>, so include that too. 47 */ 48 #include <wchar.h> 49 #ifdef HAVE_WCTYPE_H 50 #include <wctype.h> 51 #endif 52 53 #include "mb/pg_wchar.h" 54 55 #include "miscadmin.h" /* needed by rcancelrequested/rstacktoodeep */ 56 57 58 /* overrides for regguts.h definitions, if any */ 59 #define FUNCPTR(name, args) (*name) args 60 #define MALLOC(n) malloc(n) 61 #define FREE(p) free(VS(p)) 62 #define REALLOC(p,n) realloc(VS(p),n) 63 #define assert(x) Assert(x) 64 65 /* internal character type and related */ 66 typedef pg_wchar chr; /* the type itself */ 67 typedef unsigned uchr; /* unsigned type that will hold a chr */ 68 69 #define CHR(c) ((unsigned char) (c)) /* turn char literal into chr literal */ 70 #define DIGITVAL(c) ((c)-'0') /* turn chr digit into its value */ 71 #define CHRBITS 32 /* bits in a chr; must not use sizeof */ 72 #define CHR_MIN 0x00000000 /* smallest and largest chr; the value */ 73 #define CHR_MAX 0x7ffffffe /* CHR_MAX-CHR_MIN+1 must fit in an int, and 74 * CHR_MAX+1 must fit in a chr variable */ 75 76 /* 77 * Check if a chr value is in range. Ideally we'd just write this as 78 * ((c) >= CHR_MIN && (c) <= CHR_MAX) 79 * However, if chr is unsigned and CHR_MIN is zero, the first part of that 80 * is a no-op, and certain overly-nannyish compilers give warnings about it. 81 * So we leave that out here. If you want to make chr signed and/or CHR_MIN 82 * not zero, redefine this macro as above. Callers should assume that the 83 * macro may multiply evaluate its argument, even though it does not today. 84 */ 85 #define CHR_IS_IN_RANGE(c) ((c) <= CHR_MAX) 86 87 /* 88 * MAX_SIMPLE_CHR is the cutoff between "simple" and "complicated" processing 89 * in the color map logic. It should usually be chosen high enough to ensure 90 * that all common characters are <= MAX_SIMPLE_CHR. However, very large 91 * values will be counterproductive since they cause more regex setup time. 92 * Also, small values can be helpful for testing the high-color-map logic 93 * with plain old ASCII input. 94 */ 95 #define MAX_SIMPLE_CHR 0x7FF /* suitable value for Unicode */ 96 97 /* functions operating on chr */ 98 #define iscalnum(x) pg_wc_isalnum(x) 99 #define iscalpha(x) pg_wc_isalpha(x) 100 #define iscdigit(x) pg_wc_isdigit(x) 101 #define iscspace(x) pg_wc_isspace(x) 102 103 /* and pick up the standard header */ 104 #include "regex.h" 105