PHP  
 PHP: Test and Code Coverage Analysis
downloads | QA | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
 

LTP GCOV extension - code coverage report
Current view: directory - pcre/pcrelib - pcre_maketables.c
Test: PHP Code Coverage
Date: 2009-11-19 Instrumented lines: 30
Code covered: 100.0 % Executed lines: 30
Legend: not executed executed

       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-2008 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_maketables(), which builds
      42                 : character tables for PCRE in the current locale. The file is compiled on its
      43                 : own as part of the PCRE library. However, it is also included in the
      44                 : compilation of dftables.c, in which case the macro DFTABLES is defined. */
      45                 : 
      46                 : 
      47                 : #ifndef DFTABLES
      48                 : #  include "config.h"
      49                 : #  include "pcre_internal.h"
      50                 : #endif
      51                 : 
      52                 : 
      53                 : /*************************************************
      54                 : *           Create PCRE character tables         *
      55                 : *************************************************/
      56                 : 
      57                 : /* This function builds a set of character tables for use by PCRE and returns
      58                 : a pointer to them. They are build using the ctype functions, and consequently
      59                 : their contents will depend upon the current locale setting. When compiled as
      60                 : part of the library, the store is obtained via pcre_malloc(), but when compiled
      61                 : inside dftables, use malloc().
      62                 : 
      63                 : Arguments:   none
      64                 : Returns:     pointer to the contiguous block of data
      65                 : */
      66                 : 
      67                 : const unsigned char *
      68                 : pcre_maketables(void)
      69               4 : {
      70                 : unsigned char *yield, *p;
      71                 : int i;
      72                 : 
      73                 : #ifndef DFTABLES
      74               4 : yield = (unsigned char*)(pcre_malloc)(tables_length);
      75                 : #else
      76                 : yield = (unsigned char*)malloc(tables_length);
      77                 : #endif
      78                 : 
      79               4 : if (yield == NULL) return NULL;
      80               4 : p = yield;
      81                 : 
      82                 : /* First comes the lower casing table */
      83                 : 
      84               4 : for (i = 0; i < 256; i++) *p++ = tolower(i);
      85                 : 
      86                 : /* Next the case-flipping table */
      87                 : 
      88               4 : for (i = 0; i < 256; i++) *p++ = islower(i)? toupper(i) : tolower(i);
      89                 : 
      90                 : /* Then the character class tables. Don't try to be clever and save effort on
      91                 : exclusive ones - in some locales things may be different. Note that the table
      92                 : for "space" includes everything "isspace" gives, including VT in the default
      93                 : locale. This makes it work for the POSIX class [:space:]. Note also that it is
      94                 : possible for a character to be alnum or alpha without being lower or upper,
      95                 : such as "male and female ordinals" (\xAA and \xBA) in the fr_FR locale (at
      96                 : least under Debian Linux's locales as of 12/2005). So we must test for alnum
      97                 : specially. */
      98                 : 
      99               4 : memset(p, 0, cbit_length);
     100            1028 : for (i = 0; i < 256; i++)
     101                 :   {
     102            1024 :   if (isdigit(i)) p[cbit_digit  + i/8] |= 1 << (i&7);
     103            1024 :   if (isupper(i)) p[cbit_upper  + i/8] |= 1 << (i&7);
     104            1024 :   if (islower(i)) p[cbit_lower  + i/8] |= 1 << (i&7);
     105            1024 :   if (isalnum(i)) p[cbit_word   + i/8] |= 1 << (i&7);
     106            1024 :   if (i == '_')   p[cbit_word   + i/8] |= 1 << (i&7);
     107            1024 :   if (isspace(i)) p[cbit_space  + i/8] |= 1 << (i&7);
     108            1024 :   if (isxdigit(i))p[cbit_xdigit + i/8] |= 1 << (i&7);
     109            1024 :   if (isgraph(i)) p[cbit_graph  + i/8] |= 1 << (i&7);
     110            1024 :   if (isprint(i)) p[cbit_print  + i/8] |= 1 << (i&7);
     111            1024 :   if (ispunct(i)) p[cbit_punct  + i/8] |= 1 << (i&7);
     112            1024 :   if (iscntrl(i)) p[cbit_cntrl  + i/8] |= 1 << (i&7);
     113                 :   }
     114               4 : p += cbit_length;
     115                 : 
     116                 : /* Finally, the character type table. In this, we exclude VT from the white
     117                 : space chars, because Perl doesn't recognize it as such for \s and for comments
     118                 : within regexes. */
     119                 : 
     120            1028 : for (i = 0; i < 256; i++)
     121                 :   {
     122            1024 :   int x = 0;
     123            1024 :   if (i != 0x0b && isspace(i)) x += ctype_space;
     124            1024 :   if (isalpha(i)) x += ctype_letter;
     125            1024 :   if (isdigit(i)) x += ctype_digit;
     126            1024 :   if (isxdigit(i)) x += ctype_xdigit;
     127            1024 :   if (isalnum(i) || i == '_') x += ctype_word;
     128                 : 
     129                 :   /* Note: strchr includes the terminating zero in the characters it considers.
     130                 :   In this instance, that is ok because we want binary zero to be flagged as a
     131                 :   meta-character, which in this sense is any character that terminates a run
     132                 :   of data characters. */
     133                 : 
     134            1024 :   if (strchr("\\*+?{^.$|()[", i) != 0) x += ctype_meta;
     135            1024 :   *p++ = x;
     136                 :   }
     137                 : 
     138               4 : return yield;
     139                 : }
     140                 : 
     141                 : /* End of pcre_maketables.c */

Generated by: LTP GCOV extension version 1.5

Generated at Thu, 19 Nov 2009 08:20:14 +0000 (5 days ago)

Copyright © 2005-2009 The PHP Group
All rights reserved.