本文整理汇总了C++中call_user_function函数的典型用法代码示例。如果您正苦于以下问题:C++ call_user_function函数的具体用法?C++ call_user_function怎么用?C++ call_user_function使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了call_user_function函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ngx_http_php_zend_uthread_create
void
ngx_http_php_zend_uthread_create(ngx_http_request_t *r, char *func_prefix)
{
zval *func_main;
zval *func_valid;
zval retval;
ngx_http_php_ctx_t *ctx;
ngx_http_php_loc_conf_t *plcf;
ngx_str_t func_name;
ctx = ngx_http_get_module_ctx(r, ngx_http_php_module);
if (ctx == NULL) {
return ;
}
ctx->generator_closure = (zval *)emalloc(sizeof(zval));
plcf = ngx_http_get_module_loc_conf(r, ngx_http_php_module);
//func_name.data = ngx_pnalloc(r->pool, strlen(func_prefix)+sizeof("_18446744073709551616")-1+NGX_TIME_T_LEN);
//func_name.len = ngx_sprintf(func_name.data, "%s_%V", func_prefix, &(plcf->content_inline_code->code_id)) - func_name.data;
func_name.data = ngx_pnalloc(r->pool, strlen(func_prefix) + 32);
func_name.len = ngx_sprintf(func_name.data, "%s_%V", func_prefix, &(plcf->content_inline_code->code_id)) - func_name.data;
ngx_php_debug("%*s", (int)func_name.len, func_name.data);
ZVAL_STRINGL(func_main, (char *)func_name.data, func_name.len, 1);
call_user_function(EG(function_table), NULL, func_main, ctx->generator_closure, 0, NULL TSRMLS_CC);
zval_ptr_dtor(&func_main);
if (Z_TYPE_P(ctx->generator_closure) == IS_OBJECT){
MAKE_STD_ZVAL(func_valid);
ZVAL_STRING(&func_valid, "valid", 1);
if (call_user_function(NULL, &(ctx->generator_closure), func_valid, &retval, 0, NULL TSRMLS_CC) == FAILURE)
{
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed calling valid");
return ;
}
zval_ptr_dtor(&func_valid);
ngx_php_debug("r:%p, closure:%p, retval:%d", r, ctx->generator_closure, Z_TYPE(retval));
if (Z_TYPE(retval) == IS_BOOL && Z_BVAL(retval)){
ctx->phase_status = NGX_AGAIN;
}else {
ctx->phase_status = NGX_OK;
}
}else {
ngx_php_debug("r:%p, closure:%p, retval:%d", r, ctx->generator_closure, Z_TYPE(retval));
efree(ctx->generator_closure);
}
}
示例2: riak_stream_key_cb
void riak_stream_key_cb(riack_client* c, void* p, riack_string key) {/* {{{ */
zval *zkey, zret, zfuncname;
struct riak_stream_key_cb_param *param = (struct riak_stream_key_cb_param*)p;
MAKE_STD_ZVAL(zkey);
ZVAL_STRINGL(zkey, key.value, key.len, 1);
ZVAL_STRING(&zfuncname, "process", 0);
#ifdef ZTS
call_user_function(NULL, ¶m->zstreamer, &zfuncname, &zret, 1, &zkey, param->tsrm_ls);
#else
call_user_function(NULL, ¶m->zstreamer, &zfuncname, &zret, 1, &zkey);
#endif
zval_ptr_dtor(&zkey);
}
示例3: phalcon_call_static_zval_func_params
/**
* Call single static function on a zval which requires parameters
*/
int phalcon_call_static_zval_func_params(zval *return_value, zval *mixed_name, char *method_name, int method_len, zend_uint param_count, zval *params[], int noreturn TSRMLS_DC){
zval *fn;
int status = FAILURE;
if (!noreturn) {
ALLOC_INIT_ZVAL(return_value);
}
ALLOC_INIT_ZVAL(fn);
array_init(fn);
add_next_index_zval(fn, mixed_name);
add_next_index_stringl(fn, method_name, method_len, 1);
status = call_user_function(CG(function_table), NULL, fn, return_value, param_count, params TSRMLS_CC);
if (status == FAILURE) {
if(Z_TYPE_P(mixed_name) == IS_STRING) {
php_error_docref(NULL TSRMLS_CC, E_ERROR, "Call to undefined function %s::%s()", Z_STRVAL_P(mixed_name), method_name);
} else {
php_error_docref(NULL TSRMLS_CC, E_ERROR, "Call to undefined function not-callable::%s()", method_name);
}
return FAILURE;
}
zval_ptr_dtor(&fn);
if (!noreturn) {
zval_ptr_dtor(&return_value);
}
return status;
}
示例4: phalcon_call_static_func
/**
* Call single static function which not requires parameters
*/
int phalcon_call_static_func(zval *return_value, char *class_name, int class_length, char *method_name, int method_len, int noreturn TSRMLS_DC){
zval *fn;
int status = FAILURE;
if (!noreturn) {
ALLOC_INIT_ZVAL(return_value);
}
ALLOC_INIT_ZVAL(fn);
array_init(fn);
add_next_index_stringl(fn, class_name, class_length, 1);
add_next_index_stringl(fn, method_name, method_len, 1);
status = call_user_function(CG(function_table), NULL, fn, return_value, 0, NULL TSRMLS_CC);
if (status == FAILURE) {
php_error_docref(NULL TSRMLS_CC, E_ERROR, "Call to undefined function %s::%s()", class_name, method_name);
return FAILURE;
}
zval_ptr_dtor(&fn);
if (!noreturn) {
zval_ptr_dtor(&return_value);
}
return status;
}
示例5: _php_curl_write_header
static size_t _php_curl_write_header(char *data, size_t size, size_t nmemb, void *ctx)
{
php_curl *ch = (php_curl *) ctx;
zval *func = ch->handlers->write_header;
zval *argv[2];
zval *retval;
int error;
int length;
ELS_FETCH();
MAKE_STD_ZVAL(argv[0]);
MAKE_STD_ZVAL(argv[1]);
MAKE_STD_ZVAL(retval);
ZVAL_RESOURCE(argv[0], ch->id);
zend_list_addref(ch->id);
ZVAL_STRINGL(argv[0], data, size * nmemb, 1);
error = call_user_function(EG(function_table),
NULL,
func,
retval, 2, argv);
if (error == FAILURE) {
php_error(E_WARNING, "Couldn't call the CURLOPT_HEADERFUNCTION");
return -1;
}
length = Z_LVAL_P(retval);
zval_ptr_dtor(&argv[0]);
zval_ptr_dtor(&argv[1]);
zval_ptr_dtor(&retval);
return length;
}
示例6: phalcon_call_static_ce_func_params
/**
* Call single static function direct on a zend_class_entry which requires parameters
*/
int phalcon_call_static_ce_func_params(zval *return_value, zend_class_entry *ce, char *method_name, int method_len, zend_uint param_count, zval *params[], int noreturn TSRMLS_DC){
zval *fn;
int status = FAILURE;
if (!noreturn) {
ALLOC_INIT_ZVAL(return_value);
}
ALLOC_INIT_ZVAL(fn);
array_init(fn);
add_next_index_stringl(fn, ce->name, ce->name_length, 0);
add_next_index_stringl(fn, method_name, method_len, 0);
status = call_user_function(CG(function_table), NULL, fn, return_value, param_count, params TSRMLS_CC);
if (status == FAILURE) {
php_error_docref(NULL TSRMLS_CC, E_ERROR, "Call to undefined function %s::%s()", ce->name, method_name);
return FAILURE;
}
if (!noreturn) {
zval_ptr_dtor(&return_value);
}
return status;
}
示例7: mlfi_close
/* {{{ mlfi_close()
*/
static sfsistat mlfi_close(SMFICTX *ctx)
{
int ret = SMFIS_CONTINUE;
zval function_name, retval;
int status;
TSRMLS_FETCH();
/* call userland */
INIT_ZVAL(function_name);
ZVAL_STRING(&function_name, "milter_close", 0);
/* set the milter context for possible use in API functions */
MG(ctx) = ctx;
MG(state) = MLFI_CLOSE;
status = call_user_function(CG(function_table), NULL, &function_name, &retval, 0, NULL TSRMLS_CC);
MG(state) = MLFI_NONE;
if (status == SUCCESS && Z_TYPE(retval) == IS_LONG) {
ret = Z_LVAL(retval);
}
php_request_shutdown((void *) 0);
return ret;
}
示例8: xslt_call_function
/* {{{ call_xslt_function()
Call an XSLT handler */
extern void xslt_call_function(char *name,
struct xslt_function *fptr,
int argc,
zval **argv,
zval **retval)
{
int error; /* Error container */
int idx; /* Idx, when looping through and free'ing the arguments */
ELS_FETCH(); /* For TS mode, fetch the executor globals */
/* Allocate and initialize return value from the function */
MAKE_STD_ZVAL(*retval);
/* Call the function */
error = call_user_function(EG(function_table),
XSLT_OBJ(fptr),
XSLT_FUNC(fptr),
*retval, argc, argv);
if (error == FAILURE) {
php_error(E_WARNING, "Cannot call the %s handler: %s",
name, Z_STRVAL_P(XSLT_FUNC(fptr)));
}
/* Cleanup arguments */
for (idx = 0; idx < argc; idx++) {
/* Decrease refcount and free if refcount is <= 0 */
zval_ptr_dtor(&argv[idx]);
}
}
示例9: resolveDocument
bool resolveDocument(XmlTransaction *txn, XmlManager &mgr, const std::string &uri, XmlValue &result)
{
DEBUG();
TSRMLS_FETCH();
bool status = false;
zval *argv[2], *retval, *func;
MAKE_STD_ZVAL(func);
MAKE_STD_ZVAL(retval);
MAKE_STD_ZVAL(argv[0]);
MAKE_STD_ZVAL(argv[1]);
ZVAL_STRING(func, "resolveDocument", (int)1);
ZVAL_STRINGL(argv[0], (char*)uri.data(), (int)uri.length(), 1);
if (SUCCESS == call_user_function(EG(function_table),
&m_userspace, func, retval, 2, argv TSRMLS_CC)) {
convert_to_long_ex(&retval);
if (Z_LVAL_P(retval)) {
/* convert argv[1] to an XmlResult */
result = php_dbxml_wrap_zval(argv[1]);
status = true;
}
}
zval_ptr_dtor(&func);
zval_ptr_dtor(&retval);
zval_ptr_dtor(&argv[0]);
zval_ptr_dtor(&argv[1]);
return status;
}
示例10: mlfi_body
/* {{{ mlfi_body()
*/
static sfsistat mlfi_body(SMFICTX *ctx, u_char *bodyp, size_t len)
{
zval function_name, retval, *param[1];
int status;
TSRMLS_FETCH();
/* call userland */
INIT_ZVAL(function_name);
ALLOC_ZVAL(param[0]);
INIT_PZVAL(param[0]);
ZVAL_STRING(&function_name, "milter_body", 0);
ZVAL_STRINGL(param[0], (char*)bodyp, len, 1); /*alex*/
/* set the milter context for possible use in API functions */
MG(ctx) = ctx;
MG(state) = MLFI_BODY;
status = call_user_function(CG(function_table), NULL, &function_name, &retval, 1, param TSRMLS_CC);
MG(state) = MLFI_NONE;
zval_ptr_dtor(param);
if (status == SUCCESS && Z_TYPE(retval) == IS_LONG) {
return Z_LVAL(retval);
}
return SMFIS_CONTINUE;
}
示例11: mlfi_envfrom
/* {{{ mlfi_envform()
*/
static sfsistat mlfi_envfrom(SMFICTX *ctx, char **argv)
{
zval function_name, retval, *param[1];
int status;
TSRMLS_FETCH();
/* call userland */
INIT_ZVAL(function_name);
ALLOC_ZVAL(param[0]);
INIT_PZVAL(param[0]);
ZVAL_STRING(&function_name, "milter_envfrom", 0);
array_init(param[0]);
while (*argv) {
add_next_index_string(param[0], *argv, 1);
argv++;
}
/* set the milter context for possible use in API functions */
MG(ctx) = ctx;
MG(state) = MLFI_ENVFROM;
status = call_user_function(CG(function_table), NULL, &function_name, &retval, 1, param TSRMLS_CC);
MG(state) = MLFI_NONE;
zval_ptr_dtor(param);
if (status == SUCCESS && Z_TYPE(retval) == IS_LONG) {
return Z_LVAL(retval);
}
return SMFIS_CONTINUE;
}
示例12: pError
// time critical
zval* PHPQt::callPHPMethod(const zval* z_this_ptr, const char* methodName, const zend_uint param_count, zval** args)
{
if(z_this_ptr == NULL){
pError() << "could not call PHP method: no related PHP object found.";
}
zval *function_name;
MAKE_STD_ZVAL(function_name);
ZVAL_STRING(function_name,const_cast<char*>(methodName),1);
zval* retval;
ALLOC_INIT_ZVAL( retval );
if(call_user_function( CG(function_table), const_cast<zval**>(&z_this_ptr), function_name, retval, param_count, args TSRMLS_CC ) == FAILURE){
smokephp_object* o = PHPQt::getSmokePHPObjectFromZval(z_this_ptr);
pError() << "could not call method " << o->ce_ptr()->name << "::" << methodName << "(...)";
}
// make sure we return the right object
if(PHPQt::SmokePHPObjectExists(retval)){
smokephp_object* o = PHPQt::getSmokePHPObjectFromZval(retval);
retval = const_cast<zval*>(o->zval_ptr());
}
efree( function_name );
return retval;
}
示例13: TSRMLS_FETCH
XmlInputStream *resolveEntity(XmlTransaction *txn, XmlManager &mgr, const std::string &systemId, const std::string &publicId)
{
bool status = false;
zval *argv[3], *retval, *func;
TSRMLS_FETCH();
DEBUG();
MAKE_STD_ZVAL(func);
MAKE_STD_ZVAL(retval);
MAKE_STD_ZVAL(argv[0]);
MAKE_STD_ZVAL(argv[1]);
MAKE_STD_ZVAL(argv[2]);
ZVAL_STRING(func, "resolveEntity", (int)1);
ZVAL_STRINGL(argv[0], (char*)systemId.data(), (int)systemId.length(), 1);
ZVAL_STRINGL(argv[1], (char*)publicId.data(), (int)publicId.length(), 1);
if (SUCCESS == call_user_function(EG(function_table),
&m_userspace, func, retval, 3, argv TSRMLS_CC)) {
convert_to_long_ex(&retval);
if (Z_LVAL_P(retval)) {
//result = std::string(Z_STRVAL_P(argv[2]), Z_STRLEN_P(argv[2]));
status = true;
}
}
zval_ptr_dtor(&func);
zval_ptr_dtor(&retval);
zval_ptr_dtor(&argv[0]);
zval_ptr_dtor(&argv[1]);
zval_ptr_dtor(&argv[2]);
// return status;
return NULL;
}
示例14: mlfi_connect
/* {{{ mlfi_connect()
*/
static sfsistat mlfi_connect(SMFICTX *ctx, char *hostname, _SOCK_ADDR *hostaddr)
{
zend_file_handle file_handle;
zval function_name, retval, *param[1];
int status;
TSRMLS_FETCH();
/* request startup */
if (php_request_startup(TSRMLS_C)==FAILURE) {
SG(headers_sent) = 1;
SG(request_info).no_headers = 1;
php_request_shutdown((void *) 0);
return SMFIS_TEMPFAIL;
}
/* disable headers */
SG(headers_sent) = 1;
SG(request_info).no_headers = 1;
if (filename == NULL) {
php_printf("No input file specified");
return SMFIS_TEMPFAIL;
}
if (!(file_handle.handle.fp = VCWD_FOPEN(filename, "rb"))) {
php_printf("Could not open input file: %s\n", filename);
return SMFIS_TEMPFAIL;
}
file_handle.type = ZEND_HANDLE_FP;
file_handle.filename = filename;
file_handle.free_filename = 0;
file_handle.opened_path = NULL;
php_execute_script(&file_handle TSRMLS_CC);
/* call userland */
INIT_ZVAL(function_name);
ALLOC_ZVAL(param[0]);
INIT_PZVAL(param[0]);
ZVAL_STRING(&function_name, "milter_connect", 0);
ZVAL_STRING(param[0], hostname, 1);
/* set the milter context for possible use in API functions */
MG(ctx) = ctx;
MG(state) = MLFI_CONNECT;
status = call_user_function(CG(function_table), NULL, &function_name, &retval, 1, param TSRMLS_CC);
MG(state) = MLFI_NONE;
zval_ptr_dtor(param);
if (status == SUCCESS && Z_TYPE(retval) == IS_LONG) {
return Z_LVAL(retval);
}
return SMFIS_CONTINUE;
}
示例15: mlfi_header
/* {{{ mlfi_header()
*/
static sfsistat mlfi_header(SMFICTX *ctx, char *headerf, char *headerv)
{
zval function_name, retval, *param[2];
int status;
TSRMLS_FETCH();
/* call userland */
INIT_ZVAL(function_name);
ALLOC_ZVAL(param[0]);
ALLOC_ZVAL(param[1]);
INIT_PZVAL(param[0]);
INIT_PZVAL(param[1]);
ZVAL_STRING(&function_name, "milter_header", 0);
ZVAL_STRING(param[0], headerf, 1);
ZVAL_STRING(param[1], headerv, 1);
/* set the milter context for possible use in API functions */
MG(ctx) = ctx;
MG(state) = MLFI_HEADER;
status = call_user_function(CG(function_table), NULL, &function_name, &retval, 2, param TSRMLS_CC);
MG(state) = MLFI_NONE;
zval_ptr_dtor(¶m[0]);
zval_ptr_dtor(¶m[1]);
if (status == SUCCESS && Z_TYPE(retval) == IS_LONG) {
return Z_LVAL(retval);
}
return SMFIS_CONTINUE;
}