]> granicus.if.org Git - php/commitdiff
Add additional parameter to parse_str for saving result (thanks to
authorStanislav Malyshev <stas@php.net>
Mon, 11 Sep 2000 14:50:26 +0000 (14:50 +0000)
committerStanislav Malyshev <stas@php.net>
Mon, 11 Sep 2000 14:50:26 +0000 (14:50 +0000)
John Bafford <dshadow@zort.net>)
@ Added second parameter for parse_str to save result (John Bafford)

ext/standard/basic_functions.c
ext/standard/string.c
main/main.c
main/php_variables.c
main/php_variables.h

index 7e50c73e9e8e9f0b5a39f912ce38d3c09c7e9d69..d047a59c750783a76bd454d6ee2626de9b83b7db 100644 (file)
@@ -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)
index fc538b1f88b477bc7196d4fedd6dc0ae24a13b01..3465ef79757d9e5ffcf9a7cb0b4f30c2699da490 100644 (file)
@@ -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);
 }
 /* }}} */
 
index bbb2a9174dad50f07240cb5ffa380838d81ce5ba..7b4a8ec0c98df37c255acf6535baecbe335afc12 100644 (file)
@@ -1007,21 +1007,21 @@ static int php_hash_environment(ELS_D SLS_DC PLS_DC)
                        case 'p':
                        case 'P':
                                if (!_gpc_flags[0] && !SG(headers_sent) && SG(request_info).request_method && !strcasecmp(SG(request_info).request_method, "POST")) {
-                                       php_treat_data(PARSE_POST, NULL ELS_CC PLS_CC SLS_CC);  /* POST Data */
+                                       php_treat_data(PARSE_POST, NULL, NULL ELS_CC PLS_CC SLS_CC);    /* POST Data */
                                        _gpc_flags[0]=1;
                                }
                                break;
                        case 'c':
                        case 'C':
                                if (!_gpc_flags[1]) {
-                                       php_treat_data(PARSE_COOKIE, NULL ELS_CC PLS_CC SLS_CC);        /* Cookie Data */
+                                       php_treat_data(PARSE_COOKIE, NULL, NULL  ELS_CC PLS_CC SLS_CC); /* Cookie Data */
                                        _gpc_flags[1]=1;
                                }
                                break;
                        case 'g':
                        case 'G':
                                if (!_gpc_flags[2]) {
-                                       php_treat_data(PARSE_GET, NULL ELS_CC PLS_CC SLS_CC);   /* GET Data */
+                                       php_treat_data(PARSE_GET, NULL, NULL  ELS_CC PLS_CC SLS_CC);    /* GET Data */
                                        _gpc_flags[2]=1;
                                }
                                break;
index 65baee62480a2c1af15bc610688ad96010320742..4187d00ebafec9db42a1e323654c5a9a510207bc 100644 (file)
@@ -209,7 +209,7 @@ SAPI_POST_HANDLER_FUNC(php_std_post_handler)
 }
 
 
-void php_treat_data(int arg, char *str ELS_DC PLS_DC SLS_DC)
+void php_treat_data(int arg, char *str, zval* destArray ELS_DC PLS_DC SLS_DC)
 {
        char *res = NULL, *var, *val;
        pval *array_ptr;
@@ -236,7 +236,7 @@ void php_treat_data(int arg, char *str ELS_DC PLS_DC SLS_DC)
                        }
                        break;
                default:
-                       array_ptr=NULL;
+                       array_ptr=destArray;
                        break;
        }
 
index ad65a089cf258bb38c7f62781f8e51bd3ce49d72..f71fe2762b1d9e40ba70983b8600485a37e23668 100644 (file)
@@ -30,7 +30,7 @@
 #define PARSE_COOKIE 2
 #define PARSE_STRING 3
 
-void php_treat_data(int arg, char *str ELS_DC PLS_DC SLS_DC);
+void php_treat_data(int arg, char *str, zval* destArray ELS_DC PLS_DC SLS_DC);
 void php_import_environment_variables(ELS_D PLS_DC);
 PHPAPI void php_register_variable(char *var, char *val, pval *track_vars_array ELS_DC PLS_DC);
 PHPAPI void php_register_variable_ex(char *var, zval *val, pval *track_vars_array ELS_DC PLS_DC);