Annotation of embedaddon/php/ext/filter/callback_filter.c, revision 1.1
1.1 ! misho 1: /*
! 2: +----------------------------------------------------------------------+
! 3: | PHP Version 5 |
! 4: +----------------------------------------------------------------------+
! 5: | Copyright (c) 1997-2012 The PHP Group |
! 6: +----------------------------------------------------------------------+
! 7: | This source file is subject to version 3.01 of the PHP license, |
! 8: | that is bundled with this package in the file LICENSE, and is |
! 9: | available through the world-wide-web at the following url: |
! 10: | http://www.php.net/license/3_01.txt |
! 11: | If you did not receive a copy of the PHP license and are unable to |
! 12: | obtain it through the world-wide-web, please send a note to |
! 13: | license@php.net so we can mail you a copy immediately. |
! 14: +----------------------------------------------------------------------+
! 15: | Authors: Derick Rethans <derick@php.net> |
! 16: +----------------------------------------------------------------------+
! 17: */
! 18:
! 19: /* $Id: callback_filter.c 321634 2012-01-01 13:15:04Z felipe $ */
! 20:
! 21: #include "php_filter.h"
! 22:
! 23: void php_filter_callback(PHP_INPUT_FILTER_PARAM_DECL)
! 24: {
! 25: zval *retval_ptr;
! 26: zval ***args;
! 27: int status;
! 28:
! 29: if (!option_array || !zend_is_callable(option_array, IS_CALLABLE_CHECK_NO_ACCESS, NULL TSRMLS_CC)) {
! 30: php_error_docref(NULL TSRMLS_CC, E_WARNING, "First argument is expected to be a valid callback");
! 31: zval_dtor(value);
! 32: Z_TYPE_P(value) = IS_NULL;
! 33: return;
! 34: }
! 35:
! 36: args = safe_emalloc(sizeof(zval **), 1, 0);
! 37: args[0] = &value;
! 38:
! 39: status = call_user_function_ex(EG(function_table), NULL, option_array, &retval_ptr, 1, args, 0, NULL TSRMLS_CC);
! 40:
! 41: if (status == SUCCESS && retval_ptr != NULL) {
! 42: if (retval_ptr != value) {
! 43: zval_dtor(value);
! 44: COPY_PZVAL_TO_ZVAL(*value, retval_ptr);
! 45: } else {
! 46: zval_ptr_dtor(&retval_ptr);
! 47: }
! 48: } else {
! 49: zval_dtor(value);
! 50: Z_TYPE_P(value) = IS_NULL;
! 51: }
! 52:
! 53: efree(args);
! 54: }
! 55:
! 56: /*
! 57: * Local variables:
! 58: * tab-width: 4
! 59: * c-basic-offset: 4
! 60: * End:
! 61: * vim600: noet sw=4 ts=4 fdm=marker
! 62: * vim<600: noet sw=4 ts=4
! 63: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>