コード例 #1
0
ファイル: php_xmlreader.c プロジェクト: IMSoP/php-src
/* {{{ xmlreader_write_property */
zval *xmlreader_write_property(zval *object, zval *member, zval *value, void **cache_slot)
{
	xmlreader_object *obj;
	zval tmp_member;
	xmlreader_prop_handler *hnd = NULL;

 	if (Z_TYPE_P(member) != IS_STRING) {
		ZVAL_STR(&tmp_member, zval_get_string_func(member));
		member = &tmp_member;
	}

	obj = Z_XMLREADER_P(object);

	if (obj->prop_handler != NULL) {
		hnd = zend_hash_find_ptr(obj->prop_handler, Z_STR_P(member));
	}
	if (hnd != NULL) {
		php_error_docref(NULL, E_WARNING, "Cannot write to read-only property");
	} else {
		value = zend_std_write_property(object, member, value, cache_slot);
	}

	if (member == &tmp_member) {
		zval_ptr_dtor_str(&tmp_member);
	}

	return value;
}
コード例 #2
0
ファイル: config.c プロジェクト: Myleft/cphalcon7
/**
 * Sets values
 *
 * @param array $arrayConfig
 */
PHP_METHOD(Phalcon_Config, val){

	zval *array_config, *value;
	zend_string *str_key;
	ulong idx;

	phalcon_fetch_params(0, 1, 0, &array_config);

	/** 
	 * Throw exceptions if bad parameters are passed
	 */
	if (Z_TYPE_P(array_config) != IS_ARRAY) {
		PHALCON_THROW_EXCEPTION_STRW(phalcon_config_exception_ce, "The configuration must be an Array");
		return;
	}

	ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(array_config), idx, str_key, value) {
		zval key;
		if (str_key) {
			ZVAL_STR(&key, str_key);
		} else {
			ZVAL_LONG(&key, idx);
		}
		PHALCON_CALL_SELFW(NULL, "offsetset", &key, value);
	} ZEND_HASH_FOREACH_END();
コード例 #3
0
ファイル: mysqli.c プロジェクト: IMSoP/php-src
/* {{{ mysqli_write_property */
zval *mysqli_write_property(zval *object, zval *member, zval *value, void **cache_slot)
{
	zval tmp_member;
	mysqli_object *obj;
	mysqli_prop_handler *hnd = NULL;

	if (Z_TYPE_P(member) != IS_STRING) {
		ZVAL_STR(&tmp_member, zval_get_string_func(member));
		member = &tmp_member;
	}

	obj = Z_MYSQLI_P(object);

	if (obj->prop_handler != NULL) {
		hnd = zend_hash_find_ptr(obj->prop_handler, Z_STR_P(member));
	}

	if (hnd) {
		hnd->write_func(obj, value);
	} else {
		value = zend_std_write_property(object, member, value, cache_slot);
	}

	if (member == &tmp_member) {
		zval_ptr_dtor_str(&tmp_member);
	}

	return value;
}
コード例 #4
0
ファイル: zend_optimizer.c プロジェクト: akayzhang/php-src
static inline void drop_leading_backslash(zval *val) {
	if (Z_STRVAL_P(val)[0] == '\\') {
		zend_string *str = zend_string_init(Z_STRVAL_P(val) + 1, Z_STRLEN_P(val) - 1, 0);
		zval_dtor(val);
		ZVAL_STR(val, str);
	}
}
コード例 #5
0
ファイル: mysqli.c プロジェクト: IMSoP/php-src
/* {{{ mysqli_read_property */
zval *mysqli_read_property(zval *object, zval *member, int type, void **cache_slot, zval *rv)
{
	zval tmp_member;
	zval *retval;
	mysqli_object *obj;
	mysqli_prop_handler *hnd = NULL;

	obj = Z_MYSQLI_P(object);

	if (Z_TYPE_P(member) != IS_STRING) {
		ZVAL_STR(&tmp_member, zval_get_string_func(member));
		member = &tmp_member;
	}

	if (obj->prop_handler != NULL) {
		hnd = zend_hash_find_ptr(obj->prop_handler, Z_STR_P(member));
	}

	if (hnd) {
		retval = hnd->read_func(obj, rv);
		if (retval == NULL) {
			retval = &EG(uninitialized_zval);
		}
	} else {
		retval = zend_std_read_property(object, member, type, cache_slot, rv);
	}

	if (member == &tmp_member) {
		zval_ptr_dtor_str(&tmp_member);
	}

	return retval;
}
コード例 #6
0
ファイル: apc.c プロジェクト: Myleft/cphalcon7
PHP_METHOD(Phalcon_Mvc_Model_MetaData_Apc, reset)
{
	zval *real_key = NULL, *meta;
	zend_string *str_key;
	ulong idx;

	PHALCON_MM_GROW();

	meta = phalcon_read_property(getThis(), SL("_metaData"), PH_NOISY);

	if (Z_TYPE_P(meta) == IS_ARRAY) {
		zval *prefix = phalcon_read_property(getThis(), SL("_prefix"), PH_NOISY);

		ZEND_HASH_FOREACH_KEY(Z_ARRVAL_P(meta), idx, str_key) {
			zval key;
			if (str_key) {
				ZVAL_STR(&key, str_key);
			} else {
				ZVAL_LONG(&key, idx);
			}

			PHALCON_INIT_NVAR(real_key);
			phalcon_concat_svsv(real_key, SL("$PMM$"), prefix, SL("meta-"), &key, 0);
			PHALCON_CALL_FUNCTION(NULL, "apc_delete", real_key);
		} ZEND_HASH_FOREACH_END();
コード例 #7
0
ファイル: ast.c プロジェクト: rlerdorf/php-ast
static inline void ast_update_property(zval *object, zend_string *name, zval *value, void **cache_slot) {
	zval name_zv;
	ZVAL_STR(&name_zv, name);

	Z_TRY_DELREF_P(value);
	Z_OBJ_HT_P(object)->write_property(object, &name_zv, value, cache_slot);
}
コード例 #8
0
static
void binary_serialize_hashtable_key(int8_t keytype, PHPOutputTransport& transport, HashTable* ht, HashPosition& ht_pos) {
    bool keytype_is_numeric = (!((keytype == T_STRING) || (keytype == T_UTF8) || (keytype == T_UTF16)));

    zend_string* key;
    uint key_len;
    long index = 0;

    zval z;

    int res = zend_hash_get_current_key_ex(ht, &key, (zend_ulong*)&index, &ht_pos);
    if (keytype_is_numeric) {
        if (res == HASH_KEY_IS_STRING) {
            index = strtol(ZSTR_VAL(key), nullptr, 10);
        }
        ZVAL_LONG(&z, index);
    } else {
        char buf[64];
        if (res == HASH_KEY_IS_STRING) {
            ZVAL_STR(&z, key);
        } else {
            snprintf(buf, 64, "%ld", index);
            ZVAL_STRING(&z, buf);
        }
    }
    binary_serialize(keytype, transport, &z, nullptr);
    zval_dtor(&z);
}
コード例 #9
0
ファイル: php_xmlreader.c プロジェクト: IMSoP/php-src
/* {{{ xmlreader_get_property_ptr_ptr */
zval *xmlreader_get_property_ptr_ptr(zval *object, zval *member, int type, void **cache_slot)
{
	xmlreader_object *obj;
	zval tmp_member;
	zval *retval = NULL;
	xmlreader_prop_handler *hnd = NULL;

 	if (Z_TYPE_P(member) != IS_STRING) {
		ZVAL_STR(&tmp_member, zval_get_string_func(member));
		member = &tmp_member;
	}

	obj = Z_XMLREADER_P(object);

	if (obj->prop_handler != NULL) {
		hnd = zend_hash_find_ptr(obj->prop_handler, Z_STR_P(member));
	}

	if (hnd == NULL) {
		retval = zend_std_get_property_ptr_ptr(object, member, type, cache_slot);
	}

	if (member == &tmp_member) {
		zval_ptr_dtor_str(&tmp_member);
	}

	return retval;
}
コード例 #10
0
ファイル: mysqli_prop.c プロジェクト: AmesianX/php-src
/* {{{ property link_stat_read */
static zval *link_stat_read(mysqli_object *obj, zval *retval)
{
	MY_MYSQL *mysql;

	ZVAL_NULL(retval);

#if defined(MYSQLI_USE_MYSQLND)
	CHECK_STATUS(MYSQLI_STATUS_INITIALIZED);
#else
	CHECK_STATUS(MYSQLI_STATUS_VALID);
#endif

 	mysql = (MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;

	if (mysql) {
#if defined(MYSQLI_USE_MYSQLND)
		zend_string * stat_msg;
		if (mysqlnd_stat(mysql->mysql, &stat_msg) == PASS) {
			ZVAL_STR(retval, stat_msg);
		}
#else
		char * stat_msg;
		if ((stat_msg = (char *)mysql_stat(mysql->mysql))) {
			ZVAL_STRING(retval, stat_msg);
		}
#endif
	}
	return retval;
}
コード例 #11
0
ファイル: zend_closures.c プロジェクト: ChadSikorra/php-src
static void zend_closure_call_magic(INTERNAL_FUNCTION_PARAMETERS) /* {{{ */ {
	zend_fcall_info fci;
	zend_fcall_info_cache fcc;
	zval params[2];

	memset(&fci, 0, sizeof(zend_fcall_info));
	memset(&fci, 0, sizeof(zend_fcall_info_cache));

	fci.size = sizeof(zend_fcall_info);
	fci.retval = return_value;

	fcc.initialized = 1;
	fcc.function_handler = (zend_function *) EX(func)->common.arg_info;
	fci.params = params;
	fci.param_count = 2;
	ZVAL_STR(&fci.params[0], EX(func)->common.function_name);
	array_init(&fci.params[1]);
	zend_copy_parameters_array(ZEND_NUM_ARGS(), &fci.params[1]);

	fci.object = Z_OBJ(EX(This));
	fcc.object = Z_OBJ(EX(This));
	fcc.calling_scope = zend_get_executed_scope();

	zend_call_function(&fci, &fcc);

	zval_ptr_dtor(&fci.params[0]);
	zval_ptr_dtor(&fci.params[1]);
}
コード例 #12
0
ファイル: msgpack_convert.c プロジェクト: oerdnj/msgpack-php
static inline int msgpack_convert_string_to_properties(zval *object, zend_string *key, zval *val, HashTable *var)/* {{{ */ {
    zend_class_entry *ce = Z_OBJCE_P(object);
    HashTable *propers = Z_OBJPROP_P(object);
    zend_string *prot_name, *priv_name;
    zval pub_name;
    int return_code;

    ZVAL_STR(&pub_name, key);
    priv_name = zend_mangle_property_name(ZSTR_VAL(ce->name), ZSTR_LEN(ce->name), ZSTR_VAL(key), ZSTR_LEN(key), 1);
    prot_name = zend_mangle_property_name("*", 1, ZSTR_VAL(key), ZSTR_LEN(key), 1);

    if (zend_hash_find(propers, priv_name) != NULL) {
        zend_update_property_ex(ce, object, key, val);
        return_code = SUCCESS;
    } else if (zend_hash_find(propers, prot_name) != NULL) {
        zend_update_property_ex(ce, object, key, val);
        return_code = SUCCESS;
    } else {
        zend_std_write_property(object, &pub_name, val, NULL);
        return_code = FAILURE;
    }
    zend_hash_add(var, Z_STR(pub_name), val);

    zend_string_release(priv_name);
    zend_string_release(prot_name);

    return return_code;
}
コード例 #13
0
ファイル: globals.c プロジェクト: lizhanhui/pthreads
/* {{{ */
zend_bool pthreads_globals_init(){
	if (!PTHREADS_G(init)&&!PTHREADS_G(failed)) {
		PTHREADS_G(init)=1;
		if (!(PTHREADS_G(monitor)=pthreads_monitor_alloc()))
			PTHREADS_G(failed)=1;
		if (PTHREADS_G(failed)) {
		    PTHREADS_G(init)=0;
		} else {
		    zend_hash_init(
		    	&PTHREADS_G(objects), 64, NULL, (dtor_func_t) NULL, 1);
			zend_hash_init(
				&PTHREADS_G(gstrings), 64, NULL, (dtor_func_t) NULL, 1);
		}

#define INIT_STRING(n, v) PTHREADS_G(strings).n = zend_string_init(v, 1)
		INIT_STRING(run, ZEND_STRL("run"));
		INIT_STRING(session.cache_limiter, ZEND_STRL("cache_limiter"));
		INIT_STRING(session.use_cookies, ZEND_STRL("use_cookies"));
#undef INIT_STRING
		
		ZVAL_STR(&PTHREADS_G(strings).worker, zend_string_init(ZEND_STRL("worker"), 1));

		return PTHREADS_G(init);
	} else return 0;
} /* }}} */
コード例 #14
0
ファイル: browscap.c プロジェクト: Synchro/php-src
static HashTable *browscap_entry_to_array(browser_data *bdata, browscap_entry *entry) {
	zval tmp;
	uint32_t i;

	HashTable *ht;
	ALLOC_HASHTABLE(ht);
	zend_hash_init(ht, 8, NULL, ZVAL_PTR_DTOR, 0);

	ZVAL_STR(&tmp, browscap_convert_pattern(entry->pattern, 0));
	zend_hash_str_add(ht, "browser_name_regex", sizeof("browser_name_regex")-1, &tmp);

	ZVAL_STR_COPY(&tmp, entry->pattern);
	zend_hash_str_add(ht, "browser_name_pattern", sizeof("browser_name_pattern")-1, &tmp);

	if (entry->parent) {
		ZVAL_STR_COPY(&tmp, entry->parent);
		zend_hash_str_add(ht, "parent", sizeof("parent")-1, &tmp);
	}

	for (i = entry->kv_start; i < entry->kv_end; i++) {
		ZVAL_STR_COPY(&tmp, bdata->kv[i].value);
		zend_hash_add(ht, bdata->kv[i].key, &tmp);
	}

	return ht;
}
コード例 #15
0
ファイル: zend_closures.c プロジェクト: Mingyangzu/php-src
static ZEND_NAMED_FUNCTION(zend_closure_call_magic) /* {{{ */ {
	zend_fcall_info fci;
	zend_fcall_info_cache fcc;
	zval params[2];

	memset(&fci, 0, sizeof(zend_fcall_info));
	memset(&fcc, 0, sizeof(zend_fcall_info_cache));

	fci.size = sizeof(zend_fcall_info);
	fci.retval = return_value;

	fcc.function_handler = (zend_function *) EX(func)->common.arg_info;
	fci.params = params;
	fci.param_count = 2;
	ZVAL_STR(&fci.params[0], EX(func)->common.function_name);
	if (ZEND_NUM_ARGS()) {
		array_init_size(&fci.params[1], ZEND_NUM_ARGS());
		zend_copy_parameters_array(ZEND_NUM_ARGS(), &fci.params[1]);
	} else {
		ZVAL_EMPTY_ARRAY(&fci.params[1]);
	}

	fci.object = Z_OBJ(EX(This));
	fcc.object = Z_OBJ(EX(This));

	zend_call_function(&fci, &fcc);

	zval_ptr_dtor(&fci.params[0]);
	zval_ptr_dtor(&fci.params[1]);
}
コード例 #16
0
ファイル: php_xmlreader.c プロジェクト: IMSoP/php-src
/* {{{ xmlreader_read_property */
zval *xmlreader_read_property(zval *object, zval *member, int type, void **cache_slot, zval *rv)
{
	xmlreader_object *obj;
	zval tmp_member;
	zval *retval = NULL;
	xmlreader_prop_handler *hnd = NULL;

 	if (Z_TYPE_P(member) != IS_STRING) {
		ZVAL_STR(&tmp_member, zval_get_string_func(member));
		member = &tmp_member;
	}

	obj = Z_XMLREADER_P(object);

	if (obj->prop_handler != NULL) {
		hnd = zend_hash_find_ptr(obj->prop_handler, Z_STR_P(member));
	}

	if (hnd != NULL) {
		if (xmlreader_property_reader(obj, hnd, rv) == FAILURE) {
			retval = &EG(uninitialized_zval);
		} else {
			retval = rv;
		}
	} else {
		retval = zend_std_read_property(object, member, type, cache_slot, rv);
	}

	if (member == &tmp_member) {
		zval_ptr_dtor_str(&tmp_member);
	}
	return retval;
}
コード例 #17
0
ファイル: files.c プロジェクト: dreamsxin/cphalcon7
/**
 * Writes parsed annotations to files
 *
 * @param string $key
 * @param Phalcon\Annotations\Reflection $data
 */
PHP_METHOD(Phalcon_Annotations_Adapter_Files, write){

	zval *key, *data, annotations_dir = {}, virtual_key = {}, path = {}, php_export = {}, status = {};
	smart_str exp = { 0 };

	phalcon_fetch_params(0, 2, 0, &key, &data);
	PHALCON_ENSURE_IS_STRING(key);

	phalcon_return_property(&annotations_dir, getThis(), SL("_annotationsDir"));
	
	/** 
	 * Paths must be normalized before be used as keys
	 */
	phalcon_prepare_virtual_path_ex(&virtual_key, Z_STRVAL_P(key), Z_STRLEN_P(key), '_');

	PHALCON_CONCAT_VVS(&path, &annotations_dir, &virtual_key, ".php");
	
	smart_str_appends(&exp, "<?php return ");
	php_var_export_ex(data, 0, &exp);
	smart_str_appendc(&exp, ';');
	smart_str_0(&exp);

	ZVAL_STR(&php_export, exp.s);

	phalcon_file_put_contents(&status, &path, &php_export);
	if (PHALCON_IS_FALSE(&status)) {
		PHALCON_THROW_EXCEPTION_STRW(phalcon_annotations_exception_ce, "Annotations directory cannot be written");
		return;
	}
}
コード例 #18
0
ファイル: apc_cache.c プロジェクト: Cum6upck/apcu
/* {{{ my_serialize_object */
static zval* my_serialize_object(zval* dst, const zval* src, apc_context_t* ctxt)
{
    unsigned char *buf = NULL;
	size_t buf_len = 0;
	
    apc_pool* pool = ctxt->pool;
    apc_serialize_t serialize = APC_SERIALIZER_NAME(php);
    void *config = NULL;
	zend_string *serial = NULL;

    if(ctxt->serializer) {
        serialize = ctxt->serializer->serialize;
        config = 
			(ctxt->serializer->config != NULL) ? 
			ctxt->serializer->config : ctxt;
    }

	ZVAL_NULL(dst);

    if(serialize((unsigned char**)&buf, &buf_len, src, config)) {
		if (!(serial = apc_pstrnew(buf, buf_len, pool))) {	
			efree(buf);

			return dst;
		}

		ZVAL_STR(dst, serial);
		Z_TYPE_INFO_P(dst) = IS_OBJECT;
		efree(buf);
    }

    return dst;
}
コード例 #19
0
ファイル: variables.c プロジェクト: Myleft/cphalcon7
/**
 * var_export returns php variables without using the PHP userland
 */
void phalcon_var_export_ex(zval *return_value, zval *var) {

    smart_str buf = { 0 };

    php_var_export_ex(var, 1, &buf);
    smart_str_0(&buf);
    ZVAL_STR(return_value, buf.s);
}
コード例 #20
0
ファイル: zend_constants.c プロジェクト: VBart/php-src
ZEND_API void zend_register_stringl_constant(const char *name, size_t name_len, char *strval, size_t strlen, int flags, int module_number)
{
	zend_constant c;

	ZVAL_STR(&c.value, zend_string_init_interned(strval, strlen, flags & CONST_PERSISTENT));
	ZEND_CONSTANT_SET_FLAGS(&c, flags, module_number);
	c.name = zend_string_init_interned(name, name_len, flags & CONST_PERSISTENT);
	zend_register_constant(&c);
}
コード例 #21
0
ファイル: zend.c プロジェクト: LuthandoE/php-src
ZEND_API int zend_make_printable_zval(zval *expr, zval *expr_copy) /* {{{ */
{
	if (Z_TYPE_P(expr) == IS_STRING) {
		return 0;
	} else {
		ZVAL_STR(expr_copy, _zval_get_string_func(expr));
		return 1;
	}
}
コード例 #22
0
ファイル: file.c プロジェクト: oscarmolinadev/zephir
void zephir_basename(zval *return_value, zval *path)
{
	if (EXPECTED(Z_TYPE_P(path) == IS_STRING)) {
		zend_string *ret;
		ret = php_basename(Z_STRVAL_P(path), Z_STRLEN_P(path), NULL, 0);
		ZVAL_STR(return_value, ret);
	} else {
		ZVAL_FALSE(return_value);
	}
}
コード例 #23
0
ファイル: xml.c プロジェクト: 0x1111/php-src
static void _xml_xmlchar_zval(const XML_Char *s, int len, const XML_Char *encoding, zval *ret)
{
	if (s == NULL) {
		ZVAL_FALSE(ret);
		return;
	}
	if (len == 0) {
		len = _xml_xmlcharlen(s);
	}
	ZVAL_STR(ret, xml_utf8_decode(s, len, encoding));
}
コード例 #24
0
ファイル: group.c プロジェクト: dreamsxin/cphalcon7
static void phalcon_mvc_router_group_add_helper(INTERNAL_FUNCTION_PARAMETERS, zend_string *method)
{
	zval *pattern, *paths = NULL, http_method = {};

	phalcon_fetch_params(0, 1, 1, &pattern, &paths);

	if (!paths) {
		paths = &PHALCON_GLOBAL(z_null);
	}

	ZVAL_STR(&http_method, method);
	PHALCON_RETURN_CALL_METHODW(getThis(), "_addroute", pattern, paths, &http_method);
}
コード例 #25
0
ファイル: protocol.c プロジェクト: Lucups/Skyray
static int http_on_message_complete(http_parser *parser)
{

    skyray_http_protocol_t *protocol = (skyray_http_protocol_t *)parser;
    skyray_http_request_t *req = skyray_http_request_from_obj(protocol->req);

    if (skyray_buffer_initialized(&protocol->body)) {
        ZVAL_STR(&req->message.raw_body, protocol->body.buf);
    }

    skyray_http_protocol_on_request(protocol);

    return 0;
}
コード例 #26
0
ファイル: mysqli.c プロジェクト: DragonBe/php-src
HashTable *mysqli_object_get_debug_info(zval *object, int *is_temp)
{
	mysqli_object *obj = Z_MYSQLI_P(object);
	HashTable *retval, *props = obj->prop_handler;
	mysqli_prop_handler *entry;

	retval = zend_new_array(zend_hash_num_elements(props) + 1);

	ZEND_HASH_FOREACH_PTR(props, entry) {
		zval rv, member;
		zval *value;
		ZVAL_STR(&member, entry->name);
		value = mysqli_read_property(object, &member, BP_VAR_IS, 0, &rv);
		if (value != &EG(uninitialized_zval)) {
			zend_hash_add(retval, Z_STR(member), value);
		}
	} ZEND_HASH_FOREACH_END();
コード例 #27
0
ファイル: request.c プロジェクト: Lucups/Skyray
SKYRAY_METHOD(HttpRequest, setUri)
{
    zend_string *uri;
    int i;

    if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &uri) ==  FAILURE) {
        return;
    }

    skyray_http_request_t *intern = skyray_http_request_from_obj(Z_OBJ_P(getThis()));

    zval_dtor(&intern->uri);
    ZVAL_STR(&intern->uri, uri);
    zval_addref_p(&intern->uri);

    RETURN_ZVAL(getThis(), 1, 0);
}
コード例 #28
0
int php_ds_default_cast_object(zval *obj, zval *return_value, int type)
{
    switch (type) {
        case IS_STRING: {
            smart_str buffer = {0};

            smart_str_appendl(&buffer, "object(", 7);
            smart_str_append (&buffer, Z_OBJCE_P(obj)->name);
            smart_str_appendc(&buffer, ')');

            smart_str_0(&buffer);
            ZVAL_STR(return_value, buffer.s);
            return SUCCESS;
        }
    }

    return FAILURE;
}
コード例 #29
0
ファイル: promise.c プロジェクト: Lucups/Skyray
void skyray_promise_then(skyray_promise_t *self, zval *on_fulfilled, zval *on_rejected, zval *retval)
{
    zval *result, params[2], function_name;

    if (Z_TYPE(self->result) != IS_UNDEF) {
        result = skyray_promise_unwrap(self);

        ZVAL_NULL(&params[0]);
        ZVAL_NULL(&params[1]);

        ZVAL_STR(&function_name, intern_str_then);

        if (on_fulfilled) {
            ZVAL_COPY_VALUE(&params[0], on_fulfilled);
        }
        if (on_rejected) {
            ZVAL_COPY_VALUE(&params[1], on_rejected);
        }

        call_user_function(NULL, result, &function_name, retval, 2, params);

        assert(EG(exception) == NULL);
    } else {
        object_init_ex(retval, skyray_ce_Promise);
        skyray_promise_t *promise = skyray_promise_from_obj(Z_OBJ_P(retval));

        promise_resolve_context_t *context;

        if (on_fulfilled != NULL && !ZVAL_IS_NULL(on_fulfilled)) {
            context = promise_resolve_context_create(promise, on_fulfilled, NULL);
        } else {
            context = promise_resolve_context_create(promise, NULL, self);
        }
        zend_hash_next_index_insert_ptr(&self->on_fulfilled, context);

        if (on_rejected != NULL && !ZVAL_IS_NULL(on_rejected)) {
            context = promise_resolve_context_create(promise, on_rejected, NULL);
        } else {
            context = promise_resolve_context_create(promise, NULL, self);
        }
        zend_hash_next_index_insert_ptr(&self->on_rejcted, context);
    }
}
コード例 #30
0
ファイル: protocol.c プロジェクト: Lucups/Skyray
static int http_on_headers_complete(http_parser *parser)
{
    skyray_http_protocol_t *protocol = (skyray_http_protocol_t *)parser;
    skyray_http_request_t *req = skyray_http_request_from_obj(protocol->req);

    if (skyray_buffer_initialized(&protocol->header_value)) {
        skyray_http_message_add_header(&req->message, protocol->header_name.buf, protocol->header_value.buf, 0);
        skyray_buffer_release(&protocol->header_name);
        skyray_buffer_reset(&protocol->header_value);
    }

    ZVAL_STR(&req->uri, protocol->uri.buf);

    req->method = parser->method;
    req->message.version_major = parser->http_major;
    req->message.version_minor = parser->http_minor;

    return 0;
}