@@ -2828,25 +2828,23 @@ PHP_METHOD(Redis, evalsha) {
28282828
28292829PHP_REDIS_API int
28302830redis_build_script_exists_cmd (char * * ret , zval * argv , int argc ) {
2831- /* Our command length and iterator */
2832- int cmd_len = 0 , i ;
2831+ smart_string cmd = {0 };
2832+ zend_string * zstr ;
2833+ int i ;
28332834
28342835 // Start building our command
2835- cmd_len = redis_cmd_format_header (ret , "SCRIPT" , argc + 1 );
2836- cmd_len = redis_cmd_append_str (ret , cmd_len , "EXISTS" , 6 );
2837-
2838- /* Iterate our arguments */
2839- for (i = 0 ;i < argc ;i ++ ) {
2840- zend_string * zstr = zval_get_string (& argv [i ]);
2841-
2842- // Append this script sha to our SCRIPT EXISTS command
2843- cmd_len = redis_cmd_append_str (ret , cmd_len , zstr -> val , zstr -> len );
2836+ REDIS_CMD_INIT_SSTR_STATIC (& cmd , 1 + argc , "SCRIPT" );
2837+ redis_cmd_append_sstr (& cmd , "EXISTS" , 6 );
28442838
2839+ for (i = 0 ; i < argc ; i ++ ) {
2840+ zstr = zval_get_string (& argv [i ]);
2841+ redis_cmd_append_sstr (& cmd , zstr -> val , zstr -> len );
28452842 zend_string_release (zstr );
28462843 }
28472844
28482845 /* Success */
2849- return cmd_len ;
2846+ * ret = cmd .c ;
2847+ return cmd .len ;
28502848}
28512849
28522850/* {{{ proto status Redis::script('flush')
@@ -3275,12 +3273,13 @@ PHP_REDIS_API int
32753273redis_build_scan_cmd (char * * cmd , REDIS_SCAN_TYPE type , char * key , int key_len ,
32763274 int iter , char * pattern , int pattern_len , int count )
32773275{
3276+ smart_string cmdstr = {0 };
32783277 char * keyword ;
3279- int arg_count , cmd_len ;
3278+ int argc ;
32803279
32813280 /* Count our arguments +1 for key if it's got one, and + 2 for pattern */
32823281 /* or count given that they each carry keywords with them. */
3283- arg_count = 1 + (key_len > 0 ) + (pattern_len > 0 ? 2 : 0 ) + (count > 0 ? 2 : 0 );
3282+ argc = 1 + (key_len > 0 ) + (pattern_len > 0 ? 2 : 0 ) + (count > 0 ? 2 : 0 );
32843283
32853284 /* Turn our type into a keyword */
32863285 switch (type ) {
@@ -3300,32 +3299,25 @@ redis_build_scan_cmd(char **cmd, REDIS_SCAN_TYPE type, char *key, int key_len,
33003299 }
33013300
33023301 /* Start the command */
3303- cmd_len = redis_cmd_format_header (cmd , keyword , arg_count );
3304-
3305- /* Add the key in question if we have one */
3306- if (key_len ) {
3307- cmd_len = redis_cmd_append_str (cmd , cmd_len , key , key_len );
3308- }
3309-
3310- /* Add our iterator */
3311- cmd_len = redis_cmd_append_int (cmd , cmd_len , iter );
3302+ redis_cmd_init_sstr (& cmdstr , argc , keyword , strlen (keyword ));
3303+ if (key_len ) redis_cmd_append_sstr (& cmdstr , key , key_len );
3304+ redis_cmd_append_sstr_int (& cmdstr , iter );
33123305
33133306 /* Append COUNT if we've got it */
33143307 if (count ) {
3315- cmd_len = redis_cmd_append_str (cmd , cmd_len , "COUNT" ,
3316- sizeof ("COUNT" )- 1 );
3317- cmd_len = redis_cmd_append_int (cmd , cmd_len , count );
3308+ REDIS_CMD_APPEND_SSTR_STATIC (& cmdstr , "COUNT" );
3309+ redis_cmd_append_sstr_int (& cmdstr , count );
33183310 }
33193311
33203312 /* Append MATCH if we've got it */
33213313 if (pattern_len ) {
3322- cmd_len = redis_cmd_append_str (cmd , cmd_len , "MATCH" ,
3323- sizeof ("MATCH" )- 1 );
3324- cmd_len = redis_cmd_append_str (cmd , cmd_len , pattern , pattern_len );
3314+ REDIS_CMD_APPEND_SSTR_STATIC (& cmdstr , "MATCH" );
3315+ redis_cmd_append_sstr (& cmdstr , pattern , pattern_len );
33253316 }
33263317
33273318 /* Return our command length */
3328- return cmd_len ;
3319+ * cmd = cmdstr .c ;
3320+ return cmdstr .len ;
33293321}
33303322
33313323/* {{{ proto redis::scan(&$iterator, [pattern, [count]]) */
0 commit comments