Use the new INI parser for parse_ini_str()

- parse_ini_str() is now thread-safe, and supported under Windows (Zeev)
This commit is contained in:
Zeev Suraski 2000-10-29 22:42:01 +00:00
parent ab3beffad7
commit 4af433d627
4 changed files with 50 additions and 37 deletions

View File

@ -2318,6 +2318,49 @@ PHP_FUNCTION(move_uploaded_file)
/* }}} */
static void php_simple_ini_parser_cb(zval *arg1, zval *arg2, int callback_type, zval *arr)
{
zval *element;
switch (callback_type) {
case ZEND_INI_PARSER_ENTRY:
ALLOC_ZVAL(element);
*element = *arg2;
zval_copy_ctor(element);
INIT_PZVAL(element);
zend_hash_update(arr->value.ht, Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, &element, sizeof(zval *), NULL);
break;
case ZEND_INI_PARSER_SECTION:
break;
}
}
/* {{{ proto void parse_ini_file(string filename)
Parse configuration file */
PHP_FUNCTION(parse_ini_file)
{
zval **filename;
zend_file_handle fh;
if (ARG_COUNT(ht)!=1 || zend_get_parameters_ex(1, &filename)==FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_string_ex(filename);
fh.handle.fp = V_FOPEN((*filename)->value.str.val, "r");
if (!fh.handle.fp) {
php_error(E_WARNING,"Cannot open '%s' for reading", (*filename)->value.str.val);
return;
}
fh.type = ZEND_HANDLE_FP;
array_init(return_value);
zend_parse_ini_file(&fh, (zend_ini_parser_cb_t) php_simple_ini_parser_cb, return_value);
}
/* }}} */
/*
* Local variables:
* tab-width: 4

View File

@ -273,36 +273,6 @@ PHP_MINIT_FUNCTION(browscap)
}
/* {{{ proto void parse_ini_file(string filename)
Parse configuration file */
PHP_FUNCTION(parse_ini_file)
{
#ifdef ZTS
php_error(E_WARNING, "parse_ini_file() is not supported in multithreaded PHP");
RETURN_FALSE;
#else
zval **filename;
if (ARG_COUNT(ht)!=1 || zend_get_parameters_ex(1, &filename)==FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_string_ex(filename);
cfgin = V_FOPEN((*filename)->value.str.val, "r");
if (!cfgin) {
php_error(E_WARNING,"Cannot open '%s' for reading", (*filename)->value.str.val);
return;
}
array_init(return_value);
init_cfg_scanner();
active_hash_table = return_value->value.ht;
parsing_mode = PARSING_MODE_STANDALONE;
currently_parsed_filename = (*filename)->value.str.val;
yyparse();
fclose(cfgin);
#endif
}
/* }}} */
int php_shutdown_config(void)
{
zend_hash_destroy(&configuration_hash);

View File

@ -2,17 +2,17 @@
+----------------------------------------------------------------------+
| PHP version 4.0 |
+----------------------------------------------------------------------+
| Copyright (c) 1997, 1998, 1999, 2000 The PHP Group |
| Copyright (c) 1997, 1998, 1999, 2000 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 2.02 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.php.net/license/2_02.txt. |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.php.net/license/2_02.txt. |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Author: Zeev Suraski <zeev@zend.com> |
| Author: Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/

View File

@ -12,7 +12,7 @@
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Zeev Suraski <zeev@zend.com> |
| Author: Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/