diff options
author | Stanislav Malyshev <stas@php.net> | 2000-09-11 14:50:26 +0000 |
---|---|---|
committer | Stanislav Malyshev <stas@php.net> | 2000-09-11 14:50:26 +0000 |
commit | 1ccac6ed55a4d8cf93b38a1df56e640efa869da2 (patch) | |
tree | 63b37cc220b4ba2ad2459dfb62c7662efdc2a46c /ext | |
parent | 5abacc5413420c4aae53a2e8a61feaf6387da2d2 (diff) | |
download | php-git-1ccac6ed55a4d8cf93b38a1df56e640efa869da2.tar.gz |
Add additional parameter to parse_str for saving result (thanks to
John Bafford <dshadow@zort.net>)
@ Added second parameter for parse_str to save result (John Bafford)
Diffstat (limited to 'ext')
-rw-r--r-- | ext/standard/basic_functions.c | 2 | ||||
-rw-r--r-- | ext/standard/string.c | 37 |
2 files changed, 33 insertions, 6 deletions
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 7e50c73e9e..d047a59c75 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -182,7 +182,7 @@ function_entry basic_functions[] = { PHP_FE(levenshtein, NULL) PHP_FE(chr, NULL) PHP_FE(ord, NULL) - PHP_FE(parse_str, NULL) + PHP_FE(parse_str, second_arg_force_ref) PHP_FE(str_pad, NULL) PHP_FALIAS(rtrim, chop, NULL) PHP_FALIAS(strchr, strstr, NULL) diff --git a/ext/standard/string.c b/ext/standard/string.c index fc538b1f88..3465ef7975 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -775,6 +775,11 @@ PHP_FUNCTION(pathinfo) } } + if (opt == PHP_PATHINFO_DIRNAME || argc < 2) { + ret = php_basename(Z_STRVAL_PP(str), len); + add_assoc_string(tmp, "dirname", ret, 1); + } + if (argc == 2) { zval **element; zend_hash_get_current_data(Z_ARRVAL_P(tmp), (void **)&element); @@ -2397,23 +2402,45 @@ PHP_FUNCTION(setlocale) } /* }}} */ -/* {{{ proto void parse_str(string encoded_string) +/* {{{ proto void parse_str(string encoded_string, [array result]) Parses GET/POST/COOKIE data and sets global variables */ PHP_FUNCTION(parse_str) { zval **arg; + zval **arrayArg; + zval *sarg; char *res = NULL; + int argCount; + PLS_FETCH(); SLS_FETCH(); - if (zend_get_parameters_ex(1, &arg) == FAILURE) { + argCount = ARG_COUNT(ht); + if(argCount < 1 || argCount > 2 || zend_get_parameters_ex(argCount, &arg, &arrayArg) == FAILURE) { WRONG_PARAM_COUNT; } + convert_to_string_ex(arg); - if ((*arg)->value.str.val && *(*arg)->value.str.val) { - res = estrndup((*arg)->value.str.val,(*arg)->value.str.len); + sarg = *arg; + if (sarg->value.str.val && *sarg->value.str.val) { + res = estrndup(sarg->value.str.val, sarg->value.str.len); + } + + if(argCount == 1) + php_treat_data(PARSE_STRING, res, NULL ELS_CC PLS_CC SLS_CC); + else + { + if(!ParameterPassedByReference(ht, 2)){ + php_error(E_WARNING, "Array not passed by reference in call to parse_str()"); + return; + } + + /* Clear out the array that was passed in. */ + zval_dtor(*arrayArg); + array_init(*arrayArg); + + php_treat_data(PARSE_STRING, res, *arrayArg ELS_CC PLS_CC SLS_CC); } - php_treat_data(PARSE_STRING, res ELS_CC PLS_CC SLS_CC); } /* }}} */ |