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 - mbstring/oniguruma - regerror.c
Test: PHP Code Coverage
Date: 2009-11-19 Instrumented lines: 133
Code covered: 0.0 % Executed lines: 0
Legend: not executed executed

       1                 : /**********************************************************************
       2                 :   regerror.c -  Oniguruma (regular expression library)
       3                 : **********************************************************************/
       4                 : /*-
       5                 :  * Copyright (c) 2002-2009  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
       6                 :  * All rights reserved.
       7                 :  *
       8                 :  * Redistribution and use in source and binary forms, with or without
       9                 :  * modification, are permitted provided that the following conditions
      10                 :  * are met:
      11                 :  * 1. Redistributions of source code must retain the above copyright
      12                 :  *    notice, this list of conditions and the following disclaimer.
      13                 :  * 2. Redistributions in binary form must reproduce the above copyright
      14                 :  *    notice, this list of conditions and the following disclaimer in the
      15                 :  *    documentation and/or other materials provided with the distribution.
      16                 :  *
      17                 :  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
      18                 :  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
      19                 :  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
      20                 :  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
      21                 :  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
      22                 :  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
      23                 :  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
      24                 :  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
      25                 :  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
      26                 :  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
      27                 :  * SUCH DAMAGE.
      28                 :  */
      29                 : 
      30                 : #include "regint.h"
      31                 : #include <stdio.h> /* for vsnprintf() */
      32                 : 
      33                 : #ifdef HAVE_STDARG_PROTOTYPES
      34                 : #include <stdarg.h>
      35                 : #define va_init_list(a,b) va_start(a,b)
      36                 : #else
      37                 : #include <varargs.h>
      38                 : #define va_init_list(a,b) va_start(a)
      39                 : #endif
      40                 : 
      41                 : extern UChar*
      42                 : onig_error_code_to_format(int code)
      43               0 : {
      44                 :   char *p;
      45                 : 
      46               0 :   if (code >= 0) return (UChar* )0;
      47                 : 
      48               0 :   switch (code) {
      49                 :   case ONIG_MISMATCH:
      50               0 :     p = "mismatch"; break;
      51                 :   case ONIG_NO_SUPPORT_CONFIG:
      52               0 :     p = "no support in this configuration"; break;
      53                 :   case ONIGERR_MEMORY:
      54               0 :     p = "fail to memory allocation"; break;
      55                 :   case ONIGERR_MATCH_STACK_LIMIT_OVER:
      56               0 :     p = "match-stack limit over"; break;
      57                 :   case ONIGERR_TYPE_BUG:
      58               0 :     p = "undefined type (bug)"; break;
      59                 :   case ONIGERR_PARSER_BUG:
      60               0 :     p = "internal parser error (bug)"; break;
      61                 :   case ONIGERR_STACK_BUG:
      62               0 :     p = "stack error (bug)"; break;
      63                 :   case ONIGERR_UNDEFINED_BYTECODE:
      64               0 :     p = "undefined bytecode (bug)"; break;
      65                 :   case ONIGERR_UNEXPECTED_BYTECODE:
      66               0 :     p = "unexpected bytecode (bug)"; break;
      67                 :   case ONIGERR_DEFAULT_ENCODING_IS_NOT_SETTED:
      68               0 :     p = "default multibyte-encoding is not setted"; break;
      69                 :   case ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR:
      70               0 :     p = "can't convert to wide-char on specified multibyte-encoding"; break;
      71                 :   case ONIGERR_INVALID_ARGUMENT:
      72               0 :     p = "invalid argument"; break;
      73                 :   case ONIGERR_END_PATTERN_AT_LEFT_BRACE:
      74               0 :     p = "end pattern at left brace"; break;
      75                 :   case ONIGERR_END_PATTERN_AT_LEFT_BRACKET:
      76               0 :     p = "end pattern at left bracket"; break;
      77                 :   case ONIGERR_EMPTY_CHAR_CLASS:
      78               0 :     p = "empty char-class"; break;
      79                 :   case ONIGERR_PREMATURE_END_OF_CHAR_CLASS:
      80               0 :     p = "premature end of char-class"; break;
      81                 :   case ONIGERR_END_PATTERN_AT_ESCAPE:
      82               0 :     p = "end pattern at escape"; break;
      83                 :   case ONIGERR_END_PATTERN_AT_META:
      84               0 :     p = "end pattern at meta"; break;
      85                 :   case ONIGERR_END_PATTERN_AT_CONTROL:
      86               0 :     p = "end pattern at control"; break;
      87                 :   case ONIGERR_META_CODE_SYNTAX:
      88               0 :     p = "illegal meta-code syntax"; break;
      89                 :   case ONIGERR_CONTROL_CODE_SYNTAX:
      90               0 :     p = "illegal control-code syntax"; break;
      91                 :   case ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE:
      92               0 :     p = "char-class value at end of range"; break;
      93                 :   case ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE:
      94               0 :     p = "char-class value at start of range"; break;
      95                 :   case ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS:
      96               0 :     p = "unmatched range specifier in char-class"; break;
      97                 :   case ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED:
      98               0 :     p = "target of repeat operator is not specified"; break;
      99                 :   case ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID:
     100               0 :     p = "target of repeat operator is invalid"; break;
     101                 :   case ONIGERR_NESTED_REPEAT_OPERATOR:
     102               0 :     p = "nested repeat operator"; break;
     103                 :   case ONIGERR_UNMATCHED_CLOSE_PARENTHESIS:
     104               0 :     p = "unmatched close parenthesis"; break;
     105                 :   case ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS:
     106               0 :     p = "end pattern with unmatched parenthesis"; break;
     107                 :   case ONIGERR_END_PATTERN_IN_GROUP:
     108               0 :     p = "end pattern in group"; break;
     109                 :   case ONIGERR_UNDEFINED_GROUP_OPTION:
     110               0 :     p = "undefined group option"; break;
     111                 :   case ONIGERR_INVALID_POSIX_BRACKET_TYPE:
     112               0 :     p = "invalid POSIX bracket type"; break;
     113                 :   case ONIGERR_INVALID_LOOK_BEHIND_PATTERN:
     114               0 :     p = "invalid pattern in look-behind"; break;
     115                 :   case ONIGERR_INVALID_REPEAT_RANGE_PATTERN:
     116               0 :     p = "invalid repeat range {lower,upper}"; break;
     117                 :   case ONIGERR_TOO_BIG_NUMBER:
     118               0 :     p = "too big number"; break;
     119                 :   case ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE:
     120               0 :     p = "too big number for repeat range"; break;
     121                 :   case ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE:
     122               0 :     p = "upper is smaller than lower in repeat range"; break;
     123                 :   case ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS:
     124               0 :     p = "empty range in char class"; break;
     125                 :   case ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE:
     126               0 :     p = "mismatch multibyte code length in char-class range"; break;
     127                 :   case ONIGERR_TOO_MANY_MULTI_BYTE_RANGES:
     128               0 :     p = "too many multibyte code ranges are specified"; break;
     129                 :   case ONIGERR_TOO_SHORT_MULTI_BYTE_STRING:
     130               0 :     p = "too short multibyte code string"; break;
     131                 :   case ONIGERR_TOO_BIG_BACKREF_NUMBER:
     132               0 :     p = "too big backref number"; break;
     133                 :   case ONIGERR_INVALID_BACKREF:
     134                 : #ifdef USE_NAMED_GROUP
     135               0 :     p = "invalid backref number/name"; break;
     136                 : #else
     137                 :     p = "invalid backref number"; break;
     138                 : #endif
     139                 :   case ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED:
     140               0 :     p = "numbered backref/call is not allowed. (use name)"; break;
     141                 :   case ONIGERR_TOO_BIG_WIDE_CHAR_VALUE:
     142               0 :     p = "too big wide-char value"; break;
     143                 :   case ONIGERR_TOO_LONG_WIDE_CHAR_VALUE:
     144               0 :     p = "too long wide-char value"; break;
     145                 :   case ONIGERR_INVALID_WIDE_CHAR_VALUE:
     146               0 :     p = "invalid wide-char value"; break;
     147                 :   case ONIGERR_EMPTY_GROUP_NAME:
     148               0 :     p = "group name is empty"; break;
     149                 :   case ONIGERR_INVALID_GROUP_NAME:
     150               0 :     p = "invalid group name <%n>"; break;
     151                 :   case ONIGERR_INVALID_CHAR_IN_GROUP_NAME:
     152                 : #ifdef USE_NAMED_GROUP
     153               0 :     p = "invalid char in group name <%n>"; break;
     154                 : #else
     155                 :     p = "invalid char in group number <%n>"; break;
     156                 : #endif
     157                 :   case ONIGERR_UNDEFINED_NAME_REFERENCE:
     158               0 :     p = "undefined name <%n> reference"; break;
     159                 :   case ONIGERR_UNDEFINED_GROUP_REFERENCE:
     160               0 :     p = "undefined group <%n> reference"; break;
     161                 :   case ONIGERR_MULTIPLEX_DEFINED_NAME:
     162               0 :     p = "multiplex defined name <%n>"; break;
     163                 :   case ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL:
     164               0 :     p = "multiplex definition name <%n> call"; break;
     165                 :   case ONIGERR_NEVER_ENDING_RECURSION:
     166               0 :     p = "never ending recursion"; break;
     167                 :   case ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY:
     168               0 :     p = "group number is too big for capture history"; break;
     169                 :   case ONIGERR_INVALID_CHAR_PROPERTY_NAME:
     170               0 :     p = "invalid character property name {%n}"; break;
     171                 :   case ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION:
     172               0 :     p = "not supported encoding combination"; break;
     173                 :   case ONIGERR_INVALID_COMBINATION_OF_OPTIONS:
     174               0 :     p = "invalid combination of options"; break;
     175                 :   case ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT:
     176               0 :     p = "over thread pass limit count"; break;
     177                 : 
     178                 :   default:
     179               0 :     p = "undefined error code"; break;
     180                 :   }
     181                 : 
     182               0 :   return (UChar* )p;
     183                 : }
     184                 : 
     185                 : 
     186                 : /* for ONIG_MAX_ERROR_MESSAGE_LEN */
     187                 : #define MAX_ERROR_PAR_LEN   30
     188                 : 
     189                 : extern int
     190                 : #ifdef HAVE_STDARG_PROTOTYPES
     191                 : onig_error_code_to_str(UChar* s, int code, ...)
     192                 : #else
     193                 : onig_error_code_to_str(s, code, va_alist)
     194                 :   UChar* s;
     195                 :   int code;
     196                 :   va_dcl 
     197                 : #endif
     198               0 : {
     199                 :   UChar *p, *q;
     200                 :   OnigErrorInfo* einfo;
     201                 :   int len;
     202                 :   va_list vargs;
     203                 : 
     204               0 :   va_init_list(vargs, code);
     205                 : 
     206               0 :   switch (code) {
     207                 :   case ONIGERR_UNDEFINED_NAME_REFERENCE:
     208                 :   case ONIGERR_UNDEFINED_GROUP_REFERENCE:
     209                 :   case ONIGERR_MULTIPLEX_DEFINED_NAME:
     210                 :   case ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL:
     211                 :   case ONIGERR_INVALID_GROUP_NAME:
     212                 :   case ONIGERR_INVALID_CHAR_IN_GROUP_NAME:
     213                 :   case ONIGERR_INVALID_CHAR_PROPERTY_NAME:
     214               0 :     einfo = va_arg(vargs, OnigErrorInfo*);
     215               0 :     len = einfo->par_end - einfo->par;
     216               0 :     q = onig_error_code_to_format(code);
     217               0 :     p = s;
     218               0 :     while (*q != '\0') {
     219               0 :       if (*q == '%') {
     220               0 :         q++;
     221               0 :         if (*q == 'n') { /* '%n': name */
     222               0 :           if (len > MAX_ERROR_PAR_LEN) {
     223               0 :             xmemcpy(p, einfo->par, MAX_ERROR_PAR_LEN - 3);
     224               0 :             p += (MAX_ERROR_PAR_LEN - 3);
     225               0 :             xmemcpy(p, "...", 3);
     226               0 :             p += 3;
     227                 :           }
     228                 :           else {
     229               0 :             xmemcpy(p, einfo->par, len);
     230               0 :             p += len;
     231                 :           }
     232               0 :           q++;
     233                 :         }
     234                 :         else
     235               0 :           goto normal_char;
     236                 :       }
     237                 :       else {
     238               0 :       normal_char:
     239               0 :         *p++ = *q++;
     240                 :       }
     241                 :     }
     242               0 :     *p = '\0';
     243               0 :     len = p - s;
     244               0 :     break;
     245                 : 
     246                 :   default:
     247               0 :     q = onig_error_code_to_format(code);
     248               0 :     len = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, q);
     249               0 :     xmemcpy(s, q, len);
     250               0 :     s[len] = '\0';
     251                 :     break;
     252                 :   }
     253                 : 
     254               0 :   va_end(vargs);
     255               0 :   return len;
     256                 : }
     257                 : 
     258                 : 
     259                 : void
     260                 : #ifdef HAVE_STDARG_PROTOTYPES
     261                 : onig_snprintf_with_pattern(UChar buf[], int bufsize, OnigEncoding enc,
     262                 :                            UChar* pat, UChar* pat_end, const UChar *fmt, ...)
     263                 : #else
     264                 : onig_snprintf_with_pattern(buf, bufsize, enc, pat, pat_end, fmt, va_alist)
     265                 :     UChar buf[];
     266                 :     int bufsize;
     267                 :     OnigEncoding enc;
     268                 :     UChar* pat;
     269                 :     UChar* pat_end;
     270                 :     const UChar *fmt;
     271                 :     va_dcl
     272                 : #endif
     273               0 : {
     274                 :   int n, need, len;
     275                 :   UChar *p, *s, *bp;
     276                 :   UChar bs[6];
     277                 :   va_list args;
     278                 : 
     279               0 :   va_init_list(args, fmt);
     280               0 :   n = vsnprintf((char* )buf, bufsize, (const char* )fmt, args);
     281               0 :   if (n < 0 || n >= bufsize) {
     282               0 :         n = bufsize - 1;
     283                 :   }
     284               0 :   va_end(args);
     285                 : 
     286               0 :   need = (pat_end - pat) * 4 + 4;
     287                 : 
     288               0 :   if (n + need < bufsize) {
     289               0 :     strcat((char* )buf, ": /");
     290               0 :     s = buf + onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, buf);
     291                 : 
     292               0 :     p = pat;
     293               0 :     while (p < pat_end) {
     294               0 :       if (*p == MC_ESC(enc)) {
     295               0 :         *s++ = *p++;
     296               0 :         len = enc_len(enc, p);
     297               0 :         while (len-- > 0) *s++ = *p++;
     298                 :       }
     299               0 :       else if (*p == '/') {
     300               0 :         *s++ = (unsigned char )MC_ESC(enc);
     301               0 :         *s++ = *p++;
     302                 :       }
     303               0 :       else if (ONIGENC_IS_MBC_HEAD(enc, p)) {
     304               0 :         len = enc_len(enc, p);
     305               0 :         if (ONIGENC_MBC_MINLEN(enc) == 1) {
     306               0 :           while (len-- > 0) *s++ = *p++;
     307                 :         }
     308                 :         else { /* for UTF16 */
     309                 :           int blen;
     310                 : 
     311               0 :           while (len-- > 0) {
     312               0 :             sprintf((char* )bs, "\\%03o", *p++ & 0377);
     313               0 :             blen = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, bs);
     314               0 :             bp = bs;
     315               0 :             while (blen-- > 0) *s++ = *bp++;
     316                 :           }
     317                 :         }
     318                 :       }
     319               0 :       else if (!ONIGENC_IS_CODE_PRINT(enc, *p) &&
     320                 :                !ONIGENC_IS_CODE_SPACE(enc, *p)) {
     321               0 :         sprintf((char* )bs, "\\%03o", *p++ & 0377);
     322               0 :         len = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, bs);
     323               0 :         bp = bs;
     324               0 :         while (len-- > 0) *s++ = *bp++;
     325                 :       }
     326                 :       else {
     327               0 :         *s++ = *p++;
     328                 :       }
     329                 :     }
     330                 : 
     331               0 :     *s++ = '/';
     332               0 :     *s   = '\0';
     333                 :   }
     334               0 : }

Generated by: LTP GCOV extension version 1.5

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

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