Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/phpredis/phpredis.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormichael-grunder <michael.grunder@gmail.com>2019-01-27 07:04:23 +0300
committermichael-grunder <michael.grunder@gmail.com>2019-01-27 07:57:16 +0300
commitf9928642b5e539bbdca43ec51ed9c9642cb42ded (patch)
treea83d33c9ffe0b8fe544942419db8365d04de7d26 /redis_array.c
parent627be58e7386b611e5db63c38362c04a2791d656 (diff)
PHP 5 is dead, long live PHP 7
This commit removes support for PHP 5 by getting rid of all of our Zend compatibility layer methods, as well as any call checking against PHP_MAJOR_VERSION or ZEND_MODULE_API_NO. Unit tests are all passing for Redis, RedisCluster, and RedisArray but this should still be considered a work in progress until more testing can be done. Addresses issue #1448
Diffstat (limited to 'redis_array.c')
-rw-r--r--redis_array.c179
1 files changed, 34 insertions, 145 deletions
diff --git a/redis_array.c b/redis_array.c
index 79cf0804..1d989cb9 100644
--- a/redis_array.c
+++ b/redis_array.c
@@ -170,51 +170,6 @@ redis_array_free(RedisArray *ra)
efree(ra);
}
-#if (PHP_MAJOR_VERSION < 7)
-typedef struct {
- zend_object std;
- RedisArray *ra;
-} redis_array_object;
-
-void
-free_redis_array_object(void *object TSRMLS_DC)
-{
- redis_array_object *obj = (redis_array_object *)object;
-
- zend_object_std_dtor(&obj->std TSRMLS_CC);
- if (obj->ra) {
- if (obj->ra->prev) redis_array_free(obj->ra->prev);
- redis_array_free(obj->ra);
- }
- efree(obj);
-}
-
-zend_object_value
-create_redis_array_object(zend_class_entry *ce TSRMLS_DC)
-{
- zend_object_value retval;
- redis_array_object *obj = ecalloc(1, sizeof(redis_array_object));
- memset(obj, 0, sizeof(redis_array_object));
-
- zend_object_std_init(&obj->std, ce TSRMLS_CC);
-
-#if PHP_VERSION_ID < 50399
- zval *tmp;
- zend_hash_copy(obj->std.properties, &ce->default_properties,
- (copy_ctor_func_t)zval_add_ref, (void *)&tmp, sizeof(zval *));
-#else
- object_properties_init(&obj->std, ce);
-#endif
-
- retval.handle = zend_objects_store_put(obj,
- (zend_objects_store_dtor_t)zend_objects_destroy_object,
- (zend_objects_free_object_storage_t)free_redis_array_object,
- NULL TSRMLS_CC);
- retval.handlers = zend_get_std_object_handlers();
-
- return retval;
-}
-#else
typedef struct {
RedisArray *ra;
zend_object std;
@@ -251,7 +206,6 @@ create_redis_array_object(zend_class_entry *ce TSRMLS_DC)
return &obj->std;
}
-#endif
/**
* redis_array_get
@@ -505,7 +459,7 @@ PHP_METHOD(RedisArray, __call)
zval *z_args;
char *cmd;
- strlen_t cmd_len;
+ size_t cmd_len;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Osa",
&object, redis_array_ce, &cmd, &cmd_len, &z_args) == FAILURE) {
@@ -545,7 +499,7 @@ PHP_METHOD(RedisArray, _target)
zval *object;
RedisArray *ra;
char *key;
- strlen_t key_len;
+ size_t key_len;
zval *redis_inst;
int i;
@@ -571,7 +525,7 @@ PHP_METHOD(RedisArray, _instance)
zval *object;
RedisArray *ra;
char *target;
- strlen_t target_len;
+ size_t target_len;
zval *z_redis;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os",
@@ -653,7 +607,7 @@ PHP_METHOD(RedisArray, _rehash)
PHP_METHOD(RedisArray, _continuum)
{
int i;
- zval *object;
+ zval *object, z_ret;
RedisArray *ra;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O",
@@ -668,15 +622,10 @@ PHP_METHOD(RedisArray, _continuum)
array_init(return_value);
if (ra->continuum) {
for (i = 0; i < ra->continuum->nb_points; ++i) {
- zval zv, *z_tmp = &zv;
-#if (PHP_MAJOR_VERSION < 7)
- MAKE_STD_ZVAL(z_tmp);
-#endif
-
- array_init(z_tmp);
- add_assoc_long(z_tmp, "index", ra->continuum->points[i].index);
- add_assoc_long(z_tmp, "value", ra->continuum->points[i].value);
- add_next_index_zval(return_value, z_tmp);
+ array_init(&z_ret);
+ add_assoc_long(&z_ret, "index", ra->continuum->points[i].index);
+ add_assoc_long(&z_ret, "value", ra->continuum->points[i].value);
+ add_next_index_zval(return_value, &z_ret);
}
}
}
@@ -685,6 +634,7 @@ PHP_METHOD(RedisArray, _continuum)
static void
multihost_distribute_call(RedisArray *ra, zval *return_value, zval *z_fun, int argc, zval *argv TSRMLS_DC)
{
+ zval z_arg;
int i;
/* Init our array return */
@@ -692,15 +642,11 @@ multihost_distribute_call(RedisArray *ra, zval *return_value, zval *z_fun, int a
/* Iterate our RedisArray nodes */
for (i = 0; i < ra->count; ++i) {
- zval zv, *z_tmp = &zv;
-#if (PHP_MAJOR_VERSION < 7)
- MAKE_STD_ZVAL(z_tmp);
-#endif
/* Call each node in turn */
- call_user_function(&redis_array_ce->function_table, &ra->redis[i], z_fun, z_tmp, argc, argv);
+ call_user_function(&redis_array_ce->function_table, &ra->redis[i], z_fun, &z_arg, argc, argv);
/* Add the result for this host */
- add_assoc_zval_ex(return_value, ZSTR_VAL(ra->hosts[i]), ZSTR_LEN(ra->hosts[i]), z_tmp);
+ add_assoc_zval_ex(return_value, ZSTR_VAL(ra->hosts[i]), ZSTR_LEN(ra->hosts[i]), &z_arg);
}
}
@@ -788,7 +734,7 @@ PHP_METHOD(RedisArray, keys)
zval *object, z_fun, z_args[1];
RedisArray *ra;
char *pattern;
- strlen_t pattern_len;
+ size_t pattern_len;
/* Make sure the prototype is correct */
if(zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os",
@@ -846,7 +792,7 @@ PHP_METHOD(RedisArray, setOption)
RedisArray *ra;
zend_long opt;
char *val_str;
- strlen_t val_len;
+ size_t val_len;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ols",
&object, redis_array_ce, &opt, &val_str, &val_len) == FAILURE) {
@@ -896,34 +842,6 @@ PHP_METHOD(RedisArray, select)
zval_dtor(&z_fun);
}
-#if (PHP_MAJOR_VERSION < 7)
-#define HANDLE_MULTI_EXEC(ra, cmd, cmdlen) do { \
- if (ra && ra->z_multi_exec) { \
- int i, num_varargs;\
- zval ***varargs = NULL, *z_arg_array; \
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O*",\
- &object, redis_array_ce, &varargs, &num_varargs) == FAILURE) {\
- RETURN_FALSE;\
- }\
- /* copy all args into a zval hash table */\
- MAKE_STD_ZVAL(z_arg_array); \
- array_init(z_arg_array);\
- for(i = 0; i < num_varargs; ++i) {\
- zval *z_tmp;\
- MAKE_STD_ZVAL(z_tmp); \
- ZVAL_ZVAL(z_tmp, *varargs[i], 1, 0); \
- add_next_index_zval(z_arg_array, z_tmp); \
- }\
- /* call */\
- ra_forward_call(INTERNAL_FUNCTION_PARAM_PASSTHRU, ra, cmd, cmdlen, z_arg_array, NULL); \
- zval_ptr_dtor(&z_arg_array); \
- if(varargs) {\
- efree(varargs);\
- }\
- return;\
- }\
-}while(0)
-#else
#define HANDLE_MULTI_EXEC(ra, cmd, cmdlen) do { \
if (ra && ra->z_multi_exec) { \
int i, num_varargs; \
@@ -945,12 +863,11 @@ PHP_METHOD(RedisArray, select)
return; \
} \
} while(0)
-#endif
/* MGET will distribute the call to several nodes and regroup the values. */
PHP_METHOD(RedisArray, mget)
{
- zval *object, *z_keys, z_argarray, *data, z_ret, *z_cur, z_tmp_array, *z_tmp;
+ zval *object, *z_keys, z_argarray, *data, z_ret, *z_cur, z_tmp_array;
int i, j, n;
RedisArray *ra;
int *pos, argc, *argc_each;
@@ -1027,14 +944,9 @@ PHP_METHOD(RedisArray, mget)
for(i = 0; i < argc; ++i) {
if(pos[i] != n) continue;
-#if (PHP_MAJOR_VERSION < 7)
- MAKE_STD_ZVAL(z_tmp);
-#else
- zval zv;
- z_tmp = &zv;
-#endif
- ZVAL_ZVAL(z_tmp, argv[i], 1, 0);
- add_next_index_zval(&z_argarray, z_tmp);
+ zval z_ret;
+ ZVAL_ZVAL(&z_ret, argv[i], 1, 0);
+ add_next_index_zval(&z_argarray, &z_ret);
}
zval z_fun;
@@ -1063,14 +975,9 @@ PHP_METHOD(RedisArray, mget)
for(i = 0, j = 0; i < argc; ++i) {
if (pos[i] != n || (z_cur = zend_hash_index_find(Z_ARRVAL(z_ret), j++)) == NULL) continue;
-#if (PHP_MAJOR_VERSION < 7)
- MAKE_STD_ZVAL(z_tmp);
-#else
- zval zv;
- z_tmp = &zv;
-#endif
- ZVAL_ZVAL(z_tmp, z_cur, 1, 0);
- add_index_zval(&z_tmp_array, i, z_tmp);
+ zval z_ret;
+ ZVAL_ZVAL(&z_ret, z_cur, 1, 0);
+ add_index_zval(&z_tmp_array, i, &z_ret);
}
zval_dtor(&z_ret);
}
@@ -1080,14 +987,9 @@ PHP_METHOD(RedisArray, mget)
for(i = 0; i < argc; ++i) {
if ((z_cur = zend_hash_index_find(Z_ARRVAL(z_tmp_array), i)) == NULL) continue;
-#if (PHP_MAJOR_VERSION < 7)
- MAKE_STD_ZVAL(z_tmp);
-#else
- zval zv;
- z_tmp = &zv;
-#endif
- ZVAL_ZVAL(z_tmp, z_cur, 1, 0);
- add_next_index_zval(return_value, z_tmp);
+ zval z_ret;
+ ZVAL_ZVAL(&z_ret, z_cur, 1, 0);
+ add_next_index_zval(return_value, &z_ret);
}
/* cleanup */
@@ -1170,16 +1072,13 @@ PHP_METHOD(RedisArray, mset)
for(i = 0; i < argc; ++i) {
if(pos[i] != n) continue;
- zval zv, *z_tmp = &zv;
-#if (PHP_MAJOR_VERSION < 7)
- MAKE_STD_ZVAL(z_tmp);
-#endif
+ zval z_ret;
if (argv[i] == NULL) {
- ZVAL_NULL(z_tmp);
+ ZVAL_NULL(&z_ret);
} else {
- ZVAL_ZVAL(z_tmp, argv[i], 1, 0);
+ ZVAL_ZVAL(&z_ret, argv[i], 1, 0);
}
- add_assoc_zval_ex(&z_argarray, ZSTR_VAL(keys[i]), ZSTR_LEN(keys[i]), z_tmp);
+ add_assoc_zval_ex(&z_argarray, ZSTR_VAL(keys[i]), ZSTR_LEN(keys[i]), &z_ret);
found++;
}
@@ -1257,15 +1156,10 @@ static void ra_generic_del(INTERNAL_FUNCTION_PARAMETERS, char *kw, int kw_len) {
array_init(&z_keys);
for (i = 0; i < argc; ++i) {
zval *z_arg = &z_args[i];
-#if (PHP_MAJOR_VERSION < 7)
- MAKE_STD_ZVAL(z_tmp);
-#else
- zval zv;
- z_tmp = &zv;
-#endif
- ZVAL_ZVAL(z_tmp, z_arg, 1, 0);
+ zval z_ret;
+ ZVAL_ZVAL(&z_ret, z_arg, 1, 0);
/* add copy to z_keys */
- add_next_index_zval(&z_keys, z_tmp);
+ add_next_index_zval(&z_keys, &z_ret);
}
free_zkeys = 1;
}
@@ -1319,14 +1213,9 @@ static void ra_generic_del(INTERNAL_FUNCTION_PARAMETERS, char *kw, int kw_len) {
for(i = 0; i < argc; ++i) {
if(pos[i] != n) continue;
-#if (PHP_MAJOR_VERSION < 7)
- MAKE_STD_ZVAL(z_tmp);
-#else
- zval zv;
- z_tmp = &zv;
-#endif
- ZVAL_ZVAL(z_tmp, argv[i], 1, 0);
- add_next_index_zval(&z_argarray, z_tmp);
+ zval z_ret;
+ ZVAL_ZVAL(&z_ret, argv[i], 1, 0);
+ add_next_index_zval(&z_argarray, &z_ret);
found++;
}
@@ -1383,7 +1272,7 @@ PHP_METHOD(RedisArray, multi)
RedisArray *ra;
zval *z_redis;
char *host;
- strlen_t host_len;
+ size_t host_len;
zend_long multi_value = MULTI;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os|l",