@@ -3426,43 +3426,31 @@ redis_lpos_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
34263426int redis_smove_cmd (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock ,
34273427 char * * cmd , int * cmd_len , short * slot , void * * ctx )
34283428{
3429- char * src , * dst ;
3430- size_t src_len , dst_len ;
3431- int src_free , dst_free ;
3432- zval * z_val ;
3429+ zend_string * src = NULL , * dst = NULL ;
3430+ smart_string cmdstr = { 0 } ;
3431+ zval * zv = NULL ;
3432+ short slot2 ;
34333433
3434- if ( zend_parse_parameters ( ZEND_NUM_ARGS (), "ssz" , & src , & src_len ,
3435- & dst , & dst_len , & z_val ) == FAILURE )
3436- {
3437- return FAILURE ;
3438- }
3434+ ZEND_PARSE_PARAMETERS_START ( 3 , 3 ) {
3435+ Z_PARAM_STR ( src )
3436+ Z_PARAM_STR ( dst )
3437+ Z_PARAM_ZVAL ( zv )
3438+ } ZEND_PARSE_PARAMETERS_END_EX ( return FAILURE );
34393439
3440- src_free = redis_key_prefix (redis_sock , & src , & src_len );
3441- dst_free = redis_key_prefix (redis_sock , & dst , & dst_len );
3440+ REDIS_CMD_INIT_SSTR_STATIC (& cmdstr , 3 , "SMOVE ");
3441+ redis_cmd_append_sstr_key_zstr (& cmdstr , src , redis_sock , slot );
3442+ redis_cmd_append_sstr_key_zstr (& cmdstr , dst , redis_sock , slot ? & slot2 : NULL);
3443+ redis_cmd_append_sstr_zval (& cmdstr , zv , redis_sock ) ;
34423444
3443- // Protect against a CROSSSLOT error
3444- if (slot ) {
3445- short slot1 = cluster_hash_key (src , src_len );
3446- short slot2 = cluster_hash_key (dst , dst_len );
3447- if (slot1 != slot2 ) {
3448- php_error_docref (0 , E_WARNING ,
3449- "Source and destination keys don't hash to the same slot!" );
3450- if (src_free ) efree (src );
3451- if (dst_free ) efree (dst );
3452- return FAILURE ;
3453- }
3454- * slot = slot1 ;
3445+ if (slot && * slot != slot2 ) {
3446+ php_error_docref (0 , E_WARNING , "Source and destination keys don't hash to the same slot!" );
3447+ efree (cmdstr .c );
3448+ return FAILURE ;
34553449 }
34563450
3457- // Construct command
3458- * cmd_len = REDIS_CMD_SPPRINTF (cmd , "SMOVE" , "ssv" , src , src_len , dst ,
3459- dst_len , z_val );
3460-
3461- // Cleanup
3462- if (src_free ) efree (src );
3463- if (dst_free ) efree (dst );
3451+ * cmd = cmdstr .c ;
3452+ * cmd_len = cmdstr .len ;
34643453
3465- // Success!
34663454 return SUCCESS ;
34673455}
34683456
0 commit comments