On Mon, 15 Nov 2010 08:25:44 +0100, Kalle Sommer Nielsen <ka...@php.net>
wrote:
> Hi
>
> 2010/11/15 Gustavo André dos Santos Lopes <cataphr...@php.net>:
>> cataphract Mon, 15 Nov 2010 03:05:32
+0000
>>
>> Revision: http://svn.php.net/viewvc?view=revision&revision=305346
>>
>> Log:
>> - Added leak_variable() function.
>
> Why do we need a leak_variable() function in a regular build unlike
> leak() and crash() which are defined in zend_builtin_functions.c in
> debug mode only or did I miss something here?
It's only in the debug build. In any case, it would be indeed better among
leak() and crash(). The attached patch moves it there, but it will have to
be someone else commiting it.
--
Gustavo Lopes
Index: ext/standard/basic_functions.c
===================================================================
--- ext/standard/basic_functions.c (revision 305370)
+++ ext/standard/basic_functions.c (working copy)
@@ -853,11 +853,6 @@
#if ZEND_DEBUG
ZEND_BEGIN_ARG_INFO(arginfo_config_get_hash, 0)
ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_leak_variable, 0, 0, 1)
- ZEND_ARG_INFO(0, variable)
- ZEND_ARG_INFO(0, leak_data)
-ZEND_END_ARG_INFO()
#endif
#ifdef HAVE_GETLOADAVG
@@ -3002,7 +2997,6 @@
PHP_FE(parse_ini_string, arginfo_parse_ini_string)
#if ZEND_DEBUG
PHP_FE(config_get_hash, arginfo_config_get_hash)
- PHP_FE(leak_variable, arginfo_leak_variable)
#endif
PHP_FE(is_uploaded_file, arginfo_is_uploaded_file)
PHP_FE(move_uploaded_file, arginfo_move_uploaded_file)
@@ -5923,32 +5917,6 @@
zend_hash_apply_with_arguments(hash TSRMLS_CC, (apply_func_args_t) add_config_entry_cb, 1, return_value);
}
/* }}} */
-
-/* {{{ proto leak_variable(variable [, leak_data]) */
-PHP_FUNCTION(leak_variable)
-{
- zval *zv;
- zend_bool leak_data = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|b", &zv, &leak_data) == FAILURE) {
- return;
- }
-
- if (leak_data && (Z_TYPE_P(zv) != IS_RESOURCE && Z_TYPE_P(zv) != IS_OBJECT)) {
- php_error_docref0(NULL TSRMLS_CC, E_WARNING,
- "Leaking non-zval data is only applicable to resources and objects");
- return;
- }
-
- if (!leak_data) {
- zval_add_ref(&zv);
- } else if (Z_TYPE_P(zv) == IS_RESOURCE) {
- zend_list_addref(Z_RESVAL_P(zv));
- } else if (Z_TYPE_P(zv) == IS_OBJECT) {
- Z_OBJ_HANDLER_P(zv, add_ref)(zv TSRMLS_CC);
- }
-}
-/* }}} */
#endif
#ifdef HAVE_GETLOADAVG
Index: ext/standard/basic_functions.h
===================================================================
--- ext/standard/basic_functions.h (revision 305370)
+++ ext/standard/basic_functions.h (working copy)
@@ -127,7 +127,6 @@
PHP_FUNCTION(parse_ini_string);
#if ZEND_DEBUG
PHP_FUNCTION(config_get_hash);
-PHP_FUNCTION(leak_variable);
#endif
PHP_FUNCTION(str_rot13);
Index: Zend/zend_builtin_functions.c
===================================================================
--- Zend/zend_builtin_functions.c (revision 305370)
+++ Zend/zend_builtin_functions.c (working copy)
@@ -54,6 +54,7 @@
static ZEND_FUNCTION(class_alias);
#if ZEND_DEBUG
static ZEND_FUNCTION(leak);
+static ZEND_FUNCTION(leak_variable);
#ifdef ZEND_TEST_EXCEPTIONS
static ZEND_FUNCTION(crash);
#endif
@@ -180,6 +181,13 @@
ZEND_ARG_INFO(0, autoload)
ZEND_END_ARG_INFO()
+#if ZEND_DEBUG
+ZEND_BEGIN_ARG_INFO_EX(arginfo_leak_variable, 0, 0, 1)
+ ZEND_ARG_INFO(0, variable)
+ ZEND_ARG_INFO(0, leak_data)
+ZEND_END_ARG_INFO()
+#endif
+
ZEND_BEGIN_ARG_INFO_EX(arginfo_trigger_error, 0, 0, 1)
ZEND_ARG_INFO(0, message)
ZEND_ARG_INFO(0, error_type)
@@ -245,6 +253,7 @@
ZEND_FE(class_alias, arginfo_class_alias)
#if ZEND_DEBUG
ZEND_FE(leak, NULL)
+ ZEND_FE(leak_variable, arginfo_leak_variable)
#ifdef ZEND_TEST_EXCEPTIONS
ZEND_FE(crash, NULL)
#endif
@@ -1367,7 +1376,29 @@
}
/* }}} */
+/* {{{ proto leak_variable(mixed variable [, bool leak_data]) */
+ZEND_FUNCTION(leak_variable)
+{
+ zval *zv;
+ zend_bool leak_data = 0;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|b", &zv, &leak_data) == FAILURE) {
+ return;
+ }
+
+ if (!leak_data) {
+ zval_add_ref(&zv);
+ } else if (Z_TYPE_P(zv) == IS_RESOURCE) {
+ zend_list_addref(Z_RESVAL_P(zv));
+ } else if (Z_TYPE_P(zv) == IS_OBJECT) {
+ Z_OBJ_HANDLER_P(zv, add_ref)(zv TSRMLS_CC);
+ } else {
+ zend_error(E_WARNING, "Leaking non-zval data is only applicable to resources and objects");
+ }
+}
+/* }}} */
+
+
#ifdef ZEND_TEST_EXCEPTIONS
ZEND_FUNCTION(crash)
{
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php