@@ -2932,105 +2932,24 @@ PHP_METHOD(Redis, object)
29322932/* {{{ proto string Redis::getOption($option) */
29332933PHP_METHOD (Redis , getOption ) {
29342934 RedisSock * redis_sock ;
2935- zval * object ;
2936- long option ;
29372935
2938- if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Ol" ,
2939- & object , redis_ce , & option ) == FAILURE ) {
2936+ if (redis_sock_get (getThis (), & redis_sock TSRMLS_CC , 0 ) < 0 ) {
29402937 RETURN_FALSE ;
29412938 }
29422939
2943- if (redis_sock_get (object , & redis_sock TSRMLS_CC , 0 ) < 0 ) {
2944- RETURN_FALSE ;
2945- }
2946-
2947- switch (option ) {
2948- case REDIS_OPT_SERIALIZER :
2949- RETURN_LONG (redis_sock -> serializer );
2950- case REDIS_OPT_PREFIX :
2951- if (redis_sock -> prefix ) {
2952- RETURN_STRINGL (redis_sock -> prefix , redis_sock -> prefix_len , 1 );
2953- }
2954- RETURN_NULL ();
2955- case REDIS_OPT_READ_TIMEOUT :
2956- RETURN_DOUBLE (redis_sock -> read_timeout );
2957- case REDIS_OPT_SCAN :
2958- RETURN_LONG (redis_sock -> scan );
2959- default :
2960- RETURN_FALSE ;
2961- }
2940+ redis_getoption_handler (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock );
29622941}
29632942/* }}} */
29642943
29652944/* {{{ proto string Redis::setOption(string $option, mixed $value) */
29662945PHP_METHOD (Redis , setOption ) {
29672946 RedisSock * redis_sock ;
2968- zval * object ;
2969- long option , val_long ;
2970- char * val_str ;
2971- int val_len ;
2972- struct timeval read_tv ;
29732947
2974- if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (),
2975- "Ols" , & object , redis_ce , & option ,
2976- & val_str , & val_len ) == FAILURE )
2977- {
2978- RETURN_FALSE ;
2979- }
2980-
2981- if (redis_sock_get (object , & redis_sock TSRMLS_CC , 0 ) < 0 ) {
2948+ if (redis_sock_get (getThis (), & redis_sock TSRMLS_CC , 0 )< 0 ) {
29822949 RETURN_FALSE ;
29832950 }
29842951
2985- switch (option ) {
2986- case REDIS_OPT_SERIALIZER :
2987- val_long = atol (val_str );
2988- if (val_long == REDIS_SERIALIZER_NONE
2989- #ifdef HAVE_REDIS_IGBINARY
2990- || val_long == REDIS_SERIALIZER_IGBINARY
2991- #endif
2992- || val_long == REDIS_SERIALIZER_PHP ) {
2993- redis_sock -> serializer = val_long ;
2994- RETURN_TRUE ;
2995- } else {
2996- RETURN_FALSE ;
2997- }
2998- break ;
2999- case REDIS_OPT_PREFIX :
3000- if (redis_sock -> prefix ) {
3001- efree (redis_sock -> prefix );
3002- }
3003- if (val_len == 0 ) {
3004- redis_sock -> prefix = NULL ;
3005- redis_sock -> prefix_len = 0 ;
3006- } else {
3007- redis_sock -> prefix_len = val_len ;
3008- redis_sock -> prefix = ecalloc (1 + val_len , 1 );
3009- memcpy (redis_sock -> prefix , val_str , val_len );
3010- }
3011- RETURN_TRUE ;
3012- case REDIS_OPT_READ_TIMEOUT :
3013- redis_sock -> read_timeout = atof (val_str );
3014- if (redis_sock -> stream ) {
3015- read_tv .tv_sec = (time_t )redis_sock -> read_timeout ;
3016- read_tv .tv_usec = (int )((redis_sock -> read_timeout -
3017- read_tv .tv_sec ) * 1000000 );
3018- php_stream_set_option (redis_sock -> stream ,
3019- PHP_STREAM_OPTION_READ_TIMEOUT , 0 ,
3020- & read_tv );
3021- }
3022- RETURN_TRUE ;
3023- case REDIS_OPT_SCAN :
3024- val_long = atol (val_str );
3025- if (val_long == REDIS_SCAN_NORETRY || val_long == REDIS_SCAN_RETRY ) {
3026- redis_sock -> scan = val_long ;
3027- RETURN_TRUE ;
3028- }
3029- RETURN_FALSE ;
3030- break ;
3031- default :
3032- RETURN_FALSE ;
3033- }
2952+ redis_setoption_handler (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock );
30342953}
30352954/* }}} */
30362955
@@ -3691,99 +3610,38 @@ PHP_METHOD(Redis, migrate) {
36913610
36923611/* {{{ proto Redis::_prefix(key) */
36933612PHP_METHOD (Redis , _prefix ) {
3694- zval * object ;
36953613 RedisSock * redis_sock ;
3696- char * key ;
3697- int key_len ;
36983614
3699- // Parse our arguments
3700- if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Os" ,
3701- & object , redis_ce , & key , & key_len )
3702- == FAILURE )
3703- {
3704- RETURN_FALSE ;
3705- }
3706-
3707- // Grab socket
3708- if (redis_sock_get (object , & redis_sock TSRMLS_CC , 0 ) < 0 ) {
3615+ if (redis_sock_get (getThis (), & redis_sock TSRMLS_CC , 0 )< 0 ) {
37093616 RETURN_FALSE ;
37103617 }
37113618
3712- /* Prefix our key if we need to */
3713- if (redis_sock -> prefix != NULL && redis_sock -> prefix_len > 0 ) {
3714- redis_key_prefix (redis_sock , & key , & key_len );
3715- RETURN_STRINGL (key , key_len , 0 );
3716- } else {
3717- RETURN_STRINGL (key , key_len , 1 );
3718- }
3619+ redis_prefix_handler (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock );
37193620}
37203621
37213622/* {{{ proto Redis::_serialize(value) */
37223623PHP_METHOD (Redis , _serialize ) {
3723- zval * object ;
37243624 RedisSock * redis_sock ;
3725- zval * z_val ;
3726- char * val ;
3727- int val_len , val_free ;
3728-
3729- /* Parse arguments */
3730- if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Oz" ,
3731- & object , redis_ce , & z_val ) == FAILURE )
3732- {
3733- RETURN_FALSE ;
3734- }
37353625
3736- /* Grab socket */
3737- if (redis_sock_get (object , & redis_sock TSRMLS_CC , 0 ) < 0 ) {
3626+ // Grab socket
3627+ if (redis_sock_get (getThis () , & redis_sock TSRMLS_CC , 0 ) < 0 ) {
37383628 RETURN_FALSE ;
37393629 }
37403630
3741- // Serialize, which will return a value even if no serializer is set
3742- redis_serialize (redis_sock , z_val , & val , & val_len TSRMLS_CC );
3743-
3744- // Return serialized value. Tell PHP to make a copy as some can be
3745- // interned.
3746- RETVAL_STRINGL (val , val_len , 1 );
3747- if (val_free ) STR_FREE (val );
3631+ redis_serialize_handler (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock );
37483632}
37493633
37503634/* {{{ proto Redis::_unserialize(value) */
37513635PHP_METHOD (Redis , _unserialize ) {
3752- zval * object ;
37533636 RedisSock * redis_sock ;
3754- char * value ;
3755- int value_len ;
3756-
3757- // Parse our arguments
3758- if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Os" ,
3759- & object , redis_ce , & value , & value_len )
3760- == FAILURE )
3761- {
3762- RETURN_FALSE ;
3763- }
37643637
37653638 // Grab socket
3766- if (redis_sock_get (object , & redis_sock TSRMLS_CC , 0 ) < 0 ) {
3639+ if (redis_sock_get (getThis () , & redis_sock TSRMLS_CC , 0 ) < 0 ) {
37673640 RETURN_FALSE ;
37683641 }
37693642
3770- /* We only need to attempt unserialization if we have a serializer running */
3771- if (redis_sock -> serializer != REDIS_SERIALIZER_NONE ) {
3772- zval * z_ret = NULL ;
3773- if (redis_unserialize (redis_sock , value , value_len , & z_ret
3774- TSRMLS_CC ) == 0 )
3775- {
3776- // Badly formed input, throw an execption
3777- zend_throw_exception (redis_exception_ce ,
3778- "Invalid serialized data, or unserialization error" ,
3779- 0 TSRMLS_CC );
3780- RETURN_FALSE ;
3781- }
3782- RETURN_ZVAL (z_ret , 0 , 1 );
3783- } else {
3784- // Just return the value that was passed to us
3785- RETURN_STRINGL (value , value_len , 1 );
3786- }
3643+ redis_unserialize_handler (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock ,
3644+ redis_exception_ce );
37873645}
37883646
37893647/* {{{ proto Redis::getLastError() */
0 commit comments