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>