1 /************************************************* 2 * Perl-Compatible Regular Expressions * 3 *************************************************/ 4 5 /* PCRE is a library of functions to support regular expressions whose syntax 6 and semantics are as close as possible to those of the Perl 5 language. 7 8 Written by Philip Hazel 9 Copyright (c) 1997-2012 University of Cambridge 10 11 ----------------------------------------------------------------------------- 12 Redistribution and use in source and binary forms, with or without 13 modification, are permitted provided that the following conditions are met: 14 15 * Redistributions of source code must retain the above copyright notice, 16 this list of conditions and the following disclaimer. 17 18 * Redistributions in binary form must reproduce the above copyright 19 notice, this list of conditions and the following disclaimer in the 20 documentation and/or other materials provided with the distribution. 21 22 * Neither the name of the University of Cambridge nor the names of its 23 contributors may be used to endorse or promote products derived from 24 this software without specific prior written permission. 25 26 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 27 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 28 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 29 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 30 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 31 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 32 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 33 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 34 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 35 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 36 POSSIBILITY OF SUCH DAMAGE. 37 ----------------------------------------------------------------------------- 38 */ 39 40 41 /* This module contains the external function pcre_config(). */ 42 43 44 #ifdef HAVE_CONFIG_H 45 #include "config.h" 46 #endif 47 48 /* Keep the original link size. */ 49 static int real_link_size = LINK_SIZE; 50 51 #include "pcre_internal.h" 52 53 54 /************************************************* 55 * Return info about what features are configured * 56 *************************************************/ 57 58 /* This function has an extensible interface so that additional items can be 59 added compatibly. 60 61 Arguments: 62 what what information is required 63 where where to put the information 64 65 Returns: 0 if data returned, negative on error 66 */ 67 68 #if defined COMPILE_PCRE8 69 PCRE_EXP_DEFN int PCRE_CALL_CONVENTION 70 pcre_config(int what, void *where) 71 #elif defined COMPILE_PCRE16 72 PCRE_EXP_DEFN int PCRE_CALL_CONVENTION 73 pcre16_config(int what, void *where) 74 #elif defined COMPILE_PCRE32 75 PCRE_EXP_DEFN int PCRE_CALL_CONVENTION 76 pcre32_config(int what, void *where) 77 #endif 78 { 79 switch (what) 80 { 81 case PCRE_CONFIG_UTF8: 82 #if defined COMPILE_PCRE16 || defined COMPILE_PCRE32 83 *((int *)where) = 0; 84 return PCRE_ERROR_BADOPTION; 85 #else 86 #if defined SUPPORT_UTF 87 *((int *)where) = 1; 88 #else 89 *((int *)where) = 0; 90 #endif 91 break; 92 #endif 93 94 case PCRE_CONFIG_UTF16: 95 #if defined COMPILE_PCRE8 || defined COMPILE_PCRE32 96 *((int *)where) = 0; 97 return PCRE_ERROR_BADOPTION; 98 #else 99 #if defined SUPPORT_UTF 100 *((int *)where) = 1; 101 #else 102 *((int *)where) = 0; 103 #endif 104 break; 105 #endif 106 107 case PCRE_CONFIG_UTF32: 108 #if defined COMPILE_PCRE8 || defined COMPILE_PCRE16 109 *((int *)where) = 0; 110 return PCRE_ERROR_BADOPTION; 111 #else 112 #if defined SUPPORT_UTF 113 *((int *)where) = 1; 114 #else 115 *((int *)where) = 0; 116 #endif 117 break; 118 #endif 119 120 case PCRE_CONFIG_UNICODE_PROPERTIES: 121 #ifdef SUPPORT_UCP 122 *((int *)where) = 1; 123 #else 124 *((int *)where) = 0; 125 #endif 126 break; 127 128 case PCRE_CONFIG_JIT: 129 #ifdef SUPPORT_JIT 130 *((int *)where) = 1; 131 #else 132 *((int *)where) = 0; 133 #endif 134 break; 135 136 case PCRE_CONFIG_JITTARGET: 137 #ifdef SUPPORT_JIT 138 *((const char **)where) = PRIV(jit_get_target)(); 139 #else 140 *((const char **)where) = NULL; 141 #endif 142 break; 143 144 case PCRE_CONFIG_NEWLINE: 145 *((int *)where) = NEWLINE; 146 break; 147 148 case PCRE_CONFIG_BSR: 149 #ifdef BSR_ANYCRLF 150 *((int *)where) = 1; 151 #else 152 *((int *)where) = 0; 153 #endif 154 break; 155 156 case PCRE_CONFIG_LINK_SIZE: 157 *((int *)where) = real_link_size; 158 break; 159 160 case PCRE_CONFIG_POSIX_MALLOC_THRESHOLD: 161 *((int *)where) = POSIX_MALLOC_THRESHOLD; 162 break; 163 164 case PCRE_CONFIG_PARENS_LIMIT: 165 *((unsigned long int *)where) = PARENS_NEST_LIMIT; 166 break; 167 168 case PCRE_CONFIG_MATCH_LIMIT: 169 *((unsigned long int *)where) = MATCH_LIMIT; 170 break; 171 172 case PCRE_CONFIG_MATCH_LIMIT_RECURSION: 173 *((unsigned long int *)where) = MATCH_LIMIT_RECURSION; 174 break; 175 176 case PCRE_CONFIG_STACKRECURSE: 177 #ifdef NO_RECURSE 178 *((int *)where) = 0; 179 #else 180 *((int *)where) = 1; 181 #endif 182 break; 183 184 default: return PCRE_ERROR_BADOPTION; 185 } 186 187 return 0; 188 } 189 190 /* End of pcre_config.c */ 191