summaryrefslogtreecommitdiff
path: root/ext/oci8/oci8_interface.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/oci8/oci8_interface.c')
-rw-r--r--ext/oci8/oci8_interface.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/ext/oci8/oci8_interface.c b/ext/oci8/oci8_interface.c
index 689ac1c2e0..2ecf1d4bc4 100644
--- a/ext/oci8/oci8_interface.c
+++ b/ext/oci8/oci8_interface.c
@@ -45,25 +45,21 @@ PHP_FUNCTION(oci_register_taf_callback)
{
zval *z_connection;
php_oci_connection *connection;
- zval *callback;
- zend_string *callback_name;
+ zend_fcall_info fci;
+ zend_fcall_info_cache fcc;
+ zval *callback = NULL;
- /* TODO Use ZPP callable */
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "r|z!", &z_connection, &callback) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "r|f!", &z_connection, &fci, &fcc) == FAILURE) {
RETURN_THROWS();
}
- if (callback) {
- if (!zend_is_callable(callback, 0, 0)) {
- callback_name = zend_get_callable_name(callback);
- php_error_docref(NULL, E_WARNING, "Function '%s' is not callable", ZSTR_VAL(callback_name));
- zend_string_release(callback_name);
- RETURN_FALSE;
- }
- }
-
PHP_OCI_ZVAL_TO_CONNECTION(z_connection, connection);
+ /* If callable passed, assign callback zval so that it can be passed to php_oci_register_taf_callback() */
+ if (ZEND_FCI_INITIALIZED(fci)) {
+ callback = &fci.function_name;
+ }
+
if (php_oci_register_taf_callback(connection, callback) == 0) {
RETURN_TRUE;
} else {