diff options
author | Pavlo Yatsukhnenko <yatsukhnenko@gmail.com> | 2016-10-25 11:04:01 +0300 |
---|---|---|
committer | Pavlo Yatsukhnenko <yatsukhnenko@gmail.com> | 2016-10-25 22:03:44 +0300 |
commit | 88658b5e9bf2b40e769169e7e77e19486286373d (patch) | |
tree | 84ac491b1a6d63c310fa2afdd30dce9e573b9e7a | |
parent | 8cfcad0b56cf3aa39fd058ef6430d5ae65ff6ec3 (diff) |
WIP: php7 compatibility
Wrap create_cluster_context
-rw-r--r-- | redis_array_impl.c | 7 | ||||
-rw-r--r-- | redis_cluster.c | 28 | ||||
-rw-r--r-- | redis_cluster.h | 7 |
3 files changed, 35 insertions, 7 deletions
diff --git a/redis_array_impl.c b/redis_array_impl.c index 44738d31..a2f8e790 100644 --- a/redis_array_impl.c +++ b/redis_array_impl.c @@ -990,9 +990,10 @@ ra_move_hash(const char *key, int key_len, zval *z_from, zval *z_to, long ttl TS zval z_fun_hgetall, z_fun_hmset, z_ret_dest, z_args[2]; /* run HGETALL on source */ - ZVAL_STRINGL(&z_fun_hgetall, "HGETALL", 7); - ZVAL_STRINGL(&z_args[0], key, key_len); - call_user_function(&redis_ce->function_table, z_from, &z_fun_hgetall, &z_args[1], 1, z_args); + INIT_ZVAL(z_args[0]); + ZVAL_STRINGL(&z_args[0], key, key_len); + ZVAL_STRINGL(&z_fun_hgetall, "HGETALL", 7); + call_user_function(&redis_ce->function_table, z_from, &z_fun_hgetall, &z_args[1], 1, z_args); zval_dtor(&z_fun_hgetall); if (Z_TYPE(z_args[1]) != IS_ARRAY) { /* key not found or replaced */ diff --git a/redis_cluster.c b/redis_cluster.c index 5ffbd9ea..8fdd7453 100644 --- a/redis_cluster.c +++ b/redis_cluster.c @@ -36,7 +36,13 @@ zend_class_entry *redis_cluster_ce; /* Exception handler */ zend_class_entry *redis_cluster_exception_ce; + +#if (PHP_MAJOR_VERSION < 7) static zend_class_entry *spl_rte_ce = NULL; +#else +/* Handlers for RedisCluster */ +zend_object_handlers RedisCluster_handlers; +#endif /* Argument info for HSCAN, SSCAN, HSCAN */ ZEND_BEGIN_ARG_INFO_EX(arginfo_kscan_cl, 0, 0, 2) @@ -263,14 +269,22 @@ PHPAPI zend_class_entry *rediscluster_get_exception_base(int root TSRMLS_DC) { } /* Create redisCluster context */ +#if (PHP_MAJOR_VERSION < 7) zend_object_value create_cluster_context(zend_class_entry *class_type TSRMLS_DC) { - zend_object_value retval; redisCluster *cluster; // Allocate our actual struct cluster = emalloc(sizeof(redisCluster)); memset(cluster, 0, sizeof(redisCluster)); +#else +zend_object * +create_cluster_context(zend_class_entry *class_type TSRMLS_DC) { + redisCluster *cluster; + + // Allocate our actual struct + cluster = emalloc(sizeof(redisCluster) + sizeof(zval) * (class_type->default_properties_count - 1)); +#endif // We're not currently subscribed anywhere cluster->subscribed_slot = -1; @@ -291,7 +305,8 @@ create_cluster_context(zend_class_entry *class_type TSRMLS_DC) { // Initialize it zend_object_std_init(&cluster->std, class_type TSRMLS_CC); - +#if (PHP_MAJOR_VERSION < 7) + zend_object_value retval; #if PHP_VERSION_ID < 50399 zval *tmp; @@ -306,6 +321,15 @@ create_cluster_context(zend_class_entry *class_type TSRMLS_DC) { retval.handlers = zend_get_std_object_handlers(); return retval; +#else + object_properties_init(&cluster->std, class_type); + memcpy(&RedisCluster_handlers, zend_get_std_object_handlers(), sizeof(RedisCluster_handlers)); + RedisCluster_handlers.free_obj = free_cluster_context; + + cluster->std.handlers = &RedisCluster_handlers; + + return &cluster->std; +#endif } /* Free redisCluster context */ diff --git a/redis_cluster.h b/redis_cluster.h index f6be80ba..1ff465b2 100644 --- a/redis_cluster.h +++ b/redis_cluster.h @@ -107,8 +107,11 @@ PHP_REDIS_API zend_class_entry *rediscluster_get_exception_base(int root TSRMLS_DC); /* Create cluster context */ -zend_object_value create_cluster_context(zend_class_entry *class_type - TSRMLS_DC); +#if (PHP_MAJOR_VERSION < 7) +zend_object_value create_cluster_context(zend_class_entry *class_type TSRMLS_DC); +#else +zend_object *create_cluster_context(zend_class_entry *class_type TSRMLS_DC); +#endif /* Free cluster context struct */ void free_cluster_context(void *object TSRMLS_DC); |