File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / filter / callback_filter.c
Revision 1.1.1.4 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Sun Jun 15 20:03:48 2014 UTC (10 years, 1 month ago) by misho
Branches: php, MAIN
CVS tags: v5_4_29, HEAD
php 5.4.29

    1: /*
    2:   +----------------------------------------------------------------------+
    3:   | PHP Version 5                                                        |
    4:   +----------------------------------------------------------------------+
    5:   | Copyright (c) 1997-2014 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,v 1.1.1.4 2014/06/15 20:03:48 misho Exp $ */
   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>