summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarald Radi <phanto@php.net>2003-01-19 12:01:38 +0000
committerHarald Radi <phanto@php.net>2003-01-19 12:01:38 +0000
commit697398e18ec87060f1f62a96e6e666d326eda0a9 (patch)
tree0a108c9953089aa0e2dcdfa3d3ec5cf2a824eaf3
parenta1e6457561ec2630fe2cd30df245ace6f19a1ed2 (diff)
downloadphp-git-697398e18ec87060f1f62a96e6e666d326eda0a9.tar.gz
ini patch to allow 'entry[] = value' entries
-rw-r--r--Zend/zend_ini.h1
-rw-r--r--Zend/zend_ini_parser.y9
-rw-r--r--Zend/zend_ini_scanner.l5
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;