Home | History | Annotate | Download | only in dist
      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