@@ -2663,54 +2663,43 @@ PHP_METHOD(Redis, setOption)
26632663/* {{{ proto boolean Redis::config(string op, string key [, mixed value]) */
26642664PHP_METHOD (Redis , config )
26652665{
2666- zval * object ;
2666+ zend_string * op , * key = NULL , * val = NULL ;
2667+ FailableResultCallback cb ;
26672668 RedisSock * redis_sock ;
2668- char * key = NULL , * val = NULL , * cmd , * op = NULL ;
2669- size_t key_len , val_len , op_len ;
2670- enum {CFG_GET , CFG_SET } mode ;
2669+ zval * object ;
26712670 int cmd_len ;
2671+ char * cmd ;
26722672
2673- if (zend_parse_method_parameters (ZEND_NUM_ARGS (), getThis (),
2674- "Oss|s" , & object , redis_ce , & op , & op_len ,
2675- & key , & key_len , & val , & val_len ) == FAILURE )
2673+ if (zend_parse_method_parameters (ZEND_NUM_ARGS (), getThis (), "OS|SS" , & object ,
2674+ redis_ce , & op , & key , & val ) == FAILURE )
26762675 {
26772676 RETURN_FALSE ;
26782677 }
26792678
2680- /* op must be GET or SET */
2681- if (strncasecmp (op , "GET" , 3 ) == 0 ) {
2682- mode = CFG_GET ;
2683- } else if (strncasecmp (op , "SET" , 3 ) == 0 ) {
2684- mode = CFG_SET ;
2685- } else {
2686- RETURN_FALSE ;
2687- }
2688-
26892679 if ((redis_sock = redis_sock_get (object , 0 )) == NULL ) {
26902680 RETURN_FALSE ;
26912681 }
26922682
2693- if (mode == CFG_GET && val == NULL ) {
2694- cmd_len = REDIS_SPPRINTF (& cmd , "CONFIG" , "ss" , op , op_len , key , key_len );
2695-
2696- REDIS_PROCESS_REQUEST (redis_sock , cmd , cmd_len )
2697- if (IS_ATOMIC (redis_sock )) {
2698- redis_mbulk_reply_zipped_raw (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock , NULL , NULL );
2699- }
2700- REDIS_PROCESS_RESPONSE (redis_mbulk_reply_zipped_raw );
2701-
2702- } else if (mode == CFG_SET && val != NULL ) {
2703- cmd_len = REDIS_SPPRINTF (& cmd , "CONFIG" , "sss" , op , op_len , key , key_len , val , val_len );
2704-
2705- REDIS_PROCESS_REQUEST (redis_sock , cmd , cmd_len )
2706- if (IS_ATOMIC (redis_sock )) {
2707- redis_boolean_response (
2708- INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock , NULL , NULL );
2709- }
2710- REDIS_PROCESS_RESPONSE (redis_boolean_response );
2683+ if (zend_string_equals_literal_ci (op , "GET" ) && key != NULL ) {
2684+ cmd_len = REDIS_SPPRINTF (& cmd , "CONFIG" , "SS" , op , key );
2685+ cb = redis_mbulk_reply_zipped_raw ;
2686+ } else if (zend_string_equals_literal_ci (op , "RESETSTAT" )) {
2687+ cmd_len = REDIS_SPPRINTF (& cmd , "CONFIG" , "s" , ZEND_STRL ("RESETSTAT" ));
2688+ cb = redis_boolean_response ;
2689+ } else if (zend_string_equals_literal_ci (op , "SET" ) && key != NULL && val != NULL ) {
2690+ cmd_len = REDIS_SPPRINTF (& cmd , "CONFIG" , "SSS" , op , key , val );
2691+ cb = redis_boolean_response ;
27112692 } else {
27122693 RETURN_FALSE ;
27132694 }
2695+
2696+ REDIS_PROCESS_REQUEST (redis_sock , cmd , cmd_len )
2697+ if (IS_ATOMIC (redis_sock )) {
2698+ cb (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock , NULL , NULL );
2699+ }
2700+ REDIS_PROCESS_RESPONSE (redis_boolean_response );
2701+
2702+ return ;
27142703}
27152704/* }}} */
27162705
0 commit comments