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 #include "postgres.h" 33 34 #include <ctype.h> 35 #include <limits.h> 36 37 /* 38 * towlower() and friends should be in <wctype.h>, but some pre-C99 systems 39 * declare them in <wchar.h>. 40 */ 41 #ifdef HAVE_WCHAR_H 42 #include <wchar.h> 43 #endif 44 #ifdef HAVE_WCTYPE_H 45 #include <wctype.h> 46 #endif 47 48 #include "mb/pg_wchar.h" 49 50 51 /* overrides for regguts.h definitions, if any */ 52 #define FUNCPTR(name, args) (*name) args 53 #define MALLOC(n) malloc(n) 54 #define FREE(p) free(VS(p)) 55 #define REALLOC(p,n) realloc(VS(p),n) 56 #define assert(x) Assert(x) 57 58 /* internal character type and related */ 59 typedef pg_wchar chr; /* the type itself */ 60 typedef unsigned uchr; /* unsigned type that will hold a chr */ 61 typedef int celt; /* type to hold chr, or NOCELT */ 62 63 #define NOCELT (-1) /* celt value which is not valid chr */ 64 #define CHR(c) ((unsigned char) (c)) /* turn char literal into chr literal */ 65 #define DIGITVAL(c) ((c)-'0') /* turn chr digit into its value */ 66 #define CHRBITS 32 /* bits in a chr; must not use sizeof */ 67 #define CHR_MIN 0x00000000 /* smallest and largest chr; the value */ 68 #define CHR_MAX 0x7ffffffe /* CHR_MAX-CHR_MIN+1 must fit in an int, and 69 * CHR_MAX+1 must fit in both chr and celt */ 70 71 /* 72 * Check if a chr value is in range. Ideally we'd just write this as 73 * ((c) >= CHR_MIN && (c) <= CHR_MAX) 74 * However, if chr is unsigned and CHR_MIN is zero, the first part of that 75 * is a no-op, and certain overly-nannyish compilers give warnings about it. 76 * So we leave that out here. If you want to make chr signed and/or CHR_MIN 77 * not zero, redefine this macro as above. Callers should assume that the 78 * macro may multiply evaluate its argument, even though it does not today. 79 */ 80 #define CHR_IS_IN_RANGE(c) ((c) <= CHR_MAX) 81 82 /* functions operating on chr */ 83 #define iscalnum(x) pg_wc_isalnum(x) 84 #define iscalpha(x) pg_wc_isalpha(x) 85 #define iscdigit(x) pg_wc_isdigit(x) 86 #define iscspace(x) pg_wc_isspace(x) 87 88 /* and pick up the standard header */ 89 #include "regex.h" 90