View | Details | Raw Unified | Return to bug 167924
Collapse All | Expand All

(-)Makefile (+1 lines)
Lines 7-12 Link Here
7
7
8
PORTNAME=	redis
8
PORTNAME=	redis
9
PORTVERSION=	2.2.1
9
PORTVERSION=	2.2.1
10
PORTREVISION=	1
10
CATEGORIES=	databases
11
CATEGORIES=	databases
11
MASTER_SITES=	https://github.com/nicolasff/phpredis/tarball/${PORTVERSION}/
12
MASTER_SITES=	https://github.com/nicolasff/phpredis/tarball/${PORTVERSION}/
12
PKGNAMEPREFIX=	php5-
13
PKGNAMEPREFIX=	php5-
(-)files/patch-echo-nothrow (+879 lines)
Added Link Here
1
index 1dfaa0f..fd8f024 100755
2
--- a/php_redis.h
3
+++ php_redis.h
4
@@ -29,6 +29,7 @@ PHP_METHOD(Redis, connect);
5
 PHP_METHOD(Redis, pconnect);
6
 PHP_METHOD(Redis, close);
7
 PHP_METHOD(Redis, ping);
8
+PHP_METHOD(Redis, echo);
9
 PHP_METHOD(Redis, get);
10
 PHP_METHOD(Redis, set);
11
 PHP_METHOD(Redis, setex);
12
diff --git a/redis.c b/redis.c
13
index 9ca3a14..3e15d73 100755
14
--- a/redis.c
15
+++ redis.c
16
@@ -76,6 +76,7 @@ static zend_function_entry redis_functions[] = {
17
      PHP_ME(Redis, pconnect, NULL, ZEND_ACC_PUBLIC)
18
      PHP_ME(Redis, close, NULL, ZEND_ACC_PUBLIC)
19
      PHP_ME(Redis, ping, NULL, ZEND_ACC_PUBLIC)
20
+     PHP_ME(Redis, echo, NULL, ZEND_ACC_PUBLIC)
21
      PHP_ME(Redis, get, NULL, ZEND_ACC_PUBLIC)
22
      PHP_ME(Redis, set, NULL, ZEND_ACC_PUBLIC)
23
      PHP_ME(Redis, setex, NULL, ZEND_ACC_PUBLIC)
24
@@ -324,7 +325,7 @@ static void redis_destructor_redis_sock(zend_rsrc_list_entry * rsrc TSRMLS_DC)
25
 /**
26
  * redis_sock_get
27
  */
28
-PHPAPI int redis_sock_get(zval *id, RedisSock **redis_sock TSRMLS_DC)
29
+PHPAPI int redis_sock_get(zval *id, RedisSock **redis_sock TSRMLS_DC, int no_throw)
30
 {
31
 
32
     zval **socket;
33
@@ -332,15 +333,21 @@ PHPAPI int redis_sock_get(zval *id, RedisSock **redis_sock TSRMLS_DC)
34
 
35
     if (Z_TYPE_P(id) != IS_OBJECT || zend_hash_find(Z_OBJPROP_P(id), "socket",
36
                                   sizeof("socket"), (void **) &socket) == FAILURE) {
37
-        zend_throw_exception(redis_exception_ce, "Redis server went away", 0 TSRMLS_CC);
38
+    	// Throw an exception unless we've been requested not to
39
+        if(!no_throw) {
40
+        	zend_throw_exception(redis_exception_ce, "Redis server went away", 0 TSRMLS_CC);
41
+        }
42
         return -1;
43
     }
44
 
45
     *redis_sock = (RedisSock *) zend_list_find(Z_LVAL_PP(socket), &resource_type);
46
 
47
     if (!*redis_sock || resource_type != le_redis_sock) {
48
-			zend_throw_exception(redis_exception_ce, "Redis server went away", 0 TSRMLS_CC);
49
-            return -1;
50
+		// Throw an exception unless we've been requested not to
51
+    	if(!no_throw) {
52
+    		zend_throw_exception(redis_exception_ce, "Redis server went away", 0 TSRMLS_CC);
53
+    	}
54
+		return -1;
55
     }
56
 
57
     return Z_LVAL_PP(socket);
58
@@ -471,7 +478,7 @@ PHP_METHOD(Redis,__destruct) {
59
 
60
 	// Grab our socket
61
 	RedisSock *redis_sock;
62
-	if (redis_sock_get(getThis(), &redis_sock TSRMLS_CC) < 0) {
63
+	if (redis_sock_get(getThis(), &redis_sock TSRMLS_CC, 1) < 0) {
64
 		RETURN_FALSE;
65
 	}
66
 
67
@@ -504,7 +511,7 @@ PHP_METHOD(Redis, pconnect)
68
 	} else {
69
 		/* reset multi/exec state if there is one. */
70
 		RedisSock *redis_sock;
71
-		if (redis_sock_get(getThis(), &redis_sock TSRMLS_CC) < 0) {
72
+		if (redis_sock_get(getThis(), &redis_sock TSRMLS_CC, 0) < 0) {
73
 			RETURN_FALSE;
74
 		}
75
 
76
@@ -547,7 +554,7 @@ PHPAPI int redis_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) {
77
 	}
78
 
79
 	/* if there is a redis sock already we have to remove it from the list */
80
-	if (redis_sock_get(object, &redis_sock TSRMLS_CC) > 0) {
81
+	if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) > 0) {
82
 		if (zend_hash_find(Z_OBJPROP_P(object), "socket",
83
 					sizeof("socket"), (void **) &socket) == FAILURE) {
84
 			/* maybe there is a socket but the id isn't known.. what to do? */
85
@@ -587,7 +594,7 @@ PHP_METHOD(Redis, close)
86
         RETURN_FALSE;
87
     }
88
 
89
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
90
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
91
         RETURN_FALSE;
92
     }
93
 
94
@@ -617,7 +624,7 @@ PHP_METHOD(Redis, set)
95
         RETURN_FALSE;
96
     }
97
 
98
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
99
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
100
         RETURN_FALSE;
101
     }
102
 
103
@@ -656,7 +663,7 @@ PHP_METHOD(Redis, setex)
104
         RETURN_FALSE;
105
     }
106
 
107
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
108
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
109
         RETURN_FALSE;
110
     }
111
 
112
@@ -691,7 +698,7 @@ PHP_METHOD(Redis, setnx)
113
         RETURN_FALSE;
114
     }
115
 
116
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
117
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
118
         RETURN_FALSE;
119
     }
120
 
121
@@ -729,7 +736,7 @@ PHP_METHOD(Redis, getSet)
122
         RETURN_FALSE;
123
     }
124
 
125
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
126
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
127
         RETURN_FALSE;
128
     }
129
 
130
@@ -763,7 +770,7 @@ PHP_METHOD(Redis, randomKey)
131
         RETURN_FALSE;
132
     }
133
 
134
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
135
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
136
         RETURN_FALSE;
137
     }
138
 
139
@@ -778,6 +785,39 @@ PHP_METHOD(Redis, randomKey)
140
 }
141
 /* }}} */
142
 
143
+/* {{{ proto string Redis::echo(string key)
144
+ */
145
+PHP_METHOD(Redis, echo)
146
+{
147
+    zval *object;
148
+    RedisSock *redis_sock;
149
+    char *key = NULL, *cmd;
150
+    int key_len, cmd_len;
151
+	int key_free;
152
+
153
+    if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os",
154
+                                     &object, redis_ce,
155
+                                     &key, &key_len) == FAILURE) {
156
+        RETURN_FALSE;
157
+    }
158
+
159
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
160
+        RETURN_FALSE;
161
+    }
162
+
163
+	key_free = redis_key_prefix(redis_sock, &key, &key_len TSRMLS_CC);
164
+    cmd_len = redis_cmd_format_static(&cmd, "ECHO", "s", key, key_len);
165
+	if(key_free) efree(key);
166
+
167
+	REDIS_PROCESS_REQUEST(redis_sock, cmd, cmd_len);
168
+    IF_ATOMIC() {
169
+	  redis_string_response(INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock, NULL, NULL);
170
+    }
171
+    REDIS_PROCESS_RESPONSE(redis_string_response);
172
+
173
+}
174
+/* }}} */
175
+
176
 /* {{{ proto string Redis::renameKey(string key_src, string key_dst)
177
  */
178
 PHP_METHOD(Redis, renameKey)
179
@@ -796,7 +836,7 @@ PHP_METHOD(Redis, renameKey)
180
         RETURN_FALSE;
181
     }
182
 
183
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
184
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
185
         RETURN_FALSE;
186
     }
187
 
188
@@ -833,7 +873,7 @@ PHP_METHOD(Redis, renameNx)
189
         RETURN_FALSE;
190
     }
191
 
192
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
193
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
194
         RETURN_FALSE;
195
     }
196
 
197
@@ -868,7 +908,7 @@ PHP_METHOD(Redis, get)
198
         RETURN_FALSE;
199
     }
200
 
201
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
202
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
203
         RETURN_FALSE;
204
     }
205
 
206
@@ -900,7 +940,7 @@ PHP_METHOD(Redis, ping)
207
         RETURN_FALSE;
208
     }
209
 
210
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
211
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
212
         RETURN_FALSE;
213
     }
214
 
215
@@ -929,7 +969,7 @@ PHPAPI void redis_atomic_increment(INTERNAL_FUNCTION_PARAMETERS, char *keyword,
216
         RETURN_FALSE;
217
     }
218
 
219
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
220
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
221
         RETURN_FALSE;
222
     }
223
 	key_free = redis_key_prefix(redis_sock, &key, &key_len TSRMLS_CC);
224
@@ -1055,7 +1095,7 @@ PHP_METHOD(Redis, getMultiple)
225
         RETURN_FALSE;
226
     }
227
 
228
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
229
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
230
         RETURN_FALSE;
231
     }
232
 
233
@@ -1141,7 +1181,7 @@ PHP_METHOD(Redis, exists)
234
                                      &key, &key_len) == FAILURE) {
235
         RETURN_FALSE;
236
     }
237
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
238
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
239
         RETURN_FALSE;
240
     }
241
 
242
@@ -1240,7 +1280,7 @@ PHP_METHOD(Redis, getKeys)
243
         RETURN_NULL();
244
     }
245
 
246
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
247
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
248
         RETURN_FALSE;
249
     }
250
 
251
@@ -1274,7 +1314,7 @@ PHP_METHOD(Redis, type)
252
         RETURN_NULL();
253
     }
254
 
255
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
256
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
257
         RETURN_FALSE;
258
     }
259
 
260
@@ -1304,7 +1344,7 @@ PHP_METHOD(Redis, append)
261
 		RETURN_NULL();
262
 	}
263
 
264
-	if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
265
+	if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
266
 		RETURN_FALSE;
267
 	}
268
 
269
@@ -1333,7 +1373,7 @@ PHP_METHOD(Redis, getRange)
270
 		RETURN_FALSE;
271
 	}
272
 
273
-	if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
274
+	if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
275
 		RETURN_FALSE;
276
 	}
277
 
278
@@ -1361,7 +1401,7 @@ PHP_METHOD(Redis, setRange)
279
 		RETURN_FALSE;
280
 	}
281
 
282
-	if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
283
+	if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
284
 		RETURN_FALSE;
285
 	}
286
 
287
@@ -1389,7 +1429,7 @@ PHP_METHOD(Redis, getBit)
288
 		RETURN_FALSE;
289
 	}
290
 
291
-	if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
292
+	if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
293
 		RETURN_FALSE;
294
 	}
295
 
296
@@ -1418,7 +1458,7 @@ PHP_METHOD(Redis, setBit)
297
 		RETURN_FALSE;
298
 	}
299
 
300
-	if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
301
+	if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
302
 		RETURN_FALSE;
303
 	}
304
 
305
@@ -1447,7 +1487,7 @@ PHP_METHOD(Redis, strlen)
306
 		RETURN_NULL();
307
 	}
308
 
309
-	if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
310
+	if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
311
 		RETURN_FALSE;
312
 	}
313
 
314
@@ -1477,7 +1517,7 @@ generic_push_function(INTERNAL_FUNCTION_PARAMETERS, char *keyword, int keyword_l
315
         RETURN_NULL();
316
     }
317
 
318
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
319
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
320
         RETURN_FALSE;
321
     }
322
 
323
@@ -1550,7 +1590,7 @@ PHP_METHOD(Redis, lInsert)
324
 		RETURN_NULL();
325
 	}
326
 
327
-	if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
328
+	if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
329
 		RETURN_FALSE;
330
 	}
331
 	
332
@@ -1599,7 +1639,7 @@ generic_pop_function(INTERNAL_FUNCTION_PARAMETERS, char *keyword, int keyword_le
333
         RETURN_FALSE;
334
     }
335
 
336
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
337
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
338
         RETURN_FALSE;
339
     }
340
 
341
@@ -1689,7 +1729,7 @@ PHP_METHOD(Redis, lSize)
342
         RETURN_FALSE;
343
     }
344
 
345
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
346
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
347
         RETURN_FALSE;
348
     }
349
 
350
@@ -1725,7 +1765,7 @@ PHP_METHOD(Redis, lRemove)
351
         RETURN_NULL();
352
     }
353
 
354
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
355
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
356
         RETURN_FALSE;
357
     }
358
 
359
@@ -1761,7 +1801,7 @@ PHP_METHOD(Redis, listTrim)
360
         RETURN_FALSE;
361
     }
362
 
363
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
364
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
365
         RETURN_FALSE;
366
     }
367
 
368
@@ -1794,7 +1834,7 @@ PHP_METHOD(Redis, lGet)
369
         RETURN_NULL();
370
     }
371
 
372
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
373
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
374
         RETURN_FALSE;
375
     }
376
 
377
@@ -1827,7 +1867,7 @@ PHP_METHOD(Redis, lGetRange)
378
         RETURN_FALSE;
379
     }
380
 
381
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
382
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
383
         RETURN_FALSE;
384
     }
385
 
386
@@ -1878,7 +1918,7 @@ PHP_METHOD(Redis, sSize)
387
         RETURN_FALSE;
388
     }
389
 
390
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
391
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
392
         RETURN_FALSE;
393
     }
394
 
395
@@ -1930,7 +1970,7 @@ PHP_METHOD(Redis, sMove)
396
         RETURN_FALSE;
397
     }
398
 
399
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
400
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
401
         RETURN_FALSE;
402
     }
403
 
404
@@ -1985,7 +2025,7 @@ PHP_METHOD(Redis, sContains)
405
         return;
406
     }
407
 
408
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
409
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
410
         RETURN_FALSE;
411
     }
412
 
413
@@ -2018,7 +2058,7 @@ PHP_METHOD(Redis, sMembers)
414
         RETURN_FALSE;
415
     }
416
 
417
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
418
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
419
         RETURN_FALSE;
420
     }
421
 
422
@@ -2059,7 +2099,7 @@ PHPAPI int generic_multiple_args_cmd(INTERNAL_FUNCTION_PARAMETERS, char *keyword
423
     }
424
 
425
 	/* get redis socket */
426
-    if (redis_sock_get(getThis(), out_sock TSRMLS_CC) < 0) {
427
+    if (redis_sock_get(getThis(), out_sock TSRMLS_CC, 0) < 0) {
428
 		ZVAL_BOOL(return_value, 0);
429
 		return FAILURE;
430
     }
431
@@ -2392,7 +2432,7 @@ PHP_METHOD(Redis, sort) {
432
         RETURN_FALSE;
433
     }
434
 
435
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
436
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
437
         RETURN_FALSE;
438
     }
439
 
440
@@ -2603,7 +2643,7 @@ PHPAPI void generic_sort_cmd(INTERNAL_FUNCTION_PARAMETERS, char *sort, int use_a
441
         RETURN_FALSE;
442
     }
443
 
444
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
445
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
446
         RETURN_FALSE;
447
     }
448
     if(key_len == 0) {
449
@@ -2798,7 +2838,7 @@ PHPAPI void generic_expire_cmd(INTERNAL_FUNCTION_PARAMETERS, char *keyword, int
450
         RETURN_FALSE;
451
     }
452
 
453
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
454
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
455
         RETURN_FALSE;
456
     }
457
 
458
@@ -2847,7 +2887,7 @@ PHP_METHOD(Redis, lSet) {
459
         RETURN_FALSE;
460
     }
461
 
462
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
463
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
464
         RETURN_FALSE;
465
     }
466
 
467
@@ -2874,7 +2914,7 @@ PHPAPI void generic_empty_cmd_impl(INTERNAL_FUNCTION_PARAMETERS, char *cmd, int
468
         RETURN_FALSE;
469
     }
470
 
471
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
472
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
473
         RETURN_FALSE;
474
     }
475
 
476
@@ -2921,7 +2961,7 @@ PHPAPI void generic_empty_long_cmd(INTERNAL_FUNCTION_PARAMETERS, char *cmd, int
477
         RETURN_FALSE;
478
     }
479
 
480
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
481
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
482
         RETURN_FALSE;
483
     }
484
 
485
@@ -2988,7 +3028,7 @@ PHP_METHOD(Redis, auth) {
486
         RETURN_FALSE;
487
     }
488
 
489
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
490
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
491
         RETURN_FALSE;
492
     }
493
 
494
@@ -3017,7 +3057,7 @@ PHP_METHOD(Redis, persist) {
495
         RETURN_FALSE;
496
     }
497
 
498
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
499
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
500
         RETURN_FALSE;
501
     }
502
 
503
@@ -3048,7 +3088,7 @@ PHP_METHOD(Redis, ttl) {
504
         RETURN_FALSE;
505
     }
506
 
507
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
508
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
509
         RETURN_FALSE;
510
     }
511
 
512
@@ -3079,7 +3119,7 @@ PHP_METHOD(Redis, info) {
513
         RETURN_FALSE;
514
     }
515
 
516
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
517
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
518
         RETURN_FALSE;
519
     }
520
 
521
@@ -3118,7 +3158,7 @@ PHP_METHOD(Redis, select) {
522
         RETURN_FALSE;
523
     }
524
 
525
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
526
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
527
         RETURN_FALSE;
528
     }
529
 
530
@@ -3148,7 +3188,7 @@ PHP_METHOD(Redis, move) {
531
         RETURN_FALSE;
532
     }
533
 
534
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
535
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
536
         RETURN_FALSE;
537
     }
538
 
539
@@ -3183,7 +3223,7 @@ generic_mset(INTERNAL_FUNCTION_PARAMETERS, char *kw, void (*fun)(INTERNAL_FUNCTI
540
         RETURN_FALSE;
541
     }
542
 
543
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
544
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
545
         RETURN_FALSE;
546
     }
547
 
548
@@ -3307,7 +3347,7 @@ PHP_METHOD(Redis, rpoplpush)
549
     zval *object;
550
     RedisSock *redis_sock;
551
     char *srckey = NULL, *dstkey = NULL;
552
-    int srckey_len, dstkey_len, cmd_len;
553
+    int srckey_len, dstkey_len;
554
 
555
     if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oss",
556
                                      &object, redis_ce, &srckey, &srckey_len,
557
@@ -3315,7 +3355,7 @@ PHP_METHOD(Redis, rpoplpush)
558
         RETURN_FALSE;
559
     }
560
 
561
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
562
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
563
         RETURN_FALSE;
564
     }
565
 
566
@@ -3339,7 +3379,7 @@ PHP_METHOD(Redis, brpoplpush)
567
         RETURN_FALSE;
568
     }
569
 
570
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
571
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
572
         RETURN_FALSE;
573
     }
574
 
575
@@ -3367,7 +3407,7 @@ PHP_METHOD(Redis, zAdd) {
576
 	int argc = ZEND_NUM_ARGS(), i;
577
 
578
 	/* get redis socket */
579
-    if (redis_sock_get(getThis(), &redis_sock TSRMLS_CC) < 0) {
580
+    if (redis_sock_get(getThis(), &redis_sock TSRMLS_CC, 0) < 0) {
581
         RETURN_FALSE;
582
     }
583
 
584
@@ -3466,7 +3506,7 @@ PHP_METHOD(Redis, zRange)
585
         RETURN_FALSE;
586
     }
587
 
588
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
589
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
590
         RETURN_FALSE;
591
     }
592
 
593
@@ -3529,7 +3569,7 @@ PHP_METHOD(Redis, zDeleteRangeByScore)
594
         RETURN_FALSE;
595
     }
596
 
597
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
598
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
599
         RETURN_FALSE;
600
     }
601
 
602
@@ -3562,7 +3602,7 @@ PHP_METHOD(Redis, zDeleteRangeByRank)
603
         RETURN_FALSE;
604
     }
605
 
606
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
607
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
608
         RETURN_FALSE;
609
     }
610
 
611
@@ -3596,7 +3636,7 @@ PHP_METHOD(Redis, zReverseRange)
612
         RETURN_FALSE;
613
     }
614
 
615
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
616
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
617
         RETURN_FALSE;
618
     }
619
 
620
@@ -3649,7 +3689,7 @@ redis_generic_zrange_by_score(INTERNAL_FUNCTION_PARAMETERS, char *keyword) {
621
         RETURN_FALSE;
622
     }
623
 
624
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
625
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
626
         RETURN_FALSE;
627
     }
628
 
629
@@ -3755,7 +3795,7 @@ PHP_METHOD(Redis, zCount)
630
         RETURN_FALSE;
631
     }
632
 
633
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
634
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
635
         RETURN_FALSE;
636
     }
637
 
638
@@ -3786,7 +3826,7 @@ PHP_METHOD(Redis, zCard)
639
         RETURN_FALSE;
640
     }
641
 
642
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
643
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
644
         RETURN_FALSE;
645
     }
646
 
647
@@ -3820,7 +3860,7 @@ PHP_METHOD(Redis, zScore)
648
         RETURN_FALSE;
649
     }
650
 
651
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
652
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
653
         RETURN_FALSE;
654
     }
655
 
656
@@ -3853,7 +3893,7 @@ PHPAPI void generic_rank_method(INTERNAL_FUNCTION_PARAMETERS, char *keyword, int
657
         RETURN_FALSE;
658
     }
659
 
660
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
661
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
662
         RETURN_FALSE;
663
     }
664
 
665
@@ -3903,7 +3943,7 @@ PHPAPI void generic_incrby_method(INTERNAL_FUNCTION_PARAMETERS, char *keyword, i
666
         RETURN_FALSE;
667
     }
668
 
669
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
670
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
671
         RETURN_FALSE;
672
     }
673
 
674
@@ -3948,7 +3988,7 @@ PHPAPI void generic_z_command(INTERNAL_FUNCTION_PARAMETERS, char *command, int c
675
 		RETURN_FALSE;
676
 	}
677
 
678
-    if(redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
679
+    if(redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
680
 		RETURN_FALSE;
681
     }
682
 
683
@@ -4126,7 +4166,7 @@ generic_hset(INTERNAL_FUNCTION_PARAMETERS, char *kw, void (*fun)(INTERNAL_FUNCTI
684
         RETURN_FALSE;
685
     }
686
 
687
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
688
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
689
         RETURN_FALSE;
690
     }
691
 
692
@@ -4170,7 +4210,7 @@ PHP_METHOD(Redis, hGet)
693
         RETURN_FALSE;
694
     }
695
 
696
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
697
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
698
         RETURN_FALSE;
699
     }
700
 	key_free = redis_key_prefix(redis_sock, &key, &key_len TSRMLS_CC);
701
@@ -4200,7 +4240,7 @@ PHP_METHOD(Redis, hLen)
702
         RETURN_FALSE;
703
     }
704
 
705
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
706
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
707
         RETURN_FALSE;
708
     }
709
 
710
@@ -4232,7 +4272,7 @@ generic_hash_command_2(INTERNAL_FUNCTION_PARAMETERS, char *keyword, int keyword_
711
             return NULL;
712
     }
713
 
714
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
715
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
716
             ZVAL_BOOL(return_value, 0);
717
             return NULL;
718
     }
719
@@ -4293,7 +4333,7 @@ generic_hash_command_1(INTERNAL_FUNCTION_PARAMETERS, char *keyword, int keyword_
720
             return NULL;
721
     }
722
 
723
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
724
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
725
             ZVAL_BOOL(return_value, 0);
726
             return NULL;
727
     }
728
@@ -4441,7 +4481,7 @@ PHP_METHOD(Redis, hIncrBy)
729
         RETURN_FALSE;
730
     }
731
 
732
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
733
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
734
         RETURN_FALSE;
735
     }
736
 
737
@@ -4492,7 +4532,7 @@ PHP_METHOD(Redis, hMget) {
738
         RETURN_FALSE;
739
     }
740
 
741
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
742
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
743
         RETURN_FALSE;
744
     }
745
     nb_fields = zend_hash_num_elements(Z_ARRVAL_P(z_array));
746
@@ -4572,7 +4612,7 @@ PHP_METHOD(Redis, hMset)
747
         RETURN_FALSE;
748
     }
749
 
750
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
751
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
752
         RETURN_FALSE;
753
     }
754
 
755
@@ -4681,7 +4721,7 @@ PHP_METHOD(Redis, multi)
756
 
757
     /* if the flag is activated, send the command, the reply will be "QUEUED" or -ERR */
758
 
759
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
760
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
761
         RETURN_FALSE;
762
     }
763
 
764
@@ -4730,7 +4770,7 @@ PHP_METHOD(Redis, discard)
765
         RETURN_FALSE;
766
     }
767
 
768
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
769
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
770
         RETURN_FALSE;
771
     }
772
 
773
@@ -4832,7 +4872,7 @@ PHP_METHOD(Redis, exec)
774
                                      &object, redis_ce) == FAILURE) {
775
         RETURN_FALSE;
776
     }
777
-   	if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
778
+   	if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
779
        	RETURN_FALSE;
780
     }
781
 
782
@@ -4931,7 +4971,7 @@ PHP_METHOD(Redis, pipeline)
783
     }
784
 
785
     /* if the flag is activated, send the command, the reply will be "QUEUED" or -ERR */
786
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
787
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
788
         RETURN_FALSE;
789
     }
790
 	redis_sock->mode = PIPELINE;
791
@@ -4963,7 +5003,7 @@ PHP_METHOD(Redis, publish)
792
         RETURN_NULL();
793
     }
794
 
795
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
796
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
797
         RETURN_FALSE;
798
     }
799
 
800
@@ -5004,7 +5044,7 @@ PHP_METHOD(Redis, subscribe)
801
 		RETURN_FALSE;	
802
 	}
803
 
804
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
805
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
806
         RETURN_FALSE;
807
     }
808
 
809
@@ -5164,7 +5204,7 @@ PHP_METHOD(Redis, unsubscribe)
810
 									 &object, redis_ce, &array) == FAILURE) {
811
 		RETURN_FALSE;	
812
 	}
813
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
814
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
815
         RETURN_FALSE;
816
     }
817
 
818
@@ -5248,7 +5288,7 @@ PHP_METHOD(Redis, slaveof)
819
 									 &object, redis_ce, &host, &host_len, &port) == FAILURE) {
820
 		RETURN_FALSE;
821
 	}
822
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
823
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
824
         RETURN_FALSE;
825
     }
826
 
827
@@ -5280,7 +5320,7 @@ PHP_METHOD(Redis, object)
828
 									 &object, redis_ce, &info, &info_len, &key, &key_len) == FAILURE) {
829
 		RETURN_FALSE;
830
 	}
831
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
832
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
833
         RETURN_FALSE;
834
     }
835
 
836
@@ -5318,7 +5358,7 @@ PHP_METHOD(Redis, getOption)  {
837
 		RETURN_FALSE;
838
 	}
839
 
840
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
841
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
842
         RETURN_FALSE;
843
     }
844
 
845
@@ -5354,7 +5394,7 @@ PHP_METHOD(Redis, setOption) {
846
 		RETURN_FALSE;
847
 	}
848
 
849
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
850
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
851
         RETURN_FALSE;
852
     }
853
 
854
@@ -5414,7 +5454,7 @@ PHP_METHOD(Redis, config)
855
 		RETURN_FALSE;
856
 	}
857
 
858
-    if (redis_sock_get(object, &redis_sock TSRMLS_CC) < 0) {
859
+    if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) {
860
         RETURN_FALSE;
861
     }
862
 
863
diff --git a/tests/TestRedis.php b/tests/TestRedis.php
864
index 1033b01..46af355 100644
865
--- a/tests/TestRedis.php
866
+++ tests/TestRedis.php
867
@@ -115,6 +115,12 @@ class Redis_Test extends TestSuite
868
 	 $this->assertEquals($s, $this->redis->get('x'));
869
     }
870
 
871
+	public function testEcho() {
872
+		$this->assertEquals($this->redis->echo("hello"), "hello");
873
+		$this->assertEquals($this->redis->echo(""), "");
874
+		$this->assertEquals($this->redis->echo(" 0123 "), " 0123 ");
875
+	}
876
+
877
     public function testErr() {
878
 
879
 	 $this->redis->set('x', '-ERR');

Return to bug 167924