diff options
author | Harald Radi <phanto@php.net> | 2003-01-19 12:01:38 +0000 |
---|---|---|
committer | Harald Radi <phanto@php.net> | 2003-01-19 12:01:38 +0000 |
commit | 697398e18ec87060f1f62a96e6e666d326eda0a9 (patch) | |
tree | 0a108c9953089aa0e2dcdfa3d3ec5cf2a824eaf3 | |
parent | a1e6457561ec2630fe2cd30df245ace6f19a1ed2 (diff) | |
download | php-git-697398e18ec87060f1f62a96e6e666d326eda0a9.tar.gz |
ini patch to allow 'entry[] = value' entries
-rw-r--r-- | Zend/zend_ini.h | 1 | ||||
-rw-r--r-- | Zend/zend_ini_parser.y | 9 | ||||
-rw-r--r-- | Zend/zend_ini_scanner.l | 5 |
3 files changed, 14 insertions, 1 deletions
diff --git a/Zend/zend_ini.h b/Zend/zend_ini.h index e6cd22a770..416db5a112 100644 --- a/Zend/zend_ini.h +++ b/Zend/zend_ini.h @@ -191,6 +191,7 @@ typedef void (*zend_ini_parser_cb_t)(zval *arg1, zval *arg2, int callback_type, int zend_parse_ini_file(zend_file_handle *fh, zend_bool unbuffered_errors, zend_ini_parser_cb_t ini_parser_cb, void *arg); #define ZEND_INI_PARSER_ENTRY 1 #define ZEND_INI_PARSER_SECTION 2 +#define ZEND_INI_PARSER_POP_ENTRY 3 typedef struct _zend_ini_parser_param { zend_ini_parser_cb_t ini_parser_cb; diff --git a/Zend/zend_ini_parser.y b/Zend/zend_ini_parser.y index 33b0bf005f..058d52d08a 100644 --- a/Zend/zend_ini_parser.y +++ b/Zend/zend_ini_parser.y @@ -178,6 +178,7 @@ int zend_parse_ini_file(zend_file_handle *fh, zend_bool unbuffered_errors, zend_ %pure_parser %token TC_STRING %token TC_ENCAPSULATED_STRING +%token BRACK %token SECTION %token CFG_TRUE %token CFG_FALSE @@ -200,6 +201,14 @@ statement: free($1.value.str.val); free($3.value.str.val); } + | TC_STRING BRACK '=' string_or_value { +#if DEBUG_CFG_PARSER + printf("'%s'[ ] = '%s'\n", $1.value.str.val, $4.value.str.val); +#endif + ZEND_INI_PARSER_CB(&$1, &$4, ZEND_INI_PARSER_POP_ENTRY, ZEND_INI_PARSER_ARG); + free($1.value.str.val); + free($4.value.str.val); + } | TC_STRING { ZEND_INI_PARSER_CB(&$1, NULL, ZEND_INI_PARSER_ENTRY, ZEND_INI_PARSER_ARG); free($1.value.str.val); } | SECTION { ZEND_INI_PARSER_CB(&$1, NULL, ZEND_INI_PARSER_SECTION, ZEND_INI_PARSER_ARG); free($1.value.str.val); } | '\n' diff --git a/Zend/zend_ini_scanner.l b/Zend/zend_ini_scanner.l index 65aa9e5781..16d4d30feb 100644 --- a/Zend/zend_ini_scanner.l +++ b/Zend/zend_ini_scanner.l @@ -108,6 +108,9 @@ NEWLINE ("\r"|"\n"|"\r\n") %% +<INITIAL>[ ]*[\[][ ]*[\]][ ]* { + return BRACK; +} <INITIAL>[ ]*("true"|"on"|"yes")[ ]* { ini_lval->value.str.val = zend_strndup("1", 1); @@ -166,7 +169,7 @@ NEWLINE ("\r"|"\n"|"\r\n") } -<INITIAL>[^=\n\r\t;|&~()!"]+ { +<INITIAL>[^=\n\r\t;|&~()!"\[]+ { /* STRING */ register int i; |