summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorStanislav Malyshev <stas@php.net>2000-09-11 14:50:26 +0000
committerStanislav Malyshev <stas@php.net>2000-09-11 14:50:26 +0000
commit1ccac6ed55a4d8cf93b38a1df56e640efa869da2 (patch)
tree63b37cc220b4ba2ad2459dfb62c7662efdc2a46c /ext
parent5abacc5413420c4aae53a2e8a61feaf6387da2d2 (diff)
downloadphp-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.c2
-rw-r--r--ext/standard/string.c37
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);
}
/* }}} */