-static inline void _http_querystring_update(zval *qarray, zval *qstring TSRMLS_DC)
-{
- char *s = NULL;
- size_t l = 0;
-
- if (Z_TYPE_P(qarray) != IS_ARRAY) {
- convert_to_array(qarray);
- }
- if (SUCCESS == http_urlencode_hash_ex(Z_ARRVAL_P(qarray), 0, NULL, 0, &s, &l)) {
- zval_dtor(qstring);
- ZVAL_STRINGL(qstring, s, l, 0);
- } else {
- http_error(HE_WARNING, HTTP_E_QUERYSTRING, "Failed to update query string");
- }
-}
-static inline int _http_querystring_modify_ex(zval *qarray, char *key, uint keylen, zval *data TSRMLS_DC)
-{
- if (Z_TYPE_P(data) == IS_NULL) {
- if (SUCCESS != zend_hash_del(Z_ARRVAL_P(qarray), key, keylen)) {
- return 0;
- }
- } else {
- ZVAL_ADDREF(data);
- add_assoc_zval(qarray, key, data);
- }
- return 1;
-}
-static inline int _http_querystring_modify_array_ex(zval *qarray, char *key, int keylen, zval *params_entry TSRMLS_DC)
-{
- zval **qarray_entry;
-
- if ( (Z_TYPE_P(params_entry) == IS_ARRAY) &&
- (SUCCESS == zend_hash_find(Z_ARRVAL_P(qarray), key, keylen, (void**) &qarray_entry))) {
- if (http_querystring_modify_array(*qarray_entry, params_entry)) {
- return 1;
- }
- } else {
- if (http_querystring_modify_ex(qarray, key, keylen, params_entry)) {
- return 1;
- }
- }
- return 0;
-}
-static inline int _http_querystring_modify_array(zval *qarray, zval *params TSRMLS_DC)
-{
- int rv = 0;
- char *key;
- uint keylen;
- ulong idx;
- HashPosition pos;
- zval **params_entry;
-
- FOREACH_KEYLENVAL(pos, params, key, keylen, idx, params_entry) {
- if (key) {
- if (http_querystring_modify_array_ex(qarray, key, keylen, *params_entry)) {
- rv = 1;
- }
- } else {
- keylen = spprintf(&key, 0, "%lu", idx);
- if (http_querystring_modify_array_ex(qarray, key, keylen, *params_entry)) {
- rv = 1;
- }
- efree(key);
- }
- key = NULL;
- }
-
- return rv;
-}
-static inline int _http_querystring_modify(zval *qarray, zval *params TSRMLS_DC)
-{
- if (Z_TYPE_P(params) == IS_ARRAY) {
- return http_querystring_modify_array(qarray, params);
- } else if (Z_TYPE_P(params) == IS_OBJECT) {
- if (!instanceof_function(Z_OBJCE_P(params), http_querystring_object_ce TSRMLS_CC)) {
- zval temp_array;
- INIT_ZARR(temp_array, HASH_OF(params));
- return http_querystring_modify_array(qarray, &temp_array);
- }
- return http_querystring_modify_array(qarray, GET_PROP_EX(params, queryArray));
- } else {
- int rv;
- zval array;
-
- INIT_PZVAL(&array);
- array_init(&array);
-
- ZVAL_ADDREF(params);
- convert_to_string_ex(¶ms);
- sapi_module.treat_data(PARSE_STRING, estrdup(Z_STRVAL_P(params)), &array TSRMLS_CC);
- zval_ptr_dtor(¶ms);
- rv = http_querystring_modify_array(qarray, &array);
- zval_dtor(&array);
- return rv;
- }
-}