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:
-rw-r--r--redis_array.c44
-rw-r--r--redis_array_impl.c47
-rw-r--r--redis_commands.c94
3 files changed, 95 insertions, 90 deletions
diff --git a/redis_array.c b/redis_array.c
index b349253b..cda66305 100644
--- a/redis_array.c
+++ b/redis_array.c
@@ -321,7 +321,7 @@ ra_forward_call(INTERNAL_FUNCTION_PARAMETERS, RedisArray *ra, const char *cmd, i
int key_len;
int i;
zval *redis_inst;
- zval z_fun;
+ zval z_fun, **z_callargs;
HashPosition pointer;
HashTable *h_args;
@@ -357,19 +357,19 @@ ra_forward_call(INTERNAL_FUNCTION_PARAMETERS, RedisArray *ra, const char *cmd, i
/* pass call through */
ZVAL_STRING(&z_fun, cmd); /* method name */
- zval z_callargs[argc];
+ z_callargs = emalloc(argc * sizeof(zval*));
/* copy args to array */
for (i = 0, zend_hash_internal_pointer_reset_ex(h_args, &pointer);
(zp_tmp = zend_hash_get_current_data_ex(h_args, &pointer)) != NULL;
++i, zend_hash_move_forward_ex(h_args, &pointer)) {
- ZVAL_DUP(&z_callargs[i], zp_tmp);
+ ZVAL_DUP(z_callargs[i], zp_tmp);
}
/* multi/exec */
if(ra->z_multi_exec) {
- call_user_function(&redis_ce->function_table, ra->z_multi_exec, &z_fun, return_value, argc, z_callargs TSRMLS_CC);
+ call_user_function(&redis_ce->function_table, ra->z_multi_exec, &z_fun, return_value, argc, *z_callargs TSRMLS_CC);
efree(z_callargs);
RETURN_ZVAL(getThis(), 1, 0);
}
@@ -377,7 +377,7 @@ ra_forward_call(INTERNAL_FUNCTION_PARAMETERS, RedisArray *ra, const char *cmd, i
/* CALL! */
if(ra->index && b_write_cmd) {
/* call using discarded temp value and extract exec results after. */
- call_user_function(&redis_ce->function_table, redis_inst, &z_fun, &z_tmp, argc, z_callargs TSRMLS_CC);
+ call_user_function(&redis_ce->function_table, redis_inst, &z_fun, &z_tmp, argc, *z_callargs TSRMLS_CC);
zval_dtor(&z_tmp);
/* add keys to index. */
@@ -386,7 +386,7 @@ ra_forward_call(INTERNAL_FUNCTION_PARAMETERS, RedisArray *ra, const char *cmd, i
/* call EXEC */
ra_index_exec(redis_inst, return_value, 0 TSRMLS_CC);
} else { /* call directly through. */
- call_user_function(&redis_ce->function_table, redis_inst, &z_fun, return_value, argc, z_callargs TSRMLS_CC);
+ call_user_function(&redis_ce->function_table, redis_inst, &z_fun, return_value, argc, *z_callargs TSRMLS_CC);
/* check if we have an error. */
if(RA_CALL_FAILED(return_value,cmd) && ra->prev && !b_write_cmd) { /* there was an error reading, try with prev ring. */
@@ -811,6 +811,7 @@ PHP_METHOD(RedisArray, mget)
int *pos, argc, *argc_each;
HashTable *h_keys;
HashPosition pointer;
+ zval **redis_instances, **argv;
/* Multi/exec support */
HANDLE_MULTI_EXEC("MGET");
@@ -832,7 +833,8 @@ PHP_METHOD(RedisArray, mget)
argc = zend_hash_num_elements(h_keys);
pos = emalloc(argc * sizeof(int));
- zval argv[argc], redis_instances[argc];
+ redis_instances = ecalloc(argc, sizeof(zval*));
+ argv = emalloc(argc * sizeof(zval*));
argc_each = emalloc(ra->count * sizeof(int));
memset(argc_each, 0, ra->count * sizeof(int));
@@ -866,10 +868,10 @@ PHP_METHOD(RedisArray, mget)
}
/* Find our node */
- redis_instances[i] = *ra_find_node(ra, key_lookup, key_len, &pos[i] TSRMLS_CC);
+ redis_instances[i] = ra_find_node(ra, key_lookup, key_len, &pos[i] TSRMLS_CC);
argc_each[pos[i]]++; /* count number of keys per node */
- argv[i] = *data;
+ argv[i] = data;
}
/* prepare return value */
@@ -887,7 +889,7 @@ PHP_METHOD(RedisArray, mget)
for(i = 0; i < argc; ++i) {
if(pos[i] != n) continue;
- ZVAL_DUP(&z_tmp, &argv[i]);
+ ZVAL_DUP(&z_tmp, argv[i]);
add_next_index_zval(&z_argarray, &z_tmp);
}
@@ -945,7 +947,7 @@ PHP_METHOD(RedisArray, mset)
RedisArray *ra;
int *pos, argc, *argc_each;
HashTable *h_keys;
- zval *redis_inst;
+ zval *redis_inst, **redis_instances, **argv;
char *key, **keys, **key_free, kbuf[40];
zend_string *key_zstr;
unsigned int key_len, free_idx = 0;
@@ -971,7 +973,8 @@ PHP_METHOD(RedisArray, mset)
keys = emalloc(argc * sizeof(char*));
key_lens = emalloc(argc * sizeof(int));
- zval argv[argc], redis_instances[argc];
+ argv = emalloc(argc * sizeof(zval*));
+ redis_instances = ecalloc(argc, sizeof(zval*));
/* Allocate an array holding the indexes of any keys that need freeing */
key_free = emalloc(argc * sizeof(char*));
@@ -1002,9 +1005,9 @@ PHP_METHOD(RedisArray, mset)
key = key_zstr->val;
}
- redis_instances[i] = *ra_find_node(ra, key, (int)key_len, &pos[i] TSRMLS_CC);
+ redis_instances[i] = ra_find_node(ra, key, (int)key_len, &pos[i] TSRMLS_CC);
argc_each[pos[i]]++; /* count number of keys per node */
- argv[i] = *data;
+ argv[i] = data;
keys[i] = key;
key_lens[i] = (int)key_len;
}
@@ -1025,7 +1028,7 @@ PHP_METHOD(RedisArray, mset)
if(pos[i] != n) continue;
- ZVAL_DUP(&z_tmp, &argv[i]);
+ ZVAL_DUP(&z_tmp, argv[i]);
add_assoc_zval_ex(&z_argarray, keys[i], key_lens[i] + 1, &z_tmp); /* +1 to count the \0 here */
found++;
@@ -1081,7 +1084,7 @@ PHP_METHOD(RedisArray, del)
int *pos, argc, *argc_each;
HashTable *h_keys;
HashPosition pointer;
- zval *redis_inst;
+ zval *redis_inst, **redis_instances, **argv;;
long total = 0;
int free_zkeys = 0;
@@ -1122,7 +1125,8 @@ PHP_METHOD(RedisArray, del)
argc = zend_hash_num_elements(h_keys);
pos = emalloc(argc * sizeof(int));
- zval redis_instances[argc], argv[argc];
+ argv = emalloc(argc * sizeof(zval*));
+ redis_instances = ecalloc(argc, sizeof(zval*));
argc_each = emalloc(ra->count * sizeof(int));
memset(argc_each, 0, ra->count * sizeof(int));
@@ -1138,9 +1142,9 @@ PHP_METHOD(RedisArray, del)
RETURN_FALSE;
}
- redis_instances[i] = *ra_find_node(ra, Z_STRVAL_P(data), Z_STRLEN_P(data), &pos[i] TSRMLS_CC);
+ redis_instances[i] = ra_find_node(ra, Z_STRVAL_P(data), Z_STRLEN_P(data), &pos[i] TSRMLS_CC);
argc_each[pos[i]]++; /* count number of keys per node */
- argv[i] = *data;
+ argv[i] = data;
}
/* calls */
@@ -1154,7 +1158,7 @@ PHP_METHOD(RedisArray, del)
for(i = 0; i < argc; ++i) {
if(pos[i] != n) continue;
- ZVAL_DUP(&z_tmp, &argv[i]);
+ ZVAL_DUP(&z_tmp, argv[i]);
add_next_index_zval(&z_argarray, &z_tmp);
found++;
diff --git a/redis_array_impl.c b/redis_array_impl.c
index a6ff9d5f..d094833a 100644
--- a/redis_array_impl.c
+++ b/redis_array_impl.c
@@ -493,25 +493,25 @@ static void
ra_index_change_keys(const char *cmd, zval *z_keys, zval *z_redis TSRMLS_DC) {
int i, argc;
- zval z_fun, z_ret;
+ zval z_fun, z_ret, **z_args;
/* alloc */
argc = 1 + zend_hash_num_elements(Z_ARRVAL_P(z_keys));
- zval z_args[argc];
+ z_args = emalloc(argc * sizeof(zval*));
/* prepare first parameters */
ZVAL_STRING(&z_fun, cmd);
- ZVAL_STRING(&z_args[0], PHPREDIS_INDEX_NAME);
+ ZVAL_STRING(z_args[0], PHPREDIS_INDEX_NAME);
/* prepare keys */
for(i = 0; i < argc - 1; ++i) {
zval *zp;
zp = zend_hash_index_find(Z_ARRVAL_P(z_keys), i);
- ZVAL_DUP(&z_args[i+1], zp);
+ ZVAL_DUP(z_args[i+1], zp);
}
/* run cmd */
- call_user_function(&redis_ce->function_table, z_redis, &z_fun, &z_ret, argc, z_args TSRMLS_CC);
+ call_user_function(&redis_ce->function_table, z_redis, &z_fun, &z_ret, argc, *z_args TSRMLS_CC);
/* don't dtor z_ret, since we're returning z_redis */
}
@@ -809,7 +809,7 @@ ra_expire_key(const char *key, int key_len, zval *z_to, long ttl TSRMLS_DC) {
static zend_bool
ra_move_zset(const char *key, int key_len, zval *z_from, zval *z_to, long ttl TSRMLS_DC) {
- zval z_fun_zrange, z_fun_zadd, z_ret, z_ret_dest, z_args[4], *z_score_p;
+ zval z_fun_zrange, z_fun_zadd, z_ret, z_ret_dest, z_args[4], *z_score_p, **z_zadd_args;
int count;
HashTable *h_zset_vals;
zend_string *val;
@@ -839,7 +839,7 @@ ra_move_zset(const char *key, int key_len, zval *z_from, zval *z_to, long ttl TS
/* allocate argument array for ZADD */
count = zend_hash_num_elements(h_zset_vals);
- zval z_zadd_args[ (1 + 2*count) ];
+ z_zadd_args = emalloc((1 + 2*count) * sizeof(zval*));
for(i = 1, zend_hash_internal_pointer_reset(h_zset_vals);
zend_hash_has_more_elements(h_zset_vals) == SUCCESS;
@@ -851,15 +851,15 @@ ra_move_zset(const char *key, int key_len, zval *z_from, zval *z_to, long ttl TS
/* add score */
convert_to_double(z_score_p);
- ZVAL_DOUBLE(&z_zadd_args[i], Z_DVAL_P(z_score_p));
+ ZVAL_DOUBLE(z_zadd_args[i], Z_DVAL_P(z_score_p));
/* add value */
switch (zend_hash_get_current_key_ex(h_zset_vals, &val, &idx, 0)) {
case HASH_KEY_IS_STRING:
- ZVAL_STRINGL(&z_zadd_args[i+1], val->val, val->len - 1); /* we have to remove 1 because it is an array key. */
+ ZVAL_STRINGL(z_zadd_args[i+1], val->val, val->len - 1); /* we have to remove 1 because it is an array key. */
break;
case HASH_KEY_IS_LONG:
- ZVAL_LONG(&z_zadd_args[i+1], (long)idx);
+ ZVAL_LONG(z_zadd_args[i+1], (long)idx);
break;
default:
return -1; /* Todo: log error */
@@ -870,15 +870,16 @@ ra_move_zset(const char *key, int key_len, zval *z_from, zval *z_to, long ttl TS
/* run ZADD on target */
ZVAL_STRINGL(&z_fun_zadd, "ZADD", 4);
- ZVAL_STRINGL(&z_zadd_args[0], key, key_len);
- call_user_function(&redis_ce->function_table, z_to, &z_fun_zadd, &z_ret_dest, 1 + 2 * count, z_zadd_args TSRMLS_CC);
+ ZVAL_STRINGL(z_zadd_args[0], key, key_len);
+ call_user_function(&redis_ce->function_table, z_to, &z_fun_zadd, &z_ret_dest, 1 + 2 * count, *z_zadd_args TSRMLS_CC);
/* Expire if needed */
ra_expire_key(key, key_len, z_to, ttl TSRMLS_CC);
/* cleanup */
for(i = 0; i < 1 + 2 * count; ++i) {
- zval_dtor(&z_zadd_args[i]);
+ zval_dtor(z_zadd_args[i]);
+ efree(&z_zadd_args[i]);
}
zval_dtor(&z_ret);
@@ -962,23 +963,23 @@ ra_move_collection(const char *key, int key_len, zval *z_from, zval *z_to,
int list_count, const char **cmd_list,
int add_count, const char **cmd_add, long ttl TSRMLS_DC) {
- zval z_fun_retrieve, z_fun_sadd, z_ret, *z_data_p;
+ zval z_fun_retrieve, z_fun_sadd, z_ret, *z_data_p, **z_retrieve_args, **z_sadd_args;
int count, i;
HashTable *h_set_vals;
/* run retrieval command on source */
- zval z_retrieve_args[1 + list_count];
+ z_retrieve_args = emalloc((1+list_count) * sizeof(zval*));
ZVAL_STRING(&z_fun_retrieve, cmd_list[0]); /* set the command */
/* set the key */
- ZVAL_STRINGL(&z_retrieve_args[0], key, key_len);
+ ZVAL_STRINGL(z_retrieve_args[0], key, key_len);
/* possibly add some other args if they were provided. */
for(i = 1; i < list_count; ++i) {
- ZVAL_STRING(&z_retrieve_args[i], cmd_list[i]);
+ ZVAL_STRING(z_retrieve_args[i], cmd_list[i]);
}
- call_user_function(&redis_ce->function_table, z_from, &z_fun_retrieve, &z_ret, list_count, z_retrieve_args TSRMLS_CC);
+ call_user_function(&redis_ce->function_table, z_from, &z_fun_retrieve, &z_ret, list_count, *z_retrieve_args TSRMLS_CC);
if(Z_TYPE(z_ret) != IS_ARRAY) { /* key not found or replaced */
/* TODO: report? */
@@ -988,9 +989,9 @@ ra_move_collection(const char *key, int key_len, zval *z_from, zval *z_to,
/* run SADD/RPUSH on target */
h_set_vals = Z_ARRVAL(z_ret);
count = zend_hash_num_elements(h_set_vals);
- zval z_sadd_args[1 + count];
+ z_sadd_args = emalloc((1 + count) * sizeof(zval*));
ZVAL_STRING(&z_fun_sadd, cmd_add[0]);
- ZVAL_STRINGL(&z_sadd_args[0], key, key_len);
+ ZVAL_STRINGL(z_sadd_args[0], key, key_len);
for(i = 0, zend_hash_internal_pointer_reset(h_set_vals);
zend_hash_has_more_elements(h_set_vals) == SUCCESS;
@@ -1001,13 +1002,13 @@ ra_move_collection(const char *key, int key_len, zval *z_from, zval *z_to,
}
/* add set elements */
- ZVAL_DUP(&z_sadd_args[i+1], z_data_p);
+ ZVAL_DUP(z_sadd_args[i+1], z_data_p);
}
/* Clean up our input return value */
zval_dtor(&z_ret);
- call_user_function(&redis_ce->function_table, z_to, &z_fun_sadd, &z_ret, count+1, z_sadd_args TSRMLS_CC);
+ call_user_function(&redis_ce->function_table, z_to, &z_fun_sadd, &z_ret, count+1, *z_sadd_args TSRMLS_CC);
/* Expire if needed */
ra_expire_key(key, key_len, z_to, ttl TSRMLS_CC);
@@ -1015,7 +1016,7 @@ ra_move_collection(const char *key, int key_len, zval *z_from, zval *z_to,
/* cleanup */
for(i = 0; i < count; ++i) {
- zval_dtor(&z_sadd_args[i + 1]);
+ zval_dtor(z_sadd_args[i + 1]);
}
efree(z_sadd_args);
diff --git a/redis_commands.c b/redis_commands.c
index 7d1d49db..a82df371 100644
--- a/redis_commands.c
+++ b/redis_commands.c
@@ -109,7 +109,7 @@ int redis_key_long_val_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
void **ctx)
{
char *key = NULL, *val=NULL;
- size_t key_len;
+ size_t key_len;
int val_len, val_free, key_free;
long expire;
zval *z_val;
@@ -122,7 +122,7 @@ int redis_key_long_val_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
// Serialize value, prefix key
val_free = redis_serialize(redis_sock, z_val, &val, &val_len TSRMLS_CC);
- //TODO Sean-Der
+ //TODO Sean-Der
key_free = redis_key_prefix(redis_sock, &key, (int *) &key_len);
// Construct our command
@@ -144,9 +144,9 @@ int redis_key_long_str_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
void **ctx)
{
char *key, *val;
- size_t key_len, val_len;
- int key_free;
- long lval;
+ size_t key_len, val_len;
+ int key_free;
+ long lval;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sls", &key, &key_len,
&lval, &val, &val_len)==FAILURE)
@@ -176,9 +176,9 @@ int redis_kv_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
void **ctx)
{
char *key, *val;
- size_t key_len;
- int val_len, key_free, val_free;
- zval *z_val;
+ size_t key_len;
+ int val_len, key_free, val_free;
+ zval *z_val;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz", &key, &key_len,
&z_val)==FAILURE)
@@ -235,8 +235,8 @@ int redis_key_str_str_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
void **ctx)
{
char *key, *val1, *val2;
- size_t key_len, val1_len, val2_len;
- int key_free;
+ size_t key_len, val1_len, val2_len;
+ int key_free;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", &key, &key_len,
&val1, &val1_len, &val2, &val2_len)==FAILURE)
@@ -313,7 +313,7 @@ int redis_key_long_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
{
char *key;
size_t key_len;
- int key_free;
+ int key_free;
long lval;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &key, &key_len,
@@ -348,7 +348,7 @@ int redis_key_long_long_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
{
char *key;
size_t key_len;
- int key_free;
+ int key_free;
long val1, val2;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sll", &key, &key_len,
@@ -379,7 +379,7 @@ int redis_key_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
{
char *key;
size_t key_len;
- int key_free;
+ int key_free;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &key, &key_len)
==FAILURE)
@@ -407,9 +407,9 @@ int redis_key_dbl_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
void **ctx)
{
char *key;
- size_t key_len;
- int key_free;
- double val;
+ size_t key_len;
+ int key_free;
+ double val;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sd", &key, &key_len,
&val)==FAILURE)
@@ -476,7 +476,7 @@ int redis_zrange_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
{
char *key;
size_t key_len;
- int key_free;
+ int key_free;
long start, end;
zend_bool ws=0;
@@ -591,7 +591,7 @@ int redis_zinter_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
HashPosition ptr;
smart_string cmdstr = {0};
int argc = 2, keys_count;
- size_t agg_op_len, key_len;
+ size_t agg_op_len, key_len;
// Parse args
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sa|a!s", &key,
@@ -861,7 +861,7 @@ int redis_zrangebylex_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
{
char *key, *min, *max;
size_t key_len, min_len, max_len;
- int key_free;
+ int key_free;
long offset, count;
int argc = ZEND_NUM_ARGS();
@@ -916,7 +916,7 @@ int redis_gen_zlex_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
{
char *key, *min, *max;
size_t key_len, min_len, max_len;
- int key_free;
+ int key_free;
/* Parse args */
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", &key, &key_len,
@@ -1018,7 +1018,7 @@ int redis_key_arr_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
HashPosition pos;
smart_string cmdstr = {0};
int val_len, key_free, val_free, argc = 1;
- size_t key_len;
+ size_t key_len;
char *key, *val;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sa", &key, &key_len,
@@ -1195,7 +1195,7 @@ int redis_set_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
zval *z_value, *z_opts=NULL;
char *key = NULL, *val = NULL, *exp_type = NULL, *set_type = NULL;
int val_len, key_free, val_free;
- size_t key_len;
+ size_t key_len;
long expire = -1;
// Make sure the function is being called correctly
@@ -1353,7 +1353,7 @@ redis_atomic_increment(INTERNAL_FUNCTION_PARAMETERS, int type,
{
char *key;
int key_free;
- size_t key_len;
+ size_t key_len;
long val = 1;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &key, &key_len,
@@ -1413,7 +1413,7 @@ int redis_hincrby_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
{
char *key, *mem;
size_t key_len, mem_len;
- int key_free;
+ int key_free;
long byval;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssl", &key, &key_len,
@@ -1444,7 +1444,7 @@ int redis_hincrbyfloat_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
{
char *key, *mem;
size_t key_len, mem_len;
- int key_free;
+ int key_free;
double byval;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssd", &key, &key_len,
@@ -1475,9 +1475,9 @@ int redis_hmget_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
char **cmd, int *cmd_len, short *slot, void **ctx)
{
char *key;
- zval *z_arr, *z_mem;
+ zval *z_arr, *z_mem, **z_mems;
int i, count, valid=0, key_free;
- size_t key_len;
+ size_t key_len;
HashTable *ht_arr;
HashPosition ptr;
smart_string cmdstr = {0};
@@ -1501,7 +1501,7 @@ int redis_hmget_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
key_free = redis_key_prefix(redis_sock, &key, (int *) &key_len);
// Allocate memory for mems+1 so we can have a sentinel
- zval z_mems[count + 1];
+ z_mems = ecalloc(count+1, sizeof(zval*));
// Iterate over our member array
for(zend_hash_internal_pointer_reset_ex(ht_arr, &ptr);
@@ -1513,8 +1513,8 @@ int redis_hmget_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
|| Z_TYPE_P(z_mem) == IS_LONG)
{
// Copy into our member array
- ZVAL_DUP(&z_mems[valid], z_mem);
- convert_to_string(&z_mems[valid]);
+ ZVAL_DUP(z_mems[valid], z_mem);
+ convert_to_string(z_mems[valid]);
// Increment the member count to actually send
valid++;
@@ -1530,7 +1530,7 @@ int redis_hmget_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
// Sentinel so we can free this even if it's used and then we discard
// the transaction manually or there is a transaction failure
- ZVAL_UNDEF(&z_mems[valid]);
+ z_mems[valid] = NULL;
// Start command construction
redis_cmd_init_sstr(&cmdstr, valid+1, "HMGET", sizeof("HMGET")-1);
@@ -1538,7 +1538,7 @@ int redis_hmget_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
// Iterate over members, appending as arguments
for(i=0;i<valid;i++) {
- redis_cmd_append_sstr(&cmdstr, Z_STRVAL(z_mems[i]), Z_STRLEN(z_mems[i]));
+ redis_cmd_append_sstr(&cmdstr, Z_STRVAL_P(z_mems[i]), Z_STRLEN_P(z_mems[i]));
}
// Set our slot
@@ -1562,7 +1562,7 @@ int redis_hmset_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
{
char *key;
int key_free, count, ktype;
- size_t key_len;
+ size_t key_len;
unsigned long idx;
zval *z_arr;
HashTable *ht_vals;
@@ -1647,7 +1647,7 @@ int redis_bitpos_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
{
char *key;
int argc;
- size_t key_len;
+ size_t key_len;
long bit, start, end;
argc = ZEND_NUM_ARGS();
@@ -1749,7 +1749,7 @@ int redis_bitcount_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
char **cmd, int *cmd_len, short *slot, void **ctx)
{
char *key;
- size_t key_len;
+ size_t key_len;
int key_free;
long start = 0, end = -1;
@@ -2039,7 +2039,7 @@ int redis_setbit_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
char **cmd, int *cmd_len, short *slot, void **ctx)
{
char *key;
- size_t key_len;
+ size_t key_len;
int key_free;
long offset;
zend_bool val;
@@ -2073,7 +2073,7 @@ int redis_linsert_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
char **cmd, int *cmd_len, short *slot, void **ctx)
{
char *key, *pivot, *pos, *val;
- size_t key_len, pos_len;
+ size_t key_len, pos_len;
int pivot_len, val_len;
int key_free, pivot_free, val_free;
zval *z_val, *z_pivot;
@@ -2118,7 +2118,7 @@ int redis_lrem_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
char **cmd, int *cmd_len, short *slot, void **ctx)
{
char *key, *val;
- size_t key_len;
+ size_t key_len;
int val_len, key_free, val_free;
long count = 0;
zval *z_val;
@@ -2152,7 +2152,7 @@ int redis_smove_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
char **cmd, int *cmd_len, short *slot, void **ctx)
{
char *src, *dst, *val;
- size_t src_len, dst_len;
+ size_t src_len, dst_len;
int val_len;
int val_free, src_free, dst_free;
zval *z_val;
@@ -2200,7 +2200,7 @@ static int gen_hset_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
char *kw, char **cmd, int *cmd_len, short *slot)
{
char *key, *mem, *val;
- size_t mem_len, key_len;
+ size_t mem_len, key_len;
int val_len;
int val_free, key_free;
zval *z_val;
@@ -2252,7 +2252,7 @@ int redis_srandmember_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
short *have_count)
{
char *key;
- size_t key_len;
+ size_t key_len;
int key_free;
long count;
@@ -2291,7 +2291,7 @@ int redis_zincrby_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
char **cmd, int *cmd_len, short *slot, void **ctx)
{
char *key, *mem;
- size_t key_len;
+ size_t key_len;
int mem_len;
int key_free, mem_free;
double incrby;
@@ -2326,7 +2326,7 @@ int redis_sort_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
{
zval *z_opts=NULL, *z_ele, z_argv;
char *key;
- size_t key_len;
+ size_t key_len;
HashTable *ht_opts;
smart_string cmdstr = {0};
int key_free;
@@ -2593,9 +2593,9 @@ int redis_hdel_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
// Iterate through the members we're removing
for(i=1;i<argc;i++) {
- convert_to_string(&z_args[i]);
- redis_cmd_append_sstr(&cmdstr, Z_STRVAL(z_args[i]), Z_STRLEN(z_args[i]));
- }
+ convert_to_string(&z_args[i]);
+ redis_cmd_append_sstr(&cmdstr, Z_STRVAL(z_args[i]), Z_STRLEN(z_args[i]));
+ }
// Push out values
*cmd = cmdstr.c;
@@ -2675,7 +2675,7 @@ int redis_object_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
short *slot, void **ctx)
{
char *key, *subcmd;
- size_t key_len, subcmd_len;
+ size_t key_len, subcmd_len;
int key_free;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &subcmd,