thread safety
authorMichael Wallner <mike@php.net>
Sun, 12 Jun 2011 08:14:46 +0000 (08:14 +0000)
committerMichael Wallner <mike@php.net>
Sun, 12 Jun 2011 08:14:46 +0000 (08:14 +0000)
27 files changed:
php_http.h
php_http_cookie.c
php_http_cookie.h
php_http_curl.c
php_http_encoding.c
php_http_env.c
php_http_env_response.c
php_http_env_response.h
php_http_etag.c
php_http_etag.h
php_http_filter.c
php_http_header_parser.c
php_http_message.c
php_http_message_body.c
php_http_message_body.h
php_http_message_parser.c
php_http_misc.c
php_http_neon.c
php_http_params.c
php_http_persistent_handle.c
php_http_request.c
php_http_request_datashare.c
php_http_request_factory.c
php_http_request_method.c
php_http_request_method.h
php_http_request_pool.c
php_http_url.c

index b1bc57c4d6cacca6c9c17e81279e00a04733fb40..7c966fc3efa22f39d4d76ba50144ca37904e1692 100644 (file)
@@ -128,9 +128,9 @@ ZEND_EXTERN_MODULE_GLOBALS(php_http);
 
 #ifdef ZTS
 #      include "TSRM/TSRM.h"
-#      define PHP_HTTP_G ((php_http_globals *) (*((void ***) tsrm_ls))[TSRM_UNSHUFFLE_RSRC_ID(php_http_globals_id)])
+#      define PHP_HTTP_G ((zend_php_http_globals *) (*((void ***) tsrm_ls))[TSRM_UNSHUFFLE_RSRC_ID(php_http_globals_id)])
 #      undef TSRMLS_FETCH_FROM_CTX
-#      define TSRMLS_FETCH_FROM_CTX(ctx) ((ctx)?(ctx):ts_resource_ex(0, NULL))
+#      define TSRMLS_FETCH_FROM_CTX(ctx) void ***tsrm_ls = ((ctx)?(ctx):ts_resource_ex(0, NULL))
 #else
 #      define PHP_HTTP_G (&php_http_globals)
 #endif
index 6c2a3d40d8aed8a78fdc556365c35a54a779e85e..cf5e56ceba1b55612adb73cd85f9320dbffb7300 100644 (file)
@@ -30,11 +30,15 @@ PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_init(php_http_cookie_l
        list->expires = 0;
        list->flags = 0;
        
+       TSRMLS_SET_CTX(list->ts);
+
        return list;
 }
 
-PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_copy(php_http_cookie_list_t *from, php_http_cookie_list_t *to TSRMLS_DC)
+PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_copy(php_http_cookie_list_t *from, php_http_cookie_list_t *to)
 {
+       TSRMLS_FETCH_FROM_CTX(from->ts);
+
        to = php_http_cookie_list_init(to TSRMLS_CC);
 
        array_copy(&from->cookies, &to->cookies);
@@ -48,7 +52,7 @@ PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_copy(php_http_cookie_l
        return to;
 }
 
-PHP_HTTP_API void php_http_cookie_list_dtor(php_http_cookie_list_t *list TSRMLS_DC)
+PHP_HTTP_API void php_http_cookie_list_dtor(php_http_cookie_list_t *list)
 {
        if (list) {
                zend_hash_destroy(&list->cookies);
@@ -61,7 +65,7 @@ PHP_HTTP_API void php_http_cookie_list_dtor(php_http_cookie_list_t *list TSRMLS_
 
 
 
-PHP_HTTP_API void php_http_cookie_list_free(php_http_cookie_list_t **list TSRMLS_DC)
+PHP_HTTP_API void php_http_cookie_list_free(php_http_cookie_list_t **list)
 {
        if (*list) {
                php_http_cookie_list_dtor(*list);
@@ -72,7 +76,7 @@ PHP_HTTP_API void php_http_cookie_list_free(php_http_cookie_list_t **list TSRMLS
 
 
 
-PHP_HTTP_API const char *php_http_cookie_list_get_cookie(php_http_cookie_list_t *list, const char *name, size_t name_len TSRMLS_DC)
+PHP_HTTP_API const char *php_http_cookie_list_get_cookie(php_http_cookie_list_t *list, const char *name, size_t name_len)
 {
        zval **cookie = NULL;
        if ((SUCCESS != zend_hash_find(&list->cookies, name, name_len + 1, (void *) &cookie)) || (Z_TYPE_PP(cookie) != IS_STRING)) {
@@ -83,7 +87,7 @@ PHP_HTTP_API const char *php_http_cookie_list_get_cookie(php_http_cookie_list_t
 
 
 
-PHP_HTTP_API const char *php_http_cookie_list_get_extra(php_http_cookie_list_t *list, const char *name, size_t name_len TSRMLS_DC)
+PHP_HTTP_API const char *php_http_cookie_list_get_extra(php_http_cookie_list_t *list, const char *name, size_t name_len)
 {
        zval **extra = NULL;
        if ((SUCCESS != zend_hash_find(&list->extras, name, name_len + 1, (void *) &extra)) || (Z_TYPE_PP(extra) != IS_STRING)) {
@@ -94,26 +98,24 @@ PHP_HTTP_API const char *php_http_cookie_list_get_extra(php_http_cookie_list_t *
 
 
 
-PHP_HTTP_API void php_http_cookie_list_add_cookie(php_http_cookie_list_t *list, const char *name, size_t name_len, const char *value, size_t value_len TSRMLS_DC)
+PHP_HTTP_API void php_http_cookie_list_add_cookie(php_http_cookie_list_t *list, const char *name, size_t name_len, const char *value, size_t value_len)
 {
        zval *cookie_value;
-       char *key = estrndup(name, name_len);
+
        MAKE_STD_ZVAL(cookie_value);
        ZVAL_STRINGL(cookie_value, estrndup(value, value_len), value_len, 0);
-       zend_hash_update(&list->cookies, key, name_len + 1, (void *) &cookie_value, sizeof(zval *), NULL);
-       efree(key);
+       zend_hash_update(&list->cookies, name, name_len + 1, (void *) &cookie_value, sizeof(zval *), NULL);
 }
 
 
 
-PHP_HTTP_API void php_http_cookie_list_add_extra(php_http_cookie_list_t *list, const char *name, size_t name_len, const char *value, size_t value_len TSRMLS_DC)
+PHP_HTTP_API void php_http_cookie_list_add_extra(php_http_cookie_list_t *list, const char *name, size_t name_len, const char *value, size_t value_len)
 {
        zval *cookie_value;
-       char *key = estrndup(name, name_len);
+
        MAKE_STD_ZVAL(cookie_value);
        ZVAL_STRINGL(cookie_value, estrndup(value, value_len), value_len, 0);
-       zend_hash_update(&list->extras, key, name_len + 1, (void *) &cookie_value, sizeof(zval *), NULL);
-       efree(key);
+       zend_hash_update(&list->extras, name, name_len + 1, (void *) &cookie_value, sizeof(zval *), NULL);
 }
 
 
@@ -135,7 +137,7 @@ static void php_http_cookie_parse_callback(void *ptr, const char *key, int keyle
                STR_SET(arg->list->domain, estrndup(val, vallen));
        } else if _KEY_IS("expires") {
                char *date = estrndup(val, vallen);
-               arg->list->expires = php_parse_date(date, NULL TSRMLS_CC);
+               arg->list->expires = php_parse_date(date, NULL);
                efree(date);
        } else if _KEY_IS("secure") {
                arg->list->flags |= PHP_HTTP_COOKIE_SECURE;
@@ -149,12 +151,12 @@ static void php_http_cookie_parse_callback(void *ptr, const char *key, int keyle
                        for (; *ae; ++ae) {
                                if ((size_t) keylen == strlen(*ae) && !strncasecmp(key, *ae, keylen)) {
                                        if (arg->flags & PHP_HTTP_COOKIE_PARSE_RAW) {
-                                               php_http_cookie_list_add_extra(arg->list, key, keylen, val, vallen TSRMLS_CC);
+                                               php_http_cookie_list_add_extra(arg->list, key, keylen, val, vallen);
                                        } else {
                                                char *dec = estrndup(val, vallen);
                                                int declen = php_url_decode(dec, vallen);
                                                
-                                               php_http_cookie_list_add_extra(arg->list, key, keylen, dec, declen TSRMLS_CC);
+                                               php_http_cookie_list_add_extra(arg->list, key, keylen, dec, declen);
                                                efree(dec);
                                        }
                                        return;
@@ -163,12 +165,12 @@ static void php_http_cookie_parse_callback(void *ptr, const char *key, int keyle
                }
                /* new cookie */
                if (arg->flags & PHP_HTTP_COOKIE_PARSE_RAW) {
-                       php_http_cookie_list_add_cookie(arg->list, key, keylen, val, vallen TSRMLS_CC);
+                       php_http_cookie_list_add_cookie(arg->list, key, keylen, val, vallen);
                } else {
                        char *dec = estrndup(val, vallen);
                        int declen = php_url_decode(dec, vallen);
                        
-                       php_http_cookie_list_add_cookie(arg->list, key, keylen, dec, declen TSRMLS_CC);
+                       php_http_cookie_list_add_cookie(arg->list, key, keylen, dec, declen);
                        efree(dec);
                }
        }
@@ -189,9 +191,9 @@ PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_parse(php_http_cookie_
        
        if (SUCCESS != php_http_params_parse(string, PHP_HTTP_PARAMS_RAISE_ERROR, php_http_cookie_parse_callback, &arg TSRMLS_CC)) {
                if (free_list) {
-                       php_http_cookie_list_free(&list TSRMLS_CC);
+                       php_http_cookie_list_free(&list);
                } else {
-                       php_http_cookie_list_dtor(list TSRMLS_CC);
+                       php_http_cookie_list_dtor(list);
                }
                list = NULL;
        }
@@ -201,9 +203,10 @@ PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_parse(php_http_cookie_
 
 
 
-PHP_HTTP_API void php_http_cookie_list_to_struct(php_http_cookie_list_t *list, zval *strct TSRMLS_DC)
+PHP_HTTP_API void php_http_cookie_list_to_struct(php_http_cookie_list_t *list, zval *strct)
 {
        zval array, *cookies, *extras;
+       TSRMLS_FETCH_FROM_CTX(list->ts);
        
        INIT_PZVAL_ARRAY(&array, HASH_OF(strct));
        
@@ -266,7 +269,7 @@ PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_from_struct(php_http_c
                                if (Z_LVAL_P(cpy)) {
                                        list->expires = Z_LVAL_P(cpy);
                                } else {
-                                       time_t expires = php_parse_date(Z_STRVAL_PP(tmp), NULL TSRMLS_CC);
+                                       time_t expires = php_parse_date(Z_STRVAL_PP(tmp), NULL);
                                        if (expires > 0) {
                                                list->expires = expires;
                                        }
@@ -308,12 +311,13 @@ static inline void append_encoded(php_http_buffer_t *buf, const char *key, size_
 
 
 
-PHP_HTTP_API void php_http_cookie_list_to_string(php_http_cookie_list_t *list, char **str, size_t *len TSRMLS_DC)
+PHP_HTTP_API void php_http_cookie_list_to_string(php_http_cookie_list_t *list, char **str, size_t *len)
 {
        php_http_buffer_t buf;
        zval **val;
        php_http_array_hashkey_t key = php_http_array_hashkey_init(0);
        HashPosition pos;
+       TSRMLS_FETCH_FROM_CTX(list->ts);
        
        php_http_buffer_init(&buf);
        
@@ -486,22 +490,25 @@ zend_object_value php_http_cookie_object_new_ex(zend_class_entry *ce, php_http_c
        return ov;
 }
 
-zend_object_value php_http_cookie_object_clone(zval *this_ptr TSRMLS_CC)
+zend_object_value php_http_cookie_object_clone(zval *this_ptr TSRMLS_DC)
 {
        php_http_cookie_object_t *new_obj, *old_obj = zend_object_store_get_object(getThis() TSRMLS_CC);
        zend_object_value ov;
 
-       ov = php_http_cookie_object_new_ex(old_obj->o.ce, php_http_cookie_list_copy(old_obj->list, NULL TSRMLS_CC), &new_obj TSRMLS_CC);
+       if (!old_obj->list) {
+               old_obj->list = php_http_cookie_list_init(NULL TSRMLS_CC);
+       }
+       ov = php_http_cookie_object_new_ex(old_obj->o.ce, php_http_cookie_list_copy(old_obj->list, NULL), &new_obj TSRMLS_CC);
        zend_objects_clone_members((zend_object *) new_obj, ov, (zend_object *) old_obj, Z_OBJ_HANDLE_P(getThis()) TSRMLS_CC);
 
        return ov;
 }
 
-void php_http_cookie_object_free(void *object TSRMLS_CC)
+void php_http_cookie_object_free(void *object TSRMLS_DC)
 {
        php_http_cookie_object_t *obj = object;
 
-       php_http_cookie_list_free(&obj->list TSRMLS_CC);
+       php_http_cookie_list_free(&obj->list);
        zend_object_std_dtor((zend_object *) obj TSRMLS_CC);
        efree(obj);
 }
@@ -904,7 +911,7 @@ PHP_METHOD(HttpCookie, toString)
                if (!obj->list) {
                        obj->list = php_http_cookie_list_init(NULL TSRMLS_CC);
                }
-               php_http_cookie_list_to_string(obj->list, &str, &len TSRMLS_CC);
+               php_http_cookie_list_to_string(obj->list, &str, &len);
                RETURN_STRINGL(str, len, 0);
        }
        RETURN_EMPTY_STRING();
@@ -919,7 +926,7 @@ PHP_METHOD(HttpCookie, toArray)
                        obj->list = php_http_cookie_list_init(NULL TSRMLS_CC);
                }
                array_init(return_value);
-               php_http_cookie_list_to_struct(obj->list, return_value TSRMLS_CC);
+               php_http_cookie_list_to_struct(obj->list, return_value);
        }
 }
 
index 1e2b0f7d87f7c9c51dc23410e961e3a549df860f..930735852fbb99d8ffa8bc5de3571b2618b9d792 100644 (file)
@@ -32,24 +32,29 @@ typedef struct php_http_cookie_list {
        char *path;
        char *domain;
        time_t expires;
+
+#ifdef ZTS
+       void ***ts;
+#endif
 } php_http_cookie_list_t;
 
 PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_init(php_http_cookie_list_t *list TSRMLS_DC);
-PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_parse(php_http_cookie_list_t * list, const char *string, long flags, char **allowed_extras TSRMLS_DC);
-PHP_HTTP_API void php_http_cookie_list_dtor(php_http_cookie_list_t *list TSRMLS_DC);
-PHP_HTTP_API void php_http_cookie_list_free(php_http_cookie_list_t **list TSRMLS_DC);
+PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_parse(php_http_cookie_list_t *list, const char *string, long flags, char **allowed_extras TSRMLS_DC);
+PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_copy(php_http_cookie_list_t *from, php_http_cookie_list_t *to);
+PHP_HTTP_API void php_http_cookie_list_dtor(php_http_cookie_list_t *list);
+PHP_HTTP_API void php_http_cookie_list_free(php_http_cookie_list_t **list);
 
 #define php_http_cookie_list_has_cookie(list, name, name_len) zend_hash_exists(&(list)->cookies, (name), (name_len)+1)
-PHP_HTTP_API void php_http_cookie_list_add_cookie(php_http_cookie_list_t *list, const char *name, size_t name_len, const char *value, size_t value_len TSRMLS_DC);
-PHP_HTTP_API const char *php_http_cookie_list_get_cookie(php_http_cookie_list_t *list, const char *name, size_t name_len TSRMLS_DC);
+PHP_HTTP_API void php_http_cookie_list_add_cookie(php_http_cookie_list_t *list, const char *name, size_t name_len, const char *value, size_t value_len);
+PHP_HTTP_API const char *php_http_cookie_list_get_cookie(php_http_cookie_list_t *list, const char *name, size_t name_len);
 
 #define php_http_cookie_list_has_extra(list, name, name_len) zend_hash_exists(&(list)->extras, (name), (name_len)+1)
-PHP_HTTP_API void php_http_cookie_list_add_extra(php_http_cookie_list_t *list, const char *name, size_t name_len, const char *value, size_t value_len TSRMLS_DC);
-PHP_HTTP_API const char *php_http_cookie_list_get_extra(php_http_cookie_list_t *list, const char *name, size_t name_len TSRMLS_DC);
+PHP_HTTP_API void php_http_cookie_list_add_extra(php_http_cookie_list_t *list, const char *name, size_t name_len, const char *value, size_t value_len);
+PHP_HTTP_API const char *php_http_cookie_list_get_extra(php_http_cookie_list_t *list, const char *name, size_t name_len);
 
-PHP_HTTP_API void php_http_cookie_list_to_string(php_http_cookie_list_t *list, char **str, size_t *len TSRMLS_DC);
+PHP_HTTP_API void php_http_cookie_list_to_string(php_http_cookie_list_t *list, char **str, size_t *len);
 PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_from_struct(php_http_cookie_list_t *list, zval *strct TSRMLS_DC);
-PHP_HTTP_API void php_http_cookie_list_to_struct(php_http_cookie_list_t *list, zval *strct TSRMLS_DC);
+PHP_HTTP_API void php_http_cookie_list_to_struct(php_http_cookie_list_t *list, zval *strct);
 
 
 extern zend_class_entry *php_http_cookie_class_entry;
index 71365dc04ea89d99c56cba0e5d75d793fb64fb6d..ae8eb556872f5dd5b71452954550ac5ab69773de 100644 (file)
@@ -227,6 +227,7 @@ static int php_http_curl_raw_callback(CURL *ch, curl_infotype type, char *data,
        php_http_request_t *h = ctx;
        php_http_curl_request_t *curl = h->ctx;
        unsigned flags = 0;
+       TSRMLS_FETCH_FROM_CTX(h->ts);
 
        /* catch progress */
        switch (type) {
@@ -322,7 +323,7 @@ static STATUS php_http_curl_request_prepare(php_http_request_t *h, php_http_requ
                        break;
 
                default: {
-                       const char *name = php_http_request_method_name(meth);
+                       const char *name = php_http_request_method_name(meth TSRMLS_CC);
 
                        if (name) {
                                curl_easy_setopt(curl->handle, CURLOPT_CUSTOMREQUEST, name);
@@ -591,6 +592,7 @@ static STATUS set_options(php_http_request_t *h, HashTable *options)
        int range_req = 0;
        php_http_curl_request_t *curl = h->ctx;
        CURL *ch = curl->handle;
+       TSRMLS_FETCH_FROM_CTX(h->ts);
 
        /* proxy */
        if ((zoption = get_option(&curl->options.cache, options, ZEND_STRS("proxyhost"), IS_STRING))) {
@@ -1187,9 +1189,10 @@ static void php_http_curl_request_datashare_unlock_func(CURL *handle, curl_lock_
 
 /* request datashare handler ops */
 
-static php_http_request_datashare_t *php_http_curl_request_datashare_init(php_http_request_datashare_t *h, void *handle TSRMLS_DC)
+static php_http_request_datashare_t *php_http_curl_request_datashare_init(php_http_request_datashare_t *h, void *handle)
 {
        php_http_curl_request_datashare_t *curl;
+       TSRMLS_FETCH_FROM_CTX(h->ts);
 
        if (!handle && !(handle = php_http_resource_factory_handle_ctor(h->rf TSRMLS_CC))) {
                php_http_error(HE_WARNING, PHP_HTTP_E_REQUEST_DATASHARE, "could not initialize curl share handle");
@@ -1200,11 +1203,11 @@ static php_http_request_datashare_t *php_http_curl_request_datashare_init(php_ht
        curl->handle = handle;
 #ifdef ZTS
        if (h->persistent) {
-               curl->locks = php_http_request_datashare_locks_init();
+               curl->locks = php_http_curl_request_datashare_locks_init();
                if (curl->locks) {
-                       curl_share_setopt(share->ch, CURLSHOPT_LOCKFUNC, php_http_curl_request_datashare_lock_func);
-                       curl_share_setopt(share->ch, CURLSHOPT_UNLOCKFUNC, php_http_curl_request_datashare_unlock_func);
-                       curl_share_setopt(share->ch, CURLSHOPT_USERDATA, curl->locks);
+                       curl_share_setopt(curl->handle, CURLSHOPT_LOCKFUNC, php_http_curl_request_datashare_lock_func);
+                       curl_share_setopt(curl->handle, CURLSHOPT_UNLOCKFUNC, php_http_curl_request_datashare_unlock_func);
+                       curl_share_setopt(curl->handle, CURLSHOPT_USERDATA, curl->locks);
                }
        }
 #endif
@@ -1222,7 +1225,7 @@ static void php_http_curl_request_datashare_dtor(php_http_request_datashare_t *h
 
 #ifdef ZTS
        if (h->persistent) {
-               http_request_datashare_locks_dtor(curl->locks);
+               php_http_curl_request_datashare_locks_dtor(curl->locks);
        }
 #endif
 
@@ -1314,9 +1317,10 @@ PHP_HTTP_API php_http_request_datashare_ops_t *php_http_curl_get_request_datasha
 
 /* request pool handler ops */
 
-static php_http_request_pool_t *php_http_curl_request_pool_init(php_http_request_pool_t *h, void *handle TSRMLS_DC)
+static php_http_request_pool_t *php_http_curl_request_pool_init(php_http_request_pool_t *h, void *handle)
 {
        php_http_curl_request_pool_t *curl;
+       TSRMLS_FETCH_FROM_CTX(h->ts);
 
        if (!handle && !(handle = php_http_resource_factory_handle_ctor(h->rf TSRMLS_CC))) {
                php_http_error(HE_WARNING, PHP_HTTP_E_REQUEST_POOL, "could not initialize curl pool handle");
@@ -1345,7 +1349,7 @@ static void php_http_curl_request_pool_dtor(php_http_request_pool_t *h)
        curl->unfinished = 0;
        php_http_request_pool_reset(h);
 
-       php_http_resource_factory_handle_dtor(h->rf, curl->handle);
+       php_http_resource_factory_handle_dtor(h->rf, curl->handle TSRMLS_CC);
 
        efree(curl);
        h->ctx = NULL;
@@ -1356,6 +1360,7 @@ static STATUS php_http_curl_request_pool_attach(php_http_request_pool_t *h, php_
        php_http_curl_request_pool_t *curl = h->ctx;
        php_http_curl_request_t *recurl = r->ctx;
        CURLMcode rs;
+       TSRMLS_FETCH_FROM_CTX(h->ts);
 
        if (SUCCESS != php_http_curl_request_prepare(r, m, url, body)) {
                return FAILURE;
@@ -1375,6 +1380,7 @@ static STATUS php_http_curl_request_pool_detach(php_http_request_pool_t *h, php_
        php_http_curl_request_pool_t *curl = h->ctx;
        php_http_curl_request_t *recurl = r->ctx;
        CURLMcode rs = curl_multi_remove_handle(curl->handle, recurl->handle);
+       TSRMLS_FETCH_FROM_CTX(h->ts);
 
        if (CURLM_OK == rs) {
                return SUCCESS;
@@ -1399,7 +1405,7 @@ static STATUS php_http_curl_request_pool_wait(php_http_request_pool_t *h, struct
 
 #ifdef PHP_HTTP_HAVE_EVENT
        if (curl->useevents) {
-               TSRMLS_FETCH_FROM_CTX(pool->ts);
+               TSRMLS_FETCH_FROM_CTX(h->ts);
 
                php_http_error(HE_WARNING, PHP_HTTP_E_RUNTIME, "not implemented");
                return FAILURE;
@@ -1461,6 +1467,8 @@ static void dolog(int i, const char *m) {
 #endif
 static STATUS php_http_curl_request_pool_exec(php_http_request_pool_t *h)
 {
+       TSRMLS_FETCH_FROM_CTX(h->ts);
+
 #ifdef PHP_HTTP_HAVE_EVENT
        php_http_curl_request_pool_t *curl = h->ctx;
 
@@ -1589,7 +1597,7 @@ static php_http_request_t *php_http_curl_request_init(php_http_request_t *h, voi
        curl_easy_setopt(handle, CURLOPT_DEBUGDATA, h);
        curl_easy_setopt(handle, CURLOPT_PROGRESSDATA, h);
 
-       php_http_curl_request_reset(h TSRMLS_CC);
+       php_http_curl_request_reset(h);
 
        return h;
 }
@@ -1614,6 +1622,7 @@ static php_http_request_t *php_http_curl_request_copy(php_http_request_t *from,
 static void php_http_curl_request_dtor(php_http_request_t *h)
 {
        php_http_curl_request_t *ctx = h->ctx;
+       TSRMLS_FETCH_FROM_CTX(h->ts);
 
        curl_easy_setopt(ctx->handle, CURLOPT_NOPROGRESS, 1L);
        curl_easy_setopt(ctx->handle, CURLOPT_PROGRESSFUNCTION, NULL);
@@ -1629,7 +1638,7 @@ static void php_http_curl_request_dtor(php_http_request_t *h)
                curl_slist_free_all(ctx->options.headers);
                ctx->options.headers = NULL;
        }
-       php_http_request_progress_dtor(&ctx->progress);
+       php_http_request_progress_dtor(&ctx->progress TSRMLS_CC);
 
        efree(ctx);
        h->ctx = NULL;
@@ -1814,6 +1823,7 @@ retry:
 static STATUS php_http_curl_request_setopt(php_http_request_t *h, php_http_request_setopt_opt_t opt, void *arg)
 {
        php_http_curl_request_t *curl = h->ctx;
+       TSRMLS_FETCH_FROM_CTX(h->ts);
 
        switch (opt) {
                case PHP_HTTP_REQUEST_OPT_SETTINGS:
index b7c994bf928a78d2d652ad45a378af409a2b99f5..2580738baba61ee2780727f1306c5fbb0042e08e 100644 (file)
@@ -393,7 +393,6 @@ static php_http_encoding_stream_t *inflate_init(php_http_encoding_stream_t *s)
 static php_http_encoding_stream_t *dechunk_init(php_http_encoding_stream_t *s)
 {
        struct dechunk_ctx *ctx = pecalloc(1, sizeof(*ctx), (s->flags & PHP_HTTP_ENCODING_STREAM_PERSISTENT));
-       TSRMLS_FETCH_FROM_CTX(s->ts);
 
        if (!php_http_buffer_init_ex(&ctx->buffer, PHP_HTTP_BUFFER_DEFAULT_SIZE, (s->flags & PHP_HTTP_ENCODING_STREAM_PERSISTENT) ? PHP_HTTP_BUFFER_INIT_PERSISTENT : 0)) {
                return NULL;
@@ -942,7 +941,7 @@ void php_http_encoding_stream_object_free(void *object TSRMLS_DC)
        php_http_encoding_stream_object_t *o = (php_http_encoding_stream_object_t *) object;
 
        if (o->stream) {
-               php_http_encoding_stream_free(&o->stream TSRMLS_CC);
+               php_http_encoding_stream_free(&o->stream);
        }
        zend_object_std_dtor((zend_object *) o TSRMLS_CC);
        efree(o);
@@ -994,7 +993,7 @@ PHP_METHOD(HttpEncodingStream, update)
                        size_t encoded_len;
                        char *encoded_str;
 
-                       if (SUCCESS == php_http_encoding_stream_update(obj->stream, data_str, data_len, &encoded_str, &encoded_len TSRMLS_CC)) {
+                       if (SUCCESS == php_http_encoding_stream_update(obj->stream, data_str, data_len, &encoded_str, &encoded_len)) {
                                RETURN_STRINGL(encoded_str, encoded_len, 0);
                        }
                }
@@ -1011,7 +1010,7 @@ PHP_METHOD(HttpEncodingStream, flush)
                        char *encoded_str;
                        size_t encoded_len;
 
-                       if (SUCCESS == php_http_encoding_stream_flush(obj->stream, &encoded_str, &encoded_len TSRMLS_CC)) {
+                       if (SUCCESS == php_http_encoding_stream_flush(obj->stream, &encoded_str, &encoded_len)) {
                                RETURN_STRINGL(encoded_str, encoded_len, 0);
                        }
                }
@@ -1040,7 +1039,7 @@ PHP_METHOD(HttpEncodingStream, finish)
                        char *encoded_str;
                        size_t encoded_len;
 
-                       if (SUCCESS == php_http_encoding_stream_finish(obj->stream, &encoded_str, &encoded_len TSRMLS_CC)) {
+                       if (SUCCESS == php_http_encoding_stream_finish(obj->stream, &encoded_str, &encoded_len)) {
                                if (SUCCESS == php_http_encoding_stream_reset(&obj->stream)) {
                                        RETURN_STRINGL(encoded_str, encoded_len, 0);
                                } else {
index 511b878efbe134543e7791ea13c616c0d74447d5..1bd1a14e3de6bb03149d5500305961bde7574a36 100644 (file)
@@ -766,7 +766,7 @@ PHP_METHOD(HttpEnv, setResponseCode)
 #define PHP_HTTP_DO_NEGOTIATE(type, supported, rs_array) \
        { \
                HashTable *result; \
-               if ((result = php_http_negotiate_ ##type(supported))) { \
+               if ((result = php_http_negotiate_ ##type(supported TSRMLS_CC))) { \
                        PHP_HTTP_DO_NEGOTIATE_HANDLE_RESULT(result, supported, rs_array); \
                } else { \
                        PHP_HTTP_DO_NEGOTIATE_HANDLE_DEFAULT(supported, rs_array); \
@@ -834,7 +834,7 @@ PHP_METHOD(HttpEnv, negotiate)
                        array_init(rs_array);
                }
 
-               if ((rs = php_http_negotiate(value_str, supported, php_http_negotiate_default_func))) {
+               if ((rs = php_http_negotiate(value_str, supported, php_http_negotiate_default_func TSRMLS_CC))) {
                        PHP_HTTP_DO_NEGOTIATE_HANDLE_RESULT(rs, supported, rs_array);
                } else {
                        PHP_HTTP_DO_NEGOTIATE_HANDLE_DEFAULT(supported, rs_array);
@@ -847,7 +847,7 @@ PHP_METHOD(HttpEnv, persistentHandlesStat)
 {
        if (SUCCESS == zend_parse_parameters_none()) {
                object_init(return_value);
-               if (php_http_persistent_handle_statall(HASH_OF(return_value))) {
+               if (php_http_persistent_handle_statall(HASH_OF(return_value) TSRMLS_CC)) {
                        return;
                }
                zval_dtor(return_value);
index 40fa9412ce4008500fdab33fc213243c510fe451..2f147554dc1d988e3d2b13deaaff2745dca024f7 100644 (file)
@@ -61,7 +61,7 @@ static void set_option(zval *options, const char *name_str, size_t name_len, int
                }
        }
 }
-static zval *get_option(zval *options, const char *name_str, size_t name_len TSRMLS_CC)
+static zval *get_option(zval *options, const char *name_str, size_t name_len TSRMLS_DC)
 {
        zval *val, **valptr;
 
@@ -167,7 +167,7 @@ PHP_HTTP_API php_http_cache_status_t php_http_env_is_response_cached_by_last_mod
                zval_ptr_dtor(&zlm);
        }
 
-       ums = php_parse_date(header, NULL TSRMLS_CC);
+       ums = php_parse_date(header, NULL);
        efree(header);
 
        if (ums > 0 && ums <= lm) {
@@ -180,7 +180,6 @@ PHP_HTTP_API php_http_cache_status_t php_http_env_is_response_cached_by_last_mod
 static size_t output(void *context, const char *buf, size_t len TSRMLS_DC)
 {
        php_http_env_response_t *r = context;
-       TSRMLS_FETCH_FROM_CTX(r->ts);
 
        PHPWRITE(buf, len);
 
@@ -363,7 +362,7 @@ static STATUS php_http_env_response_send_head(php_http_env_response_t *r)
                                ret = php_http_env_set_response_header_format(206, 1 TSRMLS_CC, "Content-Range: bytes %ld-%ld/%zu", Z_LVAL_PP(begin), Z_LVAL_PP(end), r->content.length);
                        }
                } else {
-                       php_http_boundary(r->range.boundary, sizeof(r->range.boundary));
+                       php_http_boundary(r->range.boundary, sizeof(r->range.boundary) TSRMLS_CC);
                        ret = php_http_env_set_response_header_format(206, 1 TSRMLS_CC, "Content-Type: multipart/byteranges; boundary=%s", r->range.boundary);
                }
        } else {
@@ -450,13 +449,13 @@ static STATUS php_http_env_response_send_head(php_http_env_response_t *r)
                                                zend_hash_internal_pointer_reset(result);
                                                if (HASH_KEY_IS_STRING == zend_hash_get_current_key_ex(result, &key_str, &key_len, NULL, 0, NULL)) {
                                                        if (!strcmp(key_str, "gzip")) {
-                                                               if (!(r->content.encoder = php_http_encoding_stream_init(NULL, php_http_encoding_stream_get_deflate_ops(), PHP_HTTP_DEFLATE_TYPE_GZIP))) {
+                                                               if (!(r->content.encoder = php_http_encoding_stream_init(NULL, php_http_encoding_stream_get_deflate_ops(), PHP_HTTP_DEFLATE_TYPE_GZIP TSRMLS_CC))) {
                                                                        ret = FAILURE;
                                                                } else if (SUCCESS == (ret = php_http_env_set_response_header(0, ZEND_STRL("Content-Encoding: gzip"), 1 TSRMLS_CC))) {
                                                                        r->content.encoding = estrndup(key_str, key_len - 1);
                                                                }
                                                        } else if (!strcmp(key_str, "deflate")) {
-                                                               if (!(r->content.encoder = php_http_encoding_stream_init(NULL, php_http_encoding_stream_get_deflate_ops(), PHP_HTTP_DEFLATE_TYPE_ZLIB))) {
+                                                               if (!(r->content.encoder = php_http_encoding_stream_init(NULL, php_http_encoding_stream_get_deflate_ops(), PHP_HTTP_DEFLATE_TYPE_ZLIB TSRMLS_CC))) {
                                                                        ret = FAILURE;
                                                                } else if (SUCCESS == (ret = php_http_env_set_response_header(0, ZEND_STRL("Content-Encoding: deflate"), 1 TSRMLS_CC))) {
                                                                        r->content.encoding = estrndup(key_str, key_len - 1);
@@ -489,12 +488,12 @@ static STATUS php_http_env_response_send_head(php_http_env_response_t *r)
                        return ret;
                }
 
-               switch (php_http_env_is_response_cached_by_etag(options, ZEND_STRL("If-None-Match"))) {
+               switch (php_http_env_is_response_cached_by_etag(options, ZEND_STRL("If-None-Match") TSRMLS_CC)) {
                        case PHP_HTTP_CACHE_MISS:
                                break;
 
                        case PHP_HTTP_CACHE_NO:
-                               if (PHP_HTTP_CACHE_HIT != php_http_env_is_response_cached_by_last_modified(options, ZEND_STRL("If-Modified-Since"))) {
+                               if (PHP_HTTP_CACHE_HIT != php_http_env_is_response_cached_by_last_modified(options, ZEND_STRL("If-Modified-Since") TSRMLS_CC)) {
                                        break;
                                }
 
@@ -530,6 +529,7 @@ static STATUS php_http_env_response_send_body(php_http_env_response_t *r)
 {
        STATUS ret = SUCCESS;
        zval *zbody;
+       TSRMLS_FETCH_FROM_CTX(r->ts);
 
        if (r->done) {
                return ret;
@@ -609,6 +609,7 @@ static STATUS php_http_env_response_send_body(php_http_env_response_t *r)
 PHP_HTTP_API STATUS php_http_env_response_send(php_http_env_response_t *r)
 {
        zval *zbody;
+       TSRMLS_FETCH_FROM_CTX(r->ts);
 
        /* check for ranges */
        if (    (zbody = get_option(r->options, ZEND_STRL("body") TSRMLS_CC))
@@ -787,7 +788,7 @@ PHP_METHOD(HttpEnvResponse, setContentDisposition)
                if (file_len) {
                        add_assoc_stringl_ex(arr, ZEND_STRS("filename"), file_str, file_len, 1);
                }
-               zend_update_property(Z_OBJCE_P(getThis()), getThis(), ZEND_STRL("contentDisposition"), arr);
+               zend_update_property(Z_OBJCE_P(getThis()), getThis(), ZEND_STRL("contentDisposition"), arr TSRMLS_CC);
                zval_ptr_dtor(&arr);
        }
 }
@@ -850,7 +851,7 @@ PHP_METHOD(HttpEnvResponse, isCachedByEtag)
        char *header_name_str = NULL;
        int header_name_len = 0;
 
-       if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s!", &header_name_str, &header_name_len)) {
+       if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!", &header_name_str, &header_name_len)) {
                if (!header_name_str || !header_name_len) {
                        header_name_str = "If-None-Match";
                        header_name_len = lenof("If-None-Match");
index 67ae674ad4b779f52e640989b0ce0c119ca37a80..c6d5f0572596ae1279f2eb0fbb9305ec2656f630 100644 (file)
@@ -32,7 +32,7 @@ typedef struct php_http_env_response {
 } php_http_env_response_t;
 
 PHP_HTTP_API php_http_env_response_t *php_http_env_response_init(php_http_env_response_t *r, zval *options TSRMLS_DC);
-PHP_HTTP_API STATUS php_Http_env_response_send(php_http_env_response_t *r);
+PHP_HTTP_API STATUS php_http_env_response_send(php_http_env_response_t *r);
 PHP_HTTP_API void php_http_env_response_dtor(php_http_env_response_t *r);
 PHP_HTTP_API void php_http_env_response_free(php_http_env_response_t **r);
 
index b80cc9df85ce0422d43e589e4a2d7ae8059b9468..40757f799968a000558365347f471810270e26fd 100644 (file)
@@ -8,10 +8,10 @@
 #include <ext/standard/sha1.h>
 #include <ext/standard/md5.h>
 
-PHP_HTTP_API void *php_http_etag_init(TSRMLS_D)
+PHP_HTTP_API php_http_etag_t *php_http_etag_init(const char *mode TSRMLS_DC)
 {
-       void *ctx = NULL;
-       char *mode = PHP_HTTP_G->env.etag_mode;
+       void *ctx;
+       php_http_etag_t *e;
 
 #ifdef PHP_HTTP_HAVE_HASH
        const php_hash_ops *eho = NULL;
@@ -26,61 +26,69 @@ PHP_HTTP_API void *php_http_etag_init(TSRMLS_D)
                *((uint *) ctx) = ~0;
        } else if (mode && !strcasecmp(mode, "sha1")) {
                PHP_SHA1Init(ctx = emalloc(sizeof(PHP_SHA1_CTX)));
-       } else {
+       } else if (mode && !strcasecmp(mode, "md5")) {
                PHP_MD5Init(ctx = emalloc(sizeof(PHP_MD5_CTX)));
+       } else {
+               return NULL;
        }
 
-       return ctx;
+       e = emalloc(sizeof(*e));
+       e->ctx = ctx;
+       e->mode = estrdup(mode);
+       TSRMLS_SET_CTX(e->ts);
+
+       return e;
 }
 
-PHP_HTTP_API char *php_http_etag_finish(void *ctx TSRMLS_DC)
+PHP_HTTP_API char *php_http_etag_finish(php_http_etag_t *e)
 {
        unsigned char digest[128] = {0};
-       char *etag = NULL, *mode = PHP_HTTP_G->env.etag_mode;
+       char *etag = NULL;
 
 #ifdef PHP_HTTP_HAVE_HASH
        const php_hash_ops *eho = NULL;
 
-       if (mode && (eho = php_hash_fetch_ops(mode, strlen(mode)))) {
-               eho->hash_final(digest, ctx);
+       if (mode && (eho = php_hash_fetch_ops(e->mode, strlen(e->mode)))) {
+               eho->hash_final(digest, e->ctx);
                etag = php_http_etag_digest(digest, eho->digest_size);
        } else
 #endif
-       if (mode && ((!strcasecmp(mode, "crc32")) || (!strcasecmp(mode, "crc32b")))) {
-               *((uint *) ctx) = ~*((uint *) ctx);
-               etag = php_http_etag_digest((const unsigned char *) ctx, sizeof(uint));
-       } else if (mode && (!strcasecmp(mode, "sha1"))) {
-               PHP_SHA1Final(digest, ctx);
+       if (((!strcasecmp(e->mode, "crc32")) || (!strcasecmp(e->mode, "crc32b")))) {
+               *((uint *) e->ctx) = ~*((uint *) e->ctx);
+               etag = php_http_etag_digest((const unsigned char *) e->ctx, sizeof(uint));
+       } else if ((!strcasecmp(e->mode, "sha1"))) {
+               PHP_SHA1Final(digest, e->ctx);
                etag = php_http_etag_digest(digest, 20);
        } else {
-               PHP_MD5Final(digest, ctx);
+               PHP_MD5Final(digest, e->ctx);
                etag = php_http_etag_digest(digest, 16);
        }
-       efree(ctx);
+       efree(e->ctx);
+       efree(e->mode);
+       efree(e);
 
        return etag;
 }
 
-PHP_HTTP_API size_t php_http_etag_update(void *ctx, const char *data_ptr, size_t data_len TSRMLS_DC)
+PHP_HTTP_API size_t php_http_etag_update(php_http_etag_t *e, const char *data_ptr, size_t data_len)
 {
-       char *mode = PHP_HTTP_G->env.etag_mode;
 #ifdef PHP_HTTP_HAVE_HASH
        const php_hash_ops *eho = NULL;
 
-       if (mode && (eho = php_hash_fetch_ops(mode, strlen(mode)))) {
-               eho->hash_update(ctx, (const unsigned char *) data_ptr, data_len);
+       if (mode && (eho = php_hash_fetch_ops(e->mode, strlen(e->mode)))) {
+               eho->hash_update(e->ctx, (const unsigned char *) data_ptr, data_len);
        } else
 #endif
-       if (mode && ((!strcasecmp(mode, "crc32")) || (!strcasecmp(mode, "crc32b")))) {
-               uint i, c = *((uint *) ctx);
+       if (((!strcasecmp(e->mode, "crc32")) || (!strcasecmp(e->mode, "crc32b")))) {
+               uint i, c = *((uint *) e->ctx);
                for (i = 0; i < data_len; ++i) {
                        CRC32(c, data_ptr[i]);
                }
-               *((uint *)ctx) = c;
-       } else if (mode && (!strcasecmp(mode, "sha1"))) {
-               PHP_SHA1Update(ctx, (const unsigned char *) data_ptr, data_len);
+               *((uint *) e->ctx) = c;
+       } else if ((!strcasecmp(e->mode, "sha1"))) {
+               PHP_SHA1Update(e->ctx, (const unsigned char *) data_ptr, data_len);
        } else {
-               PHP_MD5Update(ctx, (const unsigned char *) data_ptr, data_len);
+               PHP_MD5Update(e->ctx, (const unsigned char *) data_ptr, data_len);
        }
 
        return data_len;
index 25b1426eafe70217543788f93cb90aee918028b9..1ef7b2308c537674a6d832fb095d3ca60e50959f 100644 (file)
@@ -1,9 +1,18 @@
 #ifndef PHP_HTTP_ETAG_H
 #define PHP_HTTP_ETAG_H
 
-PHP_HTTP_API void *php_http_etag_init(TSRMLS_D);
-PHP_HTTP_API size_t php_http_etag_update(void *ctx, const char *data_ptr, size_t data_len TSRMLS_DC);
-PHP_HTTP_API char *php_http_etag_finish(void *ctx TSRMLS_DC);
+typedef struct php_http_etag {
+       void *ctx;
+       char *mode;
+
+#ifdef ZTS
+       void ***ts;
+#endif
+} php_http_etag_t;
+
+PHP_HTTP_API php_http_etag_t *php_http_etag_init(const char *mode TSRMLS_DC);
+PHP_HTTP_API size_t php_http_etag_update(php_http_etag_t *e, const char *data_ptr, size_t data_len);
+PHP_HTTP_API char *php_http_etag_finish(php_http_etag_t *e);
 
 static inline char *php_http_etag_digest(const unsigned char *digest, int len)
 {
index 1a57399071f0dbb79bca68245c4bed71c7ab2c91..9dd0827d016b935cd5ec8c855d98433c6f9b2258 100644 (file)
@@ -297,7 +297,7 @@ static PHP_HTTP_FILTER_FUNCTION(zlib)
                        }
                        
                        if (ptr->buflen) {
-                               php_http_encoding_stream_update(buffer, ptr->buf, ptr->buflen, &encoded, &encoded_len TSRMLS_CC);
+                               php_http_encoding_stream_update(buffer, ptr->buf, ptr->buflen, &encoded, &encoded_len);
                                if (encoded) {
                                        if (encoded_len) {
                                                out_avail = 1;
@@ -317,7 +317,7 @@ static PHP_HTTP_FILTER_FUNCTION(zlib)
                char *encoded = NULL;
                size_t encoded_len = 0;
                
-               php_http_encoding_stream_flush(buffer, &encoded, &encoded_len TSRMLS_CC);
+               php_http_encoding_stream_flush(buffer, &encoded, &encoded_len);
                if (encoded) {
                        if (encoded_len) {
                                out_avail = 1;
@@ -331,7 +331,7 @@ static PHP_HTTP_FILTER_FUNCTION(zlib)
                char *encoded = NULL;
                size_t encoded_len = 0;
                
-               php_http_encoding_stream_finish(buffer, &encoded, &encoded_len TSRMLS_CC);
+               php_http_encoding_stream_finish(buffer, &encoded, &encoded_len);
                if (encoded) {
                        if (encoded_len) {
                                out_avail = 1;
@@ -346,7 +346,7 @@ static PHP_HTTP_FILTER_FUNCTION(zlib)
 static PHP_HTTP_FILTER_DESTRUCTOR(zlib)
 {
        PHP_HTTP_FILTER_BUFFER(zlib) *buffer = (PHP_HTTP_FILTER_BUFFER(zlib) *) this->abstract;
-       php_http_encoding_stream_free(&buffer TSRMLS_CC);
+       php_http_encoding_stream_free(&buffer);
 }
 
 static PHP_HTTP_FILTER_OPS(deflate) = {
@@ -387,7 +387,7 @@ static php_stream_filter *http_filter_create(const char *name, zval *params, int
                
                if ((b = php_http_encoding_stream_init(NULL, php_http_encoding_stream_get_inflate_ops(), flags TSRMLS_CC))) {
                        if (!(f = php_stream_filter_alloc(&PHP_HTTP_FILTER_OP(inflate), b, p))) {
-                               php_http_encoding_stream_free(&b TSRMLS_CC);
+                               php_http_encoding_stream_free(&b);
                        }
                }
        } else
@@ -414,7 +414,7 @@ static php_stream_filter *http_filter_create(const char *name, zval *params, int
                }
                if ((b = php_http_encoding_stream_init(NULL, php_http_encoding_stream_get_deflate_ops(), flags TSRMLS_CC))) {
                        if (!(f = php_stream_filter_alloc(&PHP_HTTP_FILTER_OP(deflate), b, p))) {
-                               php_http_encoding_stream_free(&b TSRMLS_CC);
+                               php_http_encoding_stream_free(&b);
                        }
                }
        }
index e6dca1ee938be43a889413f997cba449fe1293a3..c48e7c6193d990d23197308dd74710e5978898d9 100644 (file)
@@ -15,7 +15,7 @@ static const php_http_header_parser_state_spec_t php_http_header_parser_states[]
 };
 
 
-PHP_HTTP_API php_http_header_parser_t *php_http_header_parser_init(php_http_header_parser_t *parser TSRMLS_CC)
+PHP_HTTP_API php_http_header_parser_t *php_http_header_parser_init(php_http_header_parser_t *parser TSRMLS_DC)
 {
        if (!parser) {
                parser = emalloc(sizeof(*parser));
index e6e28c18995d95db9d8bcc34183115d37a2c1a9e..318470e34ffe2f297b562fd1a71d7653e6ec255a 100644 (file)
@@ -24,7 +24,7 @@ PHP_HTTP_API zend_bool php_http_message_info_callback(php_http_message_t **messa
 
        /* advance message */
        if (old->type || zend_hash_num_elements(&old->hdrs) || PHP_HTTP_BUFFER_LEN(old)) {
-               (*message) = php_http_message_init(NULL, 0);
+               (*message) = php_http_message_init(NULL, 0 TSRMLS_CC);
                (*message)->parent = old;
                (*headers) = &((*message)->hdrs);
        }
@@ -60,7 +60,7 @@ PHP_HTTP_API php_http_message_t *php_http_message_init_env(php_http_message_t *m
        switch (type) {
                case PHP_HTTP_REQUEST:
                        if ((sval = php_http_env_get_server_var(ZEND_STRL("SERVER_PROTOCOL"), 1 TSRMLS_CC)) && !strncmp(Z_STRVAL_P(sval), "HTTP/", lenof("HTTP/"))) {
-                               php_http_version_parse(&message->http.version, Z_STRVAL_P(sval));
+                               php_http_version_parse(&message->http.version, Z_STRVAL_P(sval) TSRMLS_CC);
                        } else {
                                message->http.version.major = 1;
                                message->http.version.minor = 1;
@@ -76,7 +76,7 @@ PHP_HTTP_API php_http_message_t *php_http_message_init_env(php_http_message_t *m
 
                        if ((mbody = php_http_env_get_request_body(TSRMLS_C))) {
                                php_http_message_body_dtor(&message->body);
-                               php_http_message_body_copy(mbody, &message->body, 0 TSRMLS_CC);
+                               php_http_message_body_copy(mbody, &message->body, 0);
                        }
                        break;
                        
@@ -99,7 +99,7 @@ PHP_HTTP_API php_http_message_t *php_http_message_init_env(php_http_message_t *m
                        
                        php_http_env_get_response_headers(&message->hdrs TSRMLS_CC);
 
-                       if (php_output_get_level()) {
+                       if (php_output_get_level(TSRMLS_C)) {
                                if (php_output_get_status(TSRMLS_C) & PHP_OUTPUT_SENT) {
                                        php_http_error(HE_WARNING, PHP_HTTP_E_RUNTIME, "Could not fetch response body, output has already been sent at %s:%d", php_output_get_start_filename(TSRMLS_C), php_output_get_start_lineno(TSRMLS_C));
                                        goto error;
@@ -154,6 +154,7 @@ PHP_HTTP_API zval *php_http_message_header(php_http_message_t *msg, char *key_st
                        zval *header_str, **val;
                        HashPosition pos;
                        php_http_buffer_t str;
+                       TSRMLS_FETCH_FROM_CTX(msg->ts);
 
                        php_http_buffer_init(&str);
                        MAKE_STD_ZVAL(header_str);
@@ -227,6 +228,7 @@ static inline void message_headers(php_http_message_t *msg, php_http_buffer_t *s
        HashPosition pos1;
        zval **header, *h;
        size_t size;
+       TSRMLS_FETCH_FROM_CTX(msg->ts);
 
        switch (msg->type) {
                case PHP_HTTP_REQUEST:
@@ -317,7 +319,6 @@ static inline void message_headers(php_http_message_t *msg, php_http_buffer_t *s
 PHP_HTTP_API void php_http_message_to_callback(php_http_message_t *msg, php_http_pass_callback_t cb, void *cb_arg)
 {
        php_http_buffer_t str;
-       TSRMLS_FETCH_FROM_CTX(msg->ts);
 
        php_http_buffer_init_ex(&str, 0x1000, 0);
        message_headers(msg, &str);
@@ -325,9 +326,9 @@ PHP_HTTP_API void php_http_message_to_callback(php_http_message_t *msg, php_http
        php_http_buffer_dtor(&str);
 
        if (php_http_message_body_size(&msg->body)) {
-               cb(cb_arg, ZEND_STRL(PHP_HTTP_CRLF) TSRMLS_CC);
+               cb(cb_arg, ZEND_STRL(PHP_HTTP_CRLF));
                php_http_message_body_to_callback(&msg->body, cb, cb_arg, 0, 0);
-               cb(cb_arg, ZEND_STRL(PHP_HTTP_CRLF) TSRMLS_CC);
+               cb(cb_arg, ZEND_STRL(PHP_HTTP_CRLF));
        }
 }
 
@@ -425,11 +426,12 @@ PHP_HTTP_API php_http_message_t *php_http_message_interconnect(php_http_message_
        return m1;
 }
 
-PHP_HTTP_API void php_http_message_to_struct(php_http_message_t *msg, zval *obj TSRMLS_DC)
+PHP_HTTP_API void php_http_message_to_struct(php_http_message_t *msg, zval *obj)
 {
        zval strct;
        zval *headers;
        char *version;
+       TSRMLS_FETCH_FROM_CTX(msg->ts);
        
        INIT_PZVAL_ARRAY(&strct, HASH_OF(obj));
        
@@ -574,7 +576,7 @@ PHP_HTTP_API php_http_message_t *php_http_message_copy(php_http_message_t *from,
                info.type = from->type;
                info.http = from->http;
                
-               copy = temp = php_http_message_init(to, 0);
+               copy = temp = php_http_message_init(to, 0 TSRMLS_CC);
                php_http_message_set_info(temp, &info);
                zend_hash_copy(&temp->hdrs, &from->hdrs, (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *));
                php_http_message_body_copy(&from->body, &temp->body, 1);
@@ -583,7 +585,7 @@ PHP_HTTP_API php_http_message_t *php_http_message_copy(php_http_message_t *from,
                        info.type = from->parent->type;
                        info.http = from->parent->http;
                
-                       temp->parent = php_http_message_init(NULL, 0);
+                       temp->parent = php_http_message_init(NULL, 0 TSRMLS_CC);
                        php_http_message_set_info(temp->parent, &info);
                        zend_hash_copy(&temp->parent->hdrs, &from->parent->hdrs, (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *));
                        php_http_message_body_copy(&from->body, &temp->body, 1);
@@ -1105,7 +1107,7 @@ zend_object_value php_http_message_object_clone(zval *this_ptr TSRMLS_DC)
        php_http_message_object_t *new_obj = NULL;
        php_http_message_object_t *old_obj = zend_object_store_get_object(this_ptr TSRMLS_CC);
 
-       new_ov = php_http_message_object_new_ex(old_obj->zo.ce, php_http_message_copy(old_obj->message, NULL), &new_obj);
+       new_ov = php_http_message_object_new_ex(old_obj->zo.ce, php_http_message_copy(old_obj->message, NULL), &new_obj TSRMLS_CC);
        zend_objects_clone_members(&new_obj->zo, new_ov, &old_obj->zo, Z_OBJ_HANDLE_P(this_ptr) TSRMLS_CC);
 
        return new_ov;
@@ -1288,7 +1290,7 @@ PHP_METHOD(HttpMessage, __construct)
 
                        php_http_message_dtor(msg);
                        with_error_handling(EH_THROW, php_http_exception_class_entry) {
-                               if ((obj->message = php_http_message_parse(msg, message, length))) {
+                               if ((obj->message = php_http_message_parse(msg, message, length TSRMLS_CC))) {
                                        if (obj->message->parent) {
                                                obj->parent = php_http_message_object_new_ex(Z_OBJCE_P(getThis()), obj->message->parent, NULL TSRMLS_CC);
                                        }
index f80cb460e9124d2638d4285cdc3b57990507b37c..ad92a1747efe5dd5cfd6fe25a37bd1bf76445555 100644 (file)
@@ -79,6 +79,7 @@ PHP_HTTP_API php_http_message_body_t *php_http_message_body_copy(php_http_messag
 
 PHP_HTTP_API void php_http_message_body_dtor(php_http_message_body_t *body)
 {
+       TSRMLS_FETCH_FROM_CTX(body->ts);
        /* NO FIXME: shows leakinfo in DEBUG mode */
        zend_list_delete(body->stream_id);
        STR_FREE(body->boundary);
@@ -115,7 +116,7 @@ PHP_HTTP_API const char *php_http_message_body_boundary(php_http_message_body_t
 PHP_HTTP_API char *php_http_message_body_etag(php_http_message_body_t *body)
 {
        TSRMLS_FETCH_FROM_CTX(body->ts);
-       php_stream_statbuf *ssb = php_http_message_body_stat(body);
+       const php_stream_statbuf *ssb = php_http_message_body_stat(body);
 
        /* real file or temp buffer ? */
        if (body->ssb.sb.st_mtime) {
@@ -124,10 +125,10 @@ PHP_HTTP_API char *php_http_message_body_etag(php_http_message_body_t *body)
                spprintf(&etag, 0, "%lx-%lx-%lx", ssb->sb.st_ino, ssb->sb.st_mtime, ssb->sb.st_size);
                return etag;
        } else {
-               void *ctx = php_http_etag_init(TSRMLS_C);
+               php_http_etag_t *etag = php_http_etag_init(PHP_HTTP_G->env.etag_mode TSRMLS_CC);
 
-               php_http_message_body_to_callback(body, php_http_etag_update, ctx, 0, 0);
-               return php_http_etag_finish(ctx TSRMLS_CC);
+               php_http_message_body_to_callback(body, (php_http_pass_callback_t) php_http_etag_update, etag, 0, 0);
+               return php_http_etag_finish(etag);
        }
 }
 
@@ -213,7 +214,6 @@ PHP_HTTP_API size_t php_http_message_body_appendf(php_http_message_body_t *body,
 PHP_HTTP_API STATUS php_http_message_body_add(php_http_message_body_t *body, HashTable *fields, HashTable *files)
 {
        zval tmp;
-       TSRMLS_FETCH_FROM_CTX(body->ts);
 
        if (fields) {
                INIT_PZVAL_ARRAY(&tmp, fields);
@@ -234,7 +234,10 @@ PHP_HTTP_API STATUS php_http_message_body_add(php_http_message_body_t *body, Has
 
 PHP_HTTP_API STATUS php_http_message_body_add_field(php_http_message_body_t *body, const char *name, const char *value_str, size_t value_len)
 {
-       char *safe_name = php_addslashes(estrdup(name), strlen(name), NULL, 1 TSRMLS_CC);
+       char *safe_name;
+       TSRMLS_FETCH_FROM_CTX(body->ts);
+
+       safe_name = php_addslashes(estrdup(name), strlen(name), NULL, 1 TSRMLS_CC);
 
        BOUNDARY_OPEN(body);
        php_http_message_body_appendf(
@@ -313,6 +316,7 @@ static STATUS add_recursive_fields(php_http_message_body_t *body, const char *na
                zval **val;
                HashPosition pos;
                php_http_array_hashkey_t key = php_http_array_hashkey_init(0);
+               TSRMLS_FETCH_FROM_CTX(body->ts);
 
                if (!HASH_OF(value)->nApplyCount) {
                        ++HASH_OF(value)->nApplyCount;
@@ -340,6 +344,7 @@ static STATUS add_recursive_files(php_http_message_body_t *body, const char *nam
 {
        if (Z_TYPE_P(value) == IS_ARRAY || Z_TYPE_P(value) == IS_OBJECT) {
                zval **zfile, **zname, **ztype;
+               TSRMLS_FETCH_FROM_CTX(body->ts);
 
                if ((SUCCESS == zend_hash_find(HASH_OF(value), ZEND_STRS("name"), (void *) &zname))
                &&      (SUCCESS == zend_hash_find(HASH_OF(value), ZEND_STRS("file"), (void *) &zfile))
@@ -377,6 +382,7 @@ static STATUS add_recursive_files(php_http_message_body_t *body, const char *nam
                        }
                }
        } else {
+               TSRMLS_FETCH_FROM_CTX(body->ts);
                php_http_error(HE_WARNING, PHP_HTTP_E_MESSAGE_BODY, "Unrecognized array format for message body file to add");
                return FAILURE;
        }
@@ -471,7 +477,7 @@ zend_object_value php_http_message_body_object_clone(zval *object TSRMLS_DC)
        php_http_message_body_object_t *new_obj = NULL;
        php_http_message_body_object_t *old_obj = zend_object_store_get_object(object TSRMLS_CC);
 
-       new_ov = php_http_message_body_object_new_ex(old_obj->zo.ce, php_http_message_body_copy(old_obj->body, NULL, 1), &new_obj);
+       new_ov = php_http_message_body_object_new_ex(old_obj->zo.ce, php_http_message_body_copy(old_obj->body, NULL, 1), &new_obj TSRMLS_CC);
        zend_objects_clone_members(&new_obj->zo, new_ov, &old_obj->zo, Z_OBJ_HANDLE_P(object) TSRMLS_CC);
 
        return new_ov;
@@ -547,12 +553,16 @@ struct fcd {
        zval *fcz;
        zend_fcall_info *fci;
        zend_fcall_info_cache *fcc;
+#ifdef ZTS
+       void ***ts;
+#endif
 };
 
-static size_t pass(void *cb_arg, const char *str, size_t len TSRMLS_DC)
+static size_t pass(void *cb_arg, const char *str, size_t len)
 {
        struct fcd *fcd = cb_arg;
        zval *zdata;
+       TSRMLS_FETCH_FROM_CTX(fcd->ts);
 
        MAKE_STD_ZVAL(zdata);
        ZVAL_STRINGL(zdata, str, len, 1);
index 4a621a491bf4c0534828a1c0abbcd8d1c7a78d4d..e0ff8d96ca18366f098ebcf21fd408187f0e82d5 100644 (file)
@@ -25,7 +25,7 @@ typedef struct php_http_message_body {
 } php_http_message_body_t;
 
 PHP_HTTP_API php_http_message_body_t *php_http_message_body_init(php_http_message_body_t *body, php_stream *stream TSRMLS_DC);
-PHP_HTTP_API php_http_message_body_t *php_http_message_body_copy(php_http_message_body_t *from, php_http_message_body_t *to, zend_bool dup_internal_stream_and_contents TSRMLS_DC);
+PHP_HTTP_API php_http_message_body_t *php_http_message_body_copy(php_http_message_body_t *from, php_http_message_body_t *to, zend_bool dup_internal_stream_and_contents);
 PHP_HTTP_API STATUS php_http_message_body_add(php_http_message_body_t *body, HashTable *fields, HashTable *files);
 PHP_HTTP_API STATUS php_http_message_body_add_field(php_http_message_body_t *body, const char *name, const char *value_str, size_t value_len);
 PHP_HTTP_API STATUS php_http_message_body_add_file(php_http_message_body_t *body, const char *name, const char *path, const char *ctype);
index 9accc354882ac2374092a6cf9a90765954033038..fce24ed2cffc4e49eae22f457f66c5dad3303f9f 100644 (file)
@@ -74,10 +74,10 @@ PHP_HTTP_API void php_http_message_parser_dtor(php_http_message_parser_t *parser
        php_http_header_parser_dtor(&parser->header);
        zend_stack_destroy(&parser->stack);
        if (parser->dechunk) {
-               php_http_encoding_stream_free(&parser->dechunk TSRMLS_CC);
+               php_http_encoding_stream_free(&parser->dechunk);
        }
        if (parser->inflate) {
-               php_http_encoding_stream_free(&parser->inflate TSRMLS_CC);
+               php_http_encoding_stream_free(&parser->inflate);
        }
 }
 
@@ -277,7 +277,7 @@ PHP_HTTP_API php_http_message_parser_state_t php_http_message_parser_parse(php_h
                                                char *dec_str = NULL;
                                                size_t dec_len;
 
-                                               if (SUCCESS != php_http_encoding_stream_update(parser->inflate, str, len, &dec_str, &dec_len TSRMLS_CC)) {
+                                               if (SUCCESS != php_http_encoding_stream_update(parser->inflate, str, len, &dec_str, &dec_len)) {
                                                        return php_http_message_parser_state_push(parser, 1, PHP_HTTP_MESSAGE_PARSER_STATE_FAILURE);
                                                }
 
@@ -345,7 +345,7 @@ PHP_HTTP_API php_http_message_parser_state_t php_http_message_parser_parse(php_h
                                char *dec_str = NULL;
                                size_t dec_len;
 
-                               if (SUCCESS != php_http_encoding_stream_update(parser->dechunk, buffer->data, buffer->used, &dec_str, &dec_len TSRMLS_CC)) {
+                               if (SUCCESS != php_http_encoding_stream_update(parser->dechunk, buffer->data, buffer->used, &dec_str, &dec_len)) {
                                        return FAILURE;
                                }
 
@@ -370,7 +370,7 @@ PHP_HTTP_API php_http_message_parser_state_t php_http_message_parser_parse(php_h
                                        char *dec_str = NULL;
                                        size_t dec_len;
 
-                                       if (SUCCESS != php_http_encoding_stream_finish(parser->dechunk, &dec_str, &dec_len TSRMLS_CC)) {
+                                       if (SUCCESS != php_http_encoding_stream_finish(parser->dechunk, &dec_str, &dec_len)) {
                                                return php_http_message_parser_state_push(parser, 1, PHP_HTTP_MESSAGE_PARSER_STATE_FAILURE);
                                        }
                                        php_http_encoding_stream_dtor(parser->dechunk);
index 8caa319cf7310aa8d7e5dd32652572ee2e5fc126..377aa9af4a925790770924ea9749607ca3732f14 100644 (file)
@@ -195,7 +195,7 @@ static inline int scope_error_handling(long type TSRMLS_DC)
                return EH_THROW;
        }
 
-       if (EG(This) && instanceof_function(Z_OBJCE_P(EG(This)), php_http_object_class_entry)) {
+       if (EG(This) && instanceof_function(Z_OBJCE_P(EG(This)), php_http_object_class_entry TSRMLS_CC)) {
                return php_http_object_get_error_handling(EG(This) TSRMLS_CC);
        }
 
@@ -212,7 +212,7 @@ void php_http_error(long type TSRMLS_DC, long code, const char *format, ...)
                        char *message;
                        zend_class_entry *ce = php_http_exception_class_entry;
 
-                       if (0&& EG(exception_class) && instanceof_function(EG(exception_class), php_http_exception_class_entry)) {
+                       if (0&& EG(exception_class) && instanceof_function(EG(exception_class), php_http_exception_class_entry TSRMLS_CC)) {
                                ce = EG(exception_class);
                        }
 
index f0bc293cd3a6c9c7c988a41a43dbec52105e5433..99f7cf5bacf3f1687523b643ed47b1713e3b3311 100644 (file)
@@ -215,6 +215,7 @@ static STATUS set_options(php_http_request_t *h, HashTable *options)
        zval *zoption;
        int range_req = 0;
        php_http_neon_request_t *neon = h->ctx;
+       TSRMLS_FETCH_FROM_CTX(h->ts);
 
        /* proxy */
        if ((zoption = get_option(&neon->options.cache, options, ZEND_STRS("proxyhost"), IS_STRING))) {
@@ -353,7 +354,8 @@ static STATUS set_options(php_http_request_t *h, HashTable *options)
 
                if (PHP_HTTP_BUFFER_LEN(&rs)) {
                        /* ignore last comma */
-                       php_http_buffer_appendf(&neon->options.headers, "Range: bytes=%.*s" PHP_HTTP_CRLF, rs.used - 1, rs.data);
+                       int used = rs.used > INT_MAX ? INT_MAX : rs.used;
+                       php_http_buffer_appendf(&neon->options.headers, "Range: bytes=%.*s" PHP_HTTP_CRLF, used - 1, rs.data);
                        range_req = 1;
                }
                php_http_buffer_dtor(&rs);
@@ -536,12 +538,13 @@ static php_http_request_t *php_http_neon_request_copy(php_http_request_t *from,
 static void php_http_neon_request_dtor(php_http_request_t *h)
 {
        php_http_neon_request_t *ctx = h->ctx;
+       TSRMLS_FETCH_FROM_CTX(h->ts);
 
        php_http_neon_request_reset(h);
        php_http_buffer_dtor(&ctx->options.headers);
        zend_hash_destroy(&ctx->options.cache);
 
-       php_http_request_progress_dtor(&ctx->progress);
+       php_http_request_progress_dtor(&ctx->progress TSRMLS_CC);
 
        efree(ctx);
        h->ctx = NULL;
@@ -550,6 +553,7 @@ static void php_http_neon_request_dtor(php_http_request_t *h)
 static STATUS php_http_neon_request_reset(php_http_request_t *h)
 {
        php_http_neon_request_t *neon = h->ctx;
+       TSRMLS_FETCH_FROM_CTX(h->ts);
 
        php_http_buffer_reset(&neon->options.headers);
        STR_SET(neon->options.useragent, NULL);
@@ -585,7 +589,7 @@ static STATUS php_http_neon_request_reset(php_http_request_t *h)
        neon->options.timeout.read = 0;
        neon->options.timeout.connect = 0;
 
-       php_http_request_progress_dtor(&neon->progress);
+       php_http_request_progress_dtor(&neon->progress TSRMLS_CC);
 
        return SUCCESS;
 }
@@ -602,7 +606,7 @@ static STATUS php_http_neon_request_exec(php_http_request_t *h, php_http_request
        php_http_neon_request_t *neon = h->ctx;
        TSRMLS_FETCH_FROM_CTX(h->ts);
 
-       if (!(meth = php_http_request_method_name(meth_id))) {
+       if (!(meth = php_http_request_method_name(meth_id TSRMLS_CC))) {
                php_http_error(HE_WARNING, PHP_HTTP_E_REQUEST_METHOD, "Unsupported request method: %d (%s)", meth, url);
                return FAILURE;
        }
@@ -757,6 +761,7 @@ retry:
 static STATUS php_http_neon_request_setopt(php_http_request_t *h, php_http_request_setopt_opt_t opt, void *arg)
 {
        php_http_neon_request_t *neon = h->ctx;
+       TSRMLS_FETCH_FROM_CTX(h->ts);
 
        switch (opt) {
                case PHP_HTTP_REQUEST_OPT_SETTINGS:
index 2cc9a0912ffee8d4eddfe012e8c3a54f68657f80..b056048018de5dbb038acdccba96f27805ca92c8 100644 (file)
@@ -16,7 +16,6 @@
 
 PHP_HTTP_API void php_http_params_parse_default_func(void *arg, const char *key, int keylen, const char *val, int vallen TSRMLS_DC)
 {
-       char *kdup;
        zval tmp, *entry;
        HashTable *ht = (HashTable *) arg;
 
@@ -27,15 +26,13 @@ PHP_HTTP_API void php_http_params_parse_default_func(void *arg, const char *key,
                        MAKE_STD_ZVAL(entry);
                        array_init(entry);
                        if (keylen) {
-                               kdup = estrndup(key, keylen);
-                               add_assoc_stringl_ex(entry, kdup, keylen + 1, (char *) val, vallen, 1);
-                               efree(kdup);
+                               add_assoc_stringl_ex(entry, key, keylen + 1, estrndup(val, vallen), vallen, 0);
                        } else {
-                               add_next_index_stringl(entry, (char *) val, vallen, 1);
+                               add_next_index_stringl(entry, val, vallen, 1);
                        }
                        add_next_index_zval(&tmp, entry);
                } else {
-                       add_next_index_stringl(&tmp, (char *) key, keylen, 1);
+                       add_next_index_stringl(&tmp, key, keylen, 1);
                }
        }
 }
index 55d53d0059e43f84cf8276ba3a62b70ebb754119..720e8e6f6d0daad292f43293159e49cf701250a8 100644 (file)
@@ -182,6 +182,7 @@ static void php_http_persistent_handles_hash_dtor(void *p)
        php_http_persistent_handle_provider_t *provider = (php_http_persistent_handle_provider_t *) p;
        php_http_persistent_handle_list_t **list, *list_tmp;
        HashPosition pos;
+       TSRMLS_FETCH();
        
        FOREACH_HASH_VAL(pos, &provider->list.free, list) {
                /* fix shutdown crash in PHP4 */
@@ -304,7 +305,7 @@ PHP_HTTP_API void *php_http_persistent_handle_accrete(php_http_persistent_handle
 PHP_HTTP_API void php_http_persistent_handle_release(php_http_persistent_handle_factory_t *a, void *handle TSRMLS_DC)
 {
        LOCK();
-       php_http_persistent_handle_do_release(a->provider, a->ident.str, a->ident.len, &handle);
+       php_http_persistent_handle_do_release(a->provider, a->ident.str, a->ident.len, &handle TSRMLS_CC);
        UNLOCK();
 }
 
index 6b8d444b4e00169eea131083350d02e0560e5f6f..61b939500913722468dcbd667c2f3b7f318383bf 100644 (file)
@@ -29,8 +29,8 @@ PHP_HTTP_API php_http_request_t *php_http_request_init(php_http_request_t *h, ph
        memset(h, 0, sizeof(*h));
 
        h->ops = ops;
-       h->rf = rf ? rf : php_http_resource_factory_init(NULL, h->ops->rsrc, NULL, NULL TSRMLS_CC);
-       h->buffer = php_http_buffer_init(NULL TSRMLS_CC);
+       h->rf = rf ? rf : php_http_resource_factory_init(NULL, h->ops->rsrc, NULL, NULL);
+       h->buffer = php_http_buffer_init(NULL);
        h->parser = php_http_message_parser_init(NULL TSRMLS_CC);
        h->message = php_http_message_init(NULL, 0 TSRMLS_CC);
 
@@ -539,7 +539,7 @@ STATUS php_http_request_object_responsehandler(php_http_request_object_t *obj, z
        return ret;
 }
 
-static int apply_pretty_key(void *pDest, int num_args, va_list args, zend_hash_key *hash_key)
+static int apply_pretty_key(void *pDest TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key)
 {
        if (hash_key->arKey && hash_key->nKeyLength > 1) {
                hash_key->h = zend_hash_func(php_http_pretty_key(hash_key->arKey, hash_key->nKeyLength - 1, 1, 0), hash_key->nKeyLength);
index f44d5b053f5232cc2095bd7765a076458c13a02f..dec1ffa251faa7c328f38a7459bff307f7d15112 100644 (file)
@@ -1,6 +1,7 @@
 
 #include "php_http.h"
 
+#include <curl/curl.h>
 #include <ext/standard/php_string.h>
 #include <ext/spl/spl_iterators.h>
 
@@ -55,7 +56,7 @@ PHP_HTTP_API php_http_request_datashare_t *php_http_request_datashare_init(php_h
                TSRMLS_SET_CTX(h->ts);
        }
        h->ops = ops;
-       h->rf = rf ? rf : php_http_resource_factory_init(NULL, h->ops->rsrc, NULL, NULL TSRMLS_CC);
+       h->rf = rf ? rf : php_http_resource_factory_init(NULL, h->ops->rsrc, NULL, NULL);
 
        if (h->ops->init) {
                if (!(h = h->ops->init(h, init_arg))) {
@@ -152,11 +153,11 @@ static void detach(void *r, void *h TSRMLS_DC)
 
 PHP_HTTP_API void php_http_request_datashare_reset(php_http_request_datashare_t *h)
 {
+       TSRMLS_FETCH_FROM_CTX(h->ts);
+
        if (h->ops->reset) {
                h->ops->reset(h);
        } else if (h->ops->detach) {
-               TSRMLS_FETCH_FROM_CTX(h->ts);
-
                zend_llist_apply_with_argument(PHP_HTTP_REQUEST_DATASHARE_REQUESTS(h), detach, h TSRMLS_CC);
        }
 
@@ -237,7 +238,7 @@ void php_http_request_datashare_object_free(void *object TSRMLS_DC)
        if (!o->share->persistent) {
                php_http_request_datashare_free(&o->share);
        }
-       zend_object_std_dtor((zend_object *) o);
+       zend_object_std_dtor((zend_object *) o TSRMLS_CC);
        efree(o);
 }
 
index be5cb7d938fa62f4a30f543df85dd1b68d9c75d5..1e61e5915138fba2bb2003d32f0b9b2f76e4c965 100644 (file)
@@ -89,7 +89,7 @@ PHP_METHOD(HttpRequestFactory, __construct)
                                FOREACH_HASH_KEYVAL(pos, options, key, val) {
                                        if (key.type == HASH_KEY_IS_STRING) {
                                                zval *newval = php_http_zsep(1, Z_TYPE_PP(val), *val);
-                                               zend_update_property(php_http_request_factory_class_entry, getThis(), key.str, key.len - 1, newval);
+                                               zend_update_property(php_http_request_factory_class_entry, getThis(), key.str, key.len - 1, newval TSRMLS_CC);
                                                zval_ptr_dtor(&newval);
                                        }
                                }
@@ -140,7 +140,7 @@ PHP_METHOD(HttpRequestFactory, createRequest)
                                                                        (php_http_resource_factory_handle_dtor_t) php_http_persistent_handle_release
                                                        };
 
-                                                       rf = php_http_resource_factory_init(NULL, &ops, pf, (void (*)(void *)) php_http_persistent_handle_abandon TSRMLS_CC);
+                                                       rf = php_http_resource_factory_init(NULL, &ops, pf, (void (*)(void *)) php_http_persistent_handle_abandon);
                                                }
 
                                                efree(name_str);
@@ -217,7 +217,7 @@ PHP_METHOD(HttpRequestFactory, createPool)
                                                                        (php_http_resource_factory_handle_dtor_t) php_http_persistent_handle_release
                                                        };
 
-                                                       rf = php_http_resource_factory_init(NULL, &ops, pf, (void (*)(void *)) php_http_persistent_handle_abandon TSRMLS_CC);
+                                                       rf = php_http_resource_factory_init(NULL, &ops, pf, (void (*)(void *)) php_http_persistent_handle_abandon);
                                                }
 
                                                efree(name_str);
@@ -284,7 +284,7 @@ PHP_METHOD(HttpRequestFactory, createDataShare)
                                                                        (php_http_resource_factory_handle_dtor_t) php_http_persistent_handle_release
                                                        };
 
-                                                       rf = php_http_resource_factory_init(NULL, &ops, pf, (void (*)(void *)) php_http_persistent_handle_abandon TSRMLS_CC);
+                                                       rf = php_http_resource_factory_init(NULL, &ops, pf, (void (*)(void *)) php_http_persistent_handle_abandon);
                                                }
 
                                                efree(name_str);
index d159ad861cba57d0f2af94d7e6c4fccbaf1a2c38..3ca0b5548cc9813383b87d9bb6ebe36f38eb122d 100644 (file)
@@ -52,7 +52,7 @@ static PHP_HTTP_STRLIST(php_http_request_methods) =
        PHP_HTTP_STRLIST_STOP
 ;
 
-PHP_HTTP_API const char *php_http_request_method_name(php_http_request_method_t meth)
+PHP_HTTP_API const char *php_http_request_method_name(php_http_request_method_t meth TSRMLS_DC)
 {
        if (meth > PHP_HTTP_NO_REQUEST_METHOD && meth < PHP_HTTP_MAX_REQUEST_METHOD) {
                return php_http_strlist_find(php_http_request_methods, 0, meth);
index 6c29e80c5e03e5f940acabb4b951eae720b23e59..bb2efc7992c6737e4bf0ff609b6053e7fe194604 100644 (file)
@@ -53,7 +53,7 @@ typedef enum php_http_request_method {
        PHP_HTTP_MAX_REQUEST_METHOD     = 28
 } php_http_request_method_t;
 
-PHP_HTTP_API const char *php_http_request_method_name(php_http_request_method_t meth);
+PHP_HTTP_API const char *php_http_request_method_name(php_http_request_method_t meth TSRMLS_DC);
 PHP_HTTP_API STATUS php_http_request_method_register(const char *meth_str, size_t meth_len, long *id TSRMLS_DC);
 
 extern zend_class_entry *php_http_request_method_class_entry;
index 379e3b152d4ee202d5b30c9c3f7d48ddb8d62bb3..96a3a1a0190cad71aeac8922d413ea9a51113764 100644 (file)
@@ -14,7 +14,7 @@ PHP_HTTP_API php_http_request_pool_t *php_http_request_pool_init(php_http_reques
        memset(h, 0, sizeof(*h));
 
        h->ops = ops;
-       h->rf = rf ? rf : php_http_resource_factory_init(NULL, h->ops->rsrc, NULL, NULL TSRMLS_CC);
+       h->rf = rf ? rf : php_http_resource_factory_init(NULL, h->ops->rsrc, NULL, NULL);
        zend_llist_init(&h->requests.attached, sizeof(zval *), (llist_dtor_func_t) ZVAL_PTR_DTOR, 0);
        zend_llist_init(&h->requests.finished, sizeof(zval *), (llist_dtor_func_t) ZVAL_PTR_DTOR, 0);
        TSRMLS_SET_CTX(h->ts);
@@ -72,7 +72,7 @@ PHP_HTTP_API STATUS php_http_request_pool_attach(php_http_request_pool_t *h, zva
                php_http_message_body_t *body = NULL;
                php_http_request_object_t *obj = zend_object_store_get_object(request TSRMLS_CC);
 
-               if (SUCCESS != php_http_request_object_requesthandler(obj, request, &m, &url, &body)) {
+               if (SUCCESS != php_http_request_object_requesthandler(obj, request, &m, &url, &body TSRMLS_CC)) {
                        return FAILURE;
                }
                if (SUCCESS == h->ops->attach(h, obj->request, m, url, body)) {
@@ -130,8 +130,6 @@ PHP_HTTP_API int php_http_request_pool_once(php_http_request_pool_t *h)
 
 PHP_HTTP_API STATUS php_http_request_pool_exec(php_http_request_pool_t *h)
 {
-       TSRMLS_FETCH_FROM_CTX(h->ts);
-
        if (h->ops->exec) {
                return h->ops->exec(h);
        }
index 0bfd6576e70f63a80b2a40835460bcbcb367262f..79966b601774dc81a4ffdeffa1f0684c572e9a1d 100644 (file)
@@ -340,7 +340,7 @@ PHP_HTTP_API STATUS php_http_url_encode_hash(HashTable *hash, zend_bool override
                php_http_buffer_append(qstr, pre_encoded_data, pre_encoded_len);
        }
 
-       if (SUCCESS != php_http_url_encode_hash_recursive(hash, qstr, arg_sep, arg_sep_len, NULL, 0)) {
+       if (SUCCESS != php_http_url_encode_hash_recursive(hash, qstr, arg_sep, arg_sep_len, NULL, 0 TSRMLS_CC)) {
                php_http_buffer_free(&qstr);
                return FAILURE;
        }