- add http_parse_params()
[m6w6/ext-http] / http_functions.c
index 550ce8ff7934169059a07e28a842c63f4a094525..c7b2dbf5953940939772b0fdcd213dbad7d70230 100644 (file)
@@ -77,7 +77,7 @@ PHP_FUNCTION(http_date)
  * <pre>
  *     - HTTP_URL_REPLACE:        (default) set parts of the second url will replace the parts in the first
  *     - HTTP_URL_JOIN_PATH:      the path of the second url will be merged into the one of the first
- *     - HTTP_URL_JOIN_QUERY:     the two querystrings will be merged naivly; no replacements are done
+ *     - HTTP_URL_JOIN_QUERY:     the two querystrings will be merged recursively
  *     - HTTP_URL_STRIP_USER:     the user part will not appear in the result
  *     - HTTP_URL_STRIP_PASS:     the password part will not appear in the result
  *     - HTTP_URL_STRIP_AUTH:     neither the user nor the password part will appear in the result
@@ -180,7 +180,9 @@ PHP_FUNCTION(http_build_url)
        if (new_url) {
                php_url_free(new_url);
        }
-       php_url_free(old_url);
+       if (old_url) {
+               php_url_free(old_url);
+       }
        
        RETURN_STRINGL(url_str, url_len, 0);
 }
@@ -1115,6 +1117,27 @@ PHP_FUNCTION(http_parse_cookie)
        }
 }
 
+/* {{{ proto object http_parse_params(string param)
+ *
+ * Parse parameter list.
+ */
+PHP_FUNCTION(http_parse_params)
+{
+       char *param;
+       int param_len;
+       
+       if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &param, &param_len)) {
+               RETURN_FALSE;
+       }
+       
+       object_init(return_value);
+       if (SUCCESS != http_parse_params(param, HASH_OF(return_value))) {
+               zval_dtor(return_value);
+               RETURN_FALSE;
+       }
+}
+/* }}} */
+
 /* {{{ proto array http_get_request_headers(void)
  *
  * Get a list of incoming HTTP headers.