diff options
| author | Dmitry Stogov <dmitry@php.net> | 2006-09-19 20:33:12 +0000 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@php.net> | 2006-09-19 20:33:12 +0000 |
| commit | 7d14dad02ea58db34594e91f759424c51071c5a8 (patch) | |
| tree | 95a32d750a5c9b0e626bfbe4d02ebd5f4609a53b /Zend | |
| parent | 2332e4f9fc134b2ddec3779bcaf1ea237631b7c2 (diff) | |
| download | php-git-7d14dad02ea58db34594e91f759424c51071c5a8.tar.gz | |
MFH: Fixed mess with CGI/CLI -d command line option (now it works with cgi; constants are working exactly like in php.ini; with FastCGI -d affects all requests).
Diffstat (limited to 'Zend')
| -rw-r--r-- | Zend/zend_ini.h | 1 | ||||
| -rw-r--r-- | Zend/zend_ini_parser.y | 33 | ||||
| -rw-r--r-- | Zend/zend_ini_scanner.h | 1 | ||||
| -rw-r--r-- | Zend/zend_ini_scanner.l | 11 |
4 files changed, 43 insertions, 3 deletions
diff --git a/Zend/zend_ini.h b/Zend/zend_ini.h index ca424f5ac4..d0f1321b94 100644 --- a/Zend/zend_ini.h +++ b/Zend/zend_ini.h @@ -193,6 +193,7 @@ END_EXTERN_C() typedef void (*zend_ini_parser_cb_t)(zval *arg1, zval *arg2, int callback_type, void *arg); BEGIN_EXTERN_C() ZEND_API int zend_parse_ini_file(zend_file_handle *fh, zend_bool unbuffered_errors, zend_ini_parser_cb_t ini_parser_cb, void *arg); +ZEND_API int zend_parse_ini_string(char *str, zend_bool unbuffered_errors, zend_ini_parser_cb_t ini_parser_cb, void *arg); END_EXTERN_C() #define ZEND_INI_PARSER_ENTRY 1 diff --git a/Zend/zend_ini_parser.y b/Zend/zend_ini_parser.y index 244673dba6..9346acfda7 100644 --- a/Zend/zend_ini_parser.y +++ b/Zend/zend_ini_parser.y @@ -157,10 +157,14 @@ static void ini_error(char *str) TSRMLS_FETCH(); currently_parsed_filename = zend_ini_scanner_get_filename(TSRMLS_C); - error_buf_len = 128+strlen(currently_parsed_filename); /* should be more than enough */ - error_buf = (char *) emalloc(error_buf_len); + if (currently_parsed_filename) { + error_buf_len = 128+strlen(currently_parsed_filename); /* should be more than enough */ + error_buf = (char *) emalloc(error_buf_len); - sprintf(error_buf, "Error parsing %s on line %d\n", currently_parsed_filename, zend_ini_scanner_get_lineno(TSRMLS_C)); + sprintf(error_buf, "Error parsing %s on line %d\n", currently_parsed_filename, zend_ini_scanner_get_lineno(TSRMLS_C)); + } else { + error_buf = estrdup("Invalid configuration directive\n"); + } if (CG(ini_parser_unbuffered_errors)) { #ifdef PHP_WIN32 @@ -202,6 +206,29 @@ ZEND_API int zend_parse_ini_file(zend_file_handle *fh, zend_bool unbuffered_erro } +ZEND_API int zend_parse_ini_string(char *str, zend_bool unbuffered_errors, zend_ini_parser_cb_t ini_parser_cb, void *arg) +{ + zend_ini_parser_param ini_parser_param; + TSRMLS_FETCH(); + + ini_parser_param.ini_parser_cb = ini_parser_cb; + ini_parser_param.arg = arg; + + CG(ini_parser_param) = &ini_parser_param; + if (zend_ini_prepare_string_for_scanning(str TSRMLS_CC)==FAILURE) { + return FAILURE; + } + + CG(ini_parser_unbuffered_errors) = unbuffered_errors; + + if (ini_parse(TSRMLS_C)) { + return SUCCESS; + } else { + return FAILURE; + } +} + + %} %pure_parser diff --git a/Zend/zend_ini_scanner.h b/Zend/zend_ini_scanner.h index e5cc41d583..95499f0722 100644 --- a/Zend/zend_ini_scanner.h +++ b/Zend/zend_ini_scanner.h @@ -26,6 +26,7 @@ BEGIN_EXTERN_C() int zend_ini_scanner_get_lineno(TSRMLS_D); char *zend_ini_scanner_get_filename(TSRMLS_D); int zend_ini_open_file_for_scanning(zend_file_handle *fh TSRMLS_DC); +int zend_ini_prepare_string_for_scanning(char *str TSRMLS_DC); void zend_ini_close_file(zend_file_handle *fh TSRMLS_DC); int ini_lex(zval *ini_lval TSRMLS_DC); END_EXTERN_C() diff --git a/Zend/zend_ini_scanner.l b/Zend/zend_ini_scanner.l index 2495c60360..e2740261d6 100644 --- a/Zend/zend_ini_scanner.l +++ b/Zend/zend_ini_scanner.l @@ -83,6 +83,17 @@ int zend_ini_open_file_for_scanning(zend_file_handle *fh TSRMLS_DC) } +int zend_ini_prepare_string_for_scanning(char *str TSRMLS_DC) +{ + int len = strlen(str); + + yyin = NULL; + yy_scan_buffer(str, len + 2 TSRMLS_CC); + ini_filename = NULL; + return SUCCESS; +} + + void zend_ini_close_file(zend_file_handle *fh TSRMLS_DC) { zend_stream_close(fh); |
