LTP GCOV extension - code coverage report
Current view: directory - Zend - zend_ini_scanner.l
Test: PHP Code Coverage
Date: 2007-04-10 Instrumented lines: 85
Code covered: 37.6 % Executed lines: 32
Legend: not executed executed

       1                 : %{
       2                 : /*
       3                 :    +----------------------------------------------------------------------+
       4                 :    | Zend Engine                                                          |
       5                 :    +----------------------------------------------------------------------+
       6                 :    | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
       7                 :    +----------------------------------------------------------------------+
       8                 :    | This source file is subject to version 2.00 of the Zend license,     |
       9                 :    | that is bundled with this package in the file LICENSE, and is        |
      10                 :    | available through the world-wide-web at the following url:           |
      11                 :    | http://www.zend.com/license/2_00.txt.                                |
      12                 :    | If you did not receive a copy of the Zend license and are unable to  |
      13                 :    | obtain it through the world-wide-web, please send a note to          |
      14                 :    | license@zend.com so we can mail you a copy immediately.              |
      15                 :    +----------------------------------------------------------------------+
      16                 :    | Author: Zeev Suraski <zeev@zend.com>                                 |
      17                 :    +----------------------------------------------------------------------+
      18                 : */
      19                 : 
      20                 : /* $Id: zend_ini_scanner.l,v 1.41.2.2.2.1 2006/09/19 20:33:12 dmitry Exp $ */
      21                 : 
      22                 : #define yyleng SCNG(yy_leng)
      23                 : #define yytext SCNG(yy_text)
      24                 : #define yytext_ptr SCNG(yy_text)
      25                 : #define yyin SCNG(yy_in)
      26                 : #define yyout SCNG(yy_out)
      27                 : #define yy_last_accepting_state SCNG(_yy_last_accepting_state)
      28                 : #define yy_last_accepting_cpos SCNG(_yy_last_accepting_cpos)
      29                 : #define yy_more_flag SCNG(_yy_more_flag)
      30                 : #define yy_more_len SCNG(_yy_more_len)
      31                 : 
      32                 : #include <errno.h>
      33                 : #include "zend.h"
      34                 : #include "zend_globals.h"
      35                 : #include <zend_ini_parser.h>
      36                 : #include "zend_ini_scanner.h"
      37                 : 
      38                 : #undef YYSTYPE
      39                 : #define YYSTYPE zval
      40                 : 
      41                 : #define YY_DECL int ini_lex(zval *ini_lval TSRMLS_DC)
      42                 : 
      43                 : /* Globals Macros */
      44                 : #define SCNG    INI_SCNG
      45                 : #ifdef ZTS
      46                 : ZEND_API ts_rsrc_id ini_scanner_globals_id;
      47                 : #else
      48                 : ZEND_API zend_scanner_globals ini_scanner_globals;
      49                 : #endif
      50                 : 
      51                 : 
      52                 : static char *ini_filename;
      53                 : 
      54                 : void init_ini_scanner(TSRMLS_D)
      55               0 : {
      56               0 :         SCNG(lineno)=1;
      57               0 : }
      58                 : 
      59                 : 
      60                 : int zend_ini_scanner_get_lineno(TSRMLS_D)
      61               0 : {
      62               0 :         return SCNG(lineno);
      63                 : }
      64                 : 
      65                 : 
      66                 : char *zend_ini_scanner_get_filename(TSRMLS_D)
      67               0 : {
      68               0 :         return ini_filename;
      69                 : }
      70                 : 
      71                 : 
      72                 : int zend_ini_open_file_for_scanning(zend_file_handle *fh TSRMLS_DC)
      73               0 : {
      74               0 :         if (FAILURE == zend_stream_fixup(fh TSRMLS_CC)) {
      75               0 :                 return FAILURE;
      76                 :         }
      77                 : 
      78               0 :         init_ini_scanner(TSRMLS_C);
      79               0 :         yyin = fh;
      80               0 :         yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE TSRMLS_CC) TSRMLS_CC);
      81               0 :         ini_filename = fh->filename;
      82               0 :         return SUCCESS;
      83                 : }
      84                 : 
      85                 : 
      86                 : int zend_ini_prepare_string_for_scanning(char *str TSRMLS_DC)
      87             219 : {
      88             219 :         int len = strlen(str);
      89                 : 
      90             219 :         yyin = NULL;
      91             219 :         yy_scan_buffer(str, len + 2 TSRMLS_CC);
      92             219 :         ini_filename = NULL;
      93             219 :         return SUCCESS;
      94                 : }
      95                 : 
      96                 : 
      97                 : void zend_ini_close_file(zend_file_handle *fh TSRMLS_DC)
      98               0 : {
      99               0 :         zend_stream_close(fh);
     100               0 : }
     101                 : 
     102                 : %}
     103                 : 
     104                 : NEWLINE ("\r"|"\n"|"\r\n")
     105                 : 
     106                 : %option noyywrap
     107                 : %option never-interactive
     108                 : 
     109                 : %%
     110                 : 
     111                 : <INITIAL>[ ]*[\[][ ]*[\]][ ]* {
     112               0 :         return BRACK;
     113                 : }
     114                 : 
     115                 : <INITIAL>[ ]*("true"|"on"|"yes")[ ]* {
     116               0 :         ini_lval->value.str.val = zend_strndup("1", 1);
     117               0 :         ini_lval->value.str.len = 1;
     118               0 :         ini_lval->type = IS_STRING;
     119               0 :         return CFG_TRUE;
     120                 : }
     121                 : 
     122                 : 
     123                 : <INITIAL>[ ]*("false"|"off"|"no"|"none")[ ]* {
     124             218 :         ini_lval->value.str.val = zend_strndup("", 0);
     125             218 :         ini_lval->value.str.len = 0;
     126             218 :         ini_lval->type = IS_STRING;
     127             218 :         return CFG_FALSE;
     128                 : }
     129                 : 
     130                 : <INITIAL>[[][^\]\n]+[\]][ ]*{NEWLINE}? {
     131                 :         /* SECTION */
     132                 : 
     133                 :         /* eat trailing ] and spaces */
     134               0 :         while (yyleng>0 && (yytext[yyleng-1]=='\n' || yytext[yyleng-1]=='\r' || yytext[yyleng-1]==']' || yytext[yyleng-1]==' ')) {
     135               0 :                 yyleng--;
     136               0 :                 yytext[yyleng]=0;
     137                 :         }
     138                 : 
     139               0 :         SCNG(lineno)++;
     140                 : 
     141                 :         /* eat leading [ */
     142               0 :         yytext++;
     143               0 :         yyleng--;
     144                 : 
     145               0 :         ini_lval->value.str.val = zend_strndup(yytext, yyleng);
     146               0 :         ini_lval->value.str.len = yyleng;
     147               0 :         ini_lval->type = IS_STRING;
     148               0 :         return SECTION;
     149                 : }
     150                 : 
     151                 : 
     152                 : <INITIAL>["][^"]*["] {
     153             221 :         char *p = yytext;
     154                 : 
     155                 :         /* ENCAPSULATED TC_STRING */
     156                 : 
     157             442 :         while ((p = strpbrk(p, "\r\n"))) {
     158               0 :                 if (*p == '\r' && *(p + 1) == '\n') {
     159               0 :                         p++;
     160                 :                 }
     161               0 :                 SCNG(lineno)++;
     162               0 :                 p++;
     163                 :         }
     164                 : 
     165                 :         /* eat trailing " */
     166             221 :         yytext[yyleng-1]=0;
     167                 : 
     168                 :         /* eat leading " */
     169             221 :         yytext++;
     170                 : 
     171             221 :         ini_lval->value.str.val = zend_strndup(yytext, yyleng - 2);
     172             221 :         ini_lval->value.str.len = yyleng - 2;
     173             221 :         ini_lval->type = IS_STRING;
     174             221 :         return TC_ENCAPSULATED_STRING;
     175                 : }
     176                 : 
     177                 : <INITIAL>[&|~$(){}!] {
     178               0 :         return yytext[0];
     179                 : }
     180                 : 
     181                 : <INITIAL>"${" {
     182               0 :         return TC_DOLLAR_CURLY;
     183                 : }
     184                 : 
     185                 : <INITIAL>"}" {
     186               0 :         ini_lval->value.lval = (long) yytext[0];
     187               0 :         return yytext[0];
     188                 : }
     189                 : 
     190                 : <INITIAL>[^=\n\r\t;|&$~(){}!"\[]+ {
     191                 :         /* STRING */
     192                 :         register int i;
     193                 : 
     194                 :         /* eat trailing whitespace */
     195            6560 :         for (i=yyleng-1; i>=0; i--) {
     196            6560 :                 if (yytext[i]==' ' || yytext[i]=='\t') {
     197               0 :                         yytext[i]=0;
     198               0 :                         yyleng--;
     199                 :                 } else {
     200                 :                         break;
     201                 :                 }
     202                 :         }
     203                 :         /* eat leading whitespace */
     204           13120 :         while (yytext[0]) {
     205            6560 :                 if (yytext[0]==' ' || yytext[0]=='\t') {
     206               0 :                         yytext++;
     207               0 :                         yyleng--;
     208                 :                 } else {
     209                 :                         break;
     210                 :                 }
     211                 :         }
     212            6560 :         if (yyleng!=0) {
     213            6560 :                 ini_lval->value.str.val = zend_strndup(yytext, yyleng);
     214            6560 :                 ini_lval->value.str.len = yyleng;
     215            6560 :                 ini_lval->type = IS_STRING;
     216            6560 :                 return TC_STRING;
     217                 :         } else {
     218                 :                 /* whitespace */
     219                 :         }
     220                 : }
     221               0 : 
     222                 : <INITIAL>[=\n] {
     223            8744 :         if (yytext[0] == '\n') {
     224            4372 :                 SCNG(lineno)++;
     225                 :         }
     226            8744 :         return yytext[0];
     227                 : }
     228                 : 
     229                 : <INITIAL>{NEWLINE} {
     230               0 :         SCNG(lineno)++;
     231               0 :         return '\n';
     232                 : }
     233                 : 
     234                 : <INITIAL>[;][^\r\n]*{NEWLINE}? {
     235                 :         /* comment */
     236               0 :         SCNG(lineno)++;
     237               0 :         return '\n';
     238                 : }
     239                 : 
     240                 : <INITIAL>[ \t] {
     241                 :         /* eat whitespace */
     242                 : }
     243               0 : 
     244                 : <INITIAL>. {
     245                 : #if DEBUG
     246                 :         php_error(E_NOTICE,"Unexpected character on line %d:  '%s' (ASCII %d)\n", yylineno, yytext, yytext[0]);
     247                 : #endif
     248                 : }
     249               0 : 
     250                 : <<EOF>> {
     251             219 :         yy_delete_buffer(YY_CURRENT_BUFFER TSRMLS_CC);
     252             219 :         yyterminate();
     253                 : }

Generated by: LTP GCOV extension version 1.5