summaryrefslogtreecommitdiffstats
path: root/45.patch
diff options
context:
space:
mode:
Diffstat (limited to '45.patch')
-rw-r--r--45.patch184
1 files changed, 184 insertions, 0 deletions
diff --git a/45.patch b/45.patch
new file mode 100644
index 0000000..4ba34e6
--- /dev/null
+++ b/45.patch
@@ -0,0 +1,184 @@
+From 53d972905a9f36edd86daf7381e5a9d3f99a962c Mon Sep 17 00:00:00 2001
+From: Remi Collet <remi@remirepo.net>
+Date: Thu, 28 Feb 2019 11:34:36 +0100
+Subject: [PATCH] fix for ZTS
+
+---
+ timecop_php7.c | 61 ++++++++++++++++++++++++++++----------------------
+ 1 file changed, 34 insertions(+), 27 deletions(-)
+
+diff --git a/timecop_php7.c b/timecop_php7.c
+index 8d7faec..ea912f2 100644
+--- a/timecop_php7.c
++++ b/timecop_php7.c
+@@ -311,12 +311,17 @@ static inline void _call_php_function_with_2_params(const char *function_name, z
+ static void _call_php_function_with_3_params(const char *function_name, zval *retval_ptr, zval *arg1, zval *arg2, zval *arg3);
+ static inline void _call_php_function_with_params(const char *function_name, zval *retval_ptr, uint32_t param_count, zval params[]);
+
++static const zend_module_dep timecop_module_deps[] = {
++ ZEND_MOD_REQUIRED("Date")
++ ZEND_MOD_END
++};
++
+ /* {{{ timecop_module_entry
+ */
+ zend_module_entry timecop_module_entry = {
+-#if ZEND_MODULE_API_NO >= 20010901
+- STANDARD_MODULE_HEADER,
+-#endif
++ STANDARD_MODULE_HEADER_EX,
++ NULL,
++ timecop_module_deps,
+ "timecop",
+ timecop_functions,
+ PHP_MINIT(timecop),
+@@ -355,6 +360,14 @@ PHP_MINIT_FUNCTION(timecop)
+ ZEND_INIT_MODULE_GLOBALS(timecop, timecop_globals_ctor, NULL);
+ REGISTER_INI_ENTRIES();
+ register_timecop_classes();
++
++ if (TIMECOP_G(func_override)) {
++ if (SUCCESS != timecop_func_override() ||
++ SUCCESS != timecop_class_override()) {
++ return FAILURE;
++ }
++ }
++
+ return SUCCESS;
+ }
+ /* }}} */
+@@ -364,6 +377,12 @@ PHP_MINIT_FUNCTION(timecop)
+ PHP_MSHUTDOWN_FUNCTION(timecop)
+ {
+ UNREGISTER_INI_ENTRIES();
++
++ if (TIMECOP_G(func_override)) {
++ timecop_func_override_clear();
++ timecop_class_override_clear();
++ }
++
+ return SUCCESS;
+ }
+ /* }}} */
+@@ -375,13 +394,6 @@ PHP_RINIT_FUNCTION(timecop)
+ ZEND_TSRMLS_CACHE_UPDATE();
+ #endif
+
+- if (TIMECOP_G(func_override)) {
+- if (SUCCESS != timecop_func_override() ||
+- SUCCESS != timecop_class_override()) {
+- return FAILURE;
+- }
+- }
+-
+ return SUCCESS;
+ }
+ /* }}} */
+@@ -389,11 +401,6 @@ PHP_RINIT_FUNCTION(timecop)
+ /* {{{ PHP_RSHUTDOWN_FUNCTION(timecop) */
+ PHP_RSHUTDOWN_FUNCTION(timecop)
+ {
+- if (TIMECOP_G(func_override)) {
+- timecop_func_override_clear();
+- timecop_class_override_clear();
+- }
+-
+ if (Z_TYPE(TIMECOP_G(orig_request_time)) == IS_NULL) {
+ restore_request_time();
+ }
+@@ -496,14 +503,14 @@ static int timecop_func_override()
+
+ p = &(timecop_override_func_table[0]);
+ while (p->orig_func != NULL) {
+- zf_orig = zend_hash_str_find_ptr(EG(function_table), p->orig_func, strlen(p->orig_func));
++ zf_orig = zend_hash_str_find_ptr(CG(function_table), p->orig_func, strlen(p->orig_func));
+ if (zf_orig == NULL) {
+ /* Do nothing. Because some functions are introduced by optional extensions. */
+ p++;
+ continue;
+ }
+
+- zf_ovrd = zend_hash_str_find_ptr(EG(function_table), p->ovrd_func, strlen(p->ovrd_func));
++ zf_ovrd = zend_hash_str_find_ptr(CG(function_table), p->ovrd_func, strlen(p->ovrd_func));
+ if (zf_ovrd == NULL) {
+ php_error_docref("https://github.com/hnw/php-timecop", E_WARNING,
+ "timecop couldn't find function %s.", p->ovrd_func);
+@@ -511,7 +518,7 @@ static int timecop_func_override()
+ continue;
+ }
+
+- zf_save = zend_hash_str_find_ptr(EG(function_table), p->save_func, strlen(p->save_func));
++ zf_save = zend_hash_str_find_ptr(CG(function_table), p->save_func, strlen(p->save_func));
+ if (zf_save != NULL) {
+ php_error_docref("https://github.com/hnw/php-timecop", E_WARNING,
+ "timecop couldn't create function %s because already exists.",
+@@ -523,12 +530,12 @@ static int timecop_func_override()
+ TIMECOP_ASSERT(zf_orig->type == ZEND_INTERNAL_FUNCTION);
+ TIMECOP_ASSERT(zf_ovrd->type == ZEND_INTERNAL_FUNCTION);
+
+- zend_hash_str_add_mem(EG(function_table), p->save_func, strlen(p->save_func),
++ zend_hash_str_add_mem(CG(function_table), p->save_func, strlen(p->save_func),
+ zf_orig, sizeof(zend_internal_function));
+ function_add_ref(zf_orig);
+
+ GUARD_FUNCTION_ARG_INFO_BEGIN(zf_orig);
+- zend_hash_str_update_mem(EG(function_table), p->orig_func, strlen(p->orig_func),
++ zend_hash_str_update_mem(CG(function_table), p->orig_func, strlen(p->orig_func),
+ zf_ovrd, sizeof(zend_internal_function));
+ GUARD_FUNCTION_ARG_INFO_END();
+ function_add_ref(zf_ovrd);
+@@ -546,7 +553,7 @@ static int timecop_class_override()
+
+ p = &(timecop_override_class_table[0]);
+ while (p->orig_class != NULL) {
+- ce_orig = zend_hash_str_find_ptr(EG(class_table), p->orig_class, strlen(p->orig_class));
++ ce_orig = zend_hash_str_find_ptr(CG(class_table), p->orig_class, strlen(p->orig_class));
+ if (ce_orig == NULL) {
+ php_error_docref("https://github.com/hnw/php-timecop", E_WARNING,
+ "timecop couldn't find class %s.", p->orig_class);
+@@ -554,7 +561,7 @@ static int timecop_class_override()
+ continue;
+ }
+
+- ce_ovrd = zend_hash_str_find_ptr(EG(class_table), p->ovrd_class, strlen(p->ovrd_class));
++ ce_ovrd = zend_hash_str_find_ptr(CG(class_table), p->ovrd_class, strlen(p->ovrd_class));
+ if (ce_ovrd == NULL) {
+ php_error_docref("https://github.com/hnw/php-timecop", E_WARNING,
+ "timecop couldn't find class %s.", p->ovrd_class);
+@@ -626,9 +633,9 @@ static int timecop_func_override_clear()
+
+ p = &(timecop_override_func_table[0]);
+ while (p->orig_func != NULL) {
+- zf_orig = zend_hash_str_find_ptr(EG(function_table),
++ zf_orig = zend_hash_str_find_ptr(CG(function_table),
+ p->save_func, strlen(p->save_func));
+- zf_ovld = zend_hash_str_find_ptr(EG(function_table),
++ zf_ovld = zend_hash_str_find_ptr(CG(function_table),
+ p->orig_func, strlen(p->orig_func));
+ if (zf_orig == NULL || zf_ovld == NULL) {
+ p++;
+@@ -636,13 +643,13 @@ static int timecop_func_override_clear()
+ }
+
+ GUARD_FUNCTION_ARG_INFO_BEGIN(zf_ovld);
+- zend_hash_str_update_mem(EG(function_table), p->orig_func, strlen(p->orig_func),
++ zend_hash_str_update_mem(CG(function_table), p->orig_func, strlen(p->orig_func),
+ zf_orig, sizeof(zend_internal_function));
+ GUARD_FUNCTION_ARG_INFO_END();
+ function_add_ref(zf_orig);
+
+ GUARD_FUNCTION_ARG_INFO_BEGIN(zf_orig);
+- zend_hash_str_del(EG(function_table), p->save_func, strlen(p->save_func));
++ zend_hash_str_del(CG(function_table), p->save_func, strlen(p->save_func));
+ GUARD_FUNCTION_ARG_INFO_END();
+
+ p++;
+@@ -658,7 +665,7 @@ static int timecop_class_override_clear()
+
+ p = &(timecop_override_class_table[0]);
+ while (p->orig_class != NULL) {
+- ce_orig = zend_hash_str_find_ptr(EG(class_table),
++ ce_orig = zend_hash_str_find_ptr(CG(class_table),
+ p->orig_class, strlen(p->orig_class));
+ if (ce_orig == NULL) {
+ php_error_docref("https://github.com/hnw/php-timecop", E_WARNING,