From: Michael Wallner Date: Thu, 1 Sep 2005 07:05:31 +0000 (+0000) Subject: - prepare for working static properties in PHP_5_1 X-Git-Tag: RELEASE_0_13_0~39 X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=commitdiff_plain;h=6cb8b71e819cbeef5bc5383a64452a36f56de17f;hp=83c0f4ae82791064502054f389b18f27b9a338dd - prepare for working static properties in PHP_5_1 - no HttpResponse class in PHP_5_0 (codename WONKY) --- diff --git a/http.c b/http.c index 599cc7e..dc8d7dd 100644 --- a/http.c +++ b/http.c @@ -224,7 +224,9 @@ PHP_MINIT_FUNCTION(http) #ifdef ZEND_ENGINE_2 http_util_object_init(); http_message_object_init(); +# ifndef WONKY http_response_object_init(); +# endif # ifdef HTTP_HAVE_CURL http_request_object_init(); http_requestpool_object_init(); @@ -232,10 +234,6 @@ PHP_MINIT_FUNCTION(http) http_exception_object_init(); #endif /* ZEND_ENGINE_2 */ -#ifdef ZEND_ENGINE_2 - zend_hash_init_ex(&http_response_statics, 0, NULL, ZVAL_INTERNAL_PTR_DTOR, 1, 0); - zend_fix_static_properties(http_response_object_ce, &http_response_statics TSRMLS_CC); -#endif return SUCCESS; } /* }}} */ @@ -243,9 +241,6 @@ PHP_MINIT_FUNCTION(http) /* {{{ PHP_MSHUTDOWN_FUNCTION */ PHP_MSHUTDOWN_FUNCTION(http) { -#ifdef ZEND_ENGINE_2 - zend_hash_destroy(&http_response_statics); -#endif UNREGISTER_INI_ENTRIES(); #ifdef HTTP_HAVE_CURL curl_global_cleanup(); @@ -264,9 +259,6 @@ PHP_RINIT_FUNCTION(http) } http_globals_init(HTTP_GLOBALS); -#ifdef ZEND_ENGINE_2 - zend_init_static_properties(http_response_object_ce, &http_response_statics TSRMLS_CC); -#endif return SUCCESS; } /* }}} */ @@ -274,9 +266,6 @@ PHP_RINIT_FUNCTION(http) /* {{{ PHP_RSHUTDOWN_FUNCTION */ PHP_RSHUTDOWN_FUNCTION(http) { -#ifdef ZEND_ENGINE_2 - zend_clean_static_properties(http_response_object_ce TSRMLS_CC); -#endif http_globals_free(HTTP_GLOBALS); return SUCCESS; } diff --git a/http_response_object.c b/http_response_object.c index 666040b..d85d366 100644 --- a/http_response_object.c +++ b/http_response_object.c @@ -21,7 +21,10 @@ #endif #include "php.h" -#ifdef ZEND_ENGINE_2 +#include "missing.h" + +/* broken static properties in PHP 5.0 */ +#if defined(ZEND_ENGINE_2) && !defined(WONKY) #include "SAPI.h" #include "php_ini.h" @@ -34,8 +37,6 @@ #include "php_http_send_api.h" #include "php_http_cache_api.h" -#include "missing.h" - ZEND_EXTERN_MODULE_GLOBALS(http); #define GET_STATIC_PROP(n) *GET_STATIC_PROP_EX(http_response_object_ce, n) @@ -142,7 +143,9 @@ HTTP_EMPTY_ARGS(getRequestBody, 0); #define http_response_object_declare_default_properties() _http_response_object_declare_default_properties(TSRMLS_C) static inline void _http_response_object_declare_default_properties(TSRMLS_D); +#if BROKEN_STATICS HashTable http_response_statics; +#endif zend_class_entry *http_response_object_ce; zend_function_entry http_response_object_fe[] = { @@ -879,7 +882,7 @@ PHP_METHOD(HttpResponse, send) case SEND_DATA: { zval *zdata = GET_STATIC_PROP(data); - RETURN_SUCCESS(http_send_data(Z_STRVAL_P(zdata), Z_STRLEN_P(zdata))); + RETURN_SUCCESS(http_send_data_ex(Z_STRVAL_P(zdata), Z_STRLEN_P(zdata), 1)); } case SEND_RSRC: @@ -888,12 +891,12 @@ PHP_METHOD(HttpResponse, send) zval *the_stream = GET_STATIC_PROP(stream); the_stream->type = IS_RESOURCE; php_stream_from_zval(the_real_stream, &the_stream); - RETURN_SUCCESS(http_send_stream(the_real_stream)); + RETURN_SUCCESS(http_send_stream_ex(the_real_stream, 0, 1)); } default: { - RETURN_SUCCESS(http_send_file(Z_STRVAL_P(GET_STATIC_PROP(file)))); + RETURN_SUCCESS(http_send_file_ex(Z_STRVAL_P(GET_STATIC_PROP(file)), 1)); } } } diff --git a/missing.c b/missing.c index 3e7dbfa..4b191ae 100644 --- a/missing.c +++ b/missing.c @@ -18,33 +18,7 @@ #include "php.h" #include "missing.h" -#if PHP_MAJOR_VERSION == 5 - -static inline zval *new_zval(int persistent) -{ - zval *z = pemalloc(sizeof(zval), persistent); - INIT_PZVAL(z); - return z; -} - -static inline zval *tmp_zval(void) -{ - zval *z; - ALLOC_ZVAL(z); - z->is_ref = 0; - z->refcount = 0; - return z; -} - -static void dup_zval(zval **z) -{ - zval_add_ref(z); - SEPARATE_ZVAL(z); -} - - -# if PHP_MINOR_VERSION == 0 - +#ifdef WONKY int zend_declare_property_double(zend_class_entry *ce, char *name, int name_length, double value, int access_type TSRMLS_DC) { zval *property = new_zval(ce->type & ZEND_INTERNAL_CLASS); @@ -72,137 +46,7 @@ void zend_update_property_bool(zend_class_entry *scope, zval *object, char *name ZVAL_BOOL(tmp, value); zend_update_property(scope, object, name, name_length, tmp TSRMLS_CC); } - -# endif /* PHP_MINOR_VERSION == 0 */ - -int zend_declare_class_constant(zend_class_entry *ce, char *name, size_t name_length, zval *value TSRMLS_DC) -{ - return zend_hash_add(&ce->constants_table, name, name_length, &value, sizeof(zval *), NULL); -} - -int zend_declare_class_constant_long(zend_class_entry *ce, char *name, size_t name_length, long value TSRMLS_DC) -{ - zval *constant = new_zval(ce->type & ZEND_INTERNAL_CLASS); - ZVAL_LONG(constant, value); - return zend_declare_class_constant(ce, name, name_length, constant TSRMLS_CC); -} - -int zend_declare_class_constant_bool(zend_class_entry *ce, char *name, size_t name_length, zend_bool value TSRMLS_DC) -{ - zval *constant = new_zval(ce->type & ZEND_INTERNAL_CLASS); - ZVAL_BOOL(constant, value); - return zend_declare_class_constant(ce, name, name_length, constant TSRMLS_CC); -} - -int zend_declare_class_constant_double(zend_class_entry *ce, char *name, size_t name_length, double value TSRMLS_DC) -{ - zval *constant = new_zval(ce->type & ZEND_INTERNAL_CLASS); - ZVAL_DOUBLE(constant, value); - return zend_declare_class_constant(ce, name, name_length, constant TSRMLS_CC); -} - -int zend_declare_class_constant_string(zend_class_entry *ce, char *name, size_t name_length, char *value TSRMLS_DC) -{ - return zend_declare_class_constant_stringl(ce, name, name_length, value, strlen(value) TSRMLS_CC); -} - -int zend_declare_class_constant_stringl(zend_class_entry *ce, char *name, size_t name_length, char *value, size_t value_length TSRMLS_DC) -{ - zval *constant = new_zval(ce->type & ZEND_INTERNAL_CLASS); - if (ce->type & ZEND_INTERNAL_CLASS) { - ZVAL_STRINGL(constant, zend_strndup(value, value_length), value_length, 0); - } else { - ZVAL_STRINGL(constant, value, value_length, 1); - } - return zend_declare_class_constant(ce, name, name_length, constant TSRMLS_CC); -} - -int zend_update_static_property(zend_class_entry *scope, char *name, size_t name_len, zval *value TSRMLS_DC) -{ - int retval; - zval **property = NULL; - zend_class_entry *old_scope = EG(scope); - - EG(scope) = scope; - - if (!(property = zend_std_get_static_property(scope, name, name_len, 0 TSRMLS_CC))) { - retval = FAILURE; - } else if (*property == value) { - retval = SUCCESS; - } else { - value->refcount++; - if (PZVAL_IS_REF(*property)) { - zval_dtor(*property); - (*property)->type = value->type; - (*property)->value = value->value; - - if (value->refcount) { - zval_copy_ctor(*property); - } - } else { - REPLACE_ZVAL_VALUE(property, value, 1); - } - retval = SUCCESS; - } - zval_ptr_dtor(&value); - EG(scope) = old_scope; - - return retval; -} - -int zend_update_static_property_bool(zend_class_entry *scope, char *name, size_t name_len, zend_bool value TSRMLS_DC) -{ - zval *tmp = tmp_zval(); - ZVAL_BOOL(tmp, value); - return zend_update_static_property(scope, name, name_len, tmp TSRMLS_CC); -} - -int zend_update_static_property_long(zend_class_entry *scope, char *name, size_t name_len, long value TSRMLS_DC) -{ - zval *tmp = tmp_zval(); - ZVAL_LONG(tmp, value); - return zend_update_static_property(scope, name, name_len, tmp TSRMLS_CC); -} - -int zend_update_static_property_double(zend_class_entry *scope, char *name, size_t name_len, double value TSRMLS_DC) -{ - zval *tmp = tmp_zval(); - ZVAL_DOUBLE(tmp, value); - return zend_update_static_property(scope, name, name_len, tmp TSRMLS_CC); -} - -int zend_update_static_property_string(zend_class_entry *scope, char *name, size_t name_len, char *value TSRMLS_DC) -{ - zval *tmp = tmp_zval(); - ZVAL_STRING(tmp, value, 1); - return zend_update_static_property(scope, name, name_len, tmp TSRMLS_CC); -} - -int zend_update_static_property_stringl(zend_class_entry *scope, char *name, size_t name_len, char *value, size_t value_len TSRMLS_DC) -{ - zval *tmp = tmp_zval(); - ZVAL_STRINGL(tmp, value, value_len, 1); - return zend_update_static_property(scope, name, name_len, tmp TSRMLS_CC); -} - -void zend_fix_static_properties(zend_class_entry *ce, HashTable *static_members TSRMLS_DC) -{ - zend_hash_copy(static_members, ce->static_members, (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *)); - zend_hash_destroy(ce->static_members); - zend_hash_init_ex(ce->static_members, static_members->nNumOfElements, NULL, ZVAL_PTR_DTOR, 1, 0); -} - -void zend_init_static_properties(zend_class_entry *ce, HashTable *static_members TSRMLS_DC) -{ - zend_hash_copy(ce->static_members, static_members, (copy_ctor_func_t) dup_zval, NULL, sizeof(zval *)); -} - -void zend_clean_static_properties(zend_class_entry *ce TSRMLS_DC) -{ - zend_hash_clean(ce->static_members); -} - -#endif /* PHP_MAJOR_VERSION == 5 */ +#endif /* * Local variables: diff --git a/missing.h b/missing.h index 519fbfc..d1f53e5 100644 --- a/missing.h +++ b/missing.h @@ -20,35 +20,18 @@ #include "php_version.h" -#if (PHP_MAJOR_VERSION == 5) -# if (PHP_MINOR_VERSION == 0) +#if (PHP_MAJOR_VERSION == 5) && (PHP_MINOR_VERSION == 0) +# define WONKY +#endif + +#ifdef WONKY extern int zend_declare_property_double(zend_class_entry *ce, char *name, int name_length, double value, int access_type TSRMLS_DC); extern void zend_update_property_double(zend_class_entry *scope, zval *object, char *name, int name_length, double value TSRMLS_DC); extern int zend_declare_property_bool(zend_class_entry *ce, char *name, int name_length, long value, int access_type TSRMLS_DC); extern void zend_update_property_bool(zend_class_entry *scope, zval *object, char *name, int name_length, long value TSRMLS_DC); -# endif - -extern int zend_declare_class_constant(zend_class_entry *ce, char *name, size_t name_length, zval *value TSRMLS_DC); -extern int zend_declare_class_constant_null(zend_class_entry *ce, char *name, size_t name_length TSRMLS_DC); -extern int zend_declare_class_constant_long(zend_class_entry *ce, char *name, size_t name_length, long value TSRMLS_DC); -extern int zend_declare_class_constant_bool(zend_class_entry *ce, char *name, size_t name_length, zend_bool value TSRMLS_DC); -extern int zend_declare_class_constant_double(zend_class_entry *ce, char *name, size_t name_length, double value TSRMLS_DC); -extern int zend_declare_class_constant_string(zend_class_entry *ce, char *name, size_t name_length, char *value TSRMLS_DC); -extern int zend_declare_class_constant_stringl(zend_class_entry *ce, char *name, size_t name_length, char *value, size_t value_length TSRMLS_DC); - -extern int zend_update_static_property(zend_class_entry *scope, char *name, size_t name_len, zval *value TSRMLS_DC); -extern int zend_update_static_property_bool(zend_class_entry *scope, char *name, size_t name_len, zend_bool value TSRMLS_DC); -extern int zend_update_static_property_long(zend_class_entry *scope, char *name, size_t name_len, long value TSRMLS_DC); -extern int zend_update_static_property_double(zend_class_entry *scope, char *name, size_t name_len, double value TSRMLS_DC); -extern int zend_update_static_property_string(zend_class_entry *scope, char *name, size_t name_len, char *value TSRMLS_DC); -extern int zend_update_static_property_stringl(zend_class_entry *scope, char *name, size_t name_len, char *value, size_t value_len TSRMLS_DC); - -extern void zend_fix_static_properties(zend_class_entry *ce, HashTable *static_members TSRMLS_DC); -extern void zend_init_static_properties(zend_class_entry *ce, HashTable *static_members TSRMLS_DC); -extern void zend_clean_static_properties(zend_class_entry *ce TSRMLS_DC); - #endif + #endif /* diff --git a/php_http_response_object.h b/php_http_response_object.h index 8a8e41b..6472a31 100644 --- a/php_http_response_object.h +++ b/php_http_response_object.h @@ -19,7 +19,9 @@ #define PHP_HTTP_RESPONSE_OBJECT_H #ifdef ZEND_ENGINE_2 -extern HashTable http_response_statics; +#include "missing.h" + +#ifndef WONKY extern zend_class_entry *http_response_object_ce; extern zend_function_entry http_response_object_fe[]; @@ -60,6 +62,7 @@ PHP_METHOD(HttpResponse, status); PHP_METHOD(HttpResponse, getRequestHeaders); PHP_METHOD(HttpResponse, getRequestBody); +#endif #endif #endif