- prepare_key(flags, key_str, key_len, &str, &len TSRMLS_CC);
- php_http_buffer_append(buf, str, len);
- efree(str);
-
- if (Z_TYPE_PP(zvalue) != IS_BOOL) {
- tmp = php_http_ztyp(IS_STRING, *zvalue);
- prepare_value(flags, tmp TSRMLS_CC);
- php_http_buffer_append(buf, vss, vsl);
- php_http_buffer_append(buf, Z_STRVAL_P(tmp), Z_STRLEN_P(tmp));
- zval_ptr_dtor(&tmp);
- } else if (!Z_BVAL_PP(zvalue)) {
- php_http_buffer_append(buf, vss, vsl);
- php_http_buffer_appends(buf, "0");
+static void shift_param(php_http_buffer_t *buf, char *key_str, size_t key_len, zval *zvalue, const char *pss, size_t psl, const char *ass, size_t asl, const char *vss, size_t vsl, unsigned flags TSRMLS_DC)
+{
+ if (Z_TYPE_P(zvalue) == IS_ARRAY || Z_TYPE_P(zvalue) == IS_OBJECT) {
+ /* treat as arguments, unless we care for dimensions */
+ if (flags & PHP_HTTP_PARAMS_DIMENSION) {
+ php_http_buffer_t *keybuf = php_http_buffer_from_string(key_str, key_len);
+ prepare_dimension(buf, keybuf, zvalue, pss, psl, vss, vsl, flags TSRMLS_CC);
+ php_http_buffer_free(&keybuf);
+ } else {
+ shift_arg(buf, key_str, key_len, zvalue, ass, asl, vss, vsl, flags TSRMLS_CC);