root/ext/filter/callback_filter.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. php_filter_callback

   1 /*
   2   +----------------------------------------------------------------------+
   3   | PHP Version 5                                                        |
   4   +----------------------------------------------------------------------+
   5   | Copyright (c) 1997-2016 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$ */
  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  */

/* [<][>][^][v][top][bottom][index][help] */