Skip to content

Commit 6a7277a

Browse files
committed
Almost done, still a slight problem with HGETALL.
1 parent 068aca1 commit 6a7277a

File tree

5 files changed

+518
-520
lines changed

5 files changed

+518
-520
lines changed

library.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -294,16 +294,16 @@ PHPAPI void redis_long_response(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_s
294294

295295
PHPAPI int redis_sock_read_multibulk_reply_zipped(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *z_tab TSRMLS_DC) {
296296

297-
int ret = redis_sock_read_multibulk_reply(INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock, NULL TSRMLS_CC);
298-
array_zip_values_and_scores(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
297+
int ret = redis_sock_read_multibulk_reply(INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock, z_tab TSRMLS_CC);
298+
array_zip_values_and_scores(return_value, 1);
299299

300300
return ret;
301301
}
302302

303303
PHPAPI int redis_sock_read_multibulk_reply_zipped_strings(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *z_tab TSRMLS_DC) {
304304

305-
int ret = redis_sock_read_multibulk_reply(INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock, NULL TSRMLS_CC);
306-
array_zip_values_and_scores(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
305+
int ret = redis_sock_read_multibulk_reply(INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock, z_tab TSRMLS_CC);
306+
array_zip_values_and_scores(return_value, 0);
307307

308308
return ret;
309309
}

php_redis.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ PHPAPI void generic_sort_cmd(INTERNAL_FUNCTION_PARAMETERS, char *sort, int use_a
133133
PHPAPI void generic_empty_cmd(INTERNAL_FUNCTION_PARAMETERS, char *cmd, int cmd_len TSRMLS_DC, ...);
134134
PHPAPI void generic_empty_long_cmd(INTERNAL_FUNCTION_PARAMETERS, char *cmd, int cmd_len TSRMLS_DC, ...);
135135

136-
PHPAPI void array_zip_values_and_scores(INTERNAL_FUNCTION_PARAMETERS, int use_atof TSRMLS_DC);
136+
PHPAPI void array_zip_values_and_scores(zval *z_tab, int use_atof TSRMLS_DC);
137137
PHPAPI int redis_response_enqueued(RedisSock *redis_sock TSRMLS_DC);
138138

139139
PHPAPI int get_flag(zval *object);

redis.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3589,14 +3589,13 @@ PHP_METHOD(Redis, hGetAll) {
35893589
REDIS_PROCESS_RESPONSE(redis_sock_read_multibulk_reply_zipped_strings);
35903590
}
35913591

3592-
PHPAPI void array_zip_values_and_scores(INTERNAL_FUNCTION_PARAMETERS, int use_atof TSRMLS_DC) {
3592+
PHPAPI void array_zip_values_and_scores(zval *z_tab, int use_atof TSRMLS_DC) {
35933593

35943594
zval *z_ret;
35953595
MAKE_STD_ZVAL(z_ret);
3596-
*z_ret = *return_value; /* copy */
3597-
array_init(return_value);
3596+
array_init(z_ret);
35983597

3599-
HashTable *keytable = Z_ARRVAL_P(z_ret);
3598+
HashTable *keytable = Z_ARRVAL_P(z_tab);
36003599
int i = 0;
36013600
for(zend_hash_internal_pointer_reset(keytable);
36023601
zend_hash_has_more_elements(keytable) == SUCCESS;
@@ -3631,12 +3630,16 @@ PHPAPI void array_zip_values_and_scores(INTERNAL_FUNCTION_PARAMETERS, int use_at
36313630
hval_len = Z_STRLEN_PP(z_value_pp);
36323631

36333632
if(use_atof) {
3634-
add_assoc_double_ex(return_value, hkey, 1+hkey_len, atof(hval));
3633+
add_assoc_double_ex(z_ret, hkey, 1+hkey_len, atof(hval));
36353634
} else {
3636-
add_assoc_stringl_ex(return_value, hkey, 1+hkey_len, hval, hval_len, 1);
3635+
add_assoc_stringl_ex(z_ret, hkey, 1+hkey_len, hval, hval_len, 1);
36373636
}
36383637
}
3639-
zval_dtor(z_ret);
3638+
/* replace */
3639+
zval_dtor(z_tab);
3640+
*z_tab = *z_ret;
3641+
zval_copy_ctor(z_tab);
3642+
36403643
efree(z_ret);
36413644
}
36423645

0 commit comments

Comments
 (0)