+#define http_querystring_modify_array(q, a) _http_querystring_modify_array((q), (a) TSRMLS_CC)
+static inline int _http_querystring_modify_array(zval *qarray, zval *array TSRMLS_DC)
+{
+ zval **value;
+ HashPosition pos;
+ char *key = NULL;
+ uint keylen = 0;
+ ulong idx = 0;
+ int rv = 0;
+
+ FOREACH_KEYLENVAL(pos, array, key, keylen, idx, value) {
+ if (key) {
+ if (http_querystring_modify_ex(qarray, key, keylen, *value)) {
+ rv = 1;
+ }
+ } else {
+ keylen = spprintf(&key, 0, "%lu", idx);
+ if (http_querystring_modify_ex(qarray, key, keylen, *value)) {
+ rv = 1;
+ }
+ efree(key);
+ }
+ key = NULL;
+ }
+
+ return rv;
+}
+
+#define http_querystring_modify(q, p) _http_querystring_modify((q), (p) TSRMLS_CC)
+static inline int _http_querystring_modify(zval *qarray, zval *params TSRMLS_DC)
+{
+ if ((Z_TYPE_P(params) == IS_OBJECT) && instanceof_function(Z_OBJCE_P(params), http_querystring_object_ce TSRMLS_CC)) {
+ return http_querystring_modify_array(qarray, GET_PROP_EX(params, queryArray));
+ } else if (Z_TYPE_P(params) == IS_ARRAY) {
+ return http_querystring_modify_array(qarray, params);
+ } 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;
+ }
+}
+
+#ifndef WONKY