build: fix master
[m6w6/ext-http] / src / php_http_header.c
index d4f2b510b311e69f3f2bde61fd6825f97ed81748..4c9a7025684051ade431db1f730cff99083bbd11 100644 (file)
@@ -38,6 +38,18 @@ ZEND_RESULT_CODE php_http_header_parse(const char *header, size_t length, HashTa
 
 void php_http_header_to_callback(HashTable *headers, zend_bool crlf, php_http_pass_format_callback_t cb, void *cb_arg)
 {
+       php_http_arrkey_t key;
+       zval *header;
+
+       ZEND_HASH_FOREACH_KEY_VAL(headers, key.h, key.key, header)
+       {
+               if (key.key) {
+                       php_http_header_to_callback_ex(key.key->val, header, crlf, cb, cb_arg);
+               }
+       }
+       ZEND_HASH_FOREACH_END();
+/*
+<<<<<<< HEAD
        php_http_arrkey_t key;
        zval *header, *single_header;
 
@@ -73,9 +85,9 @@ void php_http_header_to_callback(HashTable *headers, zend_bool crlf, php_http_pa
                                cb(cb_arg, crlf ? "%s: %s" PHP_HTTP_CRLF : "%s: %s", key.key->val, zs->val);
                                zend_string_release(zs);
                        }
-               }
-       }
-       ZEND_HASH_FOREACH_END();
+=======
+>>>>>>> 343738ad56eb70017704fdac57cf0d74da3d0f2e
+*/
 }
 
 void php_http_header_to_string(php_http_buffer_t *str, HashTable *headers)
@@ -83,6 +95,42 @@ void php_http_header_to_string(php_http_buffer_t *str, HashTable *headers)
        php_http_header_to_callback(headers, 1, (php_http_pass_format_callback_t) php_http_buffer_appendf, str);
 }
 
+void php_http_header_to_callback_ex(const char *key, zval *val, zend_bool crlf, php_http_pass_format_callback_t cb, void *cb_arg)
+{
+       zval *aval;
+       zend_string *str;
+
+       ZVAL_DEREF(val);
+       switch (Z_TYPE_P(val)) {
+       case IS_ARRAY:
+               ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(val), aval)
+               {
+                       php_http_header_to_callback_ex(key, aval, crlf, cb, cb_arg);
+               }
+               ZEND_HASH_FOREACH_END();
+               break;
+
+       case IS_TRUE:
+               cb(cb_arg, "%s: true%s", key, crlf ? PHP_HTTP_CRLF:"");
+               break;
+
+       case IS_FALSE:
+               cb(cb_arg, "%s: false%s", key, crlf ? PHP_HTTP_CRLF:"");
+               break;
+
+       default:
+               str = zval_get_string(val);
+               cb(cb_arg, "%s: %s%s", key, str->val, crlf ? PHP_HTTP_CRLF:"");
+               zend_string_release(str);
+               break;
+       }
+}
+
+void php_http_header_to_string_ex(php_http_buffer_t *str, const char *key, zval *val)
+{
+       php_http_header_to_callback_ex(key, val, 1, (php_http_pass_format_callback_t) php_http_buffer_appendf, str);
+}
+
 zend_string *php_http_header_value_array_to_string(zval *header)
 {
        zval *val;
@@ -116,6 +164,12 @@ zend_string *php_http_header_value_to_string(zval *header)
        }
 }
 
+static zend_class_entry *php_http_header_class_entry;
+zend_class_entry *php_http_header_get_class_entry(void)
+{
+       return php_http_header_class_entry;
+}
+
 ZEND_BEGIN_ARG_INFO_EX(ai_HttpHeader___construct, 0, 0, 0)
        ZEND_ARG_INFO(0, name)
        ZEND_ARG_INFO(0, value)
@@ -209,8 +263,8 @@ ZEND_BEGIN_ARG_INFO_EX(ai_HttpHeader_match, 0, 0, 1)
 ZEND_END_ARG_INFO();
 PHP_METHOD(HttpHeader, match)
 {
-       char *val_str;
-       size_t val_len;
+       char *val_str = NULL;
+       size_t val_len = 0;
        zend_long flags = PHP_HTTP_MATCH_LOOSE;
        zend_string *zs;
        zval value_tmp;
@@ -276,7 +330,7 @@ PHP_METHOD(HttpHeader, getParams)
        
        ZVAL_STRINGL(&zctor, "__construct", lenof("__construct"));
        
-       object_init_ex(&zparams_obj, php_http_params_class_entry);
+       object_init_ex(&zparams_obj, php_http_params_get_class_entry());
        
        zargs = (zval *) ecalloc(ZEND_NUM_ARGS()+1, sizeof(zval));
        ZVAL_COPY_VALUE(&zargs[0], zend_read_property(php_http_header_class_entry, getThis(), ZEND_STRL("value"), 0, &value_tmp));
@@ -344,7 +398,7 @@ PHP_METHOD(HttpHeader, parse)
 }
 
 static zend_function_entry php_http_header_methods[] = {
-       PHP_ME(HttpHeader, __construct,   ai_HttpHeader___construct, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
+       PHP_ME(HttpHeader, __construct,   ai_HttpHeader___construct, ZEND_ACC_PUBLIC)
        PHP_ME(HttpHeader, serialize,     ai_HttpHeader_serialize, ZEND_ACC_PUBLIC)
        ZEND_MALIAS(HttpHeader, __toString, serialize, ai_HttpHeader_serialize, ZEND_ACC_PUBLIC)
        ZEND_MALIAS(HttpHeader, toString, serialize, ai_HttpHeader_serialize, ZEND_ACC_PUBLIC)
@@ -356,8 +410,6 @@ static zend_function_entry php_http_header_methods[] = {
        EMPTY_FUNCTION_ENTRY
 };
 
-zend_class_entry *php_http_header_class_entry;
-
 PHP_MINIT_FUNCTION(http_header)
 {
        zend_class_entry ce = {0};