Skip to content

Commit 2fd9cc5

Browse files
committed
Fixed every last bug?
1 parent bef5c9d commit 2fd9cc5

File tree

2 files changed

+56
-22
lines changed

2 files changed

+56
-22
lines changed

library.c

Lines changed: 53 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include "common.h"
22

3-
PHPAPI void redis_check_eof(RedisSock *redis_sock TSRMLS_DC)
3+
PHPAPI void redis_check_eof(RedisSock *redis_sock TSRMLS_DC)
44
{
55

66
int eof = php_stream_eof(redis_sock->stream);
@@ -63,8 +63,8 @@ PHPAPI char *redis_sock_read(RedisSock *redis_sock, int *buf_len TSRMLS_DC)
6363
return NULL;
6464

6565
case '+':
66-
case ':':
67-
// Single Line Reply
66+
case ':':
67+
// Single Line Reply
6868
/* :123\r\n */
6969
*buf_len = strlen(inbuf) - 2;
7070
if(*buf_len >= 2) {
@@ -188,7 +188,7 @@ redis_cmd_format(char **ret, char *format, ...) {
188188
}
189189
if(stage == 1) {
190190
sprintf((*ret) + total, "%d", i);
191-
}
191+
}
192192
total += sz;
193193
break;
194194
}
@@ -215,7 +215,7 @@ redis_cmd_format(char **ret, char *format, ...) {
215215
PHPAPI void redis_bulk_double_response(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *z_tab TSRMLS_DC) {
216216

217217
char *response;
218-
int response_len;
218+
int response_len;
219219

220220
zval *object = getThis();
221221
if ((response = redis_sock_read(redis_sock, &response_len TSRMLS_CC)) == NULL) {
@@ -293,21 +293,51 @@ PHPAPI void redis_long_response(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_s
293293
}
294294
}
295295

296+
PHPAPI int redis_sock_read_multibulk_reply_zipped_with_flag(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *z_tab, int flag TSRMLS_DC) {
296297

297-
PHPAPI int redis_sock_read_multibulk_reply_zipped(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *z_tab TSRMLS_DC) {
298-
298+
/*
299299
int ret = redis_sock_read_multibulk_reply(INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock, z_tab TSRMLS_CC);
300-
array_zip_values_and_scores(return_value, 1);
300+
array_zip_values_and_scores(return_value, 0);
301+
*/
302+
303+
char inbuf[1024], *response;
304+
int response_len;
305+
306+
redis_check_eof(redis_sock TSRMLS_CC);
307+
php_stream_gets(redis_sock->stream, inbuf, 1024);
308+
309+
if(inbuf[0] != '*') {
310+
return -1;
311+
}
312+
int numElems = atoi(inbuf+1);
313+
zval *z_multi_result;
314+
MAKE_STD_ZVAL(z_multi_result);
315+
array_init(z_multi_result); /* pre-allocate array for multi's results. */
301316

302-
return ret;
317+
redis_sock_read_multibulk_reply_loop(INTERNAL_FUNCTION_PARAM_PASSTHRU,
318+
redis_sock, z_multi_result, numElems);
319+
320+
array_zip_values_and_scores(z_multi_result, 0);
321+
322+
zval *object = getThis();
323+
IF_MULTI_OR_PIPELINE() {
324+
add_next_index_zval(z_tab, z_multi_result);
325+
} else {
326+
*return_value = *z_multi_result;
327+
zval_copy_ctor(return_value);
328+
efree(z_multi_result);
329+
}
330+
331+
return 0;
303332
}
304333

305-
PHPAPI int redis_sock_read_multibulk_reply_zipped_strings(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *z_tab TSRMLS_DC) {
334+
PHPAPI int redis_sock_read_multibulk_reply_zipped(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *z_tab TSRMLS_DC) {
306335

307-
int ret = redis_sock_read_multibulk_reply(INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock, z_tab TSRMLS_CC);
308-
array_zip_values_and_scores(return_value, 0);
336+
return redis_sock_read_multibulk_reply_zipped_with_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock, z_tab, 1);
337+
}
309338

310-
return ret;
339+
PHPAPI int redis_sock_read_multibulk_reply_zipped_strings(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *z_tab TSRMLS_DC) {
340+
return redis_sock_read_multibulk_reply_zipped_with_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock, z_tab, 0);
311341
}
312342

313343
PHPAPI void redis_1_response(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *z_tab TSRMLS_DC) {
@@ -487,7 +517,7 @@ PHPAPI int redis_sock_disconnect(RedisSock *redis_sock TSRMLS_DC)
487517
* redis_sock_read_multibulk_reply
488518
*/
489519
PHPAPI int redis_sock_read_multibulk_reply(INTERNAL_FUNCTION_PARAMETERS,
490-
RedisSock *redis_sock, zval *_z_tab TSRMLS_DC)
520+
RedisSock *redis_sock, zval *z_tab TSRMLS_DC)
491521
{
492522
char inbuf[1024], *response;
493523
int response_len;
@@ -499,18 +529,21 @@ PHPAPI int redis_sock_read_multibulk_reply(INTERNAL_FUNCTION_PARAMETERS,
499529
return -1;
500530
}
501531
int numElems = atoi(inbuf+1);
502-
zval *z_tab;
503-
MAKE_STD_ZVAL(z_tab);
504-
array_init(z_tab);
532+
zval *z_multi_result;
533+
MAKE_STD_ZVAL(z_multi_result);
534+
array_init(z_multi_result); /* pre-allocate array for multi's results. */
505535

506536
redis_sock_read_multibulk_reply_loop(INTERNAL_FUNCTION_PARAM_PASSTHRU,
507-
redis_sock, z_tab, numElems);
537+
redis_sock, z_multi_result, numElems);
508538

509539
zval *object = getThis();
510540
IF_MULTI_OR_PIPELINE() {
511-
add_next_index_zval(_z_tab, z_tab);
541+
add_next_index_zval(z_tab, z_multi_result);
512542
}
513-
*return_value = *z_tab;
543+
544+
*return_value = *z_multi_result;
545+
//zval_copy_ctor(return_value);
546+
// efree(z_multi_result);
514547
return 0;
515548
}
516549

tests/TestRedis.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,7 @@ public function testExpireAt() {
246246
$this->assertEquals(FALSE, $this->redis->get('key'));
247247
}
248248

249+
249250
public function testSetNX() {
250251

251252
$this->redis->set('key', 42);
@@ -1945,7 +1946,7 @@ protected function sequence($mode) {
19451946
->zUnion('zUnion', array('zkey1', 'zkey2'))
19461947
->zRange('zUnion', 0, -1)
19471948
->zadd('zkey5', 5, 'zValue5')
1948-
->zIncrBy('zkey5', 3, 'zValue5') /* fix this */
1949+
->zIncrBy('zkey5', 3, 'zValue5') // fix this
19491950
->zScore('zkey5', 'zValue5')
19501951
->exec();
19511952

@@ -1983,7 +1984,7 @@ protected function sequence($mode) {
19831984

19841985
$this->assertTrue(count($ret) === $i);
19851986

1986-
/* hash */
1987+
// hash
19871988
$ret = $this->redis->multi($mode)
19881989
->delete('hkey1')
19891990
->hset('hkey1', 'key1', 'value1')

0 commit comments

Comments
 (0)