WIP: php7 compatibility · SmallEasy/phpredis@88658b5 · GitHub
Skip to content

Commit 88658b5

Browse files
committed
WIP: php7 compatibility
Wrap create_cluster_context
1 parent 8cfcad0 commit 88658b5

3 files changed

Lines changed: 35 additions & 7 deletions

File tree

redis_array_impl.c

Lines changed: 4 additions & 3 deletions

redis_cluster.c

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,13 @@ zend_class_entry *redis_cluster_ce;
3636

3737
/* Exception handler */
3838
zend_class_entry *redis_cluster_exception_ce;
39+
40+
#if (PHP_MAJOR_VERSION < 7)
3941
static zend_class_entry *spl_rte_ce = NULL;
42+
#else
43+
/* Handlers for RedisCluster */
44+
zend_object_handlers RedisCluster_handlers;
45+
#endif
4046

4147
/* Argument info for HSCAN, SSCAN, HSCAN */
4248
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) {
263269
}
264270

265271
/* Create redisCluster context */
272+
#if (PHP_MAJOR_VERSION < 7)
266273
zend_object_value
267274
create_cluster_context(zend_class_entry *class_type TSRMLS_DC) {
268-
zend_object_value retval;
269275
redisCluster *cluster;
270276

271277
// Allocate our actual struct
272278
cluster = emalloc(sizeof(redisCluster));
273279
memset(cluster, 0, sizeof(redisCluster));
280+
#else
281+
zend_object *
282+
create_cluster_context(zend_class_entry *class_type TSRMLS_DC) {
283+
redisCluster *cluster;
284+
285+
// Allocate our actual struct
286+
cluster = emalloc(sizeof(redisCluster) + sizeof(zval) * (class_type->default_properties_count - 1));
287+
#endif
274288

275289
// We're not currently subscribed anywhere
276290
cluster->subscribed_slot = -1;
@@ -291,7 +305,8 @@ create_cluster_context(zend_class_entry *class_type TSRMLS_DC) {
291305

292306
// Initialize it
293307
zend_object_std_init(&cluster->std, class_type TSRMLS_CC);
294-
308+
#if (PHP_MAJOR_VERSION < 7)
309+
zend_object_value retval;
295310
#if PHP_VERSION_ID < 50399
296311
zval *tmp;
297312

@@ -306,6 +321,15 @@ create_cluster_context(zend_class_entry *class_type TSRMLS_DC) {
306321
retval.handlers = zend_get_std_object_handlers();
307322

308323
return retval;
324+
#else
325+
object_properties_init(&cluster->std, class_type);
326+
memcpy(&RedisCluster_handlers, zend_get_std_object_handlers(), sizeof(RedisCluster_handlers));
327+
RedisCluster_handlers.free_obj = free_cluster_context;
328+
329+
cluster->std.handlers = &RedisCluster_handlers;
330+
331+
return &cluster->std;
332+
#endif
309333
}
310334

311335
/* Free redisCluster context */

redis_cluster.h

Lines changed: 5 additions & 2 deletions

0 commit comments

Comments
 (0)