diff options
Diffstat (limited to 'upstream.patch')
| -rw-r--r-- | upstream.patch | 285 |
1 files changed, 285 insertions, 0 deletions
diff --git a/upstream.patch b/upstream.patch new file mode 100644 index 0000000..e07990c --- /dev/null +++ b/upstream.patch @@ -0,0 +1,285 @@ +From f7e9f7b2675aaf54f5babaac3e32112c2bae2292 Mon Sep 17 00:00:00 2001 +From: Joe Watkins <krakjoe@php.net> +Date: Mon, 15 Sep 2025 10:28:07 +0200 +Subject: [PATCH] PCOV_ENABLED env support + +--- + pcov.c | 71 +++++++++++++++++++++++++++++++++++++++++++++----- + tests/008.phpt | 16 ++++++++++++ + tests/009.phpt | 16 ++++++++++++ + tests/010.phpt | 16 ++++++++++++ + tests/011.phpt | 16 ++++++++++++ + tests/012.phpt | 16 ++++++++++++ + tests/013.phpt | 16 ++++++++++++ + 7 files changed, 161 insertions(+), 6 deletions(-) + create mode 100644 tests/008.phpt + create mode 100644 tests/009.phpt + create mode 100644 tests/010.phpt + create mode 100644 tests/011.phpt + create mode 100644 tests/012.phpt + create mode 100644 tests/013.phpt + +diff --git a/pcov.c b/pcov.c +index ba58263..06e60ee 100644 +--- a/pcov.c ++++ b/pcov.c +@@ -57,8 +57,56 @@ + #define GC_SET_REFCOUNT(ref, rc) (GC_REFCOUNT(ref) = (rc)) + #endif + ++static zend_always_inline bool php_pcov_api_enabled(void) { ++ const char* env = getenv("PCOV_ENABLED"); ++ ++ if (env) { ++ size_t length = strlen(env); ++ ++ if (length == 1) { ++ switch (*env) { ++ case '1': ++ case 'y': /* short yes */ ++ return true; ++ case '0': ++ case 'n': /* short no */ ++ return false; ++ } ++ /* all other characters are assumed false */ ++ return false; ++ } ++ ++ if (length == 2) { ++ if (strncasecmp(env, ZEND_STRL("on")) == SUCCESS) { ++ return true; ++ } else if (strncasecmp(env, ZEND_STRL("no")) == SUCCESS) { ++ return false; ++ } ++ ++ /* all other strings are assumed false */ ++ return false; ++ } ++ ++ if (length == 3) { ++ if (strncasecmp(env, ZEND_STRL("off")) == SUCCESS) { ++ return false; ++ } else if (strncasecmp(env, ZEND_STRL("yes")) == SUCCESS) { ++ return true; ++ } ++ ++ /* all other strings are assumed false */ ++ return false; ++ } ++ ++ /* all other lengths are assumed false */ ++ return false; ++ } ++ ++ return INI_BOOL("pcov.enabled"); ++} ++ + #define PHP_PCOV_API_ENABLED_GUARD() do { \ +- if (!INI_BOOL("pcov.enabled")) { \ ++ if (!php_pcov_api_enabled()) { \ + return; \ + } \ + } while (0); +@@ -339,7 +387,7 @@ PHP_MINIT_FUNCTION(pcov) + + REGISTER_INI_ENTRIES(); + +- if (INI_BOOL("pcov.enabled")) { ++ if (php_pcov_api_enabled()) { + zend_execute_ex_function = zend_execute_ex; + zend_execute_ex = php_pcov_execute_ex; + } +@@ -357,7 +405,7 @@ PHP_MINIT_FUNCTION(pcov) + */ + PHP_MSHUTDOWN_FUNCTION(pcov) + { +- if (INI_BOOL("pcov.enabled")) { ++ if (php_pcov_api_enabled()) { + zend_execute_ex = zend_execute_ex_function; + } + +@@ -427,7 +475,7 @@ PHP_RINIT_FUNCTION(pcov) + ZEND_TSRMLS_CACHE_UPDATE(); + #endif + +- if (!INI_BOOL("pcov.enabled")) { ++ if (!php_pcov_api_enabled()) { + return SUCCESS; + } + +@@ -464,7 +512,7 @@ PHP_RINIT_FUNCTION(pcov) + */ + PHP_RSHUTDOWN_FUNCTION(pcov) + { +- if (!INI_BOOL("pcov.enabled") || CG(unclean_shutdown)) { ++ if (!php_pcov_api_enabled() || CG(unclean_shutdown)) { + return SUCCESS; + } + +@@ -506,7 +554,7 @@ PHP_MINFO_FUNCTION(pcov) + + php_info_print_table_header(2, + "PCOV support", +- INI_BOOL("pcov.enabled") ? "Enabled" : "Disabled"); ++ php_pcov_api_enabled() ? "Enabled" : "Disabled"); + php_info_print_table_row(2, + "PCOV version", + PHP_PCOV_VERSION); +@@ -862,6 +910,16 @@ PHP_NAMED_FUNCTION(php_pcov_memory) + } while ((arena = arena->prev)); + } /* }}} */ + ++/* {{{ bool \pcov\enabled(void) */ ++PHP_NAMED_FUNCTION(php_pcov_enabled) ++{ ++ if (zend_parse_parameters_none() != SUCCESS) { ++ return; ++ } ++ ++ RETURN_BOOL(php_pcov_api_enabled()); ++} /* }}} */ ++ + /* {{{ */ + ZEND_BEGIN_ARG_INFO_EX(php_pcov_collect_arginfo, 0, 0, 0) + ZEND_ARG_TYPE_INFO(0, type, IS_LONG, 0) +@@ -886,6 +944,7 @@ const zend_function_entry php_pcov_functions[] = { + ZEND_NS_FENTRY("pcov", clear, php_pcov_clear, php_pcov_clear_arginfo, 0) + ZEND_NS_FENTRY("pcov", waiting, php_pcov_waiting, php_pcov_no_arginfo, 0) + ZEND_NS_FENTRY("pcov", memory, php_pcov_memory, php_pcov_no_arginfo, 0) ++ ZEND_NS_FENTRY("pcov", enabled, php_pcov_enabled, php_pcov_no_arginfo, 0) + PHP_FE_END + }; + /* }}} */ +diff --git a/tests/008.phpt b/tests/008.phpt +new file mode 100644 +index 0000000..0985bad +--- /dev/null ++++ b/tests/008.phpt +@@ -0,0 +1,16 @@ ++--TEST-- ++enable/disable (disable env as no) ++--SKIPIF-- ++<?php if (!extension_loaded("pcov")) print "skip"; ?> ++--INI-- ++pcov.enabled = 1 ++--ENV-- ++PCOV_ENABLED=no ++--FILE-- ++<?php ++var_dump(\getenv("PCOV_ENABLED")); ++var_dump(\pcov\enabled()); ++?> ++--EXPECT-- ++string(2) "no" ++bool(false) +diff --git a/tests/009.phpt b/tests/009.phpt +new file mode 100644 +index 0000000..b174b2f +--- /dev/null ++++ b/tests/009.phpt +@@ -0,0 +1,16 @@ ++--TEST-- ++enable/disable (enable env as yes) ++--SKIPIF-- ++<?php if (!extension_loaded("pcov")) print "skip"; ?> ++--INI-- ++pcov.enabled = 0 ++--ENV-- ++PCOV_ENABLED=yes ++--FILE-- ++<?php ++var_dump(\getenv("PCOV_ENABLED")); ++var_dump(\pcov\enabled()); ++?> ++--EXPECT-- ++string(3) "yes" ++bool(true) +diff --git a/tests/010.phpt b/tests/010.phpt +new file mode 100644 +index 0000000..a97e320 +--- /dev/null ++++ b/tests/010.phpt +@@ -0,0 +1,16 @@ ++--TEST-- ++enable/disable (disable env as off) ++--SKIPIF-- ++<?php if (!extension_loaded("pcov")) print "skip"; ?> ++--INI-- ++pcov.enabled = 1 ++--ENV-- ++PCOV_ENABLED=off ++--FILE-- ++<?php ++var_dump(\getenv("PCOV_ENABLED")); ++var_dump(\pcov\enabled()); ++?> ++--EXPECT-- ++string(3) "off" ++bool(false) +diff --git a/tests/011.phpt b/tests/011.phpt +new file mode 100644 +index 0000000..8775c8c +--- /dev/null ++++ b/tests/011.phpt +@@ -0,0 +1,16 @@ ++--TEST-- ++enable/disable (enable env as on) ++--SKIPIF-- ++<?php if (!extension_loaded("pcov")) print "skip"; ?> ++--INI-- ++pcov.enabled = 0 ++--ENV-- ++PCOV_ENABLED=on ++--FILE-- ++<?php ++var_dump(\getenv("PCOV_ENABLED")); ++var_dump(\pcov\enabled()); ++?> ++--EXPECT-- ++string(2) "on" ++bool(true) +diff --git a/tests/012.phpt b/tests/012.phpt +new file mode 100644 +index 0000000..24fb998 +--- /dev/null ++++ b/tests/012.phpt +@@ -0,0 +1,16 @@ ++--TEST-- ++enable/disable (disable env as 0) ++--SKIPIF-- ++<?php if (!extension_loaded("pcov")) print "skip"; ?> ++--INI-- ++pcov.enabled = 1 ++--ENV-- ++PCOV_ENABLED=0 ++--FILE-- ++<?php ++var_dump(\getenv("PCOV_ENABLED")); ++var_dump(\pcov\enabled()); ++?> ++--EXPECT-- ++string(1) "0" ++bool(false) +diff --git a/tests/013.phpt b/tests/013.phpt +new file mode 100644 +index 0000000..f3c59c5 +--- /dev/null ++++ b/tests/013.phpt +@@ -0,0 +1,16 @@ ++--TEST-- ++enable/disable (enable env as 1) ++--SKIPIF-- ++<?php if (!extension_loaded("pcov")) print "skip"; ?> ++--INI-- ++pcov.enabled = 0 ++--ENV-- ++PCOV_ENABLED=1 ++--FILE-- ++<?php ++var_dump(\getenv("PCOV_ENABLED")); ++var_dump(\pcov\enabled()); ++?> ++--EXPECT-- ++string(1) "1" ++bool(true) |
