@@ -95,6 +95,7 @@ zend_function_entry redis_functions[] = {
95
95
96
96
/* 1.1 */
97
97
PHP_ME (Redis , mset , NULL , ZEND_ACC_PUBLIC )
98
+ PHP_ME (Redis , rpoplpush , NULL , ZEND_ACC_PUBLIC )
98
99
99
100
/* aliases */
100
101
PHP_MALIAS (Redis , open , connect , NULL , ZEND_ACC_PUBLIC )
@@ -704,7 +705,7 @@ PHP_METHOD(Redis, set)
704
705
zval * object ;
705
706
RedisSock * redis_sock ;
706
707
char * key = NULL , * val = NULL , * cmd ;
707
- int key_len , val_len , cmd_len , count ;
708
+ int key_len , val_len , cmd_len ;
708
709
709
710
if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Oss" ,
710
711
& object , redis_ce , & key , & key_len ,
@@ -734,7 +735,7 @@ PHP_METHOD(Redis, setnx)
734
735
zval * object ;
735
736
RedisSock * redis_sock ;
736
737
char * key = NULL , * val = NULL , * cmd ;
737
- int key_len , val_len , cmd_len , count ;
738
+ int key_len , val_len , cmd_len ;
738
739
739
740
if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Oss" ,
740
741
& object , redis_ce , & key , & key_len ,
@@ -1790,7 +1791,7 @@ PHPAPI int generic_multiple_args_cmd(INTERNAL_FUNCTION_PARAMETERS, char *keyword
1790
1791
{
1791
1792
zval * object , * * z_args ;
1792
1793
char * * keys , * cmd ;
1793
- int cmd_len , count , * keys_len ;
1794
+ int cmd_len , * keys_len ;
1794
1795
int i , argc = ZEND_NUM_ARGS ();
1795
1796
1796
1797
if (argc < min_argc ) {
@@ -2066,7 +2067,7 @@ PHP_METHOD(Redis, setTimeout) {
2066
2067
zval * object ;
2067
2068
RedisSock * redis_sock ;
2068
2069
char * key = NULL , * cmd ;
2069
- int key_len , cmd_len , count ;
2070
+ int key_len , cmd_len ;
2070
2071
long timeout ;
2071
2072
2072
2073
if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Osl" ,
@@ -2496,4 +2497,40 @@ PHP_METHOD(Redis, mset) {
2496
2497
}
2497
2498
/* }}} */
2498
2499
2500
+
2501
+ /* {{{ proto string Redis::rpoplpush(string srckey, string dstkey)
2502
+ */
2503
+ PHP_METHOD (Redis , rpoplpush )
2504
+ {
2505
+ zval * object ;
2506
+ RedisSock * redis_sock ;
2507
+ char * srckey = NULL , * dstkey = NULL , * cmd , * response ;
2508
+ int srckey_len , dstkey_len , cmd_len , response_len ;
2509
+
2510
+ if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Oss" ,
2511
+ & object , redis_ce , & srckey , & srckey_len ,
2512
+ & dstkey , & dstkey_len ) == FAILURE ) {
2513
+ RETURN_FALSE ;
2514
+ }
2515
+
2516
+ if (redis_sock_get (object , & redis_sock TSRMLS_CC ) < 0 ) {
2517
+ RETURN_FALSE ;
2518
+ }
2519
+
2520
+ cmd_len = redis_cmd_format (& cmd , "RPOPLPUSH %s %d\r\n%s\r\n" ,
2521
+ srckey , srckey_len ,
2522
+ dstkey_len ,
2523
+ dstkey , dstkey_len );
2524
+
2525
+ if (redis_sock_write (redis_sock , cmd , cmd_len ) < 0 ) {
2526
+ efree (cmd );
2527
+ RETURN_FALSE ;
2528
+ }
2529
+ efree (cmd );
2530
+ if ((response = redis_sock_read (redis_sock , & response_len TSRMLS_CC )) == NULL ) {
2531
+ RETURN_FALSE ;
2532
+ }
2533
+ RETURN_STRINGL (response , response_len , 0 );
2534
+ }
2535
+
2499
2536
/* vim: set tabstop=4 expandtab: */
0 commit comments