+static inline void shift_rfc5987(php_http_buffer_t *buf, zval *zvalue, const char *vss, size_t vsl, unsigned flags TSRMLS_DC)
+{
+ HashTable *ht = HASH_OF(zvalue);
+ zval **zdata, *tmp;
+ php_http_array_hashkey_t key = php_http_array_hashkey_init(0);
+
+ if (SUCCESS == zend_hash_get_current_data(ht, (void *) &zdata)
+ && HASH_KEY_NON_EXISTENT != (key.type = zend_hash_get_current_key_ex(ht, &key.str, &key.len, &key.num, key.dup, NULL))
+ ) {
+ php_http_array_hashkey_stringify(&key);
+ php_http_buffer_appendf(buf, "*%.*sutf-8'%.*s'",
+ (int) (vsl > INT_MAX ? INT_MAX : vsl), vss,
+ (int) (key.len > INT_MAX ? INT_MAX : key.len), key.str);
+ php_http_array_hashkey_stringfree(&key);
+
+ tmp = php_http_zsep(1, IS_STRING, *zdata);
+ prepare_value(flags | PHP_HTTP_PARAMS_URLENCODED, tmp TSRMLS_CC);
+ php_http_buffer_append(buf, Z_STRVAL_P(tmp), Z_STRLEN_P(tmp));
+ zval_ptr_dtor(&tmp);
+ }
+}
+
+static inline void shift_rfc5988(php_http_buffer_t *buf, char *key_str, size_t key_len, const char *ass, size_t asl, unsigned flags TSRMLS_DC)
+{
+ char *str;
+ size_t len;
+
+ if (buf->used) {
+ php_http_buffer_append(buf, ass, asl);
+ }
+
+ prepare_key(flags, key_str, key_len, &str, &len TSRMLS_CC);
+ php_http_buffer_appends(buf, "<");
+ php_http_buffer_append(buf, str, len);
+ php_http_buffer_appends(buf, ">");
+ efree(str);
+}
+
+static inline void shift_rfc5988_val(php_http_buffer_t *buf, zval *zv, const char *vss, size_t vsl, unsigned flags TSRMLS_DC)
+{
+ zval *tmp = php_http_zsep(1, IS_STRING, zv);
+
+ quote_string(tmp, 1 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);
+}
+