Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 142b51d

Browse files
committed
refactoring
Small change php5 implementation of ZEND_HASH_FOREACH_* macroses. Use ZEND_HASH_FOREACH_VAL in ra_get_key_type. Allocate array via MAKE_STD_ZVAL in HANDLE_MULTI_EXEC macro.
1 parent 2c8de47 commit 142b51d

4 files changed

Lines changed: 31 additions & 42 deletions

File tree

common.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,12 @@ typedef struct {
3535
#define ZEND_HASH_FOREACH_KEY_VAL(ht, _h, _key, _val) do { \
3636
HashPosition _hpos; \
3737
for (zend_hash_internal_pointer_reset_ex(ht, &_hpos); \
38-
(_val = zend_hash_get_current_data_ex(ht, &_hpos)) != NULL; \
38+
zend_hash_has_more_elements_ex(ht, &_hpos) == SUCCESS; \
3939
zend_hash_move_forward_ex(ht, &_hpos) \
4040
) { \
4141
zend_string _zstr = {0}; \
4242
char *_str_index; uint _str_length; ulong _num_index; \
43+
_val = zend_hash_get_current_data_ex(ht, &_hpos); \
4344
switch (zend_hash_get_current_key_ex(ht, &_str_index, &_str_length, &_num_index, 0, &_hpos)) { \
4445
case HASH_KEY_IS_STRING: \
4546
_zstr.len = _str_length - 1; \
@@ -51,15 +52,16 @@ typedef struct {
5152
_h = _num_index; \
5253
break; \
5354
default: \
54-
continue; \
55+
/* noop */ break; \
5556
}
5657

5758
#define ZEND_HASH_FOREACH_VAL(ht, _val) do { \
5859
HashPosition _hpos; \
5960
for (zend_hash_internal_pointer_reset_ex(ht, &_hpos); \
60-
(_val = zend_hash_get_current_data_ex(ht, &_hpos)) != NULL; \
61+
zend_hash_has_more_elements_ex(ht, &_hpos) == SUCCESS; \
6162
zend_hash_move_forward_ex(ht, &_hpos) \
62-
) {
63+
) { \
64+
_val = zend_hash_get_current_data_ex(ht, &_hpos); \
6365

6466
#define ZEND_HASH_FOREACH_END() \
6567
} \

redis.c

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1270,13 +1270,6 @@ PHP_METHOD(Redis, pconnect)
12701270
if (redis_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1) == FAILURE) {
12711271
RETURN_FALSE;
12721272
} else {
1273-
/* FIXME: should we remove whole `else` block? */
1274-
/* reset multi/exec state if there is one. */
1275-
RedisSock *redis_sock;
1276-
if ((redis_sock = redis_sock_get(getThis() TSRMLS_CC, 0)) == NULL) {
1277-
RETURN_FALSE;
1278-
}
1279-
12801273
RETURN_TRUE;
12811274
}
12821275
}

redis_array.c

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -814,25 +814,23 @@ PHP_METHOD(RedisArray, select)
814814
#define HANDLE_MULTI_EXEC(ra, cmd) do { \
815815
if (ra && ra->z_multi_exec) { \
816816
int i, num_varargs;\
817-
zval ***varargs = NULL;\
818-
zval z_arg_array;\
817+
zval ***varargs = NULL, *z_arg_array; \
819818
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O*",\
820819
&object, redis_array_ce, &varargs, &num_varargs) == FAILURE) {\
821820
RETURN_FALSE;\
822821
}\
823822
/* copy all args into a zval hash table */\
824-
array_init(&z_arg_array);\
823+
MAKE_STD_ZVAL(z_arg_array); \
824+
array_init(z_arg_array);\
825825
for(i = 0; i < num_varargs; ++i) {\
826826
zval *z_tmp;\
827-
MAKE_STD_ZVAL(z_tmp);\
828-
*z_tmp = **varargs[i];\
829-
zval_copy_ctor(z_tmp);\
830-
INIT_PZVAL(z_tmp);\
831-
add_next_index_zval(&z_arg_array, z_tmp);\
827+
MAKE_STD_ZVAL(z_tmp); \
828+
ZVAL_ZVAL(z_tmp, *varargs[i], 1, 0); \
829+
add_next_index_zval(z_arg_array, z_tmp); \
832830
}\
833831
/* call */\
834-
ra_forward_call(INTERNAL_FUNCTION_PARAM_PASSTHRU, ra, cmd, sizeof(cmd)-1, &z_arg_array, NULL);\
835-
zval_dtor(&z_arg_array);\
832+
ra_forward_call(INTERNAL_FUNCTION_PARAM_PASSTHRU, ra, cmd, sizeof(cmd) - 1, z_arg_array, NULL); \
833+
zval_ptr_dtor(&z_arg_array); \
836834
if(varargs) {\
837835
efree(varargs);\
838836
}\

redis_array_impl.c

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -583,9 +583,8 @@ ra_index_keys(zval *z_pairs, zval *z_redis TSRMLS_DC) {
583583
zval zv, *z_new = &zv;
584584
#if (PHP_MAJOR_VERSION < 7)
585585
MAKE_STD_ZVAL(z_new);
586-
#else
587-
PHPREDIS_NOTUSED(z_val);
588586
#endif
587+
PHPREDIS_NOTUSED(z_val);
589588

590589
if (zkey) {
591590
ZVAL_STRINGL(z_new, ZSTR_VAL(zkey), ZSTR_LEN(zkey));
@@ -695,46 +694,43 @@ ra_is_write_cmd(RedisArray *ra, const char *cmd, int cmd_len) {
695694
static zend_bool
696695
ra_get_key_type(zval *z_redis, const char *key, int key_len, zval *z_from, long *res TSRMLS_DC) {
697696

698-
int i;
699-
zval z_fun_type, z_ret, z_arg[1];
700-
zval *z_data;
697+
int i = 0;
698+
zval z_fun, z_ret, z_arg, *z_data;
701699
long success = 1;
702700

703701
/* Pipelined */
704702
ra_index_multi(z_from, PIPELINE TSRMLS_CC);
705703

706704
/* prepare args */
707-
ZVAL_STRINGL(&z_arg[0], key, key_len);
705+
ZVAL_STRINGL(&z_arg, key, key_len);
708706

709707
/* run TYPE */
710-
ZVAL_STRINGL(&z_fun_type, "TYPE", 4);
711-
call_user_function(&redis_ce->function_table, z_redis, &z_fun_type, &z_ret, 1, z_arg);
712-
zval_dtor(&z_fun_type);
708+
ZVAL_NULL(&z_ret);
709+
ZVAL_STRINGL(&z_fun, "TYPE", 4);
710+
call_user_function(&redis_ce->function_table, z_redis, &z_fun, &z_ret, 1, &z_arg);
711+
zval_dtor(&z_fun);
713712
zval_dtor(&z_ret);
714713

715714
/* run TYPE */
716-
ZVAL_STRINGL(&z_fun_type, "TTL", 3);
717-
call_user_function(&redis_ce->function_table, z_redis, &z_fun_type, &z_ret, 1, z_arg);
718-
zval_dtor(&z_fun_type);
715+
ZVAL_NULL(&z_ret);
716+
ZVAL_STRINGL(&z_fun, "TTL", 3);
717+
call_user_function(&redis_ce->function_table, z_redis, &z_fun, &z_ret, 1, &z_arg);
718+
zval_dtor(&z_fun);
719719
zval_dtor(&z_ret);
720720

721721
/* Get the result from the pipeline. */
722722
ra_index_exec(z_from, &z_ret, 1 TSRMLS_CC);
723-
if(Z_TYPE(z_ret) == IS_ARRAY) {
724-
HashTable *retHash = Z_ARRVAL(z_ret);
725-
for(i = 0, zend_hash_internal_pointer_reset(retHash);
726-
zend_hash_has_more_elements(retHash) == SUCCESS;
727-
zend_hash_move_forward(retHash)) {
728-
729-
if ((z_data = zend_hash_get_current_data(retHash)) == NULL || Z_TYPE_P(z_data) != IS_LONG) {
723+
if (Z_TYPE(z_ret) == IS_ARRAY) {
724+
ZEND_HASH_FOREACH_VAL(Z_ARRVAL(z_ret), z_data) {
725+
if (z_data == NULL || Z_TYPE_P(z_data) != IS_LONG) {
730726
success = 0;
731727
break;
732728
}
733729
/* Get the result - Might change in the future to handle doubles as well */
734730
res[i++] = Z_LVAL_P(z_data);
735-
}
731+
} ZEND_HASH_FOREACH_END();
736732
}
737-
zval_dtor(&z_arg[0]);
733+
zval_dtor(&z_arg);
738734
zval_dtor(&z_ret);
739735
return success;
740736
}

0 commit comments

Comments
 (0)