}
#ifdef PHP_HTTP_HAVE_ICONV
-STATUS php_http_querystring_xlate(zval *dst, zval *src, const char *ie, const char *oe TSRMLS_DC)
+ZEND_RESULT_CODE php_http_querystring_xlate(zval *dst, zval *src, const char *ie, const char *oe TSRMLS_DC)
{
HashPosition pos;
zval **entry = NULL;
}
#endif /* HAVE_ICONV */
-STATUS php_http_querystring_ctor(zval *instance, zval *params TSRMLS_DC)
+ZEND_RESULT_CODE php_http_querystring_ctor(zval *instance, zval *params TSRMLS_DC)
{
php_http_querystring_set(instance, params, 0 TSRMLS_CC);
return SUCCESS;
return ZEND_HASH_APPLY_KEEP;
}
-STATUS php_http_querystring_parse(HashTable *ht, const char *str, size_t len TSRMLS_DC)
+ZEND_RESULT_CODE php_http_querystring_parse(HashTable *ht, const char *str, size_t len TSRMLS_DC)
{
- STATUS rv = FAILURE;
+ ZEND_RESULT_CODE rv = FAILURE;
php_http_params_opts_t opts;
php_http_params_token_t psep = { ZEND_STRL("&") }, *psepp[] = { &psep, NULL };
php_http_params_token_t vsep = { ZEND_STRL("=") }, *vsepp[] = { &vsep, NULL };
return rv;
}
-STATUS php_http_querystring_update(zval *qarray, zval *params, zval *outstring TSRMLS_DC)
+ZEND_RESULT_CODE php_http_querystring_update(zval *qarray, zval *params, zval *outstring TSRMLS_DC)
{
/* enforce proper type */
if (Z_TYPE_P(qarray) != IS_ARRAY) {
return;
}
- MAKE_STD_ZVAL(param);
- array_init(param);
- Z_ADDREF_P(value);
- add_assoc_zval_ex(param, offset_str, offset_len + 1, value);
- php_http_querystring_set(getThis(), param, 0 TSRMLS_CC);
+ param = zend_read_property(php_http_querystring_class_entry, getThis(), ZEND_STRL("queryArray"), 0 TSRMLS_CC);
+
+ if (Z_TYPE_P(param) == IS_ARRAY && zend_symtable_exists(Z_ARRVAL_P(param), offset_str, offset_len + 1)) {
+ Z_ADDREF_P(value);
+ zend_symtable_update(Z_ARRVAL_P(param), offset_str, offset_len + 1, (void *) &value, sizeof(zval *), NULL);
+ Z_ADDREF_P(param);
+ } else {
+ MAKE_STD_ZVAL(param);
+ array_init(param);
+ Z_ADDREF_P(value);
+ add_assoc_zval_ex(param, offset_str, offset_len + 1, value);
+ }
+ php_http_querystring_set(getThis(), param, QS_MERGE TSRMLS_CC);
zval_ptr_dtor(¶m);
}